Jump to content

dev botao

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

Recommended Posts

  • Consultores
Posted

Bom dia pessoal,

Com a versão 3.00a do CT-e temos um novo evento chamado Comprovante de Entrega.

Esse evento é emitido pela própria transportadora e não pelo destinatário da mercadoria.

Nesse evento temos um campo obrigatório chamado hashEntrega, cuja descrição:

Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem capturada da assinatura eletrônica, digital do recebedor, foto, etc)

Nota 1: A critério do autor deste evento, este campo pode ser utilizado como índice para acesso as informações do Comprovante de entrega.

Nota 2: A SEFAZ não tem nenhum controle sobre a informação deste campo. 
 
Observação: 28 caracteres são representados no schema como 20 bytes do tipo base64Binary. 

Nesse primeiro momento o componente não esta calculado o hash ficando a cargo da aplicação do desenvolvedor, pois vamos verificar a possibilidade de implementar.

Para quem utiliza o ACBrMonitor abaixo segue um exemplo de como montar o arquivo INI do evento de Comprovante de Entrega:

[EVENTO]
idLote=1
[EVENTO001]
chCTe= chave do CT-e
cOrgao= Codigo da UF
CNPJ= CNPJ do emitente
dhEvento=25/07/2019 10:30:00
tpEvento=110180
nSeqEvento=1 

nProt= numero do protocolo de autorização do CT-e
dhEntrega=24/07/2019 17:30:00
nDoc= Documento de identificação da pessoa que recebeu a entrega 
xNome= Nome da pessoa que recebeu a entrega 
latitude= Latitude do ponto da entrega (detectado pelo equipamento do transportador, exemplo: PDA, tablet, celular) 
longitude= Longitude do ponto da entrega (detectado pelo equipamento do transportador, exemplo: PDA, tablet, celular) 

hashEntrega= Hash (SHA1) no formato Base64 resultante da concatenação: Chave de acesso do CT-e + Base64 da imagem capturada da entrega (Exemplo: imagem   capturada da assinatura eletrônica, digital do recebedor, foto, etc)

dhHashEntrega= Data e hora da geração do hash da entrega 

; xxxx pode variar de 0001 até 2000          
[infEntregaxxxx]
chNFe= chave da NF-e da mercadoria que foi entregue

Para quem utiliza o componente, abaixo temos um exemplo de como enviar o evento em questão:

ACBrCTe1.EventoCTe.Evento.Clear;

with ACBrCTe1.EventoCTe.Evento.New do
begin
  infEvento.chCTe := ChaveCTe;
  infEvento.CNPJ := CNPJEmitente;
  infEvento.dhEvento := now;
  infEvento.tpEvento := teComprEntrega;
  infEvento.nSeqEvento := 1;

  infEvento.detEvento.nProt := nProtocoloAutorizacao;
  infEvento.detEvento.dhEntrega := datahoraEntrega;
  infEvento.detEvento.nDoc      := NumeroDocumento;
  infEvento.detEvento.xNome     := NomedoRecebedor;
  infEvento.detEvento.latitude  := fLatitude;
  infEvento.detEvento.longitude := fLongitude;

  infEvento.detEvento.hashEntrega   := hashdaEntrega;
  infEvento.detEvento.dhHashEntrega := datahhoradoHashEntrega;
  
  InfEvento.detEvento.infEntrega.Clear;
  // o bloco abaixo poderá se repetir por até 2000 vezes 
  with InfEvento.detEvento.infEntrega.New do
    chNFe := ChaveNFe;

end;

ACBrCTe1.EnviarEvento( 1 ); // 1 = Numero do Lote

 

  • Like 7
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

  • 4 weeks later...
  • Consultores
Posted

Boa tarde a todos,

Para quem utiliza o componente ACBrCTe e estava com dificuldades de gerar o Hash de Entrega, poderá se utiliza de uma das duas funções que acabam de ser disponibilizadas na unit ACBrDFeUtil.

São elas:

function CalcularHashDados(const ADados: TStream; AChave: String): string;

Devemos utilizar a função acima quando a imagem esta armazenada no banco de dados, 
neste caso o conteúdo da mesma é passado como Stream no primeiro parâmetro da função, já o segundo é a chave do CT-e.

A função retorna uma string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega

Exemplo:

infEvento.detEvento.hashEntrega := CalcularHashDados(xStreamImagem, xChaveCTe); 

e

function CalcularHashArquivo(const APathArquivo: String; AChave: String): string;

Devemos utilizar a função acima quando a imagem esta salva em disco, 
neste caso o primeiro parâmetro da função é o path com o nome do arquivo (imagem) e o segundo é a chave do CT-e.

A função retorna a string com 28 caracteres que devemos atribuir ao campo: infEvento.detEvento.hashEntrega

Exemplo:

infEvento.detEvento.hashEntrega := CalcularHashArquivo(xPathImagem, xChaveCTe); 

 

  • Like 8
  • Haha 1
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

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...
The popup will be closed in 10 seconds...