Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Controle de descontos


renanbg

Pergunta

Tenho uma tabela de contas a receber com essa estrutura

    CODIGO            INTEGER
    COD_AGENDAMENTO   INTEGER
    COD_CONVENIO      INTEGER
    PAGO              INTEGER
    TOTAL             DOUBLE PRECISION
    DATA_RECEBIMENTO  DATE
    FORMA_PAGAMENTO   VARCHAR(8)

Ao baixar uma conta, executo isso, para marcar como pago, definir a data que foi pago e a forma de pagamento.

      while not eof do
      begin
        if FieldByName('MARCADO').AsString = 'S' then
        begin
          Edit;
          FieldByName('PAGO').AsInteger := 1;
          FieldByName('DATA_RECEBIMENTO').AsDateTime := Date;
          FieldByName('FORMA_PAGAMENTO').AsString := ComboPagamento.Text;
          Post;
        end;

        Next;
      end;

Em seguida gravo na tabela de movimentação apenas o histórico, que seria mais ou menos assim:

RECEBIMENTO DE FULANO DA SILVA | 150,00

Ocorre que me pediram para botar um campo para desconto. 

Então ao efetuar o recebimento, terei uma divergencia de valores. Suponhamos que eu esteja baixando 3 contas que totalizam 150,00 e forneça um desconto de 10,00.

Na tabela de contas a receber, continuarei tendo 3 contas, agora pagas, com o valor de 50,00 cada. Já na tabela movimentação, terei um lançamento de 140,00.

Ao tirar um relatorio de contas recebidas o usuario pensará que recebeu 150,00, mas recebeu somente 140,00

Como contornar isso?:

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Ocorre que me pediram para botar um campo para desconto

    CODIGO            INTEGER
    COD_AGENDAMENTO   INTEGER
    COD_CONVENIO      INTEGER
    PAGO              INTEGER
    TOTAL             DOUBLE PRECISION
    DATA_RECEBIMENTO  DATE
    FORMA_PAGAMENTO   VARCHAR(8)
    DESCONTO          DOUBLE PRECISION 

Então ao efetuar o recebimento, terei uma divergencia de valores. Suponhamos que eu esteja baixando 3 contas que totalizam 150,00 e forneça um desconto de 10,00.

Voce pode optar por colocar o desconto dividido em cada conta

exemplo:

TOTAL ------------  DESCONTO

50,00  ................3,333

50,00 .................3,333      

50,00 .................3,333  

ou pode optar por lançar somente o desconto

  TOTAL ------------  DESCONTO

50,00  ................0

50,00 ................0

50,00 ................0

.........................10,00

Ao tirar um relatorio de contas recebidas o usuario pensará que recebeu 150,00, mas recebeu somente 140,00     

no QuickReport ou outro relatório, voce simplesmente calcula o somatório do TOTAL - DESCONTO  ... neste caso voce pode usar o componente QRExpr1

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Jhonas.

Creio que a melhor opção seja mesmo o desconto em cada conta. No entanto eu não posso fazer uma divisão simples, como valor desconto / numero de contas, pois terei muitos caracteres após a virgula.

O ideal seria fazer como no calculo de parcelas, mas isso envolve um FOR e não estou conseguindo encaixar esse FOR dentro do WHILE que citei no primeiro post. 

Você consegue me ajudar nisso?

Link para o comentário
Compartilhar em outros sites

  • 0

Creio que a melhor opção seja mesmo o desconto em cada conta

Não creio que seja a melhor opção ...

veja os exempos ... não estou usando banco de dados, mas a lógica é a mesma

 Aqui voce teria no seu banco de dados os lançamentos das contas e o lançamento do desconto  ( um em cada registro da tabela )


 Nesse caso voce soma as contas e subtrai o registro do desconto e pronto

procedure TForm1.Button1Click(Sender: TObject);
var conta1, conta2, conta3, total, desconto : real;
begin
   total := 0;
   desconto := 10.00;

   conta1 := 50.40;
   conta2 := 90.23;
   conta3 := 100.50;

   total := total + conta1;
   total := total + conta2;
   total := total + conta3;

   showmessage('Valor Total = ' + floattostr(total));

   total := total - desconto;

   showmessage('Valor Total com Desconto = ' + floattostr(total));
end;

 

 Aqui voce teria no seu banco de dados os lançamentos das contas e o lançamento do desconto   ( um em cada registro da tabela )

Como voce vai querer o desconto em cada conta, voce teria que usar um For para varrer os registros, para fazer o somatório das contas.

Calcular o percentual de desconto em cada conta e a partir disso calcular o valor de desconto de cada conta,  para depois subtrair do valor de cada conta.

procedure TForm1.Button2Click(Sender: TObject);
var conta1, conta2, conta3, total, desconto : real;
var i : integer;
begin
   total := 0;
   desconto := 10.00;

   conta1 := 50.40;
   conta2 := 90.23;
   conta3 := 100.50;

   total := total + conta1;
   total := total + conta2;
   total := total + conta3;

   showmessage('Valor Total = ' + floattostr(total));

   desconto := desconto / total * 100;

   total := 0;

   total := total + conta1 - (conta1 * desconto / 100);
   total := total + conta2 - (conta2 * desconto / 100);
   total := total + conta3 - (conta3 * desconto / 100);

   showmessage('Valor Total com Desconto = ' + floattostr(total));

end;

 

No entanto eu não posso fazer uma divisão simples, como valor desconto / numero de contas, pois terei muitos caracteres após a virgula.

voce pode limitar o numero de casas decimais pelo FormatFloat ou configura isso na propria tabela no DisplayFormat e no EditFormat do campo colocando " ,0.00;-,0.00  "

voce escolhe qual a melhor maneira de usar

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...