Pular para o conteúdo principal

TP_OBSORDEMCARREG — Blocos de conteúdo que compõem a Observação da Ordem de Carregamento

Tela de configuração: MFA001 — Parâmetros de Faturamento Localização: Parâmetros → Notas Fiscais → Obs. Fiscais → GroupBox "Observação da Ordem Carregamento" (logo abaixo de chkTP_OBSNOTA) Tabela: PARMFATUR.TP_OBSORDEMCARREG Tipo: VARCHAR — cada caractere é uma flag independente (conjunto de letras A, B, C) Valor padrão: ABC (A = Nº da Ordem de Produção Pneu, B = Nº do Lote de Produção, C = Nº da Placa — UdmMFA001.pas linha 505)

Componente visual: TCheckListBox chkTP_OBSORDEMCARREG com 3 itens em 2 colunas (UMFA001.dfm linhas 7672–7693). Cada item marcado vira uma letra concatenada no campo TP_OBSORDEMCARREG. Quando nenhum item é marcado, o campo recebe o sentinela 'X' (ver UdmMFA001.pas linhas 881–882) — é a forma de representar "não incluir nada" sem deixar o campo vazio.

Telas impactadas​

MóduloCódigoPapel
Parâmetros de FaturamentoMFA001Produtora — cadastra/edita as 3 flags via TCheckListBox chkTP_OBSORDEMCARREG
NF Ordem Carregamento (Recapadora)MRC020Consumidora — chama RETORNA_OBSORDEMCARREG(CD_EMPRESA, NR_EMBARQUE, CD_PESSOA) ao gerar a NF da ordem (UdmMRC020NFORDEM.pas linhas 1170 e 1528) para compor DS_OBSERVACAO e DSOBSFATURAMENTO
NF Ordem Automática (Recapadora)MRC049Consumidora — antes de Gera_NotaFiscalAutomatico chama RETORNA_OBSORDEMCARREG para montar dsObservacaoNota (UMRC049.pas linhas 1109–1116)
FER002 (Verificador estrutura)FER002Consumidora meta — UFER002.pas linhas 195, 259, 368, 433, 522, 666, 798, 849 — tratamento explícito do campo TP_OBSORDEMCARREG para não gerar auditoria nele (junto com os demais campos de LAY*)

Procedures impactadas​

ProcedureArquivoPapel
RETORNA_OBSORDEMCARREGScripts/RETORNA_OBSORDEMCARREG.sqlUSO PRINCIPAL. Lê P.TP_OBSORDEMCARREG em V_TP_OBSORDEMPROD (linhas 35–39) e usa POSITION(<letra>, V_TP_OBSORDEMPROD) > 0 para decidir se prefixa cada bloco: A ("Ordem Prod Pneu: …", linha 164–167), B ("Lote Prod Pneu: …", linhas 169–172) e C ("Nr Placa: …", linhas 174–177). Os três blocos são extraídos das observações dos pedidos (PEDIDO.DS_OBSERVACAO) e dos pedidos pneu (PEDIDOPNEU.DSOBSFATURAMENTO) vinculados aos itens da ORDEMCARREG/ORDEMCARREGRECAP do NR_EMBARQUE. Retorna O_DS_OBSERVACAO, O_DS_OBSFATURAMENTOPNEU e O_DS_OBSBLOQUEIO

Campos envolvidos​

CampoDescrição
PARMFATUR.TP_OBSORDEMCARREGEste parâmetro. Combinação das letras A, B, C. Valor 'X' = nenhuma flag ativa (sentinela de "vazio")
PARMFATUR.TP_OBSNOTAParâmetro irmão (mesma tela, mesmo padrão de TCheckListBox) — controla observação da NF. Ver TP_OBSNOTA
PEDIDO.DS_OBSERVACAOFonte dos textos "Número da Ordem de Produção Pneu:", "Número do Lote de Produção:", "Número da Placa:" e equivalentes abreviados ("Nr Ord Prod Pneu:", "Nr Lote Prod:", "Nr Placa:") — parseados dentro da procedure
PEDIDOPNEU.DSOBSFATURAMENTOFonte da observação de faturamento dos pedidos pneu da recap (retornada em O_DS_OBSFATURAMENTOPNEU)
ORDEMCARREG / ORDEMCARREGRECAPTabelas da Ordem de Carregamento consultadas via NR_EMBARQUE
NOTA.DS_OBSERVACAO / NOTA.DSOBSFATURAMENTODestinos do conteúdo retornado pela procedure ao gerar NF a partir da ordem (MRC020/MRC049)

Flags / Opções disponíveis​

As 3 flags seguem o mapeamento direto em Verifica_TipoObsOrdemCarreg (UdmMFA001.pas linhas 865–914):

