Pesquisar na Comunidade
Showing results for tags 'softplan'.
Encontrado 5 registros
-
NFSeX Softplan - Criação do método de Substituir NFS-e
um tópico no fórum postou Ronaldo.Bispo ACBrNFSe
Bom dia, tudo bem! Fiz algumas alterações para incluir o serviço de substituir NFS-e no provedor da SoftPlan. Foi adicionado os métodos: procedure TACBrNFSeProviderSoftPlan.PrepararSubstituiNFSe(Response: TNFSeSubstituiNFSeResponse); procedure TACBrNFSeProviderSoftPlan.TratarRetornoSubstituiNFSe(Response: TNFSeSubstituiNFSeResponse); function TACBrNFSeXWebserviceSoftPlan.ConsultarDFe(ACabecalho, AMSG: string): string; Para substituir uma NFS-e é necessário enviar um XML com as informação que serão alteradas. Para esse provedor não precisa cancelar a NFS-e antes de substituir. Como o serviço de substituir NFS-e cancela antes de enviar uma nova, foi tratado em PrepararCancelaNFSe e TratarRetornoCancelaNFSe para ignorar caso TACBrNFSeX(FAOwner).Status = stNFSeSubstituicao. Também foi necessário fazer algumas alterações no GravarXML. Apenas algumas informações poderão ser substituídas outras serão igual a nota anterior logo, o XML de envio da NFS-e de substituição será diferente do XML de envio de quando gera a NFS-e. Então no GravarXML foi preciso separar em dois métodos para um para gravar o XML de substituição e outro para o XML que envia NFS-e; function GerarXmlEnvio: Boolean; function GerarXmlSubstituicao: Boolean; Estou anexando as units que foram alteradas para analise. Muito Obrigado. SoftPlan.GravarXml.pas SoftPlan.Provider.pas -
Olá tudo bem! Continuando os testes na NFPS-e de Florianópolis (SoftPlan), ao tentar enviar para um tomador que não é contribuinte ou pessoa física no caso, ocorre a falha: O campo "inscricaoMunicipalTomador" tamanho deve estar entre 1 e 7 <?xml version="1.0" encoding="UTF-8"?> <xmlNfpse> <message>O campo "inscricaoMunicipalTomador" tamanho deve estar entre 1 e 7</message> </xmlNfpse> para solucionar o problema, em SoftPlan.GravarXml.pas foi alterado para verificar se a informação está em branco, caso esteja não é inserido a tag no XML. if (NFSe.Tomador.IdentificacaoTomador.InscricaoMunicipal <> '') then NFSeNode.AppendChild(AddNode(tcStr, '#1', 'inscricaoMunicipalTomador', 0, 30, 1, NFSe.Tomador.IdentificacaoTomador.InscricaoMunicipal, '')); Então estou encaminhando a unit com as alterações para analise. Muito Obrigado. SoftPlan.GravarXml.pas
-
NFSeX Softplan - Criação do Serviço de Consulta, por número e por código de verificação
um tópico no fórum postou Ronaldo.Bispo ACBrNFSe
Olá tudo bem! Fiz algumas alterações para consultar NFS-e e baixar o XML que ainda não estavam funcionando. A consulta da NFS-e retorna uma JSON e não vem o XML . O XML deve ser baixado por outro endpoint. O ConsultarNFSe irá retornar o JSON com as informações da NFS-e, logo em seguida é usado o ConsultarDFe para baixar o xml. function TACBrNFSeXWebserviceSoftPlan.ConsultarDFe(ACabecalho, AMSG: string): string; #define a url de acordo com o tpConsulta tcPorCodigoVerificacao ou tcPorNumero procedure TACBrNFSeProviderSoftPlan.PrepararConsultaNFSe(Response: TNFSeConsultaNFSeResponse); override; #trata o retorno lendo as informações do JSON e executa o ConsultarDFe para baixar o xml procedure TACBrNFSeProviderSoftPlan.TratarRetornoConsultaNFSe(Response: TNFSeConsultaNFSeResponse); override; #prepara a url para baixar o xml da NFS-e procedure TACBrNFSeProviderSoftPlan.PrepararConsultarDFe(Response: TNFSeConsultarDFeResponse); override; #Lê e salva o xml que retornou procedure TACBrNFSeProviderSoftPlan.TratarRetornoConsultarDFe(Response: TNFSeConsultarDFeResponse); override; ... No LerXML, foi alterado para copiar a situação da NFS-e (cancelada/normal) da tag statusNFPSe do XML. Situacao := ObterConteudo(ANode.Childrens.FindAnyNs('statusNFPSe'), tcInt); ... Em ACBrNFSeXConversao.pas, também foi adicionado o tipo tcPorCodigoVerificacao no enumerador TtpConsulta. TtpConsulta = (tcPorNumero, tcPorFaixa, tcPorPeriodo, tcServicoPrestado, tcServicoTomado, tcPorCodigoVerificacao); SoftPlan.Provider.pas SoftPlan.LerXml.pas ACBrNFSeXConversao.pas -
NFSeX Softplan - Ajustes no Envio e no Cancelamento da NFSe
um tópico no fórum postou Ronaldo.Bispo ACBrNFSe
Olá tudo bem! O cancelamento de NFS-e do profedor SoftPlan funcionou mas foi preciso fazer alguns ajustes porque alguns atributos conflitaram com o serviço de gerar token. Coloquei os três pontos no mesmo tópico, não sei se era obrigatório criar um tópico para cada um. Estava com problemas com a identificação do tomador na unit SoftPlan.GravarXML, era necessário remover os caracteres especiais e deixar apenas números. NFSeNode.AppendChild(AddNode(tcStr, '#1', 'identificacaoTomador', 0, 20, 1, OnlyNumber(NFSe.Tomador.IdentificacaoTomador.Cnpj), '')); O atributo ChaveAutoriz esta sendo utilizado para definir o numeroAEDF no xml de envio e de cancelamento também e conflitava com o serviço de gerar token. Esse mesmo atributo foi utilizado para salvar o client_secret que é utilizado para gerar o token. Então para evitar conflitos eu fiz alterações no serviço de gerar token para utilizar o atributo Emitente.WSFraseSecr ao invés do Emitente.WSChaveAutoriz. Então em procedure TACBrNFSeProviderSoftPlan.PrepararGerarToken(Response: TNFSeGerarTokenResponse) aonde define a URL foi alterado de: FpPath := FpPath + '&client_secret=' + Emitente.WSChaveAutoriz; para: FpPath := FpPath + '&client_secret=' + Emitente.WSFraseSecr; E em procedure TACBrNFSeXWebserviceSoftPlan.SetHeaders(aHeaderReq: THTTPHeader) aonde define o cabeçalho do request foi alterado de: with TConfiguracoesNFSe(FPConfiguracoes).Geral do Auth := Emitente.WSChaveAcesso + ':' + Emitente.WSChaveAutoriz; para: with TConfiguracoesNFSe(FPConfiguracoes).Geral do Auth := Emitente.WSChaveAcesso + ':' + Emitente.WSFraseSecr; O número da nota estava ficando errado quando gerava a nfse. Estava copiando o numero do rps ao invés do numero da nota no xml de retorno. Então alterei para copiar da tag 'numeroSerie' ao invés da tag 'identificacao'; Então em procedure TACBrNFSeProviderSoftPlan.TratarRetornoEmitir(Response: TNFSeEmiteResponse) foi alterado de: with Response do begin ... NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('identificacao'), tcStr); end; para: with Response do begin ... NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('numeroSerie'), tcStr); end; Muito Obrigado SoftPlan.GravarXml.pas SoftPlan.Provider.pas -
Olá pessoal tudo bem? A cidade de Florianópolis utiliza o provedor SoftPlan. O provedor possuí uma API e é necessário fazer a autenticação e gerar o token antes de gerar, consultar e cancelar a NFSe. Então eu implementei os métodos de GerarToken nesse provedor antes de prosseguir com as outras alterações. Se alguém puder validar e gerar um commit delas, provavelmente eu vou continuar com alterações nos outros métodos também. Resumindo as principais alterações na unit SoftPlan.Provider.pas: Foi criado o método PrepararGerarToken aonde é formado a URL com os parametros necessarios que são username, password, client_id, client_secret. Para o client_id foi utilizado Emitente.WSChaveAcesso e para o client_secret foi utilizado Emitente.WSChaveAutoriz. client_id e client_secret tem que credenciar junto a prefeitura, então eles vão fornecer essas credenciais. Foi criado os método TratarRetornoGerarToken que trata os erros ou extrai o token retorno pelo JSON no response. Foi adicionado as seguintes urls no ini cidades: ProGerarToken=https://nfps-e.pmf.sc.gov.br/api/v1/autenticacao/oauth/token HomGerarToken=http://nfps-e-hml.pmf.sc.gov.br/api/v1/autenticacao/oauth/token Desde já agradeço pelo auxilio. Estou a disposição pra qualquer duvidas também. SoftPlan.Provider.pas ACBrNFSeXServicos.ini