-
Total de ítens
14 -
Registro em
-
Última visita
Sobre SisMaster Sistemas
Últimos Visitantes
O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.
SisMaster Sistemas's Achievements
-
Bom dia, Daniel Desculpa se talvez seja óbvio mas eu não entendi sua colocação de pedir ao banco para migrar pra v3. Acho que foi uma falha minha não ter explicado direito. Quando comecei a testar a API, de fato, estava usando o v2, pois li em algum lugar que o v3 ainda não estaria em produção. Mas quando você me ajudou nesse tópico falando para eu usar a tpConsulta ao invés da tpConsultaDetalhe para trazer os resultados que eu gostaria, eu já fiz o Registrar Boleto On Line em v3 (produção) e ele gerou corretamente, paguei no banco e gostaria de testar a consulta. Com isso, eu entendi que o v3 já está funcionando para minha conta/credenciais em produção. Então, mesmo assim, eu ainda preciso pedir algo para o banco? Seria uma credencial diferente para consultar em v3, uma vez que eu já estou conseguido registrar títulos em v3 em produção? Só pra não gerar mais algum tipo de dúvida, estou deixando um print do meu cadastro no developers do Sicoob, ocultando os dados essenciais mas mostrando que a v3 está nas opções do App que registrei pra obter o ClientID: E, só pra constar, eu inseri o código (com v3) no OnCreate do Demo ACBR Boleto e cliquei no botão salvar, mas ainda continua retornando "400", mesmo eu conseguindo registrar título com os mesmos dados. Agradeço novamente a ajuda
-
Oi Daniel, bom dia Obrigado por responder. Eu já havia lido o artigo que você indicou, mas agora você explicou informando que pode ser qualquer título e entendi. Mas, mesmo assim, ainda está retornando 400. Não sei o que ainda estou fazendo de errado. Usando o Demo ACBr Boleto, eu acabei de Registrar Boleto On Line na versão v3 e funcionou. O meu código alterado está assimno botão "Registrar": Boleto := FACBrBoleto; //Função de Envio Boleto.Configuracoes.WebService.Operacao := tpInclui; Boleto.Configuracoes.WebService.Ambiente := tawsProducao; Boleto.Configuracoes.WebService.ArquivoCRT := 'C:\Temp\OpenSSL\certificado.pem'; Boleto.Configuracoes.WebService.ArquivoKEY := 'C:\Temp\OpenSSL\certificado.key'; Boleto.Configuracoes.WebService.VersaoDF := 'V3'; Boleto.Cedente.CedenteWS.KeyUser := ''; Boleto.Configuracoes.WebService.SSLCryptLib := cryOpenSSL; Boleto.Configuracoes.WebService.SSLHTTPLib := httpOpenSSL; Boleto.Configuracoes.WebService.SSLType := LT_TLSv1_2; Boleto.Configuracoes.WebService.TimeOut := 30000; Boleto.Configuracoes.WebService.UseCertificateHTTP := True; Boleto.Cedente.CedenteWS.Scope := 'boletos_inclusao boletos_consulta boletos_alteracao'; Boleto.Enviar; // <<< retorna como false se o httpresult code for diferente de 200,201,202 Esse título já realizei o pagamento. Porém, quando faço a consulta dos liquidados, para ver ele pago, retorna "400" (como se as credenciais estivessem incorretas). Mas eu usei exatamente os mesmos dados que gerei do título (carteira, modalidade etc) pra fazer a consulta e não funciona. Eu devo estar fazendo algo errado. Eu zerei a lista de boletos, inclui o boleto com os mesmos dados que fiz pra gerar e cliquei no botão Consultar Boleto com esse código que alterei, pra tentar deixar da mesma forma que no Registrar que funcionou: //Exemplo utilizando como Banco do Brasil API Boleto := FACBrBoleto; Boleto.Configuracoes.WebService.Operacao := tpConsulta; Boleto.Configuracoes.WebService.Ambiente := tawsProducao; Boleto.Configuracoes.WebService.VersaoDF := 'V3'; Boleto.Cedente.CedenteWS.Scope := 'boletos_inclusao boletos_consulta boletos_alteracao'; Boleto.Configuracoes.WebService.ArquivoCRT := 'C:\Temp\OpenSSL\certificado.pem'; Boleto.Configuracoes.WebService.ArquivoKEY := 'C:\Temp\OpenSSL\certificado.key'; Boleto.Cedente.CedenteWS.KeyUser := ''; Boleto.Configuracoes.WebService.SSLCryptLib := cryOpenSSL; Boleto.Configuracoes.WebService.SSLHTTPLib := httpOpenSSL; Boleto.Configuracoes.WebService.SSLType := LT_TLSv1_2; Boleto.Configuracoes.WebService.TimeOut := 30000; Boleto.Configuracoes.WebService.UseCertificateHTTP := True; FiltrosAPI := Boleto.Configuracoes.WebService.Filtro; FiltrosAPI.Clear; FiltrosAPI.indicadorSituacao := isbBaixado; FiltrosAPI.dataMovimento.DataInicio := DateTimePicker1.Date; FiltrosAPI.dataMovimento.DataFinal := DateTimePicker2.Date; FiltrosAPI.indiceContinuidade := 0; Boleto.Enviar; Os dois "DateTimePicker" eu coloquei apenas para escolher as datas, mas estão passando corretamente no período que quero pra consultar os liquidados. Saberia dizer o que estou fazendo de errado? Fiz algo a mais, a menos? Estou tentando alterar algumas coisas por conta própria mas não consigo realizar a consulta Obrigado novamente por ajudar
-
Consulta sem incluir título para API Boleto Sicoob. É possível?
um tópico no fórum postou SisMaster Sistemas Boleto
Oi, boa tarde estamos implementando aqui na empresa apenas agora a API do Boleto do Sicoob, não tivemos experiência anterior com API, apenas via CNAB. No CNAB, tínhamos o arquivo de retorno que informava os títulos pagos no último dia útil. Como estou usando o Demo ACBR Boleto para entender o fluxo antes de implementar em meu ERP, fiquei confuso sobre o processo de consulta. Ela já está funcionando nos meus testes porém eu estou precisando informar os títulos antes na consulta clicando no "Incluir Título". Já fiz consultas informando Nosso Número de mais de 100 registros e todos retornando corretamente. Mas eu gostaria de otimizar isso pois quando houver um volume muito grande de títulos (e.g. 5 mil), a consulta ficará muito pesada. Eu gostaria de ter uma opção mais parecida com o arquivo de retorno do CNAB, onde eu receberia as informações dos títulos pagos do dia anterior (ou de certa data), sem necessidade de eu informar os títulos antes. Por isso, gostaria de ajuda com essas perguntas: 1. consigo fazer uma consulta via API do Sicoob sem "incluir boleto", passando os parâmetros para retornar os títulos pagos entre data X e Y e ele me retornando esses títulos sem que eu tenha que informar previamente, parecido com o arquivo de retorno? Quais filtros eu passo pra ela, se existir? 2. existe limites diário de consultas? Digo, óbvio que sei que não posso realizar uma consulta por segundo mas existe um 'cooldown' entre uma consulta e outra para eu ter controle do quanto tempo posso deixar um monitor fazendo esse processo automaticamente? 3. existe também limite de títulos por consulta? Em alguns casos, temos até 10 mil títulos em aberto para serem consultados... Se puderem ajudar, agradecemos -
Oi, bom dia Consegui resolver e era o ClientID que estava errado. Não entendi porque, eu havia copiado do portal developers provavelmente para testes o ID de Sandbox, sendo que eu estou tentando usar já em produção mesmo. Em algum momento, sei que usei o ID certo mas, como estava em meio aos testes variados de outros campos, pode ser que no momento de usar o ID correto eu troquei alguma outra coisa que fez não funcionar e voltei o ID do Sandbox, mesmo usando em produção. Como eu fui revendo campo a campo o que poderia estar errado, quando vi o ID incorreto, apenas troquei ele e funcionou. Portanto, podem fechar o tópico como resolvido. Agradeço a ajuda de vocês.
-
Oi Juliomar, tudo bem? Obrigado por responder Testei alterando o arquivo e, inclusive com a informação que o Daniel postou depois de você, corrigindo o DV da agência e colocando o Número do Posto, mas não deu certo ainda. Continua o erro "HTTP_Code=400 Erro=Invalid client credentials"... Nesse outro tópico (aqui) que vocês estavam ajudando outra pessoa, vocês informaram no campo do caminho do arquivo CRT o caminho do arquivo PEM. Eles não são iguais no meu caso, o arquivo com extensão PEM possui mais chaves do que o arquivo CRT, que possui uma só. Qual deles devo usar? Já tentei com os 2 e continua o erro. No meu código, ainda está assim: Boleto.Configuracoes.WebService.ArquivoCRT := 'C:\Temp\OpenSSL\certificado.pem'; E já aproveitando pra perguntar outra coisa, nessa parte do código abaixo que eu ocultei no meu post original, eu coloquei a senha de login do Portal Developers no Sicoob. Boleto.Configuracoes.WebService.Senha := '*****'; // aqui coloquei a senha correta É isso mesmo que deve ser preenchido ali? Já tentei também usando a senha do certificado digital e sempre retornou o mesmo erro. Não sei exatamente a que senha isso se refere, eu acabei vendo isso em outro tópico que vocês ajudaram outra pessoa com outro problema também. Agradeço desde já Hm, obrigado por responder. Eu não sabia disso. Hoje, em nosso ERP, já emitimos os boletos para o Sicoob por CNAB e lá enviamos o DV da Agência dessa conta apenas como um zero nesse campo: AACBrBoleto.Cedente.AgenciaDigito := qryConta.FieldByName('AGENCIA_CEDENTE_DIGITO').AsString; Achei que via API seria o mesmo, tanto que copiei todos os outros dados de lá, exceto o ClienteID que é novo. Pedi ao financeiro para falar com o gerente da conta e ele nos informou que o Número do Posto é "6". Tentei tanto como "6" quanto como "06" e, mesmo fazendo a correção que o Juliomar também passou, continua o mesmo retorno do erro "400".
-
Erro "HTTP_Code=400 Erro=Invalid client credentials" para API Boleto do Sicoob
um tópico no fórum postou SisMaster Sistemas Boleto
Olá, bom dia a todos Estou iniciando agora a implementação da API de Boletos em meu ERP e não tenho experiência alguma com o componente do ACBr da API, por isso já peço desculpas se alguma pergunta for muito óbvia. Li bastante a documentação do Sicoob (apesar de algumas coisas eu não ter entendido pela falta de experiência com isso antes) e vi diversos tópicos aqui do forum com duvidas de outros usuários para tentar implementar o básico no Demo ACBrBoleto para eu experimentar a API já em produção para, depois, implementar tudo em meu ERP, mas estou "travado" no erro "400". Parece que minhas credenciais não estão corretas, mas não consigo imaginar o que possa ser. O erro apontado no log é esse: HTTP_Code=400 Erro=Invalid client credentials Eu deixei o Demo ACBR setado da seguinte maneira: já no botão de Registrar Boleto On Line, baseado em outros usuários aqui que tiveram erros parecidos com os que eu estava tendo, ficou assim: Boleto := FACBrBoleto; //Função de Envio Boleto.Configuracoes.WebService.Operacao := tpInclui; Boleto.Configuracoes.WebService.Ambiente := tawsProducao; Boleto.Configuracoes.WebService.ArquivoCRT := 'C:\Temp\OpenSSL\certificado.pem'; Boleto.Configuracoes.WebService.ArquivoKEY := 'C:\Temp\OpenSSL\certificado.key'; Boleto.Configuracoes.WebService.Senha := '*****'; // aqui coloquei a senha correta Boleto.Configuracoes.WebService.VersaoDF := ''; Boleto.Cedente.CedenteWS.KeyUser := ''; // Boleto.Cedente.CedenteWS.IndicadorPix := True; //para boleto híbrido Boleto.Configuracoes.WebService.SSLCryptLib := cryOpenSSL; Boleto.Configuracoes.WebService.SSLHTTPLib := httpOpenSSL; Boleto.Configuracoes.WebService.SSLType := LT_TLSv1_2; Boleto.Configuracoes.WebService.TimeOut := 30000; Boleto.Configuracoes.WebService.UseCertificateHTTP := True; Boleto.Enviar; // <<< retorna como false se o httpresult code for diferente de 200,201,202 //Verifica Lista com os retornos Para que alguém possa nos ajudar, posso disponibilizar o "AcbrBoletoDemo.ini", mas não sei se posso fazer isso aqui pois contém os dados da minha empresa. Também posso disponibilizar o log completo de erro, apesar que acho que ele não irá ajudar muito nisso. Aqui está o último trecho: 25/11/24 11:12:30:490 - URL: [POST] https://auth.sicoob.com.br/auth/realms/cooperado/protocol/openid-connect/token 25/11/24 11:12:30:734 - Erro: HTTP_Code=400 Erro=Invalid client credentials 25/11/24 11:12:33:275 - Falha Envio: Falha na Autenticação: HTTP_Code=400 Erro=Invalid client credentials 25/11/24 11:14:02:667 - Autenticando Token... 25/11/24 11:14:02:668 - Comando Enviar: TOAuth 25/11/24 11:14:02:690 - URL: [POST] https://auth.sicoob.com.br/auth/realms/cooperado/protocol/openid-connect/token 25/11/24 11:14:03:738 - Erro: HTTP_Code=400 Erro=Invalid client credentials 25/11/24 11:14:08:962 - Falha Envio: Falha na Autenticação: HTTP_Code=400 Erro=Invalid client credentials 25/11/24 11:31:41:894 - Autenticando Token... 25/11/24 11:31:41:895 - Comando Enviar: TOAuth 25/11/24 11:31:41:908 - URL: [POST] https://auth.sicoob.com.br/auth/realms/cooperado/protocol/openid-connect/token 25/11/24 11:31:42:246 - Erro: HTTP_Code=400 Erro=Invalid client credentials 25/11/24 11:31:43:815 - Falha Envio: Falha na Autenticação: HTTP_Code=400 Erro=Invalid client credentials Como estou usando já no ambiente em produção (com a autorização do financeiro aqui da empresa), deixei os dados do Pagador com um CNPJ real, para realmente gerar um boleto a ser pago mas com um "nosso número" bem alto, para não confundir com outros boletos que enviamos aos clientes, conforme a imagem abaixo: Outra coisa que notei, é que converti o meu certificado em PFX para PEM e KEY, conforma o ótimo tutorial que vocês fizeram aqui: https://www.projetoacbr.com.br/forum/topic/73380-exportar-certificado-pem-crt-e-key/ Mas, consultando o ChatGPT, ele respondeu que o conteúdo deles precisa iniciar dessa forma: -----BEGIN CERTIFICATE----- mas o arquivo PEM que converti inicia com esse código abaixo (mudei alguns valores para não expor o meu arquivo verdadeiro): Bag Attributes localKeyID: 3Z B5 44 9B BF 3D F1 E5 5A E8 7D 64 10 91 8B 37 06 5D 5D 38 friendlyName: JJ FEMINA00000000000000 subject=/C=BR/O=ICP-Brasil/ST=SP/L=Araras/OU=AC SOLUTI Multipla v5/OU=23264444002166/OU=Videoconferencia/OU=Certificado PJ A1/CN=J.J. FEMINA:00000000000000 issuer=/C=BR/O=ICP-Brasil/OU=AC SOLUTI v5/CN=AC SOLUTI Multipla v5 -----BEGIN CERTIFICATE----- Deixei algumas informações aqui ocultas pois não sei se posso abrir um tópico expondo elas, mas se quem puder ajudar precisar delas, posso enviar por DM ou outra forma. Bom, se precisarem de mais informações, estarei verificando esse tópico com frequência e já agradeço as possíveis ajudas -
Duvidas iniciais para Implantação da API Boleto
SisMaster Sistemas replied to SisMaster Sistemas's tópico in Dúvidas gerais
Muito obrigado, Daniel. Vou iniciar os procedimentos baseados nas informações que você enviou. Agradecido. -
Error reading ACBrBoleto.Configuracoes.WebService.Ambiente: Invalid property value
um tópico no fórum postou SisMaster Sistemas Boleto
Bom dia, Atualizei a pasta do ACBr com o tortoise e instalei utilizando o ACBrInstall_Trunk2.exe, a instalação aconteceu normalmente, buildei o nosso projeto e deu tudo certo, porém quando executei, exibe a seguinte mensagem: --------------------------- Debugger Exception Notification --------------------------- Project SisMaster.exe raised exception class EReadError with message 'Error reading ACBrBoleto.Configuracoes.WebService.Ambiente: Invalid property value'. --------------------------- Break Continue Copy Help --------------------------- Pressionando continue, aparece esse erro: --------------------------- Application Error --------------------------- Exception EReadError in module SisMaster.exe at 000D8524. Error reading ACBrBoleto.Configuracoes.WebService.Ambiente: Invalid property value. --------------------------- OK --------------------------- Apaguei a pasta do ACBr e reinstalei de novo, porém o erro persiste, alguém pode me ajudar com isso? -
Duvidas iniciais para Implantação da API Boleto
um tópico no fórum postou SisMaster Sistemas Dúvidas gerais
Bom dia, primeiro, já quero me desculpar o tópico não está na parte correta do forum. Hoje, nosso ERP já utiliza o ACBr para criar/imprimir o boleto, gerar arquivo de remessa em txt e ler o arquivo de retorno em txt. Porém, gostaríamos de passar a usar a API do Boleto mas tenho algumas duvidas sobre como ela funciona e das possibilidades dela, mesmo tentando usar o exemplo do ACBr "Demo ACBrBoleto" disponível no Tortoise. 1. Se não entendemos errado, a API irá permitir gerar/transmitir boletos bancários diretamente no banco (instituição financeira) sem necessidade de fazer remessa na opção "Registrar Boleto On Line"? Ou não é bem isso? 2. A opção "Consultar Boleto" seria um equivalente ao arquivo de retorno, em que é possível verificar o status dos boletos bancários registrados para saber se foram pagos, em que data, se houve juros etc? 3. Vi que há opções de alguns bancos em homologação e outros não. No ambiente de homologação, eu posso ficar gerando boletos testando inclusive o pagamento dele em datas acima ou abaixo do vencimento para ver o resultado no retorno? Como isso funciona? Existe algum vídeo explicando passo a passo isso? É semelhante ao ambiente de homologação da NF-e, que é praticamente um espelho do ambiente em produção ou possui limitações? 4. Acredito que o titular da conta no banco (instituição financeira) deva fazer o pedido ao gerente para liberar a conta dele para usar essa opção da API, seja em produção ou homologação, quando houver. Isso precisa ser feito banco a banco ou existe um regra geral baseada em CNPJ/CPF como se fosse um certificado digital? Onde consigo mais informações a respeito? Novamente, peço desculpa se são dúvidas banais mas como estamos iniciando agora a tentativa de implantação da API Boleto em nosso ERP, seria importante ter essas informações antecipadamente para nos planejarmos melhor sobre como e onde utilizar ela. Se tiverem vídeos de tutoriais bem completos sobre uso dela via ACBr, agradecemos também. -
SisMaster Sistemas changed their profile photo
-
Problema no ACBrNFe.InutNFe.LerXML em Delphi
SisMaster Sistemas replied to SisMaster Sistemas's tópico in Dúvidas gerais
Deu certo, muito obrigado -
Problema no ACBrNFe.InutNFe.LerXML em Delphi
um tópico no fórum postou SisMaster Sistemas Dúvidas gerais
Bom dia. Quando eu faço o seguinte código: ACBrNFe.NotasFiscais.Clear; ACBrNFeDANFEFR.FastFileInutilizacao := 'C:\SisMaster\reports\acbr\INUTILIZACAO.fr3'; ACBrNFeDANFEFR.PathPDF := 'C:\SisMaster\Docs\NFe\'; vCaminho := 'C:\SisMaster\Docs\NFe\35241506911700010755024000000423000000430-procInutNFe.xml'; //XML em anexo ACBrNFe.InutNFe.LerXML(vCaminho); if ACBrNFe.InutNFe.RetInutNFe.nProt = EmptyStr then begin raise Exception.Create('Não foi carregado nenhuma inutilização'); Exit; end; ACBrNFe.ImprimirInutilizacao; Sempre cai no exception: "Não foi carregado nenhuma inutilização" e, se eu removo o bloco do if é impresso, mas com tudo em branco... Como eu uso Fast Report me baseei no exemplo "DemoDANFeFR" e com ele está acontecendo o mesmo problema, vou anexar algumas imagens [DemoDANFeFR.png] Depois, testei no ACBrNFe_Exemplo, mas como eu não tenho Fortes eu só usei o executavel e funcionou normal com o mesmo XML, vou anexar algumas imagens [ACBrNFe_Exemplo.png] Abri o código fonte do ACBrNFe_Exemplo (mas não consigo compilar) e a parte de LerXML está igual (mas usando o OpenDialog). Gostaria de entender aonde estou errando... 35241506911700010755024000000423000000430-procInutNFe.xml -
Problemas com Propriedades do ACBrSATExtratoFR no Delphi
um tópico no fórum postou SisMaster Sistemas ACBrSAT
Boa tarde, Estou homologando o ACBrSAT no nosso ERP e implementando a opção de impressão em EscPos e FastReports. Ao utilizar o componente ACBrSATExtratoFR, notei que várias propriedades não surtem efeito na impressão nem no preview, mesmo após alterá-las. Abaixo estão as propriedades que não apresentam efeito na impressão quando modificadas: EspacoFinal; ImprimeCodigoEan; ImprimeCPFNaoInformado; ImprimeDescAcrescItem; ImprimeEmUmaLinha; Informações do Logo: ImprimeLogoLateral, LogoAutoSize, LogoCenter, LogoHeigth, LogoStretch, LogoVisible e LogoWidth; ImprimeMsgOlhoNoImposto; QrCode: ImprimeQRCode e ImprimeQRCodeLateral; LarguraBobina. Estamos utilizando Delphi Alexandria, e ao procurar essas propriedades no arquivo do FastReports (ACBr\Fontes\ACBrSAT\Extrato\Fast\ACBrSATExtratoFR.pas), não as encontrei. Em seguida, busquei no Fortes (ACBr\Fontes\ACBrSAT\Extrato\Fortes) e constatei que todas essas propriedades estão implementadas. Além disso, observei os seguintes problemas: MargemSuperior: A margem funciona, porém o papel não ajusta conforme a impressão, resultando em cortes no papel quando deveria exibir mais informações. MargemDireita: Alguns componentes não estão respeitando o valor configurado para a margem. Anexei imagens para ilustrar cada um dos problemas descritos acima. * Observação: Tive que editar as imagens para que não ultrapassassem o limite de 2MB permitido no post. Abaixo, explico cada imagem: EspacoFinal.png: independente da propriedade estar habilitada ou desabilitada, não faz diferença na impressão (nunca sai o espaço final). Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei: //Para impressoras sem guilhotina não cortar no QrCorde pEspacoFinal.Height := EspacoFinal; pEspacoFinalCan.Height := EspacoFinal; ImprimeCodigoEan.pgn: independente da propriedade estar habilitada ou desabilitada, não faz diferença na impressão (nunca sai o código EAN). Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei: if (Length( Trim( Prod.cEAN ) ) > 0) and (ACBrSATExtrato.ImprimeCodigoEan) then sCodigo := Trim(Prod.cEAN) else sCodigo := Trim(Prod.cProd); ImprimeCPFNaoInformado.png: independente da propriedade estar habilitada ou desabilitada, não faz diferença na impressão (sempre exibe a frase: "CONSUMIDOR NÃO IDENTIFICADO"). Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei: if (Trim(Dest.xNome) <> '') then NomeConsumidor := Trim(Dest.xNome) else if (ACBrSATExtrato.ImprimeCPFNaoInformado and (Trim(Dest.CNPJCPF) = '')) then NomeConsumidor := ACBrStr('CONSUMIDOR NÃO IDENTIFICADO') else NomeConsumidor := ''; if (Trim(Dest.CNPJCPF) <> '') then NomeConsumidor := FormatarCNPJouCPF(Dest.CNPJCPF) + IfThen(NomeConsumidor<>'', ' - '+NomeConsumidor, ''); PrintIt := (NomeConsumidor <> ''); if PrintIt then mConsumidorLateral.Lines.Text := NomeConsumidor; ImprimeDescAcrescItem.png: independente da propriedade estar habilitada ou desabilitada, não faz diferença na impressão. Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei: procedure TACBrSATExtratoFortesFr.rlbDescItemBeforePrint(Sender: TObject; var PrintIt: boolean); begin with ACBrSATExtrato.CFe.Det.Items[fNumItem] do begin PrintIt := ACBrSATExtrato.ImprimeDescAcrescItem and (not Resumido) and (Prod.vDesc > 0); if PrintIt then lDescItem.Caption := FormatFloatBr(Prod.vDesc,'-,0.00'); end; end; procedure TACBrSATExtratoFortesFr.rlbRatDescSubTotBeforePrint(Sender: TObject; var PrintIt: Boolean); begin with ACBrSATExtrato.CFe.Det.Items[fNumItem] do begin PrintIt := ACBrSATExtrato.ImprimeDescAcrescItem and (not Resumido) and (Prod.vRatDesc > 0); if PrintIt then lRatDescSubTot.Caption := FormatFloatBr(Prod.vRatDesc,'-,0.00'); end; end; procedure TACBrSATExtratoFortesFr.rlbAcresItemBeforePrint(Sender: TObject; var PrintIt: boolean); begin with ACBrSATExtrato.CFe.Det.Items[fNumItem] do begin PrintIt := ACBrSATExtrato.ImprimeDescAcrescItem and (not Resumido) and (Prod.vOutro > 0); if PrintIt then lAcrescItem.Caption := FormatFloatBr(Prod.vOutro,'+,0.00'); end; end; procedure TACBrSATExtratoFortesFr.rlbRatAcresSubTotBeforePrint(Sender: TObject; var PrintIt: Boolean); begin with ACBrSATExtrato.CFe.Det.Items[fNumItem] do begin PrintIt := ACBrSATExtrato.ImprimeDescAcrescItem and (not Resumido) and (Prod.vRatAcr > 0); if PrintIt then lRatAcresSubTot.Caption := FormatFloatBr(Prod.vRatAcr,'+,0.00'); end; end; ImprimeEmUmaLinha.png: independente da propriedade estar habilitada ou desabilitada, não faz diferença na impressão (sempre vai imprimir em duas linhas). Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei: if ACBrSATExtrato.ImprimeEmUmaLinha then begin LinhaItem := sCodigo + ' [DesProd] ' + ACBrSATExtrato.FormatarQuantidade(Prod.qCom, False) + ' ' + Trim( Prod.uCom) + ' X ' + FormatFloatBr(Prod.vUnCom, mvUnCom) + sVlrImpostos; // acerta tamanho da descrição nTamDescricao := maxCaracter - Length(LinhaItem); sDescricao := PadRight(Copy(Trim(Prod.xProd), 1, nTamDescricao), nTamDescricao); LinhaItem := StringReplace(LinhaItem, '[DesProd]', sDescricao, [rfReplaceAll]); mLinhaItem.Lines.Add(LinhaItem); end Logo.png: independente das propriedades seguintes propriedades (ImprimeLogoLateral, LogoAutoSize, LogoCenter, LogoHeigth, LogoStretch, LogoVisible e LogoWidth) estarem habilitadas ou desabilitadas, não faz diferença na impressão. Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei código para todas elas; ImprimeMsgOlhoNoImposto.png: Mesmo com a propriedade desabilitada, continua imprimindo a frase "Valor aproximado dos Tributos deste Cupom" quando busco no ACBrSATExtratoFR.pas, dessa vez encontra o código abaixo: procedure TACBrSATExtratoFR.CarregaInformacoesAdicionais; var i: Integer; begin with FCFe, cdsInformacoesAdicionais do begin Close; CreateDataSet; Append; if (Emit.cRegTrib = RTSimplesNacional) then FieldByName('ObsFisco').AsString := Msg_ICMS_123_2006; for i := 0 to Pred(obsFisco.Count) do FieldByName('ObsFisco').AsString := FieldByName('ObsFisco').AsString + obsFisco[i].xCampo + '-' + obsFisco[i].xTexto; if (InfAdic.infCpl <> '') or (Self.ImprimeMsgOlhoNoImposto and (Total.vCFeLei12741 > 0)) then FieldByName('infAdic').AsString := StringReplace(InfAdic.infCpl,';',sLineBreak,[rfReplaceAll]);; Post; end; end; QrCode.png: independente das propriedades seguintes propriedades ImprimeQrCode e ImprimeQRCodeLateral estarem habilitadas ou desabilitadas, não faz diferença na impressão e quando busco no ACBrSATExtratoFR.pas não encontra nada, mas buscando no ACBrSATExtratoFortesFr.pas encontra código para as duas; LarguraBobina.png: independente da propriedade estar habilitada ou desabilitada, não faz diferença na impressão, sempre imprimindo com a mesma largura. Ao buscar no ACBrSATExtratoFR.pas, não encontrei nada relacionado, mas ao buscar no ACBrSATExtratoFortesFr.pas, encontrei: // Largura e Margens do Relatório // RLLayout.Width := LarguraBobina; RLLayout.Margins.LeftMargin := MargemEsquerda; RLLayout.Margins.RightMargin := MargemDireita; RLLayout.Margins.TopMargin := MargemSuperior; RLLayout.Margins.BottomMargin := MargemInferior; // Ajustando o tamanho da página // RLLayout.PageBreaking := pbNone; RLLayout.PageSetup.PaperSize := fpCustom ; RLLayout.PageSetup.PaperWidth := Round(LarguraBobina/MMAsPixels) ; Margens.png: encontrei dificuldades com as seguintes propriedades: MargemSuperior: quando configurada, a impressão apresenta a margem superior, mas o papel acaba no código de barras e o QrCode não é exibido completamente. Na impressão em uma Bematech MP-4200 TH, o resultado é cortado logo após o código de barras. MargemDireita: alguns componentes não respeitam o valor configurado, ficando fora da impressão. Gostaria de saber se há possibilidade de ajustar e implementar as propriedades mencionadas. Atenciosamente, Michel Meneghin