| 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) : |
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.
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.
A partir do valor proporcional Base.QtdeExpedir, são criadas duas colunas auxiliares:
QtdeExpedirInteiraArredondadaBaixo
Parte inteira da quantidade, obtida com TRUNC.
Exemplos:
1,99 → 1
3,01 → 3
QtdeSobra
Indica se existe parte decimal.
Regra:
Exemplo prático:
| QtdeExpedir (Base) | Inteira (TRUNC) | Sobra | Resultado Final |
|---|---|---|---|
| 1,99 | 1 | 1 | 2 |
| 3,01 | 3 | 0 | 3 |
👉 Assim, o código garante que toda fração decimal seja considerada como 1 unidade adicional, simplificando a distribuição proporcional.
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.