Autor Tópico: (RESOLVIDO) - Importar XML NF-E  (Lida 9446 vezes)

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:Importar XML NF-E
« Responder #15 Online: 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...
Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Importar XML NF-E
« Responder #16 Online: 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...
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:Importar XML NF-E
« Responder #17 Online: Julho 13, 2015, 04:17:23 pm »
ok..pode ser umpouco mais tarde.. eu vou buscar o meu tambem..
Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:Importar XML NF-E
« Responder #18 Online: 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

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Importar XML NF-E
« Responder #19 Online: 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?
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:Importar XML NF-E
« Responder #20 Online: 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)));
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:Importar XML NF-E
« Responder #21 Online: 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
Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:Importar XML NF-E
« Responder #22 Online: 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
Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:Importar XML NF-E
« Responder #23 Online: Julho 14, 2015, 03:46:23 pm »
Segue um novo arquivo com a estrutura das tabelas usadas.
Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:Importar XML NF-E
« Responder #24 Online: Julho 15, 2015, 09:38:44 pm »
as tabelas foram crias em base Postgres...
Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:(RESOLVIDO) - Importar XML NF-E
« Responder #25 Online: 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.

miguell

  • Iniciante
  • **
  • Mensagens: 61
    • Email
Re:(RESOLVIDO) - Importar XML NF-E
« Responder #26 Online: 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?


Sérgio Miguel
Analista de Sistemas
MS WORKS INFORMÁTICA SC LTDA
(11) 2937-8938 - Comercial
(11) 96367-6916 - Celular
Rua Hermenegildo Orsi, 149 -Jardim Acácio - Guarulhos - SP - 7144-130

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1045
    • Email
Re:(RESOLVIDO) - Importar XML NF-E
« Responder #27 Online: 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);
            }
        }
    }
}
            

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:(RESOLVIDO) - Importar XML NF-E
« Responder #28 Online: 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
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • Gestão de Construtoras
    • Email
Re:(RESOLVIDO) - Importar XML NF-E
« Responder #29 Online: 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>

Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 64 bits
Sistema Integrado de Gestão de Construtoras]WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775