Neste artigo veremos sobre como importar dados de outros sistemas. Porém, antes de mais nada é interessante destacar que este artigo não é destinado a leigos, é necessário que você tenha um conhecimento mínimo para não ficar perdido no conteúdo. Nosso objetivo é ensinar a manipular um arquivo csv gerado por outro sistema para que ele fique num padrão que possa ser lido pelo nosso. Procurei usar uma linguagem simples e mostrar de forma mais visual possível, porém alguns arquivos podem vir num padrão muito diferente, o que torna mais difícil manipular eles, tenha isso em mente ao acompanhar este artigo.
Anteriormente já fizemos um artigo detalhando como exportar e importar dados, disponível aqui: https://soriodev.com.br/ajuda/sorges-copiando-clonando-exportando-e-importando-cadastros/
Porém este artigo mostrava apenas as funções dentro de nosso sistema. Embora vamos usar a mesma função, agora veremos como manipular este arquivo para que nosso sistema consiga importar ele. Isso porque, se o arquivo foi gerado por outro sistema, é muito improvável que o nosso consiga interpretá-lo, mesmo que o formato seja igual.
O sistema trabalha com os formatos xml e csv, porém o xml é mais complexo de trabalhar. Mesmo um usuário experiente terá dificuldade em editar um xml e mudar milhares de registros para adaptar ao padrão esperado por nosso sistema. Porém o csv é bem mais fácil, por ser apenas um arquivo de texto.
Para começarmos, vamos entender o formato:
Na imagem acima estou usando o próprio bloco de notas do Windows para criar o arquivo. O conteúdo do arquivo é este:
titulo_coluna_1;titulo_coluna_2;titulo_coluna_3
valor coluna 1 linha 1;valor coluna 2 linha 1;valor coluna 3 linha 1
valor coluna 1 linha 2;valor coluna 2 linha 2;valor coluna 3 linha 2
valor coluna 1 linha 3;valor coluna 2 linha 3;valor coluna 3 linha 3
Na primeira linha nós temos os títulos, e a partir da segunda temos os registros, ou cadastros se preferir. Para separar os campos nós usamos o ponto e vírgula. Logo temos:
titulo;titulo;titulo
valor;valor;valor
valor;valor;valor
valor;valor;valor
Acho que ficou mais fácil de entender. Encare como se fosse uma planilha, onde cada coluna é separada por ponto e vírgula, a primeira linha são os títulos ou nome de campos, e as demais são as linhas da planilha. O número de colunas tem que coincidir, ou seja, você não pode ter uma linha com 4 colunas, outra com 2, outra com 5, todas tem que ter o mesmo número de colunas, separadas por ponto e vírgula.
Se você abrir aquela primeira planilha que fizemos num editor de planilhar ele deve conseguir importar ela. Vamos usar em nosso exemplo o Libre Office, mas você pode usar seu editor sem problemas, e caso não possua um recomendamos este, por ser open source:
Veja que o arquivo aberto na imagem acima realmente “virou” uma planilha, ou seja, a formatação dele está correta. Porém, aquele é um exemplo bem bobo, vamos usar algo mais realista, veja esta imagem:
Nela temos uma planilha de produtos, com as mesmas 3 colunas e 4 linhas:
código;nome;preço
9901;produto teste 1;5,68
9902;produto teste 2;7,89
9903;produto teste 3;11,5
Também dá para abrir ela no editor de planilhas, mas talvez você precise de uma atenção especial, pois os arquivos csv na verdade podem usar outros separadores além do ponto e vírgula, como a própria vírgula, por exemplo. Veja a imagem abaixo:
Como o preço tem vírgula deu para ver que os centavos acabaram criando uma quarta coluna, mas o próprio Libre Office permitiu ajustar isso, desmarcando a vírgula, para ele não considerar ela:
Aí abriu sem problemas:
Porém, até aqui estamos apenas “brincando” com o arquivo, para você entender como ele é, e que é simples de manipular. Obviamente você vai obter este arquivo de outro sistema, então não vai precisar criar ele do zero como eu fiz, mas provavelmente vai precisar ajustar algumas coisas. A primeira delas é o título das colunas:
O caso é que nosso sistema não sabe o que cada coluna representa. Por mais que para nós seja óbvio que se trata do código, do nome e do preço, nosso sistema não é tão inteligente assim para entender isso. O sistema tem vários preços, ele não saberia qual deles é mesmo que tentasse interpretar. É mais seguro nós instruirmos corretamente o sistema, o que é um trabalho bem fácil. Para isso vamos ajustar a primeira linha, e nela vamos trocar os textos pelos nomes reais dos campos que temos no sistema.
Naturalmente, você precisa saber quais são estes “nomes reais”, e para isso pode entrar no módulo correspondente, sendo que em nosso caso é o de produtos. Aí clica em MAIS no canto superior esquerdo da tela, e em GERAR RELATÓRIO COM DOCUMENTAÇÃO DOS CAMPOS. Veja a imagem:
O relatório gerado ficará assim:
O que interessa para nós desse relatório é a coluna CAMPO e a coluna NOME INTERNO. A coluna campo mostra o nome do campo que você vê na tela de cadastro do produto, quando está incluindo ou alterando ele, assim você consegue identificar cada um. Já a coluna nome interno tem a informação que precisamos, que é o nome real do campo, o nome dele no banco de dados.
Em nosso exemplo, queremos o código de barras, o nome e o preço (valor 1). Se procurar na lista vai achar algo assim:
CAMPO | NOME INTERNO |
Código de Barras | PRO_CODBARRAS |
Nome ou Descrição | PRO_DESCRICAO |
Valor 1 | PRO_VAL_VENDA1 |
Assim fazemos a substituição no arquivo. Trocamos o “código” por PRO_CODBARRAS, o “nome” por PRO_DESCRICAO, e o “preço” por PRO_VAL_VENDA1. Veja como fica:
Após salvar este arquivo, vamos importar ele. Voltando ao controle de produtos, clique em MAIS de novo, aponte para EXPORTAR/IMPORTAR, e clique em IMPORTAR REGISTROS DE ARQUIVO CSV.
Ele vai pedir que selecione a chave primária, para evitar duplicidade. O campo selecionado será usado para que não fiquem registros duplicados no cadastro. Como só tem código, nome e preço, creio que o código é o mais interessante. Veja:
Confirme e o processo se iniciará. A depender do tamanho do arquivo, quantidade de registros, e do desempenho do próprio computador, ele pode ser rápido ou demorado. Ao final você verá uma tela indicando quantos registros foram alterados e incluídos.
Após a importação podemos pesquisar e ver os produtos que foram importados:
Podem também ocorrer erros no processamento, e não é impossível até que algum destes erros trave o processo. Para tentar evitar isso, vamos indicar mais alguns detalhes que você precisa ter atenção:
PRIMEIRO: alguns arquivos vem com aspas delimitando os campos. Veja um exemplo:
"código";"nome";"preço"
"9901";"produto teste 1";"5,68"
"9902";"produto teste 2";"7,89"
"9903";"produto teste 3";"11,5"
Nosso sistema até trata isso, mas recomendamos retirar todas estas aspas se puder, para evitar erros e tornar o processo mais rápido. Obviamente fazer isso manualmente num arquivo com 7 mil produtos seria impossível, porém o próprio bloco de notas do Windows facilita isso. Clique em EDITAR, depois em SUBSTITUIR, no primeiro campo coloque aspa ( ” ), o segundo deixa em branco, pois queremos tirar ela, e clica em SUBSTITUIR TODOS.
SEGUNDO: outro caso chato é quando os valores vem no padrão americano, com pontos separando casas decimais. Veja um exemplo:
código;nome;preço
9901;produto teste 1;5.68
9902;produto teste 2;7.89
9903;produto teste 3;11.5
Pode usar a mesma lógica aqui, mas agora substitui o ponto ( . ) pela vírgula ( , ).
TERCEIRO: é menos comum, mas como disse antes, existem vários separadores de colunas que podem ser usados num arquivo csv. Não há limites quanto a isso, mas um exemplo mais comum seria o arquivo estar usando a vírgula como separador. Veja um exemplo:
código,nome,preço
9901,produto teste 1,5.68
9902,produto teste 2,7.89
9903,produto teste 3,11.5
Ou assim:
"código","nome","preço"
"9901","produto teste 1","5,68"
"9902","produto teste 2","7,89"
"9903","produto teste 3","11,5"
No primeiro exemplo acima os campos são separados por vírgula, e o preço do produto está no padrão americano, para evitar erro com a vírgula. Então primeiro você precisaria substituir a vírgula ( , ) por ponto e vírgula ( ; ) e depois substituir o ponto ( . ) por vírgula ( , ) para ajeitar os preços.
Já no segundo exemplo os preços usam vírgula, porém os campos são delimitados por aspas. Não vou mentir, dependendo de como está o arquivo será bem difícil resolver isso. Uma possibilidade seria tentar trocar o texto “,” por ;, depois trocar as aspas simples que sobraram por nenhum texto, para remover elas, assim como foi no primeiro caso acima. Porém, dependendo do caso pode ser mais fácil você abrir o arquivo num editor de planilhas e salvar ele novamente, usando alguma configuração do editor que permite personalizar o salvamento, assim você poderia escolher o separador e remover as aspas, tudo de uma vez.