Code: Alles auswählen.
Loop at Tabelle A ASSIGNING <FS>.
<FS>-Feld = TabelleB-Feld.
Endloop.
Dein Unternehmen ist auf der Suche nach neuen Kolleg:innen? Gerne weitersagen:Stellenanzeigen auf ABAPforum.com schalten
.Code: Alles auswählen.
DATA: BEGIN OF YAMBS_NEW OCCURS 0,
MANDT LIKE TOA02-MANDT,
SAP_OBJECT LIKE TOA02-sap_object,
Object_ID LIKE TOA02-object_ID,
ARCHIV_ID LIKE TOA02-ARCHIV_ID,
DOCIC LIKE TOA02-ARC_DOC_ID,
AR_OBJECT LIKE TOA02-AR_OBJECT,
AR_DATE LIKE TOA02-AR_DATE,
DEL_DATE LIKE TOA02-DEL_DATE,
RESERVE LIKE TOA02-RESERVE,
KUKYI LIKE YAMBSINVO-KUKYI,
KUKYB LIKE YAMBSINVO-KUKYB,
KUKYB1 LIKE /YAMBS/BGRP-KUKYB,
KUKYBG LIKE /YAMBS/BGRP-KUKYBG,
POSNR LIKE /YAMBS/BGRP-POSNR,
BELNR LIKE YAMBSINVO-BELNR,
CPUDT LIKE YAMBSINVO-CPUDT,
BZEI LIKE /YAMBS/BGRP-BEZEI,
DOKART LIKE /YAMBS/BGRP-DOKART_AN,
DOCICD LIKE TOA02-ARC_DOC_ID,
ANDAT LIKE /YAMBS/BGRP-ANDAT,
GRUPPE LIKE YAMBSINVO-GRUPP,
END OF YAMBS_NEW.
DATA: BEGIN OF YAMBS_NEW2 OCCURS 0,
KUKYI LIKE YAMBSINVO-KUKYI,
KUKYB LIKE YAMBSINVO-KUKYB,
KUKYB1 LIKE /YAMBS/BGRP-KUKYB,
KUKYBG LIKE /YAMBS/BGRP-KUKYBG,
POSNR LIKE /YAMBS/BGRP-POSNR,
BELNR LIKE YAMBSINVO-BELNR,
CPUDT LIKE YAMBSINVO-CPUDT,
BZEI LIKE /YAMBS/BGRP-BEZEI,
DOKART LIKE /YAMBS/BGRP-DOKART_AN,
DOCICD LIKE TOA02-ARC_DOC_ID,
ANDAT LIKE /YAMBS/BGRP-ANDAT,
GRUPPE LIKE YAMBSINVO-GRUPP,
MANDT LIKE TOA02-MANDT,
SAP_OBJECT LIKE TOA02-sap_object,
Object_ID LIKE TOA02-object_ID,
ARCHIV_ID LIKE TOA02-ARCHIV_ID,
DOCIC LIKE TOA02-ARC_DOC_ID,
AR_OBJECT LIKE TOA02-AR_OBJECT,
AR_DATE LIKE TOA02-AR_DATE,
DEL_DATE LIKE TOA02-DEL_DATE,
RESERVE LIKE TOA02-RESERVE,
END OF YAMBS_NEW2.
DATA: BEGIN OF YAMBS_NEW3 OCCURS 0,
KUKYI LIKE YAMBSINVO-KUKYI,
KUKYB LIKE YAMBSINVO-KUKYB,
KUKYB1 LIKE /YAMBS/BGRP-KUKYB,
KUKYBG LIKE /YAMBS/BGRP-KUKYBG,
POSNR LIKE /YAMBS/BGRP-POSNR,
BELNR LIKE YAMBSINVO-BELNR,
CPUDT LIKE YAMBSINVO-CPUDT,
BZEI LIKE /YAMBS/BGRP-BEZEI,
DOKART LIKE /YAMBS/BGRP-DOKART_AN,
DOCICD LIKE TOA02-ARC_DOC_ID,
ANDAT LIKE /YAMBS/BGRP-ANDAT,
GRUPPE LIKE YAMBSINVO-GRUPP,
MANDT LIKE TOA02-MANDT,
SAP_OBJECT LIKE TOA02-sap_object,
Object_ID LIKE TOA02-object_ID,
ARCHIV_ID LIKE TOA02-ARCHIV_ID,
DOCIC LIKE TOA02-ARC_DOC_ID,
AR_OBJECT LIKE TOA02-AR_OBJECT,
AR_DATE LIKE TOA02-AR_DATE,
DEL_DATE LIKE TOA02-DEL_DATE,
RESERVE LIKE TOA02-RESERVE,
END OF YAMBS_NEW3.
*Selektionsbild
FIELD-SYMBOLS <yambs_new2> like LINE OF yambs_new2.
*
*Daten aus der TOA02 lesen
SELECT * FROM TOA02 INTO yambs_new
WHERE
ARC_DOC_ID IN P_ARCDOC .
yambs_new-belnr(10) = yambs_new-object_id.
APPEND yambs_new.
ENDSELECT.
*Umstellung auf gleiche Feldtypisierung.
LOOP at yambs_new.
MOVE-CORRESPONDING yambs_new to yambs_new3.
APPEND Yambs_new3.
ENDLOOP.
*Werte aus der VIEW ZFPARCDOC holen
SELECT * FROM ZFPARCDOC INTO yambs_new2
*WHERE Belnr EQ <yambs_new>-belnr.
WHERE kukyi IN P_KUKYI.
APPEND Yambs_new2.
ENDSELECT.
*Sortierung der Tabelle
SORT yambs_new2 STABLE BY KUKYBG ASCENDING.
* Lösche Doppete Einträge
DELETE ADJACENT DUPLICATES FROM yambs_new2 COMPARING KUKYBG.
SORT yambs_new2 STABLE BY BELNR ASCENDING.
Loop at yambs_new2 ASSIGNING <yambs_new2>.
<yambs_new2>-docic = yambs_new3-docic.
Endloop.
*das ist die Stelle
* im Prinzip muss das Feld docic von yambs_new3 in das Feld docic von yambs_new2
Code: Alles auswählen.
Loop at yambs_new2...
Loop at yambs_new3...
<yambs_new2>-docic = yambs_new3-docic.
append <yambs_new2> in neue Tabelle
Endloop.
Endloop.
danke für den Tipp an der Stelle
Code: Alles auswählen.
DATA: BEGIN OF YAMBS_NEW OCCURS 0,
MANDT LIKE TOA02-MANDT,
SAP_OBJECT LIKE TOA02-sap_object,
Object_ID LIKE TOA02-object_ID,
ARCHIV_ID LIKE TOA02-ARCHIV_ID,
DOCIC LIKE TOA02-ARC_DOC_ID,
AR_OBJECT LIKE TOA02-AR_OBJECT,
AR_DATE LIKE TOA02-AR_DATE,
DEL_DATE LIKE TOA02-DEL_DATE,
RESERVE LIKE TOA02-RESERVE,
KUKYI LIKE YAMBSINVO-KUKYI,
KUKYB LIKE YAMBSINVO-KUKYB,
KUKYB1 LIKE /YAMBS/BGRP-KUKYB,
KUKYBG LIKE /YAMBS/BGRP-KUKYBG,
POSNR LIKE /YAMBS/BGRP-POSNR,
BELNR LIKE YAMBSINVO-BELNR,
CPUDT LIKE YAMBSINVO-CPUDT,
BZEI LIKE /YAMBS/BGRP-BEZEI,
DOKART LIKE /YAMBS/BGRP-DOKART_AN,
DOCICD LIKE TOA02-ARC_DOC_ID,
ANDAT LIKE /YAMBS/BGRP-ANDAT,
GRUPPE LIKE YAMBSINVO-GRUPP,
DATA: BEGIN OF YAMBS_NEW2 OCCURS 0,
KUKYI LIKE YAMBSINVO-KUKYI,
KUKYB LIKE YAMBSINVO-KUKYB,
KUKYB1 LIKE /YAMBS/BGRP-KUKYB,
KUKYBG LIKE /YAMBS/BGRP-KUKYBG,
POSNR LIKE /YAMBS/BGRP-POSNR,
BELNR LIKE YAMBSINVO-BELNR,
CPUDT LIKE YAMBSINVO-CPUDT,
BZEI LIKE /YAMBS/BGRP-BEZEI,
DOKART LIKE /YAMBS/BGRP-DOKART_AN,
DOCICD LIKE TOA02-ARC_DOC_ID,
ANDAT LIKE /YAMBS/BGRP-ANDAT,
GRUPPE LIKE YAMBSINVO-GRUPP,
MANDT LIKE TOA02-MANDT,
SAP_OBJECT LIKE TOA02-sap_object,
Object_ID LIKE TOA02-object_ID,
ARCHIV_ID LIKE TOA02-ARCHIV_ID,
DOCIC LIKE TOA02-ARC_DOC_ID,
AR_OBJECT LIKE TOA02-AR_OBJECT,
AR_DATE LIKE TOA02-AR_DATE,
DEL_DATE LIKE TOA02-DEL_DATE,
RESERVE LIKE TOA02-RESERVE,
END OF YAMBS_NEW2.
SELECT * FROM TOA02 INTO yambs_new
WHERE
ARC_DOC_ID IN P_ARCDOC .
yambs_new-belnr(10) = yambs_new-object_id.
yambs_new2-docic = yambs_new-docic.
yambs_new2-belnr(10) = yambs_new-belnr(10).
APPEND yambs_new.
APPEND yambs_new2.
ENDSELECT.
*Werte aus der VIEW ZFPARCDOC holen
*Loop at yambs_new ASSIGNING <DOCICD>.
SELECT * FROM ZFPARCDOC INTO yambs_new2
*WHERE Belnr EQ <yambs_new>-belnr.
WHERE kukyBG IN P_KUKYBG .
If yambs_new2-object_id NE yambs_new2-belnr.
move Yambs_new2-belnr to yambs_new2-object_id.
MOVE SY-DATUM(4) to yambs_new2-object_id+10(4).
ENDIF.
yambs_new2-docic = SPACE.
APPEND Yambs_new2.
ENDSELECT.
ZFPARCDOC ist eine VIEW aus zwei Tabellen
woher weißt Du das dies so sein muss und nicht in anderer Reihenfolge?
Code: Alles auswählen.
SELECT a~*, b~docic
FROM toa02 AS a
LEFT OUTER JOIN zfparcdoc AS b
ON b~belnr = SUBSTRING( a~object_id, 1, 10 )
AND b~kukybg IN @p_kukybg
WHERE a~arc_doc_id IN @p_arcdoc
INTO TABLE @DATA(yambs).
bei der Abfrage der Tabelle TOA02 ist die Sortierung immer aufsteigendA6272 hat geschrieben: ↑07.10.2022 13:04woher weißt Du das dies so sein muss und nicht in anderer Reihenfolge?
In deinem Screenshot ist nichts, was darauf hindeutet, dass deine gewünschte Reihenfolge korekt ist.
Da fehlt noch eine Information aus TOA02 die auch in ZFPARCDOC sein muss um die eindeutige Verknüpfung herzustellen.
Mit den dargestellten Informationen kannst Du nur irgendeine Reihenfolge herstellen.
Wie von mir oben dargestellt, dann hast Du 9 Zeilen und anschließend Duplikate bezogen auf DOCID löschen.
Hi LeMinion,LeMinion hat geschrieben: ↑07.10.2022 13:28Weil ich einfach zu wenig über die eigentlichen strukturellen Eigenschaften Deiner beteiligten Tabellen kenne, schlage ich mal eben ins Blaue hinein vor. 😊
Das, was ich von dem bisherigen Coding glaube, verstanden zu haben, legt für mich den Schluß nahe, daß Du eigentlich einen Select mit einem Join machen möchtest, der Dir die beiden Datenquellen zusammenführt. Also, eher etwas in der Art:
Wie die Beziehung zwischen den beiden Tabellen tatsächlich aussieht, weiß ich natürlich nicht, ev. müßte der Join entsprechend angepaßt werden. Aber das Lesen aus zwei Tabellen in jeweils eine interne Tabellen, um dann danach einen doppelten Loop zu machen oder einen Read in einem Loop, kommt mir zumindest ineffizient vor. Aber, wie gesagt, ich rate hier auch nur ein wenig, weil ich die tatsächlichen Strukturen und ihre Relation nicht kenne.Code: Alles auswählen.
SELECT a~*, b~docic FROM toa02 AS a LEFT OUTER JOIN zfparcdoc AS b ON b~belnr = SUBSTRING( a~object_id, 1, 10 ) AND b~kukybg IN @p_kukybg WHERE a~arc_doc_id IN @p_arcdoc INTO TABLE @DATA(yambs).
Hilft Dir der Ansatz mit dem Joined-Select weiter?