Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFSeX - Provedor ISSDSF


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 1103 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia,

Segue em anexo arquivos alterados para o funcionamento do provedor ISSDSF:

DANFSE:
ACBrNFSeXDANFSeRL.dfm (estava faltando o evento OnNeedData no componente RLNFSe o que não gerava a lista de serviços)
ACBrNFSeXDANFSeRLRetrato.dfm (caracteres estranhos no componente RLLabel66 "Descrição")

Provedores:
ISSDSF.GravarXml.pas
===A tag "CodigoServico" não faz parte desse provedor o que dava erro na hora de emitir.

ISSDSF.LerXml.pas
===Alteração para não duplicar serviço/deduções depois de um RPS já carregado.
===Alteração para não substituir dados do RPS por "vazio", na consulta de lote por exemplo vários campos não são retornados o que deixa os campos em branco.

ISSDSF.Provider.pas
===ConfigAssinar ConsultarLote deve ser False, ConsultarNFSe deve ser True.
===ConfigSchemas: Validar setado como False.
===ProcessarMensagemErros: Adicionado para carregar os Alertas.
===PrepararEmitir: Adicionado namespace.
===TratarRetornoEmitir: No caso de Campo Grande/MS o "<ns1:RetornoEnvioLoteRPS" esta vindo dentro de "<enviarReturn".
===PrepararConsultaLoteRps: Adicionado namespace sem ele é retornado "ERRO VALIDACAO XSD: (400)error: org.xml.sax.SAXParseException".
===TratarRetornoConsultaLoteRps: o NodeArray deve ser a tag "ConsultaNFSe" e não "ListaNFSe". Esse provedor gera o número da nota no WS, alterado para localizar a nota pelo número do RPS.
===PrepararConsultaNFSeporRps: Adicionado namespace sem ele é retornado "ERRO VALIDACAO XSD: (400)error: org.xml.sax.SAXParseException".
===TratarRetornoConsultaNFSeporRps: A lista de notas deve ser a tag "Nota" e não "NFe". Alterado para localizar a nota pelo número do RPS.
===PrepararConsultaNFSe: Adicionado namespace e a tag "NotaInicial" deve ser incluída em vez de "NumeroLote".
===TratarRetornoConsultaNFSe: A lista de notas deve ser a tag "Nota" e não "NFe". Alterado para localizar a nota pelo número do RPS.
===PrepararCancelaNFSe: Adicionado namespace sem ele é retornado "ERRO VALIDACAO XSD: (400)error: org.xml.sax.SAXParseException".
===Recepcionar, RecepcionarSincrono, TesteEnvio, ConsultarLote, ConsultarNFSePorRps, ConsultarNFSe e Cancelar: Substituido "< e >" por "&lt; e &gt;".

*OBS: Existe um bug nesse provedor, quando usamos "ConsultarNFSePorRps" o "BairroTomador" é retornado vazio, mas na "ConsultarNFSe" ele esta presente.

ACBrNFSeX.zip exemplosws.zip

  • Administradores
Postado

Obrigado pela contribuição, em breve será validada para possível inclusão ao svn

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • 3 semanas depois ...
Postado

Boa tarde,
Tivemos problema com a Razão Social de um Tomador: "KAZUO & AOKI LTDA - ME" corrigimos alterando o arquivo ISSDSF.Provider.pas as funções
Recepcionar, RecepcionarSincrono, TesteEnvio, ConsultarLote, ConsultarNFSePorRps, ConsultarNFSe e Cancelar de 
XmlToStr(AMSG) para IncluirCDATA(AMSG);
O "&" estava sendo convertido corretamente para "&amp;", mas como o webservice converte de volta o conteúdo da Tag "mensagemXml" esse "&amp;" também era convertido o que causava o erro:

"ERRO VALIDACAO XSD: (402)The entity name must immediately follow the '&' in the entity reference."


 

Postado

Boa tarde, segue arquivo alterado.

Funções: Recepcionar, RecepcionarSincrono, TesteEnvio, ConsultarLote, ConsultarNFSePorRps, ConsultarNFSe e Cancelar.

