Problem: Unterprogramm und Parameter(typisierung)

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

Problem: Unterprogramm und Parameter(typisierung)

Beitrag von MacLeod (ForumUser / 46 / 4 / 0 ) »
Hallo,

ich möchte einen Programmteil in ein Unterprogramm auslagern, habe aber (aufgrund meines noch begrenzten Wissens) einige Probleme :(

Der Report ist im Bereich HR. Für abgefragte Infotypen habe ich interne Tabellen und zugehörige WA der Art

it_xxxx type pxxxx.
wa_it_xxxx like line of it_xxxx.

Grundsätzlich haben die internen Tabellen einen unterschiedlichen Aufbau, aber einige Spalten gleichen Inhalts:
pernr - Personalnummer
endda - Gültig bis-Datum
begda - Gültig ab-Datum

Dazu noch mehrere Strukturen, die Daten aus den Infotypen aufnehmen sollen. Funktioniert soweit auch ganz gut.

Aber einen Teil der Auswertung mit mehreren if-Blöcken muss ich jetzt mehrfach verwenden, deshalb möchte ich ihn in ein Unterprogramm auslagern.
Die Auswertung befindet sich innerhalb eines PROVIDE/ENDPROVIDE-Blockes, wo die Daten entsprechend aus den internen Tabellen in ihre WA gelesen werden.
Grob stell ich mir das so vor:

Code: Alles auswählen.

form UP using    it_xxxx     (type ?) " komplette Tabelle mit allen Daten
                 wa_it_xxxx  (type ?) " aktuell eingelesene Zeile
                 dat1         type sy-datum
                 dat2         type sy-datum
        changing wa_ergebnis (type ?). " Zeile der Ergebnistabelle
  
  " Zusätzliches WA für internen Loop
  Data: wa2_it_xxxx like line of it_xxxx.
  
  if ... " Bedingungen beziehen sich auf Felder der eingelesenen Zeile wa_it_xxxx
    Loop it_xxxx into wa2_it_xxxx
      " Anweisungen
    endloop.
  elseif ...
  "usw  
  endif.
  
endform.               
Problem: Typisierung der Parameter.
Aktuelle betrifft es fünf verschiedene Infotypen und ihre WA sowie das WA fürs Ergebnis.
Wenn ich type any nehme und dann beim if "wa_tab-feldname" nehme, sagt die Codeprüfung, dass wa_tab kein Feld mit Feldname besitzt.
IMHO übergebe ich doch aber das WA mit einer Struktur und Feldern, also sollte ich die doch ansprechen können. :?

Ich hoffe, Ihr könnt mir helfen.

LG
Macleod

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


Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von MacLeod (ForumUser / 46 / 4 / 0 ) »
Keine Ideen/Vorschläge? :(

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hi!

Tja, Tja... Da rutscht du schön langsam in die dynamische Programmierung ab... 8)

Also, sofern du bei den Ifs immer die gleichen Felder abfragst kannst du es ungefähr so lösen:

Code: Alles auswählen.

form UP using    it_xxxx     type table
                 wa_it_xxxx  type any
                 dat1        type sy-datum
                 dat2        type sy-datum
        changing wa_ergebnis type any.

  TYPES:
    BEGIN OF ty_fields,
       field01  TYPE xxx,
       field02  TYPE xxx,
       ...
    BEGIN OF ty_fields.

  DATA:
    ls_field01  TYPE ty_fields,
    ls_field02  TYPE ty_fields.

  FIELD-SYMBOLS:
    <la_line>  TYPE any.

  MOVE-CORRESPONDING wa_it_xxxx TO ls_field01.
     
  if ls_field01-field01 NE dat1.
    Loop it_xxxx ASSIGNGIN <la_line>.
      MOVE-CORRESPONDING <la_line> TO ls_field02. 
      ...
    endloop.
  elseif ...
    ...
  endif.
     
endform.
Aber wenn nicht, bleibt dir nichts anderes übrig als für jede Tabelle eine eigene Unterroutine zu schreiben, oder den Befehl ASSIGN COMPONENT ... OF STRUCTURE ... zu verwenden. Und das je Feld, das zu vergleichen möchtest.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von MacLeod (ForumUser / 46 / 4 / 0 ) »
Danke!
Deine Lösung funktioniert. :D
Schade das 'LOOP AT ... ASSIGNING <>' nicht mit einer WHERE-Bedingung geht, dann müsste man nicht über alle Datensätze loopen.

Ich hab mir schon fast gedacht, dass es mit Feldsymbolen funktioniert. Leider hab ich mit denen noch so meine Probleme :cry:

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Feldsymbole sind jetzt eigentlich nicht so schwer: Denk an C/C++ und Zeiger :twisted:

Wenn du dir über die "Sinnhaftigkeit" von Zeigern nicht sicher bist, würd ich dir die SAP-Schulung BC 490 (Performance-Tuning) empfehlen.
z.B. Ein LOOP AT ... ASSIGNING ist "Pfeilschnell" gegenüber einem LOOP AT ... INTO ... da keine Daten in die Workarea "übertragen" werden müssen, sondern nur der Zeiger auf einen andere Zeile gesetzt wird.
Aber in deinem Beispiel ist das wiederum egal, weil das behäbige MOVE-CORRESPONDING den ganzen Geschwindigkeitvorteil "auffrist".
Wenn du hingegen alles auf Feld-Symbole umbauen würdest, hättest du wieder einiges an Geschwindigkeit gewonnen.

lg ADT

EDIT: Dies ist mein 333er Post --> I'm half time the beast!
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von MacLeod (ForumUser / 46 / 4 / 0 ) »
Deswegen mag ich schon kein C/C++ und habe das auch tunlichst am Ende der Vorlesung damals wieder abgehakt ;)
Java ist da schöner.

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Amen 8)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von MacLeod (ForumUser / 46 / 4 / 0 ) »
hierzu habe ich doch noch mal eine Frage.

