Splaten Listenausgabe

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

Splaten Listenausgabe

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Hallo zusammen

Wir haben in unserem Unternehmen vier Lagerorte, natürlich mit unterschiedlichen Beständen.
Ich möchte ein Programm erstellen dass die vier Lagerortbestände in einer Zeile pro Material ausgegeben wird.
Wie muss ich da vorgehen? Ich müsste neue Spalten deklarieren und diese dann mit den passenden Lagerortbestände füllen...?
Gibt es empfehlenswerte Bücher aus denen ich solche Code lernen respektive Anwenden könnte?

Vielen Dank für Eure Antworten


Code: Alles auswählen.

Report ZR_AUSW.

*--------------------------------------------------------------------*
*Tabellenarbeitsbereich deklarieren*
*--------------------------------------------------------------------*

DATA: wa_mara  TYPE MARA,
      wa_makt  TYPE MAKT,
      wa_marc  TYPE MARC,
      wa_mard  TYPE MARD,
      wa_mbew TYPE  MBEW,
      wa_mver TYPE  MVER.


*--------------------------------------------------------------------*
*Felder deklarieren*
*--------------------------------------------------------------------*
DATA: zeilen_itab01 TYPE i.

DATA: LGEGI TYPE i.

*--------------------------------------------------------------------*
*Datentypen für Zeilen deklarieren*
*--------------------------------------------------------------------*
TYPES: BEGIN OF zeile01_typ,
  MATNR   TYPE MARA-MATNR,
  MAKTX   TYPE MAKT-MAKTX,
  MATKL   TYPE MARA-MATKL,
  PRDHA   TYPE MARA-PRDHA,
  EKGRP   TYPE MARC-EKGRP,
  DISPO   TYPE MARC-DISPO,
  BESKZ   TYPE MARC-BESKZ,
  SOBSL   TYPE MARC-SOBSL,
  LO1     TYPE MARD-LGORT, "Lagerort 1
  LO2     TYPE MARD-LGORT, "Lagerort 2
  LO3     TYPE MARD-LGORT, "Lagerort 3
  LO4     TYPE MARD-LGORT, "Lagerort 4
  LGPBE   TYPE MARD-LGPBE,
  VPRSV   TYPE MBEW-VPRSV,
  VERPR   TYPE MBEW-VERPR,
  STPRS   TYPE MBEW-STPRS,
  NCOST   TYPE MARC-NCOST,
  HRKFT   TYPE MBEW-HRKFT,
  EKALR   TYPE MBEW-EKALR,
  LOSGR   TYPE MARC-LOSGR,
  LABST   TYPE MARD-LABST,

  END OF zeile01_typ.



*--------------------------------------------------------------------*
*Datentypen für interne Tabellen deklarieren*
*--------------------------------------------------------------------*
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.


*--------------------------------------------------------------------*
*Interne Tabellen deklarieren ohne Kopfzeile*
*--------------------------------------------------------------------*
DATA itab01 TYPE itab01_typ.


*--------------------------------------------------------------------*
*Workareas für interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA wa_itab01 TYPE zeile01_typ.


*--------------------------------------------------------------------*
*Selektionsbild gesalten*
*--------------------------------------------------------------------*
SELECT-OPTIONS MATNR FOR wa_MARA-MATNR.
SELECT-OPTIONS EKGRP FOR wa_MARC-EKGRP.
SELECT-OPTIONS DISPO FOR wa_MARC-DISPO.
SELECT-OPTIONS LGPBE FOR wa_MARD-LGPBE.
PARAMETERS BESKZ TYPE MARC-BESKZ.
PARAMETERS SPRAS TYPE MAKT-SPRAS.
PARAMETERS VPRSV TYPE MBEW-VPRSV.
*PARAMETERS GJAHR TYPE MVER-GJAHR OBLIGATORY.



START-OF-SELECTION.
*--------------------------------------------------------------------*
*DBtab lesen und itab01 füllen über Workarea*
*--------------------------------------------------------------------*
     SELECT *
    INTO CORRESPONDING FIELDS OF TABLE itab01
    FROM MARA
    JOIN  MARC
      ON  MARC~MATNR EQ MARA~MATNR
    JOIN  MARD
      ON  MARD~MATNR EQ MARA~MATNR
      AND MARD~WERKS = '1000'
      AND LO1 = '1000'  "Lagerort 1
      AND LO2 = '1010'  "Lagerort 2
      AND LO3 = '1020'  "Lagerort 3
      AND LO4 = '1030'  "Lagerort 4
    JOIN  MBEW
      ON  MBEW~MATNR EQ MARA~MATNR
    JOIN  MAKT
      ON  MAKT~MATNR EQ MARA~MATNR
    JOIN  MVER
      ON  MVER~MATNR EQ MARA~MATNR
      AND GJAHR = '2014'

     WHERE mara~matnr IN matnr.
     
