Pular para o conteúdo principal

Parâmetro Apenas Código de Barras

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Opção 2 → GroupBox "Parâmetros Comum a Notas Fiscais / Pedido" → campo "Apenas Cód. de Barras" Tabela: PARMFATUR.ST_CODBARRASAPENAS Valor padrão: (sem default no AfterInsert; ao ser desabilitado pela UI recebe 'N')

Quando ativado ('S'), este parâmetro obriga o lançamento de itens nos documentos de venda/nota somente através do leitor de código de barras, bloqueando a digitação manual do código do produto (CD_ITEM). Com isso o usuário é forçado a passar o leitor no código impresso da mercadoria — qualquer tentativa de digitar o código do item no grid fica impedida porque o campo assume ReadOnly = True.

O parâmetro só tem efeito quando existir um campo de código de barras disponível na tela; por isso ele é desligado automaticamente se ST_CODIGOBARRA = 'N' (sem leitor) e, nas telas que o consomem, existe ainda um "guarda" verificando o valor de ST_CODIGOBARRA (geralmente <> 'S', <> 'P' ou <> 'A', dependendo do módulo).

Telas impactadas​

Tela de configuração​

MóduloCódigoArquivo / LinhaDescrição
Parâmetros FaturamentoMFA001UMFA001.dfm:4161-4186, UMFA001.pas:258,2198-2209, UdmMFA001.pas:218, UdmMFA001.dfm:1601-1603Declara o TwwDBComboBox cmbST_CODBARRASAPENAS (Sim/Não), o field tabPARMFATURST_CODBARRASAPENAS e a regra de UI que força 'N' + Enabled=False quando ST_CODIGOBARRA = 'N'

Telas que consomem o parâmetro (aplicam ReadOnly no CD_ITEM)​

MóduloCódigoArquivo / LinhaEfeito quando ST_CODBARRASAPENAS = 'S'
Emissão de NF de SaídaMNF002UdmMNF002.pas:1093-1095, 6673-6674Calcula StApenasCodBarras := ((ST_CODIGOBARRA in ['S','A']) and ST_CODBARRASAPENAS = 'S'); ao carregar o item no grid, faz tabITEMNOTACD_ITEM.ReadOnly := True — operador só consegue incluir item pelo leitor
Nota Troca/DevoluçãoMNF009UMNF009.pas:204-214Se ST_CODIGOBARRA <> 'P' e ST_CODBARRASAPENAS = 'S', define CdItemRO := True (bloqueia digitação do código do item)
Nota ComplementarMNF007UMNF007.pas:408-413Mesma regra — CdItemRO := True quando ST_CODIGOBARRA <> 'P' e ST_CODBARRASAPENAS = 'S'
Pedido de VendaMPD002UMPD002.pas:742-745, UdmMPD002.pas:5752CdItemRO := True quando ST_CODIGOBARRA <> 'S' e ST_CODBARRASAPENAS = 'S'; também inclui o campo no SELECT da PARMFATUR
Devolução de PedidoMPD037UMPD037.pas:148-158Se ST_CODIGOBARRA <> 'S' e ST_CODBARRASAPENAS = 'S' → CdItemRO := True
NF de Compra (cabeçalho)MNF008UdmMNF008.pas:765Lê o parâmetro no SELECT da PARMFATUR junto com os demais campos de controle
Comissão sobre NotaMCO006UdmMCO006.pas:2109Lê P.ST_CODBARRASAPENAS no SELECT da PARMFATUR

Telas que apenas persistem o parâmetro no dataset​

MóduloCódigoArquivo / LinhaUso
Parâmetros FaturamentoMFA001UdmMFA001.dfm:233, 2411, 2579, 2734, 3113SELECT/INSERT/UPDATE/FetchRow do PARMFATUR com ST_CODBARRASAPENAS

Procedures impactadas​

