Parâmetro de Controle de Produção para Venda
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 (label na tela: "Monta Ordem de Produção no Pedido") Tabela:
PARMFATUR.ST_PRODUCAOVENDAValor padrão:N(Não monta Ordem de Produção a partir do Pedido)
Telas impactadas
| Módulo | Código | Descrição |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Cadastro/edição do próprio parâmetro |
| Pedido de Venda | MPD002 | Bloqueios de cancelamento/alteração e disparo de geração de estoque por lote |
| Nota Fiscal Entrada | MNF001 | Carrega o parâmetro ao abrir a tela (uso transversal do parmFatur) |
| Movimento Equipamento | MEQ002 | Controla a visibilidade do checkbox "Imprime Etiquetas por Caixa" |
| Relatório de Tabelas | RNF013 | Altera a montagem da consulta de etiquetas quando = 'N' |
| Relatório RNF041 | RNF041 | Mantém o valor do parâmetro em variável interna do data module |
| Relatório Requisições | REQ005 | Esconde tipos de relatório 10, 11 e 12 quando <> 'S' |
| Relatório de Clientes | RCA006 | Lê/atualiza o parâmetro pelos SQLs do data module |
| Conferência Produção | CPD009 | Lê/atualiza o parâmetro pelos SQLs do data module |
| Lote de Produção | jLoteProducao (compartilhado) | ULoteEntrada, ULoteSaida, ULoteDevol, ULoteSelo expõem o valor em iStMontaOrdemPedido |
Procedures / Triggers impactadas
| Objeto | Tipo | Efeito |
|---|---|---|
TRGAIUD_ITEMPEDIDO | Trigger (ITEMPEDIDO AFTER INSERT/UPDATE/DELETE) | Quando ST_PRODUCAOVENDA = 'S' e TP_PEDIDO <> 'E', dispara GERA_CONTROLEPRODUCAO e ATUALIZA_CONTROLEPRODUCAO para manter a tabela CONTROLEPRODUCAO sincronizada com os itens do pedido |
GERA_CONTROLEPRODUCAO | Procedure chamada pela trigger | Cria os registros de CONTROLEPRODUCAO para o item do pedido |
ATUALIZA_CONTROLEPRODUCAO | Procedure chamada pela trigger | Atualiza os registros de CONTROLEPRODUCAO ao alterar quantidades |
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
ST_PRODUCAOVENDA | PARMFATUR | Flag principal (S/N) |
ST_CONTROLEPRODUCAO | PEDIDO | Situação do controle de produção do pedido (B=Em Branco, L=Liberado para Faturamento) — usado junto com ST_PRODUCAOVENDA para validar cancelamentos/alterações |
ST_ITEMPEDIDO | ITEMPEDIDO | Situação do item (N, P, A, C); usada na trigger TRGAIUD_ITEMPEDIDO |
ST_LOTEPEDIDO | PARMFATUR | Consultado em conjunto no fluxo de geração de estoque por lote em MPD002 |
Opções disponíveis
S - Sim (monta Ordem de Produção a partir do Pedido)
| O que faz | Detalhe |
|---|---|
| Gera CONTROLEPRODUCAO automaticamente? | SIM — ao inserir/alterar itens do pedido, a trigger TRGAIUD_ITEMPEDIDO chama GERA_CONTROLEPRODUCAO e ATUALIZA_CONTROLEPRODUCAO |
| Restringe pedidos "E" (entrada)? | A trigger só dispara a geração quando TP_PEDIDO <> 'E' |
| Bloqueia cancelar item se já liberado? | SIM — se PEDIDO.ST_CONTROLEPRODUCAO = 'L', o MPD002 emite "O Pedido está Liberado para Faturamento e não pode ser Cancelado!" (UMPD002.pas:1784-1785) |
| Bloqueia alterar pedido se já liberado? | SIM — mesma regra bloqueia o salvamento: "O Pedido está Liberado para Faturamento e não pode ser Alterado!" (UMPD002.pas:2352-2353) |
| Geração de estoque por lote no salvamento | NÃO — o bloco que gera estoque por lote ao salvar é executado somente se ST_PRODUCAOVENDA = 'N' (UMPD002.pas:2803). Com S, o estoque é tratado pela produção |
| Libera tipos 10, 11 e 12 no REQ005? | SIM — esses itens do combo cmbTP_RELATORIO só ficam disponíveis quando ST_PRODUCAOVENDA = 'S' (UREQ005.pas:206-211) |
| Exibe "Imprime Etiquetas por Caixa" no MEQ002? | SIM — chkImprimeEtiquetasCaixa.Visible := true (UMEQ002.pas:192-193) |
| Fluxo alternativo de etiquetas em RNF013? | NÃO entra no bloco que começa em URNF013.pas:384 (esse bloco só executa com N) |
Simulação passo a passo
- Acesse MFA001 → aba Parâmetros → sub-aba Pedidos / O.S. → Opção 1
- No campo "Monta Ordem de Produção no Pedido" selecione Sim
- Salve os parâmetros
- Acesse MPD002 e cadastre um novo pedido de venda (TP_PEDIDO
S) com ao menos um item - Ao inserir o item, a trigger
TRGAIUD_ITEMPEDIDOgrava registros emCONTROLEPRODUCAOautomaticamente - Libere o pedido para faturamento (outro fluxo) —
PEDIDO.ST_CONTROLEPRODUCAOpassa a'L' - Volte ao MPD002 e tente cancelar o item → sistema exibe "O Pedido está Liberado para Faturamento e não pode ser Cancelado!"
- Tente alterar quantidade/peso do item → sistema exibe "O Pedido está Liberado para Faturamento e não pode ser Alterado!"
- Acesse MEQ002 → o checkbox "Imprime Etiquetas por Caixa" fica visível
- Acesse REQ005 → o combo "Tipo de Relatório" exibe os itens 10, 11 e 12
Resultado esperado: Os itens do pedido passam a alimentar a tabela CONTROLEPRODUCAO via trigger. Depois que o pedido é Liberado para faturamento, nenhum item pode ser cancelado ou alterado diretamente pelo MPD002. O fluxo de estoque por lote do salvamento do pedido é ignorado (a baixa passa a ser tratada via produção). Relatórios e módulos auxiliares (MEQ002, REQ005, RNF013) habilitam as opções correspondentes ao controle de produção.
N - Não (não monta Ordem de Produção a partir do Pedido)
| O que faz | Detalhe |
|---|---|
| Gera CONTROLEPRODUCAO automaticamente? | NÃO — o bloco IF (I_ST_PRODUCAOVENDA = 'S') da trigger TRGAIUD_ITEMPEDIDO é ignorado |
Bloqueios de cancelamento/alteração por ST_CONTROLEPRODUCAO = 'L'? | NÃO se aplicam pelo caminho deste parâmetro (a condição AND (parmfatur.values['ST_PRODUCAOVENDA'] = 'S') não é satisfeita em UMPD002.pas:1784 e 2352) |
| Geração de estoque por lote no salvamento do pedido | SIM — o bloco if (parmfatur.values['ST_PRODUCAOVENDA'] = 'N') then (UMPD002.pas:2803) habilita a geração/baixa de estoque pelos lotes do item quando ST_LOTEPEDIDO = 'S' |
| Libera tipos 10, 11 e 12 no REQ005? | NÃO — UREQ005.pas remove as três últimas opções do combo |
| Exibe "Imprime Etiquetas por Caixa" no MEQ002? | NÃO — o checkbox permanece oculto |
| Fluxo alternativo de etiquetas em RNF013? | SIM — URNF013.pas:384 entra no bloco que busca CD_TABPRECO/CD_TABCOMPRA dos parâmetros e monta a consulta de etiquetas "como na MNF001" |
Simulação passo a passo
- Acesse MFA001 → aba Parâmetros → sub-aba Pedidos / O.S. → Opção 1
- No campo "Monta Ordem de Produção no Pedido" selecione Não
- Salve os parâmetros
- Acesse MPD002 e cadastre um pedido com itens que tenham lote (
ST_LOTEPEDIDO = 'S'em PARMFATUR) - Ao salvar o pedido, o fluxo de geração de estoque por lote percorre os itens, consulta sementes/operação e trata quantidade/peso conforme a configuração do produto
- Nenhum registro é criado em
CONTROLEPRODUCAOpela trigger - Acesse REQ005 → o combo não apresenta os tipos 10, 11 e 12
- Acesse RNF013 para imprimir etiquetas → a consulta é montada pelo ramo
iST_PRODUCAOVENDA = 'N'
Resultado esperado: O ERP funciona no modo "venda simples": o pedido NÃO alimenta a fila de produção. O estoque é baixado diretamente pelo pedido (quando aplicável, via lote) e os módulos auxiliares assumem seus fluxos padrão, sem as telas/opções voltadas ao controle de produção.
Tabela Comparativa Resumida
| Aspecto | S - Sim | N - Não (padrão) |
|---|---|---|
Trigger TRGAIUD_ITEMPEDIDO gera CONTROLEPRODUCAO | Sim | Não |
| Bloqueia cancelar item liberado (MPD002) | Sim | Não |
| Bloqueia alterar item liberado (MPD002) | Sim | Não |
| Gera estoque por lote ao salvar pedido (MPD002) | Não (produção assume) | Sim |
| Exibe checkbox de etiquetas por caixa (MEQ002) | Sim | Não |
| Tipos 10/11/12 disponíveis em REQ005 | Sim | Não |
| Ramo alternativo de etiquetas em RNF013 | Não | Sim |
Restringe disparo a TP_PEDIDO <> 'E' (trigger) | Sim | Irrelevante |
Referências no Código Fonte
Delphi — MFA001 (tela de configuração)
source/MFA001/UMFA001.dfm:8431-8457—cmbST_PRODUCAOVENDA: TwwDBComboBoxcomItems.Strings = ('Sim'#9'S', 'N'#227'o'#9'N')eDataField = 'ST_PRODUCAOVENDA'source/MFA001/UMFA001.dfm:7762-7775— label associado (lbl37, Caption'Monta Ordem de Produção no Pedido'), posicionado emLeft = 310, Top = 68nogrpPedidosda aba "Opção 1" (pagPedidoOp1) da página "Pedidos / O.S." (pagPedidos)source/MFA001/UMFA001.pas:304— declaraçãocmbST_PRODUCAOVENDA: TwwDBComboBoxsource/MFA001/UdmMFA001.dfm:980-983—tabPARMFATURST_PRODUCAOVENDA: TStringField(Size = 1)source/MFA001/UdmMFA001.dfm:118,2350,2726,2998— referências ao campo nos SQLs SELECT/INSERT/UPDATE do data modulesource/MFA001/UdmMFA001.pas:104— declaração do fieldtabPARMFATURST_PRODUCAOVENDAsource/MFA001/UdmMFA001.pas:461— valor padrão'N'atribuído emtabPARMFATURAfterInsert
Delphi — Telas que consomem o parâmetro
source/MPD002/UdmMPD002.pas:5740— SELECT que carregaP.ST_PRODUCAOVENDAde PARMFATURsource/MPD002/UMPD002.pas:1784-1785— bloqueia cancelar item quandoST_PRODUCAOVENDA = 'S'ePEDIDO.ST_CONTROLEPRODUCAO = 'L'source/MPD002/UMPD002.pas:2352-2353— bloqueia alterar pedido na mesma condiçãosource/MPD002/UMPD002.pas:2803— ramo de geração de estoque por lote quandoST_PRODUCAOVENDA = 'N'source/MNF001/UdmMNF001.pas:1377— campo lido no SELECT dePARMFATURusado pela MNF001source/MEQ002/UdmMEQ002.pas:80,112,119— declaração, SELECT e leitura deiST_PRODUCAOVENDAsource/MEQ002/UMEQ002.pas:192-193— exibechkImprimeEtiquetasCaixaquando= 'S'source/RNF013/UdmRNF013.pas:51,73,84— campo/SELECT/atribuiçãosource/RNF013/URNF013.pas:384— ramo que só executa quando= 'N'source/RNF041/UdmRNF041.pas:60— campoiST_PRODUCAOVENDAsource/REQ005/UREQ005.pas:206-211— remove itens 10, 11, 12 do combocmbTP_RELATORIOquando<> 'S'source/RCA006/UdmRCA006.dfm:3064,3130,3221,3325— SELECT/INSERT/UPDATE que manipulam o camposource/CPD009/UdmCPD009.dfm:315,381,472,576— SELECT/INSERT/UPDATE que manipulam o camposource/jLoteProducao/ULoteEntrada.pas:193—iStMontaOrdemPedido := parmFatur.Values['ST_PRODUCAOVENDA']source/jLoteProducao/ULoteSaida.pas:199— idemsource/jLoteProducao/ULoteDevol.pas:202— idemsource/jLoteProducao/ULoteSelo.pas:166— idem
SQL — Firebird
Scripts/TRGAIUD_ITEMPEDIDO.sql:15,120-247— trigger que:- declara
I_ST_PRODUCAOVENDA VARCHAR(1) - faz
SELECT P.ST_PRODUCAOVENDA FROM PARMFATUR P WHERE P.CD_EMPRESA = :I_CD_EMPRESA - entra no bloco
IF ((I_ST_PRODUCAOVENDA = 'S') AND (I_TP_PEDIDO <> 'E'))para, emINSERTING/UPDATING/DELETING, manterCONTROLEPRODUCAOeVOLUMEPEDIDOITEM/VOLUMEPEDIDOsincronizados viaGERA_CONTROLEPRODUCAOeATUALIZA_CONTROLEPRODUCAO - na ramificação
UPDATING, também levanta exceção quandoI_ST_CONTROLEPRODUCAO = 'L'("O Pedido esta Liberado para Faturamento e nao pode ser Alterado.")
- declara