Ir para conteúdo
  • Cadastre-se

dev botao

Lote RPS


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

Recommended Posts

  • Membros Pro
48 minutos atrás, pradilsoncarlos disse:

Boa Tarde.

Segue imagem do erro e xml.

Não sei se está faltando o lote ou se já enviou e está tentando enviar novamente o mesmo número.

Preciso de ajuda urgente.😫

lote rps.png

1500-nfse.xml 1 kB · 1 download

Amigo, o Numero de Lote(ACBrNFSe1.NotasFiscais.NumeroLote), deve ser aumentado toda vez que clicar em enviar, nao importa se deu certo ou deu erro, o unico que mantem é o numero de RPS. E somente se o RPS for aceito, recebera o Numero da NFS-e.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

4 minutos atrás, hetoandrade disse:

Amigo, o Numero de Lote(ACBrNFSe1.NotasFiscais.NumeroLote), deve ser aumentado toda vez que clicar em enviar, nao importa se deu certo ou deu erro, o unico que mantem é o numero de RPS. E somente se o RPS for aceito, recebera o Numero da NFS-e.

               NotasFiscais.NumeroLote := FormatFloat('###0', CDSNota2.FieldByName('Numero').asInteger);

               //NotasFiscais.NumeroLote := '1';
               //Alteracao
               //NotasFiscais.Transacao := True;

               With NotasFiscais.Add.NFSe do
                  Begin
                     {$REGION 'Informações de RPS e Regime da Empresa'}

                     If ConfiguracaoIni.TxtRps.Text = '' then
                        IdentificacaoRps.Numero := FormatFloat('#########0', CDSNota2.FieldByName('Numero').asInteger)
 

Link para o comentário
Compartilhar em outros sites

30 minutos atrás, pradilsoncarlos disse:

estou passando o número da NFSe junto com o número do lote, o mesmo número que informo na nota informo no lote

qual o forma correta de informar o número do lote ?

ACBRNFSe1.NotasFiscais.NumeroLote := ?????

Agora, pradilsoncarlos disse:

qual o forma correta de informar o número do lote ?

ACBRNFSe1.NotasFiscais.NumeroLote := ?????

No meu xml não aparece a tag NumeroLote

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
47 minutos atrás, pradilsoncarlos disse:

qual o forma correta de informar o número do lote ?

ACBRNFSe1.NotasFiscais.NumeroLote := ?????

No meu xml não aparece a tag NumeroLote

É porque vc esta olhando no arquivo errado (nfse), olhe nos arquivos que contem "-env-lot" no nome, marca no seu componente para salvar todos XMLs. O Numero do Lote tem que ser aumentado cada vez que voce envia. Mesmo que seja o mesmo RPS.

ACBRNFSe1.NotasFiscais.NumeroLote :=  ACBRNFSe1.NotasFiscais.NumeroLote + 1;

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

16 horas atrás, hetoandrade disse:

É porque vc esta olhando no arquivo errado (nfse), olhe nos arquivos que contem "-env-lot" no nome, marca no seu componente para salvar todos XMLs. O Numero do Lote tem que ser aumentado cada vez que voce envia. Mesmo que seja o mesmo RPS.

ACBRNFSe1.NotasFiscais.NumeroLote :=  ACBRNFSe1.NotasFiscais.NumeroLote + 1;

Eu vi um exemplo onde o programador falava que informava da seguinte maneira:

data e hora, minuto e segundo de trás pra frente tipo assim 20190517101614, posso fazer dessa maneira ?

ai ficaria sssim ACBRNFSe1.NotasFiscais.NumeroLote := 20190517101614 

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Bom dia Adilson,

O numero do lote que é gerado no XML deve ser passado como parâmetros pelos métodos Enviar ou EnviarSincrono, veja a sintaxe:

    function Enviar(ALote: integer; Imprimir: Boolean = True): Boolean; overload;
    function EnviarSincrono(ALote: Integer; Imprimir: Boolean = True): Boolean; overload;
 

  • Curtir 1
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Italo Jurisato Junior disse:

Bom dia Adilson,

O numero do lote que é gerado no XML deve ser passado como parâmetros pelos métodos Enviar ou EnviarSincrono, veja a sintaxe:

    function Enviar(ALote: integer; Imprimir: Boolean = True): Boolean; overload;
    function EnviarSincrono(ALote: Integer; Imprimir: Boolean = True): Boolean; overload;
 

Peço que perdoe pelas minhas limitações, mas eu não entendi.

Como vou passar essas informações, como verifico se o servidor é síncrono ?

Link para o comentário
Compartilhar em outros sites

33 minutos atrás, pradilsoncarlos disse:

Peço que perdoe pelas minhas limitações, mas eu não entendi.

Como vou passar essas informações, como verifico se o servidor é síncrono ?

Acho que não me expressei bem no questionamento, na vdd minha dúvida é como saber quais servidores são SÍNCRONOS ou ASSINCRONOS.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Adilson,

No arquivo INI do provedor em questão você acaba descobrindo.

A principio os provedores que seguem a versão 1 do layout da ABRASF só oferecem o serviço de envio assíncrono (método Enviar).

