Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado
Afinal de contas, como funcionará o cancelamento por evento, posso alterar o xml do cte autorizado ou não?
Tem uma propriedade 'AtualizarXmlCancelado' do componente que se estiver marcada como true, altera o xml do cte, porém alguns dizem que não é o correto, que o xml tem que continuar como autorizado.
Neste caso, se eu não alterar o xml autorizado, o cliente tem que enviar também para o tomador o xml referente ao evento de cancelamento? Se sim, qual xml de cancelamento,  já que eu recebo três arquivos referente ao evento de cancelamento.
Outro caso que aconteceu em meu cliente foi que ele cancelou o conhecimento normalmente, porém os arquivos referentes ao evento de cancelamento não vieram, como faço para receber estes arquivos novamente?
  • Consultores
Postado

Bom dia dfdixini,

 

Sugestão minha:

 

1. Manter a propriedade AtualizarXMLCancelado com o valor True.

 

Motivo: O componente foi alterado para Atualizar o XML somente com o protocolo de autorização, logo ele não vai trocar pelo de cancelamento.

 

Isso foi feito, pois no manual e nenhuma nota técnica diz que devemos efetuar a troca.

 

2. Por outro lado foi acrescentado a propriedade CTeCancelado ao DACTE, caso o valor dessa propriedade for TRUE uma tarja com os dizeres: "CT-e CANCELADO" será impressa no DACTE.

 

Desta for podemos fazer o seguinte:

 

ACBrCTeDACTEQR.CTeCancelada := True;

ACBrCTe.Conhecimentos.Imprimir;

ou

ACBrCTe.Conhecimentos.ImprimirPDF

ACBrCTeDACTEQR.CTeCancelada := False;

 
Com a rotina acima, será impresso ou gerado o PDF do DACTE com a tarja. 
 
A sua aplicação que tem que ter o controle dos CT-e cancelados.
 

3. Ao solicitar o cancelamento é gerado 3 XML:

 

   *-ped-evento.xml (envio do evento, no caso de cancelamento)

   *-eve.xml (retorno da SEFAZ)

   *-procEventoCTe.xml (contem a solicitação e o retorno)

 

É este último que segundo o manual devemos enviar ao tomador do serviço.

 

Caso você venha a perder este último arquivo, no momento o componente não tem nada para tentar gerar ele novamente.

 

Existe sim a possibilidade de realizar uma consulta, o resultado dessa consulta é salva em um arquivo chamado *-sit.xml a estrutura é bem diferente do *-procEventoCTe.xml mas traz em seu conteúdo a informação que o CTe foi cancelado.

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

Ítalo, bom dia

 

Fiz o seguinte, coloquei a propriedade AtualizarXMLCancelado do componente como TRUE e iniciei os testes

 

Gerei uma CTe, assinei e enviei, até aí tudo normal, o xml recebeu o protocolo de autorização, imprimi o DACTE e tudo certo.

 

Depois fiz o cancelamento, retornou que estava cancelado e não alterou o xml do CTe, continuou com o protocolo de autorização e recebi os eventos referentes ao evento de cancelamento, tudo ok.

 

Fiz então uma consulta do CTe, aí que acontece o problema, ele pega o xml do CTe e altera colocando o protocolo de cancelamento, se imprimir o DACTE novamente sai o protocolo de cancelamento 

Postado

Mesmo atualizando todos os fontes ACBr, ainda assim está alterando o xml na consulta!

 

Mas supondo que mesmo que eu atualize aqui e o componente deixe de alterar o xml, penso o seguinte:

 

Qual a diferença ente a propriedade 'AtualizarXMLCancelado' estar como true ou false? já que nenhuma das duas irá alterar o xml?

  • Consultores
Postado

Boa tarde,

 

Como ainda falta alguns ajustes na rotina, se não atribuirmos o valor true a essa propriedade corre-se o risco do XML sem o protocolo, após realizar a consulta não ser atualizado com o mesmo.

 

Principalmente se o CT-e em questão após o envio foi cancelado.

 

