(RESOLVIDO) - Importar XML NF-E

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.

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…

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