Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa tarde a todos,

 

Tenho um cliente que me pediu para gerar todos os ctes em um unico lote, mas estou com algumas duvidas...

 

Para gerar estou fazendo assim

 

Qry.first;

while not Qry.eof do begin

 

if not DMX.IBCte.Locate('CODIGO', Qry.fieldbyname('CODIGO').AsInteger, []) then
     raise exception.Create('Não foi possível encontrar a CTE para a impressão.');

 

   GerarCTE;  // alimenta o componente acbrnfe

     Try
     dm.ACBrCTe1.Enviar(StrToInt(dmx.IBCteNCT.AsString));
     except on E:Exception do begin
     raise exception.Create( inttostr(dm.ACBrCTe1.WebServices.Retorno.cStat) + '  ' +  e.Message);
     end;
     end;

     Qry.Next;
     end;

 

beleza até aqui ta tudo certo, mas depois tenho que reuperar as informações de cada cte em separado

 

for i:= 0 to DM.ACBrCTe1.Conhecimentos.Count -1  do begin

     if not DMX.IBCte.Locate('NCT', DM.ACBrCTe1.Conhecimentos.Items.CTe.Ide.nCT , []) then
     raise exception.Create('Não foi possível encontrar a CTE para a Conclusão.');

     dmx.IBCTEDUP.Close;
     dmx.IBCTEDUP.ParamByName('codigo').AsInteger:= dmx.IBCteCODIGO.Value;
     dmx.IBCteDUP.OPEN;

     
     if dm.ACBrCTe1.WebServices.Retorno.cStat > 0 then begin
     dmx.IBCte.Edit;
     dmx.IBCteCSTAT.Value:= dm.ACBrCTe1.WebServices.Retorno.cStat;
     dmx.IBCteSTATUS.Value:= DM.ACBrCTe1.Conhecimentos.Items.CTe.procCTe.xMotivo;
     DMX.IBCtePROTOCOLO.Value:= DM.ACBrCTe1.Conhecimentos.Items.CTe.procCTe.nProt;
     dmx.IBCteCHAVEACESSO.Value:= DM.ACBrCTe1.Conhecimentos.Items.CTe.procCTe.chCTe;
     if  dm.ACBrCTe1.WebServices.Retorno.cStat = 100 then
     DMX.IBCteCONCLUIU.Value:= 'S';
     if  (dm.ACBrCTe1.WebServices.Retorno.cStat = 301) or
     (dm.ACBrCTe1.WebServices.Retorno.cStat = 302) or
     (dm.ACBrCTe1.WebServices.Retorno.cStat = 303) or
     (dm.ACBrCTe1.WebServices.Retorno.cStat = 304) or
     (dm.ACBrCTe1.WebServices.Retorno.cStat = 305) or
     (dm.ACBrCTe1.WebServices.Retorno.cStat = 306)
      then
     DMX.IBCteCONCLUIU.Value:= 'D';
     DMX.IBCTEARQUIVO.LoadFromFile(Path + '\temp\Cte\'+ DM.ACBrCTe1.Conhecimentos.Items.CTe.procCTe.chCTe + '-cte.XML');
     dmx.IBCte.Post;

     DMX.IBOTransaction1.Commit;
     end;

end;

 

estou fazendo certo?

no caso do dm.ACBrCTe1.WebServices.Retorno.cStat se em uma cte gerar um cstat e em outra cte retornar outro cstat

como eu poderia proceder?

 

Grato,

 

Rodrigo

  • Consultores
Postado

Bom dia Rodrigo,

 

Em vez de:

 

dm.ACBrCTe1.WebServices.Retorno.cStat

 

Mude para:

 

dm.ACBrCTe1.WebServices.Retorno.CteRetorno.ProtCTe.Items.cStat

 

Desta forma você terá o status de cada conhecimento enviado e processado pela SEFAZ.
 

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

Bom dia Italo, Obrigado pela resposta, deu certo,

 

Outra questao que nao tinha visto anteriormente, é que o cliente esta pedindo que o danfe imprima todas as ctes do lote em uma unica visualização, o cliente imprime uma vez so todas as ctes,

e atualmente o sistema fecha  e abre um danfe para cada cte.

 

Isso é possivel?

 

Grato,

 

Rodrigo

  • Consultores
Postado

Boa tarde Rodrigo,

 

Uma pequena correção, DANFE se refere ao Documento Auxiliar da NF-e, no caso do CT-e a sigla é DACTE, Documento Auxiliar do CT-e.

 

Na minha aplicação quando o usuário adiciona apenas um CT-e ao lote eu permito que ele possa visualizar o DACTE antes de imprimir no papel.

Mas quando é adicionado dois ou mais não ocorre a visualização dos DACTEs apenas a impressão no papel.

 

Outra coisa o DACTE tem que ser impresso e deve acompanhar a mercadoria até o seu destinatário, logo não vejo razão ou uma necessidade de visualizar.

 

Por outro lado uma listagem dos veiculos da frota, se torna interessante a visualização sem a necessidade de impressão.

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)

Rodrigo,

 

Estou implementando também o envio em Lote do CT-e e surgiu a mesma necessidade que a sua.

 

Para isto, eu fiz da seguinte forma:

 

O comando: ACBrCTe1.Conhecimentos.Items.Imprimir; abre a visualização de cada CT-e separadamente, percorrendo os conhecimentos autorizados.

 

Já o comando ACBrCTe1.Conhecimentos.Imprimir;  ou ACBrCTe1.Enviar(lote, True);  abre a visualização de todos os DACTEs em um único preview.

 

Obs:  Eu utilizo a impressão em FastReport, não sei se em QuickReport se comporta da mesma forma.

 

Espero ter ajudado.

 

Att, Wislei

Editado por sesistemas
Postado

Boa noite,

 

Outro problema que me deparei agora é com a validação dos ctes.

 

Caso eu envie 5 ctes, e no 4º por exemplo ele falhe, o meu sistema acaba parando não dando continuidade nas impressões.

 

Existe a possibilidade de o sistema validar todos os xmls antes de envia-los ao sefaz e se tiver algum erro avisar antes.

 

Vi que tem uma opção "Valida" mas nao sei se é para ser usado para esse proposito:

 

DM.ACBRCTE1.Conhecimentos.Assinar;

DM.ACBRCTE1.Conhecimentos.Valida;

 

Existe essa opção de Validar antes de enviar definitivamente os Cte(s) para a Sefaz?

 

Grato,

 

Rodrigo

  • Consultores
Postado

Boa noite Rodrigo,

 

Vamos entente o que vem a ser erro de validação e erro de rejeição.

 

O componente trata os erros de validação, ou seja se você adiciona 5 CT-e e manda enviar usando o comando Enviar o que vai ocorrer:

Vai ser gerado um XML para cada CT-e;

Cada um vai ser assinado;

Cada um vai ser validado;

O lote é montado e enviado.

 

Note que antes do envio cada CT-e é submetido ao validador, caso alguns deles tenha algo errado o comando Enviar é abortado, e portanto nada é enviado.

 

A SEFAZ por sua vez ao receber e processar o lote caso encontre algo errado, somente o CTe que contem o erro vai ser rejeitado, os demais são autorizados.

 

Como você pode ver o existe o erro de validação e o erro de rejeição.

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

Com a propriedade ACBrCTe1.Conhecimentos.Items.CTe.procCTe.cStat você consegue tratar o retorno de cada CT-e separadamente de acordo com a página 71 do manual v. 1.04

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