Pular para o conteúdo principal

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_PRODUCAOVENDA Valor padrão: N (Não monta Ordem de Produção a partir do Pedido)

Telas impactadas​

MóduloCódigoDescrição
Parâmetros de FaturamentoMFA001Cadastro/edição do próprio parâmetro
Pedido de VendaMPD002Bloqueios de cancelamento/alteração e disparo de geração de estoque por lote
Nota Fiscal EntradaMNF001Carrega o parâmetro ao abrir a tela (uso transversal do parmFatur)
Movimento EquipamentoMEQ002Controla a visibilidade do checkbox "Imprime Etiquetas por Caixa"
Relatório de TabelasRNF013Altera a montagem da consulta de etiquetas quando = 'N'
Relatório RNF041RNF041Mantém o valor do parâmetro em variável interna do data module
Relatório RequisiçõesREQ005Esconde tipos de relatório 10, 11 e 12 quando <> 'S'
Relatório de ClientesRCA006Lê/atualiza o parâmetro pelos SQLs do data module
Conferência ProduçãoCPD009Lê/atualiza o parâmetro pelos SQLs do data module
Lote de ProduçãojLoteProducao (compartilhado)ULoteEntrada, ULoteSaida, ULoteDevol, ULoteSelo expõem o valor em iStMontaOrdemPedido

Procedures / Triggers impactadas​

