Validação da Quantidade de Reserva Exclusiva dos Pedidos
1) Conceito
Um pedido possui reserva exclusiva quando está vinculado a uma pré-fatura cuja situação não seja "9 – Cancelada" ou "4 – Faturada".
Além disso, o pedido também terá reserva exclusiva quando estiver vinculado a uma nota fiscal com a situação "1 – Digitada", desde que a transação dessa nota fiscal esteja integrada a uma transação de estoque dos tipos: "ESN", "ESF", "ESC", "ESR" ou "ESB", ou seja, que gere movimentação de estoque.
2) Quais os problemas:
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.
3) Passo a passo para corrigir:
3.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 )
LEFT JOIN
E075PRO
ON
(
E120IPD.CODEMP = E075PRO.CODEMP
AND E120IPD.CODPRO = E075PRO.CODPRO )
WHERE
1=1
AND E075PRO.INDKIT <> 'S'
— AND 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. O canal, suporte ou manutenção podem incluir filtros em qualquer uma das tabelas envolvidas no comando SQL, conforme a necessidade.
Nesse filtro, é possível utilizar 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
3.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 3.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
3.3) Habilitar a rotina de validação da quantidade de reserva exclusiva dos pedidos.
4) 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.
4.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
- Se for informada a letra "N" nesses parâmetros, nenhuma outra opção será considerada e não entrará na rotina.
- Também não é possível informar a letra "P - Perguntar" junto da letra "E - Erro".
- Recomenda-se evitar o uso simultâneo dos parâmetros globais "L1" e "L2", pois isso resultaria em redundância de informações.
Pré-requisitos
- A opção "L1" não exige nenhum pré-requisito para ser utilizada.
- Para que a opção "L2" funcione, é necessário que o parâmetro global GerLogPed esteja com valor igual a "S - Sim" e que um dos valores contidos no parâmetro dinâmico PEDIDO.LOG.OPERACOES seja igual à "D - Depuração".
Observação
- O parâmetro global tem abrangência a nível de empresa e filial.
- A cada tentativa de log, o sistema verifica o valor do parâmetro global que habilita a rotina na base de dados, nunca em memória. Isso foi feito para que seja possível habilitar/desabilitar o recurso sem a necessidade de reiniciar o sistema/middleware.
4.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.
4.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.
4.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
4.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:
- Quando o parâmetro global RaePedAnt ou RaePedPos tiver um "L1", o sistema salvará um registro dentro da tabela Cadastros - Log Genérico (E000LOG) com as informações referentes ao processo, gravando na coluna nomtab o valor "ValidarRaePedido". Para trazer todas as ocorrências utilizar o select abaixo:
SELECT * FROM E000LOG WHERE NOMTAB='ValidarRaePedido';
- Quando o parâmetro global RaePedAnt ou RaePedPos tiver um "L2" e atender aos pré-requisitos descritos anteriormente, o sistema salvará um registro dentro da tabela de usuário (USU_T120PEDLOG), a qual existe somente quando habilitado o log de operações de pedido. Para trazer todas as ocorrências utilizar o select abaixo:
SELECT * FROM USU_T120PEDLOG;
5) 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.
6) Identificador de regra VEN-000VARAE01
Com o objetivo de disponibilizar um ponto de regras para uso genérico na rotina de validação da quantidade de reserva exclusiva dos pedidos, foi criado o identificador de regras VEN-000VARAE01. Para acessá-lo, clique aqui.
English
Español
English
Español


