Identificador de Regra
COM-000CDPOR02
Módulo: COM - Comercial.
Finalidade: permitir que o código do portador seja sugerido via regra. É executado sempre que as parcelas das notas fiscais de saída forem geradas.
Características: quando as parcelas da nota fiscal de saída forem geradas a partir das parcelas especiais de um pedido, é preciso utilizar a variável VenAAltPpe para indicar que o portador das parcelas do pedido não deve ser utilizado. Assim, o portador sugerido pela regra será atribuído nas parcelas da nota fiscal de saída.
Tela: geração de parcelas (notas fiscais saída).
Transação: não se aplica.
Regra:
Definir numero VSCodCli; Definir alfa VSCodPor; SE ((VSCodCli = 1) OU (VSCodCli = 2) OU (VSCodCli = 3)) VSCodPor="9999"; SENAO VSCodPor="WIIP";
@ Variáveis nativas do identificador @
Definir Numero VSCodEmp;
Definir Numero VSCodFil;
Definir alfa VSCodSnf;
Definir Numero VSNumNfv;
Definir alfa VSCodPor;
Definir alfa VenAAltPpe;
DEFINIR ALFA VSTnsPro;
DEFINIR ALFA VSTnsSer;
DEFINIR NUMERO VenNFilPed;
DEFINIR NUMERO VenNNumPed;
DEFINIR NUMERO VenNNumAne;
DEFINIR NUMERO VenNNumPfa;
DEFINIR ALFA VenAOrigem;
@ Variáveis não nativas do identificador @
DEFINIR CURSOR Cur_TabOrigem;
DEFINIR CURSOR Cur_E028CPG;
DEFINIR ALFA VenACodCpg;
SE (VenAOrigem = "NFS")
Cur_TabOrigem.SQL "SELECT CodCpg FROM E140NFV
WHERE CodEmp = :VSCodEmp
AND Codfil = :VSCodFil
AND CodSnf = :VSCodSnf
AND NumNfv = :VSNumnfv";
SENAO
SE (VenAOrigem = "PFA")
Cur_TabOrigem.SQL "SELECT CodCpg FROM E135PFA
WHERE CodEmp = :VSCodEmp
AND Codfil = :VSCodFil
AND NumAne = :VenNNumAne
AND NumPfa = :VenNNumPfa";
SENAO
SE (VenAOrigem = "PED")
Cur_TabOrigem.SQL "SELECT CodCpg FROM E120PED
WHERE CodEmp = :VSCodEmp
AND CodFil = :VenNFilPed
AND NumPed = :VenNNumPed";
SENAO
Mensagem(Erro, "Origem da chamada inválida.");
Cur_TabOrigem.AbrirCursor();
Se (Cur_TabOrigem.Achou)
VenACodCpg = Cur_TabOrigem.CodCpg;
Cur_TabOrigem.FecharCursor();
SE (VenACodCpg = "387")
INICIO
VSCodPor = "887";
VenAAltPpe = "S";
FIM;
SENAO
SE (VenACodCpg = "388")
INICIO
VSCodPor = "888";
VenAAltPpe = "S";
FIM;
SENAO
INICIO
VenAAltPpe = "S";
Cur_E028CPG.SQL "SELECT CodEmp FROM E028CPG
WHERE CodEmp = :VSCodEmp
AND CodCpg = :VenACodCpg";
Cur_E028CPG.AbrirCursor();
SE (Cur_E028CPG.Achou)
VSCodPor = "68";
SENAO
VSCodPor = "999";
Cur_E028CPG.FecharCursor();
FIM;
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;
Variáveis disponibilizadas:
Nome | Tipo | Observações | Retorna Valor |
---|---|---|---|
VSCodEmp | NÚMERO | Código da Empresa | N |
VSCodFil | NÚMERO | Código da Filial | N |
VSCodSnf | ALFA | Código da série fiscal | N |
VSNumNfv | NÚMERO | Número da nota fiscal de saída | N |
VSTnsPro | ALFA | Transação de produto dos dados gerais da nota fiscal de saída | N |
VSTnsSer | ALFA | Transação de serviço dos dados gerais da nota fiscal de saída | N |
VenNFilPed | NÚMERO | Filial do pedido utilizado para gerar as parcelas da nota fiscal de saída | N |
VenNNumPed | NÚMERO | Número do pedido utilizado para gerar as parcelas da nota fiscal de saída | N |
VenNNumAne | NÚMERO | Número da análise de embarque | N |
VenNNumPfa | NÚMERO | Número da pré-fatura | N |
VenAOrigem | ALFA | Origem da chamada (NFS, NFE, PED, PFA, CTR) | N |
VSCodPor | ALFA | Código do portador | S |
VenAAltPpe | ALFA | Indicativo se o portador das parcelas especiais do pedido deve ser ignorado ("S" ou "N") | S |
VSCodCli | NÚMERO | Código do cliente | N |
VSCodFpg | NÚMERO | Código forma de pagamento | N |
Atenção
Caso o parâmetro global LisVarReg esteja habilitado, a variável ListaVariaveis estará disponível em todos os identificadores de regras do sistema. O conteúdo desta variável lista os campos disponibilizados no identificador de regras em questão.
Não é aconselhada a ativação desse parâmetro global para o uso cotidiano. Esse recurso de listagem dos campos de identificadores auxilia a construção de regras e o Suporte para, por exemplo, depuração ou quando não houver acesso à documentação dos identificadores de regras.