Unterprogramm erstellen - Abweichende Parameteranzahl

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

Getting started ... Alles für einen gelungenen Start.
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von Sonne1234 (ForumUser / 30 / 17 / 2 ) »
Hallo zusammen,

in meinem Programm, das ich versuche zu schreiben, muss ich öfters mit jeweils anderen Daten auf eine Tabelle zugreifen.
Ich würde dies nun gerne über ein Unterprogramm einbauen.
Allerdings bekomme ich hier immer wieder Fehlermeldungen.
Folgender Code:

Code: Alles auswählen.

Perform f_nast using gt_sap changing gt_nast. 

Form f_nast 
 using p_table type STANDARD TABLE ty_vbrk changing p_nast.
  
  SELECT objky kschl erdat vstat parnr
         INTO CORRESPONDING FIELDS OF TABLE p_nast
         FROM nast FOR ALL ENTRIES IN p_table 
         WHERE objky EQ p_table-vbeln AND
                     kschl EQ 'X'.
    
endform.     
Derzeit bekomme ich die Meldung, dass es eine abweichende Parameteranzahl in FORM und PERFORM gibt. (Formalparameter: 3, Aktualparameter: 2)

Ich weiß nicht so richtig, an welcher Stelle ich hier nun ansetzen soll, um das ganze anzupassen.

Inhaltlich fragt am besten nicht, warum ich das überhaupt tue. Ich weiß selbst noch nicht genau, ob das alles so Sinn ergibt :D Aber Ziel ist es erstmal, dass keine Fehler mehr hochkommen und die gt_nast Tabelle mit Werten gefüllt wird.

Danke für eure Unterstützung.
Viele Grüße
Julia

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


Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von Aba ( / / 0 / 3 ) »
Hallo Julia,

versuche mal anstatt mit dem Type Standard table in

Code: Alles auswählen.

Form f_nast 
 using p_table type STANDARD TABLE ty_vbrk changing p_nast.

mit einem Tabellentypen zu arbeiten. Dann funktioniert das bei mir.

Aba

Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von Sonne1234 (ForumUser / 30 / 17 / 2 ) »
Hallo Aba,

kannst du mir bitte noch einen Tipp geben, wie ich das dann deklarieren muss?

Ich komme leider nicht so richtig weiter.

Vielen Dank.

Gruß
Julia

Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
Hi Julia,

deinen Fehler bekommst du so weg wie im unten stehenden Coding. Du bekommst aber einen Problem mit "objky" und "p_tabl-vbeln". Das funktioniert bei FOR ALL ENTRIES so nicht, da hier zwingend der selbe Typ verlangt wird.

Ungünstig ist immer auch mehr zu übergeben als man braucht. Auch eine Form
sollte sich wie im OO daran halten -> 1 Methode = 1 Aufgabe -> Klare Parameterübergabe.

Lösung :
1. Definiere einen strukturierten Tabellentyp (ty_objky) mit dem Feld objky, falls es noch keinen im Dictionary
gibt.
2. Rufe die Form wie auf :
PERFORM fnast USING CORRESPONDING ty_objky( tab_sap MAPPING objky =
vbeln ) CHANGING p_nast
.

Code: Alles auswählen.

TYPES:
 ty_vbrk TYPE TABLE OF vbrk.

DATA:
  tab_sap TYPE STANDARD TABLE OF vbrk,
  tab_nast TYPE STANDARD TABLE OF nast.

Perform f_nast using tab_sap changing tab_nast.



Form f_nast
 using p_table type ty_vbrk changing p_nast.

  SELECT objky,kschl,erdat, vstat,parnr
         INTO CORRESPONDING FIELDS OF TABLE @p_nast
         FROM nast FOR ALL ENTRIES IN @p_table
         WHERE objky EQ @p_table-vbeln AND
                     @kschl EQ 'X'.

endform.
"Code lügt nicht ^^"

Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Zudem würde ich noch die Variablen tab_sap in billing_header und p_table in p_billing_header umbenennen.
Dann wird das ganze Coding besser nachvollziehbar. In einem Monat weiß niemand mehr, was die Variable tab_sap jetzt genau enthält.

Den änderbaren Parameter p_nast sollte noch typisiert werden. Verhindert auch eine Menge unnötiger Fehler.

Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von Sonne1234 (ForumUser / 30 / 17 / 2 ) »
Guten Morgen zusammen,

leider komme ich noch nicht so richtig weiter.

Wenn ich grundsätzlich versuche mit corresponding zu arbeiten, erhalte ich die Meldung, dass das Feld "Corresponding" unbekannt ist.

Code: Alles auswählen.

perform f_nast using CORRESPONDING ty_objky(gt_sap mapping objky = vbeln) changing gt_nast.
Also habe ich versucht das von dir genannte Coding umzusetzen.

Code: Alles auswählen.

types: BEGIN OF ty_nast,
         objky      TYPE c LENGTH 50,
         kschl      TYPE nast-kschl,
         erdat      TYPE nast-erdat,
         vstat      TYPE nast-vstat,
         parnr      TYPE c LENGTH 10,
        END OF ty_nast,

 BEGIN OF ty_vbrk,
         vbeln TYPE c LENGTH 30,
         fkart TYPE vbrk-fkart,
         fkdat TYPE vbrk-fkdat,
         rfbsk TYPE vbrk-rfbsk,
       END OF ty_vbrk.

