ALV Problem

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

ALV Problem

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

Ich stehe vor einem Problem, bei dem mir momenten keine Lösung mehr einfällt.

Ich habe aus fünf Tabellen Daten ausgelesen:
LFA1, BSAS, BSAK, BSIS, BSIK.

Über diese 4 Tabellen, damit ich die LFA1 mit diesen Tabellen Verknüpfen konnte, da die BSEG ja eine Cluster Tabelle ist.

Hat auch alles wunderbar funktioniert. Nur jetzt stehe ich vor dem Problem, daß bei den offenen Sachkonten auch noch Daten drinnen stehen.

Also wollte ich eine zweite interne Tabelle anlegen, die mir jetzt auch noch die Daten aus der BSEG ausliest.

Hab den Join über BSAK und BSAS nun weggelassen (war komplett gleich wie der aktuelle JOIN nur auf BSAK und BSAS), da ich Denke, daß hier nun die BSEG eingelesen werden sollte

Nun zu meinem Problem.

Wie kann ich diese zweite interne Tabelle (itab_sumla2) mit meiner ersten internen Tabelle verknüpfen?

Hoffe Ihr versteht mein Problem und könnt mir weiterhelfen.

Vielen vielen Dank für Eure Hilfe!

Robin

Code: Alles auswählen.

REPORT  zsumla.

TYPE-POOLS slis.

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

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,
        hkont LIKE bsak-hkont,
        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,
        laenge TYPE i,
      END OF itab_sumla.

* Zweite interne Tabelle für "READ" - Spalten Vergleich

DATA: BEGIN OF itab_zdlkz_t OCCURS 10,
        zdlkz LIKE zdlkz_t-zdlkz,
        bezeichnung LIKE zdlkz_t-bezeichnung,
      END OF itab_zdlkz_t.

DATA: wa_soha LIKE LINE OF itab_sumla,
      wa_zdlkz LIKE LINE OF itab_zdlkz_t.

DATA: BEGIN OF itab_sumla2 OCCURS 10,
        belnr LIKE bseg-belnr,
        zuonr LIKE bseg-zuonr,
        bukrs LIKE bseg-bukrs,
        gjahr LIKE bseg-gjahr,
        shkzg LIKE bseg-shkzg,
        bschl LIKE bseg-bschl,
        wrbtr LIKE bseg-wrbtr,
        zdlkz2 LIKE zdlkz_t-zdlkz,
        bezeichnung2 LIKE zdlkz_t-bezeichnung,
        soha2 TYPE p DECIMALS 2,
        soll2 TYPE p DECIMALS 2,
        haben2 TYPE p DECIMALS 2,
        zahler2 TYPE i,
        laenge2 TYPE i,
      END OF itab_sumla2.

DATA: wa_soha2 LIKE LINE OF itab_sumla2.


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.

* Wertehilfe für so_dlkz in SE11 definiert mit ZMYSEARCH

SELECT-OPTIONS: so_dlkz FOR zdlkz_t-zdlkz MATCHCODE OBJECT zmysearch.

* damit die Selektion Geschäftsjahr funktioniert, wenn kein Wert
* eingegeben wird

RANGES: range FOR bseg-gjahr.
IF NOT pa_gj IS INITIAL.
  range-sign = 'I'.
  range-option = 'EQ'.
  range-low = pa_gj.
  APPEND range.
ELSE.
  REFRESH range.
ENDIF.


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

* GUI-Titel anlegen

  SET TITLEBAR 'T_SOHA'.

  SELECT zdlkz bezeichnung
  FROM zdlkz_t INTO CORRESPONDING FIELDS OF TABLE itab_zdlkz_t
  WHERE zdlkz IN so_dlkz.

  IF sy-subrc <> 0.
    MESSAGE i003(/sapdmc/lsmw_glo_030).
*   Bitte tragen Sie einen gültigen Wert ein.
    EXIT.
  ENDIF.

