Ir ao conteúdo
  • Cadastre-se

execute procedure no delphi


socho

Posts recomendados

boa tarde estou com um problema no delphi,

ao chamar o execute procedure do firebird, é o seguinte tenho que chamar esta

procedure para calcular os valores das pecas de uma planilha excel para o banco. o execute procedure esta rodando normal o problema é que nao esta salvando nada no banco de dados.

esta é o codigo da procedure

CREATE PROCEDURE P_CALCULAR_PRECO_VENDA (
pcd_empresa char(3),
pcd_filial char(4),
pcd_peca char(14),
pfl_simples char(1),
pcd_tabsug char(2),
pnr_recb char(6),
pcd_tit char(6),
pnr_nf char(9),
pvl_peca numeric(11,5),
ppc_icmse_peca numeric(11,5),
ppc_ipi numeric(11,5),
ppc_impsaid numeric(11,5),
ppc_cofins_saida numeric(11,5),
ppc_pis_saida numeric(11,5),
ppc_mkp numeric(11,5),
ppc_pis_entrada numeric(11,5),
ppc_cofins_entrada numeric(11,5),
ppc_acess numeric(11,5),
ppc_frete numeric(11,5),
ppc_seguro numeric(11,5),
pcd_usu char(10),
pvl_custo_antigo numeric(11,5),
pcd_grupo char(3))
as
declare variable vvl_custo numeric(11,5);
declare variable vicms_entrada numeric(11,5);
declare variable vcus_ipi numeric(11,5);
declare variable vvl_frete numeric(11,5);
declare variable vvl_seguro numeric(11,5);
declare variable vvl_acess numeric(11,5);
declare variable vpis_cofins_ent numeric(11,5);
declare variable vvl_venda numeric(11,5);
declare variable vmargem_lucro numeric(10,5);
declare variable vimposto numeric(11,5);
declare variable vcus_aquis numeric(11,5);
declare variable vcliqcompra numeric(11,5);
declare variable vmkp_indv numeric(11,5);
declare variable vvl_ttmkp numeric(11,5);
declare variable vlucro_peca numeric(10,5);
declare variable vvl_base_sem_imp numeric(11,5);
declare variable vpc_lucro numeric(10,5);
declare variable vdif numeric(11,5);
declare variable vcd_prec char(2);
declare variable vcd_pecaux char(14);
declare variable vvl_min numeric(11,5);
declare variable vnr_casarr smallint;
declare variable vfl_checar1 char(1);
declare variable vfl_checar2 char(1);
declare variable vtp_gprc smallint;
declare variable vnr_seq char(3);
declare variable vnr_seqaux smallint;
declare variable vpc_margem_contr numeric(5,2);
declare variable vpc_icms_estado numeric(5,2);
declare variable vvl_icms_subst numeric(11,5);
begin
vpc_margem_contr=0;
VPC_ICMS_ESTADO =0;
vvl_icms_subst =0;

SELECT a.PC_MARGEM_CONTRIBUICAO FROM tab_classif_fiscal_ipi a
INNER JOIN TAB_PECA b ON(B.CD_PECA=:PCD_PECA)
WHERE a.cd_classif_fiscal_ipi=b.cd_cf into :vpc_margem_contr;
if (vpc_margem_contr is null) then
vpc_margem_contr=0;
if (:vpc_margem_contr>0) then
begin
Select a.PC_ICMS from TAB_OD a
WHERE a.CD_EMPRESA=:pcd_empresa and
a.CD_FILIAL =:PCD_FILIAL and
a.tp_es ='E' and
a.cd_uforg =(SELECT b.CD_UF FROM TAB_GER b where b.CD_EMPRESA=:PCD_EMPRESA AND
B.CD_FILIAL =:PCD_FILIAL) and
a.cd_ufdes =(SELECT b.CD_UF FROM TAB_GER b where b.CD_EMPRESA=:PCD_EMPRESA AND
B.CD_FILIAL =:PCD_FILIAL) and
a.tp_tit =2 into :VPC_ICMS_ESTADO;
if (VPC_ICMS_ESTADO is null) then
VPC_ICMS_ESTADO=0;
end

VVL_CUSTO = PVL_PECA;
IF (PFL_SIMPLES = 'S') THEN
BEGIN
VICMS_ENTRADA =0;
VPC_ICMS_ESTADO =0;
END
ELSE
BEGIN
VICMS_ENTRADA = CAST(((VVL_CUSTO * PPC_ICMSE_PECA)/100) AS NUMERIC(11,3));
END
VCUS_IPI = CAST(((VVL_CUSTO * PPC_IPI)/100) AS NUMERIC(11,3));
VVL_FRETE = CAST(((((VVL_CUSTO + VCUS_IPI) * PPC_FRETE)/100)) AS NUMERIC(11,3));
VVL_SEGURO = CAST(((((VVL_CUSTO + VCUS_IPI) * PPC_SEGURO)/100)) AS NUMERIC(11,3));
VVL_ACESS = CAST(((((VVL_CUSTO + VCUS_IPI) * PPC_ACESS)/100)) AS NUMERIC(11,3));
vvl_icms_subst = Cast((((VVL_CUSTO + VCUS_IPI+VVL_FRETE)+((VVL_CUSTO + VCUS_IPI+VVL_FRETE)*vpc_margem_contr)/100))*(VPC_ICMS_ESTADO/100) AS NUMERIC(11,3));
if (:vpc_margem_contr>0) then
vvl_icms_subst = Cast((vvl_icms_subst-VICMS_ENTRADA) AS NUMERIC(11,3));
VPIS_COFINS_ENT = CAST((((VVL_CUSTO * PPC_PIS_ENTRADA)/100) + ((VVL_CUSTO * PPC_COFINS_ENTRADA)/100)) AS NUMERIC(11,3));
VCUS_AQUIS = VVL_CUSTO + VCUS_IPI + VVL_FRETE + VVL_SEGURO + VVL_ACESS +vvl_icms_subst;
VCLIQCOMPRA = VCUS_AQUIS - VICMS_ENTRADA - VPIS_COFINS_ENT;
VMKP_INDV = CAST(((VCLIQCOMPRA/(1-(PPC_MKP/100))) - VCLIQCOMPRA) AS NUMERIC(11,3));
VVL_TTMKP = VCLIQCOMPRA + VMKP_INDV;

FOR SELECT CD_PREC FROM TAB_PREC WHERE (CD_PREC <> :PCD_TABSUG)
INTO :VCD_PREC DO
BEGIN
SELECT CD_PECA, PC_LUCRO
FROM PECA_PRE
WHERE(CD_EMPRESA = :PCD_EMPRESA)AND(CD_FILIAL = :PCD_FILIAL)AND
(CD_PREC = :VCD_PREC)AND(CD_PECA = :PCD_PECA)
INTO :VCD_PECAUX, :VPC_LUCRO;

IF (VCD_PECAUX IS NULL) THEN VCD_PECAUX = '';
IF (VPC_LUCRO IS NULL) THEN VPC_LUCRO = 0;

IF (VCD_PECAUX = '') THEN
BEGIN
SELECT PC_LUCRO FROM TAB_GPRC
WHERE CD_GRUPO = :PCD_GRUPO
INTO :VPC_LUCRO;
END

VLUCRO_PECA = CAST((VVL_TTMKP*(VPC_LUCRO/100))AS NUMERIC(11,3));
VVL_BASE_SEM_IMP = (VVL_TTMKP + VLUCRO_PECA);
VVL_VENDA = CAST((VVL_BASE_SEM_IMP /(1 - ((PPC_IMPSAID + PPC_PIS_SAIDA + PPC_COFINS_SAIDA) / 100)))AS NUMERIC(11,3));

