NFe v2.0 vs ScriptCase

http://www.nfephp.org/
http://groups.google.com/group/nfephp
http://www.assembla.com/wiki/show/nfephp

Eu estou tentando implementar a NFe. na minha aplicação feita pelo SC.

Mais não está nada fácil…

Comecei a gerar o TXT, utilizando a classe Existente no projeto nfephp. mais observei que a classe que gera o TXT por enquanto não suporta a NFe 2.0

E a 1.10 já está com seus dias contados, parece que Abril de 2011 se não for prorrogado novamente.

A pergunta é! Alguém já conseguiu implementar o projeto NFePHP no SC?

Regis,

Entro nesta empreitada após o natal. Estou terminando de fazer a 2.0 para um sistema desktop.
As experiencias relato aqui.

Abs
David Zeitune.

Legal David…

Bom eu estou trabalhando aos poucos…

Eu disponibilizei a tabela CFOP, para quem estiver iniciando também…

http://www.netmake.com.br/forum/index.php?topic=2655.0

Ola Amigos;

Trabalaho tb com Desenvolvimento de NFe com aplicacoes Desktop, ja na versao 2.0 e estou tb começando a desenvolver WEB. Estou a disposição para o que puder ajudar, e gostaria de participar deste topico NFe+SC5 com voces.

Gilson
Futura Informatica

Olá a todos… ainda não terminei o código… mais vou disponibilizar para quem estiver iniciando também…

já da para ter uma noção…

A idéia desse é pegar os xml (NFe) de uma pasta e importar para o banco de dados…

Quem puder ajudar ou se alguém tiver alguma idéia posta ai…

Conforme eu vou evoluindo aqui eu vou postando…

======================================================================