Mas checando a rotina notei que o componente compilado com a diretiva PL_200, sempre vai receber o protocolo de Autorizado.

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
            watualiza := true;
            if ((CTeRetorno.CStat = 101) and // 101 = Cancelamento Homologado
                (FConfiguracoes.Geral.AtualizarXMLCancelado = false)) then
               wAtualiza := False;
 
            TACBrCTe( FACBrCTe ).Conhecimentos.Items.Confirmada := (CTeRetorno.cStat = 100); // 100 = Autorizado o Uso
 
            //No meu caso watualiza vai continuar como True, não vai receber false porque está configurado AtualizarXMLCancelado=True
            //Então no IF abaixo ele vai entrar, e alterar o xml, penso assim
 
            if wAtualiza or (CTeRetorno.cStat = 100) then
            begin
              // Alterado por Italo em 03/04/2014
              // Atualiza o XML sempre com o protocolo de Autorização
              {$IFDEF PL_200}
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.Msg                  := CTeRetorno.protCTe.xMotivo;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.Id       := CTeRetorno.protCTe.Id;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.tpAmb    := CTeRetorno.protCTe.tpAmb;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.verAplic := CTeRetorno.protCTe.verAplic;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.chCTe    := FCTeChave;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.dhRecbto := CTeRetorno.protCTe.dhRecbto;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.nProt    := CTeRetorno.protCTe.nProt;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.digVal   := CTeRetorno.protCTe.digVal;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.cStat    := CTeRetorno.protCTe.cStat;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.xMotivo  := CTeRetorno.protCTe.xMotivo;
              {$ELSE}
Postado

Quando consulto um CTe que foi cancelado, depurando a unit, percebi o seguinte

 

 

            watualiza := true;
            if ((CTeRetorno.CStat = 101) and // 101 = Cancelamento Homologado
                (FConfiguracoes.Geral.AtualizarXMLCancelado = false)) then
               wAtualiza := False;
 
            TACBrCTe( FACBrCTe ).Conhecimentos.Items.Confirmada := (CTeRetorno.cStat = 100); // 100 = Autorizado o Uso
 
            //No meu caso watualiza vai continuar como True, não vai receber false porque está configurado AtualizarXMLCancelado=True
            //Então no IF abaixo ele vai entrar, e alterar o xml, penso assim
 
            if wAtualiza or (CTeRetorno.cStat = 100) then
            begin
              // Alterado por Italo em 03/04/2014
              // Atualiza o XML sempre com o protocolo de Autorização
              {$IFDEF PL_200}
 
               //e receberá o retorno referente ao conhecimento cancelado, por exemplo CTeRetorno.protCTe.cStat estará com o valor 101
 
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.Msg                  := CTeRetorno.protCTe.xMotivo;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.Id       := CTeRetorno.protCTe.Id;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.tpAmb    := CTeRetorno.protCTe.tpAmb;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.verAplic := CTeRetorno.protCTe.verAplic;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.chCTe    := FCTeChave;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.dhRecbto := CTeRetorno.protCTe.dhRecbto;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.nProt    := CTeRetorno.protCTe.nProt;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.digVal   := CTeRetorno.protCTe.digVal;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.cStat    := CTeRetorno.protCTe.cStat;
               TACBrCTe( FACBrCTe ).Conhecimentos.Items.CTe.procCTe.xMotivo  := CTeRetorno.protCTe.xMotivo;
              {$ELSE}
 
              //neste caso meu CTe está sendo alterado, trocando o protocolo de autorização pelo de cancelamento
  • Consultores
Postado

Boa tarde dfdixini,

 

Por outro lado veja este:

 

28140117957142000144570170000000171480288025-sit.xml

 

Note que a SEFAZ Virtual RS retorna que o CT-e esta cancelado, mas apresenta o protocolo de autorização em seguida a solicitação de cancelamento e por fim o protocolo de cancelamento.

 

Que no meu entendimento é o mais correto.

 

Já a SEFAZ-SP esta retornando que o CT-e esta cancelado, depois o protocolo de cancelamento em seguida a solicitação de cancelamento e por fim novamente o procolo de cancelamento.

 

Porque ao realizar a consulta o XML do CT-e esta ficando com o protocolo de cancelamento em fez do de autorização, conforme eu tinha dito?

 

