Jump to content

João Paulo Müller

Membros
  • Posts

    326
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by João Paulo Müller

  1. Boa tarde a todos, Estou com problema para assinar o XML, estou realizando as implementações para realizar o cancelamento da NFSe para o município de Chapecó, estou fazendo as alterações para tentar solucionar a assinatura, sendo que no XML é utilizado o atributo 'id' não 'Id'. Realizei algumas alterações, deixei o arquivo semelhante ao arquivo de exemplo, porém, recebo erro de Access Violation na Unit ACBrDFeXsMsXml, linha 204: // Assinando com MSXML e CryptoLib // signedKey := xmldsig.sign(dsigKey, CERTIFICATES); Realizei as seguinte alterações: 1) Definir id no elemento <InfPedidoCancelamento> (<InfPedidoCancelamento id="C201900000000005">) Ao invés de comentar essa linha sugeria fiz a seguinte alteração: proPublica: FURI := 'C'+FNumeroNFSe; Ou seja, vamos deixar a URI conforme o exemplo 'C'+NumeroNFs. 2) Atribuir ID no <Reference> herdada da TAG <Signature> (<Reference URI="#C201900000000005">). Na unit ACBrDFeUtil é construída a TAG: Result := '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"' + IdSignature + '>' + '<SignedInfo>' + '<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />' + '<SignatureMethod Algorithm="'+MethodAlgorithm+'" />' + '<Reference URI="' + IfThen(URI = '', '', '#' + URI) + '">' + '<Transforms>' + '<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />' + '<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />' + '</Transforms>' + '<DigestMethod Algorithm="'+DigestAlgorithm+'" />' + '<DigestValue></DigestValue>' + '</Reference>' + '</SignedInfo>' + '<SignatureValue></SignatureValue>' + '<KeyInfo>' + IfThen(AddX509Data, '<X509Data>' + '<X509Certificate></X509Certificate>'+ '</X509Data>', '')+ '</KeyInfo>'+ '</Signature>'; É utilizado o parâmetro URI para definir o ID. Esse parâmetro é definido na função ExtraiURI, unit ACBRDFeUtil: function ExtraiURI(const AXML: String; IdAttr: String): String; var I, J: integer; begin Result := ''; if IdAttr = '' then IdAttr := 'Id'; I := PosEx(IdAttr+'=', AXML); if I = 0 then // XML não tem URI Exit; I := PosEx('"', AXML, I + 2); if I = 0 then raise EACBrDFeException.Create('Não encontrei inicio do URI: aspas inicial'); J := PosEx('"', AXML, I + 1); if J = 0 then raise EACBrDFeException.Create('Não encontrei inicio do URI: aspas final'); Result := copy(AXML, I + 1, J - I - 1); end; A função busca no XML o atributo 'Id', pois atualmente o parâmetro IdAttr vem vazio, então é definido fixo o IdAttr := 'Id' (Note que está com o I MAIÚSCULO), já no elemento <InfPedidoCancelamento id="C201900000000005"> está minusculo, ou seja, não é encontrado o id, por isso não seta a TAG <Reference> com o ID necessário. Para fazer os testes defini de forma fixa o 'id' (minusculo) na chamada da assinatura unit ACBrNFSeWebServices: // O procedimento recebe como parametro o XML a ser assinado e retorna o // mesmo assinado da propriedade FPDadosMsg if (FPConfiguracoesNFSe.Geral.ConfigAssinar.Cancelar) and (FPDadosMsg <> '') then AssinarXML(FPDadosMsg, FdocElemento, FinfElemento, 'Falha ao Assinar - Cancelar NFS-e: ','','','id'); Para funcionar também alterei a chamada de assinatura na unit ACBRDFeWebService: (Adicionei o parâmetro vazio '') FPDadosMsg := FPDFeOwner.SSL.Assinar(AXML, docElement, infElement, SignatureNode, SelectionNamespaces,'', IdSignature); LEMBRANDO FIZ ESSES ALTERAÇÕES APENAS PARA TESTE. Feito isso, consegui gerar o XML (em anexo) igual o exemplo, exceto a assinatura devido o erro de AV. Porém, conforme relatei no inicio, recebo o erro de Access Violation,. Lembro de ter visto algo aqui no fórum referente a esse Id, alguém tem alguma sugestão de como resolver? Exemplo Publica.xml Contruido-NãoAssinado.xml
  2. Estou utilizando as Naturezas descritas aqui: http://nfse-teste.publica.inf.br/homologa_nfse/RelatorioNatureza Porém ao fazer uma busca agora verifiquei que no comunicado da Prefeitura de Chapecó possui a nova lista para produção. https://www.chapeco.sc.gov.br/noticia/1508/comunicado-mudancas-de-sistemas
  3. Boa tarde Pessoal, Estou me batendo aqui pra tentar assinar o XML, realizei algumas alterações, deixei o arquivo semelhante ao arquivo de exemplo, porém, recebo erro de Access Violation na Unit ACBrDFeXsMsXml, linha 204: // Assinando com MSXML e CryptoLib // signedKey := xmldsig.sign(dsigKey, CERTIFICATES); Realizei as seguinte alterações: 1) Definir id no elemento <InfPedidoCancelamento> (<InfPedidoCancelamento id="C201900000000005">) Ao invés de comentar essa linha sugeria fiz a seguinte alteração: proPublica: FURI := 'C'+FNumeroNFSe; Ou seja, vamos deixar a URI conforme o exemplo 'C'+NumeroNFs. 2) Atribuir ID no <Reference> herdada da TAG <Signature> (<Reference URI="#C201900000000005">). Na unit ACBrDFeUtil é construída a TAG: Result := '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"' + IdSignature + '>' + '<SignedInfo>' + '<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />' + '<SignatureMethod Algorithm="'+MethodAlgorithm+'" />' + '<Reference URI="' + IfThen(URI = '', '', '#' + URI) + '">' + '<Transforms>' + '<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />' + '<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />' + '</Transforms>' + '<DigestMethod Algorithm="'+DigestAlgorithm+'" />' + '<DigestValue></DigestValue>' + '</Reference>' + '</SignedInfo>' + '<SignatureValue></SignatureValue>' + '<KeyInfo>' + IfThen(AddX509Data, '<X509Data>' + '<X509Certificate></X509Certificate>'+ '</X509Data>', '')+ '</KeyInfo>'+ '</Signature>'; É utilizado o parâmetro URI para definir o ID. Esse parâmetro é definido na função ExtraiURI, unit ACBRDFeUtil: function ExtraiURI(const AXML: String; IdAttr: String): String; var I, J: integer; begin Result := ''; if IdAttr = '' then IdAttr := 'Id'; I := PosEx(IdAttr+'=', AXML); if I = 0 then // XML não tem URI Exit; I := PosEx('"', AXML, I + 2); if I = 0 then raise EACBrDFeException.Create('Não encontrei inicio do URI: aspas inicial'); J := PosEx('"', AXML, I + 1); if J = 0 then raise EACBrDFeException.Create('Não encontrei inicio do URI: aspas final'); Result := copy(AXML, I + 1, J - I - 1); end; A função busca no XML o atributo 'Id', pois atualmente o parâmetro IdAttr vem vazio, então é definido fixo o IdAttr := 'Id' (Note que está com o I MAIÚSCULO), já no elemento <InfPedidoCancelamento id="C201900000000005"> está minusculo, ou seja, não é encontrado o id, por isso não seta a TAG <Reference> com o ID necessário. Para fazer os testes defini de forma fixa o 'id' (minusculo) na chamada da assinatura unit ACBrNFSeWebServices: // O procedimento recebe como parametro o XML a ser assinado e retorna o // mesmo assinado da propriedade FPDadosMsg if (FPConfiguracoesNFSe.Geral.ConfigAssinar.Cancelar) and (FPDadosMsg <> '') then AssinarXML(FPDadosMsg, FdocElemento, FinfElemento, 'Falha ao Assinar - Cancelar NFS-e: ','','','id'); Para funcionar também alterei a chamada de assinatura na unit ACBRDFeWebService: (Adicionei o parâmetro vazio '') FPDadosMsg := FPDFeOwner.SSL.Assinar(AXML, docElement, infElement, SignatureNode, SelectionNamespaces,'', IdSignature); LEMBRANDO FIZ ESSES ALTERAÇÕES APENAS PARA TESTE. Feito isso, consegui gerar o XML (em anexo) igual o exemplo, exceto a assinatura devido o erro de AV. Porém, conforme relatei no inicio, recebo o erro de Access Violation,. Lembro de ter visto algo aqui no fórum referente a esse Id, alguém tem alguma sugestão de como resolver? Exemplo Publica.xml Contruido-NãoAssinado.xml
  4. Entrei em contato com o pessoal da Publica novamente, passando nosso arquivo com a assinatura incorreta e assinatura de exemplo deles, solicitei se seria possível nos indicar onde está o problemas, mas relataram que estão em processo de monitoramento da NFS-e que está em produção e não irão poder ajudar no momento. Forneceram um XML Assinado para exemplo. Anexei o arquivo aqui, alguém saberia dizer o que compõem o ID do elemento <InfPedidoCancelamento id="C201900000011630">? No meu ver parece ter relação com o número da Nota. Acredito que antes de assinar o arquivo deve ser preenchido esse ID com o valor correto. Solicitei a Publica o conteúdo deste ID, mas até o momento não obtive retorno. Como estão ai pessoal? Já estão rodando em produção sem o evento de cancelamento e com a antiga revision? pedido_cancelamento_nfse_C001_03777341004587_201900000011630_2352981065943970236(1).xml
  5. Comentei a linha citada, é gerado o id da tag, porém da mesma forma obtenho o erro de Assinatura. Segue XML em anexo. Estou em contato com a Publica pra tentar cancelar uma nota com uma antiga versão que tenho compilado que funciona, para comprarmos os XML.
  6. Não estou com os fontes atualizados devido aqueles problemas na ultima atualização. Você havia subido umas alterações para uma correção na consulta da situação do lote, após essa alteração estava dando alguns problemas. Afinal, é necessário essas alterações na situação do lote? Pois sem as alterações realizadas está funcionando a consulta de situação do lote. Vou localizar a linha e alterar.
  7. Então, a questão da Tag <MotivoCancelamento> acredito não ter no exemplo pois é opcional. Referente ao atributo ID vazio no cancelamento já havia reparado, porém não tenho muito conhecimento da estrutura do componente e não estava localizando onde fazer a alteração. Vou analisar novamente para tentar implementar a alteração.
  8. Bom dia Italo, Segue em anexo o XML de exemplo da publica (Exemplo_Cancelar.xml) e o XML gerado pelo componente (Cancelamento_Atual).xml EXEMPLO_Cancelar.xml Cancelamento_atual.xml
  9. Boa tarde, fiz testes de cancelamento em Mafra e também está com problema. Acredito que todos os municípios de Publica está com problema no cancelamento. Tenho uma versão compilada do sistema que funciona. Comparei os arquivos de configuração (Cidades.ini e Publica.ini) e não houve nenhuma alteração que pudesse ocorrer o problema, foi apenas incluso novos municípios. Portanto, deve ter sido alguma alteração no componente. É uma pena eu não ter feito o backup do ACBR junto com a versão compilada. Vou seguir analisando... Caso alguém souber de algo, favor comunicar.
  10. Conforme resposta da Publica a previsão é para amanha. Pessoal, estou com a base de outro cliente aqui agora, do município de Mafra, para verificar se também esta ocorrendo o erro de cancelamento, pois já observei em outro tópico que há problemas com o cancelamento em outro município no qual o provedor é Publica. Quero ver essa questão do cancelamento para tentar rodar em produção amanha
  11. Boa tarde, Rejane o usuário estava utilizando a aplicação e de repente ocorreu este problema? Ou foi compilado o exe com uma nova revision e atualizado o cliente e então ocorreu o problema? Estou desenvolvendo para Chapecó e estou com o mesmo problema. Tenho desenvolvido para Mafra e Itajaí que também utilizam o provedor Publica, mas até então não reportaram nenhum problema. Vou pegar a base de dados e o certificado de um cliente de Mafra e realizar alguns testes nessas ultimas revisions. Até agora não houve reclamações, acredito ser um problema a partir de uma atualização do ACBR.
  12. Certo Cesar, compreendi. Aqui vou manter um item por NFSe, pois caso contrario terei que alterar toda e estrutura do módulo. Como tenho um módulo e estou integrando diversos provedores no mesmo módulo, pode ser que encontro provedores que não suportam mais de um item por nota, ai terei problemas...
  13. No arquivo Publica.ini Pelo que pude perceber a unica alteração (tirando as duplicidades) do arquivo editado para o arquivo do repositório foi a configuração de assinatura: Repositório [Assinar] RPS=1 Lote=0 URI=1 Editado [Assinar] RPS=0 Lote=1 URI=0 Realizando apenas essa alterações no arquivo original (Repositório) já é possível transmitir as notas. Não sei se essas alterações está corretas ou poderão impactar em outros municípios. Apenas analisei os arquivos do repositório (que não está funcionado para Chapecó) com o arquivo publicado aqui no tópico (que está funcionando) Lembrando que tive que voltar a Revison sem as ultimas alterações realizadas para funcionar
  14. Aproveitando aqui o assunto de mais de um serviço por nota. Tenho implementado para enviar sempre um serviço por nota, se na construção da nota o usuário por mais de um item, percorro os itens e faço a geração de uma NFSe para cada item. Sabem me dizer se teria algum problema? Pois no padrão ABRASF é suportado apenas um item por nota certo? Acho que essa implementação de vários itens na Descrição fica meio estranho...
  15. Bom dia Everson, Você está conseguindo transmitir com o ACBR na ultima revision e os arquivos do repositório? Não ocorreu o erro que citei anteriormente quando atualizou para a ultima revision? Notei que o erro estava na implementação realizada na unit ACBrNFSeConfiguracoes, linha 648: FConfigAssinar.URI := (SSLLib <> libCapicom) and (FConfigGeral.Identificador = 'id'); Aqui também estou utilizando winCrypt. ACBrNFSe.SSL.SSLHttpLib := httpWinHttp; ACBrNFSe.SSL.SSLCryptLib := cryWinCrypt; if Certificado.OpenSSL = 'S' then begin ACBrNFSe.SSL.SSLXmlSignLib := xsXmlSec; ACBrNFSe.SSL.ArquivoPFX := Dir+'Certificados\'+Certificado.ArquivoPFX; end else begin ACBrNFSe.SSL.SSLXmlSignLib := xsMsXml; ACBrNFSe.SSL.NumeroSerie := Certificado.NumSerie; end; Vou voltar a versão e utilizar os arquivos publicados aqui no tópico para conseguir prosseguir com os testes.
  16. Italo, identifique o motivo do erro. Está na alteração feita na unit ACBrNFSeConfiguracoes, linha 648: FConfigAssinar.URI := (SSLLib <> libCapicom) and (FConfigGeral.Identificador = 'id'); Comentei a linha acima e consegui enviar o lote, porém agora estou com erro na consulta da situação do lote. Erro: Não foi possível carregar o XML. Vou analisar melhor.. Detalhe: Estou utilizando os arquivos postado aqui pelo Everson , caso contrario obtenho erro já na validação, utilizando os arquivos (Publica.ini e Cidades.ini) do ACBR
  17. Boa tarde Italo, Atualizei o repositório agora para realizar os testes, mesmo assim persiste o problema que havia comentado antes. Antes resolvi a situação copiando os arquivos aqui configurados pelo Everson, o qual resolveu o erro da validação (Lembrando que o erro ocorre no momento de gerar o lote), estava conseguindo autorizar a NFS-e, consultar etc.. Porém, agora ao copiar os arquivos Recebo o seguinte erro: "Erro não especificado" no momento de fazer a assinatura, unit ACBrNFSeNotasFiscais, linha 702: XMLAss := SSL.Assinar(ArqXML, docElemento, infElemento, SignatureNode, SelectionNamespaces, IdSignature, IdAttr); Acredito ter relação com a alteração feita, vou seguir analisando.. Lembrando que com as alterações feitas pelo Everson nos arquivos (Cidades.ini e Publica.ini) estava conseguindo consultar situação do lote.
  18. Só pra informar pessoal, este problema está ocorrendo com os arquivos postados no SVN, ao utilizar os arquivos publicados aqui pelo Everson o problema foi resolvido. O "erro unable to parse" estava ocorrendo quando utilizado OpenSSL, se utilizar CAPICOM, retorna o erro na coluna 279, onde há um defeito no XML: ...<InfRps</signature></rps>... ---- Aproveitando a postagem, sabe me dizer se precisa solicitar alguma liberação na publica para realizar os testes em homologação? Estou recebendo retorno informando que o prestador não está autorizado a emitir NFS-e.
  19. Boa tarde pessoal, Alguém poderia dar um help? Estou recebendo o erro "Erro:Unable to parse" na validação do lote. Alguém teria uma ideia? Segue procedimento que faço pra gerar o lote:: Frm.ACBrNFSe.NotasFiscais.GerarNFSe; // Gera os RPS // try Frm.ACBrNFSe.WebServices.GeraLote(Lote) Except on E: Exception do raise Exception.Create('Falha ao gerar lote: ' + E.Message); end; Erro ocorre na unit ACBrNFSeWebServices linha 2810 if FPConfiguracoesNFSe.Geral.ConfigSchemas.Validar then FNotasFiscais.ValidarLote(FPDadosMsg, FPConfiguracoes.Arquivos.PathSchemas + FPConfiguracoesNFSe.Geral.ConfigSchemas.ServicoEnviar); Alguma sugestão?
  20. Boa tarde a todos, Estive analisando o arquivos Cidades.ini e não encontrei suporte ao município de Trindade do Sul. Também verifiquei que o provedor que desenvolveu a NFSe neste município (Sinsoft) não houve nenhum integração no ACBR. Alguém saberia me dizer se há alguma particularidade com este municio por não haver integração ou apenas não houve necessidade até então. No manual de integração (Em anexo) cita o padrão ABRASFT Versão 2.01. Ao analisar o manual observei que na autenticação é solicitado um username e password, isso pode acabar dificultando a integração? Exemplo em delphi: Var Request: ConsultarNfseRpsEnvio; Response: ConsultarNfseRpsResposta; pNFSe: INFSe; {WSDL} begin Try pNFSe:= GetINFSe(True, 'Path do WSLD',HTTPRIO); Response := ConsultarNfseRpsResposta.Create; Request := ConsultarNfseRpsEnvio.Create; Request.nfseCabecMsg := 'CABECALHO'; Request.nfseDadosMsg := 'XML'; Request.Username := 'USUARIO'; Request.Password := 'SENHA'; Request.Prefeitura := 'PREFEITURA'; Response.outputXML := (HTTPRIO as INFSe).ConsultarNfsePorRps(Request).outputXML; if Response.outputXML <> EmptyStr Then Showmessage(Response.outputXML); Finally FreeAndNil(Request); FreeAndNil(Response); FreeAndNil(Nfse); End; Não cheguei fazer uma analise mais completa no componente ainda, pois vamos implementar essa integração nos próximos meses. Abri o tópico pois talvez alguém possa me adiantar do assunto. Obrigado a todos.
  21. Boa tarde Francisco. Não seria interessante sugerir essas alterações realizadas no componente para serem enviadas para o SVN? Acredito que mesmo enviando somente os produtos com estoque e movimentação, mesmo assim pode acabar ocorrendo problema com determinadas maquinas.
  22. Exatamente Francisco. Existe uma Flag para indicar se o estoque é positivo ou negativo. Aqui estamos enviando tanto os estoques positivos e negativos (se houver) e controlando conforme a Flag.
  23. Deixe me ver se compreendi corretamente, de qualquer forma se o produto possuir estoque (Quantidade > 0) deve constar no arquivo XML; Agora, se o produto não possuir estoque (Quantidade <= 0) E não possuir movimento ai sim não precisa constar no XML, isto?
  24. Boa tarde Francisco, Obrigado pelas informações. Me juntei ao grupo, inclusive já fiz alguns questionamentos ao Bruno (Auditor)... Encontrei um tópico no grupo referente ao estoque que descreve o seguinte: Vou ver se consigo enviar um e-mail ao Bruno questionando se é necessário que o produto NÃO possua estoque e também NÃO tenha movimento para ficar de fora do XML ou se basta o produto não possuir movimento. Pois pode acontecer de o produto possuir estoque mas não possui movimento no período, neste caso deveria constar no XML ou não? Vou ver se consigo tirar essa dúvida com ele, caso você já estiver a par da questão seria de grande valia essa informação. Novamente, obrigado pela colaboração.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.