[firebase-br] Problema com retorno da Procedure

Fábio Marques fmarques em nautilus.com.br
Seg Out 20 19:29:21 -03 2008


    Vejo que nos valores de entrada você utiliza DOUBLE PRECISION, algum
motivo para não usar NUMERIC(15,2)?

Abraços,

-- 
F. Marques
Systems Analyst/IT Consultant
E-mail/MSN: fmarques em nautilus.com.br
Home Page: www.nautilus.com.br/~fmarques
Mobile: 91 8208-5996 / ICQ: 267-074-196
Linux Registred User #362204 (debian 4.0 "etch")
Brazilian Computer Society Member #18201

"The box said: Requires MS Windows or better, so I instaled Linux"



Isael Faria Junior wrote:
> Não deu certo
> o estranho e que acabei de fazer um teste passando o valor_unitario de 
> 0,95 e retornei o mesmo, porem ja retornou com o valor de 95.
> Aparentemente o problema e com o valor de entrada, o FB esta 
> desprecando o 0, e deixando só o valor resto do valor.
>
> Kleber Caneva escreveu:
>> Tente trocar tudo que vc divide por 100 para 100.00
>>
>>
>> []´s
>>
>> Kléber Caneva
>>
>> ----- Original Message ----- From: "Isael Faria Junior" 
>> <isael em stetika.com.br>
>> To: "FireBase" <lista em firebase.com.br>
>> Sent: Monday, October 20, 2008 1:21 PM
>> Subject: [firebase-br] Problema com retorno da Procedure
>>
>>
>> Pessoal,
>>
>> tenho uma procedure que me retorna valores após o calculo,
>> porem quando uso valores inteiros para calculo ele me retorna valores
>> corretos, mais quando passo valores com virgula ele multiplica o valor
>> por 100,
>> alguem poria me dar uma luz ?
>>
>> Estou pegando o retorno pelo delphi 7, pelo banco o retorna da correto,
>> porem se gravar da um valor diferente
>>
>> Procedure
>> SET TERM ^ ;
>>
>> CREATE PROCEDURE SP_CALCULO_IMPOSTO_NF (
>>     V_SIT_IPI_EMB VARCHAR(1),
>>     V_PER_DESCONTO DOUBLE PRECISION,
>>     V_PESO DOUBLE PRECISION,
>>     V_QTD DOUBLE PRECISION,
>>     V_VAL_UNITARIO DOUBLE PRECISION,
>>     V_TIP_OPERACAO INTEGER,
>>     V_ID_PRODUTO INTEGER,
>>     V_PER_IPI DOUBLE PRECISION,
>>     V_PER_ICMS DOUBLE PRECISION)
>> RETURNS (
>>     V_VALOR_IPI NUMERIC(15,2),
>>     V_VALOR_ICMS NUMERIC(15,2),
>>     V_VALOR_DESCONTO NUMERIC(15,2),
>>     V_VALOR_TOTAL NUMERIC(15,2),
>>     V_VAL_BASE_IPI NUMERIC(15,2),
>>     V_VAL_ISENTA_IPI NUMERIC(15,2),
>>     V_VAL_OUTRAS_IPI NUMERIC(15,2),
>>     V_VAL_BASE_ICMS NUMERIC(15,2),
>>     V_VAL_ISENTA_ICMS NUMERIC(15,2),
>>     V_VAL_OUTRAS_ICMS NUMERIC(15,2))
>> AS
>> DECLARE VARIABLE V_BC_ICMS_ST NUMERIC(15,2);
>> DECLARE VARIABLE V_VAL_ICMS_ST NUMERIC(15,2);
>> DECLARE VARIABLE V_ISENTA_IPI NUMERIC(15,2);
>> DECLARE VARIABLE V_OUT_IPI NUMERIC(15,2);
>> DECLARE VARIABLE V_ISENTA_ICMS NUMERIC(15,2);
>> DECLARE VARIABLE V_OUT_ICMS NUMERIC(15,2);
>> DECLARE VARIABLE V_PER_IVA NUMERIC(15,2);
>> DECLARE VARIABLE V_VALOR_ITEM NUMERIC(15,2);
>> DECLARE VARIABLE V_VAL_MARGEM_AGREGADA NUMERIC(15,2);
>> DECLARE VARIABLE V_PER_BASE_IPI NUMERIC(15,2);
>> DECLARE VARIABLE V_PER_BASE_ICMS NUMERIC(15,2);
>> begin
>>   if (v_peso <> 0) then
>>    v_qtd = v_peso;
>>
>>
>>   SELECT perc_ipi,isenta_ipi,outras_ipi,
>>         perc_icms,isenta_icms,outras_icms
>>    FROM TIPO_OPERACAO
>>    WHERE id_tipo_operacao = :v_tip_operacao
>>   INTO :V_PER_BASE_IPI,:v_isenta_ipi,:v_out_ipi,
>>        :v_per_BASE_icms,:v_isenta_icms,:v_out_icms;
>>
>>
>>   SELECT per_iva FROM PRODUTOS
>>    WHERE ID_PRODUTO = :v_id_produto
>>   INTO :v_per_iva;
>>
>>   if (:v_per_iva IS NULL) then
>>    V_PER_IVA = 0;
>>
>>   v_valor_desconto = :v_val_unitario * (:v_per_desconto/100);
>>
>>   v_val_base_ipi   = ((:v_qtd * :v_val_unitario) - :v_valor_desconto) *
>> (:V_PER_BASE_IPI/100);
>>   v_valor_ipi      = :v_val_base_ipi * (:v_per_ipi/100);
>>   v_val_isenta_ipi = ((:v_qtd * :v_val_unitario) - :v_valor_desconto) *
>> (:v_isenta_ipi/100);
>>   v_val_outras_ipi = ((:v_qtd * :v_val_unitario) - :v_valor_desconto) *
>> (:v_out_ipi/100);
>>
>>   v_val_base_icms   = ((:v_qtd * :v_val_unitario) - :v_valor_desconto) *
>> (:v_per_BASE_icms/100);
>>   v_valor_icms      = :v_val_base_icms * (:v_per_icms/100);
>>   v_val_isenta_icms = ((:v_qtd * :v_val_unitario) - :v_valor_desconto) *
>> (:v_isenta_icms/100);
>>   v_val_outras_icms = ((:v_qtd * :v_val_unitario) - :v_valor_desconto) *
>> (:v_out_icms/100);
>>
>>   v_valor_item      =  (:v_qtd * :v_val_unitario) + v_valor_ipi;
>>
>>   v_valor_total     = (:v_qtd * (:v_val_unitario - :v_valor_desconto));
>>
>>   if (:v_sit_ipi_emb = 'S') then
>>    v_valor_total        = v_valor_total + v_valor_ipi;
>>   else
>>    v_valor_total        = v_valor_total;
>>
>>   if (:v_per_ipi <> 0) then
>>   BEGIN
>>    V_VAL_MARGEM_AGREGADA = :v_valor_item * (:v_per_iva/100);
>>    v_bc_icms_st          = :v_valor_item + :v_val_margem_agregada;
>>    v_val_icms_st         = :v_bc_icms_st * (:v_per_icms/100);
>>    v_val_icms_st         = :v_val_icms_st - v_valor_icms;
>>    v_valor_icms          = :v_val_icms_st;
>>    v_valor_total         = ((:v_qtd * :v_val_unitario)+ v_valor_ipi)+
>> v_valor_icms;
>>   END
>>
>>   suspend;
>> end
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use: 
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use: 
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>> __________ Information from ESET Smart Security, version of virus 
>> signature database 3533 (20081017) __________
>>
>> The message was checked by ESET Smart Security.
>>
>> http://www.eset.com
>> _VAL_UNITARIO DOUBLE PRECISION
>>
>>
>>   
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista