Fuba out über ALV und select-options

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

Fuba out über ALV und select-options

Beitrag von MSFL (ForumUser / 2 / 0 / 0 ) »
Guten Tag in die Runde,

ich möchte mich mehr und mehr mit abap beschäftigen und tiefer eintauchen.
Habe folgendes Anliegen.
Ich habe ein Programm erstellt, wo ich über Parameters die Variablem für einen FUBA befülle und dann über einen anderen Fuba die Tabelle aus dem FUBA in einem ALV Grid ausgebe. Das funktioniert auch. Der Grid wird passend dargestellt.
Sobald ich aber die Variablen (matnr) über select-options befülle, kommt es zum Programmabbruch. (falscher TYP).
Frage 1: Muss ich da irgendwie einen loop einbauen oder ein Unterprogramm?
Frage 2: Wenn der Fuba 2 Tabellen ausgibt, kann ich die im Grid kombinieren?

Vielen Dank für die Hilfe im Voraus.

mfG
Michael

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


Re: Fuba out über ALV und select-options

Beitrag von PeterPaletti (Specialist / 350 / 32 / 97 ) »
Also ein bisschen Quellcode solltest du uns schon gönnen, dann könnte man besser sehen, was nicht passt. Sonst artet das ein bisschen nach "rate mal mit Rosenthal" aus.
Im Blindflug würde ich sagen: 1. im FuBa scheint der Typ MATNR gewünscht, das geht mit SELECT-OPTIONS natürlich nicht. Mit einer SELECT-OPTIONS kannst du dir höchstens eine interne Tabelle zusammenlesen, die dann eine oder mehrere MATNR enthält. Dann könntest du über deine interne Tabelle loopen und pro Schleifendurchlauf den FuBa aufrufen. 2. Du kannst im ALV-Grid nur eine Tabelle ausgeben, die aber natürlich das Ergebnis der Zusammenführung von 2 oder mehr Tabellen sein kann.

Re: Fuba out über ALV und select-options

Beitrag von MSFL (ForumUser / 2 / 0 / 0 ) »

Code: Alles auswählen.


Report ZPSTUELIE.

Data: lv_matnr type mara-matnr.
DATA: istb LIKE stpol OCCURS 0 WITH HEADER LINE.

*PARAMETERS: p_mtnrv LIKE lv_matnr.
select-OPTIONS: p_mtnrv for lv_matnr.


CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
  EXPORTING
*   FTREL = ' '
*   ALEKZ = ' '
*   ALTVO = ' '
*   AUFSW = ' '
*   AUMGB = ' '
*   AUMNG = 0
*   AUSKZ = ' '
*   AMIND = ' '
*   BAGRP = ' '
*   BEIKZ = ' '
*   BESSL = ' '
*   BGIXO = ' '
*   BREMS = ' '
    CAPID = 'PP01'
*   CHLST = ' '
*   COSPR = ' '
*   CUOBJ = 000000000000000
*   CUOVS = 0
*   CUOLS = ' '
    DATUV = sy-datum
*   DELNL = ' '
*   DRLDT = ' '
*   EHNDL = ' '
    EMENG = 1
*   ERSKZ = ' '
*   ERSSL = ' '
*   FBSTP = ' '
*   KNFBA = ' '
*   KSBVO = ' '
*   MBWLS = ' '
*   MKTLS = 'X'
*   MDMPS = ' '
    MEHRS = 'X'
*   MKMAT = ' '
*   MMAPS = ' '
*   SALWW = ' '
*   SPLWW = ' '
*   MMORY = ' '
    MTNRV = p_mtnrv
*   NLINK = ' '
*   POSTP = ' '
*   RNDKZ = ' '
*   RVREL = ' '
*   SANFR = ' '
*   SANIN = ' '
*   SANKA = ' '
*   SANKO = ' '
*   SANVS = ' '
*   SCHGT = ' '
*   STKKZ = ' '
*   STLAL = ' '
*   STLAN = ' '
*   STPST = 0
*   SVWVO = 'X'
    WERKS = '0010'
*   NORVL = ' '
*   MDNOT = ' '
*   PANOT = ' '
*   QVERW = ' '
*   VERID = ' '
*   VRSVO = 'X'
*   SGT_SCAT                    =
*   SGT_REL                     =
*   CALLER_APP                  =
*   BOM_VERSN                   =
* IMPORTING
*   TOPMAT                      =
*   DSTST =
  TABLES
    STB   = istb
*   MATCAT                      =
* EXCEPTIONS
*   ALT_NOT_FOUND               = 1
*   CALL_INVALID                = 2
*   MATERIAL_NOT_FOUND          = 3
*   MISSING_AUTHORIZATION       = 4
*   NO_BOM_FOUND                = 5
*   NO_PLANT_DATA               = 6
*   NO_SUITABLE_BOM_FOUND       = 7
*   CONVERSION_ERROR            = 8
*   OTHERS                      = 9
  .
IF SY-SUBRC <> 0.
*Implement suitable error handling here
ENDIF.






CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM = SY-REPID
    I_STRUCTURE_NAME   = 'STPO'
  TABLES
    T_OUTTAB           = ISTB
  EXCEPTIONS
    PROGRAM_ERROR      = 1
    OTHERS             = 2.
IF SY-SUBRC <> 0.

ENDIF.



Re: Fuba out über ALV und select-options

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Lies Dir mal die F1-Hilfe vom SELECT-OPTIONS-Befehl durch. Durch den bekommst Du kein Feld vom Typ mara-matnr, sondern eine interne Tabelle vom Typ type range of mara-matnr. Dementsprechend meckert der Fuba zu recht, dass Dein Parameter nicht den richtigen Typ hat.

Ist ja auch logisch: Bei den SELECT-OPTIONS kannst Du alle möglichen Auswahlkriterien eingeben, um eine Menge von Materialnummern zu selektieren. Das ist ja gerade der Unterschied zum PARAMETERS, dass Du bei SELECT-OPTIONS nicht (notwendigerweise) nur eine Materialnummer bekommst, sondern (je nach Benutzereingabe) eine ganze Menge davon. Dementsprechend kann man das Ergebnis nicht ein einem einzelnen mara-matnr-Feld abspeichern.

Was der SELECT-OPTIONS macht, ist eine Kriterientabelle aufzubauen, die genau die Selektionskriterien enthält, die der Benutzer eingegeben hat. Die kannst Du dann einfach mit Hilfe des IN-Operators einem SELECT-Befehl übergeben, um alle Materialnummern zu finden, die der Eingabe entsprechen. Den Fuba kannst Du dann für jede Materialnummer einzeln aufrufen (falls es das ist, was Du willst; ich kenne den Fuba nicht).

In der Praxis sieht das dann so aus:

Code: Alles auswählen.

DATA: dummy_matnr TYPE mara-matnr,
      gefundene_materialnummern TYPE STANDARD TABLE OF mara-matnr WITH EMPTY KEY.

SELECT-OPTIONS s_matnr for dummy_matnr.

START-OF-SELECTION.

SELECT matnr INTO TABLE gefundene_materialnummern FROM MARA
 WHERE matnr IN s_matnr.

LOOP AT gefundene_materialnummern ASSIGNING FIELD-SYMBOL(<matnr>).
  CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    EXPORTING MTNRV = <matnr>
              ... (restliche Parameter)
ENDLOOP.
Und was bitte soll der

Code: Alles auswählen.

DATA: istb LIKE stpol OCCURS 0 WITH HEADER LINE.
Mal abgesehen davon, dass der Doppelpunkt hinter dem DATA hier sinnlos ist, erzeugt OCCURS immer eine Tabelle mit Kopfzeile. Das WITH HEADER LINE ist also doppelt gemoppelt und sinnlos. Davon abgesehen sind Kopfzeilen schon seit über 10 Jahren veraltet und sollten überhaupt nicht mehr verwendet werden. Was bringen sie euch nur für antiken Müll bei?!?

Bitte definier solch eine Tabelle stattdessen mit

Code: Alles auswählen.

DATA istb TYPE STANDARD TABLE OF stpol.
Gleiches Ergebnis (nur ohne olle Kopfzeile, die keiner mehr braucht) und viel schöner zu lesen.

Ich würde Dir auch empfehlen, Dir anzuschauen, was Doppelpunkte in ABAP eigentlich bedeuten. Du bist jetzt schon der zweite Neueinsteiger in kurzer Zeit hier im Forum, der die quasi hinter jeden Befehl macht, auch wenn das keinen Sinn ergibt. Ebenso solltest Du Dir die von Dir verwendete ungarische Notation genauer anschauen. Du schreibst lv_matnr, obwohl das Feld global ist und daher gv_matnr heißen müsste. Ein Zeichen dafür, dass Dir gar nicht klar ist, was das "lv_" bedeutet. Dann lass es doch einfach weg und mach keine ungarische Notation. Ob ungarische Notation (d.h. Feldnamen mit diesen Vorsätzen) sinnvoll ist, kann man sich trefflich streiten, aber wenn man sie verwendet, dann sollte die Verwendung zumindest richtig sein.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2426
Views
select-options depend on select-options.
von dragospirnut1 » 19.07.2017 09:54 • Verfasst in ABAP® Core
4
Antw.
18915
Views
Select nach Parameter & Select-Options
von doeme » 10.07.2012 16:37 • Verfasst in ABAP® für Anfänger
10
Antw.
6961
Views
2 Select-Options zu einem für Select zusammenfügen
von manuk » 23.03.2005 11:02 • Verfasst in ABAP® Core
2
Antw.
3922
Views
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41 • Verfasst in ABAP® für Anfänger
2
Antw.
1341
Views
SELECT OPTIONS
von SAP_ENTWICKLER » 06.06.2013 12:18 • 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

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2187
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4009