none
Crystal e DataSet RRS feed

  • Pergunta

  • pessoal sera q alguem me ajuda nessa?

    criei um um relatorio em crystal para movimentacoes financeiras. porem eu preciso fazer o seguinte:

    1º-pegar o saldo das movimentacoes anteriores em grupos de contas atraves de um group by (ate aki ta indo td certo)
    2º-jogar esse saldo com o texto "saldo anterior" no dataset
    3º-no crystal, juntar esse (saldo anterior e o valor) com as movimentacoes do periodo desejado pelo cliente.

    como eu faco isso? alguem pode me ajudar? obrigado a todos!

    terça-feira, 27 de maio de 2008 17:44

Respostas

  • bom, pessoal, consegui fazer o meu relatório. bom, quem precisar tá aki, vejam:

    bom, o relatorio em crystal foi criado com base nas colunas existentes no dataset.
    primeiro, um comando SQL group by somando conta por conta até um dia antes do solicitado pelo usuário e depois a relacao das movimentações a partir da data solicita pelo mesmo. preenchemos o dataset e o dataset joga para o relatório crystal.



            Dim COMMAND As New OleDb.OleDbCommand
            Dim TRelatorioMBancario As New RELATORIOMBANCARIO
            Dim sql As String
            Dim RowNew As DataRow

            With frmRelatorio
                If .optTODOS.Checked = True Then
                    sql = "SELECT BANCO, SUM(VALOR) AS SALDOANTERIOR FROM MOVIMENTACAO_BANCO WHERE DATA<CDATE('" & .dtaINICIO.Text & "') GROUP BY BANCO ORDER BY BANCO"
                Else
                    sql = "SELECT BANCO, SUM(VALOR) AS SALDOANTERIOR FROM MOVIMENTACAO_BANCO WHERE DATA<CDATE('" & .dtaINICIO.Text & "' AND BANCO=" & RelacaoTabelas(2, "BANCOS", "NOME", frmRelatorio.cmbCONTA.Text, "CODIGO") & " GROUP BY BANCO ORDER BY BANCO"
                End If
            End With

            Try
                COMMAND = CONNECTION.CreateCommand
                COMMAND.CommandText = (sql)
                dr = COMMAND.ExecuteReader

                Dim DSextrato As New DataSet
                DSextrato.Tables(0).Rows.Clear()
                If dr.HasRows = True Then
                    While dr.Read
                        RowNew = DSextrato.Tables(0).NewRow
                        RowNew("Ordem") = 0
                        RowNew("Banco") = dr.Item("BANCO").ToString
                        RowNew("Nomebanco") = RelacaoTabelas(0, "BANCOS", "NOME", dr.Item("BANCO").ToString, "")
                        RowNew("Conta") = RelacaoTabelas(0, "BANCOS", "NCONTA", dr.Item("BANCO").ToString, "")
                        RowNew("Historico") = "SALDO DAS MOVIMENTAÇÕES ANTERIORES"
                        RowNew("Valor") = dr.Item("SALDOANTERIOR").ToString
                        DSextrato.Tables(0).Rows.Add(RowNew)
                    End While
                End If
                COMMAND.Dispose()

                COMMAND = CONNECTION.CreateCommand
                COMMAND.CommandText = "SELECT * FROM MOVIMENTACAO_BANCO WHERE DATA>=CDATE('" & frmRelatorio.dtaINICIO.Text & "')"
                dr = COMMAND.ExecuteReader
                If dr.HasRows = True Then
                    While dr.Read
                        RowNew = DSextrato.Tables(0).NewRow
                        RowNew("Ordem") = 1
                        RowNew("Data") = dr.Item("DATA").ToString
                        RowNew("Banco") = dr.Item("BANCO").ToString
                        RowNew("Historico") = dr.Item("HISTORICO").ToString
                        RowNew("Valor") = dr.Item("VALOR").ToString
                        DSextrato.Tables(0).Rows.Add(RowNew)
                    End While
                End If
                COMMAND.Dispose()

                TRelatorioMBancario.SetDataSource(DSextrato)
                RELMOVIMENTOBANCARIO.Show()
                RELMOVIMENTOBANCARIO.CrystalReportViewer1.ReportSource = TRelatorioMBancario
                COMMAND.Dispose()
            Catch ex As Exception
                ERRO()
            End Try

    obrigado a todos!

     

    quarta-feira, 4 de junho de 2008 00:46