* neuer Select auf Hauptbuch!!!

 SELECT a~lifnr a~land1 c~hkont c~belnr c~zuonr c~blart c~bukrs c~monat
                          c~gjahr c~shkzg c~wrbtr c~buzei
                          INTO CORRESPONDING FIELDS OF TABLE itab_sumla
                                       FROM ( ( lfa1 AS a
                                           INNER JOIN bsik AS b
                                               ON a~lifnr = b~lifnr )
                                           INNER JOIN bsis AS c
                                               ON b~belnr = c~belnr AND
                                                  b~gjahr = c~gjahr )
                                           WHERE c~bukrs = '1001'
                                      AND c~blart IN ('A1', 'A2', 'A3')
                                           AND c~bschl IN ('50', '40')
                                           AND land1 IN so_land
                                           AND c~gjahr IN range
                                           AND c~zuonr IN so_dlkz
                                           AND c~monat IN so_perio.

  LOOP AT itab_sumla2 INTO wa_soha2.

    SELECT belnr zuonr bukrs gjahr shkzg bschl wrbtr
    INTO CORRESPONDING FIELDS OF TABLE itab_sumla2
    FROM bseg WHERE
    bukrs = '1001'
    AND bschl IN ('50', '40')
    AND gjahr IN range
    AND zuonr IN so_dlkz.

    IF sy-subrc <> 0.
      DELETE itab_sumla2.
      CONTINUE.
    ELSE.
      MODIFY itab_sumla2 FROM wa_soha2 TRANSPORTING soll2 haben2 soha2
      zahler2 zdlkz2 bezeichnung2.
    ENDIF.

  ENDLOOP.

* 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-wrbtr.
    ELSE.
      wa_soha-soll = wa_soha-wrbtr.
    ENDIF.

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

* Spalten Vergleich

* das Dlkz hat immer nur 4 Zeichen. Sicherstellung, daß keine falschen
* Daten eingegeben werden!!!

    wa_soha-laenge = strlen( wa_soha-zuonr ).

    IF wa_soha-zuonr = space.
      wa_soha-zdlkz = space.
    ELSEIF wa_soha-laenge <> 4.
      wa_soha-zdlkz = space.
      wa_soha-bezeichnung = space.
    ELSE.
      READ TABLE itab_zdlkz_t INTO wa_zdlkz WITH KEY zdlkz =
      wa_soha-zuonr.
      IF sy-subrc = 0.
        wa_soha-zdlkz = wa_zdlkz-zdlkz.
        wa_soha-bezeichnung = wa_zdlkz-bezeichnung.
      ENDIF.
    ENDIF.

* Zähler für keine Einträge in DlKz

    IF wa_soha-zdlkz = space.
      wa_soha-zahler = 1.
    ELSE.
      wa_soha-zahler = 0.
    ENDIF.

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

  ENDLOOP.

* Zusätzliche Spalten für Haben - Soll Berechnung, ...

  wa_fieldcat-fieldname = 'ZUONR'.
  wa_fieldcat-col_pos = 14.
  wa_fieldcat-seltext_l = 'ZUONR'.
  APPEND wa_fieldcat TO my_fieldcat.

  wa_fieldcat-fieldname = 'BEZEICHNUNG'.
  wa_fieldcat-col_pos = 15.
  wa_fieldcat-seltext_l = 'BEZEICHNUNG'.
  APPEND wa_fieldcat TO my_fieldcat.

  wa_fieldcat-fieldname = 'SOLL'.
  wa_fieldcat-col_pos = 16.
  wa_fieldcat-seltext_l = 'Soll'.
  wa_fieldcat-no_zero = 'X'.  " Es werden keine Einträge mit 0 angezeigt
  wa_fieldcat-do_sum = 'X'.   " Spalte summieren
  APPEND wa_fieldcat TO my_fieldcat.

  wa_fieldcat-fieldname = 'HABEN'.
  wa_fieldcat-col_pos = 17.
  wa_fieldcat-seltext_l = 'Haben'.
  wa_fieldcat-no_zero = 'X'.
  wa_fieldcat-do_sum = 'X'.
  APPEND wa_fieldcat TO my_fieldcat.

  wa_fieldcat-fieldname = 'SOHA'.
  wa_fieldcat-col_pos = 18.
  wa_fieldcat-seltext_l = 'Haben - Soll'.
  wa_fieldcat-do_sum = 'X'.
  APPEND wa_fieldcat TO my_fieldcat.

  wa_fieldcat-fieldname = 'BELNR'.
  wa_fieldcat-col_pos = 19.
  wa_fieldcat-seltext_l = 'BELNR'.
  APPEND wa_fieldcat TO my_fieldcat.

  wa_fieldcat-fieldname = 'ZAHLER'.
  wa_fieldcat-col_pos = 20.
  wa_fieldcat-seltext_l = 'keine Einträge DlKz'.
  wa_fieldcat-no_zero = 'X'.
  wa_fieldcat-do_sum = 'X'.
  APPEND wa_fieldcat TO my_fieldcat.

