ScriptCase Forum

Códigos de exemplo => Controle => Tópico iniciado por: saulobborges em Outubro 22, 2012, 04:59:00 pm

Título: (RESOLVIDO) - Importar XML NF-E
Enviado por: saulobborges em Outubro 22, 2012, 04:59:00 pm
Alguém tem algum exemplo pronto de importação de xml de Nf-e? To tentando fazer um aqui mas ta me caindo os cabelos, pode ser um exemplo, sei lá!!

Agradeço!!
Título: Re:Importar XML NF-E
Enviado por: Paulada(Paulo Soares) em Outubro 31, 2012, 07:50:20 pm
Boa noite Saulo,
tem este cara aí de repente ele já tem algo; http://www.netmake.com.br/forum/index.php/topic,2636.msg11794.html#msg11794
Título: Re:Importar XML NF-E
Enviado por: saulobborges em Outubro 31, 2012, 09:23:58 pm
Boa noite Saulo,
tem este cara aí de repente ele já tem algo; http://www.netmake.com.br/forum/index.php/topic,2636.msg11794.html#msg11794
Aí Paulo obrigado pela resposta mas aquele código foi copiado de um outro site, já tinha visto ele mas não funciona, desenvolvi o meu, era específco para minhas necessidades.
Título: Re:Importar XML NF-E
Enviado por: Jean Matos em Dezembro 19, 2014, 07:24:34 pm
Saulo, não sei se vc implementou , mas está aqui uma solução que postei..

https://www.scriptcase.com.br/forum/index.php/topic,10122.msg50334.html#msg50334

fecha o tópico..
Título: RESOLVIDO - Importar XML NF-E
Enviado por: saulobborges em Dezembro 22, 2014, 12:18:44 pm
OK
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 10, 2015, 11:15:27 pm
pessoal,
  segue anexo arquivo texto com toda a rotina de importação de uma xml de nfe..
Título: Re:Importar XML NF-E
Enviado por: Kleyber em Julho 11, 2015, 12:17:42 am
miguell,

Muito bom. Obrigado por compartilhar.
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 11, 2015, 02:00:11 pm
Obrigado...
Estou com uma dificuldade nesta rotina no momento de fazer upload do xml, eu criei uma pasta dentro da _LIB.. porem o SC ao subir grava na tmp e depois nao acha o arquivo.. sabe como resolver isso?
Título: Re:Importar XML NF-E
Enviado por: Celso R. em Julho 11, 2015, 06:22:18 pm
Muito bom Saulo.
Muito obrigado por compartilhar.
Título: Re:Importar XML NF-E
Enviado por: megh em Julho 13, 2015, 07:44:32 am
Obrigado...
Estou com uma dificuldade nesta rotina no momento de fazer upload do xml, eu criei uma pasta dentro da _LIB.. porem o SC ao subir grava na tmp e depois nao acha o arquivo.. sabe como resolver isso?
Vai em aplicação, configurações e verifique o caminho de upload de documentos. Esse deve ter permissão de escrita e leitura (777), após publicar, se for em modo típico, o caminho ficará ...diretório.../_lib/file/doc, em modo avançado ...diretorio.../scriptcase/file/doc confirme se esses diretórios está com está 777.
Se desejar colocar esses arquivos dentro da _lib, você deve alterar o caminho em aplicação / configuração / caminhos do upload e ao publicar selecionar modo avançado, campo de documentos, caminho desejado. Lembrando que esse se for em servidor compartilhado de ter o caminho completo, que você pode obter com o comando getcwd(); do php.
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 13, 2015, 08:27:51 am
Rodrigo bom dia,
   eu tenho acesso total as a pastas no inicio do txt que publiquei eu pego o caminho completo da pasta onde dever gravado o arquivo, e tambem ja mudei o caminho na aplicação, porem ao publicar eu recebo um erro, e depois de quebrar a cabeça eu percebi que o SC esta subindo pra pastra tmp e nao diretamente pra pasta que esta configurada.
Entao entendi que e o SC sobre pra pasta TMP e depois nao acha o caminho informado pra colocar o arquivo..
lembro que em mode  desenvolvimento esta funcionado perfeitamente....e a pasta esta no caminho(_lib\Nfeproducao\recebidas\emp_001\fil_001\201507) este e caminho no desenvolvimento e na produção..
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 13, 2015, 11:29:25 am
Rodrigo,
   por favor voce consegue me ajudar...segue o erro..

.: /home/flexsgn/www/sgn/control_xml
   
Atenção   
file_get_contents() [function.file-get-contents]: Unable to access /home/flexsgn/www/sgn/_lib/nfe_producao/recebidas/emp_0001/fil_001/201507/35150561186888007015550150018166021033473700.xml

Script: /home/flexsgn/www/sgn/control_xml/control_xml_apl.php (2494)
file_get_contents(/home/flexsgn/www/sgn/_lib/nfe_producao/recebidas/emp_0001/fil_001/201507/35150561186888007015550150018166021033473700.xml) [function.file-get-contents]: failed to open stream: No such file or directory

Script: /home/flexsgn/www/sgn/control_xml/control_xml_apl.php (2494)
DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input

Script: /home/flexsgn/www/sgn/control_xml/control_xml_apl.php (2500)
Título: Re:Importar XML NF-E
Enviado por: megh em Julho 13, 2015, 02:27:29 pm
Rodrigo bom dia,
   eu tenho acesso total as a pastas no inicio do txt que publiquei eu pego o caminho completo da pasta onde dever gravado o arquivo, e tambem ja mudei o caminho na aplicação, porem ao publicar eu recebo um erro, e depois de quebrar a cabeça eu percebi que o SC esta subindo pra pastra tmp e nao diretamente pra pasta que esta configurada.
Entao entendi que e o SC sobre pra pasta TMP e depois nao acha o caminho informado pra colocar o arquivo..
lembro que em mode  desenvolvimento esta funcionado perfeitamente....e a pasta esta no caminho(_lib\Nfeproducao\recebidas\emp_001\fil_001\201507) este e caminho no desenvolvimento e na produção..

No onScriptInit crie algumas variáveis globais:
[var_empresa] = 'emp_'. str_pad([usu_id_empresa], 4, 0, STR_PAD_LEFT);
[var_filial]        = 'fil_'. str_pad({id_filial}, 3, 0, STR_PAD_LEFT);
[var_pasta] = {tx_pasta}; //configura de acordo com seus dados

no campo upload, caminho do upload
/[var_empresa]/[var_filial]/[var_pasta]
criar subdiretório = SIM

Ao publicar mude para modo avançado

caminhos:
prod: /_lib/prod
img:  /_lib/file/img
tmp: /_lib/tmp
doc: /home/flexsgn/www/sgn/_lib/nfe_producao/recebidas

certifique-se que os diretório acima existam e estão com permissão 777 (prod não precisa estar 777)
Título: Re:Importar XML NF-E
Enviado por: Jean Matos em Julho 13, 2015, 02:44:04 pm
da uma olhada nesse video... https://www.youtube.com/watch?v=OVXFmfMggKU
Título: Re:Importar XML NF-E
Enviado por: Jean Matos em Julho 13, 2015, 02:45:33 pm
nem preciso usar modo avançado para publicar...

Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 13, 2015, 03:22:56 pm
Jean boa tarde,
 estou olhandooteu videomas nao entendi como voce faz o upload do xml para uma pasta definida por voce?

Rodrigo,
  uma duvida no seu exemplo quando eu publicar e definir o diretorio padrao este sera usado para todos os documentos do meu sistema?
por que no meu caso eu tenho uma pasta definida somente para esta rotina de XML...
Título: Re:Importar XML NF-E
Enviado por: Jean Matos em Julho 13, 2015, 03:54:21 pm
Me add no Skype...  jean.mcp  ou ZAP  033 8824-2775

