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
- Acesse o site do GS1 e baixe um modelo de Excel
- 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
- Acesse o link https://cnp.gs1br.org/login e faça o login
- Clique no botão Importar Dados
- Clique então em Testar importação > Produtos – GTIN
- Marque a opção Gerar GTIN para novos produtos, selecione o arquivo do Excel e clique em Iniciar Teste
- Aguarde alguns minutos. Concluído, ele irá mostrar a quantidade de registros válidos
- Se tiver itens faltantes, clique em Ações > Baixar Resultado
- 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
- Acerte as pendências junto com o departamento de Compras, e realize um novo teste de importação
- Verifique o resultado do teste
- Se todos os itens estiverem válidos, clique em Ações > Iniciar importação
- Aguarde alguns minutos
- Após importar, clique em Ações > Baixar resultado
- Verifique se está tudo ok
Preparando arquivo para importar no Protheus
- Copie as colunas GTIN e Link da Imagem e cole em novo arquivo do Excel
- Se vier sujeiras de colunas, exclua e deixe apenas as duas nesse novo arquivo do Excel
- Copie os links e cole no notepad / notepad++
- 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)
- 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)
- No Excel, clique em Arquivo > Salvar Como, escolha o tipo CSV separado por vírgulas e salve em alguma pasta
- Se você quiser testar, abra o arquivo pelo bloco de notas, e veja se a formatação e conteúdo estão ok
Importando no Protheus
- 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
- Execute a função customizada
- Será exibido uma tela para selecionar o arquivo CSV, selecione e prossiga
- Ao finalizar, irá mostrar uma mensagem dizendo que gerou um arquivo de log
- Abra o arquivo de log, e terá uma relação de todos os produtos e os respectivos códigos de barra importados
Bom pessoal, por hoje é só.
Abraços e até a próxima.