* Tabelle sortieren

  SORT itab_sumla BY gjahr monat land1.

* Spaltenbreite optimieren, Zebra Muster

  wa_layout-colwidth_optimize = 'X'.
  wa_layout-zebra = 'X'.

  repid = sy-repid.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            i_program_name         = sy-repid
            i_structure_name       = 'ZMYSTRUKTUR1'
       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 = 'BEZEICHNUNG'
                               OR  fieldname = 'BELNR'
                               OR  fieldname = 'SOLL'
                               OR  fieldname = 'HABEN'
                               OR  fieldname = 'SOHA'
                               OR  fieldname = 'ZAHLER'
                               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.


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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Da ist jetzt die Frage, was du unter "verknüpfen" meinst.
Meinst du:
1) die eine in die andere reinbringen
2) einen 2ten ALV aufrufen
3) beim doppelklick auf die eine Zeile ein PopUp mit teilauszug von tab2
4) ????

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

Ich meine die Interne Tabelle itab_sumla2 in die Interne Tabelle itab_sumla zu bekommen.

Denn dann müßte alles ausgelesen sein.

Danke


Robin

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Wenn beide Tabellen den exakt gleichen Aufbau haben kannst das mit "APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2." machen.

Sollten sie nicht den gleichen Aufbau haben musst du einfach über die eine Loopen und die Werte in die andere Rüberschaufeln p er Zuweisung und Append.

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

Erstmals danke für Deine Antwort!

Das Problem das ich habe ist, wenn ich die BSEG auslese, fehlt mir die Verbindung zu der Tabelle LFA1.

Wie mache ich das mit den Daten rüberschaufeln?
Kannst Du mir da bitte noch weiterhelfen?

Danke


Robin

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
robin1at hat geschrieben:Wie mache ich das mit den Daten rüberschaufeln?
Kannst Du mir da bitte noch weiterhelfen?
Was er meint ist:

Code: Alles auswählen.

loop at itab1.
move itab2-feld1 to itab1-feld1.
(usw.)

append itab1.
clear itab1.
endloop.
Dadurch schiebt man die Werte von itab2 nach itab1.

Hinzuzufügen wäre noch, dass Zugriffe über BSIK/BSAK/... nicht nur Views ermöglichen, sondern oft auch noch schneller sind als Zugriffe auf die BSEG.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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

Danke für Deine Antwort!

Aber im Moment habe ich noch eine generelle Frage.

In den Tabellen BSAK, BSAS, BSIS und BSIK sind doch die selben Einträge wie in der BSEG, oder?

Wenn ich nun nur einen Eintrag in der BSIS habe, ist dieser dann auch in der BSEG?

Wenn nein, ist das ja so gar nicht möglich, oder?

Danke für Eure Hilfe!

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
robin1at hat geschrieben:In den Tabellen BSAK, BSAS, BSIS und BSIK sind doch die selben Einträge wie in der BSEG, oder?
Richtig.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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

Und wenn ich jetzt nur Einträge in der BSIS habe.

Sind die dann auch in der BSEG, oder nur wenn in allen 4 Tabellen Einträge sind?

Danke

Robin

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
robin1at hat geschrieben:Und wenn ich jetzt nur Einträge in der BSIS habe.
Dann hast du eine reine Sachkontenbuchung, die natürlich auch in der BSEG steht.

Ralf *meine Herren ist FI lang her bei mir ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

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

Danke für Deine Antwort!

Das heist jetzt natürlich daß ich die Daten aus der BSEG lesen kann. Nur mein Problem jetzt ist leider noch, daß ich die BSEG nicht mit der Tabelle LFA1 verknüpfen kann.

Und zwar liest mir das Programm auch meine Daten aus, nur leider fehlt mir dann das Land zu dem Beleg.

Habt Ihr vielleicht noch eine Idee wie ich das machen könnte?

Danke

Robin

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
robin1at hat geschrieben:Und zwar liest mir das Programm auch meine Daten aus, nur leider fehlt mir dann das Land zu dem Beleg.
Lies das Land vorher aus:

Code: Alles auswählen.


data: begin of g_lfa1,  "Die brauchst du zusätzlich
        lifnr like lfa1-lifnr,
        land1 like lfa1-land1,
      end of g_lfa1,
      gt_lfa1 like standard table of g_lfa1.

select lifnr land1 from lfa1
   into table gt_lfa1
    where land in so_land.

select ....   "die Felder die du brauchst
    from bseg into table....
    for all entries in gt_lfa1
    where lifnr in gt_lfa1-lifnr
     and .... "bsiherige WHERE-bedingung ohne LAND

* Programm weiter wie gehabt


Ralf *hat gerade sehr wenig Zeit
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Daten von itab1 in itab2 schaufeln

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


Ich habe gerade versucht die Daten von itab1 in die itab2 zu schaufeln.


Nur leider bekomme ich da einen Kurzdump, daß zu wenig Speicher verfügbar ist.


Weist Du was ich machen kann, um dieses Problem zu lösen?


Danke


Robin

Daten von einer Itab in eine andere Itab bringen

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


Ich stehe im Moment vor dem Problem, Daten von Itab2 in Itab1 zu schaufeln.


Und zwar bekomme ich beim Append Itab1 einen Kurzdump mit dem Verweis zu wenig speicher.


Hoffe Ihr könnt mir weiterhelfen!


Vielen vielen Dank


Robin


LOOP AT itab_sumla.


MOVE itab_sumla2-land1 to itab_sumla-land1.


MOVE itab_sumla2-blart to itab_sumla-blart.


MOVE itab_sumla2-monat to itab_sumla-monat.


MOVE itab_sumla2-gjahr to itab_sumla-gjahr.


MOVE itab_sumla2-zdlkz to itab_sumla-zdlkz.


MOVE itab_sumla2-belnr to itab_sumla-belnr.


APPEND itab_sumla.


CLEAR itab_sumla.


ENDLOOP.

Re: Daten von itab1 in itab2 schaufeln

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hallo Robin,


um wieviele Sätze handelt es sich denn?


-> versuche doch Pakete-weise zu selektieren und zu verarbeiten.


und wenn du itab1 nicht mehr brauchst . gíbst du mit "free" wieder Speicher frei.


Andreas
a s
s oon
a s
p ossible
h elp
http://www.clv.de/

Vergleichbare Themen

9
Antw.
4951
Views
Problem mit OO-ALV
von MQ658 » 07.09.2017 20:20 • Verfasst in ABAP Objects®
5
Antw.
3235
Views
Problem mit ALV
von zickzack0312 » 17.01.2007 22:08 • Verfasst in ABAP Objects®
2
Antw.
2171
Views
SAP GUI 6.2 + ECC 6.0 Problem
von funky_escobar » 18.07.2007 11:03 • Verfasst in SAP - Allgemeines
15
Antw.
17629
Views
ADS Problem
von Trulchen » 11.08.2014 16:10 • Verfasst in Java & SAP®
3
Antw.
2224
Views
ALV-Problem
von Daniela » 14.01.2005 16:01 • Verfasst in ABAP® Core

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

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742