Conversamos por volta das 17:30....
Vou te mostrar como faço o upload e a leitura..
preciso levar meu filho no dentista agora...
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 13, 2015, 04:17:23 pm
ok..pode ser umpouco mais tarde.. eu vou buscar o meu tambem..
Título: Re:Importar XML NF-E
Enviado por: megh em Julho 14, 2015, 07:25:35 am
Rodrigo,
  uma duvida no seu exemplo quando eu publicar e definir o diretorio padrao este sera usado para todos os documentos do meu sistema?
por que no meu caso eu tenho uma pasta definida somente para esta rotina de XML...
Isso mesmo, o ideal é colocar uma pasta principal e você coloca as subpastas no campo upload como citei no outro post
Título: Re:Importar XML NF-E
Enviado por: Jean Matos em Julho 14, 2015, 02:00:37 pm
pessoal,
  segue anexo arquivo texto com toda a rotina de importação de uma xml de nfe..

Estou com algumas dúvidas no seu código... foi voce mesmo quem o criou ?
ele depende do nfephp ?
depende de alguma outra biblioteca?
Título: Re:Importar XML NF-E
Enviado por: Jean Matos em Julho 14, 2015, 02:21:13 pm
essa função é de qual biblioteca?

$emit_endereco  = strtoupper(url_amigavel(trim($emit->getElementsByTagName("xLgr")->item(0)->nodeValue)));
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 14, 2015, 02:33:28 pm
jean,
  este arquivo nao depende de nenhuma rotina ele faz a leitura do XML recebido de um fornecedor... e grava estes informações em uma tabela
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 14, 2015, 02:35:34 pm
$emit->getElementsByTagName("xLgr")->item(0)->nodeValue)
Esta éo objeto XML gerado para fazer a leitura assim voce consegue ler tudo que esta abaxio de um node..

a outra é para trocar os caracteres especiais pelos normais

e a outra e uma funcao php para transformar em maiuscula
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 14, 2015, 03:46:23 pm
Segue um novo arquivo com a estrutura das tabelas usadas.
Título: Re:Importar XML NF-E
Enviado por: miguell em Julho 15, 2015, 09:38:44 pm
as tabelas foram crias em base Postgres...
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: megh em Julho 16, 2015, 07:43:37 am
Segue um novo arquivo com a estrutura das tabelas usadas.
Obrigado por compartilhar, tenho um sistema que faz isso e está bem parecido.
Também importo tudo que está em um diretótio específico. No final da importação renomeio o arquivo xml com "-" antes do nome e faço um foreach lendo todo diretório com opendir pegando apenas o que for extensão xml e que o nome do arquivo não inicie com "-", assim o usuário importa diversos xmls ao mesmo tempo.
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: miguell em Julho 16, 2015, 08:51:49 pm
Rodrigo,
  obrigado....
   mas pelo jeito o seu esta mlhor que o meu se tiver como compartilhar esta aplicação seria legal..
   por que todos precisamos de algo muito parecido com o que eu fiz e o que voce fez...

Tenho uma pergunta pra todos aqui..nao sei como definir isso pra que fique automatico:

Na minha tabela tenho muitos campos defido como moeda e decimal, mas no SC eu tenho que ir campo a campo pra informar:
==> Tipo Moeda
==> Tamanho do Campo...
==> Casa Decimal
==> Completa com zero

Existe alguma forma de fazer isso automático... pra que todos os campos ja venham em uma definição que eu coloque?


Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: megh em Julho 17, 2015, 08:56:46 am
Bom o que fiz é quase igual ao seu porém com o início para ler tudo que está no diretório:
Vou passar o resumo como fiz para não ficar confuso e cada um pode fazer de acordo com a necessidade.

Código: [Selecionar]
$diretorioup = "C:/Program Files (x86)/NetMake/v8/wwwroot/xml";

