Relatórios Crystal – Dicas e Truques: Criando agrupador dinâmico.
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…
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.
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…
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.
Agora vamos criar o nosso agrupamento efetivamente.
Vá até Inserir -> Grupo
Escolha como agrupamento a formula que criamos no passo anterior.
E pronto, está formado nosso agrupador dinâmico.
Espero que tenham gostado.
Não esqueçam de deixar seu feedback, dúvidas ou sugestões.
Atenciosamente,
Diego Lother
Top Diego!! Parabéns!
Obrigado Yuri.
Atenciosamente,
Diego Lother
Muito Obrigado pelo Compartilhamento!
Muito bom cara! Existe algum jeito de tirar a hora quando o agrupamento (group header) for DateTime?
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
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
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
Olá Diego,
Verifiquei a documentação, conseguí resolver a questão da forma que voce mencionou.
Obrigado pela atenção
Att.
José Silva
Muito bom Diego, me ajudou bastante, obrigadão.
Interessantíssimo!