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ódulo | Código | Papel |
|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cadastra/edita as 3 flags via TCheckListBox chkTP_OBSORDEMCARREG |
| NF Ordem Carregamento (Recapadora) | MRC020 | Consumidora — 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) | MRC049 | Consumidora — antes de Gera_NotaFiscalAutomatico chama RETORNA_OBSORDEMCARREG para montar dsObservacaoNota (UMRC049.pas linhas 1109–1116) |
| FER002 (Verificador estrutura) | FER002 | Consumidora 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
| Procedure | Arquivo | Papel |
|---|
RETORNA_OBSORDEMCARREG | Scripts/RETORNA_OBSORDEMCARREG.sql | USO 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
| Campo | Descrição |
|---|
PARMFATUR.TP_OBSORDEMCARREG | Este parâmetro. Combinação das letras A, B, C. Valor 'X' = nenhuma flag ativa (sentinela de "vazio") |
PARMFATUR.TP_OBSNOTA | Parâmetro irmão (mesma tela, mesmo padrão de TCheckListBox) — controla observação da NF. Ver TP_OBSNOTA |
PEDIDO.DS_OBSERVACAO | Fonte 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.DSOBSFATURAMENTO | Fonte da observação de faturamento dos pedidos pneu da recap (retornada em O_DS_OBSFATURAMENTOPNEU) |
ORDEMCARREG / ORDEMCARREGRECAP | Tabelas da Ordem de Carregamento consultadas via NR_EMBARQUE |
NOTA.DS_OBSERVACAO / NOTA.DSOBSFATURAMENTO | Destinos 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):
| Valor | Nome (Caption no TCheckListBox) | O que faz |
|---|
A | Nú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) |
B | Nú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) |
C | Nú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 faz | Detalhe |
|---|
| Origem do texto | Varredura 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: ' |
| Destino | O_DS_OBSERVACAO → NOTA.DS_OBSERVACAO na NF gerada por MRC020/MRC049 |
Simulação passo a passo
- Em MFA001 → aba Parâmetros → sub-aba Nota → aba Obs. Fiscais → GroupBox "Observação da Ordem Carregamento" marque "Número da Ordem".
- Salve (F6). O campo
PARMFATUR.TP_OBSORDEMCARREG recebe a letra A.
- 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").
- 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 faz | Detalhe |
|---|
| Origem do texto | Varredura 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: ' |
| Destino | O_DS_OBSERVACAO → NOTA.DS_OBSERVACAO |
Simulação passo a passo
- MFA001 → marque "Número do Lote" → salve (F6).
- Em MRC020/MRC049 gere NF de ordem cujos pedidos originais contenham
"Número do Lote de Produção: LOTE-2025-001".
- 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 faz | Detalhe |
|---|
| Origem do texto | Varredura 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ção | A placa é concatenada primeiro no O_DS_OBSERVACAO (linhas 179–182), antes do par A/B |
| Destino | O_DS_OBSERVACAO → NOTA.DS_OBSERVACAO |
Simulação passo a passo
- MFA001 → marque "Número da Placa" → salve (F6).
- Em MRC020/MRC049 gere NF de ordem cujos pedidos contenham
"Número da Placa: ABC-1D23".
- 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 faz | Detalhe |
|---|
| Origem | UdmMFA001.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ência | POSITION('A'/'B'/'C', 'X') = 0 em todos os casos, portanto nenhum bloco (Ordem / Lote / Placa) é adicionado em O_DS_OBSERVACAO |
| Re-leitura | No 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
- MFA001 → desmarque as três opções do
TCheckListBox.
- Salve (F6).
TP_OBSORDEMCARREG grava 'X'.
- Em MRC020/MRC049 gere NF de ordem com pedidos que tenham Nº Ordem/Lote/Placa nas observações.
- 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.
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.
Navegação de foco em erros de validação
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)
| Arquivo | Linhas | Papel |
|---|
source/MFA001/UMFA001.dfm | 7659–7693 | Declaraçã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.pas | 410 | Declaração chkTP_OBSORDEMCARREG: TCheckListBox |
source/MFA001/UMFA001.pas | 812, 1778–1781 | procedure TfrmMFA001.chkTP_OBSORDEMCARREGClickCheck → chama Verifica_TipoObsOrdemCarreg('A') |
source/MFA001/UMFA001.pas | 1150–1155 | Redirecionamento de foco em validação (vai para pagPedidos/edtCD_TRANSPORTADORRECUSADO) |
source/MFA001/UdmMFA001.pas | 228 | Declaração tabPARMFATURTP_OBSORDEMCARREG: TStringField |
source/MFA001/UdmMFA001.pas | 422 | Assinatura procedure Verifica_TipoObsOrdemCarreg(Tipo: String) (forward) |
source/MFA001/UdmMFA001.pas | 505 | AfterInsert: valor padrão 'ABC' (todas as 3 flags ativas) |
source/MFA001/UdmMFA001.pas | 506 | Chamada Verifica_TipoObsOrdemCarreg('A') dentro do AfterInsert (grava 'ABC' após marcar os 3 checks) |
source/MFA001/UdmMFA001.pas | 865–914 | Corpo 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.pas | 881–882 | Sentinela: if (Status = EmptyStr) then Status := 'X'; |
source/MFA001/UdmMFA001.pas | 1455 | Chamada Verifica_TipoObsOrdemCarreg('C') na navegação de registros do tabPARMFATUR (AfterScroll) |
source/MFA001/UdmMFA001.dfm | 242, 1660–1662, 2416, 2584, 2823, 3122 | TP_OBSORDEMCARREG presente no SelectSQL, InsertSQL, ModifySQL do tabPARMFATUR e no TStringField tabPARMFATURTP_OBSORDEMCARREG (FieldName/Origin) |
Delphi — Consumidores (chamam RETORNA_OBSORDEMCARREG)
| Arquivo | Linhas | Papel |
|---|
source/MRC020/UdmMRC020NFORDEM.pas | 1170 | LEFT 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.pas | 1526–1540 | Fluxo principal: SELECT O_DS_OBSERVACAO, O_DS_OBSFATURAMENTOPNEU FROM RETORNA_OBSORDEMCARREG(…) e atribuição a DS_OBSERVACAO e tabNOTADSOBSFATURAMENTO |
source/MRC020/UdmMRC020NFORDEM.dfm | 1888, 2909 | Comentários --LEFT JOIN RETORNA_OBSORDEMCARREG(...) em SQLs alternativos do dataset |
source/MRC049/UMRC049.pas | 1107–1117 | Antes de Gera_NotaFiscalAutomatico: quando dsObservacaoNota = '', chama RETORNA_OBSORDEMCARREG(sessao.empresa.cd_empresa, tabORDEMNR_EMBARQUE, tabORDEMPESSOACD_PESSOA) e usa o retorno como observação inicial |
| Arquivo | Linhas | Papel |
|---|
source/FER002/UFER002.pas | 195, 259, 368, 433, 522, 666, 798, 849 | Lista 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)
| Arquivo | Linhas-chave | Papel |
|---|
Scripts/RETORNA_OBSORDEMCARREG.sql | 15, 35–39, 68–78, 82–101, 105–110, 112–120, 124–140, 146–158, 164–167, 169–172, 174–177, 179–191 | Procedure 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) |