data: gt_sap type Standard table of ty_vbrk, 
        gt_nast type Standard table of ty_nast. 

perform f_nast using gt_sap changing gt_nast. 

form f_nast

  using p_table type ty_vbrk changing p_nast type ty_nast.

  SELECT objky kschl erdat vstat parnr
         INTO CORRESPONDING FIELDS OF table p_nast
         FROM nast FOR ALL ENTRIES IN p_table
         WHERE objky EQ p_table-vbeln AND
               kschl EQ 'x'.

endform.
Nun bekomme ich aber die folgende Meldung:

Bei PERFORM bzw. CALL FUNCTION "F_NAST" ist der Aktualparameter "GT_SAP" zum Formalparameter "P_TABLE" inkompatibel.

Aber eigentlich sind doch gt_sap und p_table komplett gleich deklariert.

Das Problem ist, wenn ich an der zunächst genannten Datendeklaration etwas ändere, bekomme ich im Programm an anderer Stelle Schwierigkeiten.

Könnt ihr mir hier bitte nochmal weiterhelfen?

Danke :)
Gruß
Julia

Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von Aba ( / / 0 / 3 ) »
Hallo Julia,

Bei PERFORM bzw. CALL FUNCTION "F_NAST" ist der Aktualparameter "GT_SAP" zum Formalparameter "P_TABLE" inkompatibel.

Aber eigentlich sind doch gt_sap und p_table komplett gleich deklariert.
gt_sap und p_table sind bei dir aktuell nicht gleich deklariert.
Bei gt_sap handelt es sich um eine Tabelle, da du sie mit "type standard table of ty_vbrk" definierst. Bei p_table dagegen handelt es sich lediglich um eine Struktur, da du sie nur mit "type ty_vbrk" definierst. Daher sind die beiden Variablen nicht direkt kompatibel.
Bei gt_nast und p_nast müsste auch die gleiche Fehlermeldung erscheinen.

Wenn beides eine Tabelle sein soll, könntest du dafür einen Tabellentypen wie folgt definieren:

Code: Alles auswählen.

types: tty_vbrk type table of ty_vbrk,
tty_nast type table of ty_nast.
Deine Deklarationen für gt_sap und p_table könnten dann beide wie folgt darauf basieren:

Code: Alles auswählen.

types: BEGIN OF ty_nast,
         objky      TYPE c LENGTH 50,
         kschl      TYPE nast-kschl,
         erdat      TYPE nast-erdat,
         vstat      TYPE nast-vstat,
         parnr      TYPE c LENGTH 10,
        END OF ty_nast,

 BEGIN OF ty_vbrk,
         vbeln TYPE c LENGTH 30,
         fkart TYPE vbrk-fkart,
         fkdat TYPE vbrk-fkdat,
         rfbsk TYPE vbrk-rfbsk,
       END OF ty_vbrk.

types: tty_vbrk type table of ty_vbrk,
          tty_nast type table of ty_nast.

data: gt_sap   type tty_vbrk, 
         gt_nast type tty_nast. 

perform f_nast using gt_sap changing gt_nast. 

form f_nast

  using p_table type tty_vbrk changing p_nast type tty_nast.

  SELECT objky kschl erdat vstat parnr
         INTO CORRESPONDING FIELDS OF table p_nast
         FROM nast FOR ALL ENTRIES IN p_table
         WHERE objky EQ p_table-vbeln AND
               kschl EQ 'x'.

endform.


Ich hoffe das hilft dir weiter.

Aba

Re: Unterprogramm erstellen - Abweichende Parameteranzahl

Beitrag von DeathAndPain (Top Expert / 1933 / 252 / 410 ) »
Obenstehendes ist richtig. Ergänzend noch folgendes:
Wenn ich grundsätzlich versuche mit corresponding zu arbeiten, erhalte ich die Meldung, dass das Feld "Corresponding" unbekannt ist.
Das liegt daran, dass CORRESPONDING() aus der neuen 7.40-Syntax stammt. Der alte PERFORM-Befehl unterstützt diese jedoch nicht. Du musst also entweder OO machen oder Deine Werte vor dem PERFORM in eine Struktur kopieren, die der Typisierung des entsprechenden FORM-Parameters entspricht.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2547
Views
Abweichende Kostenzuordnung in der Zeitwirtschaft
von globetrotter » 06.04.2008 14:51 • Verfasst in Human Resources
5
Antw.
1147
Views
Abweichende Feldinhalte in Duplikaten finden
von Patrick1982 » 09.02.2021 17:43 • Verfasst in ABAP® für Anfänger
2
Antw.
2528
Views
abweichende Anschrift für Kreditor für Zahlungsavise?
von hakan_gueven@yahoo.de » 18.09.2007 09:06 • Verfasst in Financials
1
Antw.
3067
Views
Lohnart auf abweichende Kostenstelle verbuchen
von JoergS » 11.10.2007 11:57 • Verfasst in Human Resources
3
Antw.
1571
Views
Unterprogramm
von Gast » 20.09.2005 09:42 • 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.