Retorno Cte - DFe - Documentos Fiscais Eletrônicos - Projeto ACBr
Retorno Cte
August 21, 2013 in DFe - Documentos Fiscais Eletrônicos
Este tópico foi criado há 2755 dias atrás.
Eu utilizei o fragmento do Exemplo CTe, códigos mostrados abaixo; Minha duvida é, tem vez que eu transmito os CT-e(MG) e não vem o retorno e não imprime, com isso eu não consigo marcar no meu sistema que os CT-e foram transmitido, e eu consulto no site da Sefaz e eles estão lá, é normal isso acontecer, oque posso fazer para evitar isso?
procedure TfrmMovEmitirCNT.EnviarLote(Lote: Integer);
// EnviaSefaz = variável booleana
// Se False, apenas gera o XML, assina, valida e Imprime o DACTe não protocolado
// Se True, gera o XML, assina, valida, envia para o SEFAZ e Imprime o DACTe protocolado
if DM_CTA.EnviaSefaz
MemoStatus.Lines.Add(' Aguarde Enviando...');
// Envia o lote de Conhecimentos para o SEFAZ e Imprime o DACTe
// Lote = variável que contem o numero do lote (numero sequencial)
DMCTE.CTe.Enviar(Lote);
Evitar não tem como, mas você deve incluir um campo na tabela de tal forma que ele só vai conter a informação caso houver o retorno.
Por exemplo, o campo NumProtocolo, antes do envio o conteudo é vazio, se ocorrer o retorno da SEFAZ você atualiza esse campo com o numero de protocolo de autorização de uso do CT-e.
Se após o envio esse campo continuar vazio é sinal que o envio foi feito e não ocorreu o retorno.
É interessante neste caso, a sua aplicação apresentar uma lista de CT-e enviados e não protocolados, onde o usuário possa selecionar e realizar uma consulta.
Abra o arquivo RotinaCompleta.txt e estude a procedure:
procedure TfrmMovEmitirCNT.NaoProtocolados;
Entendi, o usuário faz a busca pela chave do Ct-e MCTE.CTe.Conhecimentos.LoadFromFile(NomeArquivo); Mas os usuário reclamam muito em ficar selecionando o XML. Tem como eu consultar pelo protocolo de recebimento e depois fazer um loop e baixar o cte?
Se você tem no banco de dados os conhecimentos não protocolados, é facil montar um loop e automatizar a consulta.
Você não baixa o CT-e, você consulta e obtem o protocolo de autorização.
Devemos carregar o XML para que o componente realize a atualização do mesmo ou seja inclua as TAGs referentes ao protocolo de autorização.
Obrigado Italo, esta revendo o código e vi um possível erro meu(if ACBrCTe.Enviar(Lote) then); Retirei a condição, com isso não estava gravando no banco os dados necessários(Retirei a condição IF);
estou usando ate hoje o fragmento de código:
DMCTE.CTe.WebServices.Retorno.Recibo := sRecibo;
DMCTE.CTe.WebServices.Retorno.Executar;
Não esta retornado...
Boa tarde, gostaria de saber qual a melhor formar de recuperar o XML, na hora de transmissão e também quando for consultar o XML; Eu guardo o XML no Banco de Dados!
Me diz uma coisa, para que gerar o XML guardar no banco de dados, para depois envia-lo?
Porque você não inverte a ordem.
1. Só gerar o XML no momento do envio
2. Salvar o mesmo no banco de dados, após receber o protocolo de autorização.
Desta forma você vai ter o XML assinado e protocolado salvo no banco de dados.
Boa tarde Ítalo;
Na verdade você diz tudo, quero salvar o XML após receber o protocolo;
Qual seria a melhor forma(Estou utilizando o pacote XML 2.0)?
Na minha aplicação, o usuário primeiro digita os dados pertinentes ao transporte da carga e salvo esses dados no banco de dados.
Ele pode lançar quantos conhecimentos ele desejar, todos vão ficar salvos no banco de dados.
Até agora nada de XML foi gerado, apenas os dados foram digitados.
Quando ele desejar emitir os CT-e, uma tela é apresentada com a relação de todos os conhecimentos digitados mas que não foram emitidos.
Entenda "emitidos", como sendo: XML gerado, assinado, enviado, protocolado, DACTE impresso, XML (assinado e protocolado) enviado por e-mail para o tomador do serviço.
Sendo assim ele seleciona os conhecimentos não emitidos e clica no botão [Emitir] e tudo o que esta descrito acima é executado.
No meu caso o XML não é são no banco de dados apenas em disco, mas é no final de todo o processo, ou seja, depois de enviar o e-mail, que você atualiza o banco de dados "salvando o xml" no mesmo.
Bom dia Ítalo;
A duvida é, como vc recupera o XML para ser salvo no banco? Sua aplicação procura no disco o XML ou o componente o recupera?
Vc tem um fragmento de código de exemplo?
Após todo o processo exposto no post anterior você pode ler o conteúdo da propriedade RetWS e salvar no banco de dados.
Para ler o conteúdo da propriedade acima tente algo do tipo:
sXML := UTF8Encode(ACBrCTe1.WebServices.Retorno.RetWS);
Onde sXML é uma variável string.
Entendi, só que o retorno demostrado acima, aparentemente não é o XML do CT-e protocolado, correto?
Eu queria o XML do CT-e protocolado, seja na hora do retorno da transmissão ou na hora de fazer uma consulta de um CT-e já transmitido a dias atrás.
Acredito que o retorno é o protocolo de autorização.
No primeiro momento a solução seria ler o XML salvo em disco como uma string e salvar no banco de dados.
Ítalo, para finalizar, como posso recuperar o XML no caso acidental o XML ser apagado do Disco.
Se você tem todos os dados pertinentes ao transporte da carga salvos no banco de dados, não tem muito o que esquentar a cabeça.
Primeiro um detalhe muito importante:
A chave é composta por 44 dígitos sendo que os últimos 9 dígitos são: 8 referente ao valor de cCT e 1 referente ao Dígito Verificador.
Alguns desenvolvedores atribuem a cCT o mesmo valor de nCT, esta errado, por dois motivos, primeiro o cCT possui apenas 8 dígitos e o nCT possui 9, segundo o cCT trata-se de um código e é recomendando pela SEFAZ que este código seja um número aleatório.
Sendo assim a minha dica é ter na estrutura da tabela que contem os dados do Conhecimento, um campo chamado CodCT por exemplo.
Ao incluir o registro no banco de dados, a sua rotina gera esse código, lembre-se que ele não pode ser zero e armazene no campo CodCT.
Ao alimentar o componente devemos atribuir a cCT o valor armazenado no campo CodCT, desta forma a chave a ser gerada pelo componente sempre será igual.
Então como fica a solução para gerar novamente o XML que acidentalmente foi excluído do disco:
1. Alimentar o componente com os dados armazenados no banco de dados.
2. Executar o comando Assinar, pois este vai gerar o XML e assinar o mesmo.
3. Realizar a consulta da situação atual, com esse comando o XML assinado vai receber o protocolo de autorização, desde que a propriedade AtualizarXML esteja com o valor True.
Pronto temos o XML assinado e protocolado salvo em disco novamente.
Boa dia Ítalo
Agradeço sua atenção, a solução acima postado será posto em prática.
Gostaria de tirar mais uma duvida, mas não sei se é o caso de ser escrita aqui, mas a vou fazer:
A Empresa onde trabalho, possui regime especial(emitimos o CT-e em até 10 dias após o transporte, a emissão do dacte é dispensada),
como fica o MDF-e neste caso? É obrigatório informar o CT-e e/ou NF-e no MDF-e?
O MDF-e deve ser emitido quando a carga é fracionada e o transporte for interestadual.
Isso é valido para as transportadoras e para as empresas que emitem NF-e e realizam o transporte da própria mercadoria vendida.
Se tratando de uma transportadora o MDF-e só vai constar a relação dos CT-e.
Acho estranho esse "regime especial" onde você pode emitir o CT-e 10 dias após ter ocorrido o transporte e não precisar emitir o DACTE.
Como que fica a fiscalização da carga sem nenhum documento emitido pela transportadora?
Alguns emitentes de NF-e até informam qual é a transportadora e a mesma é impressa no DANFE, neste caso temos um Documento Auxiliar informando quem é o Remetente quem é o Destinatário e quem vai transportar a mercadoria, mas não são todos que fazem isso.
Resumindo se você não emite o CT-e antes do caminhão partir, não tem como emitir o MDF-e e consequentemente quando os postos de fiscalização nas fronteiras entre um Estado e outro começar a exigir o MDF-e para facilitar a checagem da carga, com certeza vocês vão ter problemas.
Ítalo, Você disse que o MDF-e só é emitido para transporte fora do estado? Os fretes dentro do estado não são emitidos o MDF-e?
Com relação ao CT-e, no meu caso, a empresa onde trabalho é uma transportadora, portanto tenho que emitir o CT-e e depois o MDF-e;
A informação do CT-e no MDF-e é obrigatória? Ou posso emitir um MF-e e depois fazer um tipo de complemento e adicionar os Ct-e(s);
Se a a sua empresa é uma transportadora ela com certeza emite CT-e.
Se o caminhão sair com uma carga fracionada, ou seja, vários remetentes e vários destinatários e o transporte será realizado para fora do estado, isso implica na emissão do MDF-e.
Lembre-se que quando emitimos CT-e de carga fracionada não informamos no mesmo o veículo e o motorista.
É ai que entra o MDF-e, pois neste devemos informar o veículo, o motorista e os CT-e referente a carga fracionada que consta no veículo.
Se toda a carga resultou em 35 CT-e, devemos informar as 35 chaves no MDF-e.
Ao enviar o MDF-e para SEFAZ a mesma vai checar se as chaves são validas, isso significa que os CT-e foram previamente emitidos e todos foram autorizados pela SEFAZ.
Se a carga vai de São Paulo/SP até Campinas/SP, temos o transporte dentro do estado logo não há necessidade de emitir o MDF-e, mas se desejar emitir pode.
Para fora do estado, é obrigatório a emissão do MDF-e.
Se toda a carga que consta no veículo vai para um único destinatário temos então um transporte "Lotação", neste caso no CT-e devemos informar o veículo e o motorista, sendo assim não se faz necessário a emissão do MDF-e, mesmo que o transporte seja para fora do estado.
Espero ter respondido todas as suas questões.
Supondo que o transporte foi iniciado, o MDF-e foi emitido, e logo depois notou-se que 1 chave do CT-e não foi informado no MDF-e; O que pode ser feito? Com relação aos CT-e complementar, deve ser feito um MDF-e para eles?
Se após o envio de um MDF-e notar que ficou faltando incluir um CT-e a solução mais simples é solicitar o cancelamento do MDF-e e emitir um outro com todos os CT-e incluídos no anterior mais o que estava faltando.
Quanto a emissão de um CT-e complementar se este vier a ocorrer após a emissão do MDF-e, não vejo motivo para estar cancelando o MDF-e e fazendo outro.
Agora se foi emitido antes do MDF-e acredito que você deve incluir somente a chave do complementar e anexar os dois DACTE.