ASSIGNING <fs>

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
Hallo zusammen,

also irgendwie habe ich ein Denkfehler oder besser gesagt keine Ahnung 😆

folgendes Problem

ich habe zwei interne Tabellen

in Tabelle A ist ein Feld das der Tabelle B zugewiesen werden soll

Code: Alles auswählen.

Loop at Tabelle A   ASSIGNING <FS>.

   <FS>-Feld =   TabelleB-Feld.
Endloop.
->durch den Loop wird ja nur der erste Eintrag der Tabelle B übernommen die Tabelle hat aber nicht nur 1 Zeile sondern mehrere.

Für Tipps wäre ich euch Mega dankbar.

Viele Grüße

Juri

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: ASSIGNING <fs>

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
Moin Juri,

kannste ggf den Quellcode reinkopieren? (Typisierung der Tabellen und etc.)
Wie greifst du auf den Inhalt der Tabelle B drauf?
Kann leider noch nicht die genaue Problemstellung begreifen...

Grüße
sap_enthusiast

Re: ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
Hi sap_enthusiast

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

im Prinzip muss das Feld docic von yambs_new3 in das Feld docic von yambs_new2

aber mit dem Loop ganz am Schluss funktioniert das nur mit dem ersten Eintrag


Grüße Juri

Re: ASSIGNING <fs>

Beitrag von A6272 (Specialist / 238 / 8 / 36 ) »
Hallo,

wenn yambs_new3 mehrere Einträge hat, dann musst du die Einträge in yambs_new2 vervielfältigen, ansonsten hast du immer nur einen Wert aus yambs_new3. Du brauchst eher sowas

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.

Folgende Benutzer bedankten sich beim Autor A6272 für den Beitrag:
Juri


Re: ASSIGNING <fs>

Beitrag von wolli (ForumUser / 80 / 3 / 1 ) »
Es fehlt die Anweisung, welche Zeile aus yambs_new3 genommen werden soll.
Loop at yambs_new2...
LOOP AT YAMBS_NEW3 WHERE FELD... = YAMBS_NEW2-FELD...

Von daher würde ich den Hinweis von A6272 befolgen.

Folgende Benutzer bedankten sich beim Autor wolli für den Beitrag:
Juri


Re: ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
wolli hat geschrieben:
30.09.2022 13:45
Es fehlt die Anweisung, welche Zeile aus yambs_new3 genommen werden soll.
Loop at yambs_new2...
LOOP AT YAMBS_NEW3 WHERE FELD... = YAMBS_NEW2-FELD...

Von daher würde ich den Hinweis von A6272 befolgen.
danke für den Tipp an der Stelle

also irgendwie ist das alles nicht so einfach oder ich blick es einfach nicht
Anhang.JPG
ich kriege die Zuordnung nicht so hin wie ich es gerne hätte
das Feld DOCIC Zeile 1 gehört in Zeile 4
2 gehört in Zeile 5
3 gehört in Zeile 6

Wenn man so eine Konstellation hat wie im Bild oben lässt sich das überhaupt umsetzten?

Re: ASSIGNING <fs>

Beitrag von wolli (ForumUser / 80 / 3 / 1 ) »
Für mich sehen die ersten drei Zeilen obsolet aus.. KUKYI ist dort initial.
Die würde ich erstmal entfernen :-)


Schick mal bitte den Quellcode, wie du ihn jetzt hast.
LG Ramona

Re: ASSIGNING <fs>

Beitrag von LeMinion (ForumUser / 20 / 1 / 6 ) »
Kannst Du bei der Gelegenheit auch kurz was zur Typisierung der ZFPARCDOC sagen?

Re: ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
Hi Ramona,

die ersten 3 Zeilen sind halt insofern wichtig weil hier das Feld DOCIC korrekt befüllt ist aus der da vorigen Tabelle.
Zeile 1 Feld DOCIC entspricht POSNR 1 aus Zeile 4
Zeile 2 Feld DOCIC entspricht POSNR 2 aus Zeile 5
Zeile 3 Feld DOCIC entspricht POSNR 3 aus Zeile 6

Das einzige Feld das einen Bezug hat zur anderen Tabelle ist die BELNR

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.

