select und write

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

select und write

Beitrag von eddi89 (ForumUser / 22 / 0 / 0 ) »
halli hallo
mache seit einer wocheausbildung zum fiae und soll nun abap lernen. heute bekam ich übungsaufgaben zum thema tabellen.
die aufgabe ist folgende:
-------------------------------------
1. Übungsaufgabe ABAP/4 – Programmierung
Thema: Datenselektion und Listausgabe

Erstelle einen Report (ohne Selektionsbildschirm), der für alle Sätze der Datenbanktabelle SFLIGHT folgende Felder auf einer Liste ausgibt:
CARRID
CONNID
FLDATE
SEATSMAX
SEATSOCC

TIP: zu verwendende Befehle in diesem Report:
SELECT ... ENDSELECT
WRITE
-------------------------------------
ich hab kein plan, wasich tun soll^^ bzw was schon... aber n ansatz fällt mir nicht im geringsten ein oO
außer:

report zds00_uebungsaufgabe1
DATA: tlb_sflight type table of sflight, str_flight type table of sflight.

select carrid connid fldate seatsmax seatsocc from sflight into tlb_sflight.
write tlb_sflight.

aber das kann ja nicht richtig sein^^

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


Re: select und write

Beitrag von Fox (ForumUser / 17 / 0 / 0 ) »
Hallo eddi,

In einer Woche lernt keiner so schnell Abap um diese Aufgabe zu erledigen ( es sei den er bringt viel Vorwissen mit ).

Ich denke, dir sind die Datentypen, insbesondere interne Tabellen und Strukturen, nicht vollkommen klar oder überhaupt nicht bekannt. Diesen Datentypen solltest du dich nochmal annehmen.

Außerdem reichen die Befehle: Select und Write für diese Aufgabe nicht aus! Du benötigst zusätzlich noch einen Befehl, der die Zeilen deiner internen Tabelle "tlb_sflight" in eine Struktur liest. Diese Struktur kannst du denn anschließend ausgeben. (Der einfachste Befehl ist hier "Loop").

Da du die Aufgabe mit deinem Wissensstand nicht lösen kannst, mache ich sie für dich

Code: Alles auswählen.

*  Allgemeine Datendefinition
   DATA:
*   g steht für global, it für interne Tabelle, wa für Arbeitsbereich
*   Interne Tabelle sflight
    g_it_sflight  TYPE TABLE OF sflight,
*   rbeitsbereich (Struktur oder Zeile) sflight
    g_wa_sflight  TYPE       sflight.

*   Denermittlung sflight
    SELECT *
      INTO TABLE  g_it_sflight
      FROM sflight.


*   Die Daten werden zeilenweise in den Arbeitsbereich g_wa_sflight
*   gspeichert
    LOOP AT g_it_sflight  INTO g_wa_sflight.

*      Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
       WRITE g_wa_sflight.
*      In nächste Zeile Springen
       NEW-LINE.       


    ENDLOOP.
Zuletzt geändert von Fox am 13.08.2009 10:54, insgesamt 1-mal geändert.

Re: select und write

Beitrag von eddi89 (ForumUser / 22 / 0 / 0 ) »
hey fox!

ich danke dir =)
fast genau so hat es mir meine kollegin heut auch erklärt. einzigster unterschied war, dass nciht alle felder von der tabelle sflight ausgegeben werden sollten.
daher

Code: Alles auswählen.

Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
       WRITE: / g_wa_sflight-carrid
                      g_wa_sflight_connid
                      usw.
2. Übungsaufgabe ABAP/4 – Programmierung
Thema: Selektionsbilder, Ereignisse und Listengestaltung

Erweitere den Report der 1. Aufgabe folgendermaßen:
1. lege ein Selektionsbild an, auf dem der Benutzer diejenige Fluggesellschaft eingeben muss für die er die Flüge sehen möchte.
Verwende den Befehl PARAMETERS
Auf dem Selektionsbild soll vor dem Eingabefeld nicht der Parametername stehen, sondern das Wort „Fluggesellschaft“.