Simples o componente esta extraindo desse retorno os dados do grupo <infProt>.

 

Como da SEFAZ-SP temos os dados do protocolo de cancelamento o XML do CT-e fica com o protocolo de cancelamento.

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

Neste caso então, não tem o que eu fazer em relação a consulta alterar o xml, a não ser que eu desmarque a opção atualizarxmlcancelado para false, mas pelo que me disse pode ocasionar problemas quando consultar algum CTe autorizado

  • Consultores
Postado

O único problema que vejo, ao atribuir o valor False a essa propriedade é:

 

1. Ocorre o envio do CT-e.

2. Por algum problema qualquer o CT-e fica sem o protocolo de autorização.

3. O usuário esquece de realizar a consulta para corrigir o problema.

4. Ocorre o canelamento do CT-e por desacordo comercial (por exemplo).

5. O cliente reclama da ausência do protocolo.

6. O usuário realiza a consulta para corrigir o XML.

 

É justamente no item 6 que se a propriedade  atualizarxmlcancelado estiver com o valor False, ao realizar a consulta vai ser retornado que o CT-e esta cancelado e consequentemente não será atualizado, continuando assim sem nenhum protocolo de autorização ou de cancelamento.

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

OK ÍTALO

 

1º Entendi o que pode eventualmente acontecer caso atualizarxmlcancelado esteja false.

2º Mas, voltando ao assunto, fiz um teste na sefaz de MG e o retorno da consulta de um CTe cancelado é igual ao de SP, também altera o xml do CTe, e meus clientes são 100% de SP e MG.

3º Não imagino como devo proceder então, para que o xml não seja alterado, já que como falamos anteriormente, não é correto alterar um CTe autorizado, não sei se as pessoas que emitem CTe em MG e SP estão tendo o mesmo problema que eu, ou não estão atentando para o fato de que o xml está sendo alterado quando há cancelamento e consulta.

  • Consultores
Postado

dfdixini,

 

Quando não existia o canelamento por evento, não tínhamos nada para enviar ao cliente que a NF-e ou CT-e tinha sido cancelado.

 

Foi então implementado essa possibilidade de substituir o protocolo de autorizado pelo de cancelado.

 

Desta forma podíamos enviar o XML atualizado para o cliente. 

 

Com o advento do cancelamento por evento temos agora tanto o XML para ser disponibilizado ao cliente.

 

Deste XML consta a solicitação do canelamento bem como o protocolo de cancelamento homologado pela SEFAZ.

 

Trata-se do arquivo: *-procEventoNFe.xml e *-procEventoCTe.xml

 

E tanto nos manuais e notas técnicas da NF-e e CT-e apresenta esse arquivo como sendo o que deve ser enviado ao cliente para que o mesmo tome ciência do cancelamento.

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

ok, minha preocupação é quanto ao xml do CTe ficar alterado para cancelado e isto não ser o correto, mesmo ele estando realmente cancelado, pois no site da SEFAZ, se o cliente baixar o xml ele estará com o protocolo de autorização.

 

Vou manter alterando mesmo o xml então, valeu, obrigado!

Postado

Alguém tem como me mandar um xml de consulta da SEFAZ-SP de um conhecimento cancelado na versão 2.00, pra que eu possa ver como está o arquivo?

  • 2 anos depois...
Postado (editado)
Em 06/06/2014 at 16:08, Italo Jurisato Junior disse:

O único problema que vejo, ao atribuir o valor False a essa propriedade é:

 

1. Ocorre o envio do CT-e.

2. Por algum problema qualquer o CT-e fica sem o protocolo de autorização.

3. O usuário esquece de realizar a consulta para corrigir o problema.

4. Ocorre o canelamento do CT-e por desacordo comercial (por exemplo).

5. O cliente reclama da ausência do protocolo.

6. O usuário realiza a consulta para corrigir o XML.

 

É justamente no item 6 que se a propriedade  atualizarxmlcancelado estiver com o valor False, ao realizar a consulta vai ser retornado que o CT-e esta cancelado e consequentemente não será atualizado, continuando assim sem nenhum protocolo de autorização ou de cancelamento.

