Integração ERP NFS-e - Abrasf - Retorno Automático
O ERP gera o arquivo eletrônico no formato Abrasf com a opção de assiná-lo digitalmente e possibilita a integração com emissores que trabalham com o formato Abrasf.
- Sistema ERP instalado e configurado;
- Software emissor instalado e configurado;
- Sapiens Web instalado e configurado;
- Disposição de acesso na proprietária para ERP SID e NFS-e.
Na tela F070FVE, por meio do campo Integração NFS-e é possível definir o tipo de integração utilizado. Nesse caso, opção 4 - Padrão (ABRASF) - Retorno Automático.
Integração com o formato Abrasf:
Nome | Descrição |
GER-000ABRASF1 | Disponibiliza uma série de campos para manipulação de informações via regra. |
GER-000ABRASF2 | Inibe a geração automática do arquivo eletrônico pelo sistema para Notas Fiscais de Serviço Eletrônicas padrão Abrasf, permitindo a customização da geração do arquivo eletrônico por meio da regra associada ao identificador GER-000ABRASF1. |
VEN-140NECER01 | Desliga a assinatura digital do arquivo eletrônico. |
VEN-140NECER02 | Solicita o certificado digital a cada nota emitida. |
Definir Alfa ArquivoXML;
Definir Alfa XmlServico;
Definir Alfa XmlPrestador;
Definir Alfa XmlTomador;
Definir Alfa XmlIntServico;
Definir Alfa XmlConstCivil;
Definir Alfa vNomeArquivo;
Definir Alfa vDiretorioGravacao;
Definir NUMERO vArquivo;
Definir Numero VSIntCodEmp;
Definir Alfa VUIntCodEmp;
Definir Numero VSIntCodFil;
Definir Alfa VUIntCodFil;
Definir Alfa VSIntIidRps; @InfRps - Id @
@Informações do Lote @
Definir Alfa XCambas ;
Definir Cursor cur_E078Ult;
Definir Alfa VUIntIidLot; @ Id do lote @
Definir Numero VSIntUltLot; @ Numero do ultimo lote gravado para incrementar @
Definir Alfa VUIntNumLot; @ Número do lote @
Definir Alfa VUIntEmiCgc; @ Cnpj @
Definir Alfa VUIntInsMun; @ Inscrição Municipal @
Definir Alfa VUIntQtdRps; @ Quantidade de RPS @
@Informações RPS @
Definir Numero VSIntNumRps; @ Identificação RPS - Número @
Definir Alfa VUIntNumRps; @ Identificação RPS - Número para conversão @
Definir Alfa VSIntSnfRps; @ Identificação RPS - Série Legal @
Definir Numero VSIntTipRps; @ Identificação RPS - Tipo @
Definir Alfa VUIntTipRps; @ Identificação RPS - Tipo para conversão @
Definir Alfa VSIntDatEmi; @ DataEmissao @
Definir Alfa VSIntNatOpe; @ NaturezaOperacao @
Definir Numero VSIntRegEtr; @ RegimeEspecialTributacao @
Definir Alfa VUIntRegEtr; @ RegimeEspecialTributacao para conversão @
Definir Numero VSIntOptSnc; @ OptanteSimplesNacional @
Definir Alfa VUIntOptSnc; @ OptanteSimplesNacional para conversão @
Definir Alfa VSIntIncCul; @ IncentivadorCultural @
Definir Numero VSIntStaTus; @ Status @
Definir Alfa VUIntStaTus; @ Status para conversão @
@Serviço - Valores @
Definir Numero VSIntVlrBru; @ ValorServicos @
Definir Alfa VUIntVlrBru; @ ValorServicos para conversão @
Definir Numero VSIntVlrDed; @ ValorDeducoes @
Definir Alfa VUIntVlrDed; @ ValorDeducoes para conversão @
Definir Numero VSIntVlrPit; @ ValorPis @
Definir Alfa VUIntVlrPit; @ ValorPis para conversão @
Definir Numero VSIntVlrCrt; @ ValorCofins @
Definir Alfa VUIntVlrCrt; @ ValorCofins para conversão @
Definir Numero VSIntVlrIns; @ ValorInss @
Definir Alfa VUIntVlrIns; @ ValorInss para conversão @
Definir Numero VSIntVlrIrf; @ ValorIr @
Definir Alfa VUIntVlrIrf; @ ValorIr para conversão @
Definir Numero VSIntVlrCsl; @ ValorCsll @
Definir Alfa VUIntVlrCsl; @ ValorCsll para conversão @
Definir Numero VSIntVlrIss; @ ValorIss @
Definir Alfa VUIntVlrIss; @ ValorIss para conversão @
Definir Numero VSIntIndIsr; @ IssRetido @
Definir Alfa VUIntIndIsr; @ IssRetido para conversão @
Definir Numero VSIntVlrIsr; @ ValorIssRetido @
Definir Alfa VUIntVlrIsr; @ ValorIssRetido para conversão @
Definir Numero VSIntVlrOur; @ OutrasRetencoes @
Definir Alfa VUIntVlrOur; @ OutrasRetencoes para conversão @
Definir Numero VSIntVlrBis; @ BaseCalculo @
Definir Alfa VUIntVlrBis; @ BaseCalculo para conversão @
Definir Numero VSIntPerIss; @ Aliquota @
Definir Alfa VUIntPerIss; @ Aliquota para conversão @
Definir Numero VSIntVlrLiq; @ ValorLiquidoNfse @
Definir Alfa VUIntVlrLiq; @ ValorLiquidoNfse para conversão @
Definir Numero VSIntVlrDsc; @ DescontoIncondicionado @
Definir Alfa VUIntVlrDsc; @ DescontoIncondicionado para conversão @
Definir Numero VSIntDscCon; @ DescontoCondicionado @
Definir Alfa VUIntDscCon; @ DescontoCondicionado para conversão @
@Serviço @
Definir Alfa VSIntSerImp; @ ItemListaServico @
Definir Alfa VSIntCodCna; @ Código CNAE @
Definir Alfa VSIntTriMun; @ CodigoTributacaoMunicipio @
Definir Alfa VSIntDesSer; @ Discriminacao @
Definir Numero VSIntCodMun; @ CodigoMunicipio @
Definir Alfa VUIntCodMun; @ CodigoMunicipio para conversão @
@Prestador @
Definir Alfa VSIntPreCgc; @ Cnpj @
Definir Alfa VSIntPreIsm; @ InscricaoMunicipal @
@Tomador @
Definir Alfa VSIntTomCgc; @ Cpf/Cnpj @
Definir Alfa VSIntTomIsm; @ InscricaoMunicipal @
Definir Alfa VSIntTomNom; @ RazaoSocial @
Definir Alfa VSIntTomEnd; @ Endereco @
Definir Alfa VSIntTomNen; @ Endereço - Numero @
Definir Alfa VSIntTomCpl; @ Endereco - Complemento @
Definir Alfa VSIntTomBai; @ Endereco - Bairro @
Definir Numero VSIntTomCmu; @ Endereco - CodigoMunicipio @
Definir Alfa VUIntTomCmu; @ Endereco - CodigoMunicipio para conversão @
Definir Alfa VSIntTomUfs; @ Endereco - Uf @
Definir Numero VSIntTomCep; @ Endereco - Cep @
Definir Alfa VUIntTomCep; @ Endereco - Cep para conversão @
Definir Alfa VSIntTomTel; @ Contato - Telefone @
Definir Alfa VSIntTomEml; @ Contato - E-mail @
@Intermediario Serviço @
Definir Alfa VSIntIntNom; @ RazaoSocial @
Definir Alfa VSIntIntCgc; @ CpfCnpj @
Definir Alfa VSIntIntIsm; @ InscricaoMunicipal @
@Construção Civil @
Definir Alfa VSIntConObr; @ CodigoObra @
Definir Alfa VSIntConArt; @ Art @
Definir Numero VSIntFlaFim;
Definir Numero VSIntTisSel;
Definir Numero VSIntTisSid;
Definir Numero VSIntTisSi2;
Definir Alfa VUIntTisSel;
Definir Alfa VUIntTisSid;
Definir Alfa VUIntTisSi2;
Definir Numero VSIntDigVer;
Definir Alfa VUIntDigVer;
Definir Alfa VUIntDatEMi;
Definir Data VSInTDatHoj;
Definir cursor cur_E070Fil;
Inicio
@Exemplo de como gerar os dados do lote @
/* Data DDMMY 13032
CNPJ 07534494000133
Numero lote 00000004 CHLOTISSEL
Numeor lote 00000004 CHLOTISSID
Numero lote 00000001 CHLOTISSI2
Digito Verificador 3*/
VUIntTisSel = "CHLOTISSEL";
VUIntTisSid = "CHLOTISSID";
VUIntTisSi2 = "CHLOTISSI2";
cur_E078Ult.SQL "Select E078Ult.UltNum from E078Ult where E078Ult.CodEmp =:VSIntCodEmp and E078Ult.CodFil =:VSIntCodFil
and E078Ult.CamBas = :VUIntTisSel";
cur_E078Ult.AbrirCursor();
Se (cur_E078Ult.Achou)
{
VSIntUltLot = cur_E078Ult.UltNum;
Se (VSIntUltLot > 99999999)
{
VSIntUltLot = 1;
}
senao
{
VSIntUltLot = VsIntUltLot + 1;
}
VSIntTisSel = VSIntUltLot;
GravaUltimoNum(VSIntCodEmp,VSIntCodFil,xCamBas,VSIntUltLot);
}
cur_E078Ult.FecharCursor();
cur_E078Ult.SQL "Select E078Ult.UltNum from E078Ult where E078Ult.CodEmp =:VSIntCodEmp and E078Ult.CodFil =:VSIntCodFil
and E078Ult.CamBas = :VUIntTisSid";
cur_E078Ult.AbrirCursor();
Se (cur_E078Ult.Achou)
{
VSIntTisSid = cur_E078Ult.UltNum;
Se (VSIntTisSid > 99999999)
{
VSIntTisSid = 1;
}
senao
{
VSIntTisSid = VSIntTisSid + 1;
}
GravaUltimoNum(VSIntCodEmp,VSIntCodFil,xCamBas,VSIntTisSid);
}
cur_E078Ult.FecharCursor();
cur_E078Ult.SQL "Select E078Ult.UltNum from E078Ult where E078Ult.CodEmp =:VSIntCodEmp and E078Ult.CodFil =:VSIntCodFil
and E078Ult.CamBas = :VUIntTisSi2";
cur_E078Ult.AbrirCursor();
Se (cur_E078Ult.Achou)
{
VSIntTisSi2 = cur_E078Ult.UltNum;
Se (VSIntTisSi2 > 99999999)
{
VSIntTisSi2 = 1;
}
senao
{
VSIntTisSi2 = VSIntTisSi2 + 1;
}
GravaUltimoNum(VSIntCodEmp,VSIntCodFil,xCamBas,VSIntTisSi2);
}
cur_E078Ult.FecharCursor();
ConverteMascara (1,VSIntTisSel,VUIntTisSel,"99999999");
ConverteMascara (1,VSIntTisSid,VUIntTisSid,"99999999");
ConverteMascara (1,VSIntTisSi2,VUIntTisSi2,"99999999");
DataHoje(VSInTDatHoj);
ConverteMascara(3,VSInTDatHoj,VUIntDatEmi,"DDMMY");
VUIntIidLot = VUIntDatEmi;
VUIntIidLot = VUIntIidLot + VSIntPreCgc;
VUIntIidLot = VUIntIidLot + VUIntTisSel + VUIntTisSid + VUIntTisSi2;
VUIntIidLot = VUIntIidLot + VUIntDigVer;
GravaUltimoNum(VSIntCodEmp,VSIntCodFil,"CHLOTISSEL",VSIntTisSel);
GravaUltimoNum(VSIntCodEmp,VSIntCodFil,"CHLOTISSID",VSIntTisSid);
GravaUltimoNum(VSIntCodEmp,VSIntCodFil,"CHLOTISSI2",VSIntTisSi2);
VUIntQtdRps = "1"; @ Quantidade de RPS @
@ Converte o valor do sistema que é numérico para variável do usuario que é alfa @
FormatarN(VSIntPerIss,"%1.4f",".",VUIntPerIss);
FormatarN(VSIntVlrBru,"%13.2f",".",VUIntVlrBru);
FormatarN(VSIntVlrDed,"%13.2f",".",VUIntVlrDed);
FormatarN(VSIntVlrPit,"%13.2f",".",VUIntVlrPit);
FormatarN(VSIntVlrCrt,"%13.2f",".",VUIntVlrCrt);
FormatarN(VSIntVlrIns,"%13.2f",".",VUIntVlrIns);
FormatarN(VSIntVlrIrf,"%13.2f",".",VUIntVlrIrf);
FormatarN(VSIntVlrCsl,"%13.2f",".",VUIntVlrCsl);
FormatarN(VSIntVlrIss,"%13.2f",".",VUIntVlrIss);
FormatarN(VSIntVlrIsr,"%13.2f",".",VUIntVlrIsr);
FormatarN(VSIntVlrOur,"%13.2f",".",VUIntVlrOur);
FormatarN(VSIntVlrBis,"%13.2f",".",VUIntVlrBis);
FormatarN(VSIntVlrLiq,"%13.2f",".",VUIntVlrLiq);
FormatarN(VSIntVlrDsc,"%13.2f",".",VUIntVlrDsc);
FormatarN(VSIntDscCon,"%13.2f",".",VUIntDscCon);
IntParaAlfa(VSIntCodEmp,VUIntCodEmp);
IntParaAlfa(VSIntCodFil,VUIntCodFil);
IntParaAlfa(VSIntNumRps,VUIntNumRps);
IntParaAlfa(VSIntTipRps,VUIntTipRps);
IntParaAlfa(VSIntRegEtr,VUIntRegEtr);
IntParaAlfa(VSIntOptSnc,VUIntOptSnc);
IntParaAlfa(VSIntStatus,VUIntStatus);
IntParaAlfa(VSIntCodMun,VUIntCodMun);
IntParaAlfa(VSIntTomCmu,VUIntTomCmu);
IntParaAlfa(VSIntTomCep,VUIntTomCep);
IntParaAlfa(VSIntEmiCgc,VUIntEmiCgc);
IntParaAlfa(VSIntIndIsr,VUIntIndIsr);
ConverteMascara (1,VSIntUltLot,VUIntNumLot,"99999999");
@ Exemplo de como gerar o nome do arquivo @
vDiretorioGravacao = "C:\\SeniorSapiensNFSe\\";
vNomeArquivo = vDiretorioGravacao + "NFSe_" + VUIntCodEmp + "_" +
VUIntCodFil + "_" +
VSIntSnfRps + "_" +
VUIntNumRps + "_" +
VSIntIidRps + ".xml";
@ Exemplo de montagem de arquivo XML ou TXT personalizado @
@ Informações referentes ao serviço @
XmlServico = "<Servico>" +
"<Valores>" +
"<ValorServicos>" + VUIntVlrBru + "</ValorServicos>" +
"<ValorDeducoes>" + VUIntVlrDed + "</ValorDeducoes>" +
"<ValorPis>" + VUIntVlrPit + "</ValorPis>" +
"<ValorCofins>" + VUIntVlrCrt + "</ValorCofins>" +
"<ValorInss>" + VUIntVlrIns + "</ValorInss>" +
"<ValorIr>" + VUIntVlrIrf + "</ValorIr>" +
"<ValorCsll>" + VUIntVlrCsl + "</ValorCsll>" +
"<IssRetido>" + VUIntIndIsr + "</IssRetido>" +
"<ValorIss>" + VUIntVlrIss + "</ValorIss>" +
"<ValorIssRetido>" + VUIntVlrIsr + "</ValorIssRetido>" +
"<OutrasRetencoes>" + VUIntVlrOur + "</OutrasRetencoes>" +
"<BaseCalculo>" + VUIntVlrBis + "</BaseCalculo>" +
"<Aliquota>" + VUIntPerIss + "</Aliquota>" +
"<ValorLiquidoNfse>" + VUIntVlrLiq + "</ValorLiquidoNfse>" +
"<DescontoIncondicionado>" + VUIntVlrDsc + "</DescontoIncondicionado>" +
"<DescontoCondicionado>" + VUIntDscCon + "</DescontoCondicionado>" +
"</Valores>" +
"<ItemListaServico>" + VSIntSerImp + "</ItemListaServico>" +
"<CodigoCnae>" + VSIntCodCna + "</CodigoCnae>" +
"<CodigoTributacaoMunicipio>" + VSIntTriMun + "</CodigoTributacaoMunicipio>" +
"<Discriminacao>" +
"<![CDATA[" + VSIntDesSer + "]]>" +
"</Discriminacao>" +
"<CodigoMunicipio>" + VUIntCodMun + "</CodigoMunicipio>" +
"</Servico>";
@ Dados do Prestador @
XmlPrestador = "<Prestador>" +
"<Cnpj>" + VSIntPreCgc + "</Cnpj>" +
"<InscricaoMunicipal>" + VSIntPreIsm + "</InscricaoMunicipal>" +
"</Prestador>";
@ Dados do Tomador @
XmlTomador = "<Tomador>" +
"<IdentificacaoTomador>" +
"<CpfCnpj>" +
"<Cnpj>" + VSIntTomCgc + "</Cnpj>" +
"</CpfCnpj>" +
"<InscricaoMunicipal>" + VSIntTomIsm + "</InscricaoMunicipal>" +
"</IdentificacaoTomador>" +
"<RazaoSocial>" + VSIntTomNom + "</RazaoSocial>" +
"<Endereco>" +
"<Endereco>" + VSIntTomEnd + "</Endereco>" +
"<Numero>" + VSIntTomNen + "</Numero>" +
"<Complemento>" + VSIntTomCpl + "</Complemento>" +
"<Bairro>" + VSIntTomBai + "</Bairro>" +
"<CodigoMunicipio>" + VUIntTomCmu + "</CodigoMunicipio>" +
"<Uf>" + VSIntTomUfs + "</Uf>" +
"<Cep>" + VUIntTomCep + "</Cep>" +
"</Endereco>" +
"<Contato>" +
"<Telefone>" + VSIntTomTel + "</Telefone>" +
"<Email>" + VSIntTomEml + "</Email>" +
"</Contato>" +
"</Tomador>";
@ Dados do Intermediario do Serviço @
XmlIntServico = "<IntermediarioServico>" +
"<RazaoSocial>" + VSIntIntNom + "</RazaoSocial>" +
"<CpfCnpj>" +
"<Cnpj>" + VSIntIntCgc + "</Cnpj>" +
"</CpfCnpj>" +
"<InscricaoMunicipal>" + VSIntIntIsm + "</InscricaoMunicipal>" +
"</IntermediarioServico>";
@ Dados da Construção Civil @
XmlConstCivil = "<ConstrucaoCivil>" +
"<CodigoObra>" + VSIntConObr + "</CodigoObra>" +
"<Art>" + VSIntConArt + "</Art>" +
"</ConstrucaoCivil>";
@ Arquivo XML Completo @
ArquivoXML = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>" + @ só consegui fazer funcionar o ç com este enconding <?xml
version="1.0" encoding="iso-8859-1"?>@
"<EnviarLoteRpsEnvio xmlns=\"http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd\">" +
"<LoteRps id =\"" + VUIntIidLot + "\">" +
"<NumeroLote>" + VUIntNumLot + "</NumeroLote>" +
"<Cnpj>" + VSIntPreCgc + "</Cnpj>" +
"<InscricaoMunicipal>" + VSIntPreIsm + "</InscricaoMunicipal>" +
"<QuantidadeRps>" + VUIntQtdRps + "</QuantidadeRps>" +
"<ListaRps>" +
"<Rps>" +
"<InfRps id=\"" + VSIntIidRps + "\">" +
"<IdentificacaoRps>" +
"<Numero>" + VUIntNumRps + "</Numero>" +
"<Serie>" + VSIntSnfRps + "</Serie>" +
"<Tipo>" + VUIntTipRps + "</Tipo>" +
"</IdentificacaoRps>" +
"<DataEmissao>" + VSIntDatEmi + "</DataEmissao>" +
"<NaturezaOperacao>" + VSIntNatOpe + "</NaturezaOperacao>" +
"<RegimeEspecialTributacao>" + VUIntRegEtr + "</RegimeEspecialTributacao>" +
"<OptanteSimplesNacional>" + VUIntOptSnc + "</OptanteSimplesNacional>" +
"<IncentivadorCultural>" + VSIntIncCul + "</IncentivadorCultural>" +
"<Status>" + VUIntStatus + "</Status>" +
/* "<RpsSubstituido>" +
"<Numero>" + VUIntRpsSub + "</Numero>" +
"<Serie>" + VUIntSnfSub + "</Serie>" +
"<Tipo>" + VUIntTipSub + "</Tipo>" +
"</RpsSubstituido>" + */
XmlServico +
XmlPrestador +
XmlTomador +
XmlIntServico +
XmlConstCivil +
"</InfRps>" +
"</Rps>" +
"</ListaRps>" +
"</LoteRps>" +
"</EnviarLoteRpsEnvio>";
@ Exemplo de função para gravação do arquivo XML ou TXT @
vArquivo = Abrir(vNomeArquivo, Gravarnl);
Gravarnl(vArquivo, ArquivoXML);
Fechar(vArquivo);
Fim;