2. Verwende das Ereignis START-OF-SELECTION, um den Verarbeitungsblock zu beginnen.

3. Verwende das Ereignis TOP-OF-PAGE, um Spaltenüberschriften zu erzeugen. Informiere Dich darüber wie man die Werte genau unter diesen Spaltenüberschriften platziert.
das ist die nächste aufgabe^^
select-screen und den parameter darin habe ich ohne weitere probleme hinbekommen. hab leider den quellcode heut nicht auf meinen stick gezogen, sonst könnte ich ihn einmal einfügen.
nach dem selektionsbild wollte ich per IF anweisung ein unterprogramm starten, welches nach korrekter eingabe des parameters (also auswahl einer fluggesellschaft) startet. aber irgendwie tut sich nichts... ansonsten ist mein syntax und alles ok.
sollte etwa so aussehen:

Code: Alles auswählen.

DO.
*Hier startet dann der selection screen usw... weiter solls dann damit gehen:
IF p_carrid = 'AA'. (steht hier für american airline)
PERFORM zds02_sflight.
ELSEIF p_carrid = 'BA'. (British Airline)
PERFORM zds02_sflight.
ELSEIF p_carrid = 'CA'. (Canadian Airline)
PERFORM zds02_sflight.
ELSE.
RETURN.
ENDIF.
ENDDO.

*  Allgemeine Datendefinition
   DATA:
*   g steht für global, it für interne Tabelle, wa für Arbeitsbereich
*   Interne Tabelle sflight
    g_it_sflight  TYPE TABLE OF sflight,
*   rbeitsbereich (Struktur oder Zeile) sflight
    g_wa_sflight  TYPE       sflight.

* Start des Unterprogramms
FORM zds02_sflight

*   Denermittlung sflight
    SELECT *
      INTO TABLE g_it_sflight
      FROM sflight WHERE p_carrid.

*   Die Daten werden zeilenweise in den Arbeitsbereich g_wa_sflight
*   gspeichert
    LOOP AT g_it_sflight  INTO g_wa_sflight.

*      Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
       WRITE g_wa_sflight.
*      In nächste Zeile Springen
       NEW-LINE.       
    ENDLOOP.
ENDFORM.
Das Forum braucht Pretty Print :D

Re: select und write

Beitrag von Fox (ForumUser / 17 / 0 / 0 ) »
Hallo nochmal,

Was du mit der DO-ENDDO Schleife machen willst, ist mir nicht ganz klar, da du ja immer das gleiche Unterprogramm mit den gleichen Daten aufrufst.

Da du ja gerade erst anfängst ABAP zu lernen, solltest du dir angewöhnen deine Programme gut zu strukturieren. Später ergeben sich dadurch viele Vorteile.


Den Parametertext änderst du über den Menüpunkt->Springen->Textelemente->Selektionstexte.

Ich gib dir mal eine ordentliche Lösung ^^.
Im Quellcode stehen hoffentlich sinnvolle erklärende Kommentare für dich.

Hauptprogramm

Code: Alles auswählen.

REPORT  ztestabap_2.

*  Wenn du schon Unterprogramme benutzt, kannst du diese auch in
*  Includes kapseln, ebenso deine Datendefinition
*  Include Endung
*  FXX Unterprogramme
*  TOP Datendefintion
*  MXX Makros
* Datendefinition
  INCLUDE ztestabaptop.
* Unterprogramme
  INCLUDE ztestabapf01.


*----------------------------------------------------------------------*
* Hauptverarbeitung
*----------------------------------------------------------------------*
START-OF-SELECTION.

*   Wenn man schon Unterprogramme benutzt, dann bitte auch mit
*   Schnittstelle
*   Datenermittlung
    PERFORM get_data
              CHANGING
                g_it_sflight.


*   Ausgabe
    PERFORM display_data
              USING
                g_it_sflight.

