Ajuda por telas > Mercado > Gestão de Distribuição > Validação da Quantidade de Reserva Exclusiva dos Pedidos

Validação da Quantidade de Reserva Exclusiva dos Pedidos

Segue abaixo o conceito da reserva exclusiva do pedido. Um pedido possuirá reserva exclusiva quando esse estiver vinculado em uma pré-fatura que não esteja com a situação "9 - Cancelada" ou "4 - Faturada".

O pedido também possuirá reserva exclusiva quando estiver vinculado à uma nota fiscal que estiver com a situação "1 - Digitada". A transação da nota fiscal precisa estar integrada com uma transação de estoque do tipo "ESN", "ESF", "ESC", "ESR", "ESB", ou seja, ela precisa movimentar estoque.

1) Qual o problema:

Quantidade de reserva exclusiva dos pedidos incoerente, que pode fazer com que os pedidos fiquem com a situação dos itens e/ou cabeçalho incorretas.

Quantidades de reserva exclusiva incoerentes podem impossibilitar o uso do pedido em notas e pré-faturas e/ou ocasionar atualizações do estoque incorretas.

2) Passo a passo para corrigir:

2.1) Diagnóstico: executar o select para buscar itens de pedido que estão com a quantidade de reserva exclusiva incorreta.

SELECT TAB.* FROM (
SELECT E120IPD.CODEMP, E120IPD.CODFIL, E120IPD.NUMPED, E120IPD.SEQIPD,
E120IPD.QTDRAE RAEPED,


( SELECT ISNULL(SUM(PES.QTDPPF),0)
FROM E135PES PES
WHERE PES.CODEMP = E120IPD.CODEMP
AND PES.FILPED = E120IPD.CODFIL
AND PES.NUMPED = E120IPD.NUMPED
AND PES.SEQIPD = E120IPD.SEQIPD
AND PES.SITPES NOT IN (9, 4) ) RAEPFA,

( SELECT ISNULL(SUM(IPV.QTDFAT),0)
FROM E140IPV IPV, E140NFV NFV
WHERE IPV.CODEMP = E120IPD.CODEMP
AND IPV.FILPED = E120IPD.CODFIL
AND IPV.NUMPED = E120IPD.NUMPED
AND IPV.SEQIPD = E120IPD.SEQIPD
AND IPV.CODEMP = NFV.CODEMP
AND IPV.CODFIL = NFV.CODFIL
AND IPV.CODSNF = NFV.CODSNF
AND IPV.NUMNFV = NFV.NUMNFV
AND NFV.SITNFV = '1'
AND ( SELECT COUNT(*)
FROM E001INT
WHERE E001INT.CODTNS = IPV.TNSPRO
AND E001INT.CODEMP = IPV.CODEMP
AND E001INT.MODINT IN ('ESN', 'ESF', 'ESC', 'ESR', 'ESB') ) > 0 )
RAENFV
FROM E120IPD
LEFT JOIN E135PES ON (E120IPD.CODEMP = E135PES.CODEMP
AND E120IPD.CODFIL = E135PES.FILPED
AND E120IPD.NUMPED = E135PES.NUMPED
AND E120IPD.SEQIPD = E135PES.SEQIPD )
LEFT JOIN E140IPV ON (E120IPD.CODEMP = E140IPV.CODEMP
AND E120IPD.CODFIL = E140IPV.CODFIL
AND E120IPD.NUMPED = E140IPV.NUMPED
AND E120IPD.SEQIPD = E140IPV.SEQIPD )
WHERE E120IPD.SEQCVP = 0
SeuFiltroAqui
GROUP BY E120IPD.CODEMP, E120IPD.CODFIL, E120IPD.NUMPED, E120IPD.SEQIPD, E120IPD.QTDRAE
) TAB
WHERE RAEPED <> (RAEPFA + RAENFV)

Observação

Pode ser adicionado um filtro customizado ao comando SQL, substituindo a linha que contém o texto SeuFiltroAqui. Caso não for necessária a utilização de um filtro, retire a linha que contém o texto SeuFiltroAqui.

Nesse filtro pode ser feito uso de qualquer campo das seguintes tabelas: tabela de item do pedido (Vendas - Pedidos - Itens de Produto (E120IPD)), tabela de item da análise (Vendas - Análise de Embarque - Itens de Serviço e Produto (E135PES)) ou tabela de item da nota fiscal de saída (Vendas - Notas Fiscais de Saída - Itens de Produtos (E140IPV)).

Exemplo de filtro de um pedido em específico:

AND E120IPD.CODEMP = 1
AND E120IPD.CODFIL = 1
AND E120IPD.NUMPED= 23

Exemplo de filtro de uma análise em específico:

AND E135PES.CODEMP = 1
AND E135PES.CODFIL = 1
AND E135PES.NUMANE = 23

Exemplo de filtro de uma nota em específico:

AND E140IPV.CODEMP = 1
AND E140IPV.CODFIL = 1
AND E140IPV.CODSNF= "NE"
AND E140IPV.NUMNFV= 23