// pega diretorio de origem e destino
$check_sql = “SELECT diretorio_importacao_origem, diretorio_importacao_destino”
. " FROM empresa"
. " WHERE id_empresa = ‘" . {empresa} . "’";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]})) // Row found
{
$origem = {rs[0][0]};
$destino = {rs[0][1]};

$dir = opendir($origem);

while ($file = readdir($dir))
{

$arq = $origem . $file;
$extensao = substr($arq,-3);

//Pega somente os XML
if ($extensao == 'xml' || $extensao == 'XML')
{      

    //inicio xml



if ( is_file($arq) ){
	    $xml = file_get_contents($arq);
		    
  	    $doc = new DOMDocument();
	    $doc->preservWhiteSpace = FALSE; //elimina espaços em branco
	    $doc->formatOutput = FALSE;
	    $doc->loadXML($xml,LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG);
	    $node = $doc->getElementsByTagName('infNFe')->item(0);
	    
	    //obtem a versão do layout da NFe
	    $versao = trim($node->getAttribute("versao"));
				      
                //obtem chave de acesso do xml
	    $chave = substr(trim($node->getAttribute("Id")),3);
	    
	    //Data da Emissão
	    $dataEmissao = tagValue(&$doc,"dEmi");
	    
	    //Data/Hora do Movimento
	    $dataMovimento = tagValue(&$doc,"dSaiEnt");
	    //$horaMovimento = tagValue(&$doc,"hSaiEnt");
	    
	    //numero nota
	    $numero = tagValue(&$doc,"nNF");
	    
	    //modelo da nota - (55 nfe)
	    $modelo = tagValue(&$doc,"mod");
	    
	    //serie da nota
	    $serie = tagValue(&$doc,"serie");
	
	    // emitente
	    $emi = $doc->getElementsByTagName('emit')->item(0);
	    
	    //nome do emitente
	    $emitenteRazaoSocial = tagValue(&$emi,"xNome");
	    sc_alert($emitenteRazaoSocial);
	    //fantasia do emitente
	    $emitenteFantasia = tagValue(&$emi,"xFant");
	    
	    //CNPJ do emitente, Sem formatação
	    $emitenteCnpj = tagValue(&$emi,"CNPJ");
	    
	    // pega o id da do emitente no banco de dados
	    $check_sql = "SELECT id_empresa"
                   . " FROM empresa"
                    . " WHERE cpf_cnpj = '" . $emitenteCnpj . "'";
              sc_lookup(dados_empresa, $check_sql);
              $id_emp = {dados_empresa[0][0]};
	    
	    
	    
	    
	    //CNPJ do emitente, Formatado
	    $emitenteCnpjFormatado = substr($emitenteCnpj,0,2).".".substr($emitenteCnpj,2,3).
	    ".".substr($emitenteCnpj,5,3)."/".substr($emitenteCnpj,8,4)."-".substr($emitenteCnpj,12,2);
	    
	    //Emitente Inscrição Estadual
	    $emitenteInscricaoEstadual = tagValue(&$emi,"IE");
	    
	    //Emitente Insc. Municipal
	    // $emitenteInscricaoMunicipal = tagValue(&$emi,"IM");
	    
	    //Emitente CNAE
	    //  $emitenteCnae = tagValue(&$emi,"CNAE");
	
	    //Endereço do Emitente 
	    $emitenteEndereco = tagValue(&$emi,"xLgr");
	    $emitenteNumero = tagValue(&$emi,"nro");
	    $emitenteBairro = tagValue(&$emi,"xBairro");
	    $emitenteMunicipio = tagValue(&$emi,"xMun");
	    $emitenteMunicipioIbge = tagValue(&$emi,"cMun");
	    $emitenteCep = tagValue(&$emi,"CEP");
	    $emitenteUF = tagValue(&$emi,"UF");
	    $emitentePaisIbge = tagValue(&$emi,"cPais");
	    $emitentePais = tagValue(&$emi,"xPais");
	    $emitenteTelefone = tagValue(&$emi,"fone");
	    
	
	    //Dados do Destinatario
	    $dst = $doc->getElementsByTagName('dest')->item(0);
	    
	    //CNPJ Destinatario sem formatação
	    $destinatarioCnpj = tagValue(&$dst,"CNPJ");
	    
	    //CNPJ Destinatario formatado
	    $destinatarioCnpjFormatado = substr($destinatarioCnpj,0,2).
	    ".".substr($destinatarioCnpj,2,3).".".substr($destinatarioCnpj,5,3).
	    "/".substr($destinatarioCnpj,8,4)."-".substr($destinatarioCnpj,12,2);
	
	    //Rasão Social Destinatario
	    $destinatarioRazaoSocial = tagValue(&$dst,"xNome");
	    
	    //Fantasia Destinatario
	  //  $destinatarioNome = tagValue(&$dst,"xFant");
	    
	    
	    $destinatarioInscricaoEstadual = tagValue(&$dst,"IE");
	   // $destinatarioInscricaoMunicipal = tagValue(&$dst,"IM");
	    $destinatarioEndereco = tagValue(&$dst,"xLgr");
	    $destinatarioNumero = tagValue(&$dst,"nro");
	    $destinatarioBairro = tagValue(&$dst,"xBairro");
	    $destinatarioMunicipio = tagValue(&$dst,"xMun");
	    $destinatarioMunicipioIbge = tagValue(&$dst,"cMun");
	    $destinatarioCep = tagValue(&$dst,"CEP");
	    $destinatarioUF = tagValue(&$dst,"UF");
	    $destinatarioPaisIbge = tagValue(&$dst,"cPais");
	    $destinatarioPais = tagValue(&$dst,"xPais");
	    $destinatarioTelefone = tagValue(&$dst,"fone");
	    
	  //  $pesoLiquido = floatval(tagValue(&$doc,"pesoL"));
	   // $pesoBruto = floatval(tagValue(&$doc,"pesoB"));
	
	    $dataRecibo = tagValue(&$doc,"dhRecbto");
	    $protocolo = tagValue(&$doc,"nProt");
	
	  
	//pega ultimo id gerado
	sc_lookup(movmax,"select max(id_movimentacao_cab) from movimentacao_cab ");
	
	$movid = {movmax[0][0]} + 1;
	

	// SQL statement parameters
	$insert_table  = 'movimentacao_cab';              // Table name
	$insert_fields = array(                   // Field list, add as many as needed
	                     
	                     'id_empresa' => "'$id_emp'",
	                     'serie' => "'$serie'",
	                     'modelo' => "'$modelo'",
	                     'numero_nota' => "'$numero'",
	                     'id_movimentacao_cab' => "'$movid'",
	                     'data_emissao' => "'$dataEmissao'",
	                     'nome_xml' => "'$file'",
	                 );
	
	// Insert record
	$insert_sql = 'INSERT INTO ' . $insert_table
	            . ' ('           . implode(', ', array_keys($insert_fields))   . ')'
	            . ' VALUES ('    . implode(', ', array_values($insert_fields)) . ')';
	sc_exec_sql($insert_sql);
	
	
	
	
	
	    //importando produtos
	    $det = $doc->getElementsByTagName('det');
	    for ($i = 0; $i < $det->length; $i++) {
	        $item = $det->item($i);
	        $codigo = tagValue(&$item,"cProd");
	        $ean = tagValue(&$item,"cEAN");
	        $nome = tagValue(&$item,"xProd");
	     //   $ncm =  tagValue(&$item,"NCM");
	        $cfop = tagValue(&$item,"CFOP");
	        $unidade = tagValue(&$item,"uCom");
	        $quantidade = tagValue(&$item,"qCom");
	        $valor = tagValue(&$item,"vUnCom");
	        $valorTotal = tagValue(&$item,"vProd");
	        
	    //    $icms = 0;
	    //    $ipi = 0;
	
	    }
	
	
	}
	
	
	function tagValue($node,$tag){
	    return $node->getElementsByTagName("$tag")->item(0)->nodeValue;
	}

//fim xml

//inicio move arquivo

$mes = substr($dataEmissao, 5, 2);
$ano = substr($dataEmissao, 0, 4);

$competencia = $mes . $ano;

$origem_arquivo = $origem . $file;
$destino_arquivo = $destino . $competencia . ‘/’. $file;
$diretorio_destino = $destino . $competencia;

if(!file_exists($diretorio_destino)){
mkdir($destino . $competencia, 0777, true);
}

if (!copy($origem_arquivo , $destino_arquivo)) {
sc_error_message(“erro copiando arquivo” . $origem_arquivo);
}else{

if (!unlink($origem_arquivo))
{
sc_error_message("Erro ao deletar " . $origem);
}

}
//fim move arquivo
}
}

closedir($dir);

}

