Impressão código de barras

Para impressão de etiquetas utilizando a procedure e o layout em Zebra Designer, devem ser seguidas algumas orientações:

  • O layout desenvolvido no Zebra Designer deve ser um campo código de barras EAN 13 com dados fixos, com um código informado conforme exemplo abaixo ‘000000000000’ (12 números).

Obs.: O Zebra Designer gera automaticamente o dígito verificador para o número informado.

../../_images/img0156.png
  • Após gerar o arquivo PRN, deve-se editá-lo manualmente via Bloco de Notas, substituindo o valor fixo informado (ex. ‘000000000000’) pelo campo que exibirá a informação durante a execução da procedure, por exemplo:

-- Retorna o resultado
SELECT
    T0.[ItemCode]     AS '[ItemCode]',     -- código do item
    T0.[DocEntry]     AS '[DocEntry]',
    T0.[DScription]   AS '[Dscription]',   -- descrição
    T0.[Quantity]     AS '[Quantity]',     -- quantidade
    T0.FrgName        AS '[FrgName]',      -- Nome Estrangeiro
    T0.[SWW]          AS '[SWW]',
    CONVERT(NVARCHAR, T0.[ExpDate], 103) AS '[ExpDate]',
    CONVERT(NVARCHAR, T0.[MnfDate], 103)  AS '[MnfDate]',
    T0.[DistNumber]   AS '[DistNumber]',   -- Lote
    T0.[CodeBars]     AS '[CodeBar]',
    T0.[DistNumber]   AS '[CodeBarLote]',
    @sQuant           AS '[Quant]'
FROM @EtiqTemp

Trecho do arquivo PRN:

  • Antes:

B44,504,0,E30,7,14,70,B,”0000000000000”

B48,376,0,E30,7,14,70,B,”7777777777772” P1

  • Depois:

B44,504,0,E30,7,14,70,B,”[CodeBar]”

B48,376,0,E30,7,14,70,B,”[CodeBarLote]” P1

  • Para realizar o teste de impressão, devemos nos atentar para os seguintes detalhes:

O valor no banco de dados que será impresso em formato Código de Barras EAN13 deve conter:

  • 13 números

  • E o 13º número deve ser um Dígito Verificador Válido.

    • Ex. para 000000000000 o dígito verificador é 0.

    • Ex. para 777777777777 o dígito verificador é 2.

    • Ex. para 999999999999 o dígito verificador é 4.

Obs.: Isso é válido para qualquer tipo de Código de Barras que imprima somente números. Os valores devem ser informados no padrão exigido, se EAN 13 (13 números), EAN 14 (14 números), etc.

Isso parece ser óbvio, mas nos momentos dos testes, caso o valor informado no SAP não atenda ao padrão para impressão em EAN 13, por exemplo, o próprio driver (Zebra) validará:

  • Se informado valor com menos de 13 números, o campo não será impresso na etiqueta.

  • Se informado 13 números, mas o dígito verificador é inválido, a etiqueta será impressa com o valor [INVALID].

Obs.: Nenhum erro é exibido em tela, nem gravado em log, pois é uma tratativa independente do BR One ou SAP.

No exemplo utilizado acima foi exibida uma procedure, porém, para uma Function, o processo seria idêntico, exceto o tópico Impressão código de barras (EAN13 / DUN14, ETC). Para maiores detalhes da impressão, verificar o tópico Realização da impressão.

A origem dos dados deve ser escolhida conforme foi criado e executado no banco de dados.

../../_images/img0256.png

Caso seja selecionada a opção View, ao adicionar ou atualizar o registro, será exibida a seguinte mensagem:

Erro

BR One :: Opção ‘View’ não disponível.

Caso não seja selecionado nenhum tipo de origem dos dados, ao adicionar ou atualizar o registro, será exibida a seguinte mensagem:

Erro

BR One :: Tipo da origem dos dados não preenchido.

Na coluna Impressora da aba Impressoras, que é habilitada somente quando o tipo do layout for Etiqueta, o usuário deverá informar qual hardware será responsável pela impressão das etiquetas.