Tenho exatamente esse caso, não existe mais a propriedade AtualizarXMLcancelado, como posso imprimir o DACTE com os dizeres "CTe Cancelado" ?

Aonde pego o XML do evento de cancelamento na consulta ?

Estou tentando em ACBRCTe1.WebServices.Consulta.procEventoCTe.Items[0].RetEventoCTe.retEvento.Items[0].RetInfEvento.XML mas está incorreto

 

Editado por leootoni
  • Consultores
Postado

Boa tarde Leo,

Para imprimir o DACTE com a tarja "CT-e Cancelado" é simples.

Basta carregar o XML do CT-e com o LoadFromFile, depois atribuir o valor True a propriedade CTeCancelado (do componente de DACTE) e por fim executar o método Imprimir ou ImprimirPDF caso deseja o DACTE em PDF.

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)

Como eu disse, não tenho o XML com autorização de uso. Na consulta, mesmo consultando com o XML assinado, não atualiza o XML com a autorização de uso, ou não estou sabendo aonde pegá-lo Na hora de imprimir o DACTE sai como na imagem. Mesmo setando a propriedade ACBRCTe1.DACTe.CTeCancelada := True; e carregando o XML do evento de cancelamento não imprime com a tarja de cancelado. Segue o código :

ACBRCTe1.Conhecimentos.Clear;
ACBRCTe1.Conhecimentos.LoadFromFile(VNomArqCTe);
ACBRCTe1.DACTe.CTeCancelada := True;
VNomArqCTe := KDirIni+'XML\'+Estoque+'\Cancelamento\'+Copy(ACBRCTe1.Conhecimentos.Items[0].CTe.inFCTe.ID,4,44)+'-Canc.XML';
ACBRCTe1.EventoCTe.Evento.Clear;
ACBRCTe1.EventoCTe.LerXML(VNomArqCTe);
ACBRCTe1.Conhecimentos.Imprimir;

 


 

Capturar.PNG

Editado por leootoni
Faltou a imagem e o código
  • Consultores
Postado

Bom dia Leo,

Se o XML não contem o protocolo de autorização, ele esta apenas assinado neste caso você precisa realizar uma consulta para poder atualizar ele.

     // Carrega no Componente o CTe salvo em Arquivo XML sem o protocolo
     ACBrCTe.Conhecimentos.Clear;
     ACBrCTe.Conhecimentos.LoadFromFile(NomeArquivo);
     ACBrCTe.Consultar;

     // Carrega no Componente o CTe salvo em Arquivo XML com o protocolo
     ACBrCTe.Conhecimentos.Clear;
     ACBrCTe.Conhecimentos.LoadFromFile(NomeArquivo);

     ACBrCTe.Conhecimentos.Imprimir;

Desta forma o XML será atualizado, ou seja, receberá o protocolo de autorização.

Caso deseje imprimir o DACTE com a tarja "CT-e Cancelado" deve-se incluir a seguinte linha antes do Imprimir:

     ACBrCTe.DACTe.CTeCancelada := True;
     ACBrCTe.Conhecimentos.Imprimir;
 

Para Imprimir qualquer evento vinculado a um CT-e devemos proceder da seguinte forma:

       NomeEvento := PathEvento + '\' + TipoEvento + ChaveCTe + SeqEvento + '-procEventoCTe.xml';

       // Carrega no Componente o Evento salvo em Arquivo XML
       ACBrCTe.EventoCTe.Evento.Clear;
       ACBrCTe.EventoCTe.LerXML(NomeEvento);

No caso de um evento de cancelamento:

TipoEvento = '110111'

ChaveCTe = chave do CTe (44 dígitos)

SeqEvento = '01'
 

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

Como eu disse anteriormente, eu carrego o XML para consulta, assinado, não é atualizado o xml com a autorização de uso na consulta, fica como estava antes da consulta. No exemplo que você expôs acima, entre

ACBrCTe.Consultar;

{ Aqui tem um código para salvar o XML de retorno da consulta ? Poderia exemplificar ? }

// Carrega no Componente o CTe salvo em Arquivo XML com o protocolo
ACBrCTe.Conhecimentos.Clear;

 

Desde já agradeço imensamente a ajuda.

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