Nenhuma. O parâmetro não é referenciado em procedures/triggers/views SQL — a verificação busca direta em Scripts/ por ST_CODBARRASAPENAS retornou zero ocorrências. Todo o comportamento vive no lado Delphi (aplicação de ReadOnly nos grids de item via CdItemRO/StApenasCodBarras).

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_CODBARRASAPENASFlag 'S'/'N' que obriga o lançamento via leitor de código de barras
PARMFATUR.ST_CODIGOBARRAPré-condição: só faz sentido ativar ST_CODBARRASAPENAS quando este parâmetro habilita o campo de código de barras ('S', 'A' ou 'P' dependendo do módulo). Quando ST_CODIGOBARRA = 'N', a UI do MFA001 desabilita o combo e força ST_CODBARRASAPENAS = 'N'
ITEMNOTA.CD_ITEM / ITEMPEDIDO.CD_ITEMCampos do grid de itens cujo ReadOnly é forçado a True quando a regra dispara

Opções disponíveis​

N - Não (padrão de fato)​

O que fazDetalhe
Digitação do CD_ITEM no gridPermitida normalmente
Uso do leitor de código de barrasOpcional (se ST_CODIGOBARRA estiver ativo)
StApenasCodBarras / CdItemROSempre False
Dependência de ST_CODIGOBARRANenhuma

Simulação passo a passo​

  1. Vá em MFA001 → aba Opção 2 → "Apenas Cód. de Barras" = "Não"
  2. Salve os parâmetros (F6)
  3. Abra MNF002 e insira uma nova nota
  4. No grid de itens, clique no campo Produto (CD_ITEM)
  5. Digite manualmente 1234 (código interno do produto) e pressione Enter
  6. O sistema localiza o produto e lança o item normalmente

Resultado esperado: O operador pode lançar itens digitando o código interno, escolhendo via F9 (pesquisa) ou passando o leitor de barras — à sua livre escolha. Este é o fluxo para ambientes onde nem todo produto tem etiqueta com código de barras.

Observação importante: o AfterInsert do MFA001 (UdmMFA001.pas:434-606) não define valor padrão explícito para este campo — ao contrário de ST_CODBARRASBALANCA (linha 472 := 'N') e ST_CODIGOBARRA (linha 443 := 'N'). Portanto, em uma empresa nova, o campo inicia NULL e a UI trata isso como "Não". Somente quando o usuário abre o combo ou a rotina cmbST_CODIGOBARRAChange dispara (ao definir ST_CODIGOBARRA = 'N') é que o valor 'N' é gravado fisicamente (UMFA001.pas:2204).


S - Sim​

O que fazDetalhe
Digitação do CD_ITEM no gridBloqueada (ReadOnly = True)
Uso do leitor de código de barrasObrigatório para lançar itens
StApenasCodBarras / CdItemROTrue nas telas consumidoras
Pré-condiçãoExige ST_CODIGOBARRA compatível ('S', 'A' ou 'P' conforme o módulo). Caso contrário o efeito é neutralizado pela expressão de guarda de cada tela

Simulação passo a passo — lançamento na NF Saída (MNF002)​

  1. Vá em MFA001 → aba Opção 2 → defina "Código de Barras" (ST_CODIGOBARRA) = "Sim" ('S')
  2. Defina "Apenas Cód. de Barras" (ST_CODBARRASAPENAS) = "Sim" → F6
  3. Abra MNF002 e crie uma nova nota
  4. Na inicialização (UdmMNF002.pas:1093), StApenasCodBarras é calculado como True — ST_CODIGOBARRA ∈ ['S','A'] e ST_CODBARRASAPENAS = 'S'
  5. Ao abrir o grid de itens, o evento do tabITEMNOTA (UdmMNF002.pas:6673-6674) aplica tabITEMNOTACD_ITEM.ReadOnly := True
  6. O operador não consegue digitar o código do produto no grid (campo aparece cinza/bloqueado)
  7. O operador passa o leitor no código de barras da embalagem → o ERP identifica o produto via VALIDA_CODIGOBARRA (ou busca direta em ITEM.CD_CODIGOBARRA) e lança o item

