Tabelle an form übergeben

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

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Hi,
ja das weiß ich schon (value_tab ist die richtige Stelle) aber wie ich krieg ich meine übergebene Tabelle da rein.

Code: Alles auswählen.

FORM ... USING l_table TYPE STANDARD TABLE.
FIELD-SYMBOLS: <ls_table_line> TYPE ANY.
LOOP AT l_table ASSIGNING <ls_table_line>.
...
Die Daten liegen in einer Struktur, ich hab versucht wie hier vorgeschlagen die Daten anderst zu übergeben was nicht so hingehauen hat....

Gruß und trotzdem danke.

Tatjana

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


Re: Tabelle an form übergeben

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Irgendwie stehe ich glaube ich auf dem Schlauch.

Code: Alles auswählen.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
*     DDIC_STRUCTURE         = ''
       retfield               = ' '
*     PVALKEY                = ' '
       dynpprog               = vc_repid
       dynpnr                 = vc_dynnr
*       dynprofield            = ''
*     STEPL                  = 0
     WINDOW_TITLE           = ' '
*     VALUE                  = ' '
       value_org              = 'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
      TABLES
        value_tab              = l_table
*     FIELD_TAB              =
     RETURN_TAB             =  ' '
*     DYNPFLD_MAPPING        =
*   EXCEPTIONS
*     PARAMETER_ERROR        = 1
*     NO_VALUES_FOUND        = 2
*     OTHERS                 = 3

 
und dann hast du doch deine komplette Tabelle als Wertetabelle in der F4 Hilfe. Wie vorher schon gesagt, kann es sein, das du in der field_tab noch deklarieren musst, welche Felder angezeigt werden müssen. aber das sollte es eigentlich gewesen sein. Was du da mit dem Loop und der Struktur machen möchtest, entzieht sich meinem Verständnis.. :(
Gruß,
der Matze

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Das funktioniert leider nicht so einfach....

Kommt ein Exception-Fehler und die F4-Hilfe wird nicht angezeigt. Es scheint nicht so einfach zu sein einer Form eine Tabelle zu übergeben.... :roll: Die Tabelle wird intern irgendwie generisch übergeben, man kann wohl nicht einfach so drauf zugreifen.

Die Frage ist wir komme ich nun an meine Daten?

Jemand noch en Idee?

Grüße
Tatjana

Re: Tabelle an form übergeben

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Also ich bin weiterhin der Meinung das das funktionieren muss.
Hast du mal in einer lokalen Tabelle lt_field_tab die notwendigen Einträge erfasst, welche du aus deiner l_table dort angezeigt bekommen möchtest? Eventuell muss man da auch noch ein paar mehr Parameter besetzen außer Tabellenname und Feldname.
Gruß,
der Matze

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Leider funktioniert es aber so nicht. Ich kann die Tabelle L-Table nicht in eine interne Tabelle schreiben da eine Fehlermeldung kommt "Konvertierung wird nicht unterstützt". Ich komm nicht an die Daten ran...
Gruß
Tatjana

Re: Tabelle an form übergeben

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

poste doch mal das Coding, denn sonst bedeutet es weiter im Nebel stochern was dein Problem angeht !

Gruss
thanks Jens

Re: Tabelle an form übergeben

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

zum einen hat Jens recht, ohne Coding ist das echt mühsam.
und zum anderen ist deine Tabelle L_Table doch eine interne Tabelle :twisted:
Gruß,
der Matze

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
O.k., also nochmal von vorne:
Zuerst habe ich eine Schaltfläche über die man ein Krankheitsbild auswählt. Dieses Krankeitsbild soll dann weiterverwendet werden.

Code: Alles auswählen.

FORM zpdplan_set_stdatl_v01.

TYPES: BEGIN OF ty_ZPPSTANDARD,
           ZPPIDSTANDARD LIKE ZPPSTANDARD-ZPPIDSTANDARD,
           ZPPBEZSTANDARD LIKE ZPPSTANDARD-ZPPBEZSTANDARD,
         END OF ty_ZPPSTANDARD.

DATA: it_values_tab TYPE TABLE OF ty_ZPPSTANDARD,
        vc_repid      LIKE sy-repid,
        vc_dynnr      LIKE sy-dynnr,
        l_it_returntab TYPE TABLE OF ddshretval, "Returntabelle
        l_wa_returntab LIKE LINE OF l_it_returntab,
        l_okcode(20) type c,
        l_kbbez(80) type c,
        l_ta_KB type table of ZPPSTANDARD,
        l_wa_KB LIKE LINE OF l_ta_KB.

l_okcode = sy-ucomm.

  if l_okcode = 'ZPPSTD'.


  vc_repid = sy-repid.
  vc_dynnr = sy-dynnr.

    SELECT ZPPIDSTANDARD ZPPBEZSTANDARD
      FROM ZPPSTANDARD
      INTO TABLE it_values_tab
      up to 30 rows.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
*     DDIC_STRUCTURE         = ''
       retfield               = 'ZPPIDSTANDARD'
*     PVALKEY                = ' '
       dynpprog               = vc_repid
       dynpnr                 = vc_dynnr
*       dynprofield            = ''
*     STEPL                  = 0
     WINDOW_TITLE           = 'Auswahl Krankheitsbild'
*     VALUE                  = ' '
       value_org              = 'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
      TABLES
        value_tab              = it_values_tab
*     FIELD_TAB              =
     RETURN_TAB             = l_it_returntab
*     DYNPFLD_MAPPING        =
*   EXCEPTIONS
*     PARAMETER_ERROR        = 1
*     NO_VALUES_FOUND        = 2
*     OTHERS                 = 3
              .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

 READ TABLE l_it_returntab INTO l_wa_returntab INDEX 1.

IF sy-subrc = 0.
  g_wertkb = l_wa_returntab-fieldval.
ENDIF.

SELECT ZPPIDSTANDARD ZPPBEZSTANDARD
      FROM ZPPSTANDARD
      into corresponding fields of table l_ta_KB
      where ZPPIDSTANDARD = g_wertkb.

READ TABLE l_ta_KB INTO l_wa_KB INDEX 1.

CALL METHOD <PUB__SERVICE>->API__SET_VALUE
    EXPORTING
      I_ALIAS = 'ZPPBKB'
      I_VALUE = l_wa_KB-ZPPBEZSTANDARD.

endif.
ENDFORM. 
Im zweiten Schritt wird mit dem oben ausgewählten Krankheitsbild ein Select in eine Tabelle ausgeführt (dies soll später für x andere Tabellen ebenfalls erfolgen). Derzeit hab ich das nur für eine Tabelle einmal versucht.

Code: Alles auswählen.

FORM zpdplan_prepare_f4_v01.

data: l_ta_atmmass type table of ZPPATMPMASS,
      l_wertkb(20) type c.

l_wertkb = g_wertkb.

CASE <pub__this_alias>.

WHEN 'ZPPATMMAS'.
select  a~ZPPIDATMPMASS b~ZPPDATATMPMASS  into corresponding fields of table l_ta_atmmass from ZPPSTDATMPMASS AS a INNER JOIN ZPPATMPMASS AS b on a~ZPPIDATMPMASS = b~ZPPIDATMPMASS  where a~ZPPIDSTANDARD = L_wertkb.

perform zpdplan_get_atlf4_v01 using l_ta_atmmass.


*When ' '.......

endform.
Nun soll die Tabelle die durch den Select entstanden ist an eine andere Form übergeben werden (denn ich hab ja noch zig andere Case für die das ähnlich laufen soll). Die Tabelle soll dann in der F4-Hilfe ausgegeben werden im entsprechenden Feld.

Code: Alles auswählen.

FORM zpdplan_get_atlf4_V01 using l_ta_atmmass TYPE STANDARD TABLE.

FIELD-SYMBOLS: <ls_table_line> type any.
LOOP AT l_ta_atmmass assigning <ls_table_line>.
endloop.

*  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
*      EXPORTING
**     DDIC_STRUCTURE         = ''
**       retfield               = ''
**     PVALKEY                = ' '
**       dynpprog               = ' '
**       dynpnr                 = ''
**       dynprofield            = ''
**     STEPL                  = 0
*     WINDOW_TITLE           = ''
**     VALUE                  = ' '
*       value_org              = 'S'
**     MULTIPLE_CHOICE        = ' '
**     DISPLAY                = ' '
**     CALLBACK_PROGRAM       = ' '
**     CALLBACK_FORM          = ' '
**     MARK_TAB               =
**   IMPORTING
**     USER_RESET             =
*      TABLES
*        value_tab              =
**     FIELD_TAB              =
**     RETURN_TAB             = ' '
**     DYNPFLD_MAPPING        =
**   EXCEPTIONS
**     PARAMETER_ERROR        = 1
**     NO_VALUES_FOUND        = 2
**     OTHERS                 = 3
*              .
*    IF sy-subrc <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.

endform.

Das ist momentan mein Sachverhalt.

SAP sagt immer es handele sich nicht um eine interne Tabelle oder muss ich die anderst übergeben (hat aber nur wie angegeben überhaupt mal fkt. sonst immer Fehler).

Gruß
Tatjana

Re: Tabelle an form übergeben

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
hi,

keine ahnung ob es daran liegt aber hast du schon mal versucht statt USING die Anweisung TABLES zu nutzen sowohl in der Form-Deklaration als auch im Aufruf zu nutzen?
Zuletzt geändert von Thanatos82 am 11.02.2014 13:50, insgesamt 1-mal geändert.
Gruß,
der Matze

Re: Tabelle an form übergeben

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
.. Ich = Trottel ..
(falschen Button geklickt)
Gruß,
der Matze

Re: Tabelle an form übergeben

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

wenn ich das also auf den ersten Blick richtig sehe - die Tabelle welche du beim Perform übergibst sieht immer anders aus was die Datenstruktur angeht oder ist das Ergebnis in deiner Case Anweisung letztendlich doch immer die Tabelle mit dem selben Aufbau ?

Gruss
thanks Jens

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Der Aufbau an sich ist immer gleich, es sind immer 2 Spalten, nur der Select kommt aus verschiedenen Tabellen.

Gruß
Tatjana

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Thanatos82 hat geschrieben:hi,

keine ahnung ob es daran liegt aber hast du schon mal versucht statt USING die Anweisung TABLES zu nutzen sowohl in der Form-Deklaration als auch im Aufruf zu nutzen?
Ja das habe ich geht nicht ....

wenn ich die Tabelle in der F4-Hilfe angebe, dann sagt er etwas von Missing Parameter.

Tatjana

Re: Tabelle an form übergeben

Beitrag von jensschladitz (Specialist / 417 / 0 / 56 ) »
Sali,

REPORT z_f4.


DATA it_mara TYPE STANDARD TABLE OF mara_matnr.
DATA it_return_tab TYPE STANDARD TABLE OF ddshretval.

DATA ls_return TYPE ddshretval.

FIELD-SYMBOLS <fs_table> LIKE it_mara.
FIELD-SYMBOLS <fs_return> LIKE it_return_tab.

DATA ddic_structure TYPE tabname VALUE 'MARA_MATNR'.
DATA retfield TYPE dfies-fieldname VALUE 'MATNR'.
*DATA PVALKEY TYPE DDSHPVKEY.
*DATA DYNPPROG TYPE SY-REPID.
*DATA DYNPNR TYPE SY-DYNNR.
*DATA DYNPROFIELD TYPE HELP_INFO-DYNPROFLD.
*DATA STEPL TYPE SY-STEPL.
DATA window_title TYPE c LENGTH 20 VALUE 'Wertehilfe'.
*DATA VALUE TYPE HELP_INFO-FLDVALUE.
*DATA VALUE_ORG TYPE DDBOOL_D.
*DATA MULTIPLE_CHOICE TYPE DDBOOL_D.
*DATA DISPLAY TYPE DDBOOL_D.
*DATA CALLBACK_PROGRAM TYPE SY-REPID.
*DATA CALLBACK_FORM TYPE SY-XFORM.
*DATA CALLBACK_METHOD TYPE REF TO IF_F4CALLBACK_VALUE_REQUEST.
*DATA MARK_TAB TYPE DDSHMARKS.
*DATA USER_RESET TYPE C.

TYPE-POOLS abap.
*---------------------------------------------------------*

*-- Start-of-Selection
START-OF-SELECTION.

CASE abap_true.

WHEN OTHERS.
SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE it_mara.
ASSIGN it_mara TO <fs_table>.
ASSIGN it_return_tab TO <fs_return>.
check <fs_table> is assigned and <fs_return> is assigned.
PERFORM call_f4 USING <fs_table>[]
CHANGING <fs_return>[].
READ TABLE <fs_return> INTO ls_return INDEX 1.
WRITE ls_return-fieldval.

ENDCASE.

*-- End-of-Selection
END-OF-SELECTION.

*-------------------------------------------------------------------*
FORM call_f4 USING p_table LIKE <fs_table>[]
CHANGING p_return LIKE <fs_return>[].

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
ddic_structure = 'MARA_MATNR'
retfield = 'MATNR'
* PVALKEY = ' '
* DYNPPROG = ' '
* DYNPNR = ' '
* DYNPROFIELD = ' '
* STEPL = 0
window_title = window_title
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD = CALLBACK_METHOD
* MARK_TAB = MARK_TAB
* IMPORTING
* USER_RESET = USER_RESET
TABLES
value_tab = p_table[]
* FIELD_TAB = FIELD_TAB
return_tab = p_return[]
* DYNPFLD_MAPPING = DYNPFLD_MAPPING
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDFORM.

Gruss
thanks Jens

Re: Tabelle an form übergeben

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Hallo,
leider hat das alles nix gebracht. Aber ich hab einen anderen Ansatz verfolgt. g_wa_atlstd ist eine golbal definiertes Workarea, g_atlstd eine gobal definierte Tabelle.

Code: Alles auswählen.

FORM zpdplan_prepare_f4_v01.
CASE <pub__this_alias>.
 WHEN 'ZPPATMMAS'.

g_wa_atlstd-dattab = 'ZPPATMPMASS'.
     g_wa_atlstd-dattab2 = 'ZPPSTDATMPMASS'.
     g_wa_atlstd-wert = 'ZPPDATATMPMASS'.
     g_wa_atlstd-kb =l_wertkb.
     APPEND g_wa_atlstd TO g_atlstd.

PERFORM zpdplan_get_atlf4_v01.
Weiter mit

Code: Alles auswählen.


FORM zpdplan_get_atlf4_V01.

  DATA: l_ittab TYPE REF  TO data,
        l_tabname TYPE tabname,
        l_retfield TYPE dfies-fieldname,
        l_it_returntab TYPE TABLE OF ddshretval, "Returntabelle
        l_wa_returntab LIKE LINE OF l_it_returntab,
        dbtab_syntax TYPE string,
        dbtab_syntax1 type string value ' = ',
        dbtab_syntax2 type string,
        dbtab_syntax3 type string,
        dbtab_syntax4 type string.

FIELD-SYMBOLS <fs> TYPE STANDARD TABLE.

*String für Select-Abfrage zusammen setzen
CONCATENATE g_wa_atlstd-dattab 'INNER JOIN' g_wa_atlstd-dattab2 'ON' into dbtab_syntax separated by space.
CONCATENATE g_wa_atlstd-dattab'~'g_wa_atlstd-wert into dbtab_syntax1.
CONCATENATE g_wa_atlstd-dattab2'~'g_wa_atlstd-wert into dbtab_syntax2.
concatenate 'WHERE' 'ZPPISTANDARD' '=' g_wa_atlstd-kb into dbtab_syntax3 separated by space.
concatenate dbtab_syntax dbtab_syntax1 '=' dbtab_syntax2 dbtab_syntax3 into dbtab_syntax4 separated by space.


 READ TABLE g_atlstd INTO g_wa_atlstd INDEX 1. 
 CREATE DATA l_ittab TYPE STANDARD TABLE OF (g_wa_atlstd-dattab). 
 ASSIGN l_ittab->* TO <fs>. "Tabelle dem FS zuweisen

*SELECT (g_wa_atlstd-wert) INTO corresponding fields of TABLE <fs> FROM ZPPATMPMASS inner join ZPPSTDATMPMASS on ZPPATMPMASS~ZPPIDATMPMASS = ZPPSTDATMPMASS~ZPPIDATMPMASS where ZPPIDSTANDARD = 'KB2'. "Dann Daten holen
SELECT (g_wa_atlstd-wert) INTO corresponding fields of TABLE <fs>  FROM (dbtab_syntax4).

  l_tabname = g_wa_atlstd-dattab. "Casting....
  l_retfield = g_wa_atlstd-wert. "Casting...

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "bereitstellen
    EXPORTING
*      ddic_structure  =
      retfield        = l_retfield
      value_org       = 'S'
      display         = 'F'
    TABLES
    value_tab       = <fs>
      return_tab      = l_it_returntab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  READ TABLE l_it_returntab INTO l_wa_returntab INDEX 1.

  <pub__this_value> = l_wa_returntab-fieldval. 

Funktioniert soweit, nur habe ich das Problem, dass er bei der Abfrage über zwei Tabellen mit INNER JOIN die dynamische Angabe der Tabelle nicht akzeptiert (ist wohl so :twisted: ). Nach Recherchen habe ich versucht den Befehl für die Abfrage in einen String zu packen und diesen dann an die Abfrage zu übergeben. Funtioniert nicht (String wird richtig zusammen gesetzt, das habe ich geprüft). Führen ich die Abfrage direkt aus, funktioniert der JOIN einwandfrei. Jetzt weiß grad an der Stelle nicht mehr weiter. Dazu noch jemand ne Idee?

Also folgende Abfrage funktioniert

Code: Alles auswählen.

SELECT (g_wa_atlstd-wert) INTO corresponding fields of TABLE <fs> FROM ZPPATMPMASS inner join ZPPSTDATMPMASS on ZPPATMPMASS~ZPPIDATMPMASS = ZPPSTDATMPMASS~ZPPIDATMPMASS where ZPPIDSTANDARD = 'KB2'.
Folgende Abfrage funktioniert nicht

Code: Alles auswählen.

SELECT (g_wa_atlstd-wert) INTO corresponding fields of TABLE <fs>  FROM (dbtab_syntax4).
String ist wie folgt zusammengesetzt

Code: Alles auswählen.

*String für Select-Abfrage zusammen setzen
CONCATENATE g_wa_atlstd-dattab 'INNER JOIN' g_wa_atlstd-dattab2 'ON' into dbtab_syntax separated by space.
CONCATENATE g_wa_atlstd-dattab'~'g_wa_atlstd-wert into dbtab_syntax1.
CONCATENATE g_wa_atlstd-dattab2'~'g_wa_atlstd-wert into dbtab_syntax2.
concatenate 'WHERE' 'ZPPISTANDARD' '=' g_wa_atlstd-kb into dbtab_syntax3 separated by space.
concatenate dbtab_syntax dbtab_syntax1 '=' dbtab_syntax2 dbtab_syntax3 into dbtab_syntax4 separated by space.
Ich werd bald gaga mit dem Teil :?.

Gruß
Tatjana

Vergleichbare Themen

3
Antw.
6857
Views
interne Tabelle an Form übergeben
von Andrzej » 17.05.2017 14:14 • Verfasst in ABAP® für Anfänger
2
Antw.
2116
Views
Nochmal Tabelle übergeben an Form
von Tgut » 12.09.2014 11:13 • Verfasst in ABAP® für Anfänger
1
Antw.
1527
Views
17
Antw.
9306
Views
Interne Tabelle an Form übergeben innerhalb eines FuBa's
von shapoc » 09.05.2006 14:36 • Verfasst in ABAP® Core
3
Antw.
4208
Views
Selektionstabelle als Parameter an Form Routine übergeben
von ronin » 01.08.2008 17:00 • 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.

Unbeantwortete Forenbeiträge

Erweiterung in ME51N/ME52N:
vor 3 Wochen von ABAPlerv 1 / 2242
Erweiterung in ME51N/ME52N:
vor 3 Wochen von ABAPlerv 1 / 2063