Esta impressora deve estar compartilhada na rede e instalada na máquina onde está sendo feita a configuração e também deve ficar compartilhada nesta máquina. Caso não atenda estes requisitos, não será exibida na lista e, portanto, não será possível utilizá-la.

../../_images/img0349.png

Caso seja um ambiente VPN, deve ser mapeada a impressora via prompt de comando Net Use com o caminho que aparece no campo Impressora. Exemplo: net use \ip-192-168-1-142.sa-east-1.compute.internalZebra02.

../../_images/img0438.png ../../_images/img052.jpg

E deve ser instalada a impressora via Windows, acessando a máquina pelo caminho compartilhado. Exemplo: \ip-192-168-1-142.sa-east-1.compute.internalZebra02. E Instalado a impressora dando dois cliques em seu ícone.

../../_images/img061.jpg

Também deve ser alterado o arquivo HOSTS para resolver o DNS. Exemplo: ip-192-168-1-142.sa-east-1.compute.internal** para o endereço IP **192.168.1.142.

../../_images/img071.jpg

Na coluna Marca, o usuário deverá informar a marca do hardware.

../../_images/img0830.png

Caso o usuário tente adicionar/atualizar o registro sem nenhuma impressora, será exibida a seguinte mensagem:

Erro

BR One :: Adicione pelo menos uma impressora na aba ‘Impressoras’.

Após clicar em Adicionar/Atualizar, é possível definir quais usuários possuem autorização para realizar o processo. Basta dar duplo clique na coluna # na linha da impressora desejada.

../../_images/img0928.png

Feito isso, um novo formulário será exibido onde serão informados os usuários que terão permissão para imprimir.

../../_images/img1025.png

Através do CFL na coluna Usuário, é possível adicionar todos os usuários que terão permissões para utilizar a configuração de impressão criada.

../../_images/img1126.png

Lembrando que em processos customizados, serão informadas apenas as impressoras e seus respectivos tipos e os usuários que possuem permissão para realizar a impressão.

Para configurações de impressão criadas manualmente por um usuário (identificador maior que 500), ainda é possível configurar a aba Form. padrão.

../../_images/img1225.png

Nesta aba será possível definir quais os campos serão exibidos ao usuário para solicitar os dados que serão utilizados como base para busca de dados para ser impresso na etiqueta. Na coluna Descrição parâmetro, o usuário deverá preencher com a descrição que ele desejar que apareça no rótulo do formulário de impressão de etiqueta. Este campo é obrigatório, caso seja preenchida outras colunas da linha (Tipo parâmetro e/ou Cód. objeto CFL).

../../_images/img1323.png

Na coluna Tipo parâmetro, o usuário deverá escolher qual é o tipo do parâmetro que ele deseja atribuir. Este campo além de obrigatório, caso seja preenchido outras colunas da linha, também deverá ser criado com o mesmo tipo que foi criado na Procedure ou Function (que foi configurada no campo Origem dos dados no cabeçalho).

../../_images/img1423.png

Também é permitido adicionar um tipo para consulta SQL. Para essa opção, o campo Cód. objeto CFL ficará bloqueado e o campo Nome da consulta SQL será habilitado para que seja selecionada uma consulta. Somente serão listadas as consultas salvas para a categoria BrOne-IMPETQ.

Obs.: A categoria BrOne-IMPETQ será criada automaticamente.

../../_images/img1519.png

Para verificar a categoria e suas consultas, acesse a tela Administrador de consultas, menu Ferramentas > Consultas > Administrador de consultas.

../../_images/img1616.png