2.2) Comando update para alterar a quantidade de reserva exclusiva dos pedidos com base no que existe em pré-faturas e notas.

Atenção

Deve ser verificado o comando para casos onde existe integração com sistemas externos.

UPDATE E120IPD SET QTDRAE = ( SELECT ISNULL(SUM(PES.QTDPPF),0)
FROM E135PES PES
WHERE PES.CODEMP = E120IPD.CODEMP
AND PES.FILPED = E120IPD.CODFIL
AND PES.NUMPED = E120IPD.NUMPED
AND PES.SEQIPD = E120IPD.SEQIPD
AND ( PES.SITPES <> 9
AND PES.SITPES <> 4) )
+
( SELECT ISNULL(SUM(IPV.QTDFAT),0)
FROM E140IPV IPV, E140NFV NFV
WHERE IPV.CODEMP = E120IPD.CODEMP
AND IPV.FILPED = E120IPD.CODFIL
AND IPV.NUMPED = E120IPD.NUMPED
AND IPV.SEQIPD = E120IPD.SEQIPD
AND IPV.CODEMP = NFV.CODEMP
AND IPV.CODFIL = NFV.CODFIL
AND IPV.CODSNF = NFV.CODSNF
AND IPV.NUMNFV = NFV.NUMNFV
AND NFV.SITNFV = '1'
AND ( SELECT COUNT(*)
FROM E001INT
WHERE CODTNS = IPV.TNSPRO
AND CODEMP = IPV.CODEMP
AND MODINT IN ('ESN', 'ESF', 'ESC', 'ESR', 'ESB') ) > 0 )
WHERE QTDRAE <> (( SELECT ISNULL(SUM(PES.QTDPPF),0)
FROM E135PES PES
WHERE PES.CODEMP = E120IPD.CODEMP
AND PES.FILPED = E120IPD.CODFIL
AND PES.NUMPED = E120IPD.NUMPED
AND PES.SEQIPD = E120IPD.SEQIPD
AND ( PES.SITPES <> 9
AND PES.SITPES <> 4) )
+
( SELECT ISNULL(SUM(IPV.QTDFAT),0)
FROM E140IPV IPV, E140NFV NFV
WHERE IPV.CODEMP = E120IPD.CODEMP
AND IPV.FILPED = E120IPD.CODFIL
AND IPV.NUMPED = E120IPD.NUMPED
AND IPV.SEQIPD = E120IPD.SEQIPD
AND IPV.CODEMP = NFV.CODEMP
AND IPV.CODFIL = NFV.CODFIL
AND IPV.CODSNF = NFV.CODSNF
AND IPV.NUMNFV = NFV.NUMNFV
AND NFV.SITNFV = '1'
AND ( SELECT COUNT(*)
FROM E001INT
WHERE CODTNS = IPV.TNSPRO
AND CODEMP = IPV.CODEMP
AND MODINT IN ('ESN', 'ESF', 'ESC', 'ESR', 'ESB') ) > 0 ))
SeuFiltroAqui

Observação

Assim como no passo 2.1, aqui também poderá ser adicionado um filtro customizado ao comando SQL, substituindo a linha que contém o texto SeuFiltroAqui. Caso não for necessária a utilização de um filtro, retire a linha que contém o texto SeuFiltroAqui.

Nesse filtro pode ser feito uso de qualquer campo das seguintes tabelas: tabela de item do pedido (Vendas - Pedidos - Itens de Produto (E120IPD)), tabela de item da análise (Vendas - Análise de Embarque - Itens de Serviço e Produto (E135PES)) ou tabela de item da nota fiscal de saída (Vendas - Notas Fiscais de Saída - Itens de Produtos (E140IPV)).

Exemplo de filtro de um pedido em específico:

AND E120IPD.CODEMP = 1
AND E120IPD.CODFIL = 1
AND E120IPD.NUMPED= 23

Exemplo de filtro de uma análise em específico:

AND E135PES.CODEMP = 1
AND E135PES.CODFIL = 1
AND E135PES.NUMANE = 23

Exemplo de filtro de uma nota em específico:

AND E140IPV.CODEMP = 1
AND E140IPV.CODFIL = 1
AND E140IPV.CODSNF= "NE"
AND E140IPV.NUMNFV= 23

2.3) Habilitar a rotina de validação da quantidade de reserva exclusiva dos pedidos.

3) Rotina de validação da quantidade de reserva exclusiva dos pedidos:

Com essa rotina será possível verificar se as quantidades de reserva exclusiva do pedido estão corretas e apresentar/logar a informação para o cliente.

3.1) Como ativar a rotina:
Ela é ativada pelos parâmetros globais RaePedAnt e RaePedPos, podendo ter os seguintes valores: "P - Perguntar", "E - Erro", "L1 - Log simples", "L2 - Log aprimorado" ou "N - Não Validar". Poderá ser informado apenas um dos valores mencionados, ou uma combinação destes.

Regras de preenchimento

Pré-requisitos

Observação

