Processo automático 67 - Importação de documentos eletrônicos de entrada
Processo
Tipo do Processo: 04 - Rotina.
O processo automático 67 (recebimento eletrônico) executa a tela Via Recebimento de Documento Eletrônico (F000INE) que, por sua vez, faz a carga das tabelas intermediárias de Recebimento de Documentos Eletrônicos:
- E000NFC - Notas Fiscais de Entrada - Dados Gerais;
- E000IPC - Notas Fiscais de Entrada - Itens de Produto;
- E000ISC - Notas Fiscais de Entrada - Itens de Serviço;
- E000PAR - Notas Fiscais de Entrada - Parcelas;
- E000DLS - Entrada, Vencimento, Lote, Série;
- E000EXF - Notas Fiscais de Entrada - Ligação Notas Frete;
- E000LNP - Notas Fiscais de Entrada - Ligação Entre Itens Produto Notas Fiscais Entrada;
- E000LNS - Notas Fiscais de Entrada - Ligação Entre Itens Serviço Notas Fiscais Entrada.
Já no processamento, o processo automático faz a geração das notas fiscais de entrada nas tabelas de Compras:
- E440NFC - Notas Fiscais de Entrada - Dados Gerais;
- E440IPC - Notas Fiscais de Entrada - Itens de Produto;
- E440ISC - Notas Fiscais de Entrada - Itens de Serviço;
- E440PAR - Notas Fiscais de Entrada - Parcelas;
- E440DLS - Notas Fiscais de Entrada - Entrada, Vencimento, Lote, Série;
- E440EXF - Notas Fiscais de Entrada - Ligação Notas de Frete;
- E440LNP - Ligação Entre Itens de Produto de Notas Fiscais de Entrada;
- E440LNS - Ligação Entre Itens de Serviço de Notas Fiscais de Entrada.
Assim, a nota permanecerá na situação digitada e o seu fechamento será feito pela tela Nota Fiscal de Entrada Agrupada (F440GNE).
No entanto, mesmo havendo um processo automático corretamente parametrizado, se uma nota fiscal que tenha sido integrada com tributos for cancelada, será imprescindível proceder com o estorno dos tributos de forma manual.
Parâmetros do processo
FECHARNOTA
Define se a nota deve ser fechada após processada de acordo com o funcionamento da opção Fechar nota após processar da tela F000INE. Opções:
- 0 - As notas fiscais não devem ser fechadas;
- 1 - As notas fiscais devem ser fechadas.
FILIAL
O comportamento padrão dessa rotina é executar o processo na empresa e filial logadas, porém é possível definir uma abrangência de filiais a serem processadas.
Exemplo:
- para processar apenas a Filial 3: Filial = 3
- para processar as Filiais 1, 3, 5: Filial = 1,3,5
- para processar as Filiais 1, 2, 3, 4, 5: Filial = 1-5
- para processar apenas a Filial logada: nesse caso não é necessário informar esse parâmetro, pois esse é o comportamento padrão da rotina.
O processo utiliza a filial informada nesse parâmetro como critério de "desempate" quando houver mais de uma filial cadastrada como o mesmo CNPJ e Inscrição Estadual. Se não houver uma filial informada, a filial logada será utilizada para esse fim.
SQLSTRING
Através desse parâmetro é possível acrescentar uma cláusula que será concatenada ao comando de filtro utilizado para busca dos documentos na tabela intermediária de Notas Fiscais de Entrada (E000NFC). Assim, sistema acrescenta automaticamente o comando 'AND' e concatena a cláusula recebida ao final do comando nativo.
Exemplo: para processar apenas os documentos cuja Espécie do Documento seja 55 ou 57: SqlString=E000NFC.CODEDC IN ("55", "57")
Importante
Acrescente a tabela E000NFC antes do campo desejado para filtro.
CONTROLAREXCECAOREGRA
Define se a nota fiscal de entrada é gerada ou fica pendente em caso de erro no fechamento ou na execução do Identificador de regra CPR-000INECM03. O parâmetro tem as opções 0 - Não e 1 - Sim, sendo 0 - Não o valor padrão. Quando o campo estiver definido como 1 - Sim, se ocorrer algum erro a nota fiscal de entrada não será gerada, ficando pendente com a situação Inconsistente. Caso o campo esteja definido com a opção padrão, mesmo se ocorrer um erro a nota fiscal é gerada normalmente.
Além disso, quando definido como 1 - Sim o sistema faz um controle de transações para a regra: se ela gerar alguma exceção, essa deverá ser retornada para a variável CPRAGEREXC do identificador CPR-000INECM03 igual a S - Sim e o sistema encerrará a transação do banco sem gravar as informações na base.
DUPLICARDEFINICAOFORNECEDOR
Possibilita parametrizar o sistema para duplicar as definições do fornecedor caso ele não exista na filial em que o documento está sendo gerado.
PARCELASORDEMCOMPRA
Indica o uso das parcelas da ordem de compra na execução via agendamento. Opções:
- 0 - As parcelas serão geradas pelo modelo padrão sem considerar as parcelas da ordem de compra;
- 1 - As parcelas serão geradas conforme as parcelas definidas na ordem de compra.
CADASTRARFORNECEDORAUTOMATICO
Permite o cadastro automático do fornecedor, quando habilitado. O parâmetro tem as opções "0 - Não habilitado" e "1 - Habilitado", sendo "0 - Não habilitado" o valor padrão.
CADASTRARTRANSPORTADORAUTOMATICO
Permite o cadastro automático de transportadora, quando habilitado. O parâmetro tem as opções "0 - Não habilitado" e "1 - Habilitado", sendo "0 - Não habilitado" o valor padrão.
CRIARLIGACAOPRODUTOXFORNECEDOR
Permite o cadastro automático da ligação produto X fornecedor, quando habilitado. O parâmetro tem as opções "0 - Não habilitado" e "1 - Habilitado", sendo "0 - Não habilitado" o valor padrão. Para habilitar o cadastro da ligação, acesse a tela F000INE > botão Seleção (F000SDV) e selecione o campo Criar ligação de fornecedor com produto ao processar.
Orientações adicionais para utilização do processo
Importante
As orientações a seguir são essenciais para a utilização do processo agendado em ambientes com grande volume de documentos a serem processados pela rotina. O não atendimento dessas orientações poderá causar problemas na execução da rotina, impactando o Middleware Senior e causando outras situações como, por exemplo, erro de "OutOfMemory / Out of Memory" na execução do processo.
As orientações a seguir são baseadas na utilização do parâmetro SqlString, que permite concatenar parâmetros SQL no comando padrão do processo agendado. Estas informações oferecem dicas para otimizar a parametrização do processo agendado, garantindo uma melhor utilização e desempenho. Caso você tenha dúvidas das melhores condições personalizadas a serem adicionadas no parâmetro SqlString, consulte o DBA responsável pelo ambiente onde o sistema está instalado.
Caso seja necessário coletar o Select que o sistema utiliza para buscar os documentos a serem processados pela rotina, o Log do SQLMon pode ser coletado para a execução manual do processo agendado. Para isso, siga as instruções detalhadas no artigo ERP - Processo Agendado - Como efetuar a depuração de uma regra ou efetuar a coleta de um log de SQLMon em um Processo Agendado/Processo Automático (-agendador:?).
O processo agendado, quando executado, executa um select no banco de dados para buscar os documentos que serão processados pela rotina. Quanto maior o número de documentos, maior é o tempo de processamento da rotina. O período de agendamento do processo (a cada quantos minutos ele será executado) precisa ser parametrizado pensando na quantidade média de registros que o processo buscará na base de dados. Lembre-se de que para grande volume de registros é necessário seguir as orientações indicadas abaixo, principalmente no que tange limitar a quantidade de registros que a rotina vai buscar da base de dados a cada ciclo de execução do processo.
Como garantir que a ativação do processo agendado não busque NFs antigas que não devem ser verificadas pelo processo
Neste caso, a orientação é utilizar o parâmetro SqlString para concatenar no processo agendado um filtro pelo campo DATEMI (data de emissão) ou outro campo que permita um filtro de NF recentes de maneira mais dinâmica. Isso ajudará a limitar a quantidade de documentos que o processo localizará para processamento.
SqlString=DATEMI >= '2024-07-01'
Importante
O formato de campos de data para preenchimento do parâmetro SqlString poderá variar de acordo com o banco de dados e o ambiente onde o sistema está instalado. Em caso de dúvidas, verifique qual o formato adequado diretamente com o DBA responsável pelo ambiente.
Como garantir que o processo agendado busque um número limitado de registros para processar a cada execução
Neste caso, a orientação é utilizar o parâmetro SqlString para concatenar no processo agendado uma função do próprio banco de dados, o que limitará o número de registros a serem retornados. Essa função variará de acordo com o banco de dados utilizado, e o formato de uso da função também será alterado para não interferir no select principal da rotina.
Importante
Além de utilizar o parâmetro SqlString, é importante fazer utilização de processos distintos para cada Empresa/Filial que tenha grande volume de registros a serem processados. Ou, pelo menos, agrupar o processamento de algumas filiais de acordo com o volume de dados.
No caso do banco de dados Oracle, é possível utilizar a função ROWNUM para fazer essa limitação.
Segue exemplo de uma parametrização para filtrar apenas CT-es, com data de emissão a partir de uma data específica, limitando o processamento a apenas 70 CT-es por ciclo de execução do processo automático:
SqlString=E000NFC.CODEDC = '57' AND E000NFC.DATEMI >= TO_DATE ('10/10/2023','DD/MM/YYYY') and ROWNUM [=70
No caso do banco de dados Microsoft SQLServer, poderá ser utilizada a a função TOP. No entanto, é necessário estruturar o comando com um subselect, pois, por padrão, o select realizado pelo sistema possui um ORDER BY NUMNFC ao final do comando.
Segue um exemplo de parametrização para filtrar documentos com data de emissão a partir de uma data específica e limitar o processamento a apenas 5 documentos por cada ciclo de execução do processo automático:
SqlString=E000NFC.DATEMI ]= '2024-07-01' AND E000NFC.STANFV IN (1) AND E000NFC.NUMNFC IN (select TOP 5 e000nfc.numnfc from e000nfc where (E000NFC.STANFV IN (1) OR (E000NFC.STANFV = 3 AND E000NFC.INDCAN = 'S')) AND E000NFC.CGCFIL = 80680093000181 AND E000NFC.DATEMI >= '2024-07-01').
Note que, no caso do comando do SQLServer, algumas cláusulas do WHERE devem ser adicionadas no subselect para que o filtro funcione adequadamente, com base no comando padrão do sistema. No exemplo acima, o CNPJ informado é o CNPJ da filial onde o processo está sendo executado. Caso seja utilizado um agrupamento de filiais para processamento, convém coletar o select padrão do sistema para esse agrupamento, montado de forma a validar os parâmetros que devem ser adicionados no subselect.
Importante
Verifique também o tópico sobre como garantir que o processo automático não entre em looping, processando apenas registros inconsistentes. Essa parametrização é importante e deve ser realizada juntamente com a limitação de registros a serem processados pelo processo automático.
Como garantir um processamento paralelizado de registros sem que os processos paralelos leiam os mesmos registros
Nesse caso, uma das melhores maneiras de paralelizar a execução da rotina em dois processos agendados, sem causar impactos negativos, é parametrizar um processo para ler apenas documentos cuja numeração seja par e outro processo para ler apenas documentos cuja numeração seja ímpar.
Segue exemplo de parametrização para filtrar apenas CT-es com data de emissão a partir de uma data específica, limitando o processamento a 70 CT-es por ciclo de execução do processo automático, apenas para registros com numeração ímpar:
SqlString=E000NFC.CODEDC = '57' AND E000NFC.DATEMI >= TO_DATE ('10/10/2023','DD/MM/YYYY') and ROWNUM [=70 AND E000NFC.STANFV=1 AND MOD(E000NFC.NUMNFC,2)]0
Segue exemplo de uma parametrização para filtrar apenas CT-es com data de emissão a partir de uma data específica, limitando o processamento a 70 CT-es por ciclo de execução do processo automático, apenas para registros com numeração par:
SqlString=E000NFC.CODEDC = '57' AND E000NFC.DATEMI >= TO_DATE ('10/10/2023','DD/MM/YYYY') and ROWNUM <=70 AND E000NFC.STANFV=1 AND MOD(E000NFC.NUMNFC,2)=0
Caso você precise, ainda, paralelizar o processamento em mais de dois processos agendados, considere a possibilidade de criar outros filtros personalizados, que podem ou não ser baseados no número do documento. Solicite o apoio do DBA da sua empresa para validar comandos SQL que possam auxiliar nesse tipo de parametrização da rotina.
Como garantir que o processo agendado não ficará em looping de processamento de registros que contenham erros
Neste caso, é necessária a realização de um filtro no campo E000NFC.StaNfv de forma que a rotina busque apenas os registros que tenham o status "1 - Pendente". Consulte a descrição deste campo no TBS do sistema para obter detalhes sobre as opções disponíveis.
Se o filtro for sempre aplicado ao status "1 - Pendente", a rotina automática executará apenas os registros pendentes. Registros inconsistentes poderão ser tratados manualmente através da tela F000INE, evitando que esses registros fiquem em looping no processo automático até que um usuário resolva as pendências.
Esse tipo de filtro é essencial ao parametrizar um limite de registros a serem processados pela rotina. Caso seja definido um limite, como os 10 primeiros registros, e esses registros sejam inconsistentes, a rotina ficará processando repetidamente os mesmos 10 registros inconsistentes, sem encontrar outros registros para processar.
Identificadores de regras
Módulo | Código |
---|---|
CPR | 000CONVR01 |
CPR | 000INECM03 |
Parâmetros globais
Nome | Descrição |
---|---|
UtiViaCep |
Utilizar o web service ViaCep para buscar dados de CEPs não cadastrados na tela F008CEP. |