Pular para o conteúdo principal

Parâmetro de Validação de Nº de Série em Itens de Pedido/OS

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos → Opção 1 → campo "Valida Nº Série [MPD005]" Tabela: PARMFATUR.ST_VALIDANSERIEITEMPEDIDO Valor padrão: N (Não)

Importante: apesar do rótulo indicar [MPD005], o parâmetro é lido tanto pelo MPD002 (Pedidos) quanto pelo MPD005 (Ordem de Serviço). Em ambos os casos o objetivo é garantir que a quantidade de números de série informados corresponda à quantidade do item antes da gravação da linha de pedido/OS. Não altera a regra para os demais módulos, que continuam validando serial pela tabela ST_SERIAL do produto.

Telas impactadas​

MóduloCódigoDescrição
Parâmetros FaturamentoMFA001Tela onde o parâmetro é configurado (ComboBox cmbST_VALIDANSERIEITEMPEDIDO, UMFA001.dfm linha 8360)
Pedido de VendaMPD002tabITEMPEDIDOBeforePost valida contagem de seriais (UdmMPD002.pas linha 1564)
Ordem de Serviço (Recap)MPD005Carrega iST_VALIDANSERIEITEMPEDIDO no iniciar e chama MostraSerial quando ativo (UMPD005.pas linha 348 / UdmMPD005.pas linha 587)
Ordem Serviço Recap (ds consulta)RCA006Apenas declara o campo no dataset de parâmetros (UdmRCA006.dfm) — não há regra de negócio adicional
Consulta PedidosCPD009Apenas declara o campo no dataset (UdmCPD009.dfm) — sem comportamento adicional

Procedures impactadas​

Nenhuma stored procedure da base referencia ST_VALIDANSERIEITEMPEDIDO (grep em Scripts/ retorna zero ocorrências). A validação é 100% Delphi, feita no BeforePost do item de pedido / OS.

Campos envolvidos​

CampoTabelaDescrição
ST_VALIDANSERIEITEMPEDIDOPARMFATURFlag S/N que liga/desliga a validação de quantidade de seriais
ST_SERIALITEM (produto)Indica se o produto controla serial (S = Simples, C = Composto). Só quando for S ou C é que a validação adicional se aplica
PS_PEDIDOITEMPEDIDOPeso/Quantidade principal do item de pedido; usado como referência de quantos seriais são esperados
QT_PEDIDAITEMPEDIDOQuantidade do item (usada quando PS_PEDIDO está vazio)
NR_SERIALITEMSERIAL / ITEMPEDIDOSERIALNúmero de série individual que deve ser associado ao item
ST_ITEMPEDIDOITEMPEDIDOStatus do item (N, P) — usado ao buscar seriais disponíveis

Opções disponíveis​

S - Sim (Valida Quantidade de Seriais)​

O que fazDetalhe
Valida no BeforePost do item?Sim. Ao salvar um item no MPD002, é chamada a rotina que conta os seriais já selecionados e compara com PS_PEDIDO/QT_PEDIDA
Se diverge da quantidade?Reabre MostraSerial forçando o usuário a completar/ajustar a seleção de seriais
MPD005 (OS Recap)A rotina MostraSerial só abre o formulário de seleção de seriais quando iST_VALIDANSERIEITEMPEDIDO = 'S'
Produtos afetadosApenas itens cujo cadastro tem ST_SERIAL IN ('S','C') — os demais produtos ignoram a regra mesmo com parâmetro ligado

