Pular para o conteúdo principal

Parâmetro Controle de Entrega por Conferência

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 lbl60 "Controle de Entrega por Conferência") Tabela: PARMFATUR.ST_CONTENTREGACONF Valor padrão: N (Não)

Controla se o Pedido de Venda (MPD002) e a Ordem de Serviço (MPD005, MOF001) exigem conferência da entrega antes de permitir o faturamento em NF.

Quando habilitado ('S'), o sistema:

  1. Ao inserir Pedido ou OS, marca o campo de controle de entrega oficina como pendente de conferência ('N' em vez do padrão 'I').
  2. Ao salvar o pedido em MPD002, abre o diálogo TfrmUMPD002FrmContEntrega perguntando "Deseja Gerar Controle de Entrega por Conferência?" - se sim, grava endereço/frete e marca PEDIDO.ST_ENTREGAOFICINA = 'S'; se não, grava 'N'.
  3. Ao gerar NF de saída pela procedure GERA_NOTAFISCAL, só permite faturar pedidos já conferidos (PEDIDO.ST_ENTREGAOFICINA IN ('S','N') com aviso "A NOTA FISCAL POSSUI PEDIDOS QUE NÃO FORAM CONFERIDOS. VERIFIQUE [CPD013]").

Não confundir com ST_CONTENTREGA (controla se agendamento de entrega enxerga serviços ou só produtos) nem com ST_ENTREGA (habilita a funcionalidade de Controle de Entrega).

Telas impactadas​

MóduloCódigoUso
Parâmetros de FaturamentoMFA001Único local de configuração (cmbST_CONTENTREGACONF em UMFA001.pas:330 e UMFA001.dfm:9045-9071)
Pedido de VendaMPD002Ao salvar o pedido, se = 'S' abre diálogo TfrmUMPD002FrmContEntrega e grava PEDIDO.ST_ENTREGAOFICINA = 'S' ou 'N' (UMPD002.pas:2368-2393); carrega o valor junto com outros parâmetros em UdmMPD002.pas:5753
Ordem de ServiçoMPD005Carrega em dmMPD005.iST_CONTENTREGACONF (UdmMPD005.pas:247, 377, 404) e no AfterInsert da ORDEMSERVICO troca ST_ENTREGAOF de 'I' para 'N' quando = 'S' (UdmMPD005.pas:1820-1823)
Ordem de Serviço (Oficina)MOF001No AfterInsert da ORDEMSERVICO troca ST_ENTREGAOF de 'I' para 'N' quando ParmFatur.Values['ST_CONTENTREGACONF'] = 'S' (UdmMOF001.pas:4258-4261)

Procedures impactadas​

ObjetoArquivoPapel
GERA_NOTAFISCALScripts/GERA_NOTAFISCAL.sql linha 260Lê P.ST_CONTENTREGACONF e carrega na variável V_ST_ENTREGAOF (linha 267). Quando a NF é de saída (V_TP_NOTA = 'S') e V_ST_ENTREGAOF = 'S', faz sub-consulta em PEDIDONOTA/PEDIDO procurando pedidos com ST_ENTREGAOFICINA IN ('S','N') - se algum pedido ainda estiver com 'N' (não conferido), devolve mensagem de bloqueio: "A NOTA FISCAL POSSUI PEDIDOS QUE NÃO FORAM CONFERIDOS. VERIFIQUE [CPD013]" (linhas 405-423)

Observação: em GERA_NOTAFISCAL.sql, a variável V_ST_ENTREGAOF recebe o valor de P.ST_CONTENTREGACONF (nome de variável enganoso mas mantido em produção). O campo PEDIDO.ST_ENTREGAOFICINA é outro dado - é marcado pelos módulos MPD002/MPD005/MOF001.

Campos envolvidos​

Tabela.CampoTipoDescrição
PARMFATUR.ST_CONTENTREGACONFCHAR(1) / FixedCharO próprio parâmetro (UdmMFA001.dfm:1612-1614, domínio 'S'/'N')
PEDIDO.ST_ENTREGAOFICINADOM_CHAR1 DEFAULT 'I' NOT NULLStatus da conferência no pedido (docs/schema/tables/PEDIDO.sql:91). Valores usados no código: 'I' (inicial, sem controle), 'N' (pendente de conferência), 'S' (conferido/liberado)
ORDEMSERVICO.ST_ENTREGAOFDOM_CHAR1 DEFAULT 'I' NOT NULLEquivalente para OS (docs/schema/tables/ORDEMSERVICO.sql:45)
PEDIDONOTA.*váriasLigação pedido↔nota, usada por GERA_NOTAFISCAL para testar se há pedidos não conferidos na NF

