E ai pessoal tudo certo?
Bom desta vez eu estou criando um tópico não para ser ajudado, mas para ajudar, desenvolvi algo simples e gostaria de compartilhar com o pessoal, fiz um gerador de arquivo texto para NFe, a única coisa que será preciso fazer é fornecer as informações da nota e ele ira gerar a estrutura da NFe em uma String e a partir dessa String é só gravar o arquivo texto, esse gerador é da versão 2.0 da NFe, vou postar aqui o .jar e um exemplo de uso.
***NotaFiscal nf eh minha classe responsável pelo armazenamento dos dados da nota fiscal no banco
Para preencher corretamente os campos é aconselhavel que use o manual de integração do contribuinte a partir da página 107, disponivel no link abaixo:
http://www.fazenda.gov.br/confaz/confaz/Atos/Atos_Cotepe/2009/Manual_NFe_v401_2009-11-04.pdf
os campos das classe segue a Identificação encontrada neste manual por exemplo:
//02 é o ID do campo
//Versao é o nome do campo
a.setA02Versao("2.00");
Também é aconselhável que use Manual de layout TXT-NF-e v 2.0.0, para ir verificando os campos porque tem alguns campos que não devem ser informados no arquivo texto da nfe um exemplo é o A03 Id deve ser apenas informado no XML.
o Layout do txt esta no link abaixo:
http://www.emissornfehom.fazenda.sp.gov.br/v2/docs/[Emissor_NF-e]_Manual_de_layout_TXT-NF-e_v2.0.0.pdf
private void gerarCabecalho(){
cabecalho = "NOTA FISCAL|"
+"QTDE DE NOTAS"
+System.getProperty ("line.separator");;
}
private Nfe_Icms gerarTributacao(Tributacao tri, String origem, double vlrBcSt, double icmsSt){
Nfe_Icms n = new Nfe_Icms();
if (tri.getTriCodigo()==500){
n.setN11Orig(origem);
n.setN12ACSosn(String.valueOf(tri.getTriCodigo()));
n.setN26Vbcstret(formatarDouble(vlrBcSt).replace(",", "."));
n.setN27Vicmsstret(formatarDouble(icmsSt).replace(",", "."));
}else if (tri.getTriCodigo()==300 || tri.getTriCodigo()==400){
n.setN11Orig(origem);
n.setN12ACSosn(String.valueOf(tri.getTriCodigo()));
}
return n;
}
private void gerarCorpo(NotaFiscal nf){
Nfe_Dados a = new Nfe_Dados();
Nfe_Identificacao b = new Nfe_Identificacao();
Nfe_IdentificacaoEmitente c = new Nfe_IdentificacaoEmitente();
Nfe_IdentificacaoDestinario e = new Nfe_IdentificacaoDestinario();
Nfe_ProdutosServicos i = new Nfe_ProdutosServicos();
Nfe_Icms n = new Nfe_Icms();
Nfe_Pis q = new Nfe_Pis();
Nfe_Confins s = new Nfe_Confins();
Nfe_Issqn u = new Nfe_Issqn();
Nfe_ValoresTotais w = new Nfe_ValoresTotais();
Nfe_InformacoesTransporte x = new Nfe_InformacoesTransporte();
Nfe_InformacoesAdicionais z = new Nfe_InformacoesAdicionais();
ConstruirTxt build = new ConstruirTxt();
//GRUPO A
a.setA02Versao("2.00");
a.setA03Id("NFe");
corpo += build.NfeDados(a);
//GRUPO B
b.setB02Cuf("35");
b.setB04Natop(nf.getNfNatureza());
b.setB11Tpnf(nf.getNfTipoDocumento().toString());
b.setB05Indpag(nf.getNfFormaPagto().toString());
b.setB06Mod("55");
b.setB07Serie("1");
b.setB08Nnf(String.valueOf(nf.getNfCodigo()));
if (nf.getNfDtemissao()!=null)
b.setB09Demi(new SimpleDateFormat("yyyy-MM-dd").format(nf.getNfDtemissao()));
if (nf.getNfDtsaida()!=null)
b.setB10Dsaient(new SimpleDateFormat("yyyy-MM-dd").format(nf.getNfDtsaida()));
b.setB12Cmunfg("3541406");
b.setB21Tpimp("1");
b.setB22Tpemis("1");
b.setB24Tpamb("1");
b.setB25Finnfe("1");
b.setB26Procemi("3");
corpo += build.NfeIdentificacao(b);
//GRUPO C
c.setC02Cnpj("00000000000000");
c.setC17Ie("00000000000");
c.setC19Im("00000");
c.setC20Cnae("0000000");
c.setC03Xnome("NOME DA EMPRESA");
c.setC06Xlgr("RUA PEDRO DE OLIVEIRA COSTA");
c.setC07Nro("000");
c.setC09Bairro("CENTRO");
c.setC10Cmun("1234569");
c.setC11Xmun("MUNICIPIO");
c.setC12Uf("SP");
c.setC13Cep("000000000");
c.setC14Cpais("1058");
c.setC15Xpais("BRASIL");
c.setC21Crt("1");
corpo += build.NfeIdentificacaoEmitente(c);
Cidades cid;
//GRUPO E
e.setE04Xnome(nf.getNfNomecliente());
if (nf.getNfTipopessoa()=='J'){
e.setE02Cnpj(nf.getNfDocumento());
}else{
e.setE03Cpf(nf.getNfDocumento());
}
cid = (Cidades) sessao.get(Cidades.class, nf.getCidadesByCidCliente().getCidCodigo());
Estados uf = (Estados) sessao.get(Estados.class, cid.getEstados().getEstCodigo());
e.setE06Xlgr(nf.getNfEndereco());
e.setE07Nro(String.valueOf(nf.getNfNumero()));
e.setE09Xbairro(nf.getNfBairro());
e.setE10Cmun(String.valueOf(cid.getCidCodigo()));
e.setE11Xmun(cid.getCidDescricao());
e.setE12Uf(uf.getEstSigla());
e.setE14Cpais("1058");
e.setE15Xpais("BRASIL");
if (nf.getNfIsento()!='S')
e.setE17Ie(nf.getNfIe());
corpo += build.NfeIdentificacaoDestinario(e);
int nItem = 1;
Produtos prod = null;
Tributacao tri = null;
double totIcmsSt = 0;
double totBcSt = 0;
double totProd = 0;
double totDesc = 0;
double totBc = 0;
double totIcms = 0;
double totIss = 0;
double totBcServico = 0;
double totIpi = 0;
double totServ = 0;
String hql = "from ProdutosNotaFiscal where id.nfCodigo = "+nf.getNfCodigo();
List list = ManipularHQL.executeHQLQuery(hql,sessao);
sessao = HibernateUtil.getSessionFactory().openSession();
sessao.beginTransaction();
for (Object obj : list){
ProdutosNotaFiscal pnf = (ProdutosNotaFiscal)obj;
prod = (Produtos) sessao.get(Produtos.class, pnf.getProdutos().getProCodigo());
//GRUPO H
i.setH02Nitem(String.valueOf(nItem++));
//GRUPO I
double desconto = 0;
if (nf.getNfDescontosProdutos()!=null)
desconto = nf.getNfDescontosProdutos();
i.setI02Cprod(String.valueOf(prod.getProCodigo()));
i.setI03Cean(prod.getProEan().replace("-", ""));
i.setI04Xprod(prod.getProDescricao());
i.setI05Ncm(prod.getProNbm());
i.setI08Cfop(nf.getNfCfop().toString());
i.setI09Ucom(prod.getProUnidcomercial());
i.setI10Qcom(formatarDouble(pnf.getPnfQtde()).replace(",", ".")+"00");
i.setI10aVuncom(formatarDouble(pnf.getPnfVlr()).replace(",", ".")+"00");
i.setI11Vprod(formatarDouble((pnf.getPnfQtde() * pnf.getPnfVlr() )).replace(",", "."));
i.setI12Ceantrib(prod.getProEan().replace("-", ""));
i.setI13Utrib(prod.getProUnidcomercial());
i.setI14Qtrib(formatarDouble(pnf.getPnfQtde()).replace(",", ".")+"00");
i.setI14aVuntrib(formatarDouble(pnf.getPnfVlr()).replace(",", ".")+"00");
// i.setI17Vdesc(formatarDouble(desconto).replace(",", ".")+"00");
i.setI17bIndtot("1");
corpo += build.NfeProdutosServicos(i);
//GRUPO N
tri = pnf.getTributacao();
double bcSt = 0;
double icmsSt = 0;
if (pnf.getPnfBcst()!=null){
bcSt = pnf.getPnfBcst();
}
if (pnf.getPnfIcmsst()!=null){
icmsSt = pnf.getPnfIcmsst();
}
n = gerarTributacao2(tri, pnf.getPnfOrigem().toString(), bcSt, icmsSt);
corpo += build.NfeIcms(n);
totBcSt += bcSt;
totIcmsSt += icmsSt;
totProd += pnf.getPnfQtde()*pnf.getPnfVlr();
totDesc = desconto;
//GRUPO Q
q.setQ06Cst("99");
q.setQ07Vbc("0.00");
q.setQ08Ppis("0.00");
q.setQ10Qbcprod("0.00");
q.setQ11Valiqprod("0.00");
q.setQ09Vpis("0.00");
corpo += build.NfePis(q);
//LINHA S
s.setS06Cst("99");
s.setS07Vbc("0.00");
s.setS08Pconfins("0.00");
s.setS09Qbcprod("0.00");
s.setS10Valiqprod("0.00");
s.setS11Vconfins("0.00");
corpo += build.NfeConfins(s);
}
// totProd += totIcmsSt;
hql = "from ServicosNotaFiscal where id.nfCodigo = "+nf.getNfCodigo();
list = ManipularHQL.executeHQLQuery(hql,sessao);
sessao = HibernateUtil.getSessionFactory().openSession();
sessao.beginTransaction();
for (Object obj : list){
ServicosNotaFiscal snf = (ServicosNotaFiscal)obj;
Servicos ser = (Servicos) sessao.get(Servicos.class, snf.getServicos().getSerCodigo());
//GRUPO H
i.setH02Nitem(String.valueOf(nItem++));
//GRUPO I
double desconto = 0;
if (nf.getNfDescontosServicos()!=null)
desconto = nf.getNfDescontosProdutos();
i.setI02Cprod(String.valueOf(ser.getSerCodigo()));
i.setI04Xprod(ser.getSerDescricao());
i.setI05Ncm("99");
i.setI08Cfop(nf.getNfCfop().toString());
i.setI09Ucom("SERVIC");
i.setI10Qcom("1.0000");
i.setI10aVuncom(formatarDouble(snf.getSnfVlr()).replace(",", ".")+"00");
i.setI11Vprod(formatarDouble(snf.getSnfVlr()).replace(",", "."));
i.setI13Utrib("SERVIC");
i.setI14Qtrib("1.0000");
i.setI14aVuntrib(formatarDouble(snf.getSnfVlr()).replace(",", ".")+"00");
i.setI17bIndtot("1");
corpo += build.NfeProdutosServicos(i);
//GRUPO U
double bc = 0;
double aliquota = 0;
double iss = 0;
if (snf.getSnfBc()!=null){
bc = snf.getSnfBc();
}
if (snf.getSnfAliquota()!=null){
aliquota = snf.getSnfAliquota();
}
if (snf.getSnfIssqn()!=null){
iss = snf.getSnfIssqn();
}
u.setU02Vbc(formatarDouble(bc).replace(",", "."));
u.setU03Valiq(formatarDouble(aliquota).replace(",", "."));
u.setU04Vissqn(formatarDouble(iss).replace(",", "."));
u.setU05Cmunfg(String.valueOf(snf.getCidades().getCidCodigo()));
u.setU06Clistserv(snf.getSnfListaservico().toString());
u.setU07Csittrib(snf.getSnfTributacao().toString());
corpo += build.NfeIssqn(u);
totIss += iss;
totBcServico += bc;
totServ += snf.getSnfVlr();
totDesc = desconto;
//GRUPO Q
q.setQ06Cst("99");
q.setQ07Vbc("0.00");
q.setQ08Ppis("0.00");
q.setQ10Qbcprod("0.00");
q.setQ11Valiqprod("0.00");
q.setQ09Vpis("0.00");
corpo += build.NfePis(q);
//LINHA S
s.setS06Cst("99");
s.setS07Vbc("0.00");
s.setS08Pconfins("0.00");
s.setS09Qbcprod("0.00");
s.setS10Valiqprod("0.00");
s.setS11Vconfins("0.00");
corpo += build.NfeConfins(s);
}
//GRUPO W
w.setW03Vbc(formatarDouble(totBc).replace(",", "."));
w.setW04Vicms(formatarDouble(totIcms).replace(",", "."));
w.setW05Vbcst(formatarDouble(totBcSt).replace(",", "."));
w.setW06Vst(formatarDouble(totIcmsSt).replace(",", "."));
w.setW07Vprod(formatarDouble(totProd).replace(",", "."));
w.setW10Vdesc(formatarDouble(totDesc).replace(",", "."));
w.setW16Vnf(formatarDouble(totProd+totServ-totDesc).replace(",", "."));
if (totIss>0){
w.setW18Vserv(formatarDouble(totServ).replace(",", "."));
w.setW19Vbc(formatarDouble(totBcServico).replace(",", "."));
w.setW20Viss(formatarDouble(totIss).replace(",", "."));
w.setW21Vpis("0.00");
w.setW22Vconfins("0.00");
}
corpo += build.NfeValoresTotais(w);
//GRUPO X
x.setX02Modfrete(nf.getNfModalidadefrete().toString());
if (nf.getNfTransTipopessoa()=='F'){
x.setX05Cpf(nf.getNfTransDocumento());
}else{
x.setX04Cnpj(nf.getNfTransDocumento());
}
x.setX06Xnome(nf.getNfTransportador());
String endereco = "";
if (nf.getNfTransEndereco()!=null && !nf.getNfTransEndereco().isEmpty()){
endereco = String.valueOf(nf.getNfTransEndereco());
if (nf.getNfTransNumero()!=null){
endereco += ", "+String.valueOf(nf.getNfTransNumero());
}
if (nf.getNfTransBairro()!=null && !nf.getNfTransBairro().isEmpty()){
endereco += ", "+nf.getNfTransBairro();
}
}
String cidade = "";
String estado = "";
if (nf.getCidadesByCidTransporte()!=null){
cidade = String.valueOf(nf.getCidadesByCidTransporte().getCidDescricao());
estado = nf.getCidadesByCidTransporte().getEstados().getEstSigla();
}
x.setX08Xender(endereco);
x.setX09Xmun(cidade);
x.setX10Uf(estado);
corpo += build.NfeInformacoesTransporte(x);
//GRUPO Z
z.setZ03Infcpl("DOCUMENTO EMITIDO POR ME OU EPP OPTANTE PELO SIMPLES NACIONAL,NÃO GERA DIREITO A CRÉDITO FISCAL DE IPI.");
corpo += build.NfeInformacoesAdicionais(z);
}