Code: Alles auswählen.
Struktur zvolumenstruc
Feld kunnr
ich erstelle ein programm und möchte weitere struktur erzeugen während der Laufzeit des Programms.
Struktur zvolumenstruc
Feld kunnr
Feld vbeln --> einfügen während der Laufzeit
nach Beenden des Programm, gehe ich in se11, der struktur sollte unverändert erscheinen
Struktur zvolumenstruc
Feld kunnr
Code: Alles auswählen.
PROGRAM zliefervolu.
*---------------------------------------------------------------------*
* Definition *
*---------------------------------------------------------------------*
TABLES: likp, "Vertriebsbeleg: Lieferung: Kopfdaten
lips, "Vertriebsbeleg: Lieferung: Positionsdaten
kna1, "Kundenstamm (allgemeiner Teil)
marm. "Mengeneinheiten zum Material
FIELD-SYMBOLS: <fs_data> TYPE REF TO data,
<fs_1> TYPE ANY TABLE,
<fs_2>,
<fs_3>.
DATA: BEGIN OF i_vbeln OCCURS 1,
faktor(5) TYPE n,
END OF i_vbeln.
DATA: BEGIN OF v_lief OCCURS 1,
faktor TYPE string,
END OF v_lief.
DATA: ok_code LIKE sy-ucomm, "Bildschirmbilder, Funktionscode, der PAI ausgelöst hat
i_datatable TYPE TABLE OF zvolutable,
v_debit TYPE kunnr,
v_lifg TYPE vrkme,
v_datumkl TYPE wadat,
v_datumgr TYPE wadat,
v_faktor(5) TYPE n,
v_faktors TYPE string,
v_datum TYPE string,
v_count TYPE i,
lt_fieldcatalog TYPE lvc_t_fcat,
ls_fieldcatalog TYPE lvc_s_fcat,
new_table TYPE REF TO data,
new_line TYPE REF TO data,
lt_data TYPE REF TO data,
v_datumlow(10) TYPE c,
v_datumhigh(10) TYPE c,
v_text TYPE string,
name_catolog TYPE lvc_t_fcat, "Ändern von Spaltenname
l_field LIKE LINE OF name_catolog, "Kurzspeicher für Spaltenname
g_container TYPE scrfname VALUE 'BCALV_GRID_CONTROL',
grid1 TYPE REF TO cl_gui_alv_grid, "ALV Grid Definition
creattable TYPE REF TO cl_alv_table_create,
g_custom_container TYPE REF TO cl_gui_custom_container.
SELECT-OPTIONS: s_kunnr FOR likp-kunnr, "Lieferung
s_wadat FOR likp-wadat OBLIGATORY, "Geplantes Datum der Warenbewegung
s_vbeln FOR likp-vbeln. "Warenempfänger
*---------------------------------------------------------------------*
* Main Program *
*---------------------------------------------------------------------*
START-OF-SELECTION.
CLEAR: likp.
* Selektion Vertriebsbeleg: Lieferung: Kopfdaten
SELECT * FROM likp WHERE vbeln IN s_vbeln
AND wadat IN s_wadat
AND kunnr IN s_kunnr
ORDER BY vbeln.
* CLEAR: kna1.
** Selektion Kundenstamm (allgemeiner Teil)
* SELECT SINGLE * FROM kna1 WHERE kunnr EQ likp-kunnr.
* CONCATENATE likp-kunnr ` ` kna1-name1 INTO i_datatable-kunnr.
*
* CLEAR: lips.
* Selektion Vertriebsbeleg: Lieferung: Positionsdaten
SELECT * FROM lips WHERE vbeln EQ likp-vbeln.
* CLEAR: marm.
** Selektion Mengeneinheiten zum Material
* SELECT SINGLE * FROM marm WHERE matnr EQ lips-matnr
* AND meinh EQ lips-vrkme.
MOVE lips-umvkz TO i_vbeln-faktor.
APPEND i_vbeln.
ENDSELECT.
ENDSELECT.
CLEAR: i_vbeln.
SORT i_vbeln BY faktor.
*------------------------*
* Datumsfeld *
*------------------------*
MOVE s_wadat-low TO v_datumkl.
v_datumlow = v_datumkl+6.
WRITE '.' TO v_datumlow+2.
WRITE v_datumkl+4(2) TO v_datumlow+3.
WRITE '.' TO v_datumlow+5.
WRITE v_datumkl(4) TO v_datumlow+6.
LOOP AT s_wadat WHERE high IS NOT INITIAL.
MOVE s_wadat-high TO v_datumgr.
ENDLOOP.
v_datumhigh = v_datumgr+6.
WRITE '.' TO v_datumhigh+2.
WRITE v_datumgr+4(2) TO v_datumhigh+3.
WRITE '.' TO v_datumhigh+5.
WRITE v_datumgr(4) TO v_datumhigh+6.
IF v_datumgr IS NOT INITIAL.
CONCATENATE v_datumlow '-' v_datumhigh INTO v_datum.
ELSE.
MOVE v_datumlow TO v_datum.
ENDIF.
*
v_text = 'datum'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
*------------------------*
* Faktorfelder *
*------------------------*
LOOP AT i_vbeln.
IF i_vbeln-faktor NE v_faktor.
MOVE i_vbeln-faktor TO v_faktor.
PACK i_vbeln-faktor TO v_faktors.
CONDENSE v_faktors.
CONCATENATE v_faktors 'er' INTO v_lief-faktor.
APPEND v_lief.
ENDIF.
ENDLOOP.
CLEAR: v_lief.
LOOP AT v_lief.
ls_fieldcatalog-fieldname = v_lief-faktor.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDLOOP.
ASSIGN lt_data TO <fs_data>.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fieldcatalog
IMPORTING
ep_table = <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ASSIGN <fs_data>->* TO <fs_1>.
CREATE DATA new_line LIKE LINE OF <fs_1>.
ASSIGN new_line->* TO <fs_2>.
CALL SCREEN 100.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
*
*** Definition von Feldkatalog
* l_field-fieldname = 'DEBITOR'.
* l_field-coltext = v_datum4.
* APPEND l_field TO name_catolog.
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container.
** ALV Methode aufruf für Ausgabe
* CALL METHOD grid1->set_table_for_first_display
* EXPORTING
* i_structure_name = <fs_1>
* CHANGING
* it_outtab = i_result.
ENDIF.
ENDMODULE. "PBO OUTPUT
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
* to react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE ok_code.
WHEN 'EXIT'.
PERFORM exit_program.
WHEN OTHERS.
* do nothing
ENDCASE.
CLEAR ok_code.
ENDMODULE. "PAI INPUT
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
* CALL METHOD G_CUSTOM_CONTAINER->FREE.
* CALL METHOD CL_GUI_CFW=>FLUSH.
LEAVE PROGRAM.
ENDFORM. "EXIT_PROGRAM
Code: Alles auswählen.
* ALV Methode aufruf für Ausgabe
CALL METHOD grid1->set_table_for_first_display
* EXPORTING
* i_structure_name = 'lvc_t_fcat'
CHANGING
it_outtab = <fs_1>
it_fieldcatalog = lt_fieldcatalog.
Code: Alles auswählen.
LOOP AT v_lief.
ls_fieldcatalog-fieldname = v_lief-faktor.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDLOOP.
Code: Alles auswählen.
LOOP AT v_lief.
ls_fieldcatalog-fieldname = v_lief-faktor.
************************************
ls_fieldcatalog-coltext = v_lief-faktor.
************************************
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDLOOP.
Nur Geduld, manche müssen auch noch arbeitenkostonstyle hat geschrieben:bitte dringend um hilfe
Code: Alles auswählen.
TYPES: BEGIN OF t_data,
kunnr TYPE kunnr,
umvkz TYPE umvkz,
lfimg TYPE lfimg,
vol TYPE i,
g_vol TYPE i,
END OF t_data,
BEGIN OF t_alv,
kunnr TYPE kunnr,
feld_1 TYPE i,
feld_2 TYPE i,
feld_3 TYPE i,
g_vol TYPE i,
END OF t_alv.
DATA: gt_data TYPE TABLE OF t_data,
gw_data TYPE t_data,
gt_alv TYPE TABLE OF t_alv,
gw_alv TYPE t_alv,
g_num(1) TYPE c,
g_fieldname(100) TYPE c.
FIELD-SYMBOLS <fs_field> TYPE i.
* Itab füllen
*1. Kunde
CLEAR gw_data.
gw_data-kunnr = 505041.
gw_data-lfimg = 14645.
gw_data-umvkz = 1.
gw_data-vol = 272548.
APPEND gw_data TO gt_data.
CLEAR gw_data.
gw_data-kunnr = 505041.
gw_data-lfimg = 6.
gw_data-umvkz = 3.
gw_data-vol = 6.
gw_data-g_vol = 308564.
APPEND gw_data TO gt_data.
* 2.Kunde
CLEAR gw_data.
gw_data-kunnr = 506160.
gw_data-lfimg = 1638.
gw_data-umvkz = 1.
gw_data-vol = 29790.
APPEND gw_data TO gt_data.
CLEAR gw_data.
gw_data-kunnr = 506160.
gw_data-lfimg = 6.
gw_data-umvkz = 2.
gw_data-vol = 6.
APPEND gw_data TO gt_data.
CLEAR gw_data.
gw_data-kunnr = 506160.
gw_data-lfimg = 39.
gw_data-umvkz = 3.
gw_data-vol = 431.
gw_data-g_vol = 5444.
APPEND gw_data TO gt_data.
* Sortieren muss sein
SORT gt_data BY kunnr umvkz.
* Daten drehen und in ALV-Tabelle stellen
LOOP AT gt_data INTO gw_data.
AT NEW kunnr.
* Kundennummer übernehmen
gw_alv-kunnr = gw_data-kunnr.
ENDAT.
* Mittels Nummer aus UMVKZ das Zielfeld bestimmen
g_num = gw_data-umvkz.
CONCATENATE 'GW_ALV-FELD_' "Feldnamen
g_num
INTO g_fieldname.
ASSIGN (g_fieldname) TO <fs_field>.
<fs_field> = gw_data-vol.
gw_alv-g_vol = gw_data-g_vol.
AT END OF kunnr.
* Mit dem letzten Satz die Daten übernehmen
APPEND gw_alv TO gt_alv.
CLEAR gw_alv.
ENDAT.
ENDLOOP.
LOOP AT gt_alv INTO gw_alv.
WRITE: / gw_alv-kunnr,
gw_alv-feld_1,
gw_alv-feld_2,
gw_alv-feld_3,
gw_alv-g_vol.
ENDLOOP. "gt_alv INTO gw_alv
So wie ich es verstehe, macht mein Programm genau das was du willst. Nur das bei dir die zweite Tabelle dynamisch erzeugt wird. Das habe ich mir in meinem Beispiel gespart.kostonstyle hat geschrieben: erstmal vielen dank für deine mühe, aber das ist nicht ganz was ich meine.
der interne tabelle i_lieferdatenn ist mit Daten gefüllt. Anhand von i_lieferdatenn-umvkz
Nummer muss Daten in der dymnamische Tabelle <fs_1> mit der Daten i_lieferdatenn gefüllt.
Code: Alles auswählen.
* Deine Daten sind in Tabelle i_lieferdaten vorhanden
* und nach Kundennummer sortiert
* x Zeilen aus Tabelle i_lieferdaten werden zu einer Zeile in Tabelle
* <fs_1> geformt
* Daten initialisieren
CLEAR <fs_2>.
LOOP AT i_lieferdaten.
* Die Kundennummer und das Gesammtevolumen können wir einfach
* übernehmen.
<fs_2>-kunnr = i_lieferdaten-kunnr.
<fs_2>-volumen = i_lieferdaten-volumen.
* Jetzt muss noch der Wert aus i_lieferdaten-lfimg übernommen werden.
* Das Feld i_lieferdaten-umvkz sagt uns in welches Feld es in <fs_2> gestellt werden muss.
* Zuerst den Namen zusammen basteln :
CONCATENATE '<FS_2>-' "Das ist ja immer gleich
i_lieferdaten-umvkz "Das ist der Feldname
INTO g_fieldname.
* In g_fieldname steht also jetzt der Feldname (<FS_2>-1, <FS_2>-2,
* <FS_2>-4, usw.) in das lfimg verschoben werden soll.
* Dynamische Zuweisungen gehen nur über field-symbols.
ASSIGN (g_fieldname) TO <fs_3>.
* Jetzt zeigt <fs_3> auf das Feld <FS_2>-1, bzw. <FS_2>-2, <FS_2>-4, usw.
* Dann den Wert zuweisen
<fs_3> = i_lieferdaten-lfimg.
* In der nächsten Schleife wird das ganze für 2, dann für 4, usw. gemacht
* Speichern von <fs_2> nicht vergessen! Wenn kein neuer Satz für den
* Kunden kommt, muss gespeichert werden.
AT END OF kunnr.
APPEND <fs_2> to <fs_1>.
* Daten initialisieren
CLEAR <fs_2>.
ENDAT.
ENDLOOP.