Pular para o conteúdo principal

Parâmetro de Alerta de Valor de Custo

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 → campo "Alerta Valor de Custo" Tabela: PARMFATUR.ST_AVISACUSTO Valor padrão: N (Não)

Telas impactadas​

MóduloCódigoDescrição
Nota Fiscal SaídaMNF002Emissão de NF de saída (único módulo que aplica a regra efetivamente)

Observação: O campo é carregado também pelos SQL de leitura de PARMFATUR em MNF008, MCO006, RCA006 e CPD009, mas nesses módulos o valor é apenas transportado (não há lógica consumindo o parâmetro). A validação real ocorre somente em MNF002.

Campos envolvidos​

CampoDescrição
ITEMNOTA.VL_UNITARIOValor unitário informado no item da NF
ITEMNOTA.PC_DESCONTOPercentual de desconto aplicado ao item (usado para calcular o valor líquido)
RETORNA_SALDOESTOQUE.O_VL_CUSTOValor de custo vigente do item, retornado pela procedure de saldo de estoque

Procedures impactadas​

ProcedureUso
RETORNA_SALDOESTOQUE(CD_EMPRESA, CD_ITEM, NULL, NULL, NULL)Obtém o O_VL_CUSTO do produto para comparar com o valor unitário informado

Opções disponíveis​

S - Sim (Avisa)​

O que fazDetalhe
Quando disparaNo BeforePost do item da NF (MNF002), antes de gravar o item
Cálculo do valor líquidoSe houver PC_DESCONTO: VL_UNITARIO - (VL_UNITARIO * PC_DESCONTO / 100). Caso contrário, usa VL_UNITARIO puro
Consulta de custoSELECT COALESCE(O_VL_CUSTO, 0) FROM RETORNA_SALDOESTOQUE(CD_EMPRESA, CD_ITEM, NULL, NULL, NULL)
Condição do alertaSe Valor <= Custo, exibe confirmação (C-0000) ao usuário
Se usuário confirma (SIM)Permite continuar a inclusão do item; flag interno ValidaCusto := False para não perguntar de novo
Se usuário recusa (NÃO)Lança JException W-0000 com a mensagem "Inclusão do Produto Cancelada!" e mantém ValidaCusto := True

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → Alerta Valor de Custo = "Sim"
  2. Salve os parâmetros (F6)
  3. Certifique-se que o produto X possui custo de estoque > 0 (ex.: Custo = R$ 50,00)
  4. Abra uma NF de Saída em MNF002
  5. Adicione o produto X
  6. Informe VL_UNITARIO = R$ 40,00 (abaixo do custo) → Ao tentar confirmar o item, o sistema exibe a mensagem:
    O Valor Unitário do Produto X esta Menor ou Igual ao Valor de Custo! Deseja Continuar?
    Valor Unitário: 40,00
    Valor de Custo: 50,00
  7. Clique em "Sim" → Item é gravado normalmente; o flag interno desativa novas perguntas no mesmo ciclo
  8. Clique em "Não" → Inclusão é cancelada com a mensagem "Inclusão do Produto Cancelada!"
  9. Refaça o teste com VL_UNITARIO = R$ 80,00 (acima do custo) → Item é gravado sem nenhum aviso

Resultado esperado: Ao inserir/alterar um item cujo valor unitário (já com desconto aplicado) seja menor ou igual ao custo retornado por RETORNA_SALDOESTOQUE, o sistema exige confirmação do operador antes de prosseguir.


N - Não (Padrão)​

O que fazDetalhe
ValidaçãoDesligada. O BeforePost do item da NF ignora completamente a comparação entre valor unitário e custo
Consulta RETORNA_SALDOESTOQUENão é executada para esta validação
Impacto na digitaçãoUsuário pode digitar qualquer valor unitário (inclusive abaixo do custo) sem nenhuma pergunta ou alerta

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → Alerta Valor de Custo = "Não"
  2. Salve os parâmetros (F6)
  3. Certifique-se que o produto X possui custo de estoque > 0 (ex.: Custo = R$ 50,00)
  4. Abra uma NF de Saída em MNF002
  5. Adicione o produto X
  6. Informe VL_UNITARIO = R$ 40,00 (abaixo do custo) → Item é gravado sem qualquer aviso
  7. Informe VL_UNITARIO = R$ 1,00 (muito abaixo do custo) → Item também é gravado sem aviso

Resultado esperado: Total liberdade. O sistema não compara o preço de venda com o custo do produto ao salvar o item.

Este é o valor padrão ao criar um novo registro no MFA001 (definido em TdmMFA001.tabPARMFATURAfterInsert, UdmMFA001.pas:481).


Tabela Comparativa Resumida​

OpçãoDescriçãoDispara alerta?Consulta custo de estoque?Onde atua
SSimSim, quando Valor <= CustoSim (RETORNA_SALDOESTOQUE)Apenas MNF002 - BeforePost do ITEMNOTA
NNão (padrão)NãoNãoNenhuma

Referências no Código Fonte​

Tela MFA001 (configuração do parâmetro)​

  • source/MFA001/UMFA001.dfm (linha 3199-3225) - cmbST_AVISACUSTO: TwwDBComboBox com Items.Strings = ('Sim'#9'S', 'Não'#9'N') e DataField = 'ST_AVISACUSTO'
  • source/MFA001/UMFA001.dfm (linhas 2464-2477) - Label3 com Caption = 'Alerta Valor de Custo' (label visível ao usuário)
  • source/MFA001/UMFA001.pas (linha 242) - Declaração cmbST_AVISACUSTO: TwwDBComboBox
  • source/MFA001/UdmMFA001.pas (linha 132) - tabPARMFATURST_AVISACUSTO: TStringField
  • source/MFA001/UdmMFA001.pas (linha 481) - AfterInsert define valor padrão 'N'
  • source/MFA001/UdmMFA001.dfm (linhas 136, 1112-1117, 2375, 2534, 2746, 3016) - Campo incluído em SELECT, INSERT e UPDATE de PARMFATUR

Uso funcional do parâmetro​

  • source/MNF002/UdmMNF002.pas (linhas 3944-3969) - Validação dentro de TdmMNF002.tabITEMNOTABeforePost (procedure iniciada em linha 3807). Quando ValidaCusto = True e parmfatur.values['ST_AVISACUSTO'] = 'S', compara o valor unitário (descontado) com RETORNA_SALDOESTOQUE.O_VL_CUSTO e exibe MsgCodigo('C-0000', ...) para confirmação.

Módulos que apenas carregam o parâmetro (sem lógica consumidora)​

  • source/MNF002/UdmMNF002.pas (linha 10497) - SELECT ... P.ST_AVISACUSTO ... que monta o TStringList parmfatur consumido pela validação acima
  • source/MNF008/UdmMNF008.pas (linha 762) - SELECT ... P.ST_AVISACUSTO ... (apenas leitura, sem uso na lógica)
  • source/MCO006/UdmMCO006.pas (linha 2106) - SELECT ... P.ST_AVISACUSTO ... (apenas leitura, sem uso na lógica)
  • source/RCA006/UdmRCA006.dfm (linhas 3076, 3140, 3239, 3343) - SQL de persistência do PARMFATUR (INSERT/UPDATE/SELECT)
  • source/CPD009/UdmCPD009.dfm (linhas 327, 391, 490, 594) - SQL de persistência do PARMFATUR (INSERT/UPDATE/SELECT)

Scripts SQL (stored procedures)​

  • Nenhuma procedure em Scripts/ referencia diretamente ST_AVISACUSTO. A regra é totalmente aplicada em Delphi (MNF002).