Struktur erweitern

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

Struktur erweitern

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Zusammen!

Ich möchte meine eigen Struktur ZMYSTRUKTUR um eine eigene Spalte erweitern (Result), sodaß ich sie im ALV ausgeben kann.

Die Berechnung die ich in der Case Anweisung ausführe ist nicht korrekt. Dient nur zur Darstellung meines Problems, daß in der Spalte Result dann gerechnet werden soll.

Vielen Dank für Eure Hilfe!

Schöne Grüße

Robin

Code: Alles auswählen.

REPORT zsumla.

TYPE-POOLS slis.

TABLES: lfa1, bseg, bkpf, bsik, bsak, zdlkz_t.

DATA: wa_lfa1 TYPE lfa1,
      wa_zdlkz_t TYPE zdlkz_t,
      wa_bkpf TYPE bkpf,
      wa_bsak TYPE bsak,
      wa_bsik TYPE bsik.

DATA: BEGIN OF itab_sumla OCCURS 10,
        lifnr LIKE lfa1-lifnr,
        land1 LIKE lfa1-land1,
        diekz LIKE bsak-diekz,
        belnr LIKE bsak-belnr,
        zuonr LIKE bsak-zuonr,
        blart LIKE bsak-blart,
        bukrs LIKE bsak-bukrs,
        monat LIKE bsak-monat,
        gjahr LIKE bsak-gjahr,
        shkzg LIKE bsak-shkzg,
        bschl LIKE bsak-bschl,
        dmbtr LIKE bsak-dmbtr,
        wrbtr LIKE bsak-wrbtr,
        zdlkz LIKE zdlkz_t-zdlkz,
        bezeichnung LIKE zdlkz_t-bezeichnung,
      END OF itab_sumla.

DATA: my_fieldcat TYPE slis_t_fieldcat_alv,
      wa_layout   TYPE slis_layout_alv,
      wa_fieldcat LIKE LINE OF my_fieldcat,
      repid TYPE sy-repid.

DATA result TYPE p DECIMALS 2.

SELECT-OPTIONS: so_land FOR lfa1-land1,
                so_perio FOR bkpf-monat.

PARAMETERS pa_gj LIKE bseg-gjahr.

SELECT-OPTIONS: so_dlkz FOR zdlkz_t-zdlkz.

START-OF-SELECTION.
*##################

  SELECT lifnr land1
  FROM lfa1 INTO CORRESPONDING FIELDS OF wa_lfa1
  WHERE land1 IN so_land.
    MOVE-CORRESPONDING wa_lfa1 TO itab_sumla.
    SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs shkzg dmbtr
    wrbtr bschl
    FROM bsak INTO CORRESPONDING FIELDS OF wa_bsak
    WHERE lifnr = wa_lfa1-lifnr
    AND gjahr = pa_gj
    AND monat IN so_perio
    AND shkzg IN ('S', 'H')
    AND bukrs IN ('1001')
    AND blart IN ('A1', 'A2', 'A3').
      MOVE-CORRESPONDING wa_bsak TO itab_sumla.
     SELECT lifnr zuonr gjahr belnr monat blart diekz bukrs shkzg dmbtr
       wrbtr bschl
       FROM bsik INTO CORRESPONDING FIELDS OF wa_bsik
       WHERE lifnr = wa_lfa1-lifnr
       AND shkzg = wa_bsak-shkzg
       AND blart = wa_bsak-blart
       AND bukrs = wa_bsak-bukrs
       AND bschl = wa_bsak-bschl
       AND monat IN so_perio
       AND gjahr = pa_gj.
        MOVE-CORRESPONDING wa_bsik TO itab_sumla.
        SELECT zdlkz bezeichnung
        FROM zdlkz_t INTO CORRESPONDING FIELDS OF wa_zdlkz_t
        WHERE zdlkz IN so_dlkz.
          MOVE-CORRESPONDING wa_zdlkz_t TO itab_sumla.
          APPEND itab_sumla.
        ENDSELECT.
      ENDSELECT.
    ENDSELECT.
    CLEAR itab_sumla.
  ENDSELECT.

  IF sy-subrc <> 0.
    MESSAGE i819(3f).
*   Keine Daten im gewählten Zeitraum vorhanden
  ENDIF.

  CASE bsak-shkzg.
    WHEN 'S'.
      result = bsak-dmbtr - bsak-wrbtr.
    WHEN 'H'.
      result = bsak-wrbtr - bsak-dmbtr.
  ENDCASE.

  wa_layout-colwidth_optimize = 'X'.

  repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            i_program_name         = sy-repid
            i_structure_name       = 'ZMYSTRUKTUR'
       CHANGING
            ct_fieldcat            = my_fieldcat
       EXCEPTIONS
            inconsistent_interface = 1
            program_error          = 2
            OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE e707(69).