Todas as Respostas

  • fgoncalves,

     

    3º-no crystal, juntar esse (saldo anterior e o valor) com as movimentacoes do periodo desejado pelo cliente.

    como eu faco isso?

     

    Neste caso vc pode criar uma fórmula e somar esses valores.

     

    Como fazer:

     

    1 - No menu Field Explorer, clique com o botão da direita no item Formula Field, selecione a opção New, defina o nome da fóruma na janela Formula Name (por exemplo SaldoCorrente) e clique no botão Use Editor.

     

    2 - Na janela de Fórmula Editor, selecione os dados do Dataset na primeira treeview a esquerda e selecione os campos da fórmula.

     

    Exemplo:

    Code Snippet
    {MovimentacoesFinanceiras.SaldoAnterior}+{MovimentacoesFinanceiras.Valor}

     

     

    Para verificar se existe alguma erro na fórmula, clique no botão (x-2 v) e caso não tenha nenhum erro clique no botão Save and Close

     

    Pronto! basta arrastar esse novo campo para o relatório para que o mesmo seja exibido.

     


    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quinta-feira, 29 de maio de 2008 12:08
  •  

    eh, amigo, eu até tentei fazer aki, mas acho que dessa forma num vai dar certo para o que eu quero fazer ñ.

     

    veja:

     

    eu preciso de um relatorio como se fosse um extrato de saldo bancário, entende?

     

    da seguinte forma: o cliente seleciona uma data x como início da pesquisa, ex:

     

    ele quer um relatorio do movimento a partir do dia 1 de maio,

     

    então o relatorio virá com um saldo no topo de todas as movimentações até o dia 30 de abril + as movimentações desde 1 de maio conforme o solicitado e por fim a totalização geral.

     

    da forma como vc colocou num vai dar certo ñ, ele ta somando tudo e ñ me dá um saldo anterior.

     

    espero q tenha sido mais claro agr. obrigado pela ajuda.

    sexta-feira, 30 de maio de 2008 01:17
  • fgoncalves,

     

    A solução está no SQL a ser montado para exibir os dados do relatório.

    Minha sugestão: (Um exemplo para montar os dados no próprio banco de dados):

     

    Code Snippet

    create table ContaCorrente(

    data datetime

    ,conta varchar(20)

    ,valor numeric(10,2))

     

    insert ContaCorrente(data, conta, valor) values ('20081005','MSDN',1000)

    insert ContaCorrente(data, conta, valor) values ('20081005','MSDN',-500)

    insert ContaCorrente(data, conta, valor) values ('20081005','MSDN',-200)

    insert ContaCorrente(data, conta, valor) values ('20081006','MSDN',500)

    insert ContaCorrente(data, conta, valor) values ('20081007','MSDN',400)

    insert ContaCorrente(data, conta, valor) values ('20081008','MSDN',-50)

    insert ContaCorrente(data, conta, valor) values ('20081009','MSDN',100.25)

     

    select corrente.conta,

    corrente.data,

    sum(corrente.valor) as valor_do_dia,

    (select sum(old.valor)

    from ContaCorrente old

    where old.data <= Dateadd(DAY, -1, corrente.data)

    and old.conta = corrente.conta) as valor_do_dia_anterior

    from ContaCorrente corrente

    group by corrente.conta,

    corrente.data

     

     

    Resultado:

    Code Snippet

    Conta  Data                  valor_dia valor_dia_anterior

    MSDN 2008-10-05  300.00 NULL
    MSDN 2008-10-06  500.00 300.00
    MSDN 2008-10-07  400.00 800.00
    MSDN 2008-10-08  -50.00 1200.00
    MSDN 2008-10-09  100.25 1150.00

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    domingo, 1 de junho de 2008 14:14
  • pois eh, amigo, eu uso o access

     

    será q tem algum código? e essa formula de saldo anterior no próprio banco de dados num serve pra mim ñ pq tem q ser a partir de uma data q o usuário selecionar e ñ simplesmente até a data do dia anterior.

    domingo, 1 de junho de 2008 15:59
  • bom, pessoal, consegui fazer o meu relatório. bom, quem precisar tá aki, vejam:

    bom, o relatorio em crystal foi criado com base nas colunas existentes no dataset.
    primeiro, um comando SQL group by somando conta por conta até um dia antes do solicitado pelo usuário e depois a relacao das movimentações a partir da data solicita pelo mesmo. preenchemos o dataset e o dataset joga para o relatório crystal.



            Dim COMMAND As New OleDb.OleDbCommand
            Dim TRelatorioMBancario As New RELATORIOMBANCARIO
            Dim sql As String
            Dim RowNew As DataRow

            With frmRelatorio
                If .optTODOS.Checked = True Then
                    sql = "SELECT BANCO, SUM(VALOR) AS SALDOANTERIOR FROM MOVIMENTACAO_BANCO WHERE DATA<CDATE('" & .dtaINICIO.Text & "') GROUP BY BANCO ORDER BY BANCO"
                Else
                    sql = "SELECT BANCO, SUM(VALOR) AS SALDOANTERIOR FROM MOVIMENTACAO_BANCO WHERE DATA<CDATE('" & .dtaINICIO.Text & "' AND BANCO=" & RelacaoTabelas(2, "BANCOS", "NOME", frmRelatorio.cmbCONTA.Text, "CODIGO") & " GROUP BY BANCO ORDER BY BANCO"
                End If
            End With

            Try
                COMMAND = CONNECTION.CreateCommand
                COMMAND.CommandText = (sql)
                dr = COMMAND.ExecuteReader

                Dim DSextrato As New DataSet
                DSextrato.Tables(0).Rows.Clear()
                If dr.HasRows = True Then
                    While dr.Read
                        RowNew = DSextrato.Tables(0).NewRow
                        RowNew("Ordem") = 0
                        RowNew("Banco") = dr.Item("BANCO").ToString
                        RowNew("Nomebanco") = RelacaoTabelas(0, "BANCOS", "NOME", dr.Item("BANCO").ToString, "")
                        RowNew("Conta") = RelacaoTabelas(0, "BANCOS", "NCONTA", dr.Item("BANCO").ToString, "")
                        RowNew("Historico") = "SALDO DAS MOVIMENTAÇÕES ANTERIORES"
                        RowNew("Valor") = dr.Item("SALDOANTERIOR").ToString
                        DSextrato.Tables(0).Rows.Add(RowNew)
                    End While
                End If
                COMMAND.Dispose()

                COMMAND = CONNECTION.CreateCommand
                COMMAND.CommandText = "SELECT * FROM MOVIMENTACAO_BANCO WHERE DATA>=CDATE('" & frmRelatorio.dtaINICIO.Text & "')"
                dr = COMMAND.ExecuteReader
                If dr.HasRows = True Then
                    While dr.Read
                        RowNew = DSextrato.Tables(0).NewRow
                        RowNew("Ordem") = 1
                        RowNew("Data") = dr.Item("DATA").ToString
                        RowNew("Banco") = dr.Item("BANCO").ToString
                        RowNew("Historico") = dr.Item("HISTORICO").ToString
                        RowNew("Valor") = dr.Item("VALOR").ToString
                        DSextrato.Tables(0).Rows.Add(RowNew)
                    End While
                End If
                COMMAND.Dispose()

                TRelatorioMBancario.SetDataSource(DSextrato)
                RELMOVIMENTOBANCARIO.Show()
                RELMOVIMENTOBANCARIO.CrystalReportViewer1.ReportSource = TRelatorioMBancario
                COMMAND.Dispose()
            Catch ex As Exception
                ERRO()
            End Try

    obrigado a todos!

     

    quarta-feira, 4 de junho de 2008 00:46
  • fgoncalves,

     

    Eu estava dando uma olhada no fórum de SQL-Server e achei esse link

    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=3443724&SiteID=21

     

     

    Valeu!.

    sábado, 7 de junho de 2008 14:32