SELECT PC_LUCRO, VL_MIN, NR_CASARR, FL_CHECAR1, FL_CHECAR2 FROM TAB_GPRC
WHERE CD_GRUPO = :PCD_GRUPO
INTO :VMARGEM_LUCRO, :VVL_MIN, :VNR_CASARR, :VFL_CHECAR1, :VFL_CHECAR2;

IF (VVL_VENDA > 1) THEN
BEGIN
IF (VNR_CASARR=0) THEN
BEGIN
VVL_VENDA = CAST(VVL_VENDA AS NUMERIC(5, 0));
END
ELSE
BEGIN
IF (VNR_CASARR = 1) THEN
BEGIN
VVL_VENDA = CAST(VVL_VENDA AS NUMERIC(5, 1));
END
ELSE
BEGIN
VVL_VENDA = CAST(VVL_VENDA AS NUMERIC(5, 2));
END
END

VIMPOSTO = CAST(VVL_VENDA*(PPC_PIS_SAIDA+PPC_COFINS_SAIDA+PPC_IMPSAID)/100 AS NUMERIC(11,3));
VVL_BASE_SEM_IMP = (VVL_VENDA - VIMPOSTO);
VDIF = VVL_BASE_SEM_IMP - VVL_TTMKP;

IF (VVL_TTMKP = 0) THEN
BEGIN
VMARGEM_LUCRO = 0;
END
ELSE
BEGIN
VMARGEM_LUCRO = CAST((VDIF/VVL_TTMKP)*100 AS NUMERIC(11,3));
END
END

IF (VVL_VENDA < VVL_MIN) THEN
BEGIN
VVL_VENDA = VVL_MIN;
VIMPOSTO = CAST(VVL_VENDA*(PPC_PIS_SAIDA+PPC_COFINS_SAIDA+PPC_IMPSAID)/100 AS NUMERIC(11,3));
VVL_BASE_SEM_IMP = (VVL_VENDA - VIMPOSTO);
VDIF = VVL_BASE_SEM_IMP - VVL_TTMKP;

IF (VVL_TTMKP = 0) THEN
BEGIN
VMARGEM_LUCRO = 0;
END
ELSE
BEGIN
VMARGEM_LUCRO = CAST((VDIF/VVL_TTMKP)*100 AS NUMERIC(11,3));
END
END

SELECT CD_PECA FROM PECA_PRE
WHERE CD_EMPRESA = :PCD_EMPRESA AND CD_FILIAL = :PCD_FILIAL AND
CD_PREC = :VCD_PREC AND CD_PECA = :PCD_PECA
INTO VCD_PECAUX;

IF (VCD_PECAUX IS NULL) THEN
BEGIN
INSERT INTO PECA_PRE
(CD_EMPRESA, CD_FILIAL, CD_PREC, CD_PECA, PC_LUCRO,
VL_BASE, VL_MKP, CD_USU, DT_REGISTR)
VALUES
(:PCD_EMPRESA, :PCD_FILIAL, :VCD_PREC, :PCD_PECA, :VPC_LUCRO,
:VVL_BASE_SEM_IMP, :VVL_TTMKP, :PCD_USU, CURRENT_DATE);
END
ELSE
BEGIN
UPDATE PECA_PRE SET
VL_BASE = :VVL_BASE_SEM_IMP,
PC_LUCRO = :VPC_LUCRO,
VL_MKP = :VVL_TTMKP,
CD_USU = :PCD_USU,
DT_REGISTR = CURRENT_DATE/*,
HR_REGISTR = CAST(CURRENT_TIME AS CHAR(8))*/
WHERE (CD_EMPRESA = :PCD_EMPRESA)AND(CD_FILIAL = :PCD_FILIAL)AND
(CD_PREC = :VCD_PREC)AND(CD_PECA = :PCD_PECA);
END

