Aujourd'hui, j'aimerais partager avec vous une petite astuce pour utiliser les styles de ligne avec des valeurs agrégées dans les demandes de renseignements génériques. La façon de procéder n'est pas vraiment évidente ou intuitive. Après un examen rapide, il semble que le système ne fournisse pas du tout cette fonctionnalité.
Prenons un scénario pour l'illustrer clairement. Supposons que nous ayons besoin de créer une IG qui fournira le temps facturable et non facturable passé sur un projet spécifique par jour et qui, en fonction de la productivité (100*[temps facturable]/8, en supposant que nous travaillons 8 heures par jour), mettra en évidence les lignes de différentes couleurs (vert - productivité>=70, orange - productivité>=40 ou rouge).
Commençons par construire l'IG en ajoutant simplement une table PMTimeActivity et PMProject.
Fournissons maintenant les relations nécessaires. Nous allons le faire avec une jointure interne sur l'ID du projet comme suit :
Nous devons ensuite ajouter un paramètre pour le projet CD afin de réduire l'ensemble des résultats pour les rendre plus lisibles.
Ensuite, nous ajoutons un regroupement par ID de projet pour l'instant. Acumatica nous permet d'obtenir le résultat directement à partir de la page Generic Inquiry en cliquant sur le bouton Preview (en utilisant l'icône "œil" sur le panneau de droite). Nous pouvons maintenant voir le résultat sans quitter la page.
L'étape suivante consiste à modifier le regroupement pour qu'il se fasse également par date.
Personnellement, je n'aime pas la façon dont le regroupement fonctionne avec les dates, c'est pourquoi j'utilise la formule suivante pour le regroupement par Jour=Année([PMTimeActivity.Date])*10000 +[PMTimeActivity.Date_Month]*100+[PMTimeActivity.Date_Day], que vous pouvez voir en rouge ci-dessous.
ATTENTION: Cette formule peut ne pas fonctionner correctement en raison du décalage horaire. Acumatica conserve les dates en UTC.
Nous allons maintenant ajouter des styles de ligne. La formule que nous allons utiliser est la suivante :
=IIF(100 * CDec([PMTimeActivity.TimeBillable]/60) / 8>=70, 'bon', IIF(100 * CDec([PMTimeActivity.TimeBillable]/60) / 8>=40, 'orange40', 'mauvais'))
Comme vous pouvez le voir dans la capture d'écran ci-dessus, la mise en évidence n'a pas très bien fonctionné. La première ligne est surlignée en rouge, mais la productivité est >=40, ce qui signifie qu'elle devrait être orange.
Le problème ici est dû au fait que la formule que nous avons fournie fonctionne sans regroupement et que le calcul prend la première activité de temps pour ce groupe, ce qui, dans ce cas, se traduit par 0 (zéro) temps facturable dans la deuxième ligne de la liste des activités de temps des employés.
Pour résoudre ce problème, nous devons avoir un moyen d'indiquer au style de ligne que nous voulons que la valeur soit prise après le regroupement lui-même, bien qu'il n'y ait pas de moyen documenté pour le faire à l'heure actuelle. Ce n'est cependant pas une façon intentionnellement cachée de le faire.
Il suffit d'utiliser la formule suivante :
=IIF(PMTimeActivity_FormulaA4A7ACEFFCC1444DA018CE78DD1BFCA3>=70, 'bon', IIF(PMTimeActivity_FormulaA4A7ACEFFCC1444DA018CE78DD1BFCA3>=40, 'orange40', 'mauvais'))
Comme vous l'avez peut-être remarqué ci-dessous, la ligne est maintenant correctement mise en évidence.
Passons maintenant à l'analyse des scripts SQL qui travaillent derrière l'IG pour comprendre pourquoi cette formule a fonctionné et comment. Si nous vérifions le journal des requêtes SQL, nous verrons le script ci-dessous. Comme vous pouvez le voir sur la capture d'écran, notre formule pour la colonne Productivité est sélectionnée avec un alias et correspond à la valeur que nous avons utilisée dans la formule pour le style de ligne.
Il est généré par le code ci-dessous du graphique PXGenericInqGrph:
GIST : https://tinyurl.com/msu6dx4b
La méthode GetExtFieldId renvoie simplement la valeur RowID.
GIST : https://tinyurl.com/msu6dx4b
Par conséquent, le code ci-dessus ajoute la formule et l'ID de ligne. Examinons maintenant l'ID de ligne du résultat GIR pour cette ligne particulière :
Comme vous pouvez le voir, le code ajoute_FormulaA4A7ACEF-FCC-1444D-A018-CE78DD1BFCA3à l'alias de la table qui est PMTimeActivity dans ce cas et c'est ainsi que le "PMTimeActivity_FormulaA4A7ACEF-FCC-1444D-A018-CE78DD1BFCA3" est généré.
Voici le lien vers la GIST : https://tinyurl.com/yck94f5y
Nous espérons que ces informations vous seront utiles dans votre propre travail de développement.
Bon codage !