ValorNome (Caption no TCheckListBox)O que faz
ANúmero da Ordem (idx 0)Prefixa "Ordem Prod Pneu: <nrs>" na observação da NF gerada pela ordem de carregamento. A procedure extrai os números dos trechos "Número da Ordem de Produção Pneu: " e "Nr Ord Prod Pneu: " do DS_OBSERVACAO dos pedidos vinculados (RETORNA_OBSORDEMCARREG.sql linhas 68–78, 112–120, 164–167)
BNúmero do Lote (idx 1)Prefixa "Lote Prod Pneu: <nrs>" na observação. Extrai de "Número do Lote de Produção: " e "Nr Lote Prod: " (RETORNA_OBSORDEMCARREG.sql linhas 82–101, 124–140, 169–172)
CNúmero da Placa (idx 2)Prefixa "Nr Placa: <placas>" na observação. Extrai de "Número da Placa: " e "Nr Placa: " (RETORNA_OBSORDEMCARREG.sql linhas 105–110, 146–158, 174–177)
X(sentinela — nenhum selecionado)Gravado automaticamente quando o usuário desmarca todas as opções. Funciona como "não incluir Nº Ordem, Lote nem Placa na observação" (UdmMFA001.pas linhas 881–882). Como a procedure testa POSITION('A'/'B'/'C', …), um valor 'X' simplesmente não aciona nenhum bloco

Observação sobre concatenação (A + B): na linha 185 de RETORNA_OBSORDEMCARREG.sql, quando A e B estão ativos ao mesmo tempo, o texto sai agrupado como "Ordem Prod Pneu: … e Respectivamente Lote Prod Pneu: …" — o operador e Respectivamente aparece apenas na combinação A+B. Se apenas um dos dois estiver marcado, só o rótulo correspondente é concatenado.

A — Número da Ordem (idx 0)​

O que fazDetalhe
Origem do textoVarredura do PEDIDO.DS_OBSERVACAO dos pedidos vinculados ao ORDEMCARREG.NR_EMBARQUE procurando "Número da Ordem de Produção Pneu: " (RETORNA_OBSORDEMCARREG.sql linhas 68–78) ou o rótulo curto "Nr Ord Prod Pneu: " (linhas 112–120)
Gatilho`IF (V_OP != '') AND (POSITION('A', V_TP_OBSORDEMPROD) > 0) THEN V_OP = 'Ordem Prod Pneu: '
DestinoO_DS_OBSERVACAO → NOTA.DS_OBSERVACAO na NF gerada por MRC020/MRC049

Simulação passo a passo​

  1. Em MFA001 → aba Parâmetros → sub-aba Nota → aba Obs. Fiscais → GroupBox "Observação da Ordem Carregamento" marque "Número da Ordem".
  2. Salve (F6). O campo PARMFATUR.TP_OBSORDEMCARREG recebe a letra A.
  3. Em MRC020 ou MRC049 gere a NF a partir de uma Ordem de Carregamento cujos pedidos de origem tenham a observação "Número da Ordem de Produção Pneu: 12345" (ou "Nr Ord Prod Pneu: 12345").
  4. A procedure RETORNA_OBSORDEMCARREG monta o texto e o Delphi concatena em DS_OBSERVACAO da NF.

Resultado esperado: a observação da NF da ordem de carregamento contém "Ordem Prod Pneu: 12345".


B — Número do Lote (idx 1)​

O que fazDetalhe
Origem do textoVarredura procurando "Número do Lote de Produção: " (RETORNA_OBSORDEMCARREG.sql linhas 82–101) ou "Nr Lote Prod: " (linhas 124–140) no DS_OBSERVACAO dos pedidos
Gatilho`IF (V_LOTE != '') AND (POSITION('B', V_TP_OBSORDEMPROD) > 0) THEN V_LOTE = 'Lote Prod Pneu: '
DestinoO_DS_OBSERVACAO → NOTA.DS_OBSERVACAO

Simulação passo a passo​

  1. MFA001 → marque "Número do Lote" → salve (F6).
  2. Em MRC020/MRC049 gere NF de ordem cujos pedidos originais contenham "Número do Lote de Produção: LOTE-2025-001".
  3. A observação final traz "Lote Prod Pneu: LOTE-2025-001".

Resultado esperado: o número do lote de produção é transportado do pedido para a observação da NF.


C — Número da Placa (idx 2)​