ObjetoTipoEfeito
TRGAIUD_ITEMPEDIDOTrigger (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_CONTROLEPRODUCAOProcedure chamada pela triggerCria os registros de CONTROLEPRODUCAO para o item do pedido
ATUALIZA_CONTROLEPRODUCAOProcedure chamada pela triggerAtualiza os registros de CONTROLEPRODUCAO ao alterar quantidades

Campos envolvidos​

CampoTabelaDescrição
ST_PRODUCAOVENDAPARMFATURFlag principal (S/N)
ST_CONTROLEPRODUCAOPEDIDOSituaçã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_ITEMPEDIDOITEMPEDIDOSituação do item (N, P, A, C); usada na trigger TRGAIUD_ITEMPEDIDO
ST_LOTEPEDIDOPARMFATURConsultado 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 fazDetalhe
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 salvamentoNÃ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​

  1. Acesse MFA001 → aba Parâmetros → sub-aba Pedidos / O.S. → Opção 1
  2. No campo "Monta Ordem de Produção no Pedido" selecione Sim
  3. Salve os parâmetros
  4. Acesse MPD002 e cadastre um novo pedido de venda (TP_PEDIDO S) com ao menos um item
  5. Ao inserir o item, a trigger TRGAIUD_ITEMPEDIDO grava registros em CONTROLEPRODUCAO automaticamente
  6. Libere o pedido para faturamento (outro fluxo) — PEDIDO.ST_CONTROLEPRODUCAO passa a 'L'
  7. Volte ao MPD002 e tente cancelar o item → sistema exibe "O Pedido está Liberado para Faturamento e não pode ser Cancelado!"
  8. Tente alterar quantidade/peso do item → sistema exibe "O Pedido está Liberado para Faturamento e não pode ser Alterado!"
  9. Acesse MEQ002 → o checkbox "Imprime Etiquetas por Caixa" fica visível
  10. 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 fazDetalhe
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 pedidoSIM — 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​

  1. Acesse MFA001 → aba Parâmetros → sub-aba Pedidos / O.S. → Opção 1
  2. No campo "Monta Ordem de Produção no Pedido" selecione Não
  3. Salve os parâmetros
  4. Acesse MPD002 e cadastre um pedido com itens que tenham lote (ST_LOTEPEDIDO = 'S' em PARMFATUR)
  5. 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
  6. Nenhum registro é criado em CONTROLEPRODUCAO pela trigger
  7. Acesse REQ005 → o combo não apresenta os tipos 10, 11 e 12
  8. 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​

AspectoS - SimN - Não (padrão)
Trigger TRGAIUD_ITEMPEDIDO gera CONTROLEPRODUCAOSimNão
Bloqueia cancelar item liberado (MPD002)SimNão
Bloqueia alterar item liberado (MPD002)SimNão
Gera estoque por lote ao salvar pedido (MPD002)Não (produção assume)Sim
Exibe checkbox de etiquetas por caixa (MEQ002)SimNão
Tipos 10/11/12 disponíveis em REQ005SimNão
Ramo alternativo de etiquetas em RNF013NãoSim
Restringe disparo a TP_PEDIDO <> 'E' (trigger)SimIrrelevante

Referências no Código Fonte​

Delphi — MFA001 (tela de configuração)​

  • source/MFA001/UMFA001.dfm:8431-8457 — cmbST_PRODUCAOVENDA: TwwDBComboBox com Items.Strings = ('Sim'#9'S', 'N'#227'o'#9'N') e DataField = 'ST_PRODUCAOVENDA'
  • source/MFA001/UMFA001.dfm:7762-7775 — label associado (lbl37, Caption 'Monta Ordem de Produção no Pedido'), posicionado em Left = 310, Top = 68 no grpPedidos da aba "Opção 1" (pagPedidoOp1) da página "Pedidos / O.S." (pagPedidos)
  • source/MFA001/UMFA001.pas:304 — declaração cmbST_PRODUCAOVENDA: TwwDBComboBox
  • source/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 module
  • source/MFA001/UdmMFA001.pas:104 — declaração do field tabPARMFATURST_PRODUCAOVENDA
  • source/MFA001/UdmMFA001.pas:461 — valor padrão 'N' atribuído em tabPARMFATURAfterInsert

Delphi — Telas que consomem o parâmetro​

  • source/MPD002/UdmMPD002.pas:5740 — SELECT que carrega P.ST_PRODUCAOVENDA de PARMFATUR
  • source/MPD002/UMPD002.pas:1784-1785 — bloqueia cancelar item quando ST_PRODUCAOVENDA = 'S' e PEDIDO.ST_CONTROLEPRODUCAO = 'L'
  • source/MPD002/UMPD002.pas:2352-2353 — bloqueia alterar pedido na mesma condição
  • source/MPD002/UMPD002.pas:2803 — ramo de geração de estoque por lote quando ST_PRODUCAOVENDA = 'N'
  • source/MNF001/UdmMNF001.pas:1377 — campo lido no SELECT de PARMFATUR usado pela MNF001
  • source/MEQ002/UdmMEQ002.pas:80,112,119 — declaração, SELECT e leitura de iST_PRODUCAOVENDA
  • source/MEQ002/UMEQ002.pas:192-193 — exibe chkImprimeEtiquetasCaixa quando = 'S'
  • source/RNF013/UdmRNF013.pas:51,73,84 — campo/SELECT/atribuição
  • source/RNF013/URNF013.pas:384 — ramo que só executa quando = 'N'
  • source/RNF041/UdmRNF041.pas:60 — campo iST_PRODUCAOVENDA
  • source/REQ005/UREQ005.pas:206-211 — remove itens 10, 11, 12 do combo cmbTP_RELATORIO quando <> 'S'
  • source/RCA006/UdmRCA006.dfm:3064,3130,3221,3325 — SELECT/INSERT/UPDATE que manipulam o campo
  • source/CPD009/UdmCPD009.dfm:315,381,472,576 — SELECT/INSERT/UPDATE que manipulam o campo
  • source/jLoteProducao/ULoteEntrada.pas:193 — iStMontaOrdemPedido := parmFatur.Values['ST_PRODUCAOVENDA']
  • source/jLoteProducao/ULoteSaida.pas:199 — idem
  • source/jLoteProducao/ULoteDevol.pas:202 — idem
  • source/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, em INSERTING/UPDATING/DELETING, manter CONTROLEPRODUCAO e VOLUMEPEDIDOITEM/VOLUMEPEDIDO sincronizados via GERA_CONTROLEPRODUCAO e ATUALIZA_CONTROLEPRODUCAO
    • na ramificação UPDATING, também levanta exceção quando I_ST_CONTROLEPRODUCAO = 'L' ("O Pedido esta Liberado para Faturamento e nao pode ser Alterado.")