Opções disponíveis​

N - Não (padrão)​

O que fazDetalhe
Inserção de Pedido/OSPEDIDO.ST_ENTREGAOFICINA / ORDEMSERVICO.ST_ENTREGAOF permanecem com o default 'I' (inicial)
Salvamento do Pedido (MPD002)O bloco if (ParmFatur.Values['ST_CONTENTREGACONF'] = 'S') (UMPD002.pas:2368) não entra → nenhum diálogo é exibido
AfterInsert OS (MPD005)tabORDEMSERVICOST_ENTREGAOF.Value := 'I' (UdmMPD005.pas:1819); o if dmMPD005.iST_CONTENTREGACONF = 'S' em UdmMPD005.pas:1820 é falso → valor permanece 'I'
AfterInsert OS (MOF001)tabORDEMSERVICOST_ENTREGAOF.Value := 'I' (UdmMOF001.pas:4256); if (ParmFatur.Values['ST_CONTENTREGACONF'] = 'S') em UdmMOF001.pas:4258 é falso → valor permanece 'I'
GERA_NOTAFISCALV_ST_ENTREGAOF recebe 'N' (do parâmetro) → IF (V_ST_ENTREGAOF = 'S') em GERA_NOTAFISCAL.sql:406 é falso → nenhuma checagem de conferência é feita, NF gerada normalmente

Simulação passo a passo​

  1. Em MFA001 → aba Pedidos / O.S. → Opção 1 → Controle de Entrega por Conferência = Não (cmbST_CONTENTREGACONF = N)
  2. Salve os parâmetros → PARMFATUR.ST_CONTENTREGACONF = 'N'
  3. Abra MPD002, crie um pedido com 2 itens e salve
  4. O pedido é salvo diretamente, sem diálogo de controle de entrega; PEDIDO.ST_ENTREGAOFICINA fica 'I'
  5. Abra MOF001 / MPD005 e insira uma OS → ORDEMSERVICO.ST_ENTREGAOF = 'I'
  6. Em MNF002, faça a NF do pedido criado → GERA_NOTAFISCAL não testa conferência → NF é gerada sem qualquer bloqueio adicional

Resultado esperado: Fluxo de venda sem controle de conferência. Pedidos/OS seguem direto para faturamento e nenhuma etapa manual extra é exigida. Comportamento padrão para empresas que não separam "etapa de conferência" entre emissão do pedido e faturamento.


S - Sim​

O que fazDetalhe
Inserção de Pedido/OSPEDIDO.ST_ENTREGAOFICINA / ORDEMSERVICO.ST_ENTREGAOF são inicializados como 'N' (pendente de conferência) em vez de 'I'
Salvamento do Pedido (MPD002)UMPD002.pas:2370 dispara msgcodigo('C-0000', [' Deseja Gerar Controle de Entrega por Conferência ? ']). Se Sim: abre TfrmUMPD002FrmContEntrega (captura endereço de entrega DS_ENDENTREGAOF + valor do frete VL_FRETE) e grava UPDATE PEDIDO SET ST_ENTREGAOFICINA = 'S' (UMPD002.pas:2376-2381). Se Não: grava UPDATE PEDIDO SET ST_ENTREGAOFICINA = 'N' (UMPD002.pas:2385-2391)
AfterInsert OS (MPD005)Após setar 'I', o bloco if(dmMPD005.iST_CONTENTREGACONF = 'S') (UdmMPD005.pas:1820-1823) sobrescreve com tabORDEMSERVICOST_ENTREGAOF.AsString := 'N'
AfterInsert OS (MOF001)Idem: sobrescreve 'I' por 'N' (UdmMOF001.pas:4260)
GERA_NOTAFISCALV_ST_ENTREGAOF recebe 'S' → dispara SELECT FIRST 1 P.ST_ENTREGAOFICINA FROM PEDIDONOTA ... WHERE P.ST_ENTREGAOFICINA IN ('S','N') (linhas 408-419). Se retornar qualquer registro (V_ST_ENTREGAOF IS NOT NULL), grava V_MENSAGEM = 'A NOTA FISCAL POSSUI PEDIDOS QUE NÃO FORAM CONFERIDOS. VERIFIQUE [CPD013]' (linhas 421-422) - a NF não é gerada