Para criar consultas, acesse a tela de gerador de consultas, menu Ferramentas > Consultas > Gerador de consultas. Ao gerar novas consultas, salve para a categoria BrOne-IMPETQ para que seja possível selecioná-la na tela de configurações de impressão.

  • Para criação das consultas alguns padrões devem ser seguidos:

    • Todos os campos devem estar entre colchetes ‘[ ]’.
      • Exemplo: SELECT T0.[CardCode], T0.[CardName] FROM OCRD T0.

    • Sempre após uma Função deve ser inserido um “Apelido” para o campo.
      • Exemplo: SELECT ISNULL(T0.[CardName], ‘’) AS ‘Nome’ FROM OCRD T0;

    • Para a cláusula WHERE, quando haver mais de uma condição, é recomendado não se utilizar parênteses para separar as condições, porém se for utilizado, os campos que estiverem entre parênteses devem ser configurados como obrigatórios.
      • Exemplo: SELECT T0.[CardName] FROM OCRD T0 WHERE (T0.[CardType] = %[1]% AND T0.[CardCode] = %[2]%) OR T0.[CardName] = %[3]%.

      • Conforme destacado na query acima os campos T0.[CardType] e T0.[CardCode] devem ser configurados como obrigatórios na tela Configurações de impressão.

É possível criar consultas SQL que recebam parâmetros na cláusula WHERE. Para isso deve ser seguido o seguinte padrão na criação:

Na cláusula WHERE da query criada deverá ser utilizada a seguinte sintaxe: %[X]%, onde X é a linha da posição do parâmetro nas configurações de impressão (formulário padrão).

Exemplo: WHERE [ItemCode] = %[1]% AND [DocEntry] = %[2]%. Onde nas configurações de impressão a aba Form. padrão esteja com as linhas: Cód. do item na linha 1 e Nº do documento na linha 2.

../../_images/img1715.png

Os campos do tipo Consulta SQL, serão CFL que listarão o resultado da query selecionada no campo Nome da consulta SQL. Porém caso haja parâmetros criados como obrigatórios, como no exemplo acima está criado o Cód do item, se não forem informados será exibida uma mensagem de erro e nenhum resultado será mostrado no CFL, mais detalhes no tópico Realização da impressão.

Caso o usuário tente adicionar/atualizar o registro sem preencher a coluna Descrição parâmetro, será exibida a seguinte mensagem:

Erro

BR One :: Preencha a descrição do parâmetro na linha X da aba ‘Form. padrão’.

Caso o usuário tente adicionar/atualizar o registro sem preencher a coluna Tipo parâmetro, será exibida a seguinte mensagem:

Erro

BR One :: Preencha o tipo do parâmetro na linha X da aba ‘Form. padrão’.

Na coluna Cód. Objeto CFL, o usuário poderá escolher um objeto CFL (Choose From List) para vincular com o campo a ser criado no formulário de impressão de etiquetas. Este campo é opcional, pois nem todos os campos necessitam ser vinculados com um CFL, como por exemplo, um campo de quantidade.

../../_images/img1817.png

Para os parâmetros que são obrigatórios, deverá ser ativado o flag da coluna Obrigatório, caso contrário, o mesmo será opcional na hora da impressão/visualização.

../../_images/img1916.png

O usuário deve se atentar para que a Procedure ou Function que foi configurada no cabeçalho esteja preparada para receber o valor vazio no campo opcional (flag Obrigatório desmarcado), pois caso ele seja um parâmetro no script crucial, o resultado gerado não será o esperado. Por exemplo, uma configuração onde o parâmetro @sItemCode é opcional, e a Procedure ou Function realize um filtro com este parâmetro, como no exemplo abaixo:

SELECT
    T0.[ItemCode] AS '[ITEMCODE]',
    T0.[ItemName] AS '[ITEMNAME]',
    T0.[OnHand]   AS '[ESTOQUE]'
FROM [OITM] T0
WHERE T0.[ItemCode] = @sItemCode

Caso o usuário não preencha o campo referente ao parâmetro @sItemCode, será considerado o código nulo:

SELECT
    T0.[ItemCode] AS '[ITEMCODE]',
    T0.[ItemName] AS '[ITEMNAME]',
    T0.[OnHand]   AS '[ESTOQUE]'
FROM [OITM] T0
WHERE T0.[ItemCode] = ''

Logo, não encontrará nenhum resultado, e não possuirá dados para ser impresso. Caso o usuário queira remover uma configuração de impressão, basta clicar com o botão direito e na opção Remover.

../../_images/img2015.png

A seguinte mensagem de confirmação aparecerá:

../../_images/img2113.png

Nota

BR One :: Remoção é irreversível. Continuar?

Basta clicar em Sim para o registro ser removido.