[firebase-br] Arredondamento de Parcelas

adirbhs adirbhs em terra.com.br
Ter Set 26 10:33:03 -03 2006


Eu tenho no programa onde o cliente digita o numero de parcelas a ser dividido o valor.
Contador := 1;
while Contador <= Parcelas.Value do
    begin
      if Contador < Parcelas.value then
        begin
          Str((TotalGeral) / Parcelas.value:15:2, ValorParcela);
          DecimalSeparator := '.';
          TMPFormaPgto.FieldByName('Valor').asstring := ValorParcela;
          DecimalSeparator := ',';
          Total := Total + TMPFormaPgto.FieldByName('Valor').value;
        end
      else
        // A última parcela
          TMPFormaPgto.FieldByName('Valor').value := (TotalGeral) - Total;
    end;
Sendo:
Contador: Var Integer;
Parcelas : TSpinEdit onde fica o numero de parcelas.
TotalGeral : Var Currrency onde pego o valor total a ser dividido
ValorParcela : Var Currrency onde pego o valor Valor da Parcela
TMPFormaPgto : Tabela Temporaria q uso.
Acredito q vc fazendo suas adptações irá funcionar perfeitamente.
Adir Martins

> galera, to com um dilema.
> 
> tenho uma venda de R$855,00 e que é pago R$12,33
> Restando R$842,67 que serão lançadas duas parcelas.
> Dividindo R$ 842,67 por 2 fica = R$421,335 que no
> Delphi arredonda para R$421,34 Multiplicando R$421,34 * 2 = 842,68
> ou seja R$ 0,01 de diferença a mais. tentei de todas as formas fazer no 
> delphi e não consegui, pois ele não enxerga a diferença.
> 
> tentei fazer uma SP e também não consegui.
> alguém poderia me dar uma luz?
> 
> Segue em anexo a SP:
> 
> SET TERM ^ ;
> 
> CREATE PROCEDURE PRC_GERAR_PARCELAS (
> P_COD_VENDA INTEGER)
> AS
> BEGIN
> EXIT;
> END^
> 
> SET TERM ; ^
> 
> 
> SET TERM ^ ;
> 
> ALTER PROCEDURE PRC_GERAR_PARCELAS (
> P_COD_VENDA INTEGER)
> AS
> DECLARE VARIABLE V_COD_COND_PGTO INTEGER;
> DECLARE VARIABLE V_COD_CLIENTE INTEGER;
> DECLARE VARIABLE V_VENCIMENTO DATE;
> DECLARE VARIABLE V_DTA_ENTREGA DATE;
> DECLARE VARIABLE V_QTDE_PARC INTEGER;
> DECLARE VARIABLE V_INT_DIAS INTEGER;
> DECLARE VARIABLE V_VLR_PARCELA_N NUMERIC(18,2);
> DECLARE VARIABLE I INTEGER;
> DECLARE VARIABLE V_VLR_PARCELA FLOAT;
> DECLARE VARIABLE V_TOTAL_VENDA NUMERIC(18,2);
> DECLARE VARIABLE V_DIFERENCA INTEGER;
> DECLARE VARIABLE V_TOTAL_VENDA_R NUMERIC(18,2);
> DECLARE VARIABLE V_PRIM_VENC INTEGER;
> begin
> delete from cta_receber
> where COD_VENDA = :p_cod_venda;
> 
> select COD_CLIENTE, cod_pgto, total_venda, dta_entrega
> from venda
> where COD_VENDA = :p_cod_venda
> into :v_cod_cliente, :v_cod_cond_pgto, :v_total_venda, :v_dta_entrega;
> 
> select intervalo_dias,primeiro_venc, qtd_parc
> from cond_pgto
> where cod_pgto = :v_cod_cond_pgto
> into :v_int_dias, :v_prim_venc, :v_qtde_parc;
> 
> v_vlr_parcela = :v_total_venda / :v_qtde_parc;
> 
> v_vlr_parcela_n = cast(:v_vlr_parcela as numeric(18,2));
> 
> v_vlr_parcela = cast(:v_vlr_parcela as float);
> 
> v_total_venda_r = :v_vlr_parcela * :v_qtde_parc;
> 
> v_diferenca = :v_total_venda - :v_total_venda_r;
> 
> if (:v_total_venda_r + :v_diferenca > :v_total_venda) then
> begin
> v_diferenca = :V_DIFERENCA * (-1);
> end
> 
> if (:v_qtde_parc = 0) then
> begin
> v_vencimento = current_date;
> insert into cta_receber
> (cod_cliente, cod_venda, com_entrada, desconto, dta_lanc, 
> dta_venc, pago, taxa_juro, total_pago, total_venda,valor_parcela)
> values
> (:v_cod_cliente, :p_cod_venda, 'N', 0, current_date, 
> :v_vencimento, 'N', 0, 0, :v_total_venda,:v_vlr_parcela_n);
> end
> else if (:v_qtde_parc > 0) then
> begin
> I = 1;
> while (:I <= :v_qtde_parc) do
> begin
> if (:I = 1) then
> begin
> v_vencimento = :v_dta_entrega + (:v_int_dias * :I);
> insert into cta_receber
> (cod_cliente, cod_venda, com_entrada, desconto, 
> dta_lanc, dta_venc, pago, taxa_juro, total_pago, total_venda,valor_parcela)
> values
> (:v_cod_cliente, :p_cod_venda, 'N', 0, current_date, 
> :v_vencimento, 'N', 0, 0, :v_total_venda,:v_vlr_parcela_n + :v_diferenca);
> end
> /*depois lança normalmente*/
> else
> begin
> v_vencimento = :v_dta_entrega + (:v_int_dias * :I);
> insert into cta_receber
> (cod_cliente, cod_venda, com_entrada, desconto, 
> dta_lanc, dta_venc, pago, taxa_juro, total_pago, total_venda,valor_parcela)
> values
> (:v_cod_cliente, :p_cod_venda, 'N', 0, current_date, 
> :v_vencimento, 'N', 0, 0, :v_total_venda,:v_vlr_parcela_n);
> end
> I = I + 1;
> end
> end
> end
> ^
> 
> 
> SET TERM ; ^
> 
> 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 



Mais detalhes sobre a lista de discussão lista