+2 votos
68 visitas
Tenho um relatório que foi desenvolvido em stimulsoft e quando emitido pelo desktop ele chama a tabela virtual e eu utilizo os filtros informados pelo usuário para concatenar nas querys através do @CAMPO.

 

Porém preciso criar um processo agendado que faça a emissão de vários desses relatórios e envie por e-mail cada um de forma individual, mas não sei como passar os parâmetros para obter com o @campo de dentro do relatório.
por (107 pontos) | 68 visitas

3 Respostas

0 votos
Caso seu relatório tenha apenas um sql, você deve substituir o @CAMPO, por @CRITERIOSELECAO.

Na macro do processo você passa o filtro através da função SQLWhere = "A.HANDLE = " & query.fieldbyname("handle").asstring

Para que o filtro continue funcionando no sqlEspecial deve ser informado A.HANDLE = @CAMPO(HANDLE).

A partir da tecnologia 16 é possível utilizar variáveis de ambiente como GetSessionVar ou GetUserVar.
por (155 pontos)
0 votos

Rodrigo, acho que o ponto é como criar uma Entity e passar ela como filtro para o relatório no VBA.

Vi que até é possivel criar uma instancia (Entity) de uma Tabela Virtual em VBA, mas como passa-lá ao CSReportPrinter?

Em C# podemos fazer assim (pelo menos aqui funciona):

EntityDefinition entityDefinition = 
    EntityDefinition.GetByName("TV_FILTRO000");

EntityBase entities = Entity.Create(entityDefinition);

entities.Fields["ESTADO"] = "21";
entities.Fields["PRESTADOR"] = "270";

var processId = AppContext.Report.EmitAsyncReport(
    HandleDoRelatorio, "PDF", null, entities, null, true, true);

 

Acho que se fosse possivel fazer o mesmo em VBA as querys dos relatórios iriam ficar muito mais limpas, para a gente que tem que fazer muitos relatórios serem gerados a partir de botões dentro do sistema.

por (23 pontos)
editado por
–1 voto
Rodrigo,

Segue documentação para emissão de relatórios stimulsoft via API:

http://wiki.benner.com.br/wiki/index.php?title=Emitindo_relat%C3%B3rios_por_API
por (353 pontos)
André, obrigado pela resposta, porém eu já tinha visto essa documentação e ela não explica a minha dúvida. :(
Melhores Feb 2020
  1. diuari.molinari

    30 Pontos

  2. henrique.muller

    18 Pontos

  3. juliano.pezzini

    13 Pontos

  4. thiago.almeida

    10 Pontos

  5. bruno.viek

    9 Pontos

  6. metalsystem.gustavo

    8 Pontos

  7. gustavo.lemos

    8 Pontos

  8. Leonardo Rovigo

    7 Pontos

  9. felipe.souza

    5 Pontos

  10. antonio.teles

    5 Pontos

200 pontos
Melhores 2020 Feb 24 - Mar 01
  1. diuari.molinari

    9 Pontos

  2. bruno.viek

    9 Pontos

  3. gustavo.lemos

    8 Pontos

  4. felipe.souza

    5 Pontos

  5. juliano.pezzini

    5 Pontos

  6. pedro.amorim

    2 Pontos

409 perguntas
461 respostas
334 comentários
461 usuários