Interne Tabelle

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

Interne Tabelle

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
So ich bin es mal wieder ....
Habe Probleme mit der Internen Tabelle -.-

Wie erstelle ich eine Interne Tabelle über die print Methode?
Bin wie gesagt erst seit 2 Wochen in der Abap Materie drin ....
Wenn ich es nach Schema X mache... also Struktur erstellen etc. Funktioniert es auch nicht :(
bin glaube zu dumm dazu....

Um die Daten in eine Interne Tabelle zu speichern und dann wieder auszulesen brauche ich da ne DDIC Tabelle?


Mein Versuch ... geht aber auch nicht.... ( Die Loop Schleife fehlt ich weiß ! )

Code: Alles auswählen.

 METHOD print.
    Data:
     lt_tab type standard table of ref to lcl_employee with NON-unique default key,
     wa_tab TYPE lt_tab.

     APPEND wa_tab_ TO lt_tab.

    WRITE: /  n_o_employees,  'Name:', fullname,  'Adresse:', adresse, 'Geburtstdatum:', dob , 'Gehalt:', salary.

  ENDMETHOD.      "print 

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


Re: Interne Tabelle

Beitrag von JHM (Top Expert / 1225 / 2 / 204 ) »
Trulchen hat geschrieben:Wie erstelle ich eine Interne Tabelle über die print Methode?
Gib mal ein paar Infos mehr heraus. Was willst du genau tun, welche Daten soll die ITAB aufnehmen, welche Fehlermeldung bekommst du aktuell.

Jede itab hat einen TYPE, der die Zeilenstruktur und evtl. den Tabellentyp definiert. Dieser TYPE kann im DDIC liegen, kann aber auch im Programm/Klasse definiert sein. Wenn du deine itab auch außerhalb der Klasse verwendet werden soll, macht es Sinn den TYPE ins DDIC zu packen.
Gruß Hendrik

Re: Interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 4485 / 231 / 1205 ) »
hi!

@Trulchen
Ich hab dir das schon in deinem ersten Thread gesagt, dass du von der Angabe her in der PRINT Methode KEINE Tabelle brauchst.
Sondern dass aufrufende Programm soll alle EMPLOEEYs in einer Tabelle ablegen.

Code: Alles auswählen.

START-OF-SELECTION.
  DATA:
    lt_employees TYPE STANDARD TABLE OF REF TO lcl_employee.
  
  FIELD-SYMBOLS:
    <lr_employee> TYPE REF TO lcl_employee.

* Mehrere Dummy-Einträge anlegen
  DO 5 TIMES.
    APPEND INITIAL LINE TO lt_employees ASSIGNING <lr_employee>
    CREATE OBJECT <lr_employee>
      EXPORTING 
        set_name = 'test'.
        set_firstname = ''
        set_adresse = ''
        set_dob = '20120401'.
  ENDDO.

* Daten mit Print-Methode ausgeben
  LOOP AT lt_employees ASSIGNING <lr_employee>.
    NEW-LINE. "Damit jeder in einer neuen Zeile steht
    <lr_employee>->print( ).
  ENDLOOP.
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: Interne Tabelle

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
Wenn ich es so mache:

Code: Alles auswählen.

PARAMETERS:
    p_name(50) TYPE c,
    p_fname(50) TYPE c,
    p_adr(50) TYPE c,
    p_dob  TYPE d,
    p_bsal TYPE i.

START-OF-SELECTION.
DATA:
    lt_employees TYPE STANDARD TABLE OF REF TO lcl_employee.
FIELD-SYMBOLS:
    <lr_employees> TYPE REF TO lcl_employee.

DO 5 TIMES.
   APPEND INITIAL LINE TO lt_employees ASSIGNING <lr_employees>.
   CREATE OBJECT <lr_employees>
   EXPORTING it_name = p_name
             it_firstname = p_fname
             it_adresse = p_adr
             it_dob = p_dob
             it_salary = p_bsal.
ENDDO.


  CALL METHOD:
   <lr_employees>->get_fullname,
   <lr_employees>->init_base_salary,
   <lr_employees>->get_dob RECEIVING rv_dob = p_dob,
   <lr_employees>->get_adresse RECEIVING rv_adresse = p_adr ,
  <lr_employees>->get_salary RECEIVING rv_salary = p_bsal.

  LOOP AT lt_employees ASSIGNING <lr_employees>.
    NEW-LINE. "Damit jeder in einer neuen Zeile steht
    <lr_employees>->print( ).
  ENDLOOP.
Bekomm ich folgendes Ergebnis: ( siehe Bild)
Zuletzt geändert von Trulchen am 05.09.2012 14:03, insgesamt 1-mal geändert.

