Sim, exatamente. Mas o roteiro fala de uma mensagem. Eu coloquei a mensagem no evento OnAntesCancelarTransacao e está funcionando, mas tenho dúvidas de que é exatamente assim:
procedure TfrmPrincipal.acbrTEFAntesCancelarTransacao(RespostaPendente: TACBrTEFDResp);
const
sAviso = 'A transação TEF NSU: %s e valor: %s está pendente. Favor realizar o desfazimento no Menu Administrativo e cancelar o Cupom Fiscal.';
var
Estado: TACBrECFEstado;
begin
Estado := ECF.Estado;
if RespostaPendente.ValorTotal > 0 then
MyDlgInformation(Format(sAviso, [RespostaPendente.NSU, FormatFloat(',0.00', RespostaPendente.ValorTotal)]));
case Estado of
estVenda, estPagamento: ECF.CancelaCupom;
estRelatorio: ECF.FechaRelatorio;
else
if not (Estado in [estLivre, estDesconhecido, estNaoInicializada]) then
ECF.CorrigeEstadoErro(False);
end;
end;
Outra coisa: o teste seguinte me manda apenas fechar o diálogo sem tratar, e fechar a aplicação. Quando voltar, a aplicação deve mostrar novamente a pendência. Acontece que não mostra. Parece que está limpando os dados.