Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

Olá.

 

Na minha aplicação utilizando Delphi 2010, ao tentar gerar uma NFSe de um registro já existente, aparece a seguinte mensagem:

 

A FUNCIONALIDADE GERAR NFSE NãO ESTA DISPONIVEL PARA O PROVEDOR: ÁBACO

 

Não sei se instalei o componente corretamente, mas está faltando os dados do prefixo4 e do DefTipos da classe TNFSeW (o prefixo4 está preenchido com ns4: dentro do componente, já o DefTipos está em branco e ambos os campos não podem ser editados).

 

Alguém poderia me indicar um manual ou passo-a-passo de como trabalhar com os componentes necessários? Sou de Cachoeiro de Itapemirim, ES, provedor Ábaco.

 

Editado: Não consigo alterar a propriedade provedor em Configuracoes.WebServices para Abaco.

 

Desde já agradeço.

Editado por NeoSquare
  • Consultores
Postado

Boa tarde Neo,

 

O provedor é selecionado automaticamente, quando passamos o código do municipio para o componente.

 

Vide o programa exemplo, ele faz isso.

 

Alem de informar o código do municipio temos que informar o caminho onde encontra-se os arquivos de schemas para o provedor em questão, caso contrario não vai funcionar.

 

Quanto da funcionalidade não estar disponivel, não significa que você instalou errado ou esta faltando alguma coisa, simplismente essa funcionalidade não existe para o provedor que o componente esta utilizando no momento.

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

Postado (editado)

Obrigado pela resposta, Italo!

 

Eu passo o caminho da pasta de schemas assim:

ACBrNFSe1.Configuracoes.Geral.PathSchemas := poPetra.PathServidorDataSnap + 'NFSe\Schemas\';

E o código do município assim:

ACBrNFSe1.Configuracoes.WebServices.CodigoMunicipio := StrToIntDef(poPetra.Empresa.NumeroCidade, 0);

E acontece o mesmo problema.

 

Meu vAssinada está assim:

'<Rps xmlns="http://www.e-nfs.com.br">
  <InfRps id="rps66UNICA">
   <IdentificacaoRps>
    <Numero>66</Numero>
    <Serie>UNICA</Serie>
    <Tipo>1</Tipo></IdentificacaoRps>
    <DataEmissao>2013-08-06T00:00:00</DataEmissao>
    <NaturezaOperacao>1</NaturezaOperacao>
    <RegimeEspecialTributacao>1</RegimeEspecialTributacao>
    <OptanteSimplesNacional>1</OptanteSimplesNacional>
    <IncentivadorCultural>2</IncentivadorCultural>
    <Status>1</Status>
    <Servico>
     <Valores>
      <ValorServicos>15.40</ValorServicos>
      <IssRetido>2</IssRetido>
      <ValorIss>0.77</ValorIss>
      <BaseCalculo>15.40</BaseCalculo>
      <Aliquota>0.0500</Aliquota>
      <ValorLiquidoNfse>15.40</ValorLiquidoNfse>
     </Valores>
     <ItemListaServico>101</ItemListaServico>
     <CodigoCnae>6201500</CodigoCnae>
     <Discriminacao>PRODUTO SERVICO DESCRICAO MAXIMA A SERAA</Discriminacao>
     <CodigoMunicipio>3201209</CodigoMunicipio>
    </Servico>
    <Prestador>
     <Cnpj>00000000000000</Cnpj>
     <InscricaoMunicipal>15195</InscricaoMunicipal>
    </Prestador>
    <Tomador>
     <IdentificacaoTomador>
      <CpfCnpj>
       <Cpf/>
      </CpfCnpj>
     </IdentificacaoTomador>
     <RazaoSocial>MARIA ALVEZ ESPACO MAXIMO PARA VERIFICAR</RazaoSocial>
     <Endereco>
      <Endereco>AV JONES DOS SANTOS NEVES TESTANDO CAMPO</Endereco>
      <Numero>SN</Numero>
      <Bairro>KM 90 TESTANDO CAMPO PARA SERA</Bairro>
      <CodigoMunicipio>3201209</CodigoMunicipio>
      <Uf>ES</Uf>
      <Cep>29300000</Cep>
     </Endereco>
     <Contato>
      <Telefone>XXXXXXXXXXX</Telefone>
      <Email>[email protected]</Email>
     </Contato>
    </Tomador>
   </InfRps>
  </Rps>'

Novamente, obrigado pela ajuda!

Editado por NeoSquare
Postado

Olá.

 

Para acrescentar, a variável AXML que carrega o xmldoc está assim:

'<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI="#66"><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="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue></DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo><X509Data><X509Certificate></X509Certificate></X509Data></KeyInfo></Signature>'

Mas ao rodar a linha:

 if ALote
  then begin
   if (URI <> '') and (AProvedor = proIssDSF)
    then xmldsig.signature := xmldoc.selectSingleNode('.//ns1:'+ EnviarLoteRps + '/ds:Signature')
   else if (URI <> '') and (AProvedor <> proRecife) and (AProvedor <> proRJ)
    then xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature[@' + Identificador + '="AssLote_' + URI + '"]')
    else begin
     xmldsig.signature := xmldoc.selectSingleNode('.//ds1:' + EnviarLoteRps + '/ds:Signature');
    end;
  end
  else xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature');

O xmlsignature fica nulo, dando erro, obviamente, aqui:

 if (xmldsig.signature = nil)
  then raise Exception.Create('É preciso carregar o template antes de assinar.');

Grato!

Postado

Olá.

 

Italo, na verdade, a alteração que você faz neste trecho:

   if (URI = '') or (AProvedor in [proRecife, proRJ, proAbaco, proIssDSF, proIssCuritiba])
    then AID := '>'
    else AID := ' ' + Identificador + '="AssLote_' + URI + '">';

Eu também tentei. Já essa eu não entendi muito bem:

   if AProvedor = proAbaco
    then URI := '';

De qualquer forma, agora ele está me retornando este erro: REFERENCE TO UNDECLARED NAMESPACE PREFIX: 'DS1'

 

Obrigado pela ajuda!

  • Consultores
Postado

Boa tarde Neo

 

No caso do provedor Abaco, não devemos incluir o atributo Identificador na tag Signature e consequentemente o atributo URI da tag Reference deve receber o valor vazio.

 

Caso contrario vai ocorrer erro ao assinar o lote.

 

Esse erro não ocorreu quando testei com o programa exemplo, as alterações que fiz.

 

Inclusive obtive o seguinte retorno do webservice após o envio do lote:

 

<EnviarLoteRpsResposta>

      <NumeroLote>1</NumeroLote>
      <DataRecebimento>2013-08-07T10:21:08</DataRecebimento>
      <Protocolo>E49A8FBD2395EDC4DF0AB4D1BD0091F1</Protocolo>
</EnviarLoteRpsResposta>
 

Como você pode ver o lote foi enviado e o webservice inclusive retornou o protocolo de recebimento do mesmo.

 

e esse outro após consultar a situação do lote:

 

<MensagemRetorno>

     <Codigo>E45</Codigo>
     <Mensagem>RPS:0 - CNPJ nao encontrado na base de dados</Mensagem>
   <Correcao>Confira o numero do CNPJ informado. Caso esteja correto, o prestador nao esta inscrito no municipio.</Correcao>
</MensagemRetorno>

 

Essa mensagem de erro ao consultar a situação é aceitavel, uma vez que utilizei um CNPJ de outra cidade.

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

Postado (editado)

Bom dia Italo.

 

Muito obrigada pela ajuda! Só peço que você me tire duas dúvidas: Essa função:

 FDadosMsg := TNFSeG.Gera_DadosMsgGerarNFSe(Prefixo3, Prefixo4,
                                            FConfiguracoes.WebServices.Identificador,
                                            NameSpaceDad, VersaoDados, FVersaoXML,
                                            IntToStr(TNFSeGerarNFSe(Self).NumeroRps),
                                            SomenteNumeros(TNFSeGerarNFSe(Self).FNotasFiscais.Items[0].NFSe.Prestador.Cnpj),
                                            TNFSeGerarNFSe(Self).FNotasFiscais.Items[0].NFSe.Prestador.InscricaoMunicipal,
                                            IntToStr(TNFSeGerarNFSe(Self).FNotasFiscais.Count),
                                            vNotas,
                                            FTagI, FTagF, FProvedor);

Está me retornando '', pois, dentro da função, na última linha, há esse comando:

 if AProvedor in [proNenhum, proAbaco, proBetha, proBetim, proBHIss, proDigifred,
  proEquiplano, proFiorilli, proFIssLex, proGinfes, proGovBR, proIssCuritiba,
  proIssIntel, proIssNet, proNatal, proProdemge, proPublica, proRecife, proRJ,
  proSimplIss, proThema, proTiplan, proCoplan, proIssDSF, proAgili] then Result := '';

Mas ao sair da função, para que ele assine o arquivo, ele verifica se essa string está ou não vazia, e caso esteja, ele me retorna:

 if FDadosMsg <> ''
  then begin
   if FConfiguracoes.WebServices.Salvar
    then FConfiguracoes.Geral.Save('-xxx1.xml', FDadosMsg);

   if not (FProvedor = profintelISS) then
    FDadosMsg := TNFSeGerarNFSe(Self).FNotasFiscais.AssinarLoteRps(IntToStr(TNFSeGerarNFSe(Self).NumeroRps), FDadosMSg);

   if FConfiguracoes.WebServices.Salvar
    then FConfiguracoes.Geral.Save('-xxx2.xml', FDadosMsg);

   if FProvedorClass.GetValidarLote
    then begin
     if not(NotaUtil.Valida(FDadosMsg, FMsg,
                            FConfiguracoes.Geral.PathSchemas,
                            FConfiguracoes.WebServices.URL,
                            FConfiguracoes.WebServices.ServicoEnviar,
                            FConfiguracoes.WebServices.Prefixo4))
      then raise Exception.Create('Falha na validação do Lote ' +
                     IntToStr(TNFSeGerarNFSe(Self).NumeroRps) + sLineBreak + FMsg);
    end;
  end
  else raise Exception.Create('A funcionalidade Gerar NFSe não esta disponivel para o provedor: ' + FxProvedor);

Então, eu devo remover o provedor Ábaco do último comando, ou devo alterar o if para que, caso seja um desses provedores, ele passe?

 

A outra dúvida:

 

O Atributo AXML está sendo preenchido com a Signature, mas quando chega nessa parte:

AXML := AXML + '</'+ APrefixo3 + EnviarLoteRps + '>';

O XML assim fica errado (fiz o seguinte teste: Gravei a variável em um arquivo .xml para verificar a estrutura, e quando tento abrí-lo, ele dá erro dizendo que a estrutura está errada).

 

Novamente para testar, fiz a seguinte alteração:

   If AProvedor <> proAbaco Then Begin
      AXML := AXML + '</'+ APrefixo3 + EnviarLoteRps + '>';
   End;

Com isso a estrutura do XML fica correta, mas quando chego aqui:

if ALote
  then begin
   if (URI <> '') and (AProvedor = proIssDSF)
    then xmldsig.signature := xmldoc.selectSingleNode('.//ns1:'+ EnviarLoteRps + '/ds:Signature')
   else if (URI <> '') and not (AProvedor in [proRecife, proRJ, proIssCuritiba])
    then xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature[@' + Identificador + '="AssLote_' + URI + '"]')
    else begin
     xmldsig.signature := xmldoc.selectSingleNode('.//ds1:' + EnviarLoteRps + '/ds:Signature');
    end;
  end
  else xmldsig.signature := xmldoc.selectSingleNode('.//ds:Signature');

Ele me retorna o erro: REFERENCE TO UNDECLARED NAMESPACE PREFIX: 'DS1'

Italo, peço até desculpas por tornar e retornar a perguntar, mas é que realmente estou tendo dificuladades com esse módulo.

Editado por NeoSquare
  • Consultores
Postado

Bom dia Neo,

 

Primeiramente, você não vai alterar nada.

 

Segundo, pelo schema que possuo e esta disponivel dentro da pasta ...\Exemplos\ACBrNFSe\Delphi\Schemas\Abaco não existe o GerarNfse somente o EnviarLoteRpsEnvio.

 

Isso explica o porque a função Gera_DadosMsgGerarNFSe() retorna vazio para o provedor Abaco.

 

O dia que o provedor implementar essa funcionalidade em seus WebServices e trocar o schema, ai sim para que o componente possa utilizar essa funcionalidade, vai ser necessário apenas remover da lista do IF o proAbaco.

 

Agora se o provedor já possui essa funcionalidade GerarNFSe, então precisamos do novo schema, neste caso por favor entre em contato com o provedor e solicite o schema mais atual uitilizado para validar o lote a ser enviado para o WebService.

 

Se esse novo schema consta o GerarNfse ai sim, com o schema atualizado podemos remover o proAbaco da lista do IF.

 

Esta me esquecendo alem de remover o proAbaco do IF há necessidade de realizar algumas alterações na unit ACBrProvedorAbaco para atender a funcionalidade GerarNFSe.

 

Portanto antes de remover algo, comentar alguma linha, procure saber se o provedor possui a funcionalidade desejada.

 

Volto a lhe dizer se o componente retorna a mensagem informado que a funcionalidade não foi implementada, não é porque eu não quiz ou não tive tempo de implementar, é por que o provedor não possui ela.

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

  • Membros Pro
Postado (editado)

Neo, como funciona o modo homologação, é preciso pedir habilitação na prefeitura ?

E o codigotributação do município, tem uma tabela padrão?

Editado por marciotga

Atenciosamente,

Márcio Lopes

Analista de Sistemas

Postado

Marcio, olá.

 

Ainda que no modo de homologação, é necessário você ter um eToken, além de ter um cadastro na prefeitura (aqui em Cachoeiro de Itapemirim/ES é assim).

 

Há uma tabela de código de tributação disponível no portal da Ábaco, dentro do seu cadastro, foi lá que peguei o meu.

  • 2 meses depois ...
Postado

Boa tarde a todos, também estou com esta mesma mensagem com o provedor aqui de Recife, mesmo após indicar a pasta:

ACBr\Exemplos\ACBrNFSe\Delphi\Schemas\Recife na aba geral de configuração do Demo.

Por favor se alguém poder me ajudar, agradeço pela força. 

Postado

Oi Italo, atualizei os fontes, compilei o demo e infelizmente não resolveu, os erros são os mesmos.

 

Eu não estou conseguindo executar as funções: gerar e enviar lote, Gerar e enviar NFSe e Gerar lote RPS

 

Grato.

  • Consultores
Postado

jwester,

 

Com as alterações que fiz e disponibilizei, não tenho mais erros de validação no lote apenas no que diz repeito a assinatura, uma vez que não estou utilizando um certificado de uma empresa de Recife.

 

Você esta com todos os fontes do componente atualizados?

Verifique se não tem nenhum cujo ícone esta com uma bolinha vermelha, caso positivo exclua e baixe novamente.

Você esta utilizando os schemas que estão na pasta Recife?

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

Postado

Oi Italo, por algum motivo a pasta ACBR estava com um bolinha vermelha, exclui e baixei novamente

os fontes, mais ainda persiste os erros que venho te informando. segue anexo a imagem da exception

 

 

post-10147-0-04044000-1382647536_thumb.p

Postado

Oi Italo,

 

 Deixa eu te passar detalhadamente o que estou fazendo:

 

1 - Clico no botão Gerar e Enviar Lote

2 - Informo o numero do RPS que gerei anteriormente (000007)

3 - Informo o numero do lote 000007 (aleatório)

É assim mesmo ou estou fazendo algo errado?

  • Este tópico foi criado há 4046 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.