O que fazDetalhe
Origem do textoVarredura procurando "Número da Placa: " (RETORNA_OBSORDEMCARREG.sql linhas 105–110) ou "Nr Placa: " (linhas 146–158). Inclui deduplicação: se a mesma placa já estiver em V_PLACA, não é concatenada duas vezes (linhas 151–157)
Gatilho`IF (V_PLACA != '') AND (POSITION('C', V_TP_OBSORDEMPROD) > 0) THEN V_PLACA = 'Nr Placa: '
Ordem na observaçãoA placa é concatenada primeiro no O_DS_OBSERVACAO (linhas 179–182), antes do par A/B
DestinoO_DS_OBSERVACAO → NOTA.DS_OBSERVACAO

Simulação passo a passo​

  1. MFA001 → marque "Número da Placa" → salve (F6).
  2. Em MRC020/MRC049 gere NF de ordem cujos pedidos contenham "Número da Placa: ABC-1D23".
  3. A observação final traz "Nr Placa: ABC-1D23" no início do texto.

Resultado esperado: a placa do veículo/cliente vai direto do pedido para a observação da NF.


X — Sentinela "nenhuma flag"​

O que fazDetalhe
OrigemUdmMFA001.pas linha 881–882: if ( Status = EmptyStr ) then Status := 'X'; — gravado quando o usuário marca o TCheckListBox mas desmarca todas as opções
ConsequênciaPOSITION('A'/'B'/'C', 'X') = 0 em todos os casos, portanto nenhum bloco (Ordem / Lote / Placa) é adicionado em O_DS_OBSERVACAO
Re-leituraNo Tipo = 'C' (Consultando), UdmMFA001.pas linhas 889–898 — se Status estiver preenchido (ex.: 'X'), o código começa desmarcando todos os itens; se estiver '' (nunca inicializado), o código marca todos (comportamento legado de migração)

Simulação passo a passo​

  1. MFA001 → desmarque as três opções do TCheckListBox.
  2. Salve (F6). TP_OBSORDEMCARREG grava 'X'.
  3. Em MRC020/MRC049 gere NF de ordem com pedidos que tenham Nº Ordem/Lote/Placa nas observações.
  4. Nenhum dos rótulos "Ordem Prod Pneu:", "Lote Prod Pneu:" ou "Nr Placa:" aparece na observação final.

Resultado esperado: observação da NF da ordem de carregamento não leva dados de ordem de produção, lote ou placa, mesmo que estejam nos pedidos de origem.


Interação com outros parâmetros​

  • TP_OBSNOTA (TP_OBSNOTA) — Parâmetro irmão na mesma tela e mesmo GroupBox "Obs. Fiscais". Usa idêntico padrão de TCheckListBox e a função de persistência Verifica_TipoObsOrdemCarreg é um análogo direto de Verifica_TipoObsNota (mesma estrutura em UdmMFA001.pas, linhas 865–914 vs. 608–862). Mas os dois atuam em fluxos distintos: TP_OBSNOTA controla a observação da NF comum (via RETORNA_OBSNOTA), enquanto TP_OBSORDEMCARREG controla a observação da NF gerada a partir de Ordem de Carregamento Recap (via RETORNA_OBSORDEMCARREG, só chamada em MRC020/MRC049). Não há sobreposição de letras: TP_OBSORDEMCARREG usa só A/B/C/X.
  • ST_OBSPEDIDONOTA — Logo após RETORNA_OBSORDEMCARREG, o código de MRC020 (UdmMRC020NFORDEM.pas linhas 1543–1548) verifica se ST_OBSPEDIDONOTA = 'S' para decidir se copia a observação consolidada para NOTA.DS_OBSERVACAO. Se ST_OBSPEDIDONOTA = 'N', o resultado da procedure não é aplicado à NF.
  • FER002 — Auditoria suprimida: TP_OBSORDEMCARREG está na lista de campos de PARMFATUR que o verificador de estrutura FER002 ignora ao gerar auditorias (UFER002.pas linhas 195, 259, 368, 433, 522, 666, 798, 849), pelo mesmo motivo dos campos CD_LAY*: conteúdo de alta rotatividade, não é útil auditar.

Quando um campo obrigatório falha no BeforePost e o ActiveControl é o chkTP_OBSORDEMCARREG, UMFA001.pas linhas 1150–1155 redirecionam o usuário para PageParm.ActivePage := pagPedidos + pgcPaginaPedidos.ActivePage := pagPedidoOp1 + edtCD_TRANSPORTADORRECUSADO.SetFocus. Ou seja, o fluxo de validação pressupõe que erros disparados enquanto o foco está nesse TCheckListBox geralmente se referem a parâmetros da aba de Pedidos (o próximo campo obrigatório relevante).


Referências no Código Fonte​

Delphi — Tela MFA001 (produtora)​

ArquivoLinhasPapel
source/MFA001/UMFA001.dfm7659–7693Declaração do GroupBox7 ("Observação da Ordem Carregamento") contendo o TCheckListBox chkTP_OBSORDEMCARREG com os 3 itens ('Número da Ordem', 'Número do Lote', 'Número da Placa'), Columns = 2, OnClickCheck = chkTP_OBSORDEMCARREGClickCheck
source/MFA001/UMFA001.pas410Declaração chkTP_OBSORDEMCARREG: TCheckListBox
source/MFA001/UMFA001.pas812, 1778–1781procedure TfrmMFA001.chkTP_OBSORDEMCARREGClickCheck → chama Verifica_TipoObsOrdemCarreg('A')
source/MFA001/UMFA001.pas1150–1155Redirecionamento de foco em validação (vai para pagPedidos/edtCD_TRANSPORTADORRECUSADO)
source/MFA001/UdmMFA001.pas228Declaração tabPARMFATURTP_OBSORDEMCARREG: TStringField
source/MFA001/UdmMFA001.pas422Assinatura procedure Verifica_TipoObsOrdemCarreg(Tipo: String) (forward)
source/MFA001/UdmMFA001.pas505AfterInsert: valor padrão 'ABC' (todas as 3 flags ativas)
source/MFA001/UdmMFA001.pas506Chamada Verifica_TipoObsOrdemCarreg('A') dentro do AfterInsert (grava 'ABC' após marcar os 3 checks)
source/MFA001/UdmMFA001.pas865–914Corpo de Verifica_TipoObsOrdemCarreg — bloco Tipo='A' (Alterando, linhas 871–886) converte Checked[0..2] → A/B/C/X; bloco Tipo='C' (Consultando, linhas 887–913) faz o caminho inverso
source/MFA001/UdmMFA001.pas881–882Sentinela: if (Status = EmptyStr) then Status := 'X';
source/MFA001/UdmMFA001.pas1455Chamada Verifica_TipoObsOrdemCarreg('C') na navegação de registros do tabPARMFATUR (AfterScroll)
source/MFA001/UdmMFA001.dfm242, 1660–1662, 2416, 2584, 2823, 3122TP_OBSORDEMCARREG presente no SelectSQL, InsertSQL, ModifySQL do tabPARMFATUR e no TStringField tabPARMFATURTP_OBSORDEMCARREG (FieldName/Origin)

Delphi — Consumidores (chamam RETORNA_OBSORDEMCARREG)​

ArquivoLinhasPapel
source/MRC020/UdmMRC020NFORDEM.pas1170LEFT JOIN RETORNA_OBSORDEMCARREG(X.CD_EMPRESA, X.NR_EMBARQUE, X.CD_PESSOA) RR ON (1 = 1) — consulta consolidada da observação de bloqueio ao gerar NF da ordem
source/MRC020/UdmMRC020NFORDEM.pas1526–1540Fluxo principal: SELECT O_DS_OBSERVACAO, O_DS_OBSFATURAMENTOPNEU FROM RETORNA_OBSORDEMCARREG(…) e atribuição a DS_OBSERVACAO e tabNOTADSOBSFATURAMENTO
source/MRC020/UdmMRC020NFORDEM.dfm1888, 2909Comentários --LEFT JOIN RETORNA_OBSORDEMCARREG(...) em SQLs alternativos do dataset
source/MRC049/UMRC049.pas1107–1117Antes de Gera_NotaFiscalAutomatico: quando dsObservacaoNota = '', chama RETORNA_OBSORDEMCARREG(sessao.empresa.cd_empresa, tabORDEMNR_EMBARQUE, tabORDEMPESSOACD_PESSOA) e usa o retorno como observação inicial

Delphi — Tratamento meta (auditoria)​

ArquivoLinhasPapel
source/FER002/UFER002.pas195, 259, 368, 433, 522, 666, 798, 849Lista de campos de PARMFATUR em que o FER002 não gera auditoria — inclui TP_OBSORDEMCARREG junto com CD_LAYCONTRATO, CD_LAYPEDCOMPRA, CD_LAYPEDVENDA, CD_LAYRECEITA, CD_LAYTROCA, CD_LAYVOLUME

SQL — Procedures (Firebird)​

ArquivoLinhas-chavePapel
Scripts/RETORNA_OBSORDEMCARREG.sql15, 35–39, 68–78, 82–101, 105–110, 112–120, 124–140, 146–158, 164–167, 169–172, 174–177, 179–191Procedure principal. Lê PARMFATUR.TP_OBSORDEMCARREG em V_TP_OBSORDEMPROD (linha 39), varre o DS_OBSERVACAO dos pedidos vinculados ao NR_EMBARQUE procurando os rótulos "Número da Ordem de Produção Pneu: "/"Nr Ord Prod Pneu: " (A), "Número do Lote de Produção: "/"Nr Lote Prod: " (B) e "Número da Placa: "/"Nr Placa: " (C). Também busca PEDIDOPNEU.DSOBSFATURAMENTO (linhas 199–218) e PEDIDO.DS_BLOQUEIO / PEDIDOPNEU.DSBLOQUEIO (linhas 223–281) para preencher O_DS_OBSFATURAMENTOPNEU e O_DS_OBSBLOQUEIO (estes não dependem de TP_OBSORDEMCARREG)