Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Senhores, bom dia. Estou ajustando o meu projeto para trunk2 com NFS-e. O método ConsSitLote.Protocolo foi alterado ?

Exemplo do código que utilizo para NFS-e de Belo Horizonte..

                     try
                        lcbo_NFSe_Enviada := ACBrNFSe.Enviar( NFe.FieldByName('NFS_PK_NOTAFISCALSAIDA').AsString, False );
                        // para PBH não existe essa opção lcbo_NFSe_Enviada :=  ACBrNFSe.Gerar(NFe.FieldByName('NFS_PK_NOTAFISCALSAIDA').AsInteger); 
                     except
                        on e : exception do
                        begin
                           lcbo_NFSe_Enviada := False;
                           if Trim( e.message ) <> EmptyStr then
                              ShowMessage( e.message );
                        end
                     end;
                     if not lcbo_NFSe_Enviada then
                     begin
                        if Trim( ACBrNFSe.WebServices.ConsSitLote.Protocolo ) <> EmptyStr then
                        begin
                            utme_RetornoWS               := UTF8Encode(ACBrNFSe.WebServices.ConsSitLote.RetWS);
                            utst_Diretorio_NFES_Recebida := ACBrNFSe.Configuracoes.Arquivos.PathRPS + '\' + ACBrNFSe.NotasFiscais.Items[0].NFSe.NomeArq;

 

  • Membros Pro
Postado

Não tenho certeza mas me parece o mesmo problema que estou tendo. 

Ao enviar a NFe para o provedor GINFES na trunk1, se a NF era recusada a função ACBrNFSe.Enviar( retornava false

e eu conseguia pegar o erro que aconteceu, agora na trunk2 ela sempre retorna true e a nota não é confirmada, mas eu não consigo capturar o motivo da recusa.

 

Gilson do Carmo
WindSoft Sistemas

  • Consultores
Postado

Bom dia Gilson,

O método Enviar a principio executa 4 tarefas.

1. Envia o lote para o web services;

2. Consulta a situação do lote;

3. Se a situação for 3 ou 4, ou seja, lote processado com sucesso ou não será consultado o lote;

4. Se a nota foi confirmada o DANFSE será impresso;

Pois bem, somente no Consultar Lote que teremos o motivo da rejeição.

No Consultar Lote teremos a informação se o lote foi processado com sucesso = 4 ou se foi processado com erro = 3

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, e basicamente o que o windsoft relatou. 

Envio a NFS-e com a função ACBrNFSe.Enviar( NFe.FieldByName('NFS_PK_NOTAFISCALSAIDA').AsString, False );

Se se a prefeitura não retorno True então verifico   

if Trim( ACBrNFSe.WebServices.ConsSitLote.Protocolo ) <> EmptyStr then

Para atualizar o meu banco de dados.
            

Mas no trunk2 não encontrei ACBrNFSe.WebServices.ConsSitLote.Protocolo...

  • Membros Pro
Postado (editado)

Ola Ítalo bom dia!

To debugando o código aqui mas tá difícil de encontrar onde ele está o problema.

Vou colocar trechos do código aqui pra ver se você pode, com sua boa vontade, me ajudar.

Primeiramente chamo:

        if not ( ACBrNFSe1.Enviar(iLote,False) ) then
          raise Exception.Create(ACBrNFSe1.WebServices.EnvioWebService.Msg);

O componente chama o método: 

function TWebServices.Envia(ALote: String): Boolean;
begin
  FEnviarLoteRPS.FNumeroLote := ALote;

  Result := FEnviarLoteRPS.Executar;

...

  if (TACBrNFSe(FACBrNFSe).Configuracoes.Geral.ConsultaLoteAposEnvio) and (Result) then
  begin
    if not (TACBrNFSe(FACBrNFSe).Configuracoes.Geral.Provedor in [proDigifred, proProdata,
           proVitoria, proPVH, profintelISS, proSaatri, proSisPMJP, proCoplan,
           proISSDigital, proISSDSF, proFiorilli, proFreire, proTecnos, proDBSeller]) then
     begin
       Result := FConsSitLoteRPS.Executar;

       if not (Result) then
         FConsSitLoteRPS.GerarException( FConsSitLoteRPS.Msg );
     end;

     if TACBrNFSe(FACBrNFSe).Configuracoes.Geral.Provedor = proInfisc then
       Result := True
     else
       Result := FConsLote.Executar;

     if not (Result) then
       FConsLote.GerarException( FConsLote.Msg );

  end;

Neste trecho, o consultarloteaposenvio está false. Eu tenho que definir isso? (Na trunk1 não precisava). 

Outro detalhe no if que está em vermelho, não deveria ser um else if? (Eu já até tinha perguntado isso em outro tópico).

Tentei enviar propositalmente um lote que já tinha sido recusado anteriormente, no trecho em azul, está me gerando a exceção "unknown" e FConsLote.Msg = ''

Se não tiver erro nenhum na NF que está sendo enviada, eu consigo enviar normalmente.

Editado por windsoft

Gilson do Carmo
WindSoft Sistemas

  • Consultores
Postado

Boa tarde Gilson,

ConsultaLoteAposEnvio é uma configuração que você determina se o componente realiza todas as ações do Enviar até chegar ao resultado final que é ter o XML da NFS-e ou se você vai montar a sua própria rotina.

Se essa propriedade for True, tudo fica por conta do componente.

Ela é útil também para aqueles provedores que durante o dia só recebem os lotes, para processa-los durante a madrugada e disponibilizar o XML da NF-e no período da manhã do dia seguinte.

Deste caso você deixa essa propriedade com o valor False para que somente ocorra o envio.

  • Curtir 2
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

Boa tarde Ítalo, obrigado pela atenção, estou continuando os testes aqui, mas ainda está um pouco instável, estou recebendo retorno "Unknown" no envio de NFSe (GINFES), as vezes vai as vezes retorna isso.

Aproveitando a mensagem:

Eu fiz uma versão do DANFSe para fastreport com a mesma "cara" do DANFSe do FortesReport, pra isso eu tive que criar uns campos no DMDanfSe:

    cdsParametrosNaturezaOperacao: TStringField;
    cdsParametrosRegimeEspecialTributacao: TStringField;
    cdsParametrosOptanteSimplesNacional: TStringField;
    cdsParametrosIncentivadorCultural: TStringField;

 

Você acha interessante disponibilizar isso pra todos? 

Se sim coloco neste mesmo topico ou crio um novo pra lhe enviar?

 

Gilson do Carmo
WindSoft Sistemas

  • 3 meses depois ...
  • Este tópico foi criado há 3201 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.