Leitura de DANFE ( Xml )

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

Re: Leitura de DANFE ( Xml )

Mensagem por jairfab »

Ficou otima esta rotina de ler DANFE, so está faltando pegar todos os dados Det itens BC e CST para os impostos IPI, cofins etc..

Alguem poderia complementar isto nesta finção?
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Re: Leitura de DANFE ( Xml )

Mensagem por Poka »

Prezado colega,

Tenho essa rotina que fiz no meu sistema, veja se serve.

Código: Selecionar todos

// carrego o arquivo inteiro
xtexto:=memoread(NomeArquivoXML)
//
for a:= 1 to 99
   xtag1:="<det nItem="
   xtag2:= "</det>"
   xposicao1:=atNum(xtag1,xtexto,a)+len( xtag1)
   xposicao2:=atNum(xtag2,xtexto,a)
   vparteItem:=substr(xtexto,xposicao1,xposicao2-xposicao1)
   if empty(vparteItem)   // se nao encontrou cai fora, terminou os itens
      exit
   endif
   *-numero do item
   vnItem:=strzero( a,2)
   *-----codigo----------
   xtag1:="<cProd>"
   xtag2:="</cProd>"
   vcodmatx:=pegatextoVar( vparteItem,xtag1,xtag2)
   *-----codigo-barra---------
   xtag1:="<cEAN>"
   xtag2:="</cEAN>"
   vcodbarx:=pegatextoVar( vparteItem,xtag1,xtag2)
   *-------------
   xtag1:="<xProd>"
   xtag2:="</xProd>"
   vnomematx:=pegatextoVar( vparteItem,xtag1,xtag2)
   *-------------
   xtag1:="<NCM>"
   xtag2:="</NCM>"
   vncmx:=pegatextoVar( vparteitem,xtag1,xtag2)
   *------unidade comercial-------
   xtag1:="<uCom>"
   xtag2:="</uCom>"
   vunx:=pegatextoVar( vparteItem,xtag1,xtag2)
   *-------------
   xtag1:="<CFOP>"
   xtag2:="</CFOP>"
   vcfop:=pegatextoVar( vparteItem,xtag1,xtag2)
   *-------------
   xtag1:="<qCom>"
   xtag2:="</qCom>"
   vqtd:=round( val(pegatextoVar( vparteItem,xtag1,xtag2)),3)
   *------valor unitario-------
   xtag1:="<vUnCom>"
   xtag2:="</vUnCom>"
   vprUni:=round( val(pegatextoVar( vparteItem,xtag1,xtag2) ),5)
   *-------------
   xtag1:="<vProd>"
   xtag2:="</vProd>"
   vvlMerc:= round( val( pegatextoVar( vparteItem,xtag1,xtag2) ),2)
   *-------------
   xtag1:="<vFrete>"
   xtag2:="</vFrete>"
   vvlfrete:=round(   val(pegatextoVar( vparteItem,xtag1,xtag2)),2)
   *-------------
   // para icm/st/ pega parte do texto
   vparte:=pegatextoVar( vparteItem,"<ICMS>","</ICMS>")
   xtag1:="<vICMS>"
   xtag2:="</vICMS>"
   vvlIcms:= round( val(pegatextoVar( vparte,xtag1,xtag2)   ),2)
   *-------------
   xtag1:="<pICMS>"
   xtag2:="</pICMS>"
   vAlIcms:= round( val(pegatextoVar( vparte,xtag1,xtag2) ),2)
   *-------------
   xtag1:="<vBC>"
   xtag2:="</vBC>"
   vBaseicms:=round( val( pegatextoVar( vparte,xtag1,xtag2) ),2)
   *----------------------
   xtag1:="<vBCST>"
   xtag2:="</vBCST>"
   vBaseicmST:= round( val( pegatextoVar( vparte,xtag1,xtag2) ),2)
   *--------------
   xtag1:="<pICMSST>"
   xtag2:="</pICMSST>"
   vpde:=round(val(pegatextoVar( vparte,xtag1,xtag2)),2)
   *--------------
   xtag1:="<vICMSST>"
   xtag2:="</vICMSST>"
   vvlst:=round(val(pegatextoVar( vparte,xtag1,xtag2)),2)
   *-------// ipi pega texto---------------
   vparte:=pegatextoVar( vparteItem,"<IPI>","</IPI>")
   *------------------
   xtag1:="<vIPI>"
   xtag2:="</vIPI>"
   vvlipi:=round( val(pegatextoVar( vparte,xtag1,xtag2)),2)
   *-------------
   xtag1:="<pIPI>"
   xtag2:="</pIPI>"
   valIPI:=round(val(pegatextoVar( vparte,xtag1,xtag2)),2)
next	
////////////////////
funct PegaTextoVar(xVar,xchave1,xchave2)
    // pega texto de variavel
    local xpesq1:=xpesq2:=""
    local xPosicao1:=xPosicao2:=0
   if ! xchave1 $ xvar .or.  ! xchave2 $ xvar
        x:=""
   else
       xposicao1:=atNum(xchave1,xVar)+len( xchave1)
       xposicao2:=atNum(xchave2,xVar)
   endif
RETU (x)
						




Poka
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura de DANFE ( Xml )

Mensagem por fladimir »

Nobres colegas qto a pegar o XML e jogar os respectivos campos em uma base temporaria OK, agora estou com as seguintes dificuldades de organizar as seguintes situações:

1 - Como atrelar/associar o produto da NFe com determinado produto da base do cliente, sendo q por exemplo não tenha código de barras?

2 - Com fazer com determinado produto q é comprado de fornecedores diferentes, ou seja, na base de produtos do sistema tem o produto X e estou lançando 2 NFes puxando do XML de 2 fornecedores distintos mas q fornecem o produto X e não tem código de barras nos 2 xml ou tem em 1 e não tem em outro por exemplo?

3 - Suponhamos q tenha vários produtos novos q foram comprados e estão no XML da NFe de entrada e dado ao fato de serem novos produtos a serem trabalhados no meu estabelecimento não tenho ele na base da empresa, como os colegas tratam essa questão na hora de efetivar os dados?

Sds.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Leitura de DANFE ( Xml )

Mensagem por Laudelino Scarmagnani »

Ola pessoal.
No programa LerDanfe, tem algumas funções. A função CAIXATEXTO(07,08,8+Len(cLista),85,"ESCOLHA O ARQUIVO COM O DANFE ","BG+/NB+","NN/NN","N"), por exemplo, deve ser para selecionar um arquivo, recuperado pelo programa numa pasta. Como tenho pouco conhecimento em Clipper, se alguém tem esta função e possa postá-la, agradeceria muito.
As demais, acho que consigo resolver. A função MsgConf() tambem me ajudaria muito, para economizar ums linhas de código nos demais programas meus.
Um abraço.
Laudelino
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura de DANFE ( Xml )

Mensagem por fladimir »

Nobres colegas qto a pegar o XML e jogar os respectivos campos em uma base temporaria OK, agora estou com as seguintes dificuldades de organizar as seguintes situações:

1 - Como atrelar/associar o produto da NFe com determinado produto da base do cliente, sendo q por exemplo não tenha código de barras?

2 - Com fazer com determinado produto q é comprado de fornecedores diferentes, ou seja, na base de produtos do sistema tem o produto X e estou lançando 2 NFes puxando do XML de 2 fornecedores distintos mas q fornecem o produto X e não tem código de barras nos 2 xml ou tem em 1 e não tem em outro por exemplo?

3 - Suponhamos q tenha vários produtos novos q foram comprados e estão no XML da NFe de entrada e dado ao fato de serem novos produtos a serem trabalhados no meu estabelecimento não tenho ele na base da empresa, como os colegas tratam essa questão na hora de efetivar os dados?

Sds.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Leitura de DANFE ( Xml )

Mensagem por marcos.gurupi »

Caro eu uso assim:

Eu verifico primeiro se no XML veio o codigo de barra, havendo o cod.barra eu procuro na minha base de dados. Nao havendo o cod.barra eu faco uma pesquisa aproximada da descricao q veio no XML e peco ao usuario q defina o que eu chamo de codigo de destino (seria o codigo que eu tenho na base). Ah e havendo o codigo de barra eu aproveito e adiciono na minha base de dados.

Pelo que eu entendi a funcao descrita acima seria o suficiente para as 3 perguntas.

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Leitura de DANFE ( Xml )

Mensagem por fladimir »

Entendi e acredito q resolva...

Vou por em prática.

Obrigado colega.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Leitura de DANFE ( Xml )

Mensagem por billy1943 »

Outra sugestão, muito parecida com as aventadas, é a que uso nos meus sistemas, e que é a seguinte:

- após entrar com os dados da NFE para conferência (número, série e fornecedor), informa-se se vai querer entrar pelo código de barras ou pelo código do fabricante (além deles existe ainda o código interno);

- se o fornecedor em questão ainda não enquadrou todos os produtos com o GTIn (EAN13), informamos que será pelo código desse fabricante mas o sistema irá incluindo os GTIn nos produtos que o tiverem, além de confirmar o NCM e alíquota de IPI;

- para os fornecedores que já tem a lista de produtos OK, a entrada será automatica pelo código de barras

- nas manutenções de produtos não existe a opção de incluir códigos de barras, sendo privativa da entrada através do .XML.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Leitura de DANFE ( Xml )

Mensagem por rochinha »

Amiguinhos,

Pelo que voces proprõem no caso da escolha se sera codigo normal ou EAN, não seria mais aconselhável suas tabelas de estoque já conterem campos para este suporte? exemplo, iditem-codigo interno do item, codigo-codigo do fornecedor, EAN-para codigo de barras principal e EANTrib-para codigo de barras tributável.

Já que a nota vem com estes campos em seprados bastaria rodar a rotina de leitura e lancá-los no estoque sem intervenção do usuário.

Caso 1:

Se o codigo do fabricante(no caso peça automotiva) ou EAN já existir mas o fornecedor for diferente do que esta cadastrado no registro do item, seria de importancia ter uma segunda tabela de suporte para armazenar o codigo do item, o EAN, o codigo do fabricante, codigo do fornecedor, custo e data de entrada.

Neste caso voces estariam promovendo a listagem de cotações de forma transparente.

Caso 2:

O codigo de fabricante original por ser atrelado ao codigo de um produto fabricado por outra empresa e que entre como similar.

Neste caso também haveria a figura de uma tabela de suporte.

Então para afunilar a entrada de itens sem encher o estoque com os mesmos produtos e codigos direferente, há de se pensar? indexo as pesquisas por codigo de entrada(fornecedor) ou por EAN(quase ninguem ainda o tem).
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder