Não consegui desenvolver o processo de integração da NFS-e via XML. A solução que encontrei foi gerar um arquivo TXT e importar no site da prefeitura. Após a importação, é gerado um lote e a nota fiscal pode ser impressa direto do site e o arquivo XML é salvo na pasta determinada, onde faço a conferência e libero a NFS-e como emitida.
Irei deixar o código abaixo, pois como tive muitos problemas com o manual que não está completo, na esperança que possa ajudar!
Código: Selecionar todos
///////////////////////////////////////////////////////////////////////////////
//
// Rotina para montagem do arquivo da NFS-e
//
// Autor: Julio Cezar Costa Elias
// Lingagem: xBase
// Plataformas: DOS, Windows
// Observacoes: O arquivo tem que ter campos sepadarados por virgulas (,)
// : Os dados dos campos tem que estar entre aspas ("")
// : As colunas obrigatorias nao podem ficar em branco
//////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION CRIANFSE()
LOCAL nData:=RIGHT(DTOC(AL_SAIDA->datemi),4)+"-"+SUBS(DTOC(AL_SAIDA->datemi),4,2)+"-"+LEFT(DTOC(AL_SAIDA->datemi),2)
LOCAL nMeses:={"Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"}
LOCAL nAno:=RIGHT(DTOC(AL_SAIDA->datemi),4)
LOCAL nPath:=AW_NFSE+"\TXT\"+nMeses[MONTH(AL_SAIDA->datemi)]+nAno
LOCAL rPath:=AW_NFSE+"\XML\"+nMeses[MONTH(AL_SAIDA->datemi)]+nAno
LOCAL nDescricao:=ALLTRIM(AL_SAIDA->descm1)+ALLTRIM(AL_SAIDA->descm2)+ALLTRIM(AL_SAIDA->descm3)
LOCAL nServico:=IIF(aw_simples="S","14.01","14.01")
LOCAL nAliquota:=IIF(aw_simples="S","0.02","0.05")
//Verifica se existe a pasta para salvar o arquivo
if !ISDIRECTORY(nPath+"\")
nRet:=MAKEDIR(nPath+"\")
end
if !ISDIRECTORY(rPath+"\")
nRet:=MAKEDIR(rPath+"\")
end
sele AL_CIDAD
DBSETORDER(1)
DBSEEK(AL_CLIEN->codmun)
sele AL_CLIEN
DBSETORDER(1)
DBSEEK(AL_SAIDA->codcli)
SELE AL_SAIDA
if AL_CLIEN->indent="01" .or. AL_CLIEN->indent="04"
nCGC=ALLTRIM(AL_CLIEN->CPFCGC)
nINS=ALLTRIM(AL_CLIEN->INSEST)
else
nCGC=ALLTRIM(AL_CLIEN->CPFCGC)
nINS="ISENTO"
end
do whil AT(".",nCGC)#0
nCGC=STUFF(nCGC,AT(".",nCGC),1,"")
end
do whil AT("-",nCGC)#0
nCGC=STUFF(nCGC,AT("-",nCGC),1,"")
end
do whil AT("/",nCGC)#0
nCGC=STUFF(nCGC,AT("/",nCGC),1,"")
end
do whil AT(".",nINS)#0
nINS=STUFF(nINS,AT(".",nINS),1,"")
end
do whil AT("-",nINS)#0
nINS=STUFF(nINS,AT("-",nINS),1,"")
end
do whil AT("/",nINS)#0
nINS=STUFF(nINS,AT("/",nINS),1,"")
end
do whil AT("P",nINS)#0
nINS=STUFF(nINS,AT("P",nINS),1,"")
end
do whil AT("R",nINS)#0
nINS=STUFF(nINS,AT("R",nINS),1,"")
end
do whil AT(":",nINS)#0
nINS=STUFF(nINS,AT(":",nINS),1,"")
end
if LEN(ALLTRIM(nINS))<14
nINS=nINS+SPAC(14-LEN(ALLTRIM(nINS)))
end
nTEL=ALLTRIM(AL_CLIEN->TELEF1)
do whil AT("(",nTEL)#0
nTEL=STUFF(nTEL,AT("(",nTEL),1,"")
end
do whil AT(")",nTEL)#0
nTEL=STUFF(nTEL,AT(")",nTEL),1,"")
end
do whil AT("-",nTEL)#0
nTEL=STUFF(nTEL,AT("-",nTEL),1,"")
end
nTEL=ALLTRIM(nTEL)
if LEFT(nTEL,1)="0"
nTEL=SUBS(nTEL,2,LEN(nTEL))
end
xTxt := ["]+AL_SAIDA->codigo+[",] // Numero do RPS
xTxt += ["]+ALLTRIM(AL_SAIDA->serien)+[",] // Numero de Serie do RPS
xTxt += ["1",] // Tipo do RPS 1-RPS, 2-Nota Fiscal Conjugada, 3-Cupom
xTxt += ["]+nData+[",] // Data Emissao formato AAAA-MM-DD
xTxt += ["1",] // Natureza de operacao: 1 - Tributacao no municipio
xTxt += ["",] // Codigo do Regime Especial
xTxt += ["]+IIF(aw_simples="S","1","N")+[",] // Optante de simples Nacional: 1-Sim, 2-Nao
xTxt += ["2",] // Incentivo Cultural: 1-Sim, 2-Nao
xTxt += ["1",] // Status do RPS: 1-Normal, 2-Cancelado
xTxt += ["",] // Numero do RPS substituida
xTxt += ["",] // Numero Serie RPS substituida
xTxt += ["",] // Tipo RPS substituida
xTxt += ["]+ALLTRIM(STR(AL_SAIDA->vlrmao,15,2))+[",] // Valor do Servico
xTxt += ["0",] // Deducoes
xTxt += ["0",] // Valor do PIS
xTxt += ["0",] // Valor do COFINS
xTxt += ["0",] // Valor do INSS
xTxt += ["0",] // Valor do IR
xTxt += ["0",] // Valor do CSLL
xTxt += ["2",] // Indicador de retencao de ISS 1-SIM, 2-NAO
xTxt += ["]+ALLTRIM(STR(0,15))+[",] // Valor do ISS
xTxt += ["0",] // Outras Retencoes
xTxt += ["]+ALLTRIM(STR(AL_SAIDA->vlrmao,15,2))+[",] // Base de Calculo
xTxt += ["]+nAliquota+[",] // Aliquota
xTxt += ["0",] // Valor Liquido
xTxt += ["0",] // Valor do ISS Retido
xTxt += ["0",] // Desconto Condicionado
xTxt += ["0",] // Desconto Incondicionado
xTxt += ["]+nServico+[",] // Item da Lista de Servico
xTxt += ["",] // Codigo CNAE
xTxt += ["",] // CodigoTributacao do Municipio
xTxt += ["]+nDescricao+[",] // Descriminacao do servico
xTxt += ["3149903",] // Codigo Municipio IBGE
xTxt += ["]+STRZERO(VAL(RETNUM(AL_EMPRE->CGCEMP)),14)+[",] // CNPJ do Prestador
xTxt += ["]+ALLTRIM(AL_EMPRE->insmun)+[",] // Inscricao Municipal do Prestador
xTxt += ["]+nCGC+[",] // CNPJ/CPF Cliente
xTxt += ["",] // Inscricao Municipal do Tomador
xTxt += ["]+ALLTRIM(AL_CLIEN->nomecl)+[",] // Razao Social do cliente
xTxt += ["]+ALLTRIM(AL_CLIEN->endere)+[",] // Endereco do Cliente
xTxt += ["]+ALLTRIM(AL_CLIEN->numero)+[",] // Numero do Endereco
xTxt += ["",] // Complemento
xTxt += ["]+ALLTRIM(AL_CLIEN->bairro)+[",] // Bairro do Cliente
xTxt += ["]+AL_CLIEN->codmun+[",] // Codigo Municipio-IBGE do cliente
xTxt += ["]+AL_CLIEN->estado+[",] // UF do Cliente
xTxt += ["]+LEFT(AL_CLIEN->cepcli,2)+SUBS(AL_CLIEN->cepcli,4,3)+RIGHT(AL_CLIEN->cepcli,3)+[",] // Cep do Cliente
xTxt += ["]+RETNUM(AL_CLIEN->telef1)+[",] // Telefone do cliente
xTxt += ["]+ALLTRIM(AL_CLIEN->emaild)+[",] // E-mail do Cliente
xTxt += ["",] // Racao social intermediario
xTxt += ["",] // CNPJ Intermediario
xTxt += ["",] // Inscricao Municipal intermediario
xTxt += ["",] // Codigo Obra
xTxt += [""] // Art
varq=nPath+"\SE"+AL_SAIDA->codigo+".TXT"
SETPRC(0,0)
set print on
set conso off
set print to &vArq
?? xTxt
? ""
set cons on
set print off
set print to
MENSAGEM("Nota fiscal de servico criada com SUCESSO!",4)
retu