Simulação passo a passo (MPD002)​

  1. Em MFA001 → Parâmetros → Pedidos → Opção 1 → "Valida Nº Série [MPD005]" → selecione Sim
  2. Salve os parâmetros (F6)
  3. Cadastre (ou utilize) um produto com ST_SERIAL = 'S' (ex.: equipamento/pneu numerado) e gere seriais disponíveis em ITEMSERIAL (via MEQ/TEQ correspondente)
  4. Abra um Pedido de Venda (MPD002)
  5. Insira o item selecionando QT_PEDIDA = 3
  6. O sistema abre a tela frmMPD002SERIAL permitindo escolher 3 seriais
  7. Selecione apenas 2 seriais e confirme
  8. Tente salvar o item (Post)
  9. Resultado: o BeforePost (UdmMPD002.pas linha 1564) detecta Cont (=2) <> Trunc(QT_PEDIDA) (=3) e reabre MostraSerial automaticamente, impedindo a gravação até que a quantidade de seriais bata com a quantidade do item

Simulação passo a passo (MPD005 — OS Recap)​

  1. Mesmo parâmetro ligado (Sim) e produto com ST_SERIAL IN ('S','C')
  2. Ao iniciar o MPD005 (UMPD005.pas linha 347–352), o módulo carrega:
    SELECT PARMFATUR.ST_VALIDANSERIEITEMPEDIDO, PARMFATUR.ST_ALERTAESTOQUENEGATIVO, PARMFATUR.ST_ESTOQUENEGATIVO
    FROM PARMFATUR
    WHERE CD_EMPRESA = :CD_EMPRESA
    e atribui o valor a dmMPD005.iST_VALIDANSERIEITEMPEDIDO
  3. Ao inserir/editar um item de serviço na OS que exija serial, a rotina MostraSerial (UdmMPD005.pas linha 587) só executa a pesquisa em ITEMSERIAL e abre o diálogo de seleção quando o parâmetro estiver em 'S'
  4. Resultado: o usuário é obrigado a escolher seriais antes de concluir o item; sem o parâmetro ligado, a OS permite gravar sem abrir a seleção

Resultado esperado (em ambos os módulos): a quantidade de NR_SERIAL associados ao item é sempre igual à quantidade declarada no pedido/OS, garantindo rastreabilidade ponta a ponta.


N - Não (Padrão — Não Valida)​

O que fazDetalhe
Valida no BeforePost?Não. O bloco condicional if (parmfatur.values['ST_VALIDANSERIEITEMPEDIDO'] = 'S') em UdmMPD002.pas linha 1564 é pulado
MPD005 (OS Recap)MostraSerial (UdmMPD005.pas linha 587) não abre a tela de seleção de seriais automaticamente, mesmo que o produto tenha ST_SERIAL IN ('S','C')
Outras validações de serialContinuam ativas (o produto continua sendo "serializado" para fins de estoque, NF-e, etc.), apenas o casamento quantidade × seriais no momento do Post do item é desligado
Produtos sem controle de serialSem mudança — nunca dispararam essa rotina

Simulação passo a passo​

  1. Em MFA001 → Parâmetros → Pedidos → Opção 1 → "Valida Nº Série [MPD005]" → selecione Não
  2. Salve os parâmetros (F6)
  3. Abra um Pedido de Venda em MPD002
  4. Insira um item de produto com ST_SERIAL = 'S' e QT_PEDIDA = 3
  5. Salve sem selecionar nenhum serial (ou selecione apenas 1)
  6. Resultado: o item é gravado sem bloqueio, não há reabertura de frmMPD002SERIAL. A consistência entre quantidade de itens e quantidade de seriais fica sob responsabilidade manual do operador / das demais rotinas (NF-e, expedição)
  7. Em uma OS do MPD005, ao incluir um item serializado, MostraSerial não dispara automaticamente — é possível avançar na OS sem selecionar seriais

Resultado esperado: o pedido/OS pode ser salvo sem garantir que todos os seriais estejam vinculados, priorizando agilidade de digitação em detrimento de rastreabilidade obrigatória no ato da inclusão.

Este é o valor padrão (AfterInsert do tabPARMFATUR em UdmMFA001.pas linha 474 define 'N').


