Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal, boa tarde.
Tenho aqui na empresa uma solicitação cuja qual eu ainda não tratei.
Preciso trabalhar com vendas de dois bancos de dados. Um desses bancos de dados é de um antigo ERP meu, e o outro BD é do meu ERP atual.
Vamos lá, tenho as seguintes tabelas:
BD antigo (Viasoft):
Tabela: PPESCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)
BD atual (Globus)
Tabela CODCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)
Estou tratando aqui apenas uma das tabelas que tenho, que seriam em torno de 21 tabelas com informações de notas fiscais, vendas, quantidades, valores...
Preciso de uma força para saber qual a melhor maneira de tratar esses dados e unifica-los.
Obrigado comunidade
Maicon, não consigo abrir um qvw com o Sense.
Minha estrutura esta assim:
LOAD
CODCLI ,
RSOCIALCLI as NOME,
NRINSCRICAOCLI,
NFANTASIACLI as FANTASIA
FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd)
where CODCLI = '729';
concatenate (BGM_CLIENTE)
LOAD
CLIENTE ,
NOME,
FANTASIA,
if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI
FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)
where CLIENTE = '8750';
LOAD
CODCLI ,
RSOCIALCLI as NOME,
NRINSCRICAOCLI,
NFANTASIACLI as FANTASIA
FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);
//where CODCLI = '729';
concatenate (BGM_CLIENTE)
LOAD
CLIENTE ,
NOME,
FANTASIA,
if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI
FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)
where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) ) ;
Maicon, tentei de todos os jeitos e a unica maneira que me pareceu ser uma luz foi assim:
LOAD
NRCLI ,
RSOCIALCLI as NOME,
NRINSCRICAOCLI,
NFANTASIACLI as FANTASIA
FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);
concatenate
LOAD
CLIENTE ,
NOME,
FANTASIA,
CPF& '_' &CGC as NRINSCRICAOCLI
FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)
where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) );
Tive que usar essa chave composta, porém na frente do CNPJ ou CPF do cliente ficou com _.
Estou procurando aqui algum material mais específico e fácil de entender essa questão de cruzar e unir tabelas e campos.
Amigo o mesmo if que tem no where faça para o campo CPF e CG no lugar que concatena os campos.
Então Maicon, mas se faço dessa forma não funciona.
Script:
LOAD
NRCLI ,
RSOCIALCLI as NOME,
NRINSCRICAOCLI,
NFANTASIACLI as FANTASIA
FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);
concatenate
LOAD
CLIENTE ,
NOME,
FANTASIA,
if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI
FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)
where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) );
Resultado:
Veja que ao fazer a seleção de um cliente pelo nome perdemos o nrinscricaocli, tendo um '?' no lugar.
To quase sem cabelo já.. rsrs.
Amigão, então seu campo não esta como null, tem que fazer algo assim if(isnull(CGC) or CGC = '',CPF,CGC)
Isso que esta acontecendo, campos não estão nulos.
Maicon, se o cliente for PF vai ter dados no campo CPF e o campo CNPJ vai ser vazio (null), se for PJ vai ter dados no campo CNPJ e fica null o campo CPF. Entendeu?
Olha o resultado da maneira que falou:
To achando que terei que estudar um distinct talvez. Fazer ele carregar uma nova tabela e nela carregar meu banco atual, depois faço a carga do banco antigo desconsiderando os registros que estiverem duplicado pelo CNPJ, porém mantendo apenas um.
Amigo passei a solução, isso eu entendi.
Agora acredito que você é novo com a ferramenta, só que acontece.
No código você da um where not exists (NRINCRICAS,if...) //que vale o mesmo que nr inscrição.
Nas duas bases o campo CNPJ ou CPF estão diferentes para esse cliente.
Leio a primeira parte certo ?
Load ....
Concatenate // Juntando os dados
Load ... where not exists ... //aqui estou dizendo que concatena somente os registros que não possui o CNPJ da tabela de cima.
Quanto o CPF e CNPJ eu entendi perfeitamente, mas fazemos essa validação para deixar em um único campo conforme sua base nova.
Talvez amigo ,mais fácil contratar uma consultoria para te auxiliar. Ou ainda sugiro você sanear sua base.
Em algum lugar e ainda acho que é no banco antigo para esse cliente o campo CNPJ ou CPF contém '?' ao invés de ser nulo.
Maicon, eu vejo isso como uma coisa simples de tratar, porém ainda está faltando algo.
Veja:
No banco antigo tenho os dois campos (CGC e CPF) conforme a imagem:
No banco novo no campo NRINSCRICAOCLI tenho as mesmas informações, porém no mesmo campo/coluna.
A parte de junção de tabelas eu entendi, porém os resultados estão errados e inconsistentes. Já até filtrei apenas um cliente na clausula where para comparar, mas mesmo assim ainda estava errado.
Eu não tenho muito conhecimento e como falei, essa é a primeira aplicação com necessidade de cruzamento de tabelas de bancos diferentes. Mas vou continuar procurando uma solução aqui e agradeço pela força de vontade em ajudar.
Obrigado novamente.
Amigo faça assim , queres que te ajude, gera o qvd do banco antigo e qvd do banco novo.
Me passa, maicon@jmaconsultoria.com
Me passa um exemplo tipo um cliente e como deveria ficar com a junção.
Assim te ajudo melhor !
Abraço