Já os que seguem a versão 2 costumam oferecer os 3 serviços: envio assíncrono, envio síncrono e o gerar (métodos: Enviar, EnviarSincrono e Gerar).

Exemplos:

provedor que segue a versão 1

Layout=ABRASFv1

provedor que segue a versão 2

Layout=ABRASFv2
 

Mas existem provedores que seguem a versão 2, mas não oferecem os 3 serviços como é o caso do TcheInfov2 que só tem o serviço de envio síncrono.

  • Curtir 2
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

No Botão Enviar da NFSe ficou assim:

      If wIBGE = '3552601' then //Tabapua
         Retorno := ACBrNFSe1.EnviarSincrono(CDSNota2.FieldByName('Codigo').asInteger)
      Else
         Retorno := ACBrNFSe1.Enviar(CDSNota2.FieldByName('Codigo').asInteger, False);

 

e no botão gerar NFSe ficou assim:

               NotasFiscais.NumeroLote := FormatFloat('#####0', CDSNota2.FieldByName('Codigo').asInteger);
 

 

Está correto ?

Link para o comentário
Compartilhar em outros sites

29 minutos atrás, pradilsoncarlos disse:

No Botão Enviar da NFSe ficou assim:

      If wIBGE = '3552601' then //Tabapua
         Retorno := ACBrNFSe1.EnviarSincrono(CDSNota2.FieldByName('Codigo').asInteger)
      Else
         Retorno := ACBrNFSe1.Enviar(CDSNota2.FieldByName('Codigo').asInteger, False);

 

e no botão gerar NFSe ficou assim:

               NotasFiscais.NumeroLote := FormatFloat('#####0', CDSNota2.FieldByName('Codigo').asInteger);
 

 

Está correto ?

 

nfse3.png

nfse2.png

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Adilson,

Primeiramente você esta misturando as coisas, como informar o numero do lote e o método Consultar Situação do Lote.

Vamos seguir as regras do fórum, para cada problema uma postagem diferente.

O numero do lote é informado como parâmetro nos métodos Enviar e EnviarSincrono.

No Gerar não tem numero do lote pelo simples fato de ser enviado um RPS por vez.

Com relação ao erro que apareceu ao tentar Consultar a situação do Lote a explicação é muito simples, esse serviço não existe nos webservices dos provedores que seguem a versão 2 do layout da ABRASF, ele esta presente somente na versão 1.

Como saber qual versão do layout da ABRASF o provedor segue, já te mostrei em uma postagem minha acima.

  • Curtir 1
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

47 minutos atrás, Italo Jurisato Junior disse:

Bom dia Adilson,

Primeiramente você esta misturando as coisas, como informar o numero do lote e o método Consultar Situação do Lote.

Vamos seguir as regras do fórum, para cada problema uma postagem diferente.

O numero do lote é informado como parâmetro nos métodos Enviar e EnviarSincrono.

No Gerar não tem numero do lote pelo simples fato de ser enviado um RPS por vez.

Com relação ao erro que apareceu ao tentar Consultar a situação do Lote a explicação é muito simples, esse serviço não existe nos webservices dos provedores que seguem a versão 2 do layout da ABRASF, ele esta presente somente na versão 1.

Como saber qual versão do layout da ABRASF o provedor segue, já te mostrei em uma postagem minha acima.

Não tinha visto sua resposta e fiz outra postagem.

Quanto a abrir uma nova postagem, eu só não fiz isso porque são os problemas que estou tendo em sequencia, conforme eles aparecem eu posto aqui, pra mim era tudo consequencia do envio do lote.

Se o não existe esse serviço no servidor porque então estava vindo essa mensagem 

nfse1.png

Link para o comentário
Compartilhar em outros sites

  • Consultores

Adilson,

Acredito que você não entendeu como a coisa funciona.

Esse provedor existe que o numero do lote passado como parâmetro nos métodos Enviar e EnviarSincrono seja sequencial.

Uma coisa é o numero do Lote, outra coisa é o numero do RPS.

Essa mensagem de erro não tem nada haver com o método Consultar Situação do Lote e sim é o retorno do webservice ao enviar o lote.

  • Curtir 1
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

4 minutos atrás, Italo Jurisato Junior disse:

Adilson,

Acredito que você não entendeu como a coisa funciona.

Esse provedor existe que o numero do lote passado como parâmetro nos métodos Enviar e EnviarSincrono seja sequencial.

Uma coisa é o numero do Lote, outra coisa é o numero do RPS.

Essa mensagem de erro não tem nada haver com o método Consultar Situação do Lote e sim é o retorno do webservice ao enviar o lote.

A partir do momento que eu comecei a passar o seguinte código:

 

NotasFiscais.NumeroLote := FormatFloat('#####0', CDSNota2.FieldByName('Codigo').asInteger) ---- no botão gerar;

e o código abaixo no botão enviar:

  If wIBGE = '3552601' then //Tabapua
         Begin
            Retorno := ACBrNFSe1.EnviarSincrono(CDSNota2.FieldByName('Codigo').asInteger);
         End
      Else
         Retorno := ACBrNFSe1.Enviar(CDSNota2.FieldByName('Codigo').asInteger, True);

 

