Bitte Coding ansehen ....

Getting started ... Alles für einen gelungenen Start.
20 Beiträge • Seite 1 von 2 (current) Nächste
20 Beiträge Seite 1 von 2 (current) Nächste

Bitte Coding ansehen ....

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

Da ich noch kein ABAP Experte bin, bitte ich Euch über mein Coding zu sehen.

Ich möchte mit diesem Coding unter anderem erreichen, daß die Tabelle bsak mit der Spalte zuonr mit der Tabelle zdlkz_t und der spalte zdlkz verglichen wird, und wenn übereinstimmungen sind, dann in der spalte zdlkz die daten von der tabelle zdlkz_t-zdlkz eingetragen werden.

z.B.: in bsak-zuonr steht 2080
2080 gibt es in der tabelle zdlkz_t-zdlkz, also nimm diesen wert von zdlkz_t-zdlkz.

Bitte schaut Euch mal mein Coding an, ob das so paßt. Bei meinem ersten Select bin ich mir auch nicht so sicher, ober der so stimmt.

Die Abfrage auf Übereinstimmigkeit, mache ich mit einer IF Abfrage.

Vielen Dank für Eure Hilfe!!

Schöne Grüße

Robin

Code: Alles auswählen.

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,
        soha TYPE p DECIMALS 2,
        soll TYPE p DECIMALS 2,
        haben TYPE p DECIMALS 2,
        zahler TYPE i,
      END OF itab_sumla.

DATA: wa_soha LIKE LINE 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.

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 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.

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 bukrs IN ('1001')
            AND blart IN ('A1', 'A2', 'A3')
            AND land1 IN so_land
            OR land1 = space
            AND gjahr = pa_gj
            OR gjahr = space
            AND monat IN so_perio
            OR monat = space.
  APPEND itab_sumla.

 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 bukrs IN ('1001')
            AND blart IN ('A1', 'A2', 'A3')
            AND land1 IN so_land
            OR land1 = space
            AND gjahr = pa_gj
            OR gjahr = space
            AND monat IN so_perio
            OR monat = space.

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

* wa_soha-.... weil durch DATA Deklaration wa_soha

  LOOP AT itab_sumla INTO wa_soha.

    IF wa_soha-shkzg = 'H'.
      wa_soha-haben = wa_soha-dmbtr.
    ELSE.
      wa_soha-soll = wa_soha-dmbtr.
    ENDIF.

    wa_soha-soha = wa_soha-haben - wa_soha-soll.

    IF wa_soha-zuonr = space.    " wird wa_soha-zdlkz!!
      wa_soha-zahler = 1.
    ELSE.
      wa_soha-zahler = 0.
    ENDIF.

    IF wa_soha-zuonr = wa_soha-zdlkz.
      wa_soha-zdlkz = wa_soha-zuonr.
    ELSE.
      wa_soha-zdlkz = space.
    ENDIF.

    MODIFY itab_sumla FROM wa_soha TRANSPORTING soll.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING haben.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING soha.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING zahler.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING zdlkz.

  ENDLOOP.

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


Re: Bitte Coding ansehen ....

Beitrag von Gast ( / / 0 / 3 ) »
robin1at hat geschrieben:

Code: Alles auswählen.

    MODIFY itab_sumla FROM wa_soha TRANSPORTING soll.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING haben.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING soha.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING zahler.
    MODIFY itab_sumla FROM wa_soha TRANSPORTING zdlkz.
Warum 5 MODIFY-Anweisungen statt einer?

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

Danke für Deine Antwort.

Du meinst so funktioniert es auch:

MODIFY itab_sumla FROM wa_soha TRANSPORTING soll haben soha zahler zdlkz.

Was sagst Du zum Rest vom Coding. Paßt das so?

Danke

Robin

[/code]

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Hast du 2mal den gelichen Selekt direckt hintereinander? Wenn ja, wieso?

Und noch was zum Selekt:
SEHR GENAU AUF "AND" UND "OR" ACHTEN!
Bei Mathe gilt "Punkt vor Strich",
bei SQL gilt "AND vor OR"!

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hi,

Alles ohne Gewähr :?

- Tables-Anweisung ist obsolet ( wobei i.d.R. in Dialoganwendungen eingesetzt )