LOGES = LO1 + LO2 + LO3 + LO4.




END-OF-SELECTION.




*--------------------------------------------------------------------*
*ITAB01 ausgeben in Liste*
*--------------------------------------------------------------------*

  WRITE: / 'sy-tabix, itab01-MATNR'.
  LOOP AT itab01 INTO wa_itab01.

    WRITE: / sy-tabix,
    wa_itab01-MATNR,   "Materialnummer
    wa_itab01-MAKTX,   "Materialkurztext
    wa_itab01-MATKL,   "Warengruppe
    wa_itab01-PRDHA,   "Produkthyrarchie
    wa_itab01-EKGRP,   "Einkäufergruppe
    wa_itab01-DISPO,   "Disponent
    wa_itab01-BESKZ,   "Beschaffungskennzeichen
    wa_itab01-SOBSL,   "Sonderbeschaffungskennzeichen£
    wa_itab01-LGPBE,   "Lagerplatz
    wa_itab01-LABST,   "Lagerbestand
    wa_itab01-VPRSV,   "Preissteuerung
    wa_itab01-VERPR,   "Gleitender Preis
    wa_itab01-STPRS,   "Standartpreis
    wa_itab01-NCOST,   "Kalkulationshäckchen
    wa_itab01-HRKFT,   "Herkunftsgrupper
    wa_itab01-EKALR,   "Mengengerüst
    wa_itab01-LOSGR.   "Kalkulationslosgrösse
  ENDLOOP.

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


Re: Splaten Listenausgabe

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Lies die Lagerbestände in eine eigene Tabelle ein, dann geht es IMHO am Besten:

Code: Alles auswählen.

LOOP AT material.
  NEW-LINE.
  WRITE material.
  LOOP AT lager.
    READ TABLE bestand WITH KEY material lager.  
    WRITE bestand.
  ENDLOOP.
ENDLOOP.
Eine andere Variante wäre die Gruppen-Verarbeitung, aber das schaut nur dann gut aus, wenn es jedes Material wirklich in jedem Lager gibt:

Code: Alles auswählen.

LOOP AT material_bestand.
  AT NEW material.
    NEW-LINE.
    WRITE material.
  ENDAT.
  WRITE bestand.
ENDLOOP.
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Splaten Listenausgabe

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Hallo christof,

1.) Ausgabe: Da du eh nur eine Liste ausgibst, probier das doch einfach mittels Listviewer - das macht das Coding deutlich lesbarar und ist auch bei späteren Erweiterungen oder speziellen Ausgabeformatierungswünschen der User viel besser geeignet. Und die SALV-Version benötigt doch gerade mal 10 Zeilen in seiner einfachsten Form ( Beispielcoding angehängt - Falls du einen recht neuen Releasestand hast kannst du auch die auskommentierten Zeilen mit verwenden - sonst musst du dort halt ein paar Zeilen mehr schreiben um die benötigten Zwischenvariablen zu definieren )

Code: Alles auswählen.

REPORT.

DATA: gt_data TYPE STANDARD TABLE OF mara WITH NON-UNIQUE DEFAULT KEY.

SELECT * UP TO 100 ROWS INTO TABLE gt_data FROM mara. " Dabenbeschaffung

DATA: go_salv TYPE REF TO cl_salv_table.
TRY.
    cl_salv_table=>factory( IMPORTING
                              r_salv_table   = go_salv
                            CHANGING
                              t_table        = gt_data ).
*    go_salv->get_functions( )->set_all( ).
*    go_salv->get_columns( )->set_optimize( ).
    go_salv->display( ).
  CATCH cx_salv_msg .
ENDTRY.
2.) Dein Select macht bestimmt nicht das was du denkst.
Du joinst die MARC mit der MARA und die MARD mit der MARA - aber die MARD und die MARC sind völlig unabhängig von einander und du wirst dann viel zu viele Daten bekommen.
Selbiges gilt auch für die MBEW und die MVER ( kein Werksschlüssel, der die zugehörigen MARC und MARD-Sätze miteineander vernknüpft ), und die MAKT ( kein Sprachschlüssel ) .
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Splaten Listenausgabe

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
@black_adept
Unabhängig von den Fehlern die christof in seinem Coding hat, sucht er glaub ich eine Möglichkeit wie man eine Tabelle mit "dynamischen" Spalten ausgibt. In seinem Fall halt je Lagerort eine Spalte.
Im Listviewer geht das ja noch relativ einfach. Im SALV/ALV müsste er sich dafür auch noch in RTTI/RTTC & Co. einlesen.