*----------------------------------------------------------------------*
* Seitenkopf
*----------------------------------------------------------------------*
TOP-OF-PAGE.

*  Hier musst du eben die Überschrift ausgeben, anpassen kannst du es ja
*  selbst
*  Ausgabe Kopf
   WRITE: 'TEST1', 'TEST2'.
   ULINE.

Include Datendefinition.

Code: Alles auswählen.

*----------------------------------------------------------------------*
*   INCLUDE ZTESTABAPTOP                                               *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Datentypen
*----------------------------------------------------------------------*
 TYPES:
*   ty steht für typ
*   Strukturtyp Flugdaten
    ty_sflight  TYPE sflight,
*   Tabellentyp Flugdaten
    ty_t_sflight  TYPE TABLE OF ty_sflight.


*----------------------------------------------------------------------*
* Datenelemente allgemein
*----------------------------------------------------------------------*
 DATA:

*   g steht für global, it für interne Tabelle, wa für Arbeitsbereich
*   Interne Tabelle sflight
    g_it_sflight  TYPE ty_t_sflight.

*----------------------------------------------------------------------*
* Selektionsbild
*----------------------------------------------------------------------*

*  Selektionsbild
   PARAMETERS:
*    PA für Parameters und SO für Selektoptions
*    Fluggesellschaft
     pa_caid  TYPE sflight-carrid.
Include Unterprogramme

Code: Alles auswählen.

*----------------------------------------------------------------------*
***INCLUDE ZTESTABAPF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       Ermittlung der FLugdaten.
*----------------------------------------------------------------------*
*      <--P_IT_SFLIGHT  Flugdaten
*----------------------------------------------------------------------*
FORM get_data CHANGING p_it_sflight  TYPE ty_t_sflight.

*   Denermittlung sflight
    SELECT *
      INTO TABLE  g_it_sflight
      FROM sflight
      WHERE carrid = pa_caid.

ENDFORM.                    " get_data

*&---------------------------------------------------------------------*
*&      Form  display_data
*&---------------------------------------------------------------------*
*       Ausgabe der Flugdaten
*----------------------------------------------------------------------*
*      -->P_IT_SFLIGHT  Flugdaten
*----------------------------------------------------------------------*
FORM display_data USING    p_it_sflight  TYPE ty_t_sflight.

* Lokale Elemente
  DATA:
*   l steht für lokal
    l_wa_sflight  TYPE ty_sflight.

*   Die Daten werden zeilenweise in den Arbeitsbereich g_wa_sflight
*   gspeichert
    LOOP AT p_it_sflight  INTO l_wa_sflight.

*      Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
       WRITE l_wa_sflight.
*      In nächste Zeile Springen
       NEW-LINE.


    ENDLOOP.

ENDFORM.                    " display_data
Gruß,
Fox

Re: select und write

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »

Code: Alles auswählen.

*   Denermittlung sflight
    SELECT *
      INTO TABLE g_it_sflight
        FROM sflight WHERE carrid = p_carrid.

Re: select und write

Beitrag von eddi89 (ForumUser / 22 / 0 / 0 ) »
herlich... genauso wurde es mir heut wieder erklärt^^
nur, dass die gute dame nur ein include benutzt hat für den ganzen "rest".
heute ging´s dann damit weiter, dem selektionsscreen zu erweitern mit "von bis" also über select-options.
soweit geschafft. selektionbild zeigt es an und arbeitet mit den eingaben auch durch where carrid = p_carrid AND p_connid IN g_wa_sflight.

