DATA REPORT
Boa Noite
Tenho um relatório DataReport sem DataEnvironment baseado em tabela Access que me retorna assim:
ANO MES A B C
2009 03 100 200 500
2009 06 600 100 300
2009 10 260 800 450
2010 01 250 100 600
2010 03 130 230 645
Total Geral 1440 1430 2495
os dados estão na section1 e o Total Geral no Report Footer (com rptFunction) e eu quero [txt-color=#e80000]sub Totais[/txt-color]
eu quero assim:
ANO MES A B C
2009 03 100 200 500
06 600 100 300
10 260 800 450
Total 960 1100 1250
2010 01 250 100 600
03 130 230 645
Total 380 330 1245
Total Geral 1440 1430 2495
eu monto o relatório aqui
Private Sub RelatAnoMes() [ô]relatório de por Ano/mês das vendas e serviço
Dim i As Integer
On Erro GoTo errRelatAnoMes
With rptdinamicoCom2
Set .DataSource = Nothing
.DataMember = [Ô][Ô]
Set .DataSource = rsConsComissoes.DataSource
With .Sections([Ô]Section1[Ô]).Controls
For i = 1 To .Count
If TypeOf .item(i) Is RptTextBox Then
.item(i).DataMember = [Ô][Ô]
.item(i).DataField = rsConsComissoes.Fields(i - 1).Name
End If
Next i
End With
.Show
End With
txtFunc.SetFocus
Call limpar
errRelatAnoMes:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Refaça o processo.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
se alguem tiver alguma ideia, agradeço
Nereu
Tenho um relatório DataReport sem DataEnvironment baseado em tabela Access que me retorna assim:
ANO MES A B C
2009 03 100 200 500
2009 06 600 100 300
2009 10 260 800 450
2010 01 250 100 600
2010 03 130 230 645
Total Geral 1440 1430 2495
os dados estão na section1 e o Total Geral no Report Footer (com rptFunction) e eu quero [txt-color=#e80000]sub Totais[/txt-color]
eu quero assim:
ANO MES A B C
2009 03 100 200 500
06 600 100 300
10 260 800 450
Total 960 1100 1250
2010 01 250 100 600
03 130 230 645
Total 380 330 1245
Total Geral 1440 1430 2495
eu monto o relatório aqui
Private Sub RelatAnoMes() [ô]relatório de por Ano/mês das vendas e serviço
Dim i As Integer
On Erro GoTo errRelatAnoMes
With rptdinamicoCom2
Set .DataSource = Nothing
.DataMember = [Ô][Ô]
Set .DataSource = rsConsComissoes.DataSource
With .Sections([Ô]Section1[Ô]).Controls
For i = 1 To .Count
If TypeOf .item(i) Is RptTextBox Then
.item(i).DataMember = [Ô][Ô]
.item(i).DataField = rsConsComissoes.Fields(i - 1).Name
End If
Next i
End With
.Show
End With
txtFunc.SetFocus
Call limpar
errRelatAnoMes:
With Err
If .Number <> 0 Then
MsgBox [Ô]Ocorreu um Erro! Refaça o processo.[Ô], vbExclamation + vbOKOnly + vbApplicationModal, [Ô]Erro[Ô]
.Number = 0
End If
End With
End Sub
se alguem tiver alguma ideia, agradeço
Nereu
Você vai precisar usar o SHAPE para fazer isso. Veja um Tutorial aqui
Mais informações sobre Estrutura Mestre-Detalhe com SHAPE
Esse código deve te ajudar.
Mais informações sobre Estrutura Mestre-Detalhe com SHAPE
Esse código deve te ajudar.
Bom Dia Robio
é isso mesmo que preciso, vou estudar o SHAPE e tentar resolver o problema.
Muito bom teu código anexo, vai valer um bom estudo dele.
Abraço
Nereu
é isso mesmo que preciso, vou estudar o SHAPE e tentar resolver o problema.
Muito bom teu código anexo, vai valer um bom estudo dele.
Abraço
Nereu
então Robio
se tu tiver paciência dá uma olhada ai, por favor
No meu caso ficaria assim
Private Sub RelatAnoMes() [ô]relatório de por Ano/mês das vendas e serviço
Dim cnn2 As New ADODB.Connection
Dim cnnComando As New ADODB.Command
Dim rsConsComissoes As New ADODB.Recordset
cnn2.Open [Ô]Provider=MSDATASHAPE; DATA Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
[Ô]Data Source=[Ô] & App.Path & [Ô]\Autom.mdb;[Ô]
With cnnComando
.ActiveConnection = cnn2
.CommandType = adCmdText
.CommandText = [Ô] SHAPE {select data por ano, data por mês, Soma De vendas_escr, [Ô] & _
[Ô]Soma De vendas_inf, Soma De vendas_moveis, Soma De vendas_autom, Soma De vendas_ind,[Ô] & _
[Ô]Soma De vendas_pecas, Soma De serv_oficina1, Soma De serv_oficina2, Expr1 from Cons_Comissoes3}[Ô] _
& [Ô]AS Command1 COMPUTE Command1 BY data por ano[Ô]
[txt-color=#e80000]Set rsConsComissoes = .Execute[/txt-color]
End With
With rptdinamicoCom2
Set .DataSource = rsConsComissoes
.DataMember = [Ô][Ô]
.Sections([Ô]Section1[Ô]).Controls.item(1).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(2).DataMember = [Ô]Command1[Ô]
.Refresh
.Show
End With
End Sub
e ai me retorna erro
[Ô]o texto do comando de forma de dados com erro de sintaxe na posição 287 ou proximo a ela no comando. O texto de com. prox. ao erro é: [Ô]by data por ano[Ô].
e sinaliza na linha sublinhada.
se tu tiver paciência dá uma olhada ai, por favor
No meu caso ficaria assim
Private Sub RelatAnoMes() [ô]relatório de por Ano/mês das vendas e serviço
Dim cnn2 As New ADODB.Connection
Dim cnnComando As New ADODB.Command
Dim rsConsComissoes As New ADODB.Recordset
cnn2.Open [Ô]Provider=MSDATASHAPE; DATA Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
[Ô]Data Source=[Ô] & App.Path & [Ô]\Autom.mdb;[Ô]
With cnnComando
.ActiveConnection = cnn2
.CommandType = adCmdText
.CommandText = [Ô] SHAPE {select data por ano, data por mês, Soma De vendas_escr, [Ô] & _
[Ô]Soma De vendas_inf, Soma De vendas_moveis, Soma De vendas_autom, Soma De vendas_ind,[Ô] & _
[Ô]Soma De vendas_pecas, Soma De serv_oficina1, Soma De serv_oficina2, Expr1 from Cons_Comissoes3}[Ô] _
& [Ô]AS Command1 COMPUTE Command1 BY data por ano[Ô]
[txt-color=#e80000]Set rsConsComissoes = .Execute[/txt-color]
End With
With rptdinamicoCom2
Set .DataSource = rsConsComissoes
.DataMember = [Ô][Ô]
.Sections([Ô]Section1[Ô]).Controls.item(1).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(2).DataMember = [Ô]Command1[Ô]
.Refresh
.Show
End With
End Sub
e ai me retorna erro
[Ô]o texto do comando de forma de dados com erro de sintaxe na posição 287 ou proximo a ela no comando. O texto de com. prox. ao erro é: [Ô]by data por ano[Ô].
e sinaliza na linha sublinhada.
Verifique as alterações feitas nas cons_Comissoes3 e Cons_Comissoes2.
With cnnComando
.ActiveConnection = cnnCetecInfServiços2
.CommandType = adCmdText
.CommandText = [Ô]SHAPE {SELECT Cons_Comissoes3.* FROM Cons_Comissoes3} [Ô] & _
[Ô]AS Command1 COMPUTE Command1 BY [ô]DataAno[ô][Ô]
Set rsConsComissoes = .Execute
End With
With DataReport1
Set .DataSource = rsConsComissoes
.DataMember = [Ô][Ô]
.Refresh
.Show
End With
Boa Tarde
Como não conseguia resolver o problema, mesmo com a grande ajuda do ROBIO, abandonei o ssunto por um tempo.
Agora retornei a ele e resolvi da seguinte forma, complementando a ajuda do amigo Robio.
Private Sub RelatAnoMes() [ô]relatório com SHAPE por Ano/mês das vendas e serviço
Dim cnn2 As New ADODB.Connection [ô]conexão
Dim cnnComando As New ADODB.Command [ô]command
Dim rsConsComissoes As ADODB.Recordset [ô]recordset
cnnCetecInfServiços2.Open [Ô]Provider=MSDATASHAPE; DATA Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
[Ô]Data Source=[Ô] & App.Path & [Ô]\CetecInfServiços.mdb;[Ô] & _
[Ô]Jet OLEDB:Database Password=8; Persist Security Info=False;[Ô]
With cnnComando
.ActiveConnection = cnn2
.CommandType = adCmdText
.CommandText = [Ô]SHAPE {SELECT Cons_Comissoes3.* FROM Cons_Comissoes3} [Ô] & _
[Ô]AS Command1 COMPUTE Command1 BY [ô]DataAno[ô][Ô]
Set rsConsComissoes = .Execute
End With
With rptdinamicoCom2
Set .DataSource = rsConsComissoes
.DataMember = [Ô][Ô]
.Sections([Ô]Section1[Ô]).Controls.item(1).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(2).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(3).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(4).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(5).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(6).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(7).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(8).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(9).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(10).DataMember = [Ô]Command1[Ô]
.Refresh
.Show
End With
End Sub
Não sei se tá certo mas funcionou como eu queria.
Agradeço a ajuda.
Nereu
Como não conseguia resolver o problema, mesmo com a grande ajuda do ROBIO, abandonei o ssunto por um tempo.
Agora retornei a ele e resolvi da seguinte forma, complementando a ajuda do amigo Robio.
Private Sub RelatAnoMes() [ô]relatório com SHAPE por Ano/mês das vendas e serviço
Dim cnn2 As New ADODB.Connection [ô]conexão
Dim cnnComando As New ADODB.Command [ô]command
Dim rsConsComissoes As ADODB.Recordset [ô]recordset
cnnCetecInfServiços2.Open [Ô]Provider=MSDATASHAPE; DATA Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
[Ô]Data Source=[Ô] & App.Path & [Ô]\CetecInfServiços.mdb;[Ô] & _
[Ô]Jet OLEDB:Database Password=8; Persist Security Info=False;[Ô]
With cnnComando
.ActiveConnection = cnn2
.CommandType = adCmdText
.CommandText = [Ô]SHAPE {SELECT Cons_Comissoes3.* FROM Cons_Comissoes3} [Ô] & _
[Ô]AS Command1 COMPUTE Command1 BY [ô]DataAno[ô][Ô]
Set rsConsComissoes = .Execute
End With
With rptdinamicoCom2
Set .DataSource = rsConsComissoes
.DataMember = [Ô][Ô]
.Sections([Ô]Section1[Ô]).Controls.item(1).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(2).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(3).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(4).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(5).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(6).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(7).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(8).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(9).DataMember = [Ô]Command1[Ô]
.Sections([Ô]Section1[Ô]).Controls.item(10).DataMember = [Ô]Command1[Ô]
.Refresh
.Show
End With
End Sub
Não sei se tá certo mas funcionou como eu queria.
Agradeço a ajuda.
Nereu
Tópico encerrado , respostas não são mais permitidas