Regras complementares​

  • O parâmetro só surte efeito em produtos cujo cadastro tem ST_SERIAL IN ('S','C'). Para os demais produtos o código nem entra na validação, independentemente do valor (S ou N).
  • A tela de seleção de seriais reaproveita a mesma rotina de pesquisa em ITEMSERIAL (com filtros ST_VENDIDO = 'N', TP_SERIAL = 'S' etc.) — o parâmetro apenas decide se a rotina é chamada automaticamente no BeforePost.
  • O módulo MPD005 lê o parâmetro apenas uma vez, no iniciar do módulo. Alterações em tempo real no MFA001 exigem reabrir a OS para passar a valer.
  • Nenhuma procedure ou trigger do banco referencia esse flag; trata-se de regra de aplicação (Delphi).

Tabela Comparativa Resumida​

OpçãoDescriçãoValida quantidade × seriais no Post?Abre seleção de seriais automática? (MPD005)Bloqueia gravação do item?
SSimSimSimSim (reabre seleção até bater)
NNão (padrão)NãoNãoNão

Referências no Código Fonte​

MFA001 (configuração)​

  • source/MFA001/UMFA001.dfm linha 8360–8386 — ComboBox cmbST_VALIDANSERIEITEMPEDIDO com Items.Strings = ('Sim'#9'S', 'Não'#9'N'), Style = csDropDownList, MapList = True
  • source/MFA001/UMFA001.dfm linha 7832–7845 — Label lbl50 com Caption = 'Valida Nº Série [MPD005]'
  • source/MFA001/UdmMFA001.dfm linha 1066–1069 — TStringField tabPARMFATURST_VALIDANSERIEITEMPEDIDO (Size = 1)
  • source/MFA001/UdmMFA001.dfm linhas 129, 2371, 2525, 2739, 3009 — ST_VALIDANSERIEITEMPEDIDO presente nos SQLs de SELECT/INSERT/UPDATE da query persistida qryParmFatur
  • source/MFA001/UdmMFA001.pas linha 124 — declaração tabPARMFATURST_VALIDANSERIEITEMPEDIDO: TStringField
  • source/MFA001/UdmMFA001.pas linha 474 — AfterInsert: tabPARMFATURST_VALIDANSERIEITEMPEDIDO.AsString := 'N' (valor padrão)

MPD002 (Pedidos)​

  • source/MPD002/UdmMPD002.pas linha 1564 — bloco if (parmfatur.values['ST_VALIDANSERIEITEMPEDIDO'] = 'S') then dentro de tabITEMPEDIDOBeforePost, valida VSerial vs PS_PEDIDO/QT_PEDIDA e chama MostraSerial quando a contagem não bate
  • source/MPD002/UdmMPD002.pas linha 1188 — procedure MostraSerial que abre frmMPD002SERIAL
  • source/MPD002/UdmMPD002.pas linha 5743 — campo incluído no SELECT de BuscaParametros_MPD002 (carga dos parâmetros de faturamento para o módulo)

MPD005 (OS Recap)​

  • source/MPD005/UdmMPD005.pas linha 246 — variável de parâmetro iST_VALIDANSERIEITEMPEDIDO: string
  • source/MPD005/UdmMPD005.pas linha 587 — procedure MostraSerial condicionada a dmMPD005.iST_VALIDANSERIEITEMPEDIDO = 'S'
  • source/MPD005/UMPD005.pas linhas 347–352 — iniciar: SELECT do parâmetro em PARMFATUR e atribuição a dmMPD005.iST_VALIDANSERIEITEMPEDIDO

Outros módulos (apenas mapeamento em dataset, sem regra)​

  • source/RCA006/UdmRCA006.dfm — campo declarado em TFDQuery de parâmetros
  • source/CPD009/UdmCPD009.dfm — campo declarado em TFDQuery de parâmetros

Scripts SQL​

  • Grep em D:/Desenvolvimento/JunsoftERP_V2/Scripts/ → 0 ocorrências. Nenhuma procedure/trigger usa o parâmetro.