Aqui utilizamos o componente ACBrNFeMonitor (para windows),
fácil de implementar, free e funciona para versão 2.0 (versão 0.6.1b)

Disponível em: http://acbr.sourceforge.net/drupal/?q=node/36

Clifor Travaini
Solução Informática Jundiaí Ltda.
www.solucaojundiai.com.br

Então clifortravaini,

Eu pensei em utilizar ele, o interessante é que tem o monitor de ECF também... 

Mais não gostei muito do fato de ficar rodando como serviço…
No meu caso, que não tenho pressa!!! Eu estou trabalhando aos poucos para usar o nfephp

Uma das vantagens é que continua no foco de ficar tudo Web e não depende de mais um serviço rodando…

============================================================
Mais me fala…

Para se comunicar com o ACBrNFeMonitor vc gera o arquivo TXT da nota???

VC já está usando a 2.0???

Olá Régis Matos,

Ainda estamos em fase de Homologação, mas provavelmente para
próxima semana estaremos em produção com a versão 2.0 .

Com certeza o nfephp é uma melhor opção, melhor ainda se
desenvolver seu próprio código. O ACBrNFeMonitor tem a limitação
de rodar só para windows e a instalação desktop, mas tudo
dependia do tempo para implantar a Nfe.
Temos a meta de desenvolver nosso próprio código mas não é
nossa prioridade agora.
Utilizo gerando o arquivo .Txt sim, funciona bem.

Clifor Travaini
Solução Informática Jundiaí Ltda.
www.solucaojundiai.com.br

Esse arquivo funciona que é uma beleza…
//printDANFE.php

