|
|
Postada em 06/07/2004 16:20 hs
ola pessoal, não sei se estão lembrado de mim... ps... não loguei pois esqueci minha senha... e o seguinte, tem um cliente meu que quer migra o sistema dele de VB para Delphi so por que não estou conseguindo fazer o seguinte relatorio de GIRO de MERCADORIA. ele que que digite o codigo do produto e o sistema me de separadamente na mesma folha os tres ultimos entradas e saidas do produto...ex ----------------------------------------------------------------- Produto XXXXXXXX Mes Janeiro Mes Fevereiro Mes Março Entrou 10 78 48 Saiu 7 50 39 ----------------------------------------------------------------- ele me disse que o Deplhi faz isso... Nunca vi esse tipo de relatorio em vb... tem jeito de fazer esse relatorio ? se ajudar quando voce da entrada no produto ou saida ele grava na tabela a quantidade e a data. Grato... Gorram
|
|
|
|
|
|
|
|
Postada em 06/07/2004 16:52 hs
Gorram você esta usando o print, crystal ou outra forma de relatorio...
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|
|
|
|
Postada em 06/07/2004 16:56 hs
uso o crystal que vem no vb 5.. Gorram
|
|
|
|
|
|
Postada em 06/07/2004 16:58 hs
Talvez com a instrução SQL select com a cláusula SUM ou COUNT e ainda o WHERE MONTH(campodata) vc. consegue o qtde. e logo manda imprimir com o PRINT. Esta instrução vai depender da estrutura do seu banco de dados. O Delphi é a mesma coisa que o VB., e se vc. quiser, faça um relatório cheio de FLORZINHA pra ele.
|
|
|
|
|
|
Postada em 06/07/2004 17:06 hs
Bem com o crystal 4.6 é meio complicado se você o 8.0 seria mais facil por que ele proprio pode filtrar este tipo de situação: Bem neste caso tem uma outra solução que seria jogar estes dados para o execel veja este exemplo , aonde tive um mesmo problema antes de adquirir o crystal 8.0 Um exemplo de utilização do método CreateObject para escrever uma planilha de Excel, independente da versão que você tem instalado em seu computador. Dim BancoDeDados As Database Dim x As Integer Dim y As Integer Dim Z As Integer Dim old_soci As String, i As Integer Dim TBSúmula As Recordset Dim tbpontos As Recordset Dim tbauxtemp As Recordset
Set BancoDeDados = OpenDatabase(App.Path & "Tiroalvo.MDB", False) Set TBSúmula = BancoDeDados.OpenRecordset("Súmula", dbOpenSnapshot) Set tbpontos = BancoDeDados.OpenRecordset("Select sum([Total Pontos] ) As Total,sociedade from súmula Where Local = '" & DBCLocal & "'and Categoria = '" & DBCCategoria & "' and Data = #" & Format(DBCData, "mm/dd/yy") & "# group by sociedade order by sum([Total Pontos]) DESC")
If tbpontos.EOF Then 'Não retornou nenhum registro MsgBox "Não há Dados para Visualizar Nesta:" & Chr(13) & "Categoria, Data e Local de Competição", 48, "Tiro Alvo Seta" Else x = 2 ' Local aonde serão inseridos os dados neste caso coluna A linha 2 Z = 15 ' Local aonde serão inseridos os proximos dados se existir uma sociedade diferente nas tabelas Screen.MousePointer = 11 Set oleexcel = CreateObject("excel.application") Set oleworkbook = oleexcel.Workbooks.Open(App.Path & "ouro.xls") ' chama a planilha existente Set oleworksheet = oleexcel.Worksheets("Dados") ' a plan que ira receber os dados DoEvents oleworksheet.Range("a2:p1000").ClearContents ' limpa todas as celulas para receber as novas informações While Not tbpontos.EOF Sociedade_atual = tbpontos("sociedade") Set tbauxtemp = BancoDeDados.OpenRecordset("Select * from súmula where sociedade='" & Sociedade_atual & "'and Local = '" & DBCLocal & "'and Categoria = '" & DBCCategoria & "' and Data = #" & Format(DBCData, "mm/dd/yy") & "# order by [Total Pontos] Desc,[1tiro]desc,[2tiro]desc,[3tiro]desc,[4tiro]desc,[5tiro]desc,[6tiro]desc,[nome]desc") i = 0 Do 'Rotina para mandar para o excel For y = 1 To tbauxtemp.Fields.Count oleworksheet.Cells(x, y) = tbauxtemp.Fields(y - 1) Next y With oleworksheet.Range("A" & x) .Value = tbauxtemp.Fields(0) .Font.Bold = True End With x = x + 1 Z = X2 + 15 'Manda para o Excel os 15 dessa sociedade i = i + 1 tbauxtemp.MoveNext Loop Until i = 15 Or tbauxtemp.EOF 'Acrescentei o tbauxtemp.eof para o caso de so haver 1 registro... Do
'Move até a próxima sociedade tbpontos.MoveNext If tbpontos.EOF Then Exit Do Loop Until Sociedade_atual <> tbpontos("sociedade") Z = Z - i x = x + Z Wend DoEvents tbauxtemp.Close tbpontos.Close Screen.MousePointer = 0 oleexcel.Visible = True Set tbpontos = Nothing Set tbauxtemp = Nothing Set oleexcel = Nothing Set oleworkbook = Nothing Set oleworksheet = Nothing
End If No seu caso são tres no exemplo eu precisava baixar os 15 melhores resultados de cada sociedade. Ai para não ficar a planilha do excel fiz algumas alterações em VBA para transformar o mesmo em uma apresentação tipo do power point , ou resumindo um excel sem as barras de menu.
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|
|
|
|
Postada em 06/07/2004 17:08 hs
Gorram uma outra maneira seria trabalhar com tabelas auxiliares e filtrar a situação antes de passar para o crystal : Segue um exemplo: Me.MousePointer = 11 Dim Rs As Recordset Dim ssql As String 'Zerando a tabela temporária... BancoDeDados.Execute ("delete * from temp") 'limpo a tabela Set Rs = BancoDeDados.OpenRecordset("select distinct(matricula) from [súmula]") While Not Rs.EOF 'Gravo os cinco primeiros registros para cada matrícula ssql = "insert into temp Select TOP 5 matricula,número,nome,categoria,idade,data,pontos,pontoscategoria,posição,Patrocinio,tempo from [súmula] where matricula='" & Rs!Matricula & "'and Matricula <='" & Matricula.Text & "' and Idade > '" & txtidade.Text & "'and Categoria = '" & DbcCAtegoria.Text & "'and Data >= #" & Format(DataInicial, "mm/dd/yyyy") & "# and data<= #" & Format(DataFinal, "mm/dd/yyyy") & "# order by pontos desc,data asc" BancoDeDados.Execute ssql Rs.MoveNext Wend Rs.Close Set Rs = Nothing Dim lFormulaF As String 'Captura data inicial lFormulaF = "({temp.Data} >= DATE(" & Mid$(DataInicial.Text, 7, 4) & "," & Mid$(DataInicial.Text, 4, 2) & "," & Mid$(DataInicial.Text, 1, 2) & "))" 'Captura data final lFormulaF = lFormulaF & " AND ({temp.Data} <= DATE(" & Mid$(DataFinal.Text, 7, 4) & "," & Mid$(DataFinal.Text, 4, 2) & "," & Mid$(DataFinal.Text, 1, 2) & "))" lFormulaF = lFormulaF & " AND {temp.Categoria} = '" & DbcCAtegoria.Text & "'" lFormulaF = lFormulaF & " And {temp.Idade} > '" & txtidade.Text & "'" lFormulaF = lFormulaF & " AND {temp.Matricula} <='" & Matricula.Text & "'"
CRP.SelectionFormula = lFormulaF CRP.ReportFileName = App.Path & "CampeonatoGeral.rpt" CRP.DataFiles(0) = App.Path & "atletismo.mdb" CRP.RetrieveDataFiles CRP.WindowState = crptMaximized CRP.Destination = crptToWindow CRP.Action = 1 Me.MousePointer = 0
"O pior inimigo que você poderá encontrar será sempre você mesmo."
|
|
|
|
|