weiter ging die aufgabe mit einer prozentsatzangabe zur sitzplatzbelegung.
rechnung ist klar:
g_seat_percent = seatsocc / seatsmax * 100
allerdings gibt es das feld für die prozemntangabe in der tabelle sflight nicht. dafür aber in der struktur ***400focc (die ersten 3 zeichen weiß ich grad nicht) da hab ich mal wieder kein plan, wie ich das einbauen soll. immer, wenn ich einer der bisherigen tabelle die struktur zuweisen will, meckert er wegen unicode und blaaaaa.
geb ich keine struktur, weigert er sich auch, die prozentangabe zu schrieben ;) is ja klar, das feld gibt esja noch nicht in den bisherigen tabellen.
und wenn ich das geschafft habe, soll ich eine verzweiogungsliste erstellen, welche erst nur die flugnummer connid ausgibt und dann per doppelklick weitere daten zu der nummer. das soll mit hide realisiert werden. erscheint mir noch einfacher, als dasich das mit der struktur hin kriege. also werd ich mich da morgen früh wohl dran machen =)

Re: select und write

Beitrag von Fox (ForumUser / 17 / 0 / 0 ) »
Hallo,

Am besten erstellst du dir eine eigene Struktur in der se11 und übernimmst alle Felder der Tabelle sflight manuell ( oder includierst diese Tabelle) und fügst ein zusätzliches Feld hinzu, wo du deinen Prozent Wert abspeichern kannst. Danach selektierst du alles wie bisher bis auf auf einen Unterschied. Du definierst deine interne Tabelle über deine neue Struktur und beim Selectbefehl musst du statt "into table" -> "into corresponding fields of table" verwenden. Dieser Zusatz bewirkt, dass nur gleichnamige Felder deiner Struktur mit gleichnamigen Komponenten der Datenbaktabelle übernommen werden.

Wichtig: Hierbei wird nicht auf den Datentypen geachtet.

Bsp.: Dein Feld connid deiner neuen Struktur hat den Datentyp Char und die Länge 2. Das Feld connid der Tabelle hat den Datentyp Char und die Länge 10. Beim übernehmen der Daten werden 8 Stellen weggeschnitten ohne Fehlermeldung.

Um den neuen Wert deiner internen Tabellen zu ändern/hinzuzufügen gibt es verschiedene Möglichkeiten (Ich zeige dir 2).

Meine neue Struktur: ZSFLIGHT_S mit den Zusatzfeld Prozent.

1.Möglichkeit - Daten direkt im Select-Befehl errechnen lassen.

Code: Alles auswählen.

*  Datendefintion
   DATA:
      g_it_sflight  TYPE TABLE OF zsflight_s,
      g_wa_sflight  TYPE          zsflight_s.

*  Beim Selectbefehl das Zusatzfeld errechnen
   SELECT *
     FROM sflight
     INTO CORRESPONDING FIELDS OF g_wa_sflight.

*    Feld berechnen
     g_wa_sflight-prozent = g_wa_sflight-seatsocc /
                            g_wa_sflight-seatsmax * 100.

*    Feldhinzufügen
     APPEND g_wa_sflight TO g_it_sflight.

  ENDSELECT.
2. Möglichkeit - Nach dem Selectbefehl

Da dir Feldsymbole wahrscheinlich noch nichts sagen werden, zeige ich dir die etwas einfachere Möglichkeit

Code: Alles auswählen.

*  Datendefintion
   data:
      g_it_sflight  type table of zsflight_s,
      g_wa_sflight  type          zsflight_s,
*     Zählt nachher die Schleifendurchläufe
      l_counter     type          i.

*  Beim Selectbefehl das Zusatzfeld errechnen
   select *
     from sflight
     into corresponding fields of table g_it_sflight.

  loop at g_it_sflight  into g_wa_sflight.

*    Nur am Anfang der Schleife, sollte man den sy-tabix abfragen,
*    da das System den Wert nach jeden Befehl ändern kann.
*    Sy-TAbix wird am Beginn jeder Schleife auf den Index der aktuellen 
*    Zeile gesetzt.
     l_counter = sy-tabix.

*    Feld berechnen
     g_wa_sflight-prozent = g_wa_sflight-seatsocc /
                            g_wa_sflight-seatsmax * 100..

     modify g_it_sflight  from g_wa_sflight index l_counter.

  endloop.