Simulação passo a passo​

  1. Em MFA001 → aba Pedidos / O.S. → Opção 1 → Controle de Entrega por Conferência = Sim (cmbST_CONTENTREGACONF = S)
  2. Salve os parâmetros → PARMFATUR.ST_CONTENTREGACONF = 'S'
  3. Abra MPD002, crie um pedido (ex.: cliente 1234, item I001 qt 10) e pressione Salvar
  4. Sistema exibe "Deseja Gerar Controle de Entrega por Conferência?"
    • Clicando Sim: abre diálogo TfrmUMPD002FrmContEntrega → digite endereço "Rua X, 100" e frete 50,00 → OK → PEDIDO.ST_ENTREGAOFICINA := 'S' (o pedido já nasce conferido/liberado)
    • Clicando Não: PEDIDO.ST_ENTREGAOFICINA := 'N' (pedido marcado para conferência posterior via [CPD013])
  5. Abra MOF001 e crie uma OS → ORDEMSERVICO.ST_ENTREGAOF é gravado como 'N' no AfterInsert
  6. Depois, em MNF002, selecione o pedido cujo ST_ENTREGAOFICINA = 'N' e tente gerar a nota
  7. GERA_NOTAFISCAL detecta o pedido não conferido (SELECT FIRST 1 P.ST_ENTREGAOFICINA ... WHERE ST_ENTREGAOFICINA IN ('S','N') retorna 'N') e bloqueia: "A NOTA FISCAL POSSUI PEDIDOS QUE NÃO FORAM CONFERIDOS. VERIFIQUE [CPD013]"
  8. Usuário precisa conferir o pedido na tela CPD013 (confirmar o controle de entrega) → somente então ST_ENTREGAOFICINA passa a 'S' → NF pode ser faturada

Resultado esperado: Fluxo com conferência obrigatória. Todo pedido/OS exige decisão sobre controle de entrega no momento do salvamento (MPD002) ou é automaticamente marcado como "pendente" (MPD005/MOF001). NF só é gerada depois que o pedido/OS estiver conferido. Cenário típico: empresas com separação física entre equipe comercial (emite pedido) e equipe de expedição (confere e libera entrega), como distribuidoras e oficinas de recapagem onde o pneu precisa ser montado/entregue antes da emissão fiscal.


Interação com ST_CONTENTREGA / ST_ENTREGACONSUMIDORFINAL / ST_ENTREGA​

Apesar do nome similar, estes parâmetros pertencem a dois subsistemas diferentes de "entrega":

ParâmetroSubsistemaLocalização na tela
ST_ENTREGAControle de Entrega (agendamento logístico via CONTROLEENTREGA + TfrmEntrega)Aba Controle Entrega / grupo grpControleEntrega
ST_CONTENTREGAIdem - define se serviços entram no agendamentoAba Controle Entrega
ST_ENTREGACONSUMIDORFINALIdem - entrega para consumidor finalAba Controle Entrega
ST_CONTENTREGACONFConferência de Pedido/OS antes do faturamento (campos ST_ENTREGAOFICINA / ST_ENTREGAOF)Aba Pedidos / O.S. → Opção 1
  • ST_CONTENTREGACONF é independente dos três outros. Ele habilita o fluxo de conferência (PEDIDO.ST_ENTREGAOFICINA, ORDEMSERVICO.ST_ENTREGAOF) e o bloqueio em GERA_NOTAFISCAL.
  • Os três outros (ST_ENTREGA, ST_CONTENTREGA, ST_ENTREGACONSUMIDORFINAL) trabalham sobre a tabela CONTROLEENTREGA e o formulário TfrmEntrega (agendamento de data/motorista), sem passar por esse bloqueio.
  • Um cenário comum é ambos ligados: a empresa usa Controle de Entrega (agendamento) e também exige que o pedido seja conferido antes de virar nota - são fluxos paralelos.

Tabela Comparativa Resumida​

OpçãoNomePEDIDO.ST_ENTREGAOFICINA ao inserirDiálogo ao salvar (MPD002)Bloqueio em GERA_NOTAFISCALCenário típico
NNão (padrão)'I' (inicial)Não apareceNão aplicaEmpresas sem separação entre pedido e faturamento
SSim'N' (pendente) até user decidirPergunta "Deseja Gerar Controle de Entrega por Conferência?"Bloqueia NF quando existe pedido com ST_ENTREGAOFICINA = 'N' (aguardando conferência em [CPD013])Distribuidoras, oficinas, empresas com expedição separada do comercial

Referências no Código Fonte​

ComboBox e valor padrão​

