definir numero VSCodEmp; /* código da empresa da nota fiscal - enviado pelo sistema */
definir numero VSCodFil;/* código da filial da nota fiscal - enviado pelo sistema */
definir alfa VSCodSnf;/* código da serie da nota fiscal - enviado pelo sistema */
definir numero VSNumNfv;/* numero da nota fiscal - enviado pelo sistema */
definir alfa VSCodPor;/* código do portador - retornado PARA o sistema */
definir numero xCodCli;/* código do cliente da nota fiscal - váriavel auxiliar */
definir numero xDisAut;/* dispositivo autorizado da serie da nota fiscal - váriavel auxiliar */
definir alfa xBltNfe;/* Indicativo se é feita a geração automática de boletos da nota fiscal eletrônica - váriavel auxiliar */
definir alfa xBltNfs;/* Indicativo se é feita a geração automática de boletos da nota fiscal de serviço - váriavel auxiliar */
definir alfa xPorSi1;/* código do primeiro portador aceito pelo cliente */
definir numero xEstaNuloPorSi1;/* variavel auxiliar */
definir alfa xPorSi2;/* código do primeiro portador aceito pelo cliente */
definir numero xEstaNuloPorSi2;/* variavel auxiliar */
definir alfa xCursor;/* cursor para acesso ao bando de dados */
definir alfa xSql;/* comando sql */
definir numero xCodFpg;
Definir Cursor Cur_E085HCL;
Definir Cursor Cur_E140NFV;
Definir Cursor Cur_E000PDV;
definir numero VSCodCli;
definir numero VSCodFpg;
/* -------------------------------------------------------------------------------------------------- */
/* o intuito desse acesso ao banco de dados é buscar o dispositivo autorizado da série da nota fiscal */
SQL_Criar(xCursor);
xSql = " select e020snf.disaut" +
" from e020snf" +
" where codemp = :VSCodEmp and codsnf = :VSCodSnf";
SQL_DefinirComando(xCursor, xSql);
SQL_DefinirInteiro(xCursor, "VSCodEmp", VSCodEmp);
SQL_DefinirAlfa(xCursor, "VSCodSnf", VSCodSnf);
SQL_AbrirCursor(xCursor);
/* se não está vazio */
se (SQL_EOF(xCursor) = 0)
inicio
SQL_RetornarInteiro(xCursor,"DisAut", xDisAut);
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
fim
/* ---------------------------------------------------------------------------------------------------------------------------------------- */
/* o intuito desse acesso ao banco de dados é buscar os indicativos de geração automática de boletos da nota fiscal eletrônica e de serviço */
SQL_Criar(xCursor);
xSql = " select e070ven.BltNfe, BltNfs" +
" from e070ven" +
" where codemp = :VSCodEmp and codfil = :VSCodFil";
SQL_DefinirComando(xCursor, xSql);
SQL_DefinirInteiro(xCursor, "VSCodEmp", VSCodEmp);
SQL_DefinirInteiro(xCursor, "VSCodFil", VSCodFil);
SQL_AbrirCursor(xCursor);
/* se não está vazio */
se (SQL_EOF(xCursor) = 0)
inicio
SQL_RetornarAlfa(xCursor,"BltNfe", xBltNfe);
SQL_RetornarAlfa(xCursor,"BltNfs", xBltNfs);
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
fim
/* se a serie da nota fiscal é de nota eletrônica e o a filial indica para gerar automaticamente os boletos para esse tipo de nota ou */
/* se a serie da nota fiscal é de nota eletrônica de serviço e o a filial indica para gerar automaticamente os boletos para esse tipo de nota ou */
se ( ((xDisAut = 6) e (xBltNfe = "S")) ou ((xDisAut = 8) e (xBltNfs = "S")) )
inicio
/* ------------------------------------------------------------------------------------ */
/* o intuito desse acesso ao banco de dados é buscar o codigo do cliente da nota fiscal */
/*quando executado através da F140LOT, ao ser executada a regra, a NF ainda não foi gravada então */
/*não é possível encontrar o registro na E140NFV, por isso nesse caso é passado para a regra */
/* qual é o cliente e a forma de pagamento não sendo mais necessário realizar a busca na E140NFV.*/
se ((VSCodCli <> 0) e (VSCodFpg <> 0))
inicio
xCodCli = VSCodCli;
xCodFpg = VSCodFpg;
fim
senao
inicio
Cur_E140NFV.SQL " select e140nfv.codcli, e140nfv.codfpg \
from e140nfv \
where codemp = :VSCodEmp \
and codfil = :VSCodFil \
and codsnf = :VSCodSnf \
and numnfv = :VSNumNfv";
Cur_E140NFV.AbrirCursor();
se (Cur_E140NFV.Achou)
inicio
xCodCli = Cur_E140NFV.CodCli;
xCodFpg = Cur_E140NFV.CodFpg;
fim;
Cur_E140NFV.FecharCursor();
fim;
/* se não está vazio */
se ((xCodCli <> 0) e (xCodFpg <> 0))
inicio
/*
nesse ponto da rotina pode ser feita uma regra de sugestao fixa conforme o exemplo abaixo
se (xCodCli = 1)
VSCodPor = "237";
senao
VSCodPor = "001";
ou pode-se optar por buscar o portador 1o ou 2o do cadastro do cliente, conforme está implementado abaixo
*/
/* ------------------------------------------------------------------------------------------ */
/* o intuito desse acesso ao banco de dados é buscar o portador 1 ou 2 do cadastro do cliente */
Cur_E000PDV.SQL "SELECT E000PDV.VLRPDV \
FROM E066FPG, \
E000PDV \
WHERE E066FPG.IDEUNI = E000PDV.IDEREG \
AND E000PDV.IDEINT = 3 \
AND E000PDV.CHAPDV = 'FORMAPAGAMENTO.PORTADORBANCO' \
AND E066FPG.CODFPG = :xCodFpg \
AND E066FPG.CODEMP = :VSCodEmp \
AND E000PDV.VLRPDV <> ' ' \
AND ((E000PDV.VLRPDV <> '') OR (E000PDV.VLRPDV IS NOT NULL)) ";
Cur_E000PDV.AbrirCursor();
Se (Cur_E000PDV.Achou)
Inicio
xPorSi1 = Cur_E000PDV.VLRPDV;
EstaNulo(xPorSi1, xEstaNuloPorSi1);
se (xEstaNuloPorSi1 <> 1) /* 1 = nulo */
VSCodPor = xPorSi1;
Fim
Senao
Inicio
Cur_E085HCL.SQL " select e085hcl.porsi1, \
e085hcl.porsi2 \
from e085hcl \
where codemp = :VSCodEmp \
and codfil = :VSCodFil \
and codcli = :xCodCli ";
Cur_E085HCL.AbrirCursor();
xPorSi1 = Cur_E085HCL.PorSi1;
xPorSi2 = Cur_E085HCL.PorSi2;
EstaNulo(xPorSi1, xEstaNuloPorSi1);
EstaNulo(xPorSi2, xEstaNuloPorSi2);
se (xEstaNuloPorSi1 <> 1) /* 1 = nulo */
VSCodPor = xPorSi1;
senao
/* se nao esta vazio */
se (xEstaNuloPorSi2 <> 1) /* 1 = nulo */
VSCodPor = xPorSi2;
Cur_E085HCL.FecharCursor();
Fim;
Cur_E000PDV.FecharCursor();
Fim;
Fim;