Diese Aufgaben versetzen einen gleich wieder in die Anfangszeit zurück. Die Aufgaben mit den Fluggesellschaften hab ich nie gemocht....

Gruß,
Foc

Re: select und write

Beitrag von eddi89 (ForumUser / 22 / 0 / 0 ) »
hab ich gut gemacht, oder nciht??^^

Code: Alles auswählen.

REPORT  zds_aufgabe04.                                              .

TABLES: vbak, vbap.

TYPES: BEGIN OF str_vbak,
         vbeln TYPE vbak-vbeln,
         erdat TYPE vbak-erdat,
         ernam  TYPE vbak-ernam,
         vbtyp TYPE vbak-vbtyp,
         vkorg TYPE vbak-vkorg,
         vtweg TYPE vbak-vtweg,
         spart  TYPE vbak-spart,
       END OF str_vbak.

TYPES: BEGIN OF str_vbap,
        vbeln TYPE vbap-vbeln,
        posnr TYPE vbap-posnr,
        matnr TYPE vbap-matnr,
        pstyv TYPE vbap-pstyv,
        uepos TYPE vbap-uepos,
       END OF str_vbap.

DATA: curserfield(30),
      first(30),
      field(30),
      feldname(30),
sortierart TYPE c.

DATA: tbl_vbak TYPE TABLE OF str_vbak,
      wa_vbak TYPE str_vbak,
      wa_vbap TYPE str_vbap.

*  Auswahloptionen
SELECT-OPTIONS: p_vbeln FOR vbak-vbeln,
                p_erdat FOR vbak-erdat,
                p_ernam FOR vbak-ernam,
                p_vbtyp FOR vbak-vbtyp,
                p_vkorg FOR vbak-vkorg,
                p_vtweg FOR vbak-vtweg,
                p_spart FOR vbak-spart.

***  Hauptablauf
START-OF-SELECTION.
  SET PF-STATUS 'SORTIEREN'.
  PERFORM selektion.
  PERFORM ausgabe.

TOP-OF-PAGE.
  PERFORM topofpage.

*---------------------------------------------------------------------*
*  FORM TopOfPage
*---------------------------------------------------------------------*
*  Spaltenüberschrift
FORM topofpage.
  SET TITLEBAR 'VERTRIEBSBELEGE'.
  WRITE: / 'Vertriebsbelegnr.',
                 20 'Erfassungsdt.',
                 40 'Erfassername',
                 60 'Vertriebsbelegtyp',
                 85 'Verkaufsorg.',
                 105 'Vertriebsweg',
                 125 'Sparte'.
  ULINE.
ENDFORM.                                    "TopOfPage


*---------------------------------------------------------------------*
*  FORM Selektion
*---------------------------------------------------------------------*
FORM selektion.
*  Datenselektion
  SELECT * FROM vbak INTO CORRESPONDING FIELDS OF TABLE tbl_vbak
             WHERE vbeln IN p_vbeln AND
                   erdat IN p_erdat AND
                   ernam IN p_ernam AND
                   vbtyp IN p_vbtyp AND
                   vkorg IN p_vkorg AND
                   vtweg IN p_vtweg AND
                   spart IN p_spart.
ENDFORM.                                          "selektion

*---------------------------------------------------------------------*
*  FORM Ausgabe
*---------------------------------------------------------------------*
*  Liste ausgeben
FORM ausgabe.
  LOOP AT tbl_vbak INTO wa_vbak.
    WRITE: /
       wa_vbak-vbeln UNDER 'Vertriebsbelegnr.',
       wa_vbak-erdat UNDER 'Erfassungsdt.',
       wa_vbak-ernam UNDER 'Erfassername',
       wa_vbak-vbtyp UNDER 'Vertriebsbelegtyp',
       wa_vbak-vkorg UNDER 'Verkaufsprg.',
       wa_vbak-vtweg UNDER 'Vertriebsweg',
       wa_vbak-spart UNDER 'Sparte'.

    HIDE: wa_vbak-vbeln.
  ENDLOOP.
