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_VALIDANSERIEITEMPEDIDOValor 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 tabelaST_SERIALdo produto.
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| Parâmetros Faturamento | MFA001 | Tela onde o parâmetro é configurado (ComboBox cmbST_VALIDANSERIEITEMPEDIDO, UMFA001.dfm linha 8360) |
| Pedido de Venda | MPD002 | tabITEMPEDIDOBeforePost valida contagem de seriais (UdmMPD002.pas linha 1564) |
| Ordem de Serviço (Recap) | MPD005 | Carrega iST_VALIDANSERIEITEMPEDIDO no iniciar e chama MostraSerial quando ativo (UMPD005.pas linha 348 / UdmMPD005.pas linha 587) |
| Ordem Serviço Recap (ds consulta) | RCA006 | Apenas declara o campo no dataset de parâmetros (UdmRCA006.dfm) — não há regra de negócio adicional |
| Consulta Pedidos | CPD009 | Apenas 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
| Campo | Tabela | Descrição |
|---|---|---|
ST_VALIDANSERIEITEMPEDIDO | PARMFATUR | Flag S/N que liga/desliga a validação de quantidade de seriais |
ST_SERIAL | ITEM (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_PEDIDO | ITEMPEDIDO | Peso/Quantidade principal do item de pedido; usado como referência de quantos seriais são esperados |
QT_PEDIDA | ITEMPEDIDO | Quantidade do item (usada quando PS_PEDIDO está vazio) |
NR_SERIAL | ITEMSERIAL / ITEMPEDIDOSERIAL | Número de série individual que deve ser associado ao item |
ST_ITEMPEDIDO | ITEMPEDIDO | Status do item (N, P) — usado ao buscar seriais disponíveis |
Opções disponíveis
S - Sim (Valida Quantidade de Seriais)
| O que faz | Detalhe |
|---|---|
| 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 afetados | Apenas 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)
- Em MFA001 → Parâmetros → Pedidos → Opção 1 → "Valida Nº Série [MPD005]" → selecione Sim
- Salve os parâmetros (F6)
- Cadastre (ou utilize) um produto com
ST_SERIAL = 'S'(ex.: equipamento/pneu numerado) e gere seriais disponíveis emITEMSERIAL(via MEQ/TEQ correspondente) - Abra um Pedido de Venda (MPD002)
- Insira o item selecionando
QT_PEDIDA = 3 - O sistema abre a tela
frmMPD002SERIALpermitindo escolher 3 seriais - Selecione apenas 2 seriais e confirme
- Tente salvar o item (Post)
- Resultado: o
BeforePost(UdmMPD002.pas linha 1564) detectaCont (=2) <> Trunc(QT_PEDIDA) (=3)e reabreMostraSerialautomaticamente, impedindo a gravação até que a quantidade de seriais bata com a quantidade do item
Simulação passo a passo (MPD005 — OS Recap)
- Mesmo parâmetro ligado (Sim) e produto com
ST_SERIAL IN ('S','C') - Ao iniciar o MPD005 (UMPD005.pas linha 347–352), o módulo carrega:
e atribui o valor aSELECT PARMFATUR.ST_VALIDANSERIEITEMPEDIDO, PARMFATUR.ST_ALERTAESTOQUENEGATIVO, PARMFATUR.ST_ESTOQUENEGATIVOFROM PARMFATURWHERE CD_EMPRESA = :CD_EMPRESA
dmMPD005.iST_VALIDANSERIEITEMPEDIDO - Ao inserir/editar um item de serviço na OS que exija serial, a rotina
MostraSerial(UdmMPD005.pas linha 587) só executa a pesquisa emITEMSERIALe abre o diálogo de seleção quando o parâmetro estiver em 'S' - 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 faz | Detalhe |
|---|---|
| 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 serial | Continuam 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 serial | Sem mudança — nunca dispararam essa rotina |
Simulação passo a passo
- Em MFA001 → Parâmetros → Pedidos → Opção 1 → "Valida Nº Série [MPD005]" → selecione Não
- Salve os parâmetros (F6)
- Abra um Pedido de Venda em MPD002
- Insira um item de produto com
ST_SERIAL = 'S'eQT_PEDIDA = 3 - Salve sem selecionar nenhum serial (ou selecione apenas 1)
- 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) - Em uma OS do MPD005, ao incluir um item serializado,
MostraSerialnã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 (
AfterInsertdotabPARMFATURem 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 (SouN). - A tela de seleção de seriais reaproveita a mesma rotina de pesquisa em
ITEMSERIAL(com filtrosST_VENDIDO = 'N',TP_SERIAL = 'S'etc.) — o parâmetro apenas decide se a rotina é chamada automaticamente noBeforePost. - O módulo MPD005 lê o parâmetro apenas uma vez, no
iniciardo 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ção | Descrição | Valida quantidade × seriais no Post? | Abre seleção de seriais automática? (MPD005) | Bloqueia gravação do item? |
|---|---|---|---|---|
| S | Sim | Sim | Sim | Sim (reabre seleção até bater) |
| N | Não (padrão) | Não | Não | Não |
Referências no Código Fonte
MFA001 (configuração)
source/MFA001/UMFA001.dfmlinha 8360–8386 — ComboBoxcmbST_VALIDANSERIEITEMPEDIDOcomItems.Strings = ('Sim'#9'S', 'Não'#9'N'),Style = csDropDownList,MapList = Truesource/MFA001/UMFA001.dfmlinha 7832–7845 — Labellbl50comCaption = 'Valida Nº Série [MPD005]'source/MFA001/UdmMFA001.dfmlinha 1066–1069 —TStringFieldtabPARMFATURST_VALIDANSERIEITEMPEDIDO(Size = 1)source/MFA001/UdmMFA001.dfmlinhas 129, 2371, 2525, 2739, 3009 —ST_VALIDANSERIEITEMPEDIDOpresente nos SQLs de SELECT/INSERT/UPDATE da query persistidaqryParmFatursource/MFA001/UdmMFA001.paslinha 124 — declaraçãotabPARMFATURST_VALIDANSERIEITEMPEDIDO: TStringFieldsource/MFA001/UdmMFA001.paslinha 474 —AfterInsert:tabPARMFATURST_VALIDANSERIEITEMPEDIDO.AsString := 'N'(valor padrão)
MPD002 (Pedidos)
source/MPD002/UdmMPD002.paslinha 1564 — blocoif (parmfatur.values['ST_VALIDANSERIEITEMPEDIDO'] = 'S') thendentro detabITEMPEDIDOBeforePost, validaVSerialvsPS_PEDIDO/QT_PEDIDAe chamaMostraSerialquando a contagem não batesource/MPD002/UdmMPD002.paslinha 1188 — procedureMostraSerialque abrefrmMPD002SERIALsource/MPD002/UdmMPD002.paslinha 5743 — campo incluído noSELECTdeBuscaParametros_MPD002(carga dos parâmetros de faturamento para o módulo)
MPD005 (OS Recap)
source/MPD005/UdmMPD005.paslinha 246 — variável de parâmetroiST_VALIDANSERIEITEMPEDIDO: stringsource/MPD005/UdmMPD005.paslinha 587 — procedureMostraSerialcondicionada admMPD005.iST_VALIDANSERIEITEMPEDIDO = 'S'source/MPD005/UMPD005.paslinhas 347–352 —iniciar: SELECT do parâmetro emPARMFATURe atribuição admMPD005.iST_VALIDANSERIEITEMPEDIDO
Outros módulos (apenas mapeamento em dataset, sem regra)
source/RCA006/UdmRCA006.dfm— campo declarado emTFDQueryde parâmetrossource/CPD009/UdmCPD009.dfm— campo declarado emTFDQueryde parâmetros
Scripts SQL
- Grep em
D:/Desenvolvimento/JunsoftERP_V2/Scripts/→ 0 ocorrências. Nenhuma procedure/trigger usa o parâmetro.