ai começou a aparecer a seguinte mensagem:

 

 

 

foi a partir daqui que me retornou a mensagem

mensagem atual.png

por isso não abri nova dúvida.

Estou meio confuso mesmo sobre quem é quem, com base no que li nos manuais fiz a alimentação dessa forma, talvez eu não tenha entendido corretamente

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Adilson,

Essa mensagem não tem nada haver com a sua postagem anterior, que fazia referencia ao numero do lote.

Essa mensagem de erro que tem haver com a Consulta a situação do Lote, é por que a sua aplicação esta executando esse método, sendo que não deve.

Você esta enviando um RPS para o provedor Pronimv2, conforme consta na mensagem de erro.

Esse provedor segue a versão 2 do layout da ABRASF.

Volto a lhe dizer que os provedores que seguem a versão 2 não tem o serviço de Consultar a Situação do Lote.

Você tem que condicionar a execução do método ConsultarSituação.

Inclua na sua aplicação na tela de configuração, um campo que diz se é para executar ou não esse método.

  • Curtir 2
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa Tarde.

Italo, me perdoa, mas não estou conseguindo entender.

Se vc acha que devo iniciar um novo fórum faço isso. Meu código está assim, só me diz se essa é a forma correta.

Botão Gerar:  

Aqui eu crio e atribuo um número sequencial para o Lote

            With BDados.Parametro2 Do
               Begin
                  Sql.Clear;
                  Sql.Add('SELECT COALESCE(MAX(LOTE),0) + 1 LOTE ');
                  Sql.Add('  FROM NFEEMPRESA                     ');
                  Sql.Add(' WHERE CODIGO = :WCODIGO              ');
                  Params[0].Value := wEmpresa;
                  Open;
                  wLote := FieldByName('LOTE').AsInteger;
                  Close;

                  Sql.Clear;
                  Sql.Add('UPDATE NFEEMPRESA SET LOTE = :WLOTE  ');
                  Sql.Add(' WHERE CODIGO = :WCODIGO             ');
                  Params[0].Value := wLote;
                  Params[1].Value := wEmpresa;
                  ExecSQL;

               End;
 NotasFiscais.NumeroLote := FormatFloat('#####0', wLote);

 

Botão Enviar:

Aqui eu faço uma verificação para qual municipio ele está enviando a nota e executo o enviar

       If wIBGE = '3552601' then //Tabapua
         Begin
            Retorno := ACBrNFSe1.EnviarSincrono(wLote);
         End
      Else
         Retorno := ACBrNFSe1.Enviar(wLote, True);
 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Adilson,

Em vez de você checar o código do município para saber se vai executar o método EnviarSincrono ou não, porque você não cria uma opção de configuração na sua aplicação que defini essa situação?

Tela de configuração:

[  ] Envio Síncrono

[  ] Consultar Situação do Lote

Se estiver "ticado" significa que sim.

A sua rotina no final ficaria desta forma:
 

if chkEnvioSincrono  then // a variável chkEnvioSincrono é do tipo boolean
  Retorno := ACBrNFSe1.EnviarSincrono(wLote)
else
  Retorno := ACBrNFSe1.Enviar(wLote, True);

// NumProtocolo é uma variavel que contem o numero do protocolo retornado após o envio
// é utilizado no método ConsultarSituacao e no ConsultarLoteRps onde devemos informar 
// o numero do lote e o numero do protocolo
(...)

if chkConsultarSituacao  then // a variável chkConsultarSituacao é do tipo boolean
  Retorno := ACBrNFSe1.ConsultarSituacao(NumProtocolo)

 

  • Curtir 1
Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

23 horas atrás, Italo Jurisato Junior disse:

Adilson,

Em vez de você checar o código do município para saber se vai executar o método EnviarSincrono ou não, porque você não cria uma opção de configuração na sua aplicação que defini essa situação?

Tela de configuração:

[  ] Envio Síncrono

[  ] Consultar Situação do Lote

Se estiver "ticado" significa que sim.

A sua rotina no final ficaria desta forma:
 


if chkEnvioSincrono  then // a variável chkEnvioSincrono é do tipo boolean
  Retorno := ACBrNFSe1.EnviarSincrono(wLote)
else
  Retorno := ACBrNFSe1.Enviar(wLote, True);

// NumProtocolo é uma variavel que contem o numero do protocolo retornado após o envio
// é utilizado no método ConsultarSituacao e no ConsultarLoteRps onde devemos informar 
// o numero do lote e o numero do protocolo
(...)

if chkConsultarSituacao  then // a variável chkConsultarSituacao é do tipo boolean
  Retorno := ACBrNFSe1.ConsultarSituacao(NumProtocolo)

 

Quero agradecer pelo código aqui enviado, deu certo, só tenho uma dúvida a seguinte linha vai ser alimentada da seguinte forma:

NotasFiscais.NumeroLote := FormatFloat('#####0', wLote);

é isso mesmo?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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