Ir para conteúdo
  • Cadastre-se

bnobre

Membros Pro
  • Total de ítens

    1.502
  • Registro em

  • Última visita

  • Days Won

    4

Tudo que bnobre postou

  1. Olá a todos, Alguém sabe em qual NT ou outro texto está especificado quais documentos podem ser usados para o preenchimento da tag idEstrangeiro na emissão de uma NFC-e? Desde já agradeço a atenção de todos
  2. Legal a dica da tag vOutro, mas acho que seria "mais elegante" ratear entre os produtos. Essa dica que você me deu em relação ao residual ser jogado no vProd e depois dividido entre as quantidades afim de achar o valor unitário, me deu uma visão mais simplificada do que eu estava tentando fazer. Antes estava me baseando no vUnCom para fazer o rateio e depois descobrir o vProd... Da sua forma acho que o código para o rateio vai ficar mais fácil, obrigado. Mas observe que como trabalho com duas casas decimais, de uma forma ou de outra sempre existirá um resíduo e o mesmo nem sempre permitirá uma divisão com resultados de até 2 casas, por exemplo (baseado na sua dica): Levando em conta um resíduo de R$ 0,01, jogo no item de maior valor R$ 10,00, fico com um vProd de R$10,01 e um qCom de 3. Com isso terei um vUnCom de "3,3366666666666666666666666666667", arredondando para cima terei um vUnCom de 3,34 e consequentemente um recálculo de vProd para R$ 10,02. Aí está meu dilema... 1 - Devo manter o vProd =10,01 e vUnCom = 3,34? Ignorando assim explicitamente o resultado correto de 3,34 X 3 2- Devo recalcular o vProd para 10,02? 3 - Alguma outra opção que não estou visualizando? Quero fazer algo que fique mais elegante e me traga menos problemas a longo prazo Desde já agradeço sua atenção
  3. Perfeito BigWings... Mas não trata-se de desconto, trata-se de ACRÉSCIMO. Na função de desconto que tenho eu faço exatamente isso que sugeriu e funciona perfeitamente, mas observe que no acréscimo temos um fator complicador, não existe uma tag acréscimo, portanto só resta acrescermos tal valor no total final do(s) produto(s). Portanto vamos supor que o resíduo seja de R$ 0,01... Por não existir uma coluna acréscimo eu acresceria esse R$ 0,01 ao valor total do produto de maior valor total, item 1 por exemplo. Só que esse item 1 tem 5 quantidades... Como dividir R$ 0,01 entre as 5 quantidades para acrescer esse R$ 0,01 ao valor total do item 1?
  4. Perfeito... Obrigado Daniel
  5. Olá a todos, Possuo uma tela com um label de width = 1006. Mesmo assim, às vezes o conteúdo do mesmo excede essa largura me causando problemas. Alguém teria algum código ou dica para ajustar essa fonte quando o texto exceder a largura de 1006? Desde já agradeço a atenção de todos.
  6. Olá a todos, Eu possuo um PDV para emissão de NFCe e preciso criar uma função que permita o cliente informar um valor de acréscimo para ser embutido no valor total da nota. A minha ideia inicial é a seguinte: 1 - O cliente vai informar o valor percentual a ser acrescido ao valor da nota. Ex: 15% 2 - O PDV vai transformar esse valor percentual em real, e depois rateá-lo entre os valores unitários dos itens da nota até chegar aos 15% totais de acréscimo. O problema é que nessas contas, dado arredondamentos realizados, sempre faltam alguns centavos ao realizar tal rateio. Por exemplo: 15% de acréscimo representa R$ 10,00, e ao ser rateado eu consiga distribuir apenas R$ 9,99. Preciso fazer algo com esse R$ 0,01... Correto?!?!? Mas os produtos da lista possuem quantidades superiores a 1, e eu não tenho como acrescer esse R$ 0,01 no total de nenhum produto dado a impossibilidade matemática de distribui-lo entre seus valores unitários. Considerem que eu trabalho apenas com 2 casas decimais. O que fazer com essa sobra? Ignorá-la ou teriam uma alternativa mais elegante? Desde já agradeço a atenção de todos
  7. Descobri algo interessante... Dado o grande tamanho do SELECT, seria bem provável que eu tivesse um SUBSELECT tentando puxar de uma tabela externa, então eu tentei usar ALIASes em todas as tabelas para evitar esse problema... Então apliquei isso no primeiro SELECT, ficando assim: SELECT LI1.id_produtos, P1.codigo, P1.descricao, (SELECT IFNULL(SUM(LI2.quantidade),0) FROM _TBL_LIBERAR_ITENS LI2 LEFT OUTER JOIN _TBL_LIBERAR L2 ON LI2.id_liberar = L2.id_liberar WHERE LI2.id_produtos = LI1.id_produtos AND L2.data < "2018/09/01" AND L2.id_tecnicos IS NOT NULL AND L2.empresa = "1") - (SELECT IFNULL(SUM(BI1.quantidade),0) FROM _TBL_BAIXAR_ITENS BI1 LEFT OUTER JOIN _TBL_BAIXAR B1 ON BI1.id_baixar = B1.id_baixar WHERE B1.data < "2018/09/01" AND BI1.id_produtos = LI1.id_produtos AND B1.id_tecnicos IS NOT NULL AND B1.empresa = "1") - (SELECT IFNULL(SUM(DI1.quantidade),0) FROM _TBL_DEVOLVER_ITENS DI1 LEFT OUTER JOIN _TBL_DEVOLVER D1 ON DI1.id_devolver = D1.id_devolver WHERE D1.data < "2018/09/01" AND DI1.id_produtos = LI1.id_produtos AND D1.id_tecnicos IS NOT NULL AND D1.empresa = "1") AS saldoanterior, SUM(LI1.quantidade) AS qtdeliberada, (SELECT IFNULL(SUM(BI2.quantidade),0) FROM _TBL_BAIXAR_ITENS BI2 LEFT OUTER JOIN _TBL_BAIXAR B2 ON BI2.id_baixar = B2.id_baixar WHERE B2.data BETWEEN "2018/09/01" AND "2018/09/30" AND BI2.id_produtos = LI1.id_produtos AND B2.id_tecnicos IS NOT NULL AND B2.empresa = "1") AS qtdebaixada, (SELECT IFNULL(SUM(DI2.quantidade),0) FROM _TBL_DEVOLVER_ITENS DI2 LEFT OUTER JOIN _TBL_DEVOLVER D2 ON DI2.id_devolver = D2.id_devolver WHERE D2.data BETWEEN "2018/09/01" AND "2018/09/30" AND DI2.id_produtos = LI1.id_produtos AND D2.id_tecnicos IS NOT NULL AND D2.empresa = "1") AS qtdedevolvida FROM _TBL_LIBERAR_ITENS LI1 LEFT OUTER JOIN _TBL_PRODUTOS P1 ON LI1.id_produtos = P1.id_produtos LEFT OUTER JOIN _TBL_LIBERAR L1 ON LI1.id_liberar = L1.id_liberar WHERE L1.data BETWEEN "2018/09/01" AND "2018/09/30" AND LI1.id_produtos IS NOT NULL AND L1.id_tecnicos IS NOT NULL AND L1.empresa = "1" GROUP BY LI1.id_produtos ORDER BY P1.descricao Mesmo fazendo isso, o SELECT continuou demorado se eu retirasse o SUM. Daí apliquei essa mesma ideia dos ALIASes no segundo SELECT que fiz, dado a dica do EMBarbosa, ficou assim: SELECT P1.id_produtos, P1.codigo, P1.descricao, (SELECT IFNULL(SUM(LI2.quantidade),0) FROM _TBL_LIBERAR_ITENS LI2 LEFT OUTER JOIN _TBL_LIBERAR L2 ON LI2.id_liberar = L2.id_liberar WHERE LI2.id_produtos = LI1.id_produtos AND L2.data < "2018/09/01" AND L2.id_tecnicos IS NOT NULL AND L2.empresa = "1") - (SELECT IFNULL(SUM(BI1.quantidade),0) FROM _TBL_BAIXAR_ITENS BI1 LEFT OUTER JOIN _TBL_BAIXAR B1 ON BI1.id_baixar = B1.id_baixar WHERE B1.data < "2018/09/01" AND BI1.id_produtos = LI1.id_produtos AND B1.id_tecnicos IS NOT NULL AND B1.empresa = "1") - (SELECT IFNULL(SUM(DI1.quantidade),0) FROM _TBL_DEVOLVER_ITENS DI1 LEFT OUTER JOIN _TBL_DEVOLVER D1 ON DI1.id_devolver = D1.id_devolver WHERE D1.data < "2018/09/01" AND DI1.id_produtos = LI1.id_produtos AND D1.id_tecnicos IS NOT NULL AND D1.empresa = "1") AS saldoanterior, (SELECT IFNULL(SUM(LI3.quantidade),0) FROM _TBL_LIBERAR_ITENS LI3 LEFT OUTER JOIN _TBL_LIBERAR L3 ON LI3.id_liberar = L3.id_liberar WHERE LI3.id_produtos = LI1.id_produtos AND L3.data BETWEEN "2018/09/01" AND "2018/09/31" AND L3.id_tecnicos IS NOT NULL AND L3.empresa = "1") AS qtdeliberada, (SELECT IFNULL(SUM(BI2.quantidade),0) FROM _TBL_BAIXAR_ITENS BI2 LEFT OUTER JOIN _TBL_BAIXAR B2 ON BI2.id_baixar = B2.id_baixar WHERE B2.data BETWEEN "2018/09/01" AND "2018/09/30" AND BI2.id_produtos = LI1.id_produtos AND B2.id_tecnicos IS NOT NULL AND B2.empresa = "1") AS qtdebaixada, (SELECT IFNULL(SUM(DI2.quantidade),0) FROM _TBL_DEVOLVER_ITENS DI2 LEFT OUTER JOIN _TBL_DEVOLVER D2 ON DI2.id_devolver = D2.id_devolver WHERE D2.data BETWEEN "2018/09/01" AND "2018/09/30" AND DI2.id_produtos = LI1.id_produtos AND D2.id_tecnicos IS NOT NULL AND D2.empresa = "1") AS qtdedevolvida FROM _TBL_PRODUTOS P1 LEFT OUTER JOIN _TBL_LIBERAR_ITENS LI1 ON P1.id_produtos = LI1.id_produtos LEFT OUTER JOIN _TBL_LIBERAR L1 ON LI1.id_liberar = L1.id_liberar WHERE LI1.id_produtos IS NOT NULL AND L1.id_tecnicos IS NOT NULL AND L1.empresa = "1" GROUP BY P1.id_produtos ORDER BY P1.descricao Finalmente com esse SELECT reformulado e COM O USO de ALIASes, o SELECT ficou rápido com ou sem o uso do SUM. Com isso eu concluo que o SELECT antes de mostrar o resultado estava tentando decidir qual tabela usar (a do SUBSELECT ou a EXTERNA) e daí ocorria a perda de tempo, fora a questão levantada pelo EMBarbosa sobre a estrutura errada. Creio que é isso, se alguém tiver algo a acrescentar fique a vontade. Abraços
  8. Olá EMBarbosa, tudo bom? Conforme você demonstrou, após retirar essa coluna fica mais interessante eu pegar esses dados da tabela _TBL_PRODUTOS. O fiz como no código abaixo: SELECT _TBL_PRODUTOS.id_produtos, _TBL_PRODUTOS.codigo, _TBL_PRODUTOS.descricao, (SELECT IFNULL(SUM(LI2.quantidade),0) FROM _TBL_LIBERAR_ITENS LI2 LEFT OUTER JOIN _TBL_LIBERAR ON LI2.id_liberar = _TBL_LIBERAR.id_liberar WHERE LI2.id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_LIBERAR.data < "2018/09/01" AND _TBL_LIBERAR.id_tecnicos IS NOT NULL AND _TBL_LIBERAR.empresa = "1") - (SELECT IFNULL(SUM(_TBL_BAIXAR_ITENS.quantidade),0) FROM _TBL_BAIXAR_ITENS LEFT OUTER JOIN _TBL_BAIXAR ON _TBL_BAIXAR_ITENS.id_baixar = _TBL_BAIXAR.id_baixar WHERE _TBL_BAIXAR.data < "2018/09/01" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_BAIXAR.id_tecnicos IS NOT NULL AND _TBL_BAIXAR.empresa = "1") - (SELECT IFNULL(SUM(_TBL_DEVOLVER_ITENS.quantidade),0) FROM _TBL_DEVOLVER_ITENS LEFT OUTER JOIN _TBL_DEVOLVER ON _TBL_DEVOLVER_ITENS.id_devolver = _TBL_DEVOLVER.id_devolver WHERE _TBL_DEVOLVER.data < "2018/09/01" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_DEVOLVER.id_tecnicos IS NOT NULL AND _TBL_DEVOLVER.empresa = "1") AS saldoanterior, SUM(_TBL_PRODUTOS.quantidade) AS qtdeliberada, (SELECT IFNULL(SUM(_TBL_BAIXAR_ITENS.quantidade),0) FROM _TBL_BAIXAR_ITENS LEFT OUTER JOIN _TBL_BAIXAR ON _TBL_BAIXAR_ITENS.id_baixar = _TBL_BAIXAR.id_baixar WHERE _TBL_BAIXAR.data BETWEEN "2018/09/01" AND "2018/09/30" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_BAIXAR.id_tecnicos IS NOT NULL AND _TBL_BAIXAR.empresa = "1") AS qtdebaixada, (SELECT IFNULL(SUM(_TBL_DEVOLVER_ITENS.quantidade),0) FROM _TBL_DEVOLVER_ITENS LEFT OUTER JOIN _TBL_DEVOLVER ON _TBL_DEVOLVER_ITENS.id_devolver = _TBL_DEVOLVER.id_devolver WHERE _TBL_DEVOLVER.data BETWEEN "2018/09/01" AND "2018/09/30" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_DEVOLVER.id_tecnicos IS NOT NULL AND _TBL_DEVOLVER.empresa = "1") AS qtdedevolvida FROM _TBL_PRODUTOS LEFT OUTER JOIN _TBL_LIBERAR_ITENS ON _TBL_PRODUTOS.id_produtos = _TBL_LIBERAR_ITENS.id_produtos LEFT OUTER JOIN _TBL_LIBERAR ON _TBL_LIBERAR_ITENS.id_liberar = _TBL_LIBERAR.id_liberar WHERE _TBL_LIBERAR.data BETWEEN "2018/09/01" AND "2018/09/30" AND _TBL_LIBERAR_ITENS.id_produtos IS NOT NULL AND _TBL_LIBERAR.id_tecnicos IS NOT NULL AND _TBL_LIBERAR.empresa = "1" GROUP BY _TBL_PRODUTOS.id_produtos ORDER BY _TBL_PRODUTOS.descricao O grande mistério é que ainda estou com a problemática do SELECT ficar rápido só com a presença da linha do SUM. Porque será que remover esse SUM deixa o SELECT tão mais lento?
  9. Olá EMBarbosa, irei analisar o posto o resultado aqui para conhecimento de todos... Abraços
  10. Olá a todos, Estou executando o seguinte select em meu MySQL: SELECT _TBL_LIBERAR_ITENS.id_produtos, _TBL_PRODUTOS.codigo, _TBL_PRODUTOS.descricao, (SELECT IFNULL(SUM(LI2.quantidade),0) FROM _TBL_LIBERAR_ITENS LI2 LEFT OUTER JOIN _TBL_LIBERAR ON LI2.id_liberar = _TBL_LIBERAR.id_liberar WHERE LI2.id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_LIBERAR.data < "2018/09/01" AND _TBL_LIBERAR.id_tecnicos IS NOT NULL AND _TBL_LIBERAR.empresa = "1") - (SELECT IFNULL(SUM(_TBL_BAIXAR_ITENS.quantidade),0) FROM _TBL_BAIXAR_ITENS LEFT OUTER JOIN _TBL_BAIXAR ON _TBL_BAIXAR_ITENS.id_baixar = _TBL_BAIXAR.id_baixar WHERE _TBL_BAIXAR.data < "2018/09/01" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_BAIXAR.id_tecnicos IS NOT NULL AND _TBL_BAIXAR.empresa = "1") - (SELECT IFNULL(SUM(_TBL_DEVOLVER_ITENS.quantidade),0) FROM _TBL_DEVOLVER_ITENS LEFT OUTER JOIN _TBL_DEVOLVER ON _TBL_DEVOLVER_ITENS.id_devolver = _TBL_DEVOLVER.id_devolver WHERE _TBL_DEVOLVER.data < "2018/09/01" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_DEVOLVER.id_tecnicos IS NOT NULL AND _TBL_DEVOLVER.empresa = "1") AS saldoanterior, SUM(_TBL_LIBERAR_ITENS.quantidade) AS qtdeliberada, (SELECT IFNULL(SUM(_TBL_BAIXAR_ITENS.quantidade),0) FROM _TBL_BAIXAR_ITENS LEFT OUTER JOIN _TBL_BAIXAR ON _TBL_BAIXAR_ITENS.id_baixar = _TBL_BAIXAR.id_baixar WHERE _TBL_BAIXAR.data BETWEEN "2018/09/01" AND "2018/09/30" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_BAIXAR.id_tecnicos IS NOT NULL AND _TBL_BAIXAR.empresa = "1") AS qtdebaixada, (SELECT IFNULL(SUM(_TBL_DEVOLVER_ITENS.quantidade),0) FROM _TBL_DEVOLVER_ITENS LEFT OUTER JOIN _TBL_DEVOLVER ON _TBL_DEVOLVER_ITENS.id_devolver = _TBL_DEVOLVER.id_devolver WHERE _TBL_DEVOLVER.data BETWEEN "2018/09/01" AND "2018/09/30" AND id_produtos = _TBL_LIBERAR_ITENS.id_produtos AND _TBL_DEVOLVER.id_tecnicos IS NOT NULL AND _TBL_DEVOLVER.empresa = "1") AS qtdedevolvida FROM _TBL_LIBERAR_ITENS LEFT OUTER JOIN _TBL_PRODUTOS ON _TBL_LIBERAR_ITENS.id_produtos = _TBL_PRODUTOS.id_produtos LEFT OUTER JOIN _TBL_LIBERAR ON _TBL_LIBERAR_ITENS.id_liberar = _TBL_LIBERAR.id_liberar WHERE _TBL_LIBERAR.data BETWEEN "2018/09/01" AND "2018/09/30" AND _TBL_LIBERAR_ITENS.id_produtos IS NOT NULL AND _TBL_LIBERAR.id_tecnicos IS NOT NULL AND _TBL_LIBERAR.empresa = "1" GROUP BY _TBL_LIBERAR_ITENS.id_produtos ORDER BY _TBL_PRODUTOS.descricao O mesmo retorna o resultado em 0,791 segundos, em média. Eu não preciso mais da coluna qtdeliberada, gerada pela linha "SUM(_TBL_LIBERAR_ITENS.quantidade) AS qtdeliberada". E ao retirar a mesma, descobri que o SELECT passa a levar em média 30,894 segundos. Alguém poderia me dizer porque esse SUM está tornando esse SELECT tão mais rapido???
  11. Fiz o procedimento com o LT_SSLv3 marcado e deu certo... Provavelmente é isso, Obrigado pelos esclarecimentos Daniel... Abraços
  12. Perfeito Daniel, Para termos certeza se ele está usando o protocolo antigo (que a principio é a única explicação plausível), existe algum procedimento que eu possa realizar? Acho que seria muito produtivo e esclarecedor até para os outros usuários, já que dúvidas sobre o tema são bem recorrentes devido sua complexidade para muitos... E quanto mais material esclarecendo é melhor.
  13. Então... É NFCe mesmo... Então ainda funciona com o Windows desatualizado nesse caso? Tirei o print da tela conforme sua orientação, só que a opção Security que achei está fora da Network... Vejá se está correto a tela que eu abri e se puder explicar sobre a mesma, pois não entendi nada kkkk Desde já agradeço a atenção e esclarecimentos
  14. Pode me passar a URL da consulta 4.00 usada pelo componente quando marco RJ no componente ou me orientar onde acho?
  15. "Catucando" eu descobri algo ... Colocando o SSLType como Lt_all a consulta funciona como se o Windows estivesse atualizado, sem o erro 12030. Para esclarecimentos, o WebService marcado é do RJ, SSLLib é libWinCrypt com suas opções padrões, cryWinCrypt, httpWinHttp e xsLibXml2. Se eu marco SSLType como LT_TLSv1_2 recebo o erro 12030, relacionado a falta de atualização do Windows. Será que o webservice usado pelo RJ está aceitando outro protocolo além do TLS 1.2???
  16. Então... Eu fiz um teste básico, coloquei o demo do ACBr para tentar consultar o Status, deu aquele erro classico do 12030. Até então eu achava que a necessidade de atualizar o Windows era devido a questões de limitação do mesmo em relação ao TLS 1.2, mas esse sistema está conseguindo emitir normalmente.
  17. Olá a todos, Estou implementando meu sistema em uma empresa, que substituirá um outro sistema usado até então, de nome Uniplus Starter Edition. O que me chamou a atenção é que o S.O. é o Windows 7 Ultimate 32 Bits sem nenhuma atualização, nem sequer o SP1 e esse sistema emite normalmente as notas com o certificado A3. Alguém sabe como isso é possível? Pergunto pois seria muito prático fazer assim com o componente ACBr, desde que não gere problemas. Desde já agradeço a atenção de todos.
  18. Olá meu amigo, tudo bom? Obrigado pelo retorno e perdoe pela demora em responder, mas acabo de ver sua mensagem. Irei verificar seu projeto e posto aqui os resultados. Abraços
  19. Olá a todos, Estou precisando criar um app mobile e comecei a usar o Delphi 10.2 Tokyo + Firemonkey para esse fim. Até então só conhecia o Delphi 7 e o Delphi 2010, mas estou conseguindo dar os "primeiros passos" no Delphi Tokyo. Mas infelizmente esbarrei em um incoveniente, um Access Violation que não sei se está sendo causado por mim ou por um bug no Delphi. Para reproduzir o problema, criem um Multi-Device Application, coloquem um TDateEdit e um TMultiView e no evento OnCloserPicker (ou qualquer outro) coloquem o código "ShowMessage('oi')". Rodem o programa na plataforma Windows, mudem a data do TDateEdit para acionarem o evento programado e exibir a mensagem OI, não terão problema algum. Agora de volta ao projeto, cliquem com o botão direito sobre o MultiView, marquem Edit Custom Style e mudem a cor de fundo do mesmo, apliquem e será criado um objeto StyleBook1 (não sei ainda a função do mesmo), rodem o aplicativo e mudem a data, após exibir a mensagem OI o delphi retornará o AccessViolation. Se excluirem o StyleBook1 o AccessViolation não ocorre mais, mas perdemos a formatação aplicada no MultiView. Fazendo uma pesquisa na internet, achei esse site que mencionava se tratar de um bug do Delphi Tokyo corrigido no Release 1. RSP-18663 FireMonkey TDateEdit AV selecting a date from the drop down calendar FireMonkey Fonte: http://edn.embarcadero.com/article/44763 Com o intuito de resolver esses e outros bugs, instalei logo a versão Tokyo Release 3, o erro persistiu. Então Instalei o Release 1, o erro também persistiu. O fato é, sempre que altero o estilo de um objeto é criado esse StyleBook1, e sempre que tem esse StyleBook1 qualquer código que coloco em qualquer evento de um TDateEdit me retorna Access Violation. Isso é um bug ou eu estou fazendo algo errado? Desde já agradeço a atenção de todos
  20. Então, a princípio isso nada tem a ver com NFes ... A idéia é criar um código universal para enviar qualquer relatório do Fortes Report existente em minha aplicação. Seja um relatório de vendas, de estoque, financeiro... Todos teriam o botão ENVIAR ativado em sua Pré-Visualização e ao clicar no mesmo o relatório em questão seria enviado por e-mail. Inclusive esse código seria finalmente um exemplo válido para todos com tal finalidade, pois procurei exaustivamente na internet e a única menção a algo parecido seria um exemplo (sendmail.zip) só que usando versões muito antigas do Fortes e mencionado em Foruns desativados há tempos.
  21. Olá Daniel... Então, o código acima funciona pois foi escrito no mesmo formulário onde existe o objeto RLReport1, dentre vários existentes no meu projeto. Se eu tentar simplesmente jogar o RLPreviewSetup1 e esse código no seu evento onSend para o DataModule, como no mesmo não existe tal componente RLReport1 a aplicação não irá compilar.
  22. Olá Juliomar, tudo bom? Obrigado pela ajuda no tópico anterior. Como o mesmo já foi respondido achei pertinente abrir um novo. Ao perceber que o RLPreviewSetup1 é visto por todos os relatórios do meu projeto em Delphi, eu tive a ideia de colocar o RLPreviewSetup1 no meu DataModule e fazer um código universal para envio de e-mail no Fortes Report, na tela de Pré-Visualização. Dessa forma o usuário poderá usar o botão ENVIAR da Pré-Visualização de qualquer relatório e conseguir enviar o mesmo por e-mail. Conforme citei no tópico anterior, atualmente uso o seguinte código para envio do e-mail: procedure Trlr_rel_vendasnfce.EnviarEmail; var para:String; begin para := InputBox('Enviar relatório por e-mail','Preencha o(s) e-mail(s) abaixo:', ''); if para <> '' then begin try RLReport1.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf'); frm_aviso := Tfrm_aviso.Create(Application); frm_aviso.lbl_aviso.Caption := ' Enviando e-mail'; frm_aviso.Show; frm_aviso.BringToFront; Application.ProcessMessages; dtm_banco.ACBrMail1.Clear; dtm_banco.ACBrMail1.IsHTML := False; dtm_banco.ACBrMail1.Subject := 'Relatório Vendas NFCe '; AjustaParametrosDeEnvio(para); dtm_banco.ACBrMail1.AltBody.Text := 'Empresa: ' + dtm_banco.Emitente_Nome + #13 + #13 + 'CNPJ: ' + dtm_banco.Emitente_CNPJCPF + #13 + #13 + 'Telefone: ' + dtm_banco.Emitente_Fone + #13 + #13 + #13 + #13 + #13 + #13 + '* Este e-mail foi enviado automaticamente pelo aplicativo da B&D Sistemas.Favor não responder. '; dtm_banco.ACBrMail1.AddAttachment(ExtractFilePath(Application.ExeName) + 'relatorio.pdf'); dtm_banco.ACBrMail1.Send(False); frm_aviso.Free; ShowMessage('Relatório enviado com sucesso'); except on E : Exception do begin frm_aviso.Free; ShowMessage('ERRO' + #13 + #13 + e.message); end; end; end; end; O grande problema está no código responsável pela geração do PDF: RLReport1.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf'); Como podem ver acima eu estou especificando um relatório... Existe algum comando que salve o PDF do relatório que está com a Pré-Visualização em execução??? Algo tipo "RLReportEmVisualizacaoNoMomento.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf');"????
  23. Falha minha novamente... tinha um "rlr_rel_vendasnfce.RLPreviewSetup1.OnSend :=nil ;" perdido pelo código... Ficou perfeito. Mas agora estou pensando além e creio que posso criar algo bem melhor, prático e que pode servir para todos que usam o Fortes e finalmente teremos um (bom) exemplo de envio de e-mail. A minha idéia é a seguinte: Já que o RLPreviewSetup1 é visto por todos os relatórios do meu aplicativo, posso colocar ele no meu DataModule e criar um código universal, daí o usuário poderá usar o botão ENVIAR da Pré-Visualização de qualquer relatório. O código que postei acima serve perfeitamente, o problema será o comando da geração do PDF: RLReport1.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf'); Como podem ver acima eu estou especificando um relatório... Existe algum comando que salve o PDF do relatório que está com a Pré-Visualização em execução??? Algo tipo "RLReportEmVisualizacaoNoMomento.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf');"????
  24. Então, eu atribuo a procedure EnviarEmail ao evento onSend do componente e dá esse erro... Mas como suspeitei era falha minha, não observei direito o exemplo do amigo Juliomar... Faltou colocar "(Sender: TObject)" na procedure EnviarEmail. procedure EnviarEmail(Sender: TObject); Dessa maneira compilou sem erro, o problema é que o botão ENVIAR do Preview do Fortes fica desativado, como se a linha "rlr_rel_vendasnfce.RLPreviewSetup1.OnSend := rlr_rel_vendasnfce.EnviarEmail;" não fosse carregada. Por garantia comentei a linha "rlr_rel_vendasnfce.RLPreviewSetup1.OnSend :=nil;", mas mesmo assim o botão continua desativado. Se eu programar no onSend direto pelo Object Inspector o botão ativa.
  25. Perfeito, valeu pela dica... Ao tentar pelo Object Inspector ele cria a procedure da seguinte forma: procedure Trlr_rel_vendasnfce.RLPreviewSetup1Send(Sender: TObject); Aí "empaquei". Qual valor TObject devo colocar???? Como devo escrever????
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...