// Verificando se a pasta é valida
if (is_dir($diretorioup))
{
    //Abrindo a pasta selecionada
    if ($dh = opendir($diretorioup))
    {
        //Percorrendo todos os arquivos da pasta selecionada
        while (($file = readdir($dh)) !== false)
        {
      if(substr($file,0,2) != "--" && trim($file) != "." && trim($file)!=".." && (substr(trim($file),-3)=='xml' || substr(trim($file),-3)=='XML'))
             {
                //Obtendo caminho completo até o arquivo
                $xmlUrl = $diretorioup."/".$file;

                //Transformando o XML em array
$arrXml = simplexml_load_file($xmlUrl);

              ----------------------- daqui para baixo pego as tags assim:
              $varcnpj_temp = trim($nfe->infNFe->dest->CNPJ); //outras linhas devem ser geradas igual essa com o caminho das tags
             
              //Obtendo dos itens da NF
              $docDom = new DomDocument;
              $docDom->Load($xmlUrl);
              $items = $docDom->getElementsByTagName('prod');
              for ($i=0; $i < $items->length; $i++)
              {
                         --------------daqui para baixo pego as tags com o DOM
                        $D1_CF       = (isset($items->item($i)->getElementsByTagName('CFOP')->item(0)->nodeValue))?  $items->item($i)->getElementsByTagName('CFOP')->item(0)->nodeValue  : ""; //outras linhas devem ser geradas igual essa com o caminho das tags (dessa maneira irá percorrer todos os itens

                         nessa parte que faço o insert na tabela de itens
               }
               nessa parte faço o insert na tabela de cabeçalho
               também renomeio para não pegar o arquivo novamente
               rename($diretorioup."/".$file,$diretorioup."/--importado--".$file);
            }
        }
    }
}
            
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: Jean Matos em Julho 20, 2015, 10:37:10 am
essa função é de qual biblioteca?

$emit_endereco  = strtoupper(url_amigavel(trim($emit->getElementsByTagName("xLgr")->item(0)->nodeValue)));

