Pular para o conteúdo principal

Parâmetro de Código de Barras de Balança

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Ambos → Opção 1 Tabela: PARMFATUR.ST_CODBARRASBALANCA Valor padrão: N (Não)

Habilita a interpretação de códigos de barras EAN-13 gerados por balança eletrônica (código impresso no ponto de venda após pesagem), em que os próprios dígitos do código carregam o produto e o peso (ou valor total) da mercadoria.

Com o parâmetro ativado ('S'), toda vez que o operador passa o leitor em um código de balança, o ERP reconhece o layout, extrai automaticamente o produto e a quantidade/valor, e lança o item no documento — sem exigir digitação manual do peso.

Telas impactadas​

O parâmetro é lido pela procedure VALIDA_CODIGOBARRA, que é chamada por todos os módulos de lançamento de documento que usam leitor de código de barras. As telas abaixo invocam VALIDA_CODIGOBARRA e, portanto, herdam o comportamento de balança automaticamente:

MóduloCódigoDescriçãoContexto
PDV / Cupom FiscalMNF017Frente de caixa / cupom fiscalLeitura direta de código de balança na venda
Pedido de VendaMPD002Pedidos de vendaLeitura de código de balança no pedido
Pedido de Venda (Outro Tipo)MPD018Orçamento/Pedido alternativoLeitura de código de balança
Pedido MobileMPD056Pedido via mobileLeitura de código de balança
Pedido (Carregamento)MPD053Orçamento carregamentoLeitura de código de balança
Devolução de PedidoMPD037Devolução de pedidosLeitura de código de balança
Orçamento de CompraMPD092Orçamento de compraLeitura de código de balança
Pedido RápidoMPD091Pedido rápidoLeitura de código de balança
PedidoMPD084PedidoLeitura de código de balança
PedidoMPD031PedidoLeitura de código de balança
Pedido SimplificadoMPD097Pedido simplificadoLeitura de código de balança
Pedido Venda SimplesMPD001Pedido venda simplesLeitura de código de balança
Nota Fiscal EntradaMNF001NF de entradaLeitura de código de balança
Nota Fiscal SaídaMNF002Emissão de NF de saídaLeitura de código de balança
NF Devolução/TrocaMNF009Troca de produtosLeitura de código de balança
NF ReciboMNF026Nota reciboLeitura de código de balança
NF ManifestoMNF035Manifesto/NFLeitura de código de balança
Ordem de ServiçoTOF007OSLeitura de código de balança
Balcão / PDV TouchTPO001Balcão PDV touchLeitura de código de balança
Transferência EntradaMTR004Transferência entrada (XML)Leitura de código de balança
Recap ProdutojRecapadoraProduto recapLeitura de código de balança
Recap MovimentoMRE005RecapLeitura de código de balança
Recap NFMRC045Recap NFLeitura de código de balança
Equipamento RecapMEQ002Equipamento recapLeitura de código de balança
EquipamentoMEQ008EquipamentoLeitura de código de balança
EquipamentoMEQ013EquipamentoLeitura de código de balança
EquipamentoMEQ014EquipamentoLeitura de código de balança
EquipamentoMEQ015EquipamentoLeitura de código de balança
EquipamentoMEQ058EquipamentoLeitura de código de balança
EquipamentoMEQ072EquipamentoLeitura de código de balança
Config NFCNF001Configuração NFLeitura de código de balança
Config EquipamentoCEQ001Configuração EquipamentoLeitura de código de balança

Nota: A tela MNF017 também carrega explicitamente o valor de ST_CODBARRASBALANCA para uma variável local (iST_CODBARRASBALANCA) no UMNF017.pas:189, mas o consumo real da lógica de balança acontece exclusivamente dentro da procedure VALIDA_CODIGOBARRA.

Telas que apenas replicam o parâmetro entre empresas​

MóduloCódigoUso
Replicar Parâmetros (RCA006)RCA006INSERT/UPDATE de PARMFATUR de uma empresa para outra (inclui o campo ST_CODBARRASBALANCA)
Copiar Parâmetros (CPD009)CPD009INSERT/UPDATE de PARMFATUR na cópia de parâmetros de empresa (inclui o campo)

Procedures impactadas​

