La source de données transmise à un rapport a une propriété Serial, je dois écrire un champ dans ce format pour chaque section de détails: [Serial] from [Top serial] J'ai écrit cette formule pour la meilleure série:

Maximum({VW_Sizes.Serial})

Mais il obtient la série actuelle, donc au lieu de: 1 sur 2, 2 sur 2 Il obtient 1 sur 1, 2 sur 2.

0
mshwf 23 mai 2018 à 15:30

3 réponses

Meilleure réponse

Le problème que vous rencontrez est que lorsque chaque itération de la section Détails s'imprime dans le rapport, il ne connaît que la valeur Max pour SERIAL pour les lignes déjà imprimées dans le rapport.

Je préfère utiliser un champ d'expression SQL pour contourner ce problème. Cela vous permet d'utiliser une requête SQL pour récupérer la valeur maximale de SERIAL pour les données groupées avant que toutes les lignes ne soient imprimées dans le rapport.

Quelque chose comme ça fonctionne généralement pour moi.

(
SELECT MAX("ORD_DETAIL"."ORD_DET_SEQNO") 
FROM ORD_DETAIL 
WHERE "ORD_DETAIL"."ORDERS_ID" = "ORDERS"."ID"
)

Dans mon exemple, j'ai deux tables, ORDERS et ORD_DETAIL. ORD_DETAIL.ORD_DET_SEQNO contient les numéros de séquence des lignes de détails de la commande. Mes données sont regroupées sur ORDERS.ID pour parcourir chaque commande et le champ de formule suivant imprimerait une sortie pour chaque ligne de détail qui indique sa séquence par rapport à la valeur maximale de tous les numéros de séquence pour cette commande.

ToText({ORD_DETAIL.ORD_DET_SEQNO}) + " of " + ToText({%Max});

Dans cette formule, %Max est le nom du champ d'expression SQL dans l'exemple ci-dessus.

Si vous n'avez aucun point dans vos données où le numéro de série est réinitialisé, votre champ d'expression SQL ressemblera à ceci.

(
SELECT MAX(Serial)
FROM VW_Sizes
)

Si vous avez besoin d'une réinitialisation à certains points, ajoutez simplement une clause WHERE qui fait référence à la table.column utilisée pour regrouper un ensemble de valeurs SERIAL.

0
R. McMillan 23 mai 2018 à 14:09

Je pense qu'il existe un moyen plus simple de faire quelque chose comme ça, à partir du rapport, vous devez créer un champ en cours d'exécution à partir de l'explorateur de champ:

  • définir le nom du champ, par ex. (max_Serial)

  • sélectionnez votre champ pour résumer.

  • après avoir sélectionné votre rapport de champ Crystal fournit plusieurs types de résumé selon le type de données de champ.

  • sélectionnez le maximum et réinitialisez en fonction de vos besoins, par ex. après chaque groupe.

-1
Abdulrahman_88 23 mai 2018 à 20:29

Vous pouvez concaténer cette variable dans un champ de formule dans votre section de détail avec un contenu à ce sujet:

{VW_Sizes.Serial} & " from " & Maximum ({VW_Sizes.Serial})

Sinon, vous ne pouvez placer qu'un champ récapitulatif avec la valeur maximale en dehors de la section de détail, par exemple dans Grand total (pied de page du rapport) .

0
Manel 23 mai 2018 à 14:12