Kann man interne Tabellen und die zugehörigen WA's immer nur als "TYPE Table" und "TYPE Any" übergeben?
Was dann wiederum heißen würde, dass ich den zugriff darauf immer nur über Feldsymbole habe, oder?

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
MacLeod hat geschrieben:Kann man interne Tabellen und die zugehörigen WA's immer nur als "TYPE Table" und "TYPE Any" übergeben?
Was dann wiederum heißen würde, dass ich den zugriff darauf immer nur über Feldsymbole habe, oder?
Wenn es dynamisch sein soll: JA
Weitere Möglichkeiten wären noch: TYPE STANDARD/SOTRED/INDEX/HASHED TABLE (Wenn du dir sicher bist, dass es sich nur um solche Tabellen handelt)
(SORTED und STANDARD sind sog. INDEX-Tabellen; HASHED ist was eigenes)
Bei INDEX-Tabellen kannst du dann auch mit dem Zeilenindex z.b. ein READ TABLE ... ASSIGNING ... INDEX ... machen.
Wenn du die Daten dynamisch im Programm erstellt hast könnest du sie auch noch direkt als TYPE REF TO DATA übergeben. (Übergibt quasi nur den ZEIGER auf die Daten im Speicher 8) )
Weitere Hilfe im ABAP-Dictionary für den Befehl TYPE (Abschnitt generische Typisierung) bzw. CREATE DATA.

Noch eine kleine Anmerkung wie man die Componenten ermitteln kann

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von MacLeod (ForumUser / 46 / 4 / 0 ) »
OK, danke.

Bin grad am schauen. Es geht mir im Moment auch daran, dass mir einer unserer erfahrenen Entwickler gesagt hat, dass man in Unterprogrammen nicht auf globale Daten zugreifen sollte, sondern nur lokale Variablen verwendet. Diese halt möglichst typisiert, um Konflikte zu vermeiden.

Aber gerade bei internen Tabellen komme ich für meinen Teil noch an Grenzen :( Wobei halt im Normalfall interne Tabellen übergeben werden, deren Spalten vollkommen bekannt sind - sprich also keine dynamische Veränderung vorliegt.

Re: Problem: Unterprogramm und Parameter(typisierung)

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
MacLeod hat geschrieben:hierzu habe ich doch noch mal eine Frage.

Kann man interne Tabellen und die zugehörigen WA's immer nur als "TYPE Table" und "TYPE Any" übergeben?
Was dann wiederum heißen würde, dass ich den zugriff darauf immer nur über Feldsymbole habe, oder?
Irgendwie passt diese Frage nicht so ganz zum Anfang des Threads, wo du dich auf immer unterschiedliche Tabellen und somit eher dynamische Programmierung bezogen hast.
Wie dem auch sei - du kannst Tabellen auch voll qualifiziert übergeben. In so einem Fall entweder im DDIC oder im Programm einen Tabellentype definieren und mit dem kannst du dann weiterarbeiten und auch auf die Einzelkomponenten mit Feldnamen zugreifen.

Code: Alles auswählen.

TYPES: gtyt_mara TYPE STANDARD TABLE OF MARA WITH NON-UNIQUE DEFAULT KEY.
data: gt_mara TYPE gtyt_mara.

...
PERFORM work_with_table changing gt_mara.
...
FORM work_with_table changing pt_mara type gtyt_mara.

LOOP AT pt_mara....WHERE matnr = ...
ENDFORM.

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

1
Antw.
617
Views
Dynamische Typisierung durch Changing Parameter
von Coffeebean » 11.07.2021 12:31 • Verfasst in ABAP Objects®
2
Antw.
1321
Views
Struktur als Using-Parameter aus Fuba an Unterprogramm
von kbit100 » 12.02.2016 14:32 • Verfasst in ABAP® für Anfänger
1
Antw.
1014
Views
Problem bei ASSIGN COMPONENT mit dynamischer Typisierung
von Luca2501 » 17.09.2020 11:09 • Verfasst in ABAP® Core
6
Antw.
2525
Views
SET PARAMETER Problem
von samson » 14.03.2006 11:07 • Verfasst in ABAP® Core
2
Antw.
1557
Views
Typisierung von Formparameter
von RiffRaff » 27.08.2004 09:46 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 255

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 255

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140