Como usar e configurar códigos de barra GTIN no Protheus

No artigo de hoje vou mostrar como usar o código de barras GTIN no Protheus, e como fazer a importação de informações para atualizar no Protheus.

O código de barras GTIN (EAN 13), é o código oficial de barras usado em produtos, e tem que ser registrado pelo site do Cadastro Nacional de Produtos (GS1).

Ao registrar os produtos, é retornado um código de barras, e você pode cadastrar essa informação nos campos B1_CODGTIN e B5_2CODBAR.

Com isso, o padrão do sistema como NFESEFAZ já vai entender o código de barras e inserir essa informação no XML.

Abaixo irei demonstrar como cadastrar os produtos no GS1, e uma rotina que desenvolvi para importar a informação via AdvPL.

Montando o Excel para Importação no GTIN

  1. Acesse o site do GS1 e baixe um modelo de Excel
  2. Preencha as colunas:
  • Descrição do Produto, copie a informação do B1_DESC
  • Status Gtin, insira o texto Ativo
  • Tipo da Imagem, insira o texto Foto do Produto
  • Link da Imagem, coloque a URL do Produto, aqui é muito importante, deixe uma URL onde seja possível identificar o código do produto, por exemplo, site.com/0001.png
  • Na coluna Marca, coloque o nome do fornecedor caso você seja distribuidor, ou coloque o nome da empresa caso seja o produtor
  • Idioma, insira o texto Português
  • País, insira o texto Brasil
  • Peso Bruto, copie a informação do B1_PESBRU
  • UN Medida Peso Bruto, copie a informação do B1_UM
  • Conteúdo Líquido, copie a informação do B1_PESO
  • UM Medida Cont. Liquido, copie a informação do B1_UM
  • NCM, copie a informação do B1_POSIPI
  • CEST, copie a informação do B1_CEST
  • GPC – Glassificação Global do Produto, esse você precisa conferir com o contador da empresa ou com o pessoal do GS1 pois pode variar, um exemplo, é o 77000000

Importando a planilha no site do GS1

  1. Acesse o link https://cnp.gs1br.org/login e faça o login
  2. Clique no botão Importar Dados

Botão de Importar Dados

  1. Clique então em Testar importação > Produtos – GTIN

Testar Importação GTIN

  1. Marque a opção Gerar GTIN para novos produtos, selecione o arquivo do Excel e clique em Iniciar Teste

Envio de Teste

  1. Aguarde alguns minutos. Concluído, ele irá mostrar a quantidade de registros válidos

Resultado de itens válidos

  1. Se tiver itens faltantes, clique em Ações > Baixar Resultado

Baixando o resultado

  1. Na última coluna, ele vai mostrar a informação do erro, geralmente é a falta de imagem do produto, ou peso líquido difere do peso bruto

Resultado na última coluna

  1. Acerte as pendências junto com o departamento de Compras, e realize um novo teste de importação
  2. Verifique o resultado do teste

Resultado após ajustes

  1. Se todos os itens estiverem válidos, clique em Ações > Iniciar importação

Botão de iniciar importação

  1. Aguarde alguns minutos
  2. Após importar, clique em Ações > Baixar resultado

Botão de baixar resultado

  1. Verifique se está tudo ok

Preparando arquivo para importar no Protheus

  1. Copie as colunas GTIN e Link da Imagem e cole em novo arquivo do Excel

Resultado da planilha

  1. Se vier sujeiras de colunas, exclua e deixe apenas as duas nesse novo arquivo do Excel

Deixando o código gtin e o link da imagem

  1. Copie os links e cole no notepad / notepad++
  2. Substitua o texto do site.com e a extensão .jpg para não terem nenhum conteúdo (se for o caso da empresa ai, adicione zeros a esquerda)

Removendo o site, deixando apenas o código do produto

  1. Copie esse texto para a coluna desse Excel, de forma que fique apenas o código GTIN e o código do Protheus (com os zeros a esquerda, caso não tenha zero a esquerda, veja a formatação do tipo da coluna se está como texto)

Resultado de como fica o Excel

  1. No Excel, clique em Arquivo > Salvar Como, escolha o tipo CSV separado por vírgulas e salve em alguma pasta

Salvando como CSV

  1. Se você quiser testar, abra o arquivo pelo bloco de notas, e veja se a formatação e conteúdo estão ok

Abrindo pelo Notepad++

Importando no Protheus

  1. Compile o fonte abaixo, e coloque no Menu do Protheus