IF (((PVL_PECA > PVL_CUSTO_ANTIGO) AND
(VFL_CHECAR1 = 'S')) OR
((PVL_PECA < PVL_CUSTO_ANTIGO) AND
(VFL_CHECAR2 = 'S')))then
BEGIN
IF (PNR_RECB <> '') THEN
BEGIN
VTP_GPRC = 2;
END
ELSE
BEGIN
VTP_GPRC = 4;
END

SELECT MAX(NR_SEQ) NR_SEQ FROM RECB_LIS WHERE CD_PECA = :PCD_PECA
INTO :VNR_SEQ;

IF (VNR_SEQ IS NULL) THEN
BEGIN
VNR_SEQ = '001';
END
ELSE
BEGIN
VNR_SEQAUX = CAST(VNR_SEQ AS SMALLINT);
VNR_SEQAUX = VNR_SEQAUX + 1;

IF (VNR_SEQAUX < 10) THEN
BEGIN
VNR_SEQ = '00'||CAST(VNR_SEQAUX AS CHAR(1));
END
ELSE
BEGIN
IF (VNR_SEQAUX < 100) THEN
BEGIN
VNR_SEQ = '0'||CAST(VNR_SEQAUX AS CHAR(2));
END
ELSE
BEGIN
VNR_SEQ = CAST(VNR_SEQAUX AS CHAR(3));
END
END
END

INSERT INTO RECB_LIS
(CD_PECA, NR_SEQ, CD_EMPRESA, CD_FILIAL, DT_RECBTO, CD_TIT, VL_CUSTO, CD_PREC, NR_NF,
NR_RECB, VL_BASE, PC_IPI, PC_ICMSE, TP_GPRC, CD_USU, DT_REGISTR)
VALUES
(:PCD_PECA, :VNR_SEQ, :PCD_EMPRESA, :PCD_FILIAL, CURRENT_DATE, :PCD_TIT, :PVL_PECA, :VCD_PREC, :PNR_NF,
:PNR_RECB, :VVL_BASE_SEM_IMP, :PPC_IPI, :PPC_ICMSE_PECA, :VTP_GPRC, :PCD_USU, CURRENT_DATE);
END
END

SELECT CD_PECA FROM PECA_DETALHE
WHERE CD_EMPRESA = :PCD_EMPRESA AND CD_FILIAL = :PCD_FILIAL AND CD_PECA = :PCD_PECA
INTO :VCD_PECAUX;

IF (VCD_PECAUX IS NULL) THEN
BEGIN
INSERT INTO PECA_DETALHE
(CD_EMPRESA, CD_FILIAL, CD_PECA, VL_CUSTO, VL_MKP, PC_ICMSE,
PC_ACESS, PC_FRETE, PC_SEGURO, CD_USU, DT_REGISTR)
VALUES
(:PCD_EMPRESA, :PCD_FILIAL, :PCD_PECA, :PVL_PECA, :VVL_TTMKP, :PPC_ICMSE_PECA,
:PPC_ACESS, :PPC_FRETE, :PPC_SEGURO, :PCD_USU, CURRENT_DATE);
END
ELSE
BEGIN
UPDATE PECA_DETALHE SET
VL_CUSTO = :PVL_PECA, VL_MKP = :VVL_TTMKP, PC_ICMSE = :PPC_ICMSE_PECA,
PC_ACESS = :PPC_ACESS, PC_FRETE = :PPC_FRETE, PC_SEGURO = :PPC_SEGURO
WHERE CD_EMPRESA = :PCD_EMPRESA AND CD_FILIAL = :PCD_FILIAL AND CD_PECA = :PCD_PECA;
END

IF (:PPC_IPI > 0) THEN
BEGIN
UPDATE TAB_PECA SET
PC_IPI = :PPC_IPI
WHERE CD_PECA = :PCD_PECA;
END
end^

SET TERM ; ^