*   Lesefehler
  ENDIF.

  DELETE my_fieldcat WHERE NOT ( fieldname = 'BLART'
                               OR  fieldname = 'ZDLKZ'
                               OR  fieldname = 'LAND1'
                               OR  fieldname = 'GJAHR'
                               OR  fieldname = 'SHKZG'
                               OR  fieldname = 'DMBTR'
                               OR  fieldname = 'WRBTR'
                               OR  fieldname = 'MONAT').

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            is_layout     = wa_layout
            it_fieldcat   = my_fieldcat
       TABLES
            t_outtab      = itab_sumla
       EXCEPTIONS
            program_error = 1
            OTHERS        = 2.
  IF sy-subrc <> 0.
    MESSAGE e707(69).
*   Lesefehler
  ENDIF.

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Robin,

sei mir nicht böse, aber Du musst Dich dringend mit 'SELECT ... INTO TABLE itab.' in Verbindung mit nachfolgenden 'SELECT ... INTO ... FOR ALL ENTRIES IN itab WHERE ...' beschäftigen.

Zusätzlich solltest Du Dich auch mit den Join's beschäfftigen.

Diesen 4-fach geschachtelten SELECT-Block kann man so nicht stehen lassen, auch wenn er funktioniert.
Abgesehen davon bekommst Du falsche Ergebnisse (fehlende offene Posten), wenn es keine ausgezifferten Posten zum Lieferanten gibt.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Ereglam!

Okay, habe einen Join daraus gemacht. Danke für den Hinweis, denn jetzt sieht die Tabelle auch anders aus.

Aber wie kann ich da jetzt noch die Tabelle zdlkz_t dazu verknüpfen?

Denn genau deswegen hatte ich eigentlich den geschachtelten Select.

Kannst Du mir bitte helfen.

Danke

Robin

Code: Alles auswählen.

SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
  b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
  INTO TABLE itab_sumla
  FROM ( lfa1 AS a
              INNER JOIN bsak AS b
                ON a~lifnr = b~lifnr )
  WHERE land1 IN so_land
  AND gjahr = pa_gj
  AND monat IN so_perio
  AND shkzg IN ('S', 'H')
  AND bukrs IN ('1001')
  AND blart IN ('A1', 'A2', 'A3').
  
 SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat
  b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr
  INTO TABLE itab_sumla
  FROM ( lfa1 AS a
              INNER JOIN bsik AS b
                ON a~lifnr = b~lifnr )
  WHERE land1 IN so_land
  AND gjahr = pa_gj
  AND monat IN so_perio
  AND shkzg IN ('S', 'H')
  AND bukrs IN ('1001')
  AND blart IN ('A1', 'A2', 'A3').

SELECT zdlkz 
into corresponding fields of wa_zdlkz_t
FROM zdlkz_t  
WHERE zdlkz in so_dlkz.
APPEND wa_zdlkz_t to itab_sumla.
endselect.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Robin,

Code: Alles auswählen.

SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat 
  b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr 
  INTO TABLE itab_sumla 
  FROM ( lfa1 AS a 
              INNER JOIN bsak AS b 
                ON a~lifnr = b~lifnr ) 
  WHERE land1 IN so_land 
  AND gjahr = pa_gj 
  AND monat IN so_perio 
  AND shkzg IN ('S', 'H') "sind denn andere Werte zulässig?
  AND bukrs IN ('1001') 
  AND blart IN ('A1', 'A2', 'A3'). 
  
 SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat 
  b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr 
  APPENDING TABLE itab_sumla "hier musst Du hinten anhängen (INTO ersetzt bisherige Werte)
  FROM ( lfa1 AS a 
              INNER JOIN bsik AS b 
                ON a~lifnr = b~lifnr ) 
  WHERE land1 IN so_land 
  AND gjahr = pa_gj 
  AND monat IN so_perio 
  AND shkzg IN ('S', 'H')  "sind denn andere Werte zulässig?
  AND bukrs IN ('1001') 
  AND blart IN ('A1', 'A2', 'A3'). 

* Welche Verbindung gibt es denn zwischen zdlkz_t und den Belegen?
* nachfolgender Code ist so definitiv falsch
* SELECT zdlkz 
* into corresponding fields of wa_zdlkz_t 
* FROM zdlkz_t  
* WHERE zdlkz in so_dlkz. 
* APPEND wa_zdlkz_t to itab_sumla. 
* endselect.
Wenn es eine Verbindung zwischen ZDLKZ_T und den Belegen gibt, muss noch für beide Primärselects ein LEFT OUTER JOIN für die zdlkz_t ergänzt werden.
Oder gibt es dort irgendwo in der BSIK, BSAK und/oder BSEG ein Feld zdlkz?

Code: Alles auswählen.