Re: ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
LeMinion hat geschrieben:
07.10.2022 10:39
Kannst Du bei der Gelegenheit auch kurz was zur Typisierung der ZFPARCDOC sagen?
JOIN.JPG
ZFPARCDOC ist eine VIEW aus zwei Tabellen

die einen Bezug von den Feldern herstellen ( Schlüsselfelder KUKYB, BELNR )

Re: ASSIGNING <fs>

Beitrag von wolli (ForumUser / 80 / 3 / 1 ) »
Kannst du noch das Coding von dem LOOP schicken?
Was sind hier die Felder, die abgefragt werden sollen?
Sind die Daten so verfügbar, wie du sie brauchst?

"Schreibe Variable Tab1-a in Feld Tab2-b, wenn die Daten aus Feld Tab2-C/D/E mit Feldern C/D/E aus Tab1 übereinstimmen".
So ungefähr hast du dir das doch gedacht?

Loop aus deinem ersten Coding ergänzt mit dem Loop, der dir vorschlagen wurde:
Loop at yambs_new2 ASSIGNING <yambs_new2>.
LOOP AT yambs_new3 assigning <yambs_new3> WHERE feld1 = yambs_new2-Feld1 and feld2 = yambs_new2-feld2......
<yambs_new2>-docic = <yambs_new3>-docic.
Endloop.

Re: ASSIGNING <fs>

Beitrag von A6272 (Specialist / 238 / 8 / 36 ) »
Juri hat geschrieben:
07.10.2022 10:01
ich kriege die Zuordnung nicht so hin wie ich es gerne hätte
das Feld DOCIC Zeile 1 gehört in Zeile 4
2 gehört in Zeile 5
3 gehört in Zeile 6
woher 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.

Re: ASSIGNING <fs>

Beitrag von LeMinion (ForumUser / 20 / 1 / 6 ) »
Weil 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:

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).
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.
Hilft Dir der Ansatz mit dem Joined-Select weiter?

Folgende Benutzer bedankten sich beim Autor LeMinion für den Beitrag:
Juri


Re: ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
A6272 hat geschrieben:
07.10.2022 13:04
Juri hat geschrieben:
07.10.2022 10:01
ich kriege die Zuordnung nicht so hin wie ich es gerne hätte
das Feld DOCIC Zeile 1 gehört in Zeile 4
2 gehört in Zeile 5
3 gehört in Zeile 6
woher 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.
bei der Abfrage der Tabelle TOA02 ist die Sortierung immer aufsteigend
zu jedem archivierten Beleg gibt es ein ein Eintrag im Feld ARC_DOC_ID

in der anderen Tabelle gibt es die zu jeder archivierten Belegnummer eine entsprechende Positionsnummer sortiert man diese Tabelle (ZFPARCDOC)nach den Belegnummern entsprechen diese Einträge den Einträgen der TOA02
VIEW.JPG
ich zeig euch hier von den Vorschlägen die Ihr mir gemacht habt das entsprechende Ergebnis dazu

Re: ASSIGNING <fs>

Beitrag von Juri (ForumUser / 22 / 8 / 0 ) »
LeMinion hat geschrieben:
07.10.2022 13:28
Weil 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:

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).
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.
Hilft Dir der Ansatz mit dem Joined-Select weiter?
Hi LeMinion,

danke für die Arbeit die du dir gemacht hast ich muss das testen mit dem Join leider habe ich noch eine ältere Version und kann das coding so nicht anwenden und muss hier erst mal schauen wie ich das zum laufen bring.

VG
Juri

Vergleichbare Themen

8
Antw.
8531
Views
REFERENCE vs. ASSIGNING
von ewx » 15.02.2007 10:36 • Verfasst in ABAP® Core
2
Antw.
13151
Views
LOOP AT INTO und ASSIGNING (gelöst)
von beterman » 17.10.2011 15:56 • Verfasst in ABAP® für Anfänger
15
Antw.
4748
Views
ABAP OO - Loop mit Assigning
von Weltenschmerz » 11.05.2016 11:55 • Verfasst in ABAP® für Anfänger
6
Antw.
831
Views
LOOP AT .. ASSIGNING ... CHECK?!?
von whaslbeck » 09.02.2022 11:41 • Verfasst in ABAP® Core
8
Antw.
1816
Views
LOOP AT...ASSIGNING FIELDS-SYMBOL
von PeterPaletti » 29.03.2022 12:25 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.