SAP ABAP Infoset Query - SELECT SUM et des lignes Dupliquées
J'ai de la difficulté à décider où commencer/comment faire pour obtenir le bon de sortie.
Je suis très nouveau à ABAP de codage. Je suis en train de créer un Infoset query et le besoin de faire un peu de codage dans SQ02.
J'ai deux tables jointes, l'une étant RBKP comme le en-tête de Facture l'autre est RBDRSEG pour la Facture Éléments.
La requête doit exécuter à la suite de certains paramètres non pertinents/variantes, mais quand il le fait il a besoin d' - - -
Regarder dans RBDRSEG pour tous les mêmes numéros de Document RBKP-BELNR EQ RBDRSEG-RBLNR
En agissant de la sorte RBDRSEG peut ou ne peut pas avoir plusieurs ligne de résultats pour chaque Doc No.
J'ai besoin de total, le champ RBDRSEG-DMBTR pour chaque Doc No. Résultat.
(Si il y a 5 lignes pour un Doc. No.; DMBTR aura une valeur différente pour chacun qui doivent être détruite)
À ce point, j'ai besoin de la sortie pour ne montrer que (avec les autres domaines dans RBKP) Une ligne avec la SOMME de la DMBTR champ pour chaque Doc. No.
J'ai donc besoin d'avoir un autre champ indiquant le différence du Champ RBKP - RMWWWR qui est le Total de la Facture et le montant Total qui a été calculée précédemment pour que le Doc. Pas de. pour le champ DMBTR.
Si vous pouviez m'aider, je serais très reconnaissant.
Vous devez vous connecter pour publier un commentaire.
vous devez d'abord définir une structure qui contiendra vos données de sélection. Un exemple de structure pour votre condition peut ressembler à ceci:
n'oubliez pas d'activer la structure et assurez-vous qu'il ne contient pas d'erreurs.
maintenant créer le rapport de sélection. Pour utiliser un rapport que les données de la méthode de sélection, vous devez ajouter deux commentaires,
*<QUERY_HEAD>
et*<QUERY_BODY>
.*<QUERY_HEAD>
doit être placé là où votre début de sélection on l'habitude d'aller,*<QUERY_BODY>
à l'intérieur d'une boucle qui met la ligne sélectionnée dans une table interne avec le même nom que la structure que vous avez défini dans SE11.J'ai fait un rapport d'exemple pour montrer comment cela pourrait fonctionner:
l'exemple de rapport sélectionne d'abord la
RBKP
lignes avec une somme deRBDRSEG-DMBTR
pour chaque document dansRBKP
. Après cela, unloop
les mises à jour de laDIFF
colonne avec la différence entre les colonnes sélectionnéesRMWWR
etDMBTR
.Malheureusement, dans notre Système SAP, la table
RBDRSEG
est vide, donc je ne peux pas tester cette partie du rapport. Mais vous pouvez tester le rapport dans votre système par l'ajout d'un point d'arrêt avant la premièreloop
et puis démarrez le rapport. Vous devriez alors être en mesure d'avoir un regard sur les lignes sélectionnées dans la table interneITAB
et de voir si la sélection fonctionne comme prévu.mises en garde dans l'exemple de rapport: à la fois
RBKP
etRBDRSEG
référencer les différents champs de devise. Ainsi, il peut être possible de vos valeurs dansRMWWR
etDMBTR
sont dans des devises différentes (RMWWR
est dans le document de la monnaie,DMBTR
semble être en défaut devise de la société). Si cela peut être le cas, vous devrez les convertir dans la devise appropriée avant de calculer la différence. Assurez-vous de joindreRBKP
etRBDRSEG
en utilisant à la fois le numéro de document dansBELNR
/RBLNR
et l'année de laGJAHR
/RJAHR
(champRBDRSEG
estRJAHR
, pasGJAHR
, bien queGJAHR
existe aussi enRBDRSEG
).lorsque votre rapport fonctionne comme prévu, de créer des informations basées sur votre rapport. Vous pouvez ensuite utiliser l'infoset comme n'importe quel autre infoset.
Mise à jour:
Je viens de réaliser que parce que vous avez écrit au sujet d'être de nouveau à ABAP j'ai immédiatement supposé que vous devez créer un rapport pour votre infoset. En fonction de vos besoins réels, cela peut ne pas être le cas. Vous pouvez créer un simple infoset query sur la table RBKP et ensuite utiliser les informations de l'éditeur d'ajouter deux champs de la ligne total et la différence, puis ajouter un peu de code abap qui sélectionne la somme de toutes les lignes correspondantes dans RBDRSEG et calcule la différence entre RMWWR et que la somme agrégée. Ce serait probablement plus lent que d'une personnalisation de l'abap rapport que le select doivent être répétées pour chaque ligne dans RBKP, donc cela dépend vraiment de la quantité de données de vos utilisateurs vont de la requête. Une personnalisation de l'ABAP rapport est fine, souple et rapide, mais peut-être exagéré, et le nombre de personnes en mesure de modifier un rapport est plus petit que le nombre de personnes en mesure de modifier un infoset.
Plus d'Infos sur la variante à l'aide de l'infoset designer
d'abord créer un simple infoset lecture seule table RBKP (donc pas de jointure de table dans l'infoset définition). Maintenant, allez à l'application des améliorations spécifiques:
Dans mon exemple, j'ai déjà ajouté les 2 champs,
LINETOTAL
etDIFFERENCE
. Les deux ont les mêmes propriétés queRBDRSEG-DMBTR
. Assurez-vous que votre champ contenant la somme deRBDRSEG-DMBTR
a une baisse de la séquence (ici, '1') que le champ contenant la différence. La séquence détermine les champs qui seront calculées dans un premier temps.Cliquez sur le bouton de codage pour le premier champ et ajouter le codage pour sélectionner la somme pour un seul
RBKP
entrée:Puis faire de même pour la différence de champ:
Maintenant, vous avez deux champs disponibles dans votre liste de champs, vous pouvez les ajouter à votre groupe de zone sur la droite:
Comme mentionné avant, le code que vous avez entré sera traitée pour chaque ligne dans RBKP. Donc cela peut avoir un impact énorme sur les performances d'exécution, en fonction de la taille de votre premier jeu de résultats.