Parâmetro Tipo de Conferência de Pedido
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: aba Pedidos / O.S. → sub-aba Opção 1 → grupo Parâmetros de Pedidos/ Ordem de Serviço (
pagPedidos→pagPedidoOp1→grpPedidos), label "Tipo de Conferência" (Label86emUMFA001.dfm:8207-8220) com indicação[MPD031/MPD091](Label87emUMFA001.dfm:8221-8234) Tabela:PARMFATUR.TP_CONFERENCIAPEDIDOValor padrão:M(Bloqueia Maior Qtde.) - definido emUdmMFA001.pas:564(AfterInsert) e no DDLPARMFATUR.sql:189(DOM_CHAR1 DEFAULT 'M' NOT NULL)
Define qual tipo de divergência entre a quantidade/peso conferido e o saldo do pedido deve ser bloqueado (ou apenas alertado) durante a conferência de itens em MPD031 (Conferência Item/Pesagem) e MPD091 (Conferência Item).
Atua apenas sobre a validação da quantidade/peso conferida versus o saldo do ITEMPEDIDO (QT_PEDIDA - QT_CONFERENCIA, PS_PEDIDO - PS_CONFERENCIA). Não interfere em preço, fiscal ou geração de nota.
Domínio (de UMFA001.dfm:9137-9140):
M- Bloqueia Maior Qtde. (padrão): impede que a conferência exceda o saldo do pedido, mas permite conferência parcial (menor que o saldo) mediante confirmação.N- Bloqueia Menor Qtde.: impede conferência parcial (qualquer item não totalmente conferido bloqueia), mas não testa excesso acima do saldo.A- Bloqueia Ambas: impede qualquer divergência - nem a mais, nem a menos.
Telas impactadas
| Módulo | Código | Uso |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Único local de configuração. ComboBox wwDBComboBox12 em UMFA001.dfm:9118-9145 com DataField = 'TP_CONFERENCIAPEDIDO' e Items.Strings = ('Bloqueia Maior Qtde.'#9'M', 'Bloqueia Menor Qtde.'#9'N', 'Bloqueia Ambas'#9'A') |
| Conferência Item (Pesagem) | MPD031 | Lê o parâmetro direto via SELECT TP_CONFERENCIAPEDIDO FROM PARMFATUR em UMPD031.pas:149-152 e armazena em dmMPD031.iTP_CONFERENCIAPEDIDO - usado no tabITEMTROCABeforePost (UdmMPD031.pas:1177-1294) e no tabLOTESEMENTEBeforePost (UdmMPD031.pas:1375-1400) para bloquear/alertar divergências |
| Conferência Item | MPD091 | Lê o parâmetro via dmMPD091.ParmFatur.Values['TP_CONFERENCIAPEDIDO'] nas rotinas de validação da conferência (UdmMPD091.pas:477, 593, 626, 656, 666, 760) |
Procedures impactadas
Não há stored procedures/views no banco Firebird que leiam TP_CONFERENCIAPEDIDO - toda a lógica está nos módulos Delphi MPD031 e MPD091.
Campos envolvidos
| Tabela.Campo | Tipo | Descrição |
|---|---|---|
PARMFATUR.TP_CONFERENCIAPEDIDO | DOM_CHAR1 DEFAULT 'M' NOT NULL | O próprio parâmetro (docs/schema/tables/PARMFATUR.sql:189, UdmMFA001.dfm:1758-1763). Domínio 'M'/'N'/'A' |
ITEMPEDIDO.PS_PEDIDO | NUMERIC | Peso pedido (usado como PS_PEDIDO - COALESCE(PS_CONFERENCIA,0) para calcular saldo) |
ITEMPEDIDO.QT_PEDIDA | NUMERIC | Quantidade pedida (usado como QT_PEDIDA - COALESCE(QT_CONFERENCIA,0) para calcular saldo) |
ITEMPEDIDO.PS_CONFERENCIA | NUMERIC | Peso já conferido (acumulado) |
ITEMPEDIDO.QT_CONFERENCIA | NUMERIC | Quantidade já conferida (acumulada) |
ITEMPEDIDOSEMENTE.QT_LOTE | NUMERIC | Quantidade por lote na conferência por semente/lote (MPD031) |
ITEMPEDIDOSEMENTE.QT_CONFERIDA | NUMERIC | Quantidade já conferida por lote |
Opções disponíveis
M - Bloqueia Maior Qtde. (padrão)
| O que faz | Detalhe |
|---|---|
| Excesso (conferido > saldo) | Bloqueia com erro W-0000 "Não é permitida conferência Maior que o Saldo do Item. Verifique! [MFA001]" (UdmMPD091.pas:676, UdmMPD031.pas:1281) |
| Falta (conferido < saldo) | Não bloqueia. Gera msgAdvertencia ("Menor que o saldo do Item" com saldo e valor conferido) e, se houver, pergunta C-0000 "Continuar com a Conferência Parcial?" (UdmMPD091.pas:666-673, UdmMPD031.pas:1271-1278) |
| Itens não lançados na conferência | Se existirem itens do pedido sem registro em tabITEMCONFERENCIA / tabITEMTROCA, monta msgNaoConferidos e pergunta C-0000 "Continuar com a Conferência Parcial?" (UdmMPD091.pas:679-691, UdmMPD031.pas:1283-1294) |
| Rollback de saldo | Quando PS_SALDO < 0 ou QT_SALDO < 0 após o lançamento, o AfterPost em MPD091 desfaz o lançamento e zera o valor digitado (UdmMPD091.pas:760-785) |
Simulação passo a passo
- Em MFA001 → aba Pedidos / O.S. → Opção 1 → Tipo de Conferência =
Bloqueia Maior Qtde.(wwDBComboBox12=M) - Salve os parâmetros →
PARMFATUR.TP_CONFERENCIAPEDIDO = 'M' - Abra MPD091 (ou MPD031) e selecione um pedido com item
I001de saldo100,000 kg - Lance na conferência
110,000 kgparaI001e tente confirmar → ErroW-0000"Não é permitida conferência Maior que o Saldo do Item. Verifique! [MFA001]" - conferência não é gravada - Ajuste para
80,000 kg(parcial) e tente confirmar → Sistema perguntaC-0000"Menor que o saldo do Item [...] Continuar com a Conferência Parcial?"- Sim → lança
80,000 kge gravaITEMPEDIDO.PS_CONFERENCIA += 80,000 - Não →
W-0000"Operação Cancelada!"
- Sim → lança
- Deixe um item do pedido sem lançar conferência e confirme →
C-0000"Itens não Conferidos: - I002 - [...] Continuar com a Conferência Parcial?"
Resultado esperado: Permite conferência parcial com aviso, mas nunca deixa passar excesso acima do saldo. Cenário típico para empresas que lidam com produtos a granel/peso (recapagem, ração, sementes) onde o peso real conferido pode ser ligeiramente menor que o pedido por perdas operacionais, mas nunca pode exceder o saldo de estoque vinculado.
N - Bloqueia Menor Qtde.
| O que faz | Detalhe |
|---|---|
| Excesso (conferido > saldo) | Não bloqueia. Apenas gera msg "Menor que o saldo do Item" (obs.: a mensagem é genérica - a rotina registra divergência, mas o bloqueio final só dispara por falta, não por excesso) (UdmMPD091.pas:626-640, UdmMPD031.pas:1212-1228) |
| Falta (conferido < saldo) | Bloqueia com erro W-0000 "Não é permitida conferência Divergente do Saldo do Item. Verifique! [MFA001]" (UdmMPD091.pas:656-662, UdmMPD031.pas:1261-1267) |
| Itens não lançados na conferência | Bloqueia (junto com divergências de saldo) pela mesma mensagem acima - toda a lista de itens não conferidos é exibida junto |
| Rollback de saldo | A verificação PS_SALDO < 0 em tabITEMCONFERENCIAAfterPost só é feita para M ou A (UdmMPD091.pas:760) - em N não há rollback automático |
Simulação passo a passo
- Em MFA001 → Tipo de Conferência =
Bloqueia Menor Qtde.(wwDBComboBox12=N) - Salve →
PARMFATUR.TP_CONFERENCIAPEDIDO = 'N' - Abra MPD091, selecione pedido com itens
I001 (100 kg)eI002 (50 kg) - Lance
I001 = 100 kgmas não lanceI002. Confirme → ErroW-0000"Não é permitida conferência Divergente do Saldo do Item. Verifique! [MFA001] - Itens não Conferidos: - I002 - [...]" - Lance
I001 = 90 kg(parcial) eI002 = 50 kg. Confirme → Erro "[...] I001 - [...] Menor que o saldo do Item" - Lance
I001 = 100 kgeI002 = 50 kg(conferência total) → confirma sem erro - Lance
I001 = 120 kgeI002 = 50 kg(excesso no I001) → sistema não bloqueia o excesso (o código só bloqueia por falta na lógica do modoN)
Resultado esperado: Exige conferência completa de todos os itens (não permite pedidos parcialmente conferidos), mas não protege contra excesso. Cenário típico para empresas onde o pedido é a grade-mestre do faturamento e o fluxo exige ITEMPEDIDO.QT_CONFERENCIA = QT_PEDIDA antes de seguir - por exemplo, separação de produto unitário (distribuidoras) em que não pode sobrar item por conferir.
A - Bloqueia Ambas
| O que faz | Detalhe |
|---|---|
| Excesso (conferido > saldo) | Bloqueia - o bloco if (TP_CONFERENCIAPEDIDO = 'M') or (TP_CONFERENCIAPEDIDO = 'A') dispara msg "Maior que o saldo do Item" e impede confirmação (UdmMPD091.pas:593-623, UdmMPD031.pas:1177-1210) |
| Falta (conferido < saldo) | Bloqueia - o bloco if (TP_CONFERENCIAPEDIDO = 'N') or (TP_CONFERENCIAPEDIDO = 'A') dispara msg "Menor que o saldo do Item" (UdmMPD091.pas:626-640, UdmMPD031.pas:1212-1228) |
| Itens não lançados na conferência | Bloqueia junto com a mensagem de divergência (UdmMPD091.pas:656-662) - mesma rota do modo N |
| Rollback de saldo | Ativo - o AfterPost em MPD091 desfaz o lançamento quando PS_SALDO < 0 ou QT_SALDO < 0 (UdmMPD091.pas:760-785) |
| Mensagem final | Sempre W-0000 "Não é permitida conferência Divergente do Saldo do Item. Verifique! [MFA001]" + lista de itens divergentes + lista de não conferidos |
Simulação passo a passo
- Em MFA001 → Tipo de Conferência =
Bloqueia Ambas(wwDBComboBox12=A) - Salve →
PARMFATUR.TP_CONFERENCIAPEDIDO = 'A' - Abra MPD091, selecione pedido com item
I001de saldo100 kg - Lance
110 kg(excesso) → ao tentar gravar noAfterPost, o rollback desfaz:tabITEMPS_SALDOé restaurado etabITEMCONFERENCIAé cancelado - Lance
90 kg(parcial) e confirme → ErroW-0000"Não é permitida conferência Divergente do Saldo do Item. Verifique! [MFA001] [...] I001 Menor que o saldo do Item" - Lance exatamente
100 kge confirme → confirma sem erro - Qualquer item do pedido sem conferência lançada → bloqueia confirmação
Resultado esperado: Conferência estritamente idêntica ao saldo do pedido. Nem peso a mais, nem a menos, nem item faltando. Cenário típico para operações fiscais rigorosas (auditorias, DIFAL, substituição tributária) onde a NF tem que refletir exatamente o que foi pedido, sem ajustes operacionais.
Interação com outros parâmetros de conferência
O TP_CONFERENCIAPEDIDO atua em conjunto com dois outros parâmetros do grupo "Parâmetros de Pedidos" em Opção 1:
| Parâmetro | Função | Relação com TP_CONFERENCIAPEDIDO |
|---|---|---|
ST_BLOQFATNAOCONFERIDOS | "Validar Quantidade Conferida [MPD031/MPD091/MPD097]" (UMFA001.dfm:10154-10172) | Bloqueia faturamento de pedidos que não passaram pela conferência, independente do modo escolhido em TP_CONFERENCIAPEDIDO. Quando ='S', exige que QT_CONFERENCIA = QT_PEDIDA antes de gerar NF |
ST_IGNORACONFERENCIAPEDIDOOS | "Ignorar conferência para pedidos de OS" (UMFA001.dfm:10174-10181) | Quando ='S', permite pular TP_CONFERENCIAPEDIDO em pedidos ligados a Ordem de Serviço (o sistema trata a OS como já conferida) |
Também não confundir com:
ST_CONTENTREGACONF- conferência de entrega (viaPEDIDO.ST_ENTREGAOFICINA) - fluxo completamente distinto, tratado em ST_CONTENTREGACONF.TP_CONFERENCIANOTA/ abapagCONFERENCIANOTA(UMFA001.dfm:5608) - conferência de Nota de Entrada (outra tela, outro fluxo, outros campos).
Tabela Comparativa Resumida
| Opção | Nome | Excesso (maior que saldo) | Falta (menor que saldo) | Item não conferido | Rollback PS_SALDO menor que 0 | Cenário típico |
|---|---|---|---|---|---|---|
| M | Bloqueia Maior Qtde. (padrão) | Bloqueia (W-0000) | Alerta + C-0000 "Continuar parcial?" | Alerta + C-0000 | Sim | Produtos a granel/peso (recapagem, ração) |
| N | Bloqueia Menor Qtde. | Não bloqueia | Bloqueia (W-0000) | Bloqueia | Não | Separação unitária (distribuidoras) - exige pedido 100% conferido |
| A | Bloqueia Ambas | Bloqueia (W-0000) | Bloqueia (W-0000) | Bloqueia | Sim | Operações fiscais rigorosas - conferência = pedido exato |
Referências no Código Fonte
ComboBox e valor padrão
| Arquivo | Linha(s) | Trecho |
|---|---|---|
source/MFA001/UMFA001.dfm | 8207-8220 | Label Label86 → Caption "Tipo de Conferência" |
source/MFA001/UMFA001.dfm | 8221-8234 | Label Label87 → Caption "[MPD031/MPD091]" |
source/MFA001/UMFA001.dfm | 9118-9145 | wwDBComboBox12: TwwDBComboBox com DataField = 'TP_CONFERENCIAPEDIDO' e Items.Strings = ('Bloqueia Maior Qtde.'#9'M', 'Bloqueia Menor Qtde.'#9'N', 'Bloqueia Ambas'#9'A') |
source/MFA001/UdmMFA001.dfm | 260 | PARMFATUR.TP_CONFERENCIAPEDIDO no SELECT do tabPARMFATUR |
source/MFA001/UdmMFA001.dfm | 1758-1763 | Campo tabPARMFATURTP_CONFERENCIAPEDIDO: TStringField (FieldName = 'TP_CONFERENCIAPEDIDO', Origin = '"PARMFATUR"."TP_CONFERENCIAPEDIDO"', FixedChar = True, Size = 1) |
source/MFA001/UdmMFA001.dfm | 2840 | TP_CONFERENCIAPEDIDO = :TP_CONFERENCIAPEDIDO no UPDATE gerado pelo FireDAC |
source/MFA001/UdmMFA001.dfm | 3140 | PARMFATUR.TP_CONFERENCIAPEDIDO na query de navegação |
source/MFA001/UdmMFA001.pas | 245 | Declaração tabPARMFATURTP_CONFERENCIAPEDIDO: TStringField |
source/MFA001/UdmMFA001.pas | 564 | AfterInsert: tabPARMFATURTP_CONFERENCIAPEDIDO.AsString := 'M' (valor padrão quando registro é criado pelo MFA001) |
Consumidores (leem o parâmetro)
| Arquivo | Linha(s) | Uso |
|---|---|---|
source/MPD031/UMPD031.pas | 149-152 | SELECT TP_CONFERENCIAPEDIDO FROM PARMFATUR WHERE CD_EMPRESA = ... → dmMPD031.iTP_CONFERENCIAPEDIDO := Resultado[0] |
source/MPD031/UdmMPD031.pas | 227 | Declaração do campo público iTP_CONFERENCIAPEDIDO: String no TdmMPD031 |
source/MPD031/UdmMPD031.pas | 1177-1210 | tabITEMTROCABeforePost: se = 'M' ou 'A', bloqueia excesso (Maior que o saldo do Item) |
source/MPD031/UdmMPD031.pas | 1212-1228 | Idem: se = 'N' ou 'A', bloqueia falta (Menor que o saldo do Item) |
source/MPD031/UdmMPD031.pas | 1247-1258 | Se = 'N' e PESO <= 0, não monta lista de itens não conferidos |
source/MPD031/UdmMPD031.pas | 1261-1294 | Decisão final: se 'N'/'A' dispara W-0000 divergente; se 'M' pergunta C-0000 parcial |
source/MPD031/UdmMPD031.pas | 1375-1400 | Mesma lógica aplicada à conferência por lote/semente (tabLOTESEMENTE vs ITEMPEDIDOSEMENTE) |
source/MPD091/UdmMPD091.pas | 477 | Verifica se <> 'N' para incluir itens do pedido na lista de "Não Conferidos" |
source/MPD091/UdmMPD091.pas | 593-623 | Se = 'M' ou 'A': monta msg "Maior que o saldo" e msgAdvertencia "Menor que o saldo" |
source/MPD091/UdmMPD091.pas | 626-640 | Se = 'N' ou 'A': monta msg "Menor que o saldo" |
source/MPD091/UdmMPD091.pas | 656-662 | Decisão: 'N'/'A' dispara W-0000 "Não é permitida conferência Divergente do Saldo do Item" |
source/MPD091/UdmMPD091.pas | 666-691 | Decisão: 'M' dispara C-0000 parcial e/ou W-0000 para excesso |
source/MPD091/UdmMPD091.pas | 760-785 | tabITEMCONFERENCIAAfterPost: rollback de saldo ativo apenas para 'M' ou 'A' |
Tabelas afetadas (DDL)
| Arquivo | Linha | Campo |
|---|---|---|
docs/schema/tables/PARMFATUR.sql | 189 | TP_CONFERENCIAPEDIDO DOM_CHAR1 DEFAULT 'M' NOT NULL |