Alterado de  XmlToStr(AMSG) para IncluirCDATA(AMSG).

ISSDSF.Provider.pas

  • 2 semanas depois ...
Postado

Boa tarde Italo,
Atualizamos o ACBR e voltaram alguns problemas que já tínhamos corrigido.
Na revisão 22644 acrescentaram novamente algumas tags.

ISSDSF.GravarXml.pas
===A tag "CodigoServico" não existe nesse provedor, erro na hora de emitir.

ISSDSF.Provider.pas
===Configuracao:
======Validar setado como "false". Com "true" esta dando erro na unit "ACBrDFeXsMsXml", funcao "TDFeSSLXmlSignMsXml.Validar" em "Schema.add(WideString(FpDFeSSL.NameSpaceURI), ArqSchema)";

===TratarRetornoEmitir:
======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho".
======O conteúdo da tag "Sucesso" é "true" ou "false" e esta sendo checado "not (xSucesso = 'N')".
======Response.Sucesso esta sendo setado novamente usando (Response.Erros.Count = 0), mas alguns erros vem dentro da tag "Alertas".

===TratarRetornoConsultaLoteRps:
======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho".
======Response.Sucesso setado usando o conteúdo da tag "Sucesso".

===TratarRetornoConsultaNFSeporRps:
======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho".
======Response.Sucesso acrescentado checagem da tag "Alertas".

===PrepararConsultaNFSe:
======A tag "NumeroLote" não existe, erro na hora de consultar.

===TratarRetornoConsultaNFSe:
======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho".
======Response.Sucesso acrescentado checagem da tag "Alertas".


===PrepararCancelaNFSe:
======O Namespace "...ReqCancelamentoNFSe.xsd" deve estar presente.

===TratarRetornoCancelaNFSe:
======As tags "Erros" e "Alertas" não existem dentro da tag "Cabecalho".
======Response.Sucesso setado usando o conteúdo da tag "Sucesso".

===Recepcionar:
======Alterar de "XmlToStr(AMSG)" para "IncluirCDATA(AMSG)". Um exemplo foi uma razão social de um tomador "KAZUO & AOKI LTDA - ME" esse "&" é interpretado de maneira errada, pelo provedor, quando usamos "XmlToStr".

===Cancelar:
======Alterar de "XmlToStr(AMSG)" para "IncluirCDATA(AMSG)". No caso de alguma justificativa conter o caractere "&" por exemplo ocorre o mesmo erro acima.


Em anexo arquivos alterados e manual do webservice.

ISSDSF.Provider.pas ISSDSF.GravarXml.pas ManualNFSeWebService.pdf

Postado (editado)

Boa tarde, usamos em Campo Grande / MS.
Mas acredito que não, no primeiro post tem o arquivo "exemplosws.zip" nele tem os exemplos do próprio provedor para as cidades que ele atende. E as tags retiradas acima não aparecem em nenhum dos exemplos.
Tanto que no arquivo "Leia-me.txt" presente no arquivo tem a seguinte observação:

"Os exemplos de XML encontram-se nas pastas de acordo com a cidade de declaração.
Para cada prefeitura existem exemplos para cada método do Web Service, o XML não tem difereça de uma Prefeitura para outra, o que irá mudar basicamente é o codigo da cidade indicado no cabeçalho do XML."

Editado por edv4ld0
Postado (editado)

Bom dia, abaixo algumas observações, unit ISSDSF.Provider:

1) Ainda continua verificando Erros e Alertas dentro da tag Cabecalho, no código abaixo já é chamada a procedure ProcessarMensagemErros e depois é chamada novamente usando a tag Cabecalho como RootNode:

...
ProcessarMensagemErros(ANode, Response);

      AuxNode := ANode.Childrens.FindAnyNs('Cabecalho');

      if AuxNode <> nil then
      begin
        ProcessarMensagemErros(AuxNode, Response);
...

2) Na alteração feita na procedure PrepararConsultaLoteRps agora só funciona passando o número do lote no parâmetro AProtocolo da TACBrNFSeX.ConsultarLoteRps. Se não for passado o protocolo retorno erro, o parâmetro ANumLote da função TACBrNFSeX.ConsultarLoteRps(const AProtocolo, ANumLote: String) perdeu o sentido.

procedure TACBrNFSeProviderISSDSF.PrepararConsultaLoteRps(Response: TNFSeConsultaLoteRpsResponse);
...
  if EstaVazio(Response.Lote) then
    Response.Lote := Response.Protocolo;

  if EstaVazio(Response.Protocolo) then
  begin
    AErro := Response.Erros.New;
    AErro.Codigo := Cod111;
    AErro.Descricao := Desc111;
    Exit;
  end;
...

3) TratarRetornoConsultaNFSeporRpsTratarRetornoConsultaNFSe esta verificando a existência de erros usando Response.Erros.Count = 0, mas alguns erros vem dentro da tag Alertas

Response.Sucesso := (Response.Erros.Count = 0)

para

Response.Sucesso := (Response.Erros.Count = 0) and (Response.Alertas.Count = 0);

 

Editado por edv4ld0
  • 2 semanas depois ...
  • Consultores
Postado

Bom dia,

Favor atualizar os fontes e faça novos testes.

Se não me falha a memória o motivo de ter 2 chamadas ao ProcessarMensagemErro é porque o retorno do WebService do provedor ISSDSF não é padronizado.

Como ocorreu mudanças na maneira de executar os métodos bem como a leitura dos retornos, favor ler o artigo:


 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • 2 meses depois ...
Postado

Boa tarde,
Compilamos nosso emissor com as última alterações feitas no componente e constamos um erro que já havia sido corrigido.

procedure TACBrNFSeProviderISSDSF.TratarRetornoEmitir(Response: TNFSeEmiteResponse);
var
  Document: TACBrXmlDocument;
  AErro: TNFSeEventoCollectionItem;
  ANode: TACBrXmlNode;
  AuxNode: TACBrXmlNode;
begin
  Document := TACBrXmlDocument.Create;

  try
    try
      if Response.XmlRetorno = '' then
      begin
        AErro := Response.Erros.New;
        AErro.Codigo := Cod201;
        AErro.Descricao := Desc201;
        Exit
      end;

      Document.LoadFromXml(Response.XmlRetorno);

      ANode := Document.Root;
...

Essa última linha "ANode := Document.Root;" já havíamos proposto a seguinte alteração:

{No WS de Campo Grande/MS tem retornado:
        <?xml version="1.0" encoding="UTF-8"?>
        <enviarReturn type="xsd:string">
          <ns1:RetornoEnvioLoteRPS xsi:schemaLocation="http://localhost:8080/WsNFe2/lote http://localhost:8080/WsNFe2/xsd/RetornoEnvioLoteRPS.xsd " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tipos="http://localhost:8080/WsNFe2/tp" xmlns:ns1="http://localhost:8080/WsNFe2/lote">
            <Cabecalho>
              <CodCidade>9051</CodCidade>
              <Sucesso>true</Sucesso>
              <NumeroLote>123456789</NumeroLote>
              <CPFCNPJRemetente>00000000000000</CPFCNPJRemetente>
              <DataEnvioLote>2021-07-08T16:12:00.0Z</DataEnvioLote>
              <QtdNotasProcessadas>0</QtdNotasProcessadas>
              <TempoProcessamento>0</TempoProcessamento>
              <ValorTotalServicos>0</ValorTotalServicos>
              <ValorTotalDeducoes>0</ValorTotalDeducoes>
              <Versao>1</Versao>
              <Assincrono>S</Assincrono>
            </Cabecalho>
            <Alertas/>
            <Erros/>
            <ChavesNFSeRPS/>
          </ns1:RetornoEnvioLoteRPS>
        </enviarReturn>
      }

      ANode := Document.Root.Childrens.FindAnyNs('RetornoEnvioLoteRPS');
      if ANode = nil then
        ANode := Document.Root;

Na revisão 23119 você novamente voltou para:

ANode := Document.Root;

Dessa forma não é localizado a tag "Cabecalho", por exemplo, onde esta o NumeroLote.

  • Este tópico foi criado há 1103 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.