Viva!
Antes de colocar a minha questão, quero congratular e agradecer ao fórum por ter contribuído para a execução dos meus projetos Access. Sem este dificilmente conseguiria ter tão bons resultados.
Utilizo o Access 2007 e a questão é a seguinte:
(Já passei dias a tentar procurar um solução, quer no fórum quer noutros sítios da net, mas nenhuma das que encontrei se adapta ao que pretendo.)
Tenho um formulário com um subformulário que filtra os fornecedores a quem eu quero enviar um relatório, cuja informação por cada relatório irá variar em função de cada fornecedor.
Atualmente o que tenho em uso funciona da seguinte forma:
1. O formulário principal abre e são visualizados os fornecedores (filtrados) a quem eu devo enviar o dito relatório;
2. Coloco o cursor na linha do fornecedor correspondente e aciono o botão que faz abrir o relatório. (A consulta que está vinculada ao relatório reconhece a posição do cursor e apenas mostra a informação do respetivo fornecedor.);
3. Dentro deste existe um segundo botão que passa o relatório para pdf e envia por e-mail.
Funciona mas torna-se trabalhoso quando temos muitos fornecedores a quem enviar o relatório. (Facilmente poderei adaptar o comando e eliminar o 3º passo.)
Sendo o objetivo principal fazer todos estes passos através de um único botão, a execução deve passar (julgo eu) por duas fases:
1ª Exportar o relatório em pdf para uma pasta específica;
2.ª Enviar o relatório em pdf exportado por e-mail.
A dificuldade está na 1ª fase. O código abaixo faz o que pretendo, ou seja, reconhece e gera um relatório pdf para cada fornecedor, só que todos os relatórios em termos de conteúdo pertencem ao fornecedor que se posiciona em 1º lugar no subformulário.
Isto porque o cursor não segue para o registo seguinte após ter sido criado o 1º pdf. Tentei adaptar o comando para que o cursor desse este “salto” mas sem sucesso.
Private Sub Comando21_Click()
On Error Resume Next
Me.Fornecedores_Enviar_subformulário.SetFocus ‘Subformulário
Dim rst As DAO.Recordset
Set rst = Forms!Fornecedores_Enviar.Recordset ‘Formulário principal
Do Until rst.EOF
DoCmd.OutputTo acOutputReport, "Relatorio", acFormatPDF, "G:\Pasta1\Relatorio_" & Me.ID_Fornecedor & ".pdf"
DoCmd.GoToRecord , "", acNext
rst.MoveNext
Loop
End Sub
Desculpem o detalhe, espero ter sido claro e agradeço as v/ªs sugestões/soluções.
Abraço,
PP
_________________________________________
Olá pessoal!
Consegui matar a charada!
Coloquei no relatório, no evento "Ao activar", o comando DoCmd.OutputTo acOutputReport, "Relatorio", acFormatPDF, "G:\Pasta1\Relatorio_" & Me.ID_Fornecedor & ".pdf".
No formulário principal coloquei um botão com o seguinte código:
Private Sub Comando17_Click()
On Error Resume Next
Me.Fornecedores_Enviar_subformulário.SetFocus ‘Subformulário
DoCmd.GoToRecord , "", acFirst 'Garante que ao clicarmos no botão iniciamos sempre no 1º registo
Dim rst As DAO.Recordset
Set rst = Me.Fornecedores_Enviar_subformulário.Form.Recordset
Do Until rst.EOF
DoCmd.OpenReport "Relatório", acViewReport, , stcriterio 'Abre relatório
DoCmd.Close acReport, "Concursos_Anúncios" 'Fecha relatório
rst.MoveNext
Loop
End If
End Sub
Admito que possam haver outras formas mais bem construídas mas para já serve...
Apesar de não ter tido respostas a este tópico, agradeço a quem possa ter tentado fazer algo.
Abraço,
PP
Antes de colocar a minha questão, quero congratular e agradecer ao fórum por ter contribuído para a execução dos meus projetos Access. Sem este dificilmente conseguiria ter tão bons resultados.
Utilizo o Access 2007 e a questão é a seguinte:
(Já passei dias a tentar procurar um solução, quer no fórum quer noutros sítios da net, mas nenhuma das que encontrei se adapta ao que pretendo.)
Tenho um formulário com um subformulário que filtra os fornecedores a quem eu quero enviar um relatório, cuja informação por cada relatório irá variar em função de cada fornecedor.
Atualmente o que tenho em uso funciona da seguinte forma:
1. O formulário principal abre e são visualizados os fornecedores (filtrados) a quem eu devo enviar o dito relatório;
2. Coloco o cursor na linha do fornecedor correspondente e aciono o botão que faz abrir o relatório. (A consulta que está vinculada ao relatório reconhece a posição do cursor e apenas mostra a informação do respetivo fornecedor.);
3. Dentro deste existe um segundo botão que passa o relatório para pdf e envia por e-mail.
Funciona mas torna-se trabalhoso quando temos muitos fornecedores a quem enviar o relatório. (Facilmente poderei adaptar o comando e eliminar o 3º passo.)
Sendo o objetivo principal fazer todos estes passos através de um único botão, a execução deve passar (julgo eu) por duas fases:
1ª Exportar o relatório em pdf para uma pasta específica;
2.ª Enviar o relatório em pdf exportado por e-mail.
A dificuldade está na 1ª fase. O código abaixo faz o que pretendo, ou seja, reconhece e gera um relatório pdf para cada fornecedor, só que todos os relatórios em termos de conteúdo pertencem ao fornecedor que se posiciona em 1º lugar no subformulário.
Isto porque o cursor não segue para o registo seguinte após ter sido criado o 1º pdf. Tentei adaptar o comando para que o cursor desse este “salto” mas sem sucesso.
Private Sub Comando21_Click()
On Error Resume Next
Me.Fornecedores_Enviar_subformulário.SetFocus ‘Subformulário
Dim rst As DAO.Recordset
Set rst = Forms!Fornecedores_Enviar.Recordset ‘Formulário principal
Do Until rst.EOF
DoCmd.OutputTo acOutputReport, "Relatorio", acFormatPDF, "G:\Pasta1\Relatorio_" & Me.ID_Fornecedor & ".pdf"
DoCmd.GoToRecord , "", acNext
rst.MoveNext
Loop
End Sub
Desculpem o detalhe, espero ter sido claro e agradeço as v/ªs sugestões/soluções.
Abraço,
PP
_________________________________________
Olá pessoal!
Consegui matar a charada!
Coloquei no relatório, no evento "Ao activar", o comando DoCmd.OutputTo acOutputReport, "Relatorio", acFormatPDF, "G:\Pasta1\Relatorio_" & Me.ID_Fornecedor & ".pdf".
No formulário principal coloquei um botão com o seguinte código:
Private Sub Comando17_Click()
On Error Resume Next
Me.Fornecedores_Enviar_subformulário.SetFocus ‘Subformulário
DoCmd.GoToRecord , "", acFirst 'Garante que ao clicarmos no botão iniciamos sempre no 1º registo
Dim rst As DAO.Recordset
Set rst = Me.Fornecedores_Enviar_subformulário.Form.Recordset
Do Until rst.EOF
DoCmd.OpenReport "Relatório", acViewReport, , stcriterio 'Abre relatório
DoCmd.Close acReport, "Concursos_Anúncios" 'Fecha relatório
rst.MoveNext
Loop
End If
End Sub
Admito que possam haver outras formas mais bem construídas mas para já serve...
Apesar de não ter tido respostas a este tópico, agradeço a quem possa ter tentado fazer algo.
Abraço,
PP