[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