me refiro ao   -> (url_amigavel(...

olha o retorno-> 
   
Fatal error: Call to undefined function url_amigavel() in C:\Program Files (x86)\NetMake\v8\wwwroot\scriptcase\app\MAM_Gestao_ISO_PBQPH\control_grava_nfe\control_grava_nfe_apl.php on line 2337
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: Jean Matos em Setembro 02, 2015, 11:24:06 am
Bom o que fiz é quase igual ao seu porém com o início para ler tudo que está no diretório:
Vou passar o resumo como fiz para não ficar confuso e cada um pode fazer de acordo com a necessidade.

Código: [Selecionar]
$diretorioup = "C:/Program Files (x86)/NetMake/v8/wwwroot/xml";

// Verificando se a pasta é valida
if (is_dir($diretorioup))
{
    //Abrindo a pasta selecionada
    if ($dh = opendir($diretorioup))
    {
        //Percorrendo todos os arquivos da pasta selecionada
        while (($file = readdir($dh)) !== false)
        {
      if(substr($file,0,2) != "--" && trim($file) != "." && trim($file)!=".." && (substr(trim($file),-3)=='xml' || substr(trim($file),-3)=='XML'))
             {
                //Obtendo caminho completo até o arquivo
                $xmlUrl = $diretorioup."/".$file;

                //Transformando o XML em array
$arrXml = simplexml_load_file($xmlUrl);

              ----------------------- daqui para baixo pego as tags assim:
              $varcnpj_temp = trim($nfe->infNFe->dest->CNPJ); //outras linhas devem ser geradas igual essa com o caminho das tags
             
              //Obtendo dos itens da NF
              $docDom = new DomDocument;
              $docDom->Load($xmlUrl);
              $items = $docDom->getElementsByTagName('prod');
              for ($i=0; $i < $items->length; $i++)
              {
                         --------------daqui para baixo pego as tags com o DOM
                        $D1_CF       = (isset($items->item($i)->getElementsByTagName('CFOP')->item(0)->nodeValue))?  $items->item($i)->getElementsByTagName('CFOP')->item(0)->nodeValue  : ""; //outras linhas devem ser geradas igual essa com o caminho das tags (dessa maneira irá percorrer todos os itens

                         nessa parte que faço o insert na tabela de itens
               }
               nessa parte faço o insert na tabela de cabeçalho
               também renomeio para não pegar o arquivo novamente
               rename($diretorioup."/".$file,$diretorioup."/--importado--".$file);
            }
        }
    }
}
            

Rodrigo, já estou praticamente com 99% funcionando....porém esbarrei em um detalhe nessa importação.

nas tags de 'imposto' temos ICMS, IPI, PIS, COFINS, porém elas tem algumas tags iguais como por exemplo  CST...
logo se eu usar o metodo igual aos outros campos ele pega o valor da tag   ICMS->CST e joga nas demais também....


como faço para diferenciar as tags dentro de cada tipo de imposto usando Dom?

*******************
<imposto>
<ICMS>
      <ICMS00>
              <orig>4</orig>
              <CST>00</CST>      ->>>>>TAGS IGUAIS
              <modBC>3</modBC>
              <vBC>7599.78</vBC>
              <pICMS>12.00</pICMS>
             <vICMS>911.97</vICMS>
            </ICMS00></ICMS>
<IPI>
     <cEnq>999</cEnq>
            <IPITrib>
                  <CST>50</CST>     ->>>>>TAGS IGUAIS
                  <vBC>7543.21</vBC>
                  <pIPI>0.75</pIPI>
                  <vIPI>56.57</vIPI>
                  </IPITrib></IPI>
<PIS>
     <PISAliq>
          <CST>01</CST>      ->>>>>TAGS IGUAIS
          <vBC>7543.21</vBC>
          <pPIS>1.65</pPIS>
          <vPIS>124.46</vPIS>
     </PISAliq></PIS
<COFINS>
       <COFINSAliq>
              <CST>01</CST>     ->>>>>TAGS IGUAIS
              <vBC>7543.21</vBC>
              <pCOFINS>7.60</pCOFINS>
              <vCOFINS>573.28</vCOFINS>
        </COFINSAliq>
</COFINS>
</imposto>

Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: megh em Setembro 08, 2015, 10:48:35 am
Dá uma olhada nesse tópico tem exatamente o que você precisa
https://github.com/nfephp-org/nfephp/blob/master/libs/NFe/UnConvertNFePHP.class.php
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: Jean Matos em Setembro 08, 2015, 10:56:34 am
Obrigado Rodrigo.....resolvido..
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: Jean Matos em Setembro 08, 2015, 11:08:04 am
Dá uma olhada nesse tópico tem exatamente o que você precisa
https://github.com/nfephp-org/nfephp/blob/master/libs/NFe/UnConvertNFePHP.class.php

Resolvi de outra forma....

Qual a finalidade em Transformar o XML da NF-e em TXT ?
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: megh em Setembro 08, 2015, 11:09:24 am
Dá uma olhada nesse tópico tem exatamente o que você precisa
https://github.com/nfephp-org/nfephp/blob/master/libs/NFe/UnConvertNFePHP.class.php
Resolvi de outra forma....

Qual a finalidade em Transformar o XML da NF-e em TXT ?


Na verdade passei o link apenas para explorar e verificar como pegar as tags que são de mesmo nome pelo getelementbyname do dom.
Se for gerar em txt ou em XML, ou apenas pegar o valor seria da mesma maneira.
Título: Re:(RESOLVIDO) - Importar XML NF-E
Enviado por: megh em Setembro 08, 2015, 11:11:19 am
Porém alguns sistemas geram em TXT e convertem para XML, o que eu particularmente não faço.