Olá pessoal, venho a partir de hoje tentar iniciar uma série de dicas sobre o crystal, e para iniciar irei mostrar uma forma bem bacana de deixar o agrupamento de seus relatórios dinâmicos para que o usuário possa ter mais possibilidades de agrupamento.

Para exemplificar essa dica, irei fazer uma consulta que me retorna as notas fiscais de entrada.


SELECT
  T0.DocEntry,
  T0.DocNum,
  T0.CardCode,
  T0.CardName,
  T2.GroupName,
  T0.DocDate,
  T0.DocTotal
FROM
  OPCH T0
  INNER JOIN OCRD T1 ON T1.CardCode = T0.CardCode
  INNER JOIN OCRG T2 ON T2.GroupCode = T1.GroupCode

No meu relatório quero dar a possibilidade do usuário poder ver as notas agrupadas por Data do documento, Nome do Fornecedor e Grupo do Fornecedor.

Para isso primeiramente vamos criar o filtro para o usuário:

Vá até em campos de parâmetro -> Clique com o botão direito e selecione a opção Novo…

/wp-content/uploads/2016/05/img1_952303.png

Coloque o nome de Agrup@ para o campo, crie as opções de agrupamento que o usuário poderá selecionar e especifique um texto de descrição que será exibido ao usuário. Veja as configurações definidas na imagem abaixo.

/wp-content/uploads/2016/05/img2_952437.png

Agora vamos criar uma formula que define qual campo será usado para agrupar, de acordo com a opção selecionada pelo usuário.

Vá até em campos de formula -> Clique com o botão direito e selecione a opção Novo…

/wp-content/uploads/2016/05/img3_952438.png

Defina o nome como “agrupamento”. A sua formula será a seguinte :


if {?Agrup@} = '0' then
  {Comando.CardName}
else if {?Agrup@} = '1' then
  CStr({Comando.DocDate})
else if {?Agrup@} = '2' then
  {Comando.GroupName}

Nessa formula dizemos que de acordo com a opção selecionada pelo usuário, essa formula retornará um campo diferente. Lembrando que os valores utilizados 0, 1, 2 foram definidos lá no filtro de usuário.

img4.PNG

Agora vamos criar o nosso agrupamento efetivamente.

Vá até Inserir -> Grupo

/wp-content/uploads/2016/05/img5_952443.png

Escolha como agrupamento a formula que criamos no passo anterior.

/wp-content/uploads/2016/05/img6_952444.png

E pronto, está formado nosso agrupador dinâmico.

/wp-content/uploads/2016/05/img7_952448.png

/wp-content/uploads/2016/05/img10_952449.png

/wp-content/uploads/2016/05/img8_952447.png

/wp-content/uploads/2016/05/img9_952450.png

Espero que tenham gostado.

Não esqueçam de deixar seu feedback, dúvidas ou sugestões.


Atenciosamente,

Diego Lother


View Diego Lother's profile on LinkedIn

To report this post you need to login first.

8 Comments

You must be Logged on to comment or reply to a post.

    1. DIEGO LOTHER Post author

      Olá Rudá,

      Obrigado pelo feedback. Referente a sua dúvida, é possível sim. Uma abordagem que atende a sua necessidade é a seguinte:

      Na variável Agrupamento você pode substituir o seguinte comando

      CStr({Comando.DocDate})

      por

      ToText({Comando.DocDate}, “dd/MM/yyyy”)


      Atenciosamente,

      Diego Lother


      View Diego Lother's profile on LinkedIn

      (0) 
  1. José Silva

    Prezado Diego, boa tarde!

    Modificando o parametro e incluindo o “CardCode”, (pois o usuario poderia executar este relatório para um PN específico) meu relatório no SAP agora permite preencher o parametro CardCode:

    Porém quando deixo vazio o CardCode, o sistema retorna a seguinte mensagem de erro:

    O Parametro [Código do PN] é Obrigatório.

    Pergunta: Como eu poderia retirar esta obrigatoriedade?

     

    Segue abaixo o select pronto:

    SELECT
    T0.DocEntry
    , T0.DocNum
    , T0.CardCode
    , T0.CardName
    , T2.GroupName
    , T0.DocDate
    , T0.DocTotal
    , T0.Serial [Nº NF]
    FROM OPCH T0
    INNER JOIN OCRD T1 ON T1.CardCode = T0.CardCode
    INNER JOIN OCRG T2 ON T2.GroupCode = T1.GroupCode
    WHERE T0.CANCELED = ‘N’
    AND T0.CardCode = ‘{?%CardCode}’ OR ‘{?%CardCode}’ = ”
    AND T0.DocDate >= {?0-DataDe} AND T0.DocDate <= {?1-DataAte}
    ORDER BY T0.DocNum ASC

    (0) 
    1. DIEGO LOTHER Post author

      Olá José,

      Até onde tenho conhecimento, todos os parâmetros solicitados no Crystal são de preenchimento obrigatório.

      Neste seu caso por exemplo, você poderia criar uma caixa de seleção, onde liste todos os PNs do banco e que você inclua uma opção Todos no inicio dessa lista.

      Para criação de filtros mais elaborados no crystal você pode ver este documento:

      https://www.vision33.com/media/519875/how-to-work-with-crystal-reports-88.pdf

      Esta um pouco desatualizado, mas ainda é válido. Pode verificar a partir da página 19.

      Att,

      Diego Lother

       

      (0) 
      1. José Silva

        Olá Diego,

        Verifiquei a documentação, conseguí resolver a questão da forma que voce mencionou.

        Obrigado pela  atenção

        Att.

        José Silva

         

        (0) 

Leave a Reply