ProcedureArquivoDescrição
VALIDA_CODIGOBARRAScripts/VALIDA_CODIGOBARRA.sqlLê PARMFATUR.ST_CODBARRASBALANCA e decide se interpreta o código de barras recebido como código de balança (EAN com prefixo '2' de 13 dígitos ou com prefixo '8'/'9' de 14 dígitos)

Trecho relevante da procedure​

-- VALIDA_CODIGOBARRA.sql (linhas 44-47)
SELECT P.ST_CODBARRASBALANCA, P.CD_TABPRECO, P.ST_VALIDAITEMEMPRESA, P.ST_CODIGOBARRACAIXA
FROM PARMFATUR P
WHERE P.CD_EMPRESA = :I_CD_EMPRESA
INTO :V_ST_CODIGOBARRABALANCA, :V_TABPRECO, :V_ST_VALIDAITEMEMPRESA, :V_ST_CODIGOBARRACAIXA;
-- VALIDA_CODIGOBARRA.sql (linha 65) - Padrão EAN-13 iniciando com '2'
IF ( (V_ST_CODIGOBARRABALANCA = 'S')
AND (SUBSTRING(I_CD_CODIGOBARRA FROM 1 FOR 1) = '2')
AND (CHAR_LENGTH(I_CD_CODIGOBARRA) = 13) ) THEN BEGIN
-- ...lê DS_MASCARACODIGO da BALANCA vinculada ao PARMUSUARIO do operador,
-- aplica macros C (código), P/D (parte inteira/decimal do total),
-- Q/M (parte inteira/decimal do peso) para extrair CD_ITEM e total/peso
-- VALIDA_CODIGOBARRA.sql (linha 156) - Padrão alternativo "Joacir Mille Joias"
-- código de 14 dígitos começando com '8' ou '9'
IF ( (V_ST_CODIGOBARRABALANCA = 'S')
AND (SUBSTRING(I_CD_CODIGOBARRA FROM 1 FOR 1) IN ('9','8'))
AND (CHAR_LENGTH(I_CD_CODIGOBARRA) = 14) ) THEN BEGIN
V_CODIGO = TRIM(SUBSTRING(TRIM(I_CD_CODIGOBARRA) FROM 1 FOR 10));
V_PESO = TRIM(SUBSTRING(TRIM(I_CD_CODIGOBARRA) FROM 11 FOR 3) || '.' ||
SUBSTRING(TRIM(I_CD_CODIGOBARRA) FROM 14 FOR 1));

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_CODBARRASBALANCAHabilita a interpretação de códigos EAN de balança ('S'/'N')
PARMUSUARIO.CD_BALANCAVínculo do operador atual a uma balança (usado dentro de VALIDA_CODIGOBARRA para localizar a máscara correta)
BALANCA.DS_MASCARACODIGOMáscara do layout EAN gerado pela balança — define onde estão o código, peso e valor dentro dos 13 dígitos (macros C/P/D/Q/M)
I_CD_CODIGOBARRACódigo de barras lido pelo leitor (entrada da procedure)
O_TP_CODIGOSaída da procedure: 'N' = código normal, 'B' = código de balança
O_CD_ITEMCódigo do produto extraído do código de barras
O_QT_ITEMQuantidade (peso) derivada do código
O_VL_UNITARIO / O_VL_TOTALValor unitário (do produto na tabela de preço) e valor total (calculado a partir do peso/total extraído)

Opções disponíveis​

N - Não (valor padrão)​

O que fazDetalhe
Interpretação de código de balançaDesabilitada
Código EAN com prefixo '2' de 13 dígitosTratado como código de barras normal — o sistema tenta casar o valor integral em ITEM.CD_CODIGOBARRA ou ITEMCODIGOBARRA; se não encontrar, retorna "produto não localizado"
Código com prefixo '8'/'9' de 14 dígitos (Joacir Mille Joias)Tratado como código normal
Máscara da BALANCANão é consultada
Retorno O_TP_CODIGOSempre 'N' (normal) quando o produto é localizado

