01. DADOS GERAIS

Produto:

Linha de Produto:

Segmento:

Tipo de Documento:

Inovação

Módulo:Contrato Fidelidade
Caminho: Apuração > Consulta Apuração dos Contratos de Retorno
Função:MGC00101 - Apuração dos Contratos de Retorno
País:Brasil
Requisito/Story/Issue (informe o requisito relacionado) :

02. SITUAÇÃO/REQUISITO

      Ao realizar o INSERT na tabela MGC_RETORNOAPURACAOPEDPROD para apurações de notas fiscais vinculadas a pedidos de compra com seleção inversa, é executado um cálculo de proporção entre empresas, levando em consideração as quantidades a expedir, as recebidas e as devoluções automáticas.

      Ao final da query, é realizada uma verificação para validar se a diferença entre a quantidade expedida e a quantidade recebida é diferente de zero. No entanto, devido à natureza do cálculo, essa diferença pode resultar em valores decimais extremamente pequenos — com mais de 20 casas decimais — o que, apesar de irrelevante do ponto de vista prático, acaba gerando o INSERT de registros com quantidades praticamente nulas.

      Durante o desenvolvimento, também foi identificado um problema relacionado à exibição da coluna VLRBASE, que estava limitada a apenas 2 casas decimais, enquanto a coluna VLRDESCONTO utiliza 5 casas decimais. Isso gera uma distorção no cálculo do percentual de desconto exibido em tela, pois o arredondamento implícito de VLRBASE afeta a precisão do valor final, resultando em um percentual incorreto.

03. PRÉ-REQUISITOS

O parâmetro de apuração deve estar habilitado para considerar a empresa de destino.

Imagem 1 - Parâmetros de contrato

Realizar um pedido de compra via Gerenciador de Compras, utilizando o modelo de seleção inversa, com quantidades expedidas para duas ou mais lojas.

Efetuar o recebimento da nota fiscal, seja total ou parcial.

Deve ocorrer uma devolução automática durante a conferência de carga.


04. SOLUÇÃO

Foi aplicada uma correção no INSERT da tabela MGC_RETORNOAPURACAOPEDPROD, responsável pelo tratamento dos registros da empresa depósito, para evitar a geração de linhas com quantidades praticamente nulas.
O problema ocorria devido a diferenças mínimas entre as quantidades expedidas e recebidas — resultantes de cálculos proporcionais com valores decimais extremamente pequenos (superiores a 20 casas decimais).
A solução adotada foi o arredondamento da diferença para 2 casas decimais.

Adicionalmente, nos INSERTs da tabela MGC_APURACAONFDET, foi ajustado o arredondamento da coluna VLRBASE para 5 casas decimais, garantindo maior precisão no cálculo do percentual de desconto e evitando distorções causadas por diferenças de escala em relação à coluna VLRDESCONTO.

Também foi aplicada uma correção no INSERT da tabela MGC_RETORNOAPURACAOPEDPROD para os registros das empresas de destino.
O cálculo da proporção foi refeito: agora, a quantidade a expedir de cada loja é multiplicada pela fração que cada nota de recebimento representa em relação ao total efetivamente recebido, desconsiderando o total conferido.

Lógica do Cálculo CalcQtdeExpedir

A partir do valor proporcional Base.QtdeExpedir, são criadas duas colunas auxiliares:

Exemplo prático:

QtdeExpedir (Base)Inteira (TRUNC)SobraResultado Final
1,99112
3,01303

👉 Assim, o código garante que toda fração decimal seja considerada como 1 unidade adicional, simplificando a distribuição proporcional.

05. REQUISITOS DE VERSÃO

       Se estiver na versão 25.01, atualizar o sistema para o service pack 25.01.031 ou superior.

       Se estiver na versão 25.07, atualizar o sistema para o service pack 25.07.006 ou superior.

06. DOCUMENTOS RELACIONADOS

DOCUMENTO(S) DE REFERÊNCIA