(RESOLVIDO) - Importar XML NF-E

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)

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)

da uma olhada nesse video… https://www.youtube.com/watch?v=OVXFmfMggKU

nem preciso usar modo avançado para publicar…

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…

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…

ok…pode ser umpouco mais tarde… eu vou buscar o meu tambem…

Isso mesmo, o ideal é colocar uma pasta principal e você coloca as subpastas no campo upload como citei no outro post

Estou com algumas dúvidas no seu código… foi voce mesmo quem o criou ?
ele depende do nfephp ?
depende de alguma outra biblioteca?

essa função é de qual biblioteca?

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

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

$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

Segue um novo arquivo com a estrutura das tabelas usadas.


Importar_xml_nfe_novo.txt (49.5 KB)

as tabelas foram crias em base Postgres…

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.

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?

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.

$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);
            }
        }
    }
}

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

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