Eu crio o arquivo da seguinte forma..
Código: Selecionar todos
Nfe_Handle := FCreate("C:\NFE\NFE.TXT")
FWRITELINE(Nfe_Handle,'Nfe.CriarNfe("[Identificacao]')
FWRITELINE(Nfe_Handle,"NaturezaOperacao="+ALLTRIM(Nt_Oper))
FWRITELINE(Nfe_Handle,"Modelo="+ALLTRIM(cMode))
FWRITELINE(Nfe_Handle,"Serie="+ALLTRIM(Serie))
FWRITELINE(Nfe_Handle,"Codigo="+ALLTRIM(STR(Codigonota)))
FWRITELINE(Nfe_Handle,"Numero="+ALLTRIM(STR(CodigoNota)))
FWRITELINE(Nfe_Handle,"Emissao="+DTOC(Emissao))
FWRITELINE(Nfe_Handle,"Saida="+DTOC(Saida))
FWRITELINE(Nfe_handle,"Tipo=1") // FORMATO DO DANFE
FWRITELINE(Nfe_Handle,"FormaPag="+cForma) // forma de pagamento
FWRITELINE(Nfe_Handle,"[Emitente]")
FWRITELINE(Nfe_Handle,"CNPJ="+si_cgc)
FWRITELINE(Nfe_Handle,"IE="+si_IE)
FWRITELINE(Nfe_Handle,"Razao="+ALLTRIM(si_raza))
FWRITELINE(Nfe_Handle,"Fantasia="+ALLTRIM(si_fant))
FWRITELINE(Nfe_Handle,"Fone="+RIGHT(si_fon1,10))
FWRITELINE(Nfe_handle,"CEP="+si_cep)
FWRITELINE(Nfe_Handle,"Logradouro="+si_ende)
FWRITELINE(Nfe_Handle,"Numero="+si_nume)
FWRITELINE(Nfe_Handle,"Complemento=")
FWRITELINE(Nfe_Handle,"Bairro="+ALLTRIM(si_bair))
FWRITELINE(Nfe_Handle,"CidadeCod="+ALLTRIM(si_ibge))
FWRITELINE(Nfe_Handle,"Cidade="+si_nomc)
FWRITELINE(Nfe_Handle,"UF="+ALLTRIM(si_esta))
FWRITELINE(Nfe_Handle,"[Destinatario]")
FWRITELINE(Nfe_Handle,"CNPJ="+de_cgc)
FWRITELINE(Nfe_Handle,"IE="+de_insc)
FWRITELINE(Nfe_Handle,"ISUF=")
FWRITELINE(Nfe_Handle,"NomeRazao="+ALLTRIM(de_raza))
FWRITELINE(Nfe_Handle,"Fone="+RIGHT(de_fon1,10))
FWRITELINE(Nfe_Handle,"CEP="+de_cep)
FWRITELINE(Nfe_Handle,"Logradouro="+de_ende)
FWRITELINE(Nfe_Handle,"Numero="+de_nume)
FWRITELINE(Nfe_Handle,"Complemento=")
FWRITELINE(Nfe_Handle,"Bairro="+de_bair)
FWRITELINE(Nfe_Handle,"CidadeCod="+ALLTRIM(de_ibge))
FWRITELINE(Nfe_Handle,"Cidade="+ALLTRIM(de_nome))
FWRITELINE(Nfe_Handle,"UF="+de_esta)
nProdu := 1
SELECT Tabela
SET ORDER TO 1
SEEK n_tipo+STRZERO(n_Codi,6)
DO WHILE !EOF() .AND. n_tipo == t_tipo .AND. n_codi == t_nota
FWRITELINE(Nfe_Handle,"[Produto"+STRZERO(nProdu,3)+"]")
FWRITELINE(Nfe_Handle,"CFOP="+ALLTRIM(t_cfop))
FWRITELINE(Nfe_Handle,"Codigo="+alltrim(STR(t_prod)))
FWRITELINE(Nfe_Handle,"Descricao="+ALLTRIM(t_nome))
FWRITELINE(Nfe_Handle,"Unidade="+IIF(t_unid))
FWRITELINE(Nfe_Handle,"Quantidade="+ALLTRIM(STR(t_quan,10,2)))
FWRITELINE(Nfe_Handle,"ValorUnitario="+ALLTRIM(STR(t_valo,10,2)))
FWRITELINE(Nfe_Handle,"ValorTotal="+ALLTRIM(STR(t_quan*t_valo,10,2)))
FWRITELINE(Nfe_Handle,"[ICMS"+STRZERO(nProdu,3)+"]")
FWRITELINE(Nfe_Handle,"CST="+t_cts)
FWRITELINE(Nfe_Handle,"ValorBase="+ALLTRIM(STR(t_quan*t_valo,10,2)))
FWRITELINE(Nfe_Handle,"Aliquota="+ALLTRIM(STR(t_icm,2),10,2))
nIcms := (((t_quan*t_valo)*t_icm)/100)
FWRITELINE( Nfe_Handle,"Valor="+ALLTRIM(STR(((t_quan*t_valo)*t_icm)/100),10,2) )
nProdu ++
SKIP
ENDDO
vbasecalc:=t_totp+t_fret-(t_desv+t_stro)
if t_base>0
vbasecalc:=round((vbasecalc*t_base)/100,2)
endif
nBase := IIF(t_icm>0,((vbasecalc/100)*t_icm),0)
FWRITELINE(Nfe_Handle,"[Total]")
FWRITELINE(Nfe_Handle,"BaseICMS="+ALLTRIM(str(vBaseCalc,10,2)))
FWRITELINE(Nfe_Handle,"ValorICMS="+ALLTRIM(str(nBase,10,2)))
FWRITELINE(Nfe_Handle,"ValorProduto="+ALLTRIM(str(t_totp,10,2)))
FWRITELINE(Nfe_Handle,"ValorFrete="+ALLTRIM(str(t_fret,10,2)))
FWRITELINE(Nfe_Handle,"ValorNota="+ALLTRIM(str(t_totp)))
IF t_tran > 0
FWRITELINE(Nfe_Handle,"[Transportador]")
FWRITELINE(Nfe_Handle,"Freteporconta="+IIF(t_sifr=="1","0","1"))
FWRITELINE(Nfe_Handle,"CnpjCpf="+(r_cgc),{".","/","-"})
FWRITELINE(Nfe_Handle,"NomeRazao="+ALLTRIM(r_raza))
FWRITELINE(Nfe_Handle,"IE="+ALLTRIM(r_insc))
FWRITELINE(Nfe_Handle,"Endereco="+ALLTRIM(r_ende))
FWRITELINE(Nfe_Handle,"Cidade="+r_nome)
FWRITELINE(Nfe_Handle,"UF="+r_esta)
FWRITELINE(Nfe_Handle,"ValorServico="+ALLTRIM(str(r_fret,10,2)))
FWRITELINE(Nfe_Handle,"CidadeCod="+r_ibge)
FWRITELINE(Nfe_Handle,"CFOP="+r_CFO)
FWRITELINE(Nfe_Handle,"Placa="+ALLTRIM(tira_char(r_plac,{"-"})))
FWRITELINE(Nfe_Handle,"ufplaca="+r_ufpl)
FWRITELINE(Nfe_Handle,"[Volume001]")
FWRITELINE(Nfe_Handle,"quantidade="+ALLTRIM(STR(r_volu,5)))
FWRITELINE(Nfe_Handle,"Especie="+ALLTRIM(r_espe))
FWRITELINE(Nfe_Handle,"Marca="+r_marc)
FWRITELINE(Nfe_Handle,"Numeracao="+ALLTRIM(STR(r_nume,5)))
FWRITELINE(Nfe_Handle,"PesoLiquido="+STR(r_liqu,10,2))
FWRITELINE(Nfe_Handle,"PesoBruto="+STR(r_brut,10,2))
ENDIF
FOR Parc :=1 TO LEN(aRParc)
FWRITELINE(Nfe_Handle,"[DUPLICATA"+strzero(Parc,3)+"]")
FWRITELINE(Nfe_Handle,"Numero="+aRTipo[parc]+"-"+strzero(aRdocu[parc],6)+"/"+STRZERO(aRparc[parc]))
FWRITELINE(Nfe_Handle,"DataVencimento="+DTOC(aRvenc[parc]))
FWRITELINE(Nfe_Handle,"Valor="+ALLTRIM(STR(aRvalo[parc],10,2)))
NEXT parc
IF !EMPTY(nf_obs1)
FWRITELINE(nfe_handle,"[InfAdic001]")
FWRITELINE(nfe_handle,"Campo=Obs:")
FWRITELINE(nfe_handle,"Texto="+t_obs1)
ENDIF
IF !EMPTY(nf_obs2)
FWRITELINE(nfe_handle,"[InfAdic002]")
FWRITELINE(nfe_handle,"Campo=Obs:")
FWRITELINE(nfe_handle,"Texto="+t_obs2)
ENDIF
IF !EMPTY(nf_obs3)
FWRITELINE(nfe_handle,"[InfAdic003]")
FWRITELINE(nfe_handle,"Campo=Obs:")
FWRITELINE(nfe_handle,"Texto="+t_obs3)
ENDIF
IF !EMPTY(nf_obs4)
FWRITELINE(nfe_handle,"[InfAdic004]")
FWRITELINE(nfe_handle,"Campo=Obs:")
FWRITELINE(nfe_handle,"Texto="+t_obs4)
ENDIF
IF !EMPTY(nf_obs5)
FWRITELINE(nfe_handle,"[InfAdic005]")
FWRITELINE(nfe_handle,"Campo=Obs:")
FWRITELINE(nfe_handle,"Texto="+t_obs5)
ENDIF
IF !EMPTY(nf_obs6)
FWRITELINE(nfe_handle,"[InfAdic006]")
FWRITELINE(nfe_handle,"Campo=Obs:")
FWRITELINE(nfe_handle,"Texto="+t_obs6)
ENDIF
FWRITELINE(nFE_hANDLE,",1)")
FCLOSE(Nfe_Handle)
Alterei algumas coisas pra melhorar a compreensão do código fonte.
Espero que entenda.