Mehrstufigkeit und Rekursiver Funktionsaufruf CS_WHERE_USED_

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Mehrstufigkeit und Rekursiver Funktionsaufruf CS_WHERE_USED_

Beitrag von Nautilus (ForumUser / 45 / 0 / 0 ) »
Hallo, ich bin es mal wieder und suche hier bei Euch Hilfe.

Ich habe ein Programm geschrieben, welches mir zu einer vorgegebenen Kompontete die Materialien anzeigt, in denen es benötigt

wird. Bei dem ganzen bediene ich mich dem Funktionsbaustein "CS_WHERE_USED_MAT". In der Grundfunktion funktioniert es analog

zu der Transaktion CS15.
Ich muss anschliessend aber noch einige Daten herausselektieren und von daher habe ich mich entschlossen, das Programm so zu

schreiben.

Das Programm wurde soweit erstellt und dem anfordernden Mitarbeiter zur Verfügung gestellt.
Leider rief dieser sehr schnell an bemerkte, dass er auch öfters mit Dummy-Materialien arbeitet.
Aus diesem Grund muss die Mehrstufigkeit (wie man sie in den Transaktionen CS15 und CS11 auswählen kann) ermöglicht werden.
Falls Ihr Euch nicht darunter vorstellen könnt:
Unter diese Kategorie fallen Materialien, welche wieder Komponenten für andere Materialien darstellen. Hierzu zählen

allerdings keine Rohstoffe und Hilfsstoffe.

Hört sich jetzt etwas verwirrend an.

Nun kommen wir zu meinem eigentlichen Problem.
Ich habe mir überlegt, das ganze durch einen rekursiven Funktionsaufruf zu realisieren.
Sprich, ich gehe mit der vorgebenen Komponente in den Funktionsbaustein "CS_WHERE_USED_MAT". Danach schreibe gehe ich mit dem

gefundenen Material noch mal in die Funktion und überprüfe, ob es auch irgendwo als Komponente verwendet wird. Diese wird so

lange gemacht, bis der Rückgabewert (SY-SUBRC) ungleich (<>) 0 ist.

Allerdings habe ich in ABAP so etwas noch nie gemacht und habe mich dann mit meinen Erfahrungen aus anderen

Programmiersprachen da mal rangemacht und eine rekursive Funktion zusammen gebaut.

Leider funktioniert diese (noch) nicht korrekt. Ich habe mir den ganzen Tag schon damit um die Ohren geschlagen und kann

absolut nicht mehr klar denken.

Morgen sollte das Programm stehen und ich weiss nicht weiter.

Vielleicht hat einer von Euch eine Idee und kann mir weiterhelfen?!
Vier Augen sehen ja mehr? Also, wo habe ih Fehler gemacht?

Ich danke Euch schon mal im Voraus.

Mfg

Christian

Codeausschnitt:

Code: Alles auswählen.

REPORT ZPTARBPLDAT004

TABLES: PLMZ,
        PLPO,
        PLKO,
        CRHD,
        MAKT,
        STKO.

* Deklaration der internen Tabelle für die Daten.
TYPES: BEGIN OF TYP_DATEN,
     MATNR LIKE MAKT-MATNR,         "Materialnummer
     MAKTX LIKE MAKT-MAKTX,         "Materialkurztext
END   OF TYP_DATEN.


DATA: INT_DATEN TYPE TYP_DATEN OCCURS 100 WITH HEADER LINE,
      INT_STPOV TYPE STPOV  OCCURS 10 WITH HEADER LINE,
      TMP_INT_STPOV TYPE STPOV  OCCURS 10 WITH HEADER LINE,
*Folgende interne Tabelle werden nur aus Kompatiblität zu dem
*Funktionsbaustein CS_WHERE_USED_MAT deklariert.
*Sie werden nicht benötigt und können völlig ausser Acht gelassen werden
      INT_CSCEQUI TYPE CSCEQUI  OCCURS 10 WITH HEADER LINE,
      INT_CSCKND TYPE CSCKND  OCCURS 10 WITH HEADER LINE,
      INT_CSCMAT TYPE CSCMAT  OCCURS 10 WITH HEADER LINE,
      INT_CSCSTD TYPE CSCSTD  OCCURS 10 WITH HEADER LINE,
      INT_CSCTP TYPE CSCTPL  OCCURS 10 WITH HEADER LINE,
*Ende der belanglosen internen Tabellen  :-) 
      ARBPL_ID LIKE CRHD-OBJID,
      ANZ_INT_DATEN TYPE I,
      ANZ_STRING TYPE C.


* Hilfvariablen
DATA: TMP_MATNR LIKE MAKT-MATNR,
      TMP_MAKTX LIKE MAKT-MAKTX,
      TMP_PLNNR LIKE PLKO-PLNNR,
      TMP_START TYPE C VALUE 'X',
      TMP_SUBRC LIKE SY-SUBRC,
      TMP_TABIX LIKE SY-TABIX.