Resultado esperado: Toda inclusão de item precisa passar pelo leitor de código de barras. Impede erros de digitação de código e força o rastreamento físico do produto (útil em distribuidoras, farmácias, supermercados, etc.).

Simulação passo a passo — guarda de pré-condição no Pedido (MPD002)​

  1. ST_CODIGOBARRA = 'A' (ativo apenas em ambos) e ST_CODBARRASAPENAS = 'S'
  2. Abra MPD002
  3. UMPD002.pas:742 avalia: (ST_CODIGOBARRA <> 'S') AND (ST_CODBARRASAPENAS = 'S') → True
  4. CdItemRO := True — o CD_ITEM do pedido fica ReadOnly
  5. Operador só consegue lançar item passando o leitor

Atenção: cada módulo tem uma regra de guarda ligeiramente diferente em relação a ST_CODIGOBARRA:

  • MNF002: ativa quando ST_CODIGOBARRA ∈ {'S','A'}
  • MNF007, MNF009: ativa quando ST_CODIGOBARRA <> 'P'
  • MPD002, MPD037: ativa quando ST_CODIGOBARRA <> 'S'

Essa heterogeneidade existe porque cada módulo tem seu próprio "domínio permitido" para ST_CODIGOBARRA (Pedido, Nota, Ambos). Em campo, o efeito prático é: ligar ST_CODBARRASAPENAS só bloqueia digitação nas telas em que o domínio do ST_CODIGOBARRA é compatível.

Simulação passo a passo — UI desabilita o parâmetro quando ST_CODIGOBARRA = 'N'​

  1. Abra MFA001, aba Opção 2
  2. Mude "Código de Barras" (cmbST_CODIGOBARRA) para "Não"
  3. O evento TfrmMFA001.cmbST_CODIGOBARRAChange dispara (UMFA001.pas:2198-2209):
    • Força tabPARMFATURST_CODBARRASAPENAS.AsString := 'N'
    • Aplica cmbST_CODBARRASAPENAS.Enabled := False (combo fica cinza)
  4. Enquanto ST_CODIGOBARRA voltar a 'S'/'A'/'P', o combo permanece desabilitado e o valor é mantido 'N'

Resultado esperado: Garantia de integridade — não é possível exigir "apenas código de barras" em uma empresa que não utiliza leitor de barras.


Interação com ST_CODBARRASBALANCA / ST_CODIGOBARRA​

ST_CODIGOBARRA (PARMFATUR.ST_CODIGOBARRA)​

AspectoDetalhe
DependênciaST_CODBARRASAPENAS exige que ST_CODIGOBARRA esteja habilitado. A UI do MFA001 acopla fisicamente os dois: ao desligar ST_CODIGOBARRA, ST_CODBARRASAPENAS é forçado a 'N' e desabilitado (UMFA001.pas:2200-2208)
Consequência lógicaSe tentasse ativar "Apenas Cód. de Barras" sem haver campo de código de barras nas telas, o operador ficaria sem meio de lançar itens — por isso a UI impede essa combinação
Guardas nos módulosCada tela consumidora verifica o domínio de ST_CODIGOBARRA antes de setar CdItemRO := True

Veja ST_CODIGOBARRA para detalhes do parâmetro de ativação.

ST_CODBARRASBALANCA (PARMFATUR.ST_CODBARRASBALANCA)​

AspectoDetalhe
RelaçãoParâmetros independentes com papéis diferentes: ST_CODBARRASBALANCA define como interpretar códigos EAN de balança; ST_CODBARRASAPENAS define se é obrigatório usar o leitor para lançar itens
Uso combinadoEm açougues/mercearias que vendem por peso, é comum ativar os dois: força o uso do leitor e interpreta automaticamente o EAN de balança com código + peso

Veja ST_CODBARRASBALANCA para detalhes.


Tabela Comparativa Resumida​