GRANT SELECT ON TAB_CLASSIF_FISCAL_IPI TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT,UPDATE ON TAB_PECA TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT ON TAB_OD TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT ON TAB_GER TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT ON TAB_PREC TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT,INSERT,UPDATE ON PECA_PRE TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT ON TAB_GPRC TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT,INSERT ON RECB_LIS TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT SELECT,INSERT,UPDATE ON PECA_DETALHE TO PROCEDURE P_CALCULAR_PRECO_VENDA;

GRANT EXECUTE ON PROCEDURE P_CALCULAR_PRECO_VENDA TO SYSDBA;

[B]e no delphi estou fazendo assim [/B]
IBOaux.SQL.Clear;
IBOaux.SQL.Add('EXECUTE PROCEDURE P_CALCULAR_PRECO_VENDA');
IBOaux.SQL.Add('(:PCD_EMPRESA, :PCD_FILIAL, :PCD_PECA, :PFL_SIMPLES,');
IBOaux.SQL.Add(':PCD_TABSUG, :PNR_RECB, :PCD_TIT, :PNR_NF, :PVL_PECA,');
IBOaux.SQL.Add(':PPC_ICMSE_PECA, :PPC_IPI, :PPC_IMPSAID, :PPC_COFINS_SAIDA,');
IBOaux.SQL.Add(':PPC_PIS_SAIDA, :PPC_MKP, :PPC_PIS_ENTRADA,');
IBOaux.SQL.Add(':PPC_COFINS_ENTRADA,:PPC_ACESS, :PPC_FRETE, :PPC_SEGURO, ');
IBOaux.SQL.Add(':PCD_USU, :PVL_CUSTO_ANTIGO, :PCD_GRUPO)');

IBOaux.ParamByName('PCD_EMPRESA' ).AsString := CD_EMPRESA;
IBOaux.ParamByName('PCD_FILIAL' ).AsString := CD_FILIAL;
IBOaux.ParamByName('PCD_PECA' ).AsString := STRZ(ITEM,14);
IBOaux.ParamByName('PFL_SIMPLES' ).AsString := FL_SIMPLES;
IBOaux.ParamByName('PCD_TABSUG' ).AsString := CD_TABPSUG;
IBOaux.ParamByName('PNR_RECB' ).AsString := '';
IBOaux.ParamByName('PCD_TIT' ).AsString := '';
IBOaux.ParamByName('PNR_NF' ).AsString := '';
IBOaux.ParamByName('PVL_PECA' ).AsFloat := StrToFloat(PRO_CUSTO);
IBOaux.ParamByName('PPC_ICMSE_PECA' ).AsFloat := porcento;
IBOaux.ParamByName('PPC_IPI' ).AsString := PC_IPI;
IBOaux.ParamByName('PPC_IMPSAID' ).AsFloat := PC_IMPSAID;
IBOaux.ParamByName('PPC_COFINS_SAIDA' ).AsFloat := 0;
IBOaux.ParamByName('PPC_PIS_SAIDA' ).AsFloat := 0;
IBOaux.ParamByName('PPC_MKP' ).AsFloat := PC_MKP;
IBOaux.ParamByName('PPC_PIS_ENTRADA' ).AsFloat := PC_PIS_ENTRADA;
IBOaux.ParamByName('PPC_COFINS_ENTRADA').AsFloat := PC_COFINS_ENTRADA;
IBOaux.ParamByName('PPC_ACESS' ).AsFloat := 0;
IBOaux.ParamByName('PPC_FRETE' ).AsFloat := 0;
IBOaux.ParamByName('PPC_SEGURO' ).AsFloat := 0;
IBOaux.ParamByName('PCD_USU' ).AsString := CD_USU;
IBOaux.ParamByName('PVL_CUSTO_ANTIGO' ).AsInteger:= 0;
IBOaux.ParamByName('PCD_GRUPO' ).AsString := grupo;
IBOaux.ExecSQL;

se alguem puder me ajudar eu agradeço sou novo na area:eek:

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!