SELECTION-SCREEN BEGIN OF BLOCK DATEN WITH FRAME TITLE TEXT-001.
  PARAMETERS: ARBEITPL LIKE CRHD-ARBPL .
  PARAMETERS: PLSTATUS LIKE PLKO-STATU DEFAULT 'K' .
  PARAMETER KOMPON LIKE MAKT-MATNR DEFAULT '10601'.
  PARAMETERS: STSTATUS LIKE STKO-STLST .
SELECTION-SCREEN END OF BLOCK DATEN.

START-OF-SELECTION.


* Mit der angegebenen Komponentennummer(als Parameter in der Selektion angegeben) Wird in
* die rekursive Funktion gegangen.
TMP_MATNR = KOMPON.
PERFORM MEHRSTUFIG.


* Testweises ausgeben aller gefundenen Daten:
LOOP AT INT_STPOV.
    WRITE / INT_STPOV-MATNR.
ENDLOOP.



**********************************************************************
******************Mehrstufigkeit bei Stücklisten**********************
**********************************************************************
**  Realisierung über Rekursion.
** D.h. die Funktion muss solange aufgerufen werden, bis keine
** Materialien mehr gefunden werden.

FORM MEHRSTUFIG.

     CALL FUNCTION 'CS_WHERE_USED_MAT'
      EXPORTING
           DATUB                      = '99991231'
           DATUV                      = SY-DATUM
           MATNR                      = TMP_MATNR
*          POSTP                      = ' '
*          RETCODE_ONLY               = ' '
*          STLAN                      = ' '
           WERKS                      = '0001'
*          MCLMT                      = ' '
*          MNSTL                      = ' '
*          MXSTL                      = ' '
*          STLTP                      = ' '
*     IMPORTING
*          TOPMAT                     =
      TABLES
           WULTB                      = TMP_INT_STPOV
           EQUICAT                    = INT_CSCEQUI
           KNDCAT                     = INT_CSCKND
           MATCAT                     = INT_CSCMAT
           STDCAT                     = INT_CSCSTD
           TPLCAT                     = INT_CSCTP
*          PRJCAT                     =
     EXCEPTIONS
          CALL_INVALID               = 1
          MATERIAL_NOT_FOUND         = 2
          NO_WHERE_USED_REC_FOUND    = 3
          NO_WHERE_USED_REC_SELECTED = 4
          NO_WHERE_USED_REC_VALID    = 5
          OTHERS                     = 6.

    TMP_SUBRC = SY-SUBRC.

    IF TMP_SUBRC EQ '0'.
        LOOP AT TMP_INT_STPOV.
           READ TABLE INT_STPOV WITH KEY MATNR =
           TMP_INT_STPOV-MATNR.

           IF SY-SUBRC NE '0'.
               APPEND TMP_INT_STPOV TO INT_STPOV.
           ENDIF.
        ENDLOOP.
    ENDIF.

*Prüfen, ob ein DS gefunden wurde.
     WHILE TMP_SUBRC EQ '0'.
         TMP_TABIX = TMP_TABIX + 1.


       LOOP AT INT_STPOV FROM TMP_TABIX.
         IF TMP_MATNR NE INT_STPOV-MATNR.
           TMP_MATNR = INT_STPOV-MATNR.
           TMP_TABIX = SY-TABIX.
           PERFORM MEHRSTUFIG.
         ENDIF.
       ENDLOOP.
     ENDWHILE.


ENDFORM.


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


Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Nautilus,

der Fehler liegt meiner Meinung nach darin, dass du die LOOP-Schleife über INT_STPOV in der Form-Routine MEHRSTUFIG immer wieder wiederholst. Du müsstest die Tabelle INT_STPOV zu Begin mit dem ersten gewünschten Material füllen und dann deine Schleife ausführen:
==> 1. zeile in INT_STPOV füllen
LOOP AT INT_STPOV FROM TMP_TABIX.
TMP-MATNR = INT_STPOV-MATNR.
PERFORM MEHRSTUFIG.
ENDLOOP.

In MEHRSTUFIG darfst du dann den Kompletten Block mit der While-Schleife nicht mehr ausführen.

mfg dele

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1988
Views
Rekursiver Funktionsaufruf
von verzweifelt » 11.04.2016 22:01 • Verfasst in ABAP® Core
0
Antw.
1284
Views
Funktionsaufruf via WebAS
von Gynix » 21.11.2005 15:08 • Verfasst in Web Application Server
1
Antw.
2457
Views
Hifle bei BAPI Funktionsaufruf
von ccat20 » 29.06.2006 20:48 • Verfasst in Basis
1
Antw.
2472
Views
Funktionsaufruf aus Excel mit Importparameter (Struktur)
von Kati » 11.11.2005 14:20 • Verfasst in ABAP Objects®
5
Antw.
3353
Views
Button für Funktionsaufruf funktioniert nicht
von Anna » 18.05.2007 17:54 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 7 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 20 Stunden von Bright4.5 3 / 1487

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.

Aktuelle Forenbeiträge

Regex in where
vor 7 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 20 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822