http://scn.sap.com/thread/1215079 Variante "alt" über ALV Bausteine
http://scn.sap.com/docs/DOC-53788 Variante "neu" über RTTI/RTTC
Die ListViewer Variante hab ich in meinem vorherigen Post schon grob umrissen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Splaten Listenausgabe

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Vielen Dank, dies ist genau das was ich gesucht habe. Wird ein bisschen schwierig dies für mich umzusetzen. Aber Übung macht den Meister ;-)
Kann mir jemand noch Bücher empfehlen die "einfache" Listenprogrammierung enthalten?

Re: Splaten Listenausgabe

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
a-dead-trousers hat geschrieben:@black_adept
Unabhängig von den Fehlern die christof in seinem Coding hat, sucht er glaub ich eine Möglichkeit wie man eine Tabelle mit "dynamischen" Spalten ausgibt. In seinem Fall halt je Lagerort eine Spalte.
...
lg ADT
@adt: Habe ich auch gesehen. Aber dafür müssten ja erst mal Daten korrekt angelesen werden. Und wenn ich mir das bisherige Coding anschaue ( ist nicht böse gemeint christof ) müssen erst die Grundlagen sitzen bevor man sich an dynamische Listen wagt. Wenn hier nur eine Handvoll Lagerorte möglich sind ist eine fest verdrahtete Anzeigestruktur mit 1 Feld pro Lagerort (evtl. 2-3 Reserve falls die Fa. wächst ) und irgendwo im Codeing halt ein CASE mit WHEN pro (bekanntem) Lagerort der einfachste (lesbare/wartbare) Ansatz.

Wenn man die Grundlagen aus dem FF beherrscht kann man ja gerne auch die dynamische Variante angehen - die ist dann zwar flexibler, aber das Coding i.A. auch deutlich schwerer zu lesen und/oder zu verstehen.

@christof: Bücher nicht - aber wenn du in dem Paket "SLIS" auf deinem SAP-System nachschaust wirst du viele (im Coding auch recht gut dokumentierte) Beispielprogramme für den Listviewer finden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Splaten Listenausgabe

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Danke. Kein Problem, dieses Programm mache ich als Übung. Leider ist es recht schwer wenn man bei null anfangen muss und nur durch Forum und Bücher lernen kann.
Das SLIS Paket ist super, für mich teilweise ein bisschen schwer verständlich, aber das ändert sich hoffentlich einmal.
Gibt es auch ein solches Paket mit einfacher Listenprogrammierung respektive internen Tabellen?

Vielen Dank für eure Antwort

Re: Splaten Listenausgabe

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Guten Abend christof,

bist du Angestellter, der sich in ABAP einarbeiten soll? Wenn ja zeige deinem Arbeitgeber mal den folgenden Link https://training.sap.com/shop/course/bc ... d-courses/ und dort besonders die Kurse BC4xx ( Etwa BC400, BC401, BC405, ... )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Splaten Listenausgabe

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Einen Kurs kommt bei mir nicht in Frage.
Ich suche eher gute Unterlagen für Interne Tabellen. Mein Problem ist vielfach, dass es in Bücher oder Forums sehr grosse Abweichungen im Code fürs gleiche Problem gibt.
Klar kann ein Problem auf viele Wege gelöst werden, aber für mich als Neueinsteiger bringt wird dies recht schwierig.

Seite 1 von 1

Vergleichbare Themen

5
Antw.
3284
Views
Listenausgabe automatisch in Textdatei schreiben?
von roterMilan » 17.07.2008 10:17 • Verfasst in ABAP® Core
2
Antw.
2791
Views
Drucktastenleiste in einfacher Listenausgabe anzeigen
von bliss » 16.04.2012 16:15 • Verfasst in ABAP® für Anfänger
3
Antw.
422
Views
Leerzeilen bei Listenausgabe (List-Processing)
von Murdock » 24.09.2020 11:58 • 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

Daten an Tabelle binden
vor 8 Stunden von Bright4.5 3 / 1482
Regex in where
vor 10 Stunden von tar 6 / 148

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

Daten an Tabelle binden
vor 8 Stunden von Bright4.5 3 / 1482
Regex in where
vor 10 Stunden von tar 6 / 148

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