SELECT a~lifnr a~land1 b~diekz b~belnr b~zuonr b~blart b~bukrs b~monat 
  b~gjahr b~shkzg b~bschl b~dmbtr b~wrbtr z~benennung
  INTO TABLE itab_sumla 
  FROM ( lfa1 AS a 
           INNER JOIN ( bsak AS b 
                ON a~lifnr = b~lifnr 
           LEFT OUTER JOIN zdlkz_t AS z 
                on z~zdlkz = b~zdlkz ) )
  WHERE land1 IN so_land 
  AND gjahr = pa_gj 
  AND monat IN so_perio 
  AND shkzg IN ('S', 'H') "sind denn andere Werte zulässig?
  AND bukrs IN ('1001') 
  AND blart IN ('A1', 'A2', 'A3'). 
PS: den Code habe ich jetzt nicht auf syntaktische Richtigkeit geprüft
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Ereglam!

Das ist genau das Probelm.

In der zdlkz_t stehen nur:

Mandant, Dienstleistungskennzeichen, und die Bezeichnung vom Dienstleistungskennzeichen. Es gibt noch die Spalte diekz in der BSAK, BSIK und BSEG.

Wegen dieser Tabelle habe ich den geschachtelten Select genommen, weil ich nicht wußte wie ich diese Tabelle sonst miteinbeziehe.

War eh auch gerade am basteln des left outer join, aber noch nicht wirklich weitergekommen.

Vielen Dank für Deine Hilfe!!!! :)

Robin

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Robin,

beziehen sich die Benennungen in der ZDLKZ_T auf das Dienstleistungskennzeichen (diekz) der BSEG et al.?

Wenn ja, dann ist das Deine Verbindung, wenn nicht, macht die Aufgabe somit keinen Sinn.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo Ereglam!

Ja, ich nehme an das sich das auf die diekz bezieht.

Weist Du was da genau drinnen steht in der bseg?

in meinem zdlkz stehen drinnen: 2070, 2080, ... (Transport Seefracht, ....)

Habe gerade den left outer join probiert, aber funktioniert leider nicht so wie ich will. :cry:

Danke

Robin

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
ne, inhaltlich kann ich dazu keine Information liefern.

Du wirst Dich wohl mal mit Deinem Auftraggeber unterhalten müssen, ob die Verbindung so die Richtige ist.
Als Außenstehende können wir nur mutmaßen.

PS:
schau doch mal mit der SE16 jeweils in die BSEG/BSIK/BSAK und die ZDLKZ_T. Findest Du die Werte in den Belegtabellen wieder.

Abgesehen davon, wurden denn die Daten zu 'diekz' aus der BSEG auch korrekt in die jeweiligen Felder der BSIK/BSAK übertragen.
Wenn nicht, kann Dein SELECT auch nicht funktionieren.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hallo!

Ja, die Felder passen zusammen.

Wenn ich mir die Tabellen ansehe, steht in der diekz nicht drinnen. Schätze darum gibt es die Kundeneigene Tabelle zdlkz_t wo diese gepglegt werden.

Wenn ich die zdlkz_t mit einem "normalen" select an die itab_sumla anhängen will, kommt die Meldung, daß itab_sumla keine Kopfzeile hat. Würde Dir dazu noch was einfallen, wie ich das umgehen könnte?

Danke

Robin

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
robin1at hat geschrieben:Hallo!

Ja, die Felder passen zusammen.

Wenn ich mir die Tabellen ansehe, steht in der diekz nicht drinnen. Schätze darum gibt es die Kundeneigene Tabelle zdlkz_t wo diese gepglegt werden.
gibt es denn bei Euch eine Tabelle ZDLKZ (oder ähnliches), in der die Verbindung von Belegposition zu 'diekz' oder 'zdlkz' steht?
robin1at hat geschrieben:Wenn ich die zdlkz_t mit einem "normalen" select an die itab_sumla anhängen will, kommt die Meldung, daß itab_sumla keine Kopfzeile hat. Würde Dir dazu noch was einfallen, wie ich das umgehen könnte?
Ein Anhängen der ZDLKZ_T macht doch überhaupt keinen Sinn, denn Du willst doch zu einer Belegposition mit einem Dienstleistungskennzeichen, den dazugehörigen Text anzeigen, oder?

Also musst Du schon zur jeweiligen Position die Benennung zu einem geeigneten Zeitpunkt lesen, um sie in der entsprechenden Tabellenzeile von itab_sumla einfügen zu können.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1898
Views
Struktur als Kopie von vorhandener Struktur anlegen
von Marwin » 20.04.2005 15:29 • Verfasst in ABAP® Core
1
Antw.
575
Views
7
Antw.
4126
Views
Workbench erweitern
von Roberto » 27.08.2008 10:36 • Verfasst in SAP - Allgemeines
2
Antw.
1878
Views
@Jan - bitte erweitern
von black_adept » 16.09.2005 13:13 • Verfasst in Material Management & Produktionsplanung
7
Antw.
2996
Views
itab erweitern
von Gast » 07.05.2005 21:30 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 57 Minuten von edwin 7 / 160
Daten an Tabelle binden
vor 14 Stunden von Bright4.5 3 / 1485

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 57 Minuten von edwin 7 / 160
Daten an Tabelle binden
vor 14 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

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