Re: Interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 4485 / 231 / 1205 ) »
Irgendwas scheint bei der Erstellung des "FULLNAME" (sollte der nicht aus NAME und FIRSTNAME bestehen?) und der Befüllung von "SALARY" (heißt die nicht BASE_SALARY?) noch nicht zu funktionieren.
Eigentlich sollten bei allen fünf Zeilen immer dieselben Werte angezeigt werden, da ja auch alle fünf Instanzen mit denselben Werten angelegt wurden.

Übrigens die "n_o_employees" auszugeben ist sinnlos, da hier ja immer die Anzahl aller Einträge gespeichert wird.
Hiermit kriegst du die aktuelle Zeile in die Ausgabe

Code: Alles auswählen.

LOOP AT lt_employees ASSIGNING <lr_employees>.
NEW-LINE. "Damit jeder in einer neuen Zeile steht
WRITE sy-tabix. "Die aktuelle Zeilennummer ausgeben
<lr_employees>->print( ).
ENDLOOP.
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: Interne Tabelle

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
Fullname ist bei mir eine extra Methode:

Code: Alles auswählen.

METHOD get_fullname.
  DATA sep(3) TYPE c VALUE '   '.
    CONCATENATE name firstname into fullname SEPARATED BY sep.
    rv_fullname = fullname.
ENDMETHOD.  
Und salary stimmt schon, weil es nicht mehr der base salary ist ^^
Die Methode get_salary soll in dieser Klasse das Gehalt zurückliefern, das sich aus dem Grundgehalt und einer altersabhängigen Zulage errechnet. Mitarbeiter über 40 Jahren erhalten 5% Zulage, Mitarbeiter über 50 Jahren 10%.

Code: Alles auswählen.

 METHOD get_salary.
    diff = sy-datum - dob.
IF diff > 14600.
salary = base_salary + ( base_salary * '0.05' ).
ELSEIF diff > 18250.
salary = base_salary + ( base_salary * '0.10' ).
ELSE.
salary = base_salary.
ENDIF.
rv_salary = salary.
ENDMETHOD

Re: Interne Tabelle

Beitrag von wreichelt (Top Expert / 1086 / 32 / 197 ) »
Hallo,

muss die Abfrage nicht getauscht werden, zuerst > 18250 dann ....
Gruß
Wolfgang

Re: Interne Tabelle

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
ALso es funktioniert zumindest so ^^

Er berechnet wir den Zuschlag wenn ich ein Geburtstag eingebe der min. die 40 überschritten hat
Und die 50 auch ....

Re: Interne Tabelle

Beitrag von a-dead-trousers (Top Expert / 4485 / 231 / 1205 ) »
hi!

Für die Ausgabe darfst du in der PRINT Methode nicht die Attribute FULLNAME bzw. SALARY verwenden, sondern musst hier zuerst die Methoden GET_FULLNAME und GET_SALARY aufrufen (Dafür sind sie ja gedacht). Danach musst du dann die Ergebnisse daraus per WRITE Befehl ausgeben.

in etwa so:

Code: Alles auswählen.

METHOD print.
  Data:
   ld_fullname TYPE char100, "CHAR damit die Breite in der Ausgabe immer gleich ist
   ld_salary TYPE i.

  ld_fullname = me->get_fullname( ).
  ld_salary = me->get_salary( ).

  WRITE: 'Name:', ld_fullname,  'Adresse:', me->adresse, 'Geburtstdatum:', me->dob , 'Gehalt:', ld_salary.

ENDMETHOD.
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: Interne Tabelle

Beitrag von Trulchen (Specialist / 241 / 4 / 1 ) »
VIelen Vielen Dank :)
Jeztt funktioniert es ;) !

Seite 1 von 1

Vergleichbare Themen

4
Antw.
4863
Views
5
Antw.
6054
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
5633
Views
1
Antw.
5158
Views

Aktuelle Forenbeiträge

Stücklisten
vor 11 Stunden von Selma.schwarz 1 / 47
Belege
vor 11 Stunden von Selma.schwarz 1 / 47
Belege
vor 11 Stunden von Selma.schwarz 1 / 47

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

Stücklisten
vor 11 Stunden von Selma.schwarz 1 / 47
Belege
vor 11 Stunden von Selma.schwarz 1 / 47
Belege
vor 11 Stunden von Selma.schwarz 1 / 47

Unbeantwortete Forenbeiträge

Stücklisten
vor 11 Stunden von Selma.schwarz 1 / 47
Belege
vor 11 Stunden von Selma.schwarz 1 / 47
Belege
vor 11 Stunden von Selma.schwarz 1 / 47