3.2) Como a rotina funciona
Quando são encontradas divergências na quantidade de reserva exclusiva dos pedidos, antes e/ou depois do processamento das rotinas em que essa validação se aplica (a depender do parâmetro global utilizado e da configuração de cada um), o sistema pode perguntar ao usuário o que deve ser feito, gerar um erro, logar ou não validar.

3.3) Como desabilitar a rotina em emergências
O recurso deve ser desabilitado mediante a alteração de algum dos parâmetros globais por meio da tela Manutenção dos parâmetros globais do sistema (F000PGS). Em emergências, caso não seja possível acessar essa tela, pode-se desabilitar por meio do comando SQL de Update abaixo:

UPDATE E000PXF
SET VLRCMP = 'N'
WHERE CODEMP = Informe o Código da Empresa aqui.
AND CODFIL = Informe o Código da Filial aqui.
AND CODUSU = 0
AND IDFFRM = '$PARAMETROS_GLOBAIS_SAPIENS$'
AND CMPFRM = Informe o Parâmetro Global que deseja desabilitar aqui.

3.4) A rotina é executada nas seguintes telas, processos automáticos e web service:

* Formação de Cargas (via Pedidos) (F135FCP)
* Exclusão de Cargas (F135ECA)
* Formação de Cargas Via Produtos (F135FCA)
* Inclusão de Pedidos na Carga (F135IPC)
* Manutenção de Pré-faturas (F135MPF)
* Faturamento Agrupado de Cargas (F149GNA)
* Atendimento Automático de Pedidos (Análise de embarque) (F135AEA)
* Processo automático 01 - Análise de Embarque
* Processo automático 145 - Integração Pré-fatura
* Web service com.senior.g5.co.mcm.ven.prefatura, porta CancelarPreFatura

3.5) Como consultar os dados salvos em log:

Para consultar as divergências encontradas pela validação da quantidade de reserva exclusiva, deve-se proceder de uma das seguintes formas:

SELECT * FROM E000LOG WHERE NOMTAB='ValidarRaePedido';

SELECT * FROM USU_T120PEDLOG;

4) Onde o sistema pode e onde não pode executar a validação

Os parâmetros dinâmicos PEDIDO.VALIDARQTDRAE.ONDE.PERMITE e PEDIDO.VALIDARQTDRAE.ONDE.NAOPERMITE definem as telas, rotinas e web services em que a validação da quantidade reservada exclusivamente de um pedido poderá, respectivamente, ser executada e não executada.

Como o sistema usa os dois parâmetros para saber se a validação será ou não realizada

O sistema executa os passos na ordem descrita abaixo. Quando, no entanto, não é permitida a validação, o restante dos passos não é seguido.

1. Se existe informação dentro do parâmetro PEDIDO.VALIDARQTDRAE.ONDE.NAOPERMITE e a tela, rotina e/ou web service executado está listado dentro do parâmetro, então não ocorre validação. Os demais passos não são executados.

2. Se não existe informação dentro do parâmetro PEDIDO.VALIDARQTDRAE.ONDE.NAOPERMITE, então o sistema passa para o passo 3.

3. Se existe informação dentro do parâmetro PEDIDO.VALIDARQTDRAE.ONDE.PERMITE e a tela, rotina e/ou web service executado está listado dentro do parâmetro, então ocorre validação. Os demais passos não são executados.

4. Se não existe informação dentro do parâmetro PEDIDO.VALIDARQTDRAE.ONDE.PERMITE, então ocorre a validação. Os demais passos não são executados.

5. Se não há informação em nenhum dos parâmetros, então ocorre a validação.

Exemplo: Geração de uma pré-fatura pela tela Formação de Cargas (via Pedidos) (F135FCP).

Lista Valor Resultado
Não Permite (vazio) Pode validar.
Permite (vazio) Pode validar.

Vai executar a validação: sim.

Lista Valor Resultado
Não Permite F135FCP Não pode validar. Dessa forma, nem chega a executar a lista "Permite".
Permite (vazio) -

Vai executar a validação: não.

Lista Valor Resultado
Não Permite (vazio) Pode validar.
Permite F135FCP Pode validar.

Vai executar a validação: sim.

Lista Valor Resultado
Não Permite F135FCP Não pode validar. Dessa forma, nem chega a executar a lista "Permite".
Permite F135FCP -

Vai executar a validação: não.

Lista Valor Resultado
Não Permite F135ECA Pode validar.
Permite (vazio) Pode validar.

Vai executar a validação: sim.

Lista Valor Resultado
Não Permite F135ECA Pode validar.
Permite F135ECA Não pode validar.

Vai executar a validação: não.

Lista Valor Resultado
Não Permite (vazio) Pode validar.
Permite F135ECA Não pode validar.

Vai executar a validação: não.

Observação

Ao utilizar um processo automático que usa a tela para processamento, serão considerados tanto o nome da tela quanto o código da rotina do processo automático. O mesmo acontece com web services que utilizem a tela para processamento.

Este artigo ajudou você?