Manutenção do comando para carga das informações na geração do registro
O cadastro de declarações tem o objetivo de facilitar a manutenção de informações para um arquivo eletrônico, com ele é possível montar ou modificar a busca de informações para tabelas de usuários, além de aplicar alterações nas informações apresentadas em cada linha dos arquivos eletrônicos.
Entendendo o funcionamento do cadastro de declarações
Pontos de intervenção
Regra
Por meio de uma regra associada ao registro, o usuário pode aplicar
duas formas de manutenções no registro. A primeira funcionalidade é a alterar o
comando SQL padrão da rotina utilizado para a geração do registro. A segunda
funcionalidade é permitir uma manutenção dos conteúdos de cada campo presente
no respectivo registro.
Forma de Busca de Dados
Através da forma de busca de dados é possível alterar o comando SQL padrão da
rotina utilizado para geração do registro. Para isso, é necessário criar uma
forma de busca de dados e associá-la ao registro desejado para alteração do
comando. Vale ressaltar que as configurações de uma forma de busca de dados
devem obedecer as regras de geração de cada registro.
SQL Usuário
Através deste campo é possível informar um comando SQL para alterar o SQL
padrão da rotina para geração do registro, porém a sua programação é manual
baseada na documentação de geração de cada registro.
Regra geral de nomenclatura de variáveis no cadastro de declaração
Todas as variáveis utilizadas nas regras do cadastro de declaração têm a seguinte estrutura:
- As três primeiras letras representam o módulo do sistema, conforme definido na tela F049DEC;
- A quarta letra representa o tipo do campo ("A - Alfa", "D - Data" e "N - Número"), conforme informado na tela F049DRE;
- A partir da quinta letra representa o nome da variável aplicado na regra.
Variáveis Globais
MóduloNCodEmp:<> Esta variável não retorna valor, ela contém o código da empresa na geração do cadastro de declarações. Por exemplo: IMPNCodEmp.
<Módulo>NCodFil: Esta variável não retorna valor, ela contém o código da filial na geração do cadastro de declarações. Por exemplo: IMPNCodFil.
<Módulo>DDatIni: Esta variável não retorna valor, ela contém a data inicial para a geração das informação do cadastro de declarações. Por exemplo: IMPDDatIni.
<Módulo>DDatFim: Esta variável não retorna valor, ela contém a data final para a geração das informação do cadastro de declarações. Por exemplo: IMPDDatFim.
<Módulo>AEveReg: Esta variável não retorna valor, ela informa as constantes SQL (quando a regra estiver sendo executada para alterar o comando SQL padrão da rotina) e REGISTRO (quando a regra estiver sendo executada para alterar os conteúdos dos campos do registro correspondente). Por exemplo: IMPAEveReg.
Alteração do comando SQL padrão via regra
Um registro de uma declaração permite a alteração do seu comando SQL padrão da rotina para suprir a necessidade de localização de informações em tabelas de usuário, campos de usuário, informações oriundas de outras tabelas não definidas no padrão, campos de outras tabelas, alterações em campos com registros dependentes (gerações de registros de cadastros a partir de movimentos), entre outras situações. Para isso, é necessário toda a definição do comando SQL do respectivo registro na regra.
Para alterar o comando SQL padrão da rotina do registro utilizando uma regra associada ao registro através do campo Regra da tela F049REG existem as seguintes variáveis para controle:
MóduloAREG:<> Esta variável não retorna valor, ela indica o código do registro que está sendo executado pela gera neste momento;
MóduloAPRMSQL:<> Parâmetro adicional do registro. Utilizado para identificar o processo em que o SQL será utilizado. Dentro de um mesmo registro podem existir mais de um comando SQL para sua montagem. Esta variável não retorna valor;
MóduloACMDSQL:<> Variável que receberá o texto com o comando SQL para ser interpretado e executado pelo registro correspondente.
Importante
Na geração de um arquivo que possui acesso ao cadastro de declaração, há a opção Gerar Log dos SQL executados, quando assinalado este campo é gerado. Este log será gerado na pasta "Log" da instalação do ERP Senior.
Manutenção do Registro via Regra
Para realizar a manutenção do registro padrão criado pelo ERP Senior, deve-se criar uma regra associada ao registro através do campo Regra da tela F049REG . As variáveis disponibilizadas para a regra possuem o conteúdo que será gravado no registro padrão. Para alterá-lo basta atualizar as variáveis disponíveis na regra. Como padrão, todas as variáveis que são carregadas para a regra são atualizadas no retorno do processamento.
Para a manutenção de campos, não é necessária a inclusão de todo o comando SQL padrão da rotina na regra, deve-se apenas utilizar a variável que sofre a alteração, podendo ser aplicados recursos da LSP Senior como: Cursores, listas dinâmicas, SQL_criar, funções de programadores, entre outros recursos disponíveis na criação de regras.
A nomenclatura das variáveis dos campos de um registro do cadastro de declaração segue a regra geral de nomenclatura de variáveis, onde o nome da variável é o conteúdo do campo Nome do Campo informado na tela F049DRE.
Para cadastro de declarações que possui uma estrutura do arquivo em forma hierárquica/níveis, é possível acessar qualquer valor dos campos dos níveis anteriores ao registro que está sendo gerado no momento da regra.
A estrutura de nomenclatura destas variáveis de níveis anteriores é:
- Primeiro caractere fixo R;
- A partir do segundo caractere quando o nome do campo for REG, ele receberá o conteúdo do registro anterior;
- O próximo caractere é fixo “_”;
- Depois disso, é utilizada a regra geral de nomenclatura de variáveis do cadastro de declaração;
Como acessar a variável CNPJ do tipo numérico presente em um registro de nível 0, quando estiver executando uma regra em um registro de nível 1 ou superior: R0000_IMPNCNPJ.
Inclusão do comando SQL a um registro que não possui padrão ERP Senior
Na documentação do sistema existem registros que possuem o cadastro de declaração associado a uma observação que não há uma comando padrão do ERP Senior, porém este comando pode ser facilmente parametrizado, com a inclusão de um comando SQL obedecendo à nomenclatura dos campos de retorno para o registro e os filtros dinâmicos possíveis para a geração do registro.
Abaixo há um exemplo de registro que apresenta apenas a documentação para parametrização do comando SQL para a sua geração:
Observação
Tipo Numérico - CGCPAR, VLRVEN, VLRVEN, VLRCOD, VLRCRD
Tipo Alfanumérico - TIPCRE
Filtros - {CODEMP}, {DATAPI}
Neste caso é necessário especificar um SQL para o registro para que seja definida uma regra e vinculá-la a geração do registro no cadastro de declaração./p>
A regra utilizará a variável
IMPACMDSQL (que é do tipo alfanumérica) e esta deve receber o novo
SQL, este comando deve obrigatoriamente seguir o que este descrito no Ajuda do
sistema para aquele registro específico.
Deverá existir no SQL definido os campos abaixo, caso um deles não esteja definido um ACCESS VIOLATION é gerado. Os retornos do SQL são: CGCPAR, VLRVEN, VLRNRE, VLRCOD, VLRCRD e TIPCRE. Os filtros deste SQL são: {CODEMP} e {DATAPI}
Logo, o comando poderá ser:
- SELECT E085CLI.CGCCPF AS CGCPAR, E660NFV.VLRCTB AS VLRVEN,
- 5000 AS VLRNRE, 2500 AS VLRCOD, 0 AS VLRCRD, “1” AS TIPCRE
- FROM E660NFV, E085CLI
- WHERE E085CLI.CODCLI = E660NFV.CODCLI AND
- E660NFV.CODEMP = {CODEMP} AND
- E660NFV.DATEMI >= {DATAPI}
Exemplos de regras
Observação
Os exemplos abaixo são maneiras de como manipular o SQL para atender a customização. O SQL padrão poderá mudar de acordo com a versão, desta forma é necessário sempre buscar o SQL atualizado na tela de geração do SPED, na opção Gerar log dos SQL executados. O Gestão Empresarial PME | GO UP não tem acesso às regras.
Alterar o comando SQL padrão da rotina do registro 0001. Para tal, o módulo definido neste cadastro de declarações é o “CTB” e o registro “0001”.
definir alfa
CTBAREG;
definir alfa CTBAPRMSQL;
definir alfa CTBACMDSQL;
se ((CTBAREG="0001") e (CTBAPRMSQL=""))
{
CTBACMDSQL = "SELECT CTARED,DESCTA FROM USU_E045PLA";
}
Demonstrar o conteúdo das variáveis globais do cadastro de declarações, tomando como base um cadastro de declaração cujo módulo é “IMP”.
definir alfa xTemp;
definir alfa xTexto;
IntParaAlfa(IMPNCodEmp, xTemp);
xTexto = "Empresa: " + xTemp;
IntParaAlfa(IMPNCodFil, xTemp);
xTexto = xTexto + ", Filial: " + xTemp;
Mensagem(Retorna, xTexto);
Como o código da conta contábil (CODCTA) do tipo numérico
do registro 0001 pertencente ao módulo “CTB”.
definir numero CTBNCODCTA;
se (CTBNCODCTA = 50)
{
CTBNCODCTA = 150;
}
Desta forma, todas as linhas do "Registro 0001" que contém o código de conta igual a "50" serão atualizados para "150".
Neste exemplo vamos utilizar a regra para alterar o conteúdo de um campo de um registro utilizando o cadastro de declaração. Iremos substituir a descrição do item no registro 0200 do SPED Fiscal, pela descrição do produto mais a descrição da derivação.
Definir Alfa IMPACOD_ITEM;
Definir Alfa IMPADESCR_ITEM;
Definir Numero IMPNCODEMP;
Definir Alfa IMPAReg;
Definir cursor Cur_Produto;
Definir Alfa vProduto;
Definir Alfa vDerivacao;
Definir Alfa IMPAEveReg;
se ((IMPAReg = "0200") e (IMPAEveReg = "REGISTRO"))
inicio
PosicaoAlfa("-", IMPACOD_ITEM, PosStr);
vProduto = IMPACOD_ITEM;
vDerivacao = IMPACOD_ITEM;
CopiarAlfa(vProduto, 4, (PosStr-1));
CopiarAlfa(vDerivacao, (PosStr+1), 9);
Cur_produto.sql "SELECT E075PRO.DESPRO, E075DER.DESDER \
FROM E075PRO, E075DER \
WHERE E075PRO.CODEMP = E075DER.CODEMP AND \o:p>
E075PRO.CODPRO = E075DER.CODPRO AND \
E075DER.CODEMP = :IMPNCODEMP AND \
E075DER.CODPRO = :VPRODUTO AND \
E075DER.CODDER = :VDERIVACAO";
& Cur_produto.AbrirCursor();
Se (Cur_produto.achou)
Inicio
IMPADESCR_ITEM = Cur_Produto.DESPRO + " - " + Cur_Produto.DESDER;
Fim;
Cur_produto.FecharCursor();
fim;o:p>
Neste exemplo iremos alterar o comando SQL do registro C170 (itens de notas fiscais) da nota fiscal de saída do SPED Pis/Cofins, para que a conta contábil listada neste registro considere o campo conta contábil reduzida 1 do cadastro de família do produto, já gerando o registro de dependência 0500 (cadastro de plano de contas).
definir alfa IMPAReg;
definir alfa IMPAPRMSQL;
definir alfa IMPAEveReg;
definir alfa IMPACMDSQL;
se ((IMPAReg = "C170") e (IMPAEveReg = "SQL") e (IMPAPRMSQL = "NFSAIDA"))
inicioo:p>
IMPACMDSQL = "SELECT E660INV.SEQNFI, E660INV.SEQIPV AS SEQITE, (E660INV.PREUNI * E660INV.QTDENT) AS VLRCTB, " +
"E660INV.QTDENT AS QTDENT, E660INV.UNIMED AS UNIMED, E660INV.VLRDSC AS VLRDSC, E660INV.CLAFIS AS CLAFIS, E660INV.CODCLF AS CODCLF, "+
"E660INV.CODSTR AS CODSTR, E660INV.VLRBIC AS VLRBIC, E660INV.VLRBSI AS VLRBSI, (E660INV.VLRBIP + E660INV.VLRBID) AS VLRBIP, "+
"E660INV.PERIPI AS PERIPI, (E660INV.VLRIPI + E660INV.VLRIPD) AS VLRIPI, E660INV.CODTRD AS CODTRD, E660NFV.NOPOPE AS NOPOPE, "+
"E660INV.VLRBPF AS VLRBPS, E660INV.PERPIF AS PERPIS, E660INV.VLRPIF AS VLRPIS, E660INV.VLRBCF AS VLRBCF, "+
"E660INV.PERCFF AS PERCOF, E660INV.VLRCFF AS VLRCOF, E012FAM.CTARED AS CTARED, E660INV.CPLPRO AS DESCRICAO, "+
"E660INV.VLRSIC AS VLRSIC, E660INV.VLRBSD AS VLRBSD, E660INV.VLRISD AS VLRISD, E660INV.PERICM AS PERICM, "+
"E660INV.VLRICM AS VLRICM, E660INV.VLRIIC AS VLRIIC, E660INV.VLROIC AS VLROIC, E660INV.CODDFS AS CODDFS, "+
"E660INV.CODMS1 AS CODMS1, E660INV.CODMS2 AS CODMS2, E660INV.CODMS3 AS CODMS3, E660INV.CODMS4 AS CODMS4, "+
"E660NFV.TIPNFS AS TIPONF, E660INV.CODEMP AS CODEMP, E660INV.CSTIPI AS CSTIPI, "+
"E660INV.CSTCOF AS CSTCOF, E660INV.CSTPIS AS CSTPIS, 1 AS QTDITM, 1 AS DIFCOD, "+
"E660INV.DESIMP AS DESIMP, E660INV.VLRAJS AS VLRAJS, E660INV.CODTNS, E001TNS.VENTCF AS CPRVEN, E660INV.VLRDZF, "+
"E660INV.SEQINV AS SEQINF, E660INV.NUMNFF, E660INV.VLRPIT, E660INV.VLRCRT, E660INV.VLRBCR AS VLRBCD, E660INV.VLRCOR AS VLRCFD, E660INV.PERCOR AS PERCFD, "+
"E660INV.VLRBPR AS VLRBPD, E660INV.VLRPIR AS VLRPID, E660INV.PERPIR AS PERPID, E660INV.PREUNI, "+
"E660INV.QTDBPF AS QTDBPI, E660INV.ALIPIF AS ALIPIS, E660INV.QTDBPI AS QTDBPD, E660INV.ALIPIS AS ALIPID, "+
"E660INV.QTDBCF AS QTDBCO, E660INV.ALICFF AS ALICOF, E660INV.QTDBCO AS QTDBCD, E660INV.ALICOF AS ALICFD, "+
"E660INV.VLRBSP, E660INV.VLRSTP, E660INV.VLRBSC, E660INV.VLRSTC, E660INV.CODPRO, E660INV.CODBEM, E660INV.CODDER, E660INV.CODSER, E660INV.CPLPRO "+
"FROM E660INV, E660NFV, E001TNS, E075PRO, E012FAM "+
"WHERE E660INV.CODEMP = {CODEMP} AND "+
"E660INV.CODFIL = {CODFIL} AND "+
"E660INV.CODCLI = {CODPAR} AND "+
"E660INV.NUMNFI = {NUMNFI} AND "+
"E660INV.CODSNF = {CODSNF} AND "+
"E660NFV.TIPNFS > 0 AND "+
"E660INV.SEQNFI = 0 AND "+
"(E660INV.CSTCOF = E660INV.CSTPIS AND " +
"(E660INV.CSTPIS IN ('01', '02', '03', '04', '05', '06', '07', '08', '09', '49'))) AND " +
"E660NFV.CODEMP = E660INV.CODEMP AND "+
"E660NFV.CODFIL = E660INV.CODFIL AND "+
"E660NFV.CODCLI = E660INV.CODCLI AND "+
"E660NFV.NUMNFI = E660INV.NUMNFI AND "+
"E660NFV.NUMNFF = E660INV.NUMNFF AND "+
"E660NFV.CODSNF = E660INV.CODSNF AND "+
"E660NFV.CODTNS = E660INV.CODTNS AND "+
"E001TNS.CODEMP = E660INV.CODEMP AND "+
"E001TNS.CODTNS = E660INV.CODTNS AND "+
"E660INV.CODEMP = E075PRO.CODEMP AND "+
"E660INV.CODPRO = E075PRO.CODPRO AND "+
"E075PRO.CODEMP = E012FAM.CODEMP AND "+
"E075PRO.CODFAM = E012FAM.CODFAM ";
IMPACMDSQL = IMPACMDSQL +
" UNION ALL " +
"SELECT E660INV.SEQNFI, E660INV.SEQIPV AS SEQITE, (E660INV.PREUNI * E660INV.QTDENT) AS VLRCTB, " +
"E660INV.QTDENT AS QTDENT, E660INV.UNIMED AS UNIMED, E660INV.VLRDSC AS VLRDSC, E660INV.CLAFIS AS CLAFIS, E660INV.CODCLF AS CODCLF, "+
"E660INV.CODSTR AS CODSTR, E660INV.VLRBIC AS VLRBIC, E660INV.VLRBSI AS VLRBSI, (E660INV.VLRBIP + E660INV.VLRBID) AS VLRBIP, "+
"E660INV.PERIPI AS PERIPI, (E660INV.VLRIPI + E660INV.VLRIPD) AS VLRIPI, E660INV.CODTRD AS CODTRD, E660NFV.NOPOPE AS NOPOPE, "+
"E660INV.VLRBPF AS VLRBPS, E660INV.PERPIF AS PERPIS, E660INV.VLRPIF AS VLRPIS, E660INV.VLRBCF AS VLRBCF, "+
"E660INV.PERCFF AS PERCOF, E660INV.VLRCFF AS VLRCOF, E660INV.CTARED AS CTARED, E660INV.CPLPRO AS DESCRICAO, "+
"E660INV.VLRSIC AS VLRSIC, E660INV.VLRBSD AS VLRBSD, E660INV.VLRISD AS VLRISD, E660INV.PERICM AS PERICM, "+
"E660INV.VLRICM AS VLRICM, E660INV.VLRIIC AS VLRIIC, E660INV.VLROIC AS VLROIC, E660INV.CODDFS AS CODDFS, "+
"E660INV.CODMS1 AS CODMS1, E660INV.CODMS2 AS CODMS2, E660INV.CODMS3 AS CODMS3, E660INV.CODMS4 AS CODMS4, "+
"E660NFV.TIPNFS AS TIPONF, E660INV.CODEMP AS CODEMP, E660INV.CSTIPI AS CSTIPI, "+
"E660INV.CSTCOF AS CSTCOF, E660INV.CSTPIS AS CSTPIS, 1 AS QTDITM, 1 AS DIFCOD, "+
"E660INV.DESIMP AS DESIMP, E660INV.VLRAJS AS VLRAJS, E660INV.CODTNS, E001TNS.VENTCF AS CPRVEN, E660INV.VLRDZF, "+
"E660INV.SEQINV AS SEQINF, E660INV.NUMNFF, E660INV.VLRPIT, E660INV.VLRCRT, E660INV.VLRBCR AS VLRBCD, E660INV.VLRCOR AS VLRCFD, E660INV.PERCOR AS PERCFD, "+
"E660INV.VLRBPR AS VLRBPD, E660INV.VLRPIR AS VLRPID, E660INV.PERPIR AS PERPID, E660INV.PREUNI, "+
"E660INV.QTDBPF AS QTDBPI, E660INV.ALIPIF AS ALIPIS, E660INV.QTDBPI AS QTDBPD, E660INV.ALIPIS AS ALIPID, "+
"E660INV.QTDBCF AS QTDBCO, E660INV.ALICFF AS ALICOF, E660INV.QTDBCO AS QTDBCD, E660INV.ALICOF AS ALICFD, "+
"E660INV.VLRBSP, E660INV.VLRSTP, E660INV.VLRBSC, E660INV.VLRSTC, E660INV.CODPRO, E660INV.CODBEM, E660INV.CODDER, E660INV.CODSER, E660INV.CPLPRO "+
"FROM E660INV, E660NFV, E001TNS "+
"WHERE E660INV.CODEMP = {CODEMP} AND "+
"E660INV.CODFIL = {CODFIL} AND "+
"E660INV.CODCLI = {CODPAR} AND "+
"E660INV.NUMNFI = {NUMNFI} AND "+
"E660INV.CODSNF = {CODSNF} AND "+
"E660NFV.TIPNFS > 0 AND "+
"E660INV.SEQNFI = 0 AND "+
"(E660INV.CSTCOF = E660INV.CSTPIS AND " +
"(E660INV.CSTPIS IN ('01', '02', '03', '04', '05', '06', '07', '08', '09', '49'))) AND " +
"E660NFV.CODEMP = E660INV.CODEMP AND "+
"E660NFV.CODFIL = E660INV.CODFIL AND "+
"E660NFV.CODCLI = E660INV.CODCLI AND "+
"E660NFV.NUMNFI = E660INV.NUMNFI AND "+
"E660NFV.NUMNFF = E660INV.NUMNFF AND "+
"E660NFV.CODSNF = E660INV.CODSNF AND "+
"E660NFV.CODTNS = E660INV.CODTNS AND "+
"E001TNS.CODEMP = E660INV.CODEMP AND "+
"E001TNS.CODTNS = E660INV.CODTNS AND " +
"NOT EXISTS (SELECT 1 FROM E075PRO WHERE E075PRO.CODEMP = E660INV.CODEMP AND E075PRO.CODPRO = E660INV.CODPRO) ";
IMPACMDSQL = IMPACMDSQL +
" UNION ALL " +
"SELECT E660INV.SEQNFI, MAX(E660INV.SEQIPV) AS SEQITE, SUM(E660INV.PREUNI * E660INV.QTDENT) AS VLRCTB, " +
"SUM(E660INV.QTDENT) AS QTDENT, MAX(E660INV.UNIMED) AS UNIMED, SUM(E660INV.VLRDSC) AS VLRDSC, MAX(E660INV.CLAFIS) AS CLAFIS, MAX(E660INV.CODCLF) AS CODCLF, " +
"MAX(E660INV.CODSTR) AS CODSTR, SUM(E660INV.VLRBIC) AS VLRBIC, SUM(E660INV.VLRBSI) AS VLRBSI, SUM(E660INV.VLRBIP + E660INV.VLRBID) AS VLRBIP, " +
"MAX(E660INV.PERIPI) AS PERIPI, SUM(E660INV.VLRIPI + E660INV.VLRIPD) AS VLRIPI, MAX(E660INV.CODTRD) AS CODTRD, MAX(E660NFV.NOPOPE) AS NOPOPE, " +
"SUM(E660INV.VLRBPF) AS VLRBPS, MAX(E660INV.PERPIF) AS PERPIS, SUM(E660INV.VLRPIF) AS VLRPIS, SUM(E660INV.VLRBCF) AS VLRBCF, " +
"MAX(E660INV.PERCFF) AS PERCOF, SUM(E660INV.VLRCFF) AS VLRCOF, MAX(E012FAM.CTARED) AS CTARED, MAX(E660INV.CPLPRO) AS DESCRICAO, " +
"SUM(E660INV.VLRSIC) AS VLRSIC, SUM(E660INV.VLRBSD) AS VLRBSD, SUM(E660INV.VLRISD) AS VLRISD, MAX(E660INV.PERICM) AS PERICM, " +
"SUM(E660INV.VLRICM) AS VLRICM, SUM(E660INV.VLRIIC) AS VLRIIC, SUM(E660INV.VLROIC) AS VLROIC, MAX(E660INV.CODDFS) AS CODDFS, " +
"MAX(E660INV.CODMS1) AS CODMS1, MAX(E660INV.CODMS2) AS CODMS2, MAX(E660INV.CODMS3) AS CODMS3, MAX(E660INV.CODMS4) AS CODMS4, " +
"MAX(E660NFV.TIPNFS) AS TIPONF, MAX(E660INV.CODEMP) AS CODEMP, MAX(E660INV.CSTIPI) AS CSTIPI, " +
"MAX(E660INV.CSTCOF) AS CSTCOF, MAX(E660INV.CSTPIS) AS CSTPIS, SUM(1) AS QTDITM, " +
"COUNT(DISTINCT(E660INV.CODPRO)) AS DIFCOD, MAX(E660INV.DESIMP) AS DESIMP, SUM(E660INV.VLRAJS) AS VLRAJS, " +
"MAX(E660INV.CODTNS) AS CODTNS, MAX(E001TNS.VENTCF) AS CPRVEN, SUM(E660INV.VLRDZF) AS VLRDZF, MAX(E660INV.SEQINV) AS SEQINF, MAX(E660INV.NUMNFF) AS NUMNFF, " +
"SUM(E660INV.VLRPIT) AS VLRPIT, SUM(E660INV.VLRCRT) AS VLRCRT, SUM(E660INV.VLRBCR) AS VLRBCD, SUM(E660INV.VLRCOR) AS VLRCFD, MAX(E660INV.PERCOR) AS PERCFD, " +
"SUM(E660INV.VLRBPR) AS VLRBPD, SUM(E660INV.VLRPIR) AS VLRPID, MAX(E660INV.PERPIR) AS PERPID, SUM(E660INV.PREUNI) AS PREUNI, " +
"SUM(E660INV.QTDBPF) AS QTDBPI, MAX(E660INV.ALIPIF) AS ALIPIS, SUM(E660INV.QTDBPI) AS QTDBPD, MAX(E660INV.ALIPIS) AS ALIPID, " +
"SUM(E660INV.QTDBCF) AS QTDBCO, MAX(E660INV.ALICFF) AS ALICOF, SUM(E660INV.QTDBCO) AS QTDBCD, MAX(E660INV.ALICOF) AS ALICFD, " +
"SUM(E660INV.VLRBSP) AS VLRBSP, SUM(E660INV.VLRSTP) AS VLRSTP, SUM(E660INV.VLRBSC) AS VLRBSC, SUM(E660INV.VLRSTC) AS VLRSTC, " +
"E660INV.CODPRO, MAX(E660INV.CODBEM) AS CODBEM, MAX(E660INV.CODDER) AS CODDER, E660INV.CODSER, MAX(E660INV.CPLPRO) AS CPLPRO " +
"FROM E660INV, E660NFV, E001TNS, E075PRO, E012FAM " +
"WHERE E660INV.CODEMP = {CODEMP} AND " +
"E660INV.CODFIL = {CODFIL} AND " +
"E660INV.CODCLI = {CODPAR} AND " +
"E660INV.NUMNFI = {NUMNFI} AND " +
"E660INV.CODSNF = {CODSNF} AND " +
"E660NFV.TIPNFS > 0 AND " +
"E660INV.SEQNFI > 0 AND " +
"(E660INV.CSTCOF = E660INV.CSTPIS AND " +
"(E660INV.CSTPIS IN ('01', '02', '03', '04', '05', '06', '07', '08', '09', '49'))) AND " +
"E660NFV.CODEMP = E660INV.CODEMP AND " +
"E660NFV.CODFIL = E660INV.CODFIL AND " +
"E660NFV.CODCLI = E660INV.CODCLI AND " +
"E660NFV.NUMNFI = E660INV.NUMNFI AND " +
"E660NFV.NUMNFF = E660INV.NUMNFF AND " +
"E660NFV.CODSNF = E660INV.CODSNF AND " +
"E660NFV.CODTNS = E660INV.CODTNS AND " +
"E001TNS.CODEMP = E660INV.CODEMP AND " +
"E001TNS.CODTNS = E660INV.CODTNS AND " +
"E660INV.CODEMP = E075PRO.CODEMP AND " +
"E660INV.CODPRO = E075PRO.CODPRO AND " +
"E075PRO.CODEMP = E012FAM.CODEMP AND " +
"E075PRO.CODFAM = E012FAM.CODFAM " +
"GROUP BY E660INV.SEQNFI, E660INV.CODPRO, E660INV.CODSER ";
IMPACMDSQL = IMPACMDSQL +
" UNION ALL " +
"SELECT E660INV.SEQNFI, MAX(E660INV.SEQIPV) AS SEQITE, SUM(E660INV.PREUNI * E660INV.QTDENT) AS VLRCTB, " +
"SUM(E660INV.QTDENT) AS QTDENT, MAX(E660INV.UNIMED) AS UNIMED, SUM(E660INV.VLRDSC) AS VLRDSC, MAX(E660INV.CLAFIS) AS CLAFIS, MAX(E660INV.CODCLF) AS CODCLF, " +
"MAX(E660INV.CODSTR) AS CODSTR, SUM(E660INV.VLRBIC) AS VLRBIC, SUM(E660INV.VLRBSI) AS VLRBSI, SUM(E660INV.VLRBIP + E660INV.VLRBID) AS VLRBIP, " +
"MAX(E660INV.PERIPI) AS PERIPI, SUM(E660INV.VLRIPI + E660INV.VLRIPD) AS VLRIPI, MAX(E660INV.CODTRD) AS CODTRD, MAX(E660NFV.NOPOPE) AS NOPOPE, " +
"SUM(E660INV.VLRBPF) AS VLRBPS, MAX(E660INV.PERPIF) AS PERPIS, SUM(E660INV.VLRPIF) AS VLRPIS, SUM(E660INV.VLRBCF) AS VLRBCF, " +
"MAX(E660INV.PERCFF) AS PERCOF, SUM(E660INV.VLRCFF) AS VLRCOF, MAX(E660INV.CTARED) AS CTARED, MAX(E660INV.CPLPRO) AS DESCRICAO, " +
"SUM(E660INV.VLRSIC) AS VLRSIC, SUM(E660INV.VLRBSD) AS VLRBSD, SUM(E660INV.VLRISD) AS VLRISD, MAX(E660INV.PERICM) AS PERICM, " +
"SUM(E660INV.VLRICM) AS VLRICM, SUM(E660INV.VLRIIC) AS VLRIIC, SUM(E660INV.VLROIC) AS VLROIC, MAX(E660INV.CODDFS) AS CODDFS, " +
"MAX(E660INV.CODMS1) AS CODMS1, MAX(E660INV.CODMS2) AS CODMS2, MAX(E660INV.CODMS3) AS CODMS3, MAX(E660INV.CODMS4) AS CODMS4, " +
"MAX(E660NFV.TIPNFS) AS TIPONF, MAX(E660INV.CODEMP) AS CODEMP, MAX(E660INV.CSTIPI) AS CSTIPI, " +
"MAX(E660INV.CSTCOF) AS CSTCOF, MAX(E660INV.CSTPIS) AS CSTPIS, SUM(1) AS QTDITM, " +
"COUNT(DISTINCT(E660INV.CODPRO)) AS DIFCOD, MAX(E660INV.DESIMP) AS DESIMP, SUM(E660INV.VLRAJS) AS VLRAJS, " +
"MAX(E660INV.CODTNS) AS CODTNS, MAX(E001TNS.VENTCF) AS CPRVEN, SUM(E660INV.VLRDZF) AS VLRDZF, MAX(E660INV.SEQINV) AS SEQINF, MAX(E660INV.NUMNFF) AS NUMNFF, " +
"SUM(E660INV.VLRPIT) AS VLRPIT, SUM(E660INV.VLRCRT) AS VLRCRT, SUM(E660INV.VLRBCR) AS VLRBCD, SUM(E660INV.VLRCOR) AS VLRCFD, MAX(E660INV.PERCOR) AS PERCFD, " +
"SUM(E660INV.VLRBPR) AS VLRBPD, SUM(E660INV.VLRPIR) AS VLRPID, MAX(E660INV.PERPIR) AS PERPID, SUM(E660INV.PREUNI) AS PREUNI, " +
"SUM(E660INV.QTDBPF) AS QTDBPI, MAX(E660INV.ALIPIF) AS ALIPIS, SUM(E660INV.QTDBPI) AS QTDBPD, MAX(E660INV.ALIPIS) AS ALIPID, " +
"SUM(E660INV.QTDBCF) AS QTDBCO, MAX(E660INV.ALICFF) AS ALICOF, SUM(E660INV.QTDBCO) AS QTDBCD, MAX(E660INV.ALICOF) AS ALICFD, " +
"SUM(E660INV.VLRBSP) AS VLRBSP, SUM(E660INV.VLRSTP) AS VLRSTP, SUM(E660INV.VLRBSC) AS VLRBSC, SUM(E660INV.VLRSTC) AS VLRSTC, " +
"E660INV.CODPRO, MAX(E660INV.CODBEM) AS CODBEM, MAX(E660INV.CODDER) AS CODDER, E660INV.CODSER, MAX(E660INV.CPLPRO) AS CPLPRO " +
"FROM E660INV, E660NFV, E001TNS " +
"WHERE E660INV.CODEMP = {CODEMP} AND " +
"E660INV.CODFIL = {CODFIL} AND " +
"E660INV.CODCLI = {CODPAR} AND " +
"E660INV.NUMNFI = {NUMNFI} AND " +
"E660INV.CODSNF = {CODSNF} AND " +
"E660NFV.TIPNFS > 0 AND " +
"E660INV.SEQNFI > 0 AND " +
"(E660INV.CSTCOF = E660INV.CSTPIS AND " +
"(E660INV.CSTPIS IN ('01', '02', '03', '04', '05', '06', '07', '08', '09', '49'))) AND " +
"E660NFV.CODEMP = E660INV.CODEMP AND " +
"E660NFV.CODFIL = E660INV.CODFIL AND " +
"E660NFV.CODCLI = E660INV.CODCLI AND " +
"E660NFV.NUMNFI = E660INV.NUMNFI AND " +
"E660NFV.NUMNFF = E660INV.NUMNFF AND " +
"E660NFV.CODSNF = E660INV.CODSNF AND " +
"E660NFV.CODTNS = E660INV.CODTNS AND " +
"E001TNS.CODEMP = E660INV.CODEMP AND " +
"E001TNS.CODTNS = E660INV.CODTNS AND " +
"NOT EXISTS (SELECT 1 FROM E075PRO WHERE E075PRO.CODEMP = E660INV.CODEMP AND E075PRO.CODPRO = E660INV.CODPRO) " +
"GROUP BY E660INV.SEQNFI, E660INV.CODPRO, E660INV.CODSER "+
"ORDER BY 1";
fim;