DATA REPORT

NEREU1301 15/03/2010 22:04:12
#337047
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
ROBIU 16/03/2010 05:38:14
#337048
Resposta escolhida
NEREU1301 16/03/2010 08:30:18
#337052
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
NEREU1301 16/03/2010 11:16:19
#337072
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.
ROBIU 20/03/2010 06:59:36
#337478
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
NEREU1301 04/05/2010 16:15:23
#340928
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
Tópico encerrado , respostas não são mais permitidas