none
If na formula do Crystal Report RRS feed

  • Pergunta

  • Boa tarde,

    Com Crystal Report não tenho la muito conhecimento,

    estou com um problema com uma condição.

    if {?IdFUNCIONARIO} > 0 then
    {FUNCIONARIOS.IDFUNCIONARIO} = {?IdFUNCIONARIO}

    mas ele nem testa a condição, já executando a segunda linha

    no Crystal não tem tipo um EndIf , { , Exit If?

    como fecha um bloco de if?

    Pois o que está acontecendo comigo é que ele executa de toda maneira a segunda linha

    já tentei colocar parentese ("()"), ponto e vírgula (,) e nada.

    Alguém poderia me auxiliar onde estou errando.

    T+

    quinta-feira, 16 de fevereiro de 2012 18:16

Respostas

  • Você quer exatamente o que com esse parâmetro que está sendo criado?

    Assim se o parâmetro {?IdFUNCIONARIO} não for obrigatório você poderia fazer teste com essa condição.

    (if trim ({?IdFUNCIONARIO}) = "" then true
       else ({?IdFUNCIONARIO})= ({FUNCIONARIOS.IDFUNCIONARIO}) )
    // esse diz que If  o usuário deixar a informação do parametro {?IdFUNCIONARIO} em branco ele vai trazer todas as informaçoes do {?IdFUNCIONARIO} else se o usuário digitar no parametro uma informação. o relatório trará apenas as informações relacionadas ao parametro que foi digitado.

    Agora se você quiser trazer informaçoes em um intervalo de {?IdFUNCIONARIO}   creio que você terá que fazer dois parâmetros de {?IdFUNCIONARIO}  sendo que um inicial e ou final pra que ele possa receber os valores e trazer as informações solicitadas.

    Espero que possa ter te ajudado.

     Também estou aprendendo o crystal ...

    • Marcado como Resposta Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:34
    sexta-feira, 17 de fevereiro de 2012 13:27
  • As respostas acima são válidas, mas apenas para complementar: os dados da sua tabela são read only no Crystal. Ou seja, a expressão:

    "{FUNCIONARIOS.IDFUNCIONARIO} = {?IdFUNCIONARIO}" não será válida.


    Leonardo Borges 'Xis'
    "Mas a persistência é o que leva a perfeição."
    Se a resposta for útil, marque-a. Poderá ser útil para outros desenvolvedores.

    • Marcado como Resposta Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:34
    sexta-feira, 17 de fevereiro de 2012 14:08
  • Opa, 

    consegui,

    Leonardo, estou usando um select interno,

    dai eu passei os parametros conforme o trecho código em VB net.

    Criei um método para guardar os paramentros: (independentes de quantos são) onde está o crystalreportviewer:

     Public Sub Parametros(ByVal NomeParametro As String, ByVal ValorParametro As String)
            Dim paramField As ParameterField = New ParameterField()
            Dim paramDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
    
            paramField.Name = NomeParametro
            paramDiscreteValue.Value = ValorParametro
            paramField.CurrentValues.Add(paramDiscreteValue)
            ParamFields.Add(paramField)
        End Sub


    Chamei o relatório ainda no crystalreportviewer:

     If File.Exists(CaminhoRelatorio) Then
                    Relatorio.Load(CaminhoRelatorio)
    
    
                    If ParamFields.Count > 0 Then
                        CrpVisualizar.ParameterFieldInfo = ParamFields
                    End If
    
                    With Relatorio.DataSourceConnections(0)
                        Dim Servidor As String
                        Dim database As String
    
                        Servidor = ".\SQLEXPRESS" 		'NOME DO SERVIDOR
                        database = "BANCODEDADOS"	'NOME DO BANCO
                        .SetConnection(Servidor, database, True)
                    End With
    
                    CrpVisualizar.ReportSource = Relatorio
                Else
                '
                End If

     e la no Crystal report 

    usei a opção da carine.couto

    IF{?IdFuncionario} = 0 Then
    TRUE
    ELSE
    {FUNCIONARIOS.IdFuncionario} = {?IdFuncionario}

    Depois lá no forms q eu chamo o relatório

     Dim Vis As New Frm_Visualizar_Relatorios(NomeRelatorio)
    
            Vis.Parametros("IDCONSULTOR", 1)
            Vis.Parametros("IDCIDADE", 1)
    
            Vis.Show()

    Assim eu posso usar o meu crystalreportviewer para varios relatórios e passar quantos parametros forem necessários sem mecher na sua estrutura.

    So achei estranho ter que fazer o IF dessa forma no Crystal Report.

    Por que ele não aceita da forma normal.

    Abrç....

    Obrigado a todos 

    T+


    • Marcado como Resposta Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:34
    • Editado Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:37 Completando
    sexta-feira, 17 de fevereiro de 2012 17:33

Todas as Respostas

  • Você quer exatamente o que com esse parâmetro que está sendo criado?

    Assim se o parâmetro {?IdFUNCIONARIO} não for obrigatório você poderia fazer teste com essa condição.

    (if trim ({?IdFUNCIONARIO}) = "" then true
       else ({?IdFUNCIONARIO})= ({FUNCIONARIOS.IDFUNCIONARIO}) )
    // esse diz que If  o usuário deixar a informação do parametro {?IdFUNCIONARIO} em branco ele vai trazer todas as informaçoes do {?IdFUNCIONARIO} else se o usuário digitar no parametro uma informação. o relatório trará apenas as informações relacionadas ao parametro que foi digitado.

    Agora se você quiser trazer informaçoes em um intervalo de {?IdFUNCIONARIO}   creio que você terá que fazer dois parâmetros de {?IdFUNCIONARIO}  sendo que um inicial e ou final pra que ele possa receber os valores e trazer as informações solicitadas.

    Espero que possa ter te ajudado.

     Também estou aprendendo o crystal ...

    • Marcado como Resposta Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:34
    sexta-feira, 17 de fevereiro de 2012 13:27
  • Fala manolo,

    Cara, uso sempre assim quando quero estabelecer condição "se" no Crystal:

    IIF
    (Month (CurrentDate) = Month ({command.NASC}),
    "FELIZ ANIVERSÁRIO",
    ""
    )

    Tipo, não se chama IF e sim IIF... nesse caso, eu uso em holerites, fazendo com que, na hora da emissão do holerite, verifique se o mês atual do sistema, é o mês do aniversário do cabra cadastrado no sistema. Se for, "FELIZ ANIVERSÁRIO", se não for, "".

    IIF (sua_condição, true, false)

    No seu caso ficaria:

    IIF ({?IdFUNCIONARIO} > 0, true, false)

    Daí você coloca o resultado que quer para True e False... !!!

    Espero ter ajudado... marque como resposta, caso tenha sido útil!!! ^^

    sexta-feira, 17 de fevereiro de 2012 14:04
  • As respostas acima são válidas, mas apenas para complementar: os dados da sua tabela são read only no Crystal. Ou seja, a expressão:

    "{FUNCIONARIOS.IDFUNCIONARIO} = {?IdFUNCIONARIO}" não será válida.


    Leonardo Borges 'Xis'
    "Mas a persistência é o que leva a perfeição."
    Se a resposta for útil, marque-a. Poderá ser útil para outros desenvolvedores.

    • Marcado como Resposta Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:34
    sexta-feira, 17 de fevereiro de 2012 14:08
  • Olá pessoal,

    Vou testar as proposta sugeridas por vocês.

    Mas, Leonardo Borges 'Xis' , como posso contornar esse problema?

    Minha intenção era passar por paramentro os valores que irei utilizar nas fórmulas,

    pois não queria colocar fórmulas no código (Visual Studio).

    Então a idéia que tive foi passar os parametros e usá-los no crystal report.

    Obrigado pela atenção de todos

    T+


    sexta-feira, 17 de fevereiro de 2012 14:20
  • Você não pode atribuir um valor a um campo da tabela, mas pode manipular ele para chegar a um resultado final. As fórmulas do Crystal são normalmente para controle de layout, apresentação de valores ou cálculos. Explique melhor o que deseja fazer.

    Leonardo Borges 'Xis'
    "Mas a persistência é o que leva a perfeição."
    Se a resposta for útil, marque-a. Poderá ser útil para outros desenvolvedores.

    sexta-feira, 17 de fevereiro de 2012 14:23
  • Vou explicar:

    eu tenho eu relatório que pode ser filtrado conforme o usuário quiser,

    podendo ser ele por Consultor e/ou Cidade.

    

    o que ocorre é que pra mim filtrar ele eu precisaria ou passar um paramentro ou usar 

    uma formula:

     crpVisualizar.SelectionFormula =  " {T_TABELAEXEMPLO.IDCAMPO EXEMPLO} = " & variavelInt

    Mas eu não queria que isso ficasse no código (usando fórmula).

    Parece que fica muito sujo.

    Então pensei nessa idéia de paramentros, so que não estou conseguindo usar.

     Dim paramField As ParameterField = New ParameterField()
     Dim paramDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
    
     paramField.Name = NomeParametro
     paramDiscreteValue.Value = ValorParametro
     paramField.CurrentValues.Add(paramDiscreteValue)
     ParamFields.Add(paramField)

    e la no Crystal eu fazia o filtro com esses parametros

    igual o que eu estou tentando fazer.

    Teria uma outra opção?

    T+


    sexta-feira, 17 de fevereiro de 2012 15:49
  • Ah entendi Vander! Perfeito, se for nesse esquema de passagem de parâmetro pode! Mas ai você tem que alimentar o parâmetro mesmo (@IdFuncionario) e não o campo da tabela ({FUNCIONARIOS.IdFUNCIONARIO}). A forma como vai ser feito isso vai depender da maneira que está carregando os dados no Crystal.

    Explique como está sendo feito a alimentação do relatório (SELECT feito internamente, passagem de DataTable, DataSet tipado...).


    Leonardo Borges 'Xis'
    "Mas a persistência é o que leva a perfeição."
    Se a resposta for útil, marque-a. Poderá ser útil para outros desenvolvedores.

    sexta-feira, 17 de fevereiro de 2012 16:57
  • Opa, 

    consegui,

    Leonardo, estou usando um select interno,

    dai eu passei os parametros conforme o trecho código em VB net.

    Criei um método para guardar os paramentros: (independentes de quantos são) onde está o crystalreportviewer:

     Public Sub Parametros(ByVal NomeParametro As String, ByVal ValorParametro As String)
            Dim paramField As ParameterField = New ParameterField()
            Dim paramDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
    
            paramField.Name = NomeParametro
            paramDiscreteValue.Value = ValorParametro
            paramField.CurrentValues.Add(paramDiscreteValue)
            ParamFields.Add(paramField)
        End Sub


    Chamei o relatório ainda no crystalreportviewer:

     If File.Exists(CaminhoRelatorio) Then
                    Relatorio.Load(CaminhoRelatorio)
    
    
                    If ParamFields.Count > 0 Then
                        CrpVisualizar.ParameterFieldInfo = ParamFields
                    End If
    
                    With Relatorio.DataSourceConnections(0)
                        Dim Servidor As String
                        Dim database As String
    
                        Servidor = ".\SQLEXPRESS" 		'NOME DO SERVIDOR
                        database = "BANCODEDADOS"	'NOME DO BANCO
                        .SetConnection(Servidor, database, True)
                    End With
    
                    CrpVisualizar.ReportSource = Relatorio
                Else
                '
                End If

     e la no Crystal report 

    usei a opção da carine.couto

    IF{?IdFuncionario} = 0 Then
    TRUE
    ELSE
    {FUNCIONARIOS.IdFuncionario} = {?IdFuncionario}

    Depois lá no forms q eu chamo o relatório

     Dim Vis As New Frm_Visualizar_Relatorios(NomeRelatorio)
    
            Vis.Parametros("IDCONSULTOR", 1)
            Vis.Parametros("IDCIDADE", 1)
    
            Vis.Show()

    Assim eu posso usar o meu crystalreportviewer para varios relatórios e passar quantos parametros forem necessários sem mecher na sua estrutura.

    So achei estranho ter que fazer o IF dessa forma no Crystal Report.

    Por que ele não aceita da forma normal.

    Abrç....

    Obrigado a todos 

    T+


    • Marcado como Resposta Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:34
    • Editado Vanderney Souza sexta-feira, 17 de fevereiro de 2012 17:37 Completando
    sexta-feira, 17 de fevereiro de 2012 17:33