- erster Select
warum keinen Array-Fetch ("INTO CORRESPONDING FIELDS OF TABLE itab_sumla )?

- zweiter Select schreibt "INTO TABLE itab_sumla".
Damit sind die Werte aus dem ersten Select wieder futsch. Alternative "APPENDING TABLE ...."

- dritter Select s. DeathGuardian

- Klammersetzung bei AND / OR s. DeathGuardian

-

Code: Alles auswählen.

    IF wa_soha-zuonr = wa_soha-zdlkz. 
      wa_soha-zdlkz = wa_soha-zuonr. 
    ELSE. 
      wa_soha-zdlkz = space. 
    ENDIF. 


wieso nicht

Code: Alles auswählen.

    
    IF wa_soha-zuonr <> wa_soha-zdlkz. 
      wa_soha-zdlkz = space. 
    ENDIF. 
- Modify s. Gast.


Gruß,
Olli

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

Danke für Deine Antwort!

Nein, sind nicht ganz identisch. Weil ich nicht über die BSEG auf die Daten zugreifen will und kann (sehr groß, Cluster Tabelle), habe ich mir gedacht ich greife einmal über BSAK und einmal über BSIK auf die Daten zu. Und damit nichts ausgelassen wird, mache ich den join über beide Tabellen.

Kannst Du mir noch sagen, ob der Vergleich mit der IF Anwendung so funktionieren kann?

Danke

Robin

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Ups, habe den dritten Select wohl auch falsch gelesen... schon zwei Blinde hier :lol:

Gruß,
Olli

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

Danke für Deine Antwort!

Blind sind wir alle mal. :)

Das mit Corresponding ... werde ich gleich mal probieren beim ersten Select. Was hast Du gemeint mit Klammersetzung bei AND / OR ?

Vielen vielen Dank für Eure Hilfe!!

Warum ich so "dumm" Frage kommt daher, da ich erst seit ca. einem Monat ABAP Programmiere und vorher auch erst ca. vor einem Jahr mit dem Programmieren begonnen habe. Und mir einfach noch nicht sicher bin, ob ich alles richtig verstehe was ich in den Kursen und Kursunterlagen gelernt habe.

Schöne Grüße

Robin

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Nochmal hallo Olli!

Noch eine Frage zu Appending Table. Paßt das nun so, in meinen geänderten Select´s?

Danke

Robin

Code: Alles auswählen.

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

  SELECT zdlkz bezeichnung
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_sumla
  WHERE zdlkz IN so_dlkz
  OR zdlkz = space.
  APPEND itab_sumla.

 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 bukrs IN ('1001')
                 AND blart IN ('A1', 'A2', 'A3')
                 AND land1 IN so_land
                 OR land1 = space
                 AND gjahr = pa_gj
                 OR gjahr = space
                 AND monat IN so_perio
                 OR monat = space.
  APPEND itab_sumla.

 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 bukrs IN ('1001')
                 AND blart IN ('A1', 'A2', 'A3')
                 AND land1 IN so_land
                 OR land1 = space
                 AND gjahr = pa_gj
                 OR gjahr = space
                 AND monat IN so_perio
                 OR monat = space.

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

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
robin1at hat geschrieben: Was hast Du gemeint mit Klammersetzung bei AND / OR ?
das ist gemeint damit:
SEHR GENAU AUF "AND" UND "OR" ACHTEN!
Bei Mathe gilt "Punkt vor Strich",
bei SQL gilt "AND vor OR"!

Und nochwas: (wurde auch schon erwähnt)
Wenn du eine gefühlte ITAB hast und machst dann eine "SELECT INTO TABLE ITAB" wird die komplette ITAB überschrieben, sprich die Daten davor sind weg.
Wenn die Daten aber behalten willst musst ein "SELECT APPENDING TABLE ITAB" machen.

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Hi Death!

"SELECT APPENDING TABLE ITAB"
Ist das etwas anderes als mein "Append itab_sumla"?

Oder müßte es dann so lauten:

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 CORRESPONDING FIELDS OF TABLE itab_sumla 
                 FROM ( lfa1 AS a 
                             INNER JOIN bsak AS b 
                             ON a~lifnr = b~lifnr ) 
                 WHERE bukrs IN ('1001') 
                 AND blart IN ('A1', 'A2', 'A3') 
                 AND land1 IN so_land 
                 OR land1 = space 
                 AND gjahr = pa_gj 
                 OR gjahr = space 
                 AND monat IN so_perio 
                 OR monat = space. 
  APPEND itab_sumla. 

Beitrag von robin1at (Specialist / 190 / 0 / 0 ) »
Jetzt nochmal der ganze Select geändert.

Hoffe Ihr könnt mir mit der Append Regel nochmals helfen, falls es noch immer falsch ist.

Danke

Robin

Code: Alles auswählen.

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

  SELECT zdlkz bezeichnung
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_sumla
  WHERE zdlkz IN so_dlkz
  OR zdlkz = space.
  APPEND itab_sumla.

 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 CORRESPONDING FIELDS OF TABLE itab_sumla
                    FROM ( lfa1 AS a
                                INNER JOIN bsak AS b
                                ON a~lifnr = b~lifnr )
                    WHERE bukrs IN ('1001')
                    AND blart IN ('A1', 'A2', 'A3')
                    AND land1 IN so_land
                    OR land1 = space
                    AND gjahr = pa_gj
                    OR gjahr = space
                    AND monat IN so_perio
                    OR monat = space.
  APPEND itab_sumla.

 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 CORRESPONDING FIELDS OF TABLE itab_sumla
                    FROM ( lfa1 AS a
                                INNER JOIN bsik AS b
                                ON a~lifnr = b~lifnr )
                    WHERE bukrs IN ('1001')
                    AND blart IN ('A1', 'A2', 'A3')
                    AND land1 IN so_land
                    OR land1 = space
                    AND gjahr = pa_gj
                    OR gjahr = space
                    AND monat IN so_perio
                    OR monat = space.

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

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »

Code: Alles auswählen.

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

  SELECT zdlkz bezeichnung 
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_sumla 
  WHERE zdlkz IN so_dlkz 
  OR zdlkz = space. 

* --->  APPEND itab_sumla.    überflüssig

 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 CORRESPONDING FIELDS OF TABLE itab_sumla 
                    APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla 

                    FROM ( lfa1 AS a 
                                INNER JOIN bsak AS b 
                                ON a~lifnr = b~lifnr ) 
                    WHERE bukrs IN ('1001') 
                    AND blart IN ('A1', 'A2', 'A3') 
                    AND land1 IN so_land 
                    OR land1 = space 
                    AND gjahr = pa_gj 
                    OR gjahr = space 
                    AND monat IN so_perio 
                    OR monat = space. 
* --->  APPEND itab_sumla. überflüssig

 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 CORRESPONDING FIELDS OF TABLE itab_sumla 
      APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla
                    FROM ( lfa1 AS a 
                                INNER JOIN bsik AS b 
                                ON a~lifnr = b~lifnr ) 
                    WHERE bukrs IN ('1001') 
                    AND blart IN ('A1', 'A2', 'A3') 
                    AND land1 IN so_land 
                    OR land1 = space 
                    AND gjahr = pa_gj 
                    OR gjahr = space 
                    AND monat IN so_perio 
                    OR monat = space. 

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

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Klammersetzung, so wie ich die Semantik interpretiere...

Code: Alles auswählen.

 WHERE bukrs IN ('1001') 
         AND blart IN ('A1', 'A2', 'A3') 
         AND ( land1 IN so_land OR
               land1 = space )
         AND ( gjahr = pa_gj OR
               gjahr = space )
         AND ( monat IN so_perio OR
               monat = space ). 
Gruß,
Olli

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
olli-x hat geschrieben:

Code: Alles auswählen.

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

  SELECT zdlkz bezeichnung 
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_sumla 
  WHERE zdlkz IN so_dlkz 
  OR zdlkz = space. 

* --->  APPEND itab_sumla.    überflüssig

 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 CORRESPONDING FIELDS OF TABLE itab_sumla 
                    APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla 

                    FROM ( lfa1 AS a 
                                INNER JOIN bsak AS b 
                                ON a~lifnr = b~lifnr ) 
                    WHERE bukrs IN ('1001') 
                    AND blart IN ('A1', 'A2', 'A3') 
                    AND land1 IN so_land 
                    OR land1 = space 
                    AND gjahr = pa_gj 
                    OR gjahr = space 
                    AND monat IN so_perio 
                    OR monat = space. 
* --->  APPEND itab_sumla. überflüssig

 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 CORRESPONDING FIELDS OF TABLE itab_sumla 
      APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla
                    FROM ( lfa1 AS a 
                                INNER JOIN bsik AS b 
                                ON a~lifnr = b~lifnr ) 
                    WHERE bukrs IN ('1001') 
                    AND blart IN ('A1', 'A2', 'A3') 
                    AND land1 IN so_land 
                    OR land1 = space 
                    AND gjahr = pa_gj 
                    OR gjahr = space 
                    AND monat IN so_perio 
                    OR monat = space. 

  IF sy-subrc <> 0. 
    MESSAGE i819(3f). 
*   Keine Daten im gewählten Zeitraum vorhanden 
  ENDIF.
By the way: Die F1-Hilfe ist hier recht anschaulich :wink:

Gruß,
Olli

Vergleichbare Themen

1
Antw.
1178
Views
Spoolauftrag erzeugen, ansehen (Einstellungen)
von yorck » 04.01.2007 10:12 • Verfasst in ABAP® für Anfänger
2
Antw.
5863
Views
Spoolauftrag erzeugen, ansehen (Einstellungen)
von yorck » 04.01.2007 10:26 • Verfasst in SAP - Allgemeines
8
Antw.
2390
Views
BSP ansehen - Username / Kennwort eingeben?
von Nourie » 15.08.2005 21:06 • Verfasst in Web-Dynpro, BSP + BHTML
4
Antw.
2130
Views
Coding umbauen
von Gast » 02.02.2006 13:44 • Verfasst in ABAP® für Anfänger
2
Antw.
990
Views
Coding im Query
von chris61 » 12.09.2017 13:35 • Verfasst in ABAP® für Anfänger

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.