Simulação passo a passo​

  1. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Cód. de Barras Balança" = "Não"
  2. Salve os parâmetros (F6)
  3. Abra o PDV (MNF017) ou um pedido (MPD002)
  4. No açougue, o operador pesa uma carne de 1,250 kg a R$ 29,90/kg e a balança imprime o EAN-13 2012345037375 (prefixo '2', código do item "1234", total 037.37, dígito verificador 5)
  5. O operador passa o leitor no código
  6. O sistema procura o código integral 2012345037375 em ITEM.CD_CODIGOBARRA e ITEMCODIGOBARRA — como esse EAN é gerado dinamicamente pela balança, nenhum produto é encontrado
  7. Retorna erro "Produto não localizado"

Resultado esperado: A leitura de código de balança não funciona. O operador precisa digitar manualmente o código do produto e o peso. Este é o valor padrão, adequado para empresas que não usam balança com impressão de etiqueta EAN (a maioria das lojas que não trabalham com produtos vendidos a peso).

Este é o valor padrão ao criar um novo registro no MFA001 (UdmMFA001.pas:472 → 'N').


S - Sim​

O que fazDetalhe
Interpretação de código de balançaHabilitada
Código EAN com prefixo '2' de 13 dígitosInterpretado como código de balança: o sistema lê a máscara BALANCA.DS_MASCARACODIGO vinculada ao operador (via PARMUSUARIO.CD_BALANCA) e decompõe o EAN em código do produto + total/peso
Código sem balança cadastradaUsa layout fixo legado: posições 2–5 são o código do produto, posições 6–12 são o valor total XXXXX.XX
Código com prefixo '8'/'9' de 14 dígitosInterpretado como layout alternativo "Joacir Mille Joias": posições 1–10 são o código de barras do produto (casa com ITEM.CD_CODIGOBARRA) e posições 11–14 são o peso XXX.X
Retorno O_TP_CODIGO'B' (balança) quando a interpretação casa com um produto
Cálculo automáticoVL_TOTAL e QT_ITEM são calculados a partir do peso/total extraído e do preço unitário do produto na tabela de preço

Simulação passo a passo — EAN-13 com prefixo '2'​

  1. Cadastre uma balança em BALANCA com DS_MASCARACODIGO = 'CCCCCCPPPPPDD' (6 posições de código + 5 inteiros de total + 2 decimais de total)
  2. Vincule essa balança ao operador em PARMUSUARIO.CD_BALANCA
  3. Vá em MFA001 → Parâmetros → Ambos → Opção 1 → "Cód. de Barras Balança" = "Sim" → Salve (F6)
  4. Abra o PDV (MNF017)
  5. Operador pesa uma carne de 1,250 kg a R$ 29,90/kg na balança
  6. A balança imprime EAN-13 = 2 001234 03737 5 (prefixo '2' + 001234 código + 03737 = R$ 37,37 + dígito verificador 5)
  7. Operador passa o leitor no PDV
  8. VALIDA_CODIGOBARRA lê ST_CODBARRASBALANCA = 'S', detecta prefixo '2' e 13 dígitos
  9. Consulta BALANCA.DS_MASCARACODIGO do operador logado ('CCCCCCPPPPPDD')
  10. Extrai: V_CODIGO = '001234', V_TOTAL = '037.37'
  11. Busca o produto CD_ITEM = 1234 e o preço na tabela CD_TABPRECO da PARMFATUR
  12. Retorna: O_CD_ITEM = 1234, O_VL_TOTAL = 37,37, O_QT_ITEM = 37,37 / 29,90 = 1,250, O_TP_CODIGO = 'B'
  13. O item é inserido automaticamente no documento com o peso correto

Resultado esperado: O operador apenas passa o leitor no código impresso pela balança — o produto e a quantidade são lançados automaticamente, sem digitação manual.

Simulação passo a passo — sem balança vinculada ao operador​

  1. ST_CODBARRASBALANCA = 'S' mas PARMUSUARIO.CD_BALANCA é NULL para o operador
  2. Leitor recebe EAN-13 = 2 1234 0373700 5 (prefixo '2', layout legado)
  3. A procedure cai no fallback legado (VALIDA_CODIGOBARRA.sql linhas 108-110):
    • V_CODIGO = SUBSTRING(2..5) = '1234'
    • V_TOTAL = SUBSTRING(6..10) || '.' || SUBSTRING(11..12) = '03737.00'
  4. Produto e valor são extraídos e o item é lançado

Resultado esperado: O layout legado é usado, mesmo sem balança cadastrada — mas perde flexibilidade (nenhum peso separado do total).

Simulação passo a passo — Layout "Joacir Mille Joias" (14 dígitos, prefixo '8'/'9')​

  1. ST_CODBARRASBALANCA = 'S'
  2. Cadastre ITEM.CD_CODIGOBARRA = '8012345670' para um produto de joia vendido por peso
  3. Balança imprime código de 14 dígitos: 80123456701253 (posições 1-10 = código, posições 11-14 = peso 125.3 gramas)
  4. Operador passa o leitor
  5. VALIDA_CODIGOBARRA detecta V_ST_CODIGOBARRABALANCA = 'S', prefixo '8' e 14 dígitos
  6. Extrai: V_CODIGO = '8012345670', V_PESO = '125.3'
  7. Busca o produto por ITEM.CD_CODIGOBARRA = '8012345670'
  8. Retorna: produto localizado, O_QT_ITEM = 125,3, O_VL_TOTAL = 125,3 × preço unitário, O_TP_CODIGO = 'B'

Resultado esperado: Usado por joalherias (implementação específica "Joacir Mille Joias" documentada no comentário do código), onde o produto tem código EAN próprio e o peso em gramas é anexado nos últimos 4 dígitos.


Interação com Outros Parâmetros​

ST_CODIGOBARRA (PARMFATUR.ST_CODIGOBARRA)​

AspectoDetalhe
RelaçãoST_CODBARRASBALANCA só tem efeito útil quando o campo de código de barras está visível na tela — ou seja, quando ST_CODIGOBARRA ativa código de barras para o contexto do documento (Pedido/NF/Ambos)
ConsequênciaSe ST_CODIGOBARRA = 'N' no módulo, o operador não tem campo para passar o leitor → balança nunca é acionada, mesmo com ST_CODBARRASBALANCA = 'S'

Veja ST_CODIGOBARRA para detalhes.

ST_CODIGOBARRACAIXA (PARMFATUR.ST_CODIGOBARRACAIXA)​

AspectoDetalhe
RelaçãoLido no mesmo SELECT de VALIDA_CODIGOBARRA (VALIDA_CODIGOBARRA.sql:44)
IndependenteAfeta código de barras de embalagem (caixa master) e não interfere no layout de balança

PARMUSUARIO.CD_BALANCA + BALANCA.DS_MASCARACODIGO​

AspectoDetalhe
RelaçãoQuando ST_CODBARRASBALANCA = 'S' e o código é EAN-13 com prefixo '2', a procedure localiza a balança do operador via PARMUSUARIO → BALANCA e usa DS_MASCARACODIGO para decodificar
FallbackSe o operador não tem balança vinculada, um layout fixo é usado (código nas posições 2–5, total XXXXX.XX nas posições 6–12)

PARAMRECAP.DSMASCARACODIGO (contexto de recapadora)​

AspectoDetalhe
IndependenteNão depende de ST_CODBARRASBALANCA. É um caminho paralelo dentro da mesma VALIDA_CODIGOBARRA para leitura de banda de pneu (prefixo 'X3'), usado em MRE005 e afins

Tabela Comparativa Resumida​

OpçãoCódigo EAN-13 com prefixo '2'Código 14 dígitos '8'/'9'Uso típico
N (padrão)Tratado como código normal (casa integral em ITEM.CD_CODIGOBARRA)Tratado como código normalLojas sem balança com impressão EAN
SInterpretado como código de balança → extrai produto + peso/total pela máscara BALANCA.DS_MASCARACODIGOInterpretado como layout "Joacir Mille Joias" → código nas posições 1-10, peso nas posições 11-14Açougues, mercearias com balança, joalherias por peso

Referências no Código Fonte​

Tela MFA001 (configuração)​