ENDFORM.                                            "Ausgabe

* 1. Verzweigungsliste
*---------------------------------------------------------------------*
*  FORM lineselect
*---------------------------------------------------------------------*
FORM lineselect.
  IF sy-lsind < 2.

    SET PF-STATUS space.

    SELECT DISTINCT vbeln posnr matnr pstyv uepos FROM vbap
           INTO CORRESPONDING FIELDS OF wa_vbap
           WHERE vbeln = wa_vbap-vbeln
           AND vbeln IS NOT NULL
           ORDER BY posnr ASCENDING.

      WRITE: / wa_vbap-vbeln UNDER 'Verkaufsbelegnr.',
               wa_vbap-posnr UNDER 'Verkaufsbelegpos.',
               wa_vbap-matnr UNDER 'Materialnr.',
               wa_vbap-pstyv UNDER 'Positionstyp',
               wa_vbap-uepos UNDER 'Stücklistenstruktur'.

    ENDSELECT.

  ENDIF.
ENDFORM.                                              "lineselect

AT USER-COMMAND.

  GET CURSOR FIELD curserfield.
  SPLIT curserfield AT '-' INTO first field.

  CASE sy-ucomm.
    WHEN 'BACK'.
      RETURN.
    WHEN 'CANCEL'.
      EXIT.
    WHEN 'SORTAUF'.
      sy-lsind = sy-lsind - 1.
      sortierart = 'A'.
      SORT tbl_vbak BY (field) ASCENDING.
      PERFORM topofpage.
      PERFORM ausgabe.

    WHEN 'SORTAB'.
      sy-lsind = sy-lsind - 1.
      sortierart = 'D'.
      SORT tbl_vbak BY (field) DESCENDING.
      PERFORM topofpage.
      PERFORM ausgabe.
  ENDCASE.

AT LINE-SELECTION.

  PERFORM lineselect.

TOP-OF-PAGE DURING LINE-SELECTION.
  SET TITLEBAR 'VERZWEIGUNGSLISTE'.
  IF sy-lsind = 0.

    CASE field.
      WHEN 'VBELN'.
        feldname = 'Vertriebsbelegnummer'.
      WHEN 'ERDAT'.
        feldname = 'Erfassungsdatum'.
      WHEN 'ERNAM'.
        feldname = 'Erfassername'.
      WHEN 'VBTYP'.
        feldname = 'Vertriebsbelegtyp'.
      WHEN 'VKORG'.
        feldname = 'Verkaufsorganisation'.
      WHEN 'VTWEG'.
        feldname = 'Vertriebsweg'.
      WHEN 'SPART'.
        feldname = 'Sparte'.
    ENDCASE.

    WRITE: /
    'Sortiert nach',feldname.
    ULINE.
  ENDIF.

  IF sy-lsind = 1.

    WRITE: /
          'Verkaufsbelegnr.',
          20 'Verkaufsbelegpos.',
          65 'Materialnr.',
          80 'Positionstyp',
         100 'Stücklistenstruktur'.
    ULINE.
  ENDIF.

Seite 1 von 1

Vergleichbare Themen

7
Antw.
4350
Views
write ... under
von Gast » 19.04.2005 15:40 • Verfasst in ABAP® für Anfänger
2
Antw.
1994
Views
RFC Funktionsbaustein mit WRITE
von Ralph » 09.03.2006 14:17 • Verfasst in ABAP® Core
2
Antw.
14805
Views
WRITE und NEW-LINE
von dyv » 08.09.2014 14:34 • Verfasst in ABAP® für Anfänger
2
Antw.
9743
Views
Write Uhrzeit
von ABAP_BEGINNER » 04.06.2010 14:50 • Verfasst in ABAP® für Anfänger
1
Antw.
1146
Views
Inverser write to...
von cosmo » 22.10.2004 08:45 • Verfasst in ABAP® Core

Über diesen Beitrag


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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141