Leitura de DANFE ( Xml )
Moderador: Moderadores
- jairfab
- 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 )
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?
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
Re: Leitura de DANFE ( Xml )
Prezado colega,
Tenho essa rotina que fiz no meu sistema, veja se serve.
Poka
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
Leitura de DANFE ( Xml )
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.
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.
“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

- Mensagens: 303
- Registrado em: 07 Fev 2007 10:54
Leitura de DANFE ( Xml )
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
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
Leitura de DANFE ( Xml )
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.
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.
“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

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Leitura de DANFE ( Xml )
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.
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
NetService Software
Leitura de DANFE ( Xml )
Entendi e acredito q resolva...
Vou por em prática.
Obrigado colega.
[]´s
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.
“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.
Leitura de DANFE ( Xml )
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.
- 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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Leitura de DANFE ( Xml )
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).
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