ArquivoLinhaDescrição
source/MFA001/UMFA001.dfm3069-3095Declaração do TwwDBComboBox cmbST_CODBARRASBALANCA com Items = ('Sim'#9'S', 'Não'#9'N'), DataField = 'ST_CODBARRASBALANCA'
source/MFA001/UMFA001.dfm2383-2384Label 'Cód. de Barras Balança' com FocusControl = cmbST_CODBARRASBALANCA
source/MFA001/UMFA001.pas237Declaração do componente cmbST_CODBARRASBALANCA: TwwDBComboBox
source/MFA001/UdmMFA001.pas115Declaração do field tabPARMFATURST_CODBARRASBALANCA: TStringField
source/MFA001/UdmMFA001.pas472Valor padrão no AfterInsert: tabPARMFATURST_CODBARRASBALANCA.AsString := 'N'
source/MFA001/UdmMFA001.dfm1027-1030Definição do field (FieldName = 'ST_CODBARRASBALANCA', Size = 1)
source/MFA001/UdmMFA001.dfm57, 2368, 2520, 2703, 2937SELECT/INSERT/UPDATE/FetchRow do PARMFATUR incluindo o campo

Tela MNF017 (PDV / cupom fiscal)​

ArquivoLinhaDescrição
source/MNF017/UMNF017.pas162Campo P.ST_CODBARRASBALANCA incluído no SELECT de carga de parâmetros da PARMFATUR
source/MNF017/UMNF017.pas189Atribuição dmMNF017.iST_CODBARRASBALANCA := Resultado[15]
source/MNF017/UdmMNF017.pas151Field tabCABECALHOST_CODBARRASBALANCA: TStringField
source/MNF017/UdmMNF017.pas281Declaração da variável pública iST_CODBARRASBALANCA: string
source/MNF017/UdmMNF017.dfm425-428Field ST_CODBARRASBALANCA no dataset de cabeçalho

Telas de replicação de parâmetros​

ArquivoLinhaDescrição
source/RCA006/UdmRCA006.dfm3049, 3115, 3198, 3259SELECT/INSERT/UPDATE/FetchRow do PARMFATUR incluindo ST_CODBARRASBALANCA (replicação entre empresas)
source/CPD009/UdmCPD009.dfm300, 366, 449, 510SELECT/INSERT/UPDATE/FetchRow do PARMFATUR incluindo ST_CODBARRASBALANCA (cópia de parâmetros)

Procedure SQL​

ArquivoLinhaDescrição
Scripts/VALIDA_CODIGOBARRA.sql21Declaração V_ST_CODIGOBARRABALANCA DOM_CHAR1
Scripts/VALIDA_CODIGOBARRA.sql44-47SELECT ST_CODBARRASBALANCA FROM PARMFATUR
Scripts/VALIDA_CODIGOBARRA.sql65IF (V_ST_CODIGOBARRABALANCA = 'S') AND (SUBSTRING ... FROM 1 FOR 1) = '2') AND (CHAR_LENGTH = 13) — ativa decodificação EAN-13 com máscara de balança
Scripts/VALIDA_CODIGOBARRA.sql66-106Leitura de BALANCA.DS_MASCARACODIGO via PARMUSUARIO.CD_BALANCA + aplicação das macros C/P/D/Q/M
Scripts/VALIDA_CODIGOBARRA.sql108-110Fallback sem balança cadastrada: layout fixo CCCC PPPPP DD
Scripts/VALIDA_CODIGOBARRA.sql138Retorno O_TP_CODIGO = 'B' quando o código é de balança
Scripts/VALIDA_CODIGOBARRA.sql156-183Caminho alternativo: prefixo '8'/'9' de 14 dígitos (layout "Joacir Mille Joias")

Módulos que consomem VALIDA_CODIGOBARRA (efeito indireto)​

Os módulos abaixo chamam VALIDA_CODIGOBARRA em seus fluxos de leitura de código de barras e, portanto, passam a reconhecer códigos de balança automaticamente quando ST_CODBARRASBALANCA = 'S':

MNF017, MNF001, MNF002, MNF009, MNF026, MNF035, MPD001, MPD002, MPD018, MPD031, MPD037, MPD053, MPD056, MPD084, MPD091, MPD092, MPD097, MRC045, MRE005, MTR004, TOF007, TPO001, MEQ002, MEQ008, MEQ013, MEQ014, MEQ015, MEQ058, MEQ072, CNF001, CEQ001, jRecapadora/UProdutoRecap.pas, Server/JunsoftWebAPI/.../ItemRepository.java.