OpçãoDigitação de CD_ITEMPré-condiçãoUso típico
N (padrão)Livre — pode digitar, usar F9 ou passar o leitorNenhumaFluxo padrão, qualquer empresa
SBloqueada — só via leitor de código de barrasRequer ST_CODIGOBARRA ativo e domínio compatível na tela consumidoraSupermercados, distribuidoras, farmácias — rastreamento físico obrigatório

Referências no Código Fonte​

Tela MFA001 (configuração)​

ArquivoLinhaDescrição
source/MFA001/UMFA001.dfm4161-4186Declaração do TwwDBComboBox cmbST_CODBARRASAPENAS com Items.Strings = ('Sim'#9'S', 'Não'#9'N'), DataField = 'ST_CODBARRASAPENAS', DataSource = dmMFA001.dsPARMFATUR
source/MFA001/UMFA001.dfm3686-3698Label lblCodBarrasPermite com Caption = 'Apenas Cód. de Barras' (Left=12, Top=43)
source/MFA001/UMFA001.pas258Declaração do componente cmbST_CODBARRASAPENAS: TwwDBComboBox
source/MFA001/UMFA001.pas2198-2209TfrmMFA001.cmbST_CODIGOBARRAChange — quando ST_CODIGOBARRA = 'N' força ST_CODBARRASAPENAS := 'N' e desabilita o combo
source/MFA001/UdmMFA001.pas218Declaração do field tabPARMFATURST_CODBARRASAPENAS: TStringField
source/MFA001/UdmMFA001.pas434-606AfterInsert do tabPARMFATUR — não atribui valor padrão para ST_CODBARRASAPENAS
source/MFA001/UdmMFA001.dfm1601-1603Definição do field (FieldName = 'ST_CODBARRASAPENAS', Origin = '"PARMFATUR"."ST_CODBARRASAPENAS"')
source/MFA001/UdmMFA001.dfm233, 2411, 2579, 2734, 3113SELECT/INSERT/UPDATE/FetchRow do PARMFATUR incluindo o campo

Telas consumidoras (regra CdItemRO / StApenasCodBarras)​

ArquivoLinhaDescrição
source/MNF002/UdmMNF002.pas1093-1095StApenasCodBarras := ((ST_CODIGOBARRA ∈ {'S','A'}) and ST_CODBARRASAPENAS = 'S')
source/MNF002/UdmMNF002.pas6673-6674Aplica tabITEMNOTACD_ITEM.ReadOnly := True quando StApenasCodBarras é True
source/MNF002/UdmMNF002.pas10500SELECT P.ST_CODBARRASAPENAS, ... na carga da PARMFATUR
source/MNF007/UMNF007.pas410if (ST_CODIGOBARRA <> 'P') and (ST_CODBARRASAPENAS = 'S') then CdItemRO := True
source/MNF008/UdmMNF008.pas765P.ST_CODBARRASAPENAS no SELECT da PARMFATUR
source/MNF009/UMNF009.pas204-214SELECT ST_CODIGOBARRA, ST_CODBARRASAPENAS FROM PARMFATUR + regra CdItemRO := True quando ST_CODIGOBARRA <> 'P' e ST_CODBARRASAPENAS = 'S'
source/MPD002/UMPD002.pas742-745if (ST_CODIGOBARRA <> 'S') and (ST_CODBARRASAPENAS = 'S') then CdItemRO := True
source/MPD002/UdmMPD002.pas5752P.ST_CODBARRASAPENAS no SELECT de parâmetros do pedido
source/MPD037/UMPD037.pas148-158SELECT ST_CODIGOBARRA, ST_CODBARRASAPENAS FROM PARMFATUR + CdItemRO := True
source/MCO006/UdmMCO006.pas2109P.ST_CODBARRASAPENAS no SELECT da PARMFATUR

Procedures / Scripts SQL​

ArquivoLinhaDescrição
——Nenhuma referência em Scripts/ — o parâmetro é avaliado exclusivamente no lado Delphi