ArquivoLinha(s)Trecho
source/MFA001/UMFA001.dfm8165-8178Label lbl60 → Caption "Controle de Entrega por Conferência"
source/MFA001/UMFA001.dfm9045-9071cmbST_CONTENTREGACONF: TwwDBComboBox com Items.Strings = ('Sim'#9'S', 'Não'#9'N') e DataField = 'ST_CONTENTREGACONF'
source/MFA001/UMFA001.pas330Declaração cmbST_CONTENTREGACONF: TwwDBComboBox
source/MFA001/UdmMFA001.dfm234ST_CONTENTREGACONF no SELECT do tabPARMFATUR
source/MFA001/UdmMFA001.dfm1612-1614Campo tabPARMFATURST_CONTENTREGACONF: TStringField (FieldName = 'ST_CONTENTREGACONF', Origin = '"PARMFATUR"."ST_CONTENTREGACONF"')
source/MFA001/UdmMFA001.dfm2413ST_CONTENTREGACONF na lista de colunas do SELECT principal
source/MFA001/UdmMFA001.dfm2579:ST_CONTENTREGACONF como parâmetro no INSERT gerado pelo FireDAC
source/MFA001/UdmMFA001.dfm2816ST_CONTENTREGACONF = :ST_CONTENTREGACONF no UPDATE gerado pelo FireDAC
source/MFA001/UdmMFA001.dfm3114ST_CONTENTREGACONF na query de navegação
source/MFA001/UdmMFA001.pas220Declaração tabPARMFATURST_CONTENTREGACONF: TStringField
source/MFA001/UdmMFA001.pas528AfterInsert: tabPARMFATURST_CONTENTREGACONF.AsString := 'N' (valor padrão)

Consumidores (leem o parâmetro)​

ArquivoLinha(s)Uso
source/MPD002/UMPD002.pas2368-2393if (ParmFatur.Values['ST_CONTENTREGACONF'] = 'S') → exibe diálogo TfrmUMPD002FrmContEntrega e grava PEDIDO.ST_ENTREGAOFICINA = 'S' ou 'N'
source/MPD002/UMPD002FrmContEntrega.pas / .dfm-Form auxiliar do diálogo (campos DS_ENDENTREGAOF, VL_FRETE)
source/MPD002/UdmMPD002.pas5753SELECT ... P.ST_CONTENTREGACONF ... FROM PARMFATUR P (junto com outros parâmetros)
source/MPD005/UdmMPD005.pas247Declaração da variável iST_CONTENTREGACONF: string
source/MPD005/UdmMPD005.pas377SELECT ... ST_CONTENTREGACONF ... FROM PARMFATUR
source/MPD005/UdmMPD005.pas404dmMPD005.iST_CONTENTREGACONF := Resultado[20]
source/MPD005/UdmMPD005.pas1819-1823tabORDEMSERVICOAfterInsert: seta ST_ENTREGAOF.Value := 'I'; se iST_CONTENTREGACONF = 'S' sobrescreve com 'N'
source/MOF001/UdmMOF001.pas4256-4261tabORDEMSERVICOAfterInsert: seta ST_ENTREGAOF.Value := 'I'; se ParmFatur.Values['ST_CONTENTREGACONF'] = 'S' sobrescreve com 'N'

Scripts SQL (Firebird)​

ArquivoLinha(s)Uso
Scripts/GERA_NOTAFISCAL.sql153declare variable V_ST_ENTREGAOF DOM_CHAR1; (nome da variável refere-se ao parâmetro, não ao campo homônimo de ORDEMSERVICO)
Scripts/GERA_NOTAFISCAL.sql260SELECT ... P.ST_CONTENTREGACONF, ... FROM PARMFATUR P
Scripts/GERA_NOTAFISCAL.sql267INTO ... :V_ST_ENTREGAOF, ... (carrega ST_CONTENTREGACONF na variável com nome enganoso)
Scripts/GERA_NOTAFISCAL.sql405-423IF (V_TP_NOTA = 'S') ... IF (V_ST_ENTREGAOF = 'S') → busca em PEDIDONOTA/PEDIDO por pedido com ST_ENTREGAOFICINA IN ('S','N'); se achar, grava mensagem de bloqueio "A NOTA FISCAL POSSUI PEDIDOS QUE NÃO FORAM CONFERIDOS. VERIFIQUE [CPD013]"

Tabelas afetadas (DDL)​

ArquivoLinhaCampo
docs/schema/tables/PEDIDO.sql91ST_ENTREGAOFICINA DOM_CHAR1 DEFAULT 'I' NOT NULL
docs/schema/tables/ORDEMSERVICO.sql45ST_ENTREGAOF DOM_CHAR1 DEFAULT 'I' NOT NULL