<?php require_once('/var/www/nfephp2.0/branches/2.0a/libs/DanfeNFePHP.class.php'); $arq = '/var/www/nfephp2.0/branches/2.0a/arquivos/homologacao/enviadas/aprovadas/012011/50110104027253000100550010000339700120282535-procNFe.xml'; if ( is_file($arq) ){ $docxml = file_get_contents($arq); $danfe = new DanfeNFePHP($docxml, 'P', 'A4','/var/www/nfephp2.0/branches/2.0a/images/logo.jpg','I',''); $id = $danfe->montaDANFE(); $teste = $danfe->printDANFE($id.'.pdf','I'); } ?>

Agora quando eu uso o código em um formulário Controle

onScriptInit

require_once(’/var/www/nfephp2.0/branches/2.0a/libs/DanfeNFePHP.class.php’);
$arq = ‘/var/www/nfephp2.0/branches/2.0a/arquivos/homologacao/enviadas/aprovadas/012011/50110104027253000100550010000339700120282535-procNFe.xml’;
if ( is_file($arq) ){
$docxml = file_get_contents($arq);
$danfe = new DanfeNFePHP($docxml, ‘P’, ‘A4’,’/var/www/nfephp2.0/branches/2.0a/images/logo.jpg’,‘I’,’’);
$id = $danfe->montaDANFE();
$teste = $danfe->printDANFE($id.’.pdf’,‘I’);

Não vai nem com reza brava…

Alguém pode dar uma luz

Da a seguinte mensagem de erro

Undefined index: A
Undefined index: B
Undefined index: A
Undefined index: B

PDF error: Some data has already been output, can’t send PDF file

No fórum nfephp,

http://groups.google.com/group/nfephp/browse_thread/thread/c26bdc678e66e295/3570af9986818db5?lnk=gst&q=FPDF+error%3A+Some+data+has+already+been+output#3570af9986818db5

Falam que, não podemos ter nada que imprima os Cabeçalhos
antes do próprio PDF.

Alguém pode me ajudar???

Eu estou sem saber o que fazer para usar o projeto nfephp dentro do ScriptCase.

Estou trabalhando na class NFeTXT2. para gerar o TXT da nota…

Terminei o básico da class… agora está gerando o TXT da nota BLZ.

Agora estou trabalhando para validar os campos conforme o manual…

O trem parece que não tem fim… quanto mais eu leio o manual mais fico longe de terminar rsrsrs

rsrsrs

Importante é que vc está evoluindo!!!

Bom galera já tinha utilizado em um projeto SC a NF-e 1.1 mas qiuando migrou para a 2.0 ainda não atualizei mas não posso deixar de ajudar e vou passar um exemplo de como gerar o XML no caso vc pode implementar e pegar os dados do Mysql e usar a classe do NFEPHP para validar e etc… etc…

<?php /* Script desenvolvido por LIDER Network - Desenvolvimento de Sistemas Entre em contato para alguma sugestão... */ /*Faz a conexão ao bando de dados -> crie um banco de dados qualquer com as variaveis que serao usadas */ include "conecta.php"; /*Abre um arquivo chamado xml_gerado.xml (aconselhavel criar o arquivo manualmente e mudar atributos para gravar e ler 777 recomendado... */ $vai_xml = fopen("xlm_gerado.xml","w+"); /*Começamos a gravar os dados no arquivo xml....*/ fwrite($vai_xml,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");

fwrite($vai_xml,’’);
fwrite($vai_xml,’’);
fwrite($vai_xml,"\n");
fwrite($vai_xml,“35\n”);
fwrite($vai_xml,“518005127\n”);
fwrite($vai_xml,“Venda a vista\n”);
fwrite($vai_xml,“0\n”);
fwrite($vai_xml,“55\n”);
fwrite($vai_xml,“1\n”);
fwrite($vai_xml,“1\n”);
fwrite($vai_xml,“2008-05-06\n”);
fwrite($vai_xml,“2008-05-06\n”);
fwrite($vai_xml,“0\n”);
fwrite($vai_xml,“3550308\n”);
fwrite($vai_xml,“1\n”);
fwrite($vai_xml,“1\n”);
fwrite($vai_xml,“3\n”);
fwrite($vai_xml,“2\n”);
fwrite($vai_xml,“1\n”);
fwrite($vai_xml,“0\n”);
fwrite($vai_xml,“NF-eletronica.com\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");
fwrite($vai_xml,“99999090910270\n”);
fwrite($vai_xml,“NF-e Associacao NF-e\n”);
fwrite($vai_xml,“NF-e\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,“Rua Central\n”);
fwrite($vai_xml,“100\n”);
fwrite($vai_xml,“Fundos\n”);
fwrite($vai_xml,“Distrito Industrial\n”);
fwrite($vai_xml,“3502200\n”);
fwrite($vai_xml,“Angatuba\n”);
fwrite($vai_xml,“SP\n”);
fwrite($vai_xml,“17100171\n”);
fwrite($vai_xml,“1058\n”);
fwrite($vai_xml,“Brasil\n”);
fwrite($vai_xml,“1733021717\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,“123456789012\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");
fwrite($vai_xml,“00000000000191\n”);
fwrite($vai_xml,“DISTRIBUIDORA DE AGUAS MINERAIS\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,“AV DAS FONTES\n”);
fwrite($vai_xml,“1777\n”);
fwrite($vai_xml,“10 ANDAR\n”);
fwrite($vai_xml,“PARQUE FONTES\n”);
fwrite($vai_xml,“5030801\n”);
fwrite($vai_xml,“Sao Paulo\n”);
fwrite($vai_xml,“SP\n”);
fwrite($vai_xml,“13950000\n”);
fwrite($vai_xml,“1058\n”);
fwrite($vai_xml,“BRASIL\n”);
fwrite($vai_xml,“1932011234\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");
fwrite($vai_xml,“99171171000194\n”);
fwrite($vai_xml,“AV PAULISTA\n”);
fwrite($vai_xml,“12345\n”);
fwrite($vai_xml,“TERREO\n”);
fwrite($vai_xml,“CERQUEIRA CESAR\n”);
fwrite($vai_xml,“3550308\n”);
fwrite($vai_xml,“SAO PAULO\n”);
fwrite($vai_xml,“SP\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");
fwrite($vai_xml,“99299299000194\n”);
fwrite($vai_xml,“AV FARIA LIMA\n”);
fwrite($vai_xml,“1500\n”);
fwrite($vai_xml,“15 ANDAR\n”);
fwrite($vai_xml,“PINHEIROS\n”);
fwrite($vai_xml,“3550308\n”);
fwrite($vai_xml,“SAO PAULO\n”);
fwrite($vai_xml,“SP\n”);
fwrite($vai_xml,"\n");
fwrite($vai_xml,’\n’);

fwrite($vai_xml,’\n’);

fwrite($vai_xml,"\n");
fwrite($vai_xml,"\n");

/Fecha o arquivo aberto (não é necessário, mas é bom/
fclose($vai_xml);

/Fecha a conexão com o banco de dados/
mysql_close($conecta);
?>

Apartir daqui já se usaria a validação com NFEPHP mas isso fica pra outra ocasião!!

abraço!

Sou novo aqui… ainda estou pensando em comprar o SC5…
Tenho um planejamento de desenvolver um sistema para pequenos comércios e precisarei desta solução NFe…

O que vocês me dizem?
Esta solução NFe será um novo componente?
Dá para aprender fácil? A ponto de poder ajudar nesta empreitada para este componente?

Estou em dúvidas de compara ou não, pq até hj eu só desenvolvia sites e componentes para estes sites… tudo na unha…

Agradeço a atenção!

Desculpa estar postando neste tópico, mas achei melhor do que criar um novo!
Alguém está utilizando o NFe 2.0 pelo scriptcase?
To precisando desenvolver e não sei por onde começar, alguém poderia me dar uma ajuda?

Tem de exportar um .txt certo?
Como faço para exportar esse txt?

Seu sistema faz o faturamento ?

ainda não regis, por enquanto tem os cadastros básicos como funcionários, produtos, clientes, fornecedores…
Tem um controle de estoque e financeiro, mas nada muito avançado e agora surgiu a necessidade de meu cliente utilizar NFe

Olá

Procure por NFePHP tem como integrar com o SC pegando os dados apartir do banco e gerando o txt ou o xml usando as classes dele, pesquise no forum que deve ter algo assim.

Até!

Bom dia Lider,
Como faço para integrar o NfePHP com o scriptcase?