//Bibliotecas
#Include "Totvs.ch"

#DEFINE POS_GTIN 0001
#DEFINE POS_PROD 0002

/*/{Protheus.doc} zGTIN
Funcao para importar os codigos do GTIN conforme csv
@author Atilio
@since 14/11/2019
@version 1.0
@type function
/*/

User Function zGTIN()
	Local aArea    := GetArea()
	Local cTmp := GetTempPath()
	Local cArquivo := "C:\TOTVS\GTIN\" + Space(100)

	//Mostra a tela para selecionar CSV
	cArquivo:= tFileDialog( "CSV files (*.csv) ",;
        'Selecao de Arquivos',, cTmp, .F., )

	//Se tiver selecionado o arquivo
	If ! Empty(cArquivo)
		Processa({|| GeraDados(cArquivo)}, 'Processando...')
	EndIf
	
	RestArea(aArea)
Return

Static Function GeraDados(cArquivo)
	Local nAtual       := 0
	Local nTotal       := 0
	Local cDiretorio   := ""
	Local cArqNew      := ""
	Local cConteudo    := ""
	Local cLinAux      := ""
	Local cArqPuro
	Local nCont        := 0
	
	//Se a extensão for csv e for um arquivo válido
	If ! Empty(cArquivo) .And. ".csv" $ cArquivo .And. File(cArquivo)
		
		cArquivo   := Alltrim(cArquivo)
		cDiretorio := SubStr(cArquivo, 1, RAt('\', cArquivo))
		cArqPuro   := StrTran(cArquivo, cDiretorio, "")
		cArqPuro   := StrTran(cArqPuro, ".csv", "")
		cArqNew    := "importado_" + cArqPuro + "_" + dToS(Date()) + "_" + StrTran(Time(), ':', '-') + ".txt"
		
		DbSelectArea("SB1")
		SB1->(DbSetOrder(1)) //B1_FILIAL + B1_COD
		DbSelectArea('SB5')
		SB5->(DbSetOrder(1)) //B5_FILIAL + B5_COD
		
		//Abre o arquivo e pega o total de linhas
		oFile := FWFileReader():New(cArquivo)
		aLinhas := oFile:GetAllLines()
		nTotal := Len(aLinhas)
		
		//Método GoTop não funciona, deve fechar e abrir novamente o arquivo
		oFile:Close()
		oFile := FWFileReader():New(cArquivo)
		oFile:Open()
		
		//Percorre todas as linhas
		While (oFile:HasLine())
			//Incrementa a régua
			nAtual++
			IncProc("Analisando linha " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + "...")
			
			//Lê a linha atual
			cLinAux := oFile:GetLine()
			
			//Quebra a linha em um array, e separa o que é gtin e o que é código do produto
			aLinAux := StrTokArr(cLinAux, ";")
			cGTIN := aLinAux[POS_GTIN]
			cProd := Upper(aLinAux[POS_PROD])
			
			//Se encontrar o produto
			If SB1->(DbSeek(FWxFilial('SB1') + cProd))
				cConteudo += "Produto - " + cProd + ', cod.barra - ' + cGTIN + CRLF
				
				RecLock('SB1', .F.)
					SB1->B1_CODGTIN := cGTIN
				SB1->(MsUnlock())
				nCont++

				//Se encontrar o complemento do produto
				If SB5->(DbSeek(FWxFilial('SB5') + SB1->B1_COD))
					RecLock('SB5', .F.)
						B5_2CODBAR := cGTIN
					SB5->(MsUnlock())
				EndIf
			Else
				cConteudo += "Produto nao encontrado! - " + cProd + CRLF
			EndIf
			
		Enddo
		
		//Fecha o arquivo e finaliza o processamento
		oFile:Close()
		
		MemoWrite(cDiretorio + cArqNew, cConteudo)
		
		MsgInfo(cValToChar(nCont) + " produtos processados, arquivo de log gerado: " + cDiretorio + cArqNew, "Atencao")
	
	Else
	
		MsgStop("Arquivo invalido!", "Atencao")
		
	Endif
	
Return
  1. Execute a função customizada
  2. Será exibido uma tela para selecionar o arquivo CSV, selecione e prossiga

Importando no Protheus

  1. Ao finalizar, irá mostrar uma mensagem dizendo que gerou um arquivo de log

Mensagem de sucesso ao finalizar a importação

  1. Abra o arquivo de log, e terá uma relação de todos os produtos e os respectivos códigos de barra importados

Mensagens de log após importar

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta