Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Capaz, sem problemas Italo. Na verdade depois fui ver que era só ali. hehe. Foi só pra descontrair mesmo.

Bom, vamos lá...

Nos demais testes feitos deu tudo certo.

Implementei também a parte de cancelamento. Fiz as alterações em cima do ultimo update feito agora de manhã.

Vou citar as linhas que alterei para você poder verificar:

Unit ACBrNFSeWebServices

Linha 2142 - Valores dos prefixos 2 e 3.

Unit ACBrNFSeNotasFiscais

Linha 608 - Alteração na LoadFromFile para encontrar a tag "ComplNFSe".

Unit pnfsCancNFSeResposta

Linha 155 - Alteração na LerXML para encontrar a tag "CancelarNfseReposta".

Unit ACBrProvedorBetha

Linha 160 - Setado False para GetAssinarXML quando acCancelar.

Linha 516 - Ajustado o GeraEnvelopeCancelarNFSe.

Linha 541 - Ajustado o GetSoapAction quando acCancelar.

Linha 555 - Ajustado GetRetornoWS quando acCancelar.

Assim que você incluir na Branches, eu faço update e testo tudo novamente para garantirmos o funcionamento na versão "oficial".

Precisando dá um grito!

Abraço.

alteracoes_betha_cancel.rar

Rodrigo Cantelli

  • Consultores
Postado

Rodrigo,

Já foi enviado para o Branches, as alterações.

Por favor teste todas as funcionalidades e reporte as correções.

Verifique a necessidade de algumas linhas colocadas na unit ACBrProvedorBetha

A titulo de exemplo a function GeraEnvelopeCancelarNFSe:


 DadosMsg := StringReplace(DadosMsg,'<','
 DadosMsg := StringReplace(DadosMsg,'<ConsultarSituacaoLoteRpsEnvio','
 DadosMsg := StringReplace(DadosMsg,'ns3:Pedido','Pedido',[rfReplaceAll]);

não encontrei motivos para elas existirem.

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

Boa tarde Italo.

Pelo que testei envio/restorno, consulta de lote, consulta de situação de lote e cancelamento estão funcionando para Betha.

Vou verificar a questões das linhas que você comenteu. Caso tiver mais alguma que queira que eu remova para testar me avise.

Logo em seguida lhe dou um retorno.

Abraço.

Rodrigo Cantelli

Postado

Realmente Italo, dá pra melhorar algumas coisas.

As linhas que você citou são desnecessárias. No caso da ultima por exemplo,

eu posso tirar o prefixo direto na Gera_TagI e Gera_TagF.

Creio que fica melhor né?

Agora que está funcionando de acordo, vou fazer algumas alterações/melhorias

no que diz respeito à Betha e lhe passo em seguida beleza?

Abraço!

Rodrigo Cantelli

Postado

Tarde Italo,

em anexo apenas o arquivo ACBrProvedorBetha.pas

com algumas alterações, removendo as linhas desnecessárias.

Não entendi o código que você adicionou na "GeraEnvelopeConsultarNFSeporRPS".

Se pesquisares por "{rodrigo" vai encontrar meus comentários e as ultimas alterações feitas.

Caso perceber mais alguma coisa basta avisar. Vou ver se implemento as outras consultas ou se agora

dou continuidade ao projeto que estou desenvolvendo.

Precisando estou à disposição.

Abraço!

ACBrProvedorBetha.pas

Rodrigo Cantelli

  • Consultores
Postado

Boa tarde Rodrigo,

A idéia de criar uma unit para cada provedor é exatamente essa por otimizar, deixar a rotina que gera os XMLs mais compreensilvel possível, sem tantos IFs e CASEs.

Muito obrigado, e vou ficar no aguardo de suas correções e melhorias, acredito que ainda esta faltando as Consultas de NFSe por RPS e Consultas de NFSe para finalizar por completo.

Até mais.

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

Italo,

testei EnviarLoteRPS, ConsultarLoteRPS, ConsultarSituacaoLoteRPS e CancelarNfse.

Ambas as rotinas funcionaram para o provedor Betha.

Como você mencionou, falta ConsultarNfse e ConsultarNfseRPS pra ficar 100%.

Vou ver o que consigo aqui.

Se você alterar mais alguma coisa por favor me informe.

Abraço e obrigado.

Rodrigo Cantelli

Postado

Bom dia Italo.

Apenas para lhe informar. Estou fazendo mais algumas alterações no ACBrProvedorBetha,

para manter no mesmo padrão dos outros.

Vou ver se já implemento o que falta também.

Assim que eu finalizar te passo.

Abraço.

Rodrigo Cantelli

Postado

Italo,

fiz algumas alterações no ACBrProvedorBetha, como havia comentado.

Já testei e está tudo ok. Se puderes incluir no Branches.

Também implementei a consulta de NFSe por RPS. Porém estou com um problema nela. Devo ter esquecido de algo.

Está enviando a consulta e lendo o retorno do XML. Porém, na unit ACBrWebServices quando chego no final da TNFSeConsultarNfseRPS.Executar,

onde ele vai atribuir os valores à FNotasFiscais, a lista de notas não está criada, e dá erro. FNotasFiscais.Count é "0".

Não sei o que esqueci, estou dando uma olhada mas tá complicado. Pode me ajudar?

Em anexo ACBrProvedorBetha com as alterações que fiz para "padronizar", e mais alterações nas linhas

179, 208 e 365, para funcionar a consulta de NFSe por RPS.

Arquivo pnfsConsNfseporRPSResposta com alterações na linha 250

e Arquivo ACBrNFSeWebServices com alterações na linha 1841.

Encontrarás as alterações se pesquisares por {Rodrigo Cantelli}

Aguardo um retorno. Abraço Italo!

alteracoes_betha_3.rar

Rodrigo Cantelli

Postado

Italo, boa tarde.

Não sei se chegou a baixar as alterações que anexei no post anterior.

Em anexo estou enviado aquelas, mais a implementação da rotina ConsultarNFSe.

Além do que comentei no post anterior,

alterei na Unit pnfsConsNfseResposta a linha 252, e na ACBrNFSeWebServices, a linha 2031. Além de alterações na ACBrProvedorBetha.

Tive o mesmo problema que na consulta de NFSe por RPS. A FNotasFiscais está "vazia". Creio que teria que dar um add, ou algo assim.

Se puderes ajudar quanto à isso.

No mais creio que agora ficou 100% as rotinas para o provedor Betha.

Abraço!

alteracoes_betha_4.rar

Rodrigo Cantelli

  • Consultores
Postado

Boa tarde Rodrigo,

Só agora tive condições de baixar os seus anexos, a noite em casa com calma vou checar tudo.

Pois hoje estou atarefado implantando um módulo de controle de acesso a empresa, logo esta corrigo por aqui.

Mas desde já, muito obrigado.

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

  • Consultores
Postado

Boa tarde Rodrigo,

O problema relatado em seu post anterior: FNotasFiscais está "vazia" andei checando e realmente ha necessidade de carregar o XML do RPS antes de realizar a consulta da NFSe por RPS.

Fiz uma alteração que vai checar se foi carregado ou não e apresentar uma mensagem de erro caso não tenha sido carregado.

Vamos ver se agora vai funcionar.

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

Italo, complementei sua implementação no ACBrNFSe.pas.

Dê uma procurada por {Rodrigo Cantelli}.

Isso resolveu o problema da carga das NotasFiscais para a rotina ConsutarNFSeporRps.

Mas e para a rotina ConsutarNFSe?

Nessa rotina se não passar data como parametro, retorna todas as NFs, e se passar, retorna do período.

Não teria que adicionar à lista de NFs conforme a leitura do arquivo de retorno?

Se puder ver algo disso, creio que é só o que estaria faltando então.

Grande abraço.

ACBrNFSe.pas

Rodrigo Cantelli

  • Membros Pro
Postado

Italo boa tarde.

Estou tentando instalar o novo ACBrNFSe porém quando tento compilar o ACBrNFSeDanfseQRpkg é apresentado um erro dizendo que o pacote QR5RunD7 é necessário, porém não encontrei esse pacote.

Como devo proceder?

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Cabo Frio/RJ

 

  • Membros Pro
Postado

Italo, você tem usado o componente para enviar lote de RPS, notei algo estranho em meu sistema, tenho o seguinte procedimento, envio lotes de 20 notas cada, pois tenho que enviar quase 1000 notas por mês. E observei que o retorno que pego do número e do protocolo da NFSe e salvo no meu registro vieram trocadas para as minhas notas enviadas.

Te agradeço se puder me ajudar me informando se estou fazendo algo de errado.

Segue abaixo parte do meu código que faço a captura dessas informações após o envio do lote e recepção da resposta.


        if Enviar(IdRps, False) then

        begin

          if WebServices.Msg <> EmptyStr then

          begin

            sMsg := WebServices.Msg;

            for x := 0 to NotasFiscais.Count - 1 do

              if NotasFiscais.Items[x].Msg <> EmptyStr then

                sMsg := sMsg + #13#10 + Trim(NotasFiscais.Items[x].NFSe.IdentificacaoRps.Numero) + ' -> ' + NotasFiscais.Items[x].Msg;

            Mensagem(sMsg, 'Erro no Envio do Lote (WebServices.Msg)', 'A');


            TableFilter[1] := '';

            OpenSQL(1, otClose, '');

            LimpaMensagem;

            break;

          end else

          begin

            Mensagem('Atualizando o banco de dados . . .', '', 'M');

            sProtocolo := WebServices.ConsLote.Protocolo;


            if not Reenvio then

            begin

              frmManager.sqlDB.ExecuteDirect('UPDATE GERADORES SET VALOR = VALOR + 1 WHERE TABELA = ''NFSE_RPS''');

            end;


            ListaRpsCons.Clear;

            for x := 0 to NotasFiscais.Count - 1 do

            begin

              if Trim(NotasFiscais.Items[x].NFSe.Numero) <> EmptyStr then

              begin

                tbTabela1.First;

                tbTabela1.Locate('NUMNOTA', StrToInt(Trim(NotasFiscais.Items[x].NFSe.IdentificacaoRps.Numero)), []);

                tbTabela1.Edit;

                tbTabela1DATA.AsDateTime := Date;

                tbTabela1NFSE_ENVIADA.AsString := '1';

                tbTabela1NFSE_RPS.AsString := IntToStr(IdRps);

                tbTabela1NFSE_RPS_PROTOCOLO.AsString := Trim(sProtocolo);

                tbTabela1NFSE_STATUS.AsInteger := 9;

                tbTabela1NFSE_NUMERO.AsString := Trim(NotasFiscais.Items[x].NFSe.Numero);

                tbTabela1NFSE_CODIGO_VERIF.AsString := Trim(NotasFiscais.Items[x].NFSe.CodigoVerificacao);

                if FileExists(Configuracoes.Arquivos.GetPathNFSe + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '-nfse.xml') then

                  tbTabela1NFSE_XML.LoadFromFile(Configuracoes.Arquivos.GetPathNFSe + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '-nfse.xml');

                if FileExists(DANFSe.PathPDF + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '.pdf') then

                  tbTabela1NFSE_PDF.LoadFromFile(DANFSe.PathPDF + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '.pdf');

                tbTabela1.Post;

              end else

              begin

                ListaRpsCons.Add(Trim(NotasFiscais.Items[x].NFSe.IdentificacaoRps.Numero));

              end;

            end;

            tbTabela1.ApplyUpdates(-1);

            tbTabela1.First;

          end;

        end else

        begin

          sMsg := WebServices.Msg;

          for x := 0 to NotasFiscais.Count - 1 do

            if NotasFiscais.Items[x].Msg <> EmptyStr then

              sMsg := sMsg + #13#10 + Trim(NotasFiscais.Items[x].NFSe.IdentificacaoRps.Numero) + ' -> ' + NotasFiscais.Items[x].Msg;

          Mensagem(sMsg, 'Erro no Envio do Lote (WebServices.Msg)', 'A');


          TableFilter[1] := '';

          OpenSQL(1, otClose, '');

          LimpaMensagem;

          break;

        end;

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Cabo Frio/RJ

 

  • Membros Pro
Postado

Italo, simplificando, os códigos relevantes ao meu processo são estes:



        if Enviar(IdRps, False) then

        begin

            . . .

            sProtocolo := WebServices.ConsLote.Protocolo;


            for x := 0 to NotasFiscais.Count - 1 do

            begin

              if Trim(NotasFiscais.Items[x].NFSe.Numero) <> EmptyStr then

              begin

                tbTabela1.First;

                tbTabela1.Locate('NUMNOTA', StrToInt(Trim(NotasFiscais.Items[x].NFSe.IdentificacaoRps.Numero)), []);

                tbTabela1.Edit;

                tbTabela1DATA.AsDateTime := Date;

                tbTabela1NFSE_ENVIADA.AsString := '1';

                tbTabela1NFSE_RPS.AsString := IntToStr(IdRps);

                tbTabela1NFSE_RPS_PROTOCOLO.AsString := Trim(sProtocolo);

                tbTabela1NFSE_STATUS.AsInteger := 9;

                tbTabela1NFSE_NUMERO.AsString := Trim(NotasFiscais.Items[x].NFSe.Numero);

                tbTabela1NFSE_CODIGO_VERIF.AsString := Trim(NotasFiscais.Items[x].NFSe.CodigoVerificacao);

                if FileExists(Configuracoes.Arquivos.GetPathNFSe + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '-nfse.xml') then

                  tbTabela1NFSE_XML.LoadFromFile(Configuracoes.Arquivos.GetPathNFSe + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '-nfse.xml');

                if FileExists(DANFSe.PathPDF + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '.pdf') then

                  tbTabela1NFSE_PDF.LoadFromFile(DANFSe.PathPDF + '\' + Trim(NotasFiscais.Items[x].NFSe.Numero) + '.pdf');

                tbTabela1.Post;

              end;

            end;

            tbTabela1.ApplyUpdates(-1);

            tbTabela1.First;

          end;

        end;

945757316_FantastsoftLogotipo100px.png.20c116e19bad4f7436640307ee0fa01a.png   Endrigo Rodrigues
Fantastsoft Sistemas

Node / Delphi 11.2
Cabo Frio/RJ

 

Postado

Italo, um pequeno ajuste.

Quando você puder, na ACBrNFSeWebServices, na função TNFSeCancelarNfse.Executar,

muda a linha

TACBrNFSe( FACBrNFSe ).SetStatus( stNFSeConsulta );

para

TACBrNFSe( FACBrNFSe ).SetStatus( stNFSeCancelamento );

Abraço.

Rodrigo Cantelli

Postado

Italo, eu de novo. rsrs

Seguinte, outro dia me equivoquei quanto a rotina TACBrNFSe.ConsutarNFSeporRps.

Te falei que não estava carregando o arquivo XML do RPS, que a FNotasFiscais estava vazia. E você

adicionou a carga do arquivo na rotina.

Porém, hoje dando uma olhada no Demo, vi que quando chama essa função, ainda no demo, ele pede para

selecionar o arquivo, e então carrega o arquivo. Eu não estava fazendo isso eu meu ERP.

Ou seja, agora está carregando duas vezes, veja:


procedure TfrmDemo_ACBrNFSe.btnConsultarNFSeRPSClick(Sender: TObject);

begin

 OpenDialog1.Title := 'Selecione a Rps';

 OpenDialog1.DefaultExt := '*-Rps.xml';

 OpenDialog1.Filter := 'Arquivos Rps (*-Rps.xml)|*-Rps.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';

 OpenDialog1.InitialDir := ACBrNFSe1.Configuracoes.Geral.PathSalvar;


 if OpenDialog1.Execute then

  begin

   ACBrNFSe1.NotasFiscais.Clear;

   ACBrNFSe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName);


   ACBrNFSe1.ConsutarNFSeporRps(ACBrNFSe1.NotasFiscais.Items[0].NFSe.IdentificacaoRps.Numero,

                                ACBrNFSe1.NotasFiscais.Items[0].NFSe.IdentificacaoRps.Serie,

                                TipoRPSToStr(ACBrNFSe1.NotasFiscais.Items[0].NFSe.IdentificacaoRps.Tipo),

                                ACBrNFSe1.NotasFiscais.Items[0].NFSe.Prestador.Cnpj,

                                ACBrNFSe1.NotasFiscais.Items[0].NFSe.Prestador.InscricaoMunicipal);

E na ACBrNFSe, faz a carga novamente:

function TACBrNFSe.ConsutarNFSeporRps(ANumero, ASerie, ATipo, ACnpj,

  AInscricaoMunicipal: String): Boolean;

var

 aPath: String;

begin

 // Incluido por Rodrigo Cantelli

 aPath := FConfiguracoes.Geral.PathSalvar;

 if FConfiguracoes.Arquivos.AdicionarLiteral

  then NotasFiscais.LoadFromFile(aPath+'RPS\'+ANumero+ASerie+'-Rps.xml')

  else NotasFiscais.LoadFromFile(aPath+ANumero+ASerie+'-Rps.xml');


 if NotasFiscais.Count <= 0

  then begin

   if Assigned(Self.OnGerarLog)

    then Self.OnGerarLog('ERRO: Nenhum RPS adicionado');

   raise Exception.Create('ERRO: Nenhum RPS adicionado');

   exit;

  end;


 Result := WebServices.ConsutaNFSeporRps(ANumero, ASerie, ATipo, ACnpj, AInscricaoMunicipal);

end;

Acredito que nesse ultimo código, apenas da linha " if NotasFiscais.Count <= 0 " em diante precisa estar,

uma vez que já carregou o arquivo ao selecionar.

Como disse, falha minha, eu é que não estava carregando o arquivo.

Se puder dar uma olhada, e conferir se é isto mesmo.

Obrigado

Rodrigo Cantelli

  • Consultores
Postado

Boa tarde Rodrigo,

Mandei para o branches mais algumas alterações inclusive no programa exemplo.

Observações:

* Devemos carregar o xml do RPS antes de realizar: a Consulta a um Lote e a Consulta a NFSe por RPS.

* Devemos carregar o xml da NFSe antes de realizar: o Cancelamento da NFSe e Imprimir o DANFSE.

* Consultar NFSe por período, não se faz necessário carregar o xml dos RPS, visto que essa funcionalidade funciona como um Download da NFSe emitidas no período.

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

  • Este tópico foi criado há 3721 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.