Agradeço a todos pela atenção dispensada.
Consegui fazer funcionar aqui, está funcionando corretamente agora.
Havia algumas falhas no Demo da versão que baixei e que ocasionavam erros diversos, vou deixar aqui um resumo, talvez ajude a alguém na mesma situação.
1 - No demo (qualquer dos dois) o DM está setado no projeto para criação automática, no entanto ele é criado após o form principal, o que gera erros de violação de acesso na criação do form principal. A variável dm fica Nil e dá ruim.
Para resolver, simplesmente tirei a criação do DM do automatico, e criei uma função no fonte do DM (ambos), para criar o DM por demanda, e ao setar a variável dm no form principal chamo esta função.
function DM_Fortes: TdmForte;
begin
if (dmForte = Nil) then begin
dmForte := TdmForte.Create( Application );
end;
result := dmForte;
end;
No Form principal:
{$IFDEF demo_forte}
dm := DM_Fortes;
{$ELSE}
dm := DM_Fast;
{$ENDIF}
2 - Na inclusão de Titulo (procedure TfrmDemo.btnBoletoIndividualClick), antes da instrução "Titulo := dm.ACBrBoleto.CriarTituloNaLista;", foi necessário incluir as instruções abaixo para que o JSON enviado refletisse corretamente as informações digitadas no formulário.
procedure TfrmDemo.btnBoletoIndividualClick(Sender: TObject);
var
Titulo : TACBrTitulo;
VQtdeCarcA, VQtdeCarcB, VQtdeCarcC :Integer;
VLinha, logo : string;
i: Integer;
begin
// Se não configurar aqui, estes valores são ignorados mesmo que sejam especificados em Titulo.
dm.ACBrBoleto.Cedente.Modalidade := edtModalidade.Text;
dm.ACBrBoleto.Cedente.Convenio := edtConvenio.Text;
Titulo := dm.ACBrBoleto.CriarTituloNaLista;
3 - Campos importantes (atalhos). Para testes usar as informações disponíveis no manual da API (https://apoio.developers.bb.com.br/referency/post/5ffc477c3b02bd0012ecaa1a).
O código abaixo corresponde a um programa de testes com finalidade exclusiva de registrar boletos on-line.
uses
ACBrDFeSSL, pcnConversao, BlckSock;
Const
// Fornecidos pelo painel do desenvolvedor o Banco do Brasil
BB_API_CLIENT_ID = '<client_id>';
BB_API_CLIENT_SECRET = '<client_sercret>';
BB_API_CLIENT_DEV_KEY = '<developer_application_key>';
BB_API_ESCOPO = 'cobrancas.boletos-info cobrancas.boletos-requisicao';
// Informações do Cedente/Beneficiario
BB_CNPJ_CEDENTE = '94491202000127'; // valor de teste fornecido na documentacao do BB dados ficticios para testes
BB_AGENCIA = '<sua_agencia>';
BB_AGENCIA_DV = '<dv_sua_agencia>';
BB_CONTA = '<sua_conta>';
BB_CONTA_DV = '<dv_sua_conta>';
BB_CODIGO_CEDENTE = BB_AGENCIA + '/' + BB_CONTA;
BB_CONVENIO = '<Num-Convenio>'; // para testes usar o numero fornecido na documentacao do BB dados ficticios para testes
BB_CARTEIRA = '17';
BB_VARIACAO_CARTEIRA = '35'; // valor de teste fornecido na documentacao do BB dados ficticios para testes
BB_INICIO_NOSSO_NUMERO = BB_CONVENIO; // prefixo para formação do campo: "numeroTituloCliente"
procedure TForm1.ConfiguraIntegracaoBB;
begin
// Tipo API Banco do Brasil
ACBrBoleto.Banco.TipoCobranca := cobBancoDoBrasilAPI;
// Cedente (Empresa cobradora)
ACBrBoleto.Cedente.CNPJCPF := BB_CNPJ_CEDENTE;
ACBrBoleto.Cedente.Agencia := BB_AGENCIA;
ACBrBoleto.Cedente.AgenciaDigito := BB_AGENCIA_DV;
ACBrBoleto.Cedente.Conta := BB_CONTA;
ACBrBoleto.Cedente.ContaDigito := BB_CONTA_DV;
ACBrBoleto.Cedente.CodigoCedente := BB_CODIGO_CEDENTE;
ACBrBoleto.Cedente.Convenio := BB_CONVENIO;
ACBrBoleto.Cedente.TipoCarteira := tctSimples;
ACBrBoleto.Cedente.TipoInscricao := pJuridica;
ACBrBoleto.Cedente.Modalidade := BB_VARIACAO_CARTEIRA;
ACBrBoleto.Cedente.Cidade := '';
ACBrBoleto.Cedente.UF := '';
ACBrBoleto.Cedente.Logradouro := '';
ACBrBoleto.Cedente.Bairro := '';
ACBrBoleto.Cedente.CEP := '';
// Credenciais de acesso a API
ACBrBoleto.Cedente.CedenteWS.ClientID := BB_API_CLIENT_ID;
ACBrBoleto.Cedente.CedenteWS.ClientSecret := BB_API_CLIENT_SECRET;
ACBrBoleto.Cedente.CedenteWS.KeyUser := BB_API_CLIENT_DEV_KEY;
ACBrBoleto.Cedente.CedenteWS.IndicadorPix := true; // Modo Hibrido, pagamento com pix
ACBrBoleto.Cedente.CedenteWS.Scope := BB_API_ESCOPO;
// Configurações - Log
ACBrBoleto.Configuracoes.Arquivos.LogRegistro := True;
ACBrBoleto.Configuracoes.Arquivos.PathGravarRegistro := '.\log';
ACBrBoleto.DirArqRemessa := '.\log';
ACBrBoleto.DirArqRetorno := ACBrBoleto.DirArqRemessa;
ACBrBoleto.NomeArqRemessa := 'Demo_Remessa.txt';
ACBrBoleto.NomeArqRetorno := 'Demo_Retorno.txt';
// Configurações do WebService/API
ACBrBoleto.Configuracoes.WebService.Ambiente := taHomologacao;
ACBrBoleto.Configuracoes.WebService.Operacao := tpInclui;
ACBrBoleto.Configuracoes.WebService.SSLHttpLib := httpOpenSSL;
ACBrBoleto.Configuracoes.WebService.SSLType := LT_TLSv1_2;
ACBrBoleto.Configuracoes.WebService.VersaoDF := '1.2';
ACBrBoleto.Configuracoes.WebService.UseCertificateHTTP := false;
end;
procedure TForm1.IncluiBoleto;
var
Titulo : TACBrTitulo;
VQtdeCarcA, VQtdeCarcB, VQtdeCarcC :Integer;
VLinha, logo : string;
i: Integer;
begin
// Operação
ACBrBoleto.Configuracoes.WebService.Operacao := tpInclui;
ACBrBoleto.ListadeBoletos.Clear;
Titulo := ACBrBoleto.CriarTituloNaLista;
Titulo.Vencimento := Date+5;
Titulo.DataDocumento := Date;
Titulo.NumeroDocumento := LZeroFil(edNumTitulo.Text, 10);
Titulo.EspecieDoc := 'DM';
Titulo.Aceite := atNao;
Titulo.DataProcessamento := Now;
Titulo.Carteira := '17'; // *
Titulo.NossoNumero := BB_INICIO_NOSSO_NUMERO + LZeroFil(edNumTitulo.Text, 10); // *
Titulo.ValorDocumento := 45.00; // *
Titulo.Sacado.Pessoa := pJuridica; // * [pFisica,pJuridica, - pOutras, pNenhum ]
Titulo.Sacado.NomeSacado := 'Odorico Paraguassu'; // *
Titulo.Sacado.CNPJCPF := '74910037000193'; // *
Titulo.Sacado.Logradouro := 'Avenida Dias Gomes 1970'; // *
Titulo.Sacado.Numero := '';
Titulo.Sacado.Bairro := 'Centro'; // *
Titulo.Sacado.Cidade := 'Sucupira'; // *
Titulo.Sacado.UF := 'TO'; // *
Titulo.Sacado.CEP := '77458000'; // *
Titulo.ValorAbatimento := 0.00;
Titulo.LocalPagamento := 'QUALQUER BANCO';
Titulo.ValorMoraJuros := 0.00;
Titulo.ValorDesconto := 0.00;
Titulo.ValorAbatimento := 0.00;
Titulo.DataMoraJuros := 0;
Titulo.DataDesconto := 0;
Titulo.TipoDesconto := tdNaoConcederDesconto;
Titulo.DataAbatimento := 0;
Titulo.DataProtesto := 0;
Titulo.PercentualMulta := 0.00;
Titulo.CodigoMoraJuros := cjIsento;
//Mensagem.Text := memMensagem.Text;
Titulo.OcorrenciaOriginal.Tipo := toRemessaRegistrar;
Titulo.Instrucao1 := 'Instruções linha 1';
Titulo.Instrucao2 := 'Instruções linha 2';
end;
procedure TForm1.RegistrarBloletoOnLine(Sender: TObject);
var
SLRemessa: TStringList;
i, j: Integer;
Boleto : TACBrBoleto;
begin
// *** Configura acesso a API e dados da empresa ***
ConfiguraIntegracaoBB;
// *** Inclui um boleto ficticio para registro ***
IncluiBoleto;
Boleto := ACBrBoleto;
//Função de Envio
Boleto.Configuracoes.WebService.Operacao := tpInclui;
Boleto.EnviarBoleto; // retorna como false se o httpresult code for diferente de 200,201,202
//Verifica Lista com os retornos
if Boleto.ListaRetornoWeb.Count > 0 then
begin
// Este trecho de código é o mesmo do Demo do ACBrBoleto
end;
end;