doppelte Werte in ALV Ausgabe

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

doppelte Werte in ALV Ausgabe

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

Ich habe ein Problem, wo mir im Moment leider als ABAP Anfänger nun der Durchblick fehlt.

Ich lese aus 4 Tabellen Daten aus. (BSAK, BSIK, BSIS, BSAS)

Erklärung:
Da ich die Tabelle BSEG nicht mit der Tabelle LFA1 verknüpfen kann (Cluster Tabelle BSEG) gehe ich über diese 4 Tabellen.

Nun mein Problem:
Ich bekomme bei der ALV Ausgabe manchmal einige Datensätze doppelt angezeigt, und weis leider nicht warum. (ist nicht immer so)

Ich hoffe Ihr könnt mir weiterhelfen oder mir sagen wo ich einen Fehler habe bzw. mir einen Tip geben, wie ich dieses Problem lösen kann.

Vielen vielen Dank für Eure Hilfe!!!


Robin

Code: Alles auswählen.

 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 )
                                     WHERE c~bukrs IN ('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.

 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
                  APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla
                          FROM ( ( lfa1 AS a
                                     INNER JOIN bsak AS b
                                         ON a~lifnr = b~lifnr )
                                     INNER JOIN bsas AS c
                                         ON b~belnr = c~belnr )
                                     WHERE c~bukrs IN ('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.

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


Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Werden die doppelten Einträge erst durch die Selektion generiert oder ex. tatsächlich mehrfache Einträge auf der DB.

DA fallen mir spontan "Stornos" ein. Oder evtl. kann eine Belegzeile ja auch mehrere Ausgeleichsbelege haben.

In solchen Fällen würde ein Verhalten wie das von dir beschriebnen auftreten.


Ach ja - den Konstrukt

Code: Alles auswählen.

WHERE c~bukrs IN ('1001') 
finde ich nicht so toll. Wär nicht

Code: Alles auswählen.

WHERE c~bukrs = '1001' 
einfacher?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

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

Ich glaube ich weis schon wo der Fehler liegt.

Und zwar hängt es mit dem Geschäftsjahr zusammen.

Der Betrag, das Dienstleistungskennzeichen, ... kommen alle aus dem richtigen Jahr.

Warum ich die Werte doppelt drinnen stehen habe, kommt daher, daß das Programm auch Daten aus vergangenen Jahren ausliest, mit der selben Belegnummer. Und da zieht das Programm dann das Land mit. Daher bekomme ich dann auf einmal mehrere Einträge.

Die Werte stimmen alle zum selektierten Jahr, nur er gibt mir zusätzlich noch die Datensätze von den vergangenen Jahren aus, wobei außer dem Land, alle Daten gleich sind mit dem Selektierten Jahr.

Richtig wäre es, wenn ich das Jahr 2006 eingebe, nur die Daten aus 2006 raus kommen.

Mit dem Jahr hatte ich schonmal Probleme. Und zwar damit die Einschränkung auf das Jahr überhaupt funktioniert hat, habe ich das mit einem Range gelöst.

Warscheinlich liegt hier nun irgendwo der Fehler.

Im Anhang noch ein bischen Coding.

Hoffe Ihr könnt mir weiterhelfen und ich habe mich so ausgedrückt, daß man mich versteht.

Vielen Dank


Robin

Code: Alles auswählen.

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,
      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: 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 )
                                     WHERE c~bukrs IN ('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.

 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
                  APPENDING CORRESPONDING FIELDS OF TABLE itab_sumla
                          FROM ( ( lfa1 AS a
                                     INNER JOIN bsak AS b
                                         ON a~lifnr = b~lifnr )
                                     INNER JOIN bsas AS c
                                         ON b~belnr = c~belnr )
                                     WHERE c~bukrs IN ('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.

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

Danke für Eure Hilfe!

Hab den Fehler nun gefunden.

Natürlich muß ich bei meinen Joins auch das Jahr jeweils vergleichen. :roll:

Nochmals Danke und schöne Grüße

Robin

Re: doppelte Werte in ALV Ausgabe

Beitrag von Kristin (ForumUser / 47 / 2 / 0 ) »
Hi zusammen :)

Das Thema ist zwar schon etwas älter, aber bevor ich einen neuen Punkt aufmache, versuche ich hier mein Glück.

Ich habe ebenfalls Einträge mehrmals in meiner ALV-Ausgabe. Jedoch ist dies bis zu einem bestimmten Zeitpunkt auch so gewollt.
Nun zu mein Problem...
Ich habe folgende Auswertung:
Auftrag Lieferung Faktura Geleistete Vorauszahlungen
10005671 80021456 90027191 217.969,87
10005671 80021456 90027268 217.969,87
10005671 80021456 90027269 217.969,87
Summe Vorauszahlungen 653.909,61

Diese Auswertung ist bis auf die Vorauszahlungen korrekt, da es zu einer Lieferung mehrere Fakturen gibt. ABER die Lieferung 80021456 hat den Summenwert 217.969,87 egal wie viele Fakturen hierzu angelegt wurden. So habe ich folgende Frage: Ist es möglich die folgenden Vorauszahlungen mit dem Wert 0 abzubilden, dass in der Summe die korrekte Darstellung der Lieferung (nämlich 217.969,87) dargestellt wird??

Ich hoffe dies ist verständlich ;)

Hier noch mein bisheriger Code:

Code: Alles auswählen.

START-OF-SELECTION.
  SELECT aubel vbeln vgbel werks VKBUR VKGRP ERDAT FROM vbrp INTO
                         (ausg-aubel, ausg-vbeln, ausg-vgbel,
                          ausg-werks, ausg-VKBUR, ausg-VKGRP,
                          ausg-ERDAT)
                         WHERE aubel IN s_aubel
                         AND   vbeln IN s_vbeln
                         AND   vgbel IN s_vgbel
                         AND   werks IN s_werks
                         AND   VKBUR IN s_VKBUR
                         AND   VKGRP IN s_vkgrp.
    SELECT vgbel vbeln zzsatznr ernam FROM ZLIANZ INTO (ausg-zvgbel,
                    ausg-zvbeln, ausg-zzsatznr, ausg-ernam)
                    WHERE vgbel = ausg-aubel
                    AND   vbeln = ausg-vgbel.
      SELECT PS_PSP_PNR FROM VBAP INTO ausg-PSP_PNR
                    where PS_PSP_PNR in s_PSPPN
                    AND   VBELN      = ausg-aubel.
        ausg-gv_sum = 0.
        SELECT zztypz zzent zzsort FROM zlianzw INTO (ausg-zztypz,
                         ausg-zzent, ausg-zzsort)
                         WHERE zzsatznr = ausg-zzsatznr
                         AND zztypz = 'GV'.
          ausg-gv_sum = ausg-gv_sum + ausg-zzent.
        ENDSELECT.
       ENDSELECT.
      APPEND AUSG.
     ENDSELECT.
    CLEAR AUSG.
  ENDSELECT.

  DELETE ausg WHERE zzsatznr IS INITIAL.
  DELETE ADJACENT DUPLICATES FROM AUSG COMPARING vbeln zvbeln.
  SORT AUSG BY aubel ASCENDING vgbel ASCENDING.
      PERFORM get_data.

*&--------------------------------------------------------------------*
*&      Form  get_data
*&--------------------------------------------------------------------*
FORM get_data.
 Loop at ausg INTO ausg_wa.
    SELECT SINGLE * FROM vbak
    WHERE vbeln = ausg_wa-aubel.
    If vbak-ZZSUMME <= 0.
      CONTINUE.
    ENDIF.
    If vbak-ZZANZTYP1 = 'A'.
      h_diff = vbak-ZZSUMME.
    Else.
      h_diff = vbak-ZZSUMME / 100 * vbak-NETWR.
    Endif.

    LOOP at ausg WHERE aubel = ausg_wa-aubel.
      ausg-diff = h_diff - ausg-gv_sum.
      SELECT SINGLE * from ZLIANZW
         where zzsatznr = ausg-zzsatznr
         AND   zztypz = 'GW'.
      ausg-gw_sum = ZLIANZW-zzent.
      MODIFY ausg TRANSPORTING gw_sum.
      h_diff = ausg-diff.
      MODIFY ausg TRANSPORTING diff.
      DELETE ADJACENT DUPLICATES FROM AUSG COMPARING vbeln zvbeln.
    Endloop.
  Endloop.
  PERFORM alv_layout.
  PERFORM alv_fieldcatalog.
  PERFORM do_alv.
ENDFORM.                    " get_data
Vielen vielen Dank im Voraus!!

Grüßle Kristin

Re: doppelte Werte in ALV Ausgabe

Beitrag von Kristin (ForumUser / 47 / 2 / 0 ) »
Guten Morgen Forum,

hat denn keiner eine Idee?? :cry:

Grüßle Kristin

Re: doppelte Werte in ALV Ausgabe

Beitrag von Kristin (ForumUser / 47 / 2 / 0 ) »
Ok habs selber rausgefunden, falls jemand Hilfe brauch.

Habe die folgenden Werte mit 0 überschrieben, so dass der Lieferungswert nur einmal hochkommt:

Code: Alles auswählen.

 LOOP AT ausg INTO ausg_wa.
    h_tabix = sy-tabix + 1.
    LOOP AT ausg FROM h_tabix WHERE vgbel = ausg_wa-vgbel.
      ausg-gv_sum = 0.
      MODIFY ausg TRANSPORTING gv_sum.
    ENDLOOP.
  ENDLOOP.

  LOOP AT ausg INTO ausg_wa.
    h_tabix = sy-tabix + 1.
    LOOP AT ausg FROM h_tabix WHERE vgbel = ausg_wa-vgbel.
      ausg-gw_sum = 0.
      MODIFY ausg TRANSPORTING gw_sum.
    ENDLOOP.
  ENDLOOP.

Seite 1 von 1

Vergleichbare Themen

10
Antw.
855
Views
ALV Grid Sortierung - Doppelte Werte gruppieren
von der_neuling » 05.05.2022 16:56 • Verfasst in ABAP® für Anfänger
1
Antw.
1711
Views
nicht doppelte Werte filtern und in interne Tabelle schreibe
von thomasxy » 12.03.2008 13:06 • Verfasst in ABAP® für Anfänger
18
Antw.
6344
Views
Doppelte Ausgabe einer Mail aus SAP - Mail aus Query
von yeti1967 » 28.05.2018 09:21 • Verfasst in ABAP Objects®
4
Antw.
2710
Views
Abhängige Werte-Liste (F4-Werte)
von Gast » 27.12.2005 10:34 • Verfasst in ABAP® Core
6
Antw.
2199
Views
doppelte Spalteneintr�ge
von hampa » 21.03.2006 12:35 • Verfasst in ABAP® für Anfänger

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