2007 Mar 08 1:06 PM
hey
i want fill my dynamic_table but i can't
look thats the program
can anybody help me please!
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>,
<fs_4> TYPE ANY TABLE.
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
v_volurech(10) TYPE n, "Volumenberechnung
i_lieferdatenn TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2,
i_lieferdaten TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2,
volutot TYPE string,
v_debit TYPE kunnr,
v_umvkz TYPE umvkz,
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
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.
DATA: i_tabledata TYPE TABLE OF zvolutable.
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.
REFRESH: i_lieferdaten.
* 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: i_lieferdaten.
MOVE likp-kunnr TO i_lieferdaten-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.
CLEAR v_volurech.
v_volurech = lips-lfimg * marm-hoehe.
MOVE v_volurech TO i_lieferdaten-volomen.
MOVE lips-lfimg TO i_lieferdaten-lfimg.
MOVE lips-umvkz TO i_lieferdaten-umvkz.
APPEND i_lieferdaten.
* Vorhandene Faktor abspeichern
MOVE lips-umvkz TO i_vbeln-faktor.
APPEND i_vbeln.
ENDSELECT.
* MOVE likp-vbeln TO lieferschein-vbeln.
* APPEND lieferschein.
ENDSELECT.
CLEAR: i_vbeln, i_lieferdaten.
SORT i_vbeln BY faktor.
SORT i_lieferdaten BY kunnr umvkz ASCENDING.
*------------------------*
* Matrixdaten füllen *
*------------------------*
LOOP AT i_lieferdaten.
IF i_lieferdaten-kunnr NE v_debit.
IF v_count NE 0.
APPEND i_lieferdatenn.
ENDIF.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-kunnr TO v_debit.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
v_count = v_count + 1.
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz EQ v_umvkz.
ADD i_lieferdaten-lfimg TO i_lieferdatenn-lfimg.
ADD i_lieferdaten-volomen TO i_lieferdatenn-volomen.
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz NE v_umvkz.
APPEND i_lieferdatenn.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
ENDIF.
ENDLOOP.
*------------------------*
* 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.
CLEAR v_text.
v_text = 'DATUM'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
*------------------------*
* Faktorfelder *
*------------------------*
CLEAR: v_count.
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.
MOVE v_faktors TO v_lief-faktor.
v_count = v_count + 1.
APPEND v_lief.
ENDIF.
ENDLOOP.
CLEAR v_text.
v_text = 'VOLUMEN'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
CLEAR: v_lief.
*-----------------------------*
* Erstellen von Dym. Struktur *
*-----------------------------*
LOOP AT v_lief.
IF v_lief-faktor EQ 'DATUM' OR v_lief-faktor EQ 'VOLUMEN'.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
IF v_lief-faktor EQ 'DATUM'.
ls_fieldcatalog-coltext = v_datum.
* ls_fieldcatalog-inttype = .
ls_fieldcatalog-outputlen = '20'.
ELSEIF v_lief-faktor EQ 'VOLUMEN'.
ls_fieldcatalog-coltext = 'Volumen'.
ls_fieldcatalog-outputlen = '10'.
ENDIF.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ELSE.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
ls_fieldcatalog-coltext = v_lief-faktor.
ls_fieldcatalog-outputlen = '6'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDIF.
ENDLOOP.
ASSIGN lt_data TO <fs_data>.
IF v_count NE 0.
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>.
*<b> I will here fill <fs_1></b>
* <fs_1> = i_lieferdatenn-kunnr.
* CREATE DATA new_line LIKE LINE OF <fs_1>.
*
* ASSIGN new_line->* TO <fs_2>.
LOOP AT i_lieferdatenn.
* MOVE i_lieferdaten-kunnr TO <fs_1>.
* MOVE <fs_2> TO <fs_1>.
ENDLOOP.
* CLEAR: kna1.
*** Selektion Kundenstamm (allgemeiner Teil)
* SELECT SINGLE * FROM kna1 WHERE kunnr EQ likp-kunnr.
* CONCATENATE likp-kunnr ` ` kna1-name1 INTO i_datatable-kunnr
ELSE.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-tit
textline1 = text-feh
start_column = 15 "Abstand von Links
start_row = 6. "Abstand von Oben
ENDIF.
CALL SCREEN 100.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
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 = 'lvc_t_fcat'
CHANGING
it_outtab = <fs_1>
it_fieldcatalog = lt_fieldcatalog.
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
hey
i want fill my dynamic_table but i can't
look thats the program
can anybody help me please!
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>,
<fs_4> TYPE ANY TABLE.
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
v_volurech(10) TYPE n, "Volumenberechnung
i_lieferdatenn TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2,
i_lieferdaten TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2,
volutot TYPE string,
v_debit TYPE kunnr,
v_umvkz TYPE umvkz,
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
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.
DATA: i_tabledata TYPE TABLE OF zvolutable.
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.
REFRESH: i_lieferdaten.
* 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: i_lieferdaten.
MOVE likp-kunnr TO i_lieferdaten-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.
CLEAR v_volurech.
v_volurech = lips-lfimg * marm-hoehe.
MOVE v_volurech TO i_lieferdaten-volomen.
MOVE lips-lfimg TO i_lieferdaten-lfimg.
MOVE lips-umvkz TO i_lieferdaten-umvkz.
APPEND i_lieferdaten.
* Vorhandene Faktor abspeichern
MOVE lips-umvkz TO i_vbeln-faktor.
APPEND i_vbeln.
ENDSELECT.
* MOVE likp-vbeln TO lieferschein-vbeln.
* APPEND lieferschein.
ENDSELECT.
CLEAR: i_vbeln, i_lieferdaten.
SORT i_vbeln BY faktor.
SORT i_lieferdaten BY kunnr umvkz ASCENDING.
*------------------------*
* Matrixdaten füllen *
*------------------------*
LOOP AT i_lieferdaten.
IF i_lieferdaten-kunnr NE v_debit.
IF v_count NE 0.
APPEND i_lieferdatenn.
ENDIF.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-kunnr TO v_debit.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
v_count = v_count + 1.
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz EQ v_umvkz.
ADD i_lieferdaten-lfimg TO i_lieferdatenn-lfimg.
ADD i_lieferdaten-volomen TO i_lieferdatenn-volomen.
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz NE v_umvkz.
APPEND i_lieferdatenn.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
ENDIF.
ENDLOOP.
*------------------------*
* 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.
CLEAR v_text.
v_text = 'DATUM'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
*------------------------*
* Faktorfelder *
*------------------------*
CLEAR: v_count.
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.
MOVE v_faktors TO v_lief-faktor.
v_count = v_count + 1.
APPEND v_lief.
ENDIF.
ENDLOOP.
CLEAR v_text.
v_text = 'VOLUMEN'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
CLEAR: v_lief.
*-----------------------------*
* Erstellen von Dym. Struktur *
*-----------------------------*
LOOP AT v_lief.
IF v_lief-faktor EQ 'DATUM' OR v_lief-faktor EQ 'VOLUMEN'.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
IF v_lief-faktor EQ 'DATUM'.
ls_fieldcatalog-coltext = v_datum.
* ls_fieldcatalog-inttype = .
ls_fieldcatalog-outputlen = '20'.
ELSEIF v_lief-faktor EQ 'VOLUMEN'.
ls_fieldcatalog-coltext = 'Volumen'.
ls_fieldcatalog-outputlen = '10'.
ENDIF.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ELSE.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
ls_fieldcatalog-coltext = v_lief-faktor.
ls_fieldcatalog-outputlen = '6'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDIF.
ENDLOOP.
ASSIGN lt_data TO <fs_data>.
IF v_count NE 0.
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>.
*<b> I will here fill <fs_1></b>
* <fs_1> = i_lieferdatenn-kunnr.
* CREATE DATA new_line LIKE LINE OF <fs_1>.
*
* ASSIGN new_line->* TO <fs_2>.
LOOP AT i_lieferdatenn.
* MOVE i_lieferdaten-kunnr TO <fs_1>.
* MOVE <fs_2> TO <fs_1>.
ENDLOOP.
* CLEAR: kna1.
*** Selektion Kundenstamm (allgemeiner Teil)
* SELECT SINGLE * FROM kna1 WHERE kunnr EQ likp-kunnr.
* CONCATENATE likp-kunnr ` ` kna1-name1 INTO i_datatable-kunnr
ELSE.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-tit
textline1 = text-feh
start_column = 15 "Abstand von Links
start_row = 6. "Abstand von Oben
ENDIF.
CALL SCREEN 100.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
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 = 'lvc_t_fcat'
CHANGING
it_outtab = <fs_1>
it_fieldcatalog = lt_fieldcatalog.
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
2007 Mar 08 1:10 PM
hi,
check this code it is similar to u r s just debug this code.
REPORT zerrfiledit3 MESSAGE-ID ze NO STANDARD PAGE HEADING.
Tables.
TABLES: zzxrice,
zzsuslock,
zerrconfig,
dd03l, "Systemtabelle mit den Strukturen und den Feldern
dd04t.
DATA: edit_text1(80) TYPE c,
edit_text2(80) TYPE c.
Includes.
INCLUDE . "cd-
variables for dynamic declaration "cd+...
DATA: ref_itfarbe TYPE REF TO data,
ref_wafarbe TYPE REF TO data,
ref_itdaten TYPE REF TO data,
ref_wadaten TYPE REF TO data,
ref_itbackup TYPE REF TO data,
ref_wabackup TYPE REF TO data.
field symbols
FIELD-SYMBOLS: TYPE table. "...cd+
begin of insertion SW_05042004
DATA: ref_wadel TYPE REF TO data,
ref_itdel TYPE REF TO data.
FIELD-SYMBOLS: TYPE ANY.
DATA: h_randomi4 TYPE i,
poslfdnmr TYPE i.
end of insertion SW_05042004
Working Areas
DATA: wazerrsyn LIKE zerrsyn,
BEGIN OF wafieldnames,
fieldname(30), " Gladiator 29/08
intlen(6),
END OF wafieldnames.
DATA: BEGIN OF wadown,
field(2500),
END OF wadown.
working area for colour-table
DATA: wact TYPE LINE OF lvc_t_scol.
working area for locking of error-file
DATA wazsuslock LIKE zzsuslock.
Internal Tables
DATA: itfieldnames LIKE STANDARD TABLE OF wafieldnames,
itdown LIKE STANDARD TABLE OF wadown.
Temporary Variables.
DATA: v_fullfilename(90) TYPE c,
v_backup(1) TYPE c,
v_error(1) TYPE c,
v_saved(1) TYPE c,
v_aendern(1) TYPE c,
v_edited(1) TYPE c,
v_editflag(1) TYPE c,
v_unlock_user LIKE sy-uname,
v_fullfilename_backup LIKE v_fullfilename,
v_filename_backup LIKE v_fullfilename,
v_path_backup LIKE v_fullfilename,
lock_timestamp LIKE tzonref-tstamps,
current_timestamp LIKE tzonref-tstamps,
difference TYPE i,
g_repid LIKE sy-repid,
v_issaved TYPE c.
DATA: segstruct LIKE zzxrice-filetype, "cd+...
farb_strukt LIKE zzxrice-filetype VALUE 'ZFARBREF'.
DATA: it_dfies TYPE TABLE OF dfies,
wa_dfies TYPE dfies.
DATA: f_anzahl TYPE i,
field LIKE sy-tabix,
counter LIKE sy-index.
DATA: lt_alv_cat TYPE TABLE OF lvc_s_fcat,
ls_alv_cat LIKE LINE OF lt_alv_cat. "...cd+
begin of insertion SW_05042004
DATA: sortfeld(500).
end of insertion SW_05042004
Constants.
CONSTANTS: c_backup_dir(15) TYPE c VALUE 'SUSFILE_BACKUP/',
c_display(2) TYPE c VALUE '03', " DT0K947592
c_change(2) TYPE c VALUE '02'. " DT0K947592
************************************************************************
Data definitions for ALV
************************************************************************
DATA: alv TYPE REF TO cl_gui_alv_grid,
e_object TYPE REF TO cl_ctmenu,
cont TYPE REF TO cl_gui_custom_container,
listlayout TYPE lvc_s_layo,
toolbarexc TYPE ui_functions,
okcode LIKE sy-ucomm,
v_okcode LIKE okcode,
save_ok LIKE okcode,
it_fields TYPE TABLE OF lvc_s_fcat,
wa_fields LIKE lvc_s_fcat,
row_col_stbl TYPE lvc_s_stbl,
gs_layout TYPE disvariant.
Variables for colour display
DATA: anzahl TYPE i,
feldnummer TYPE i,
hilf TYPE i,
farbfeld(50),
code(1),
col_name LIKE dd04t-scrtext_l,
rollname LIKE dd03l-rollname,
ind TYPE i.
FIELD-SYMBOLS: TYPE ANY.
**********************************************************************
Load of Program
************************************************************************
LOAD-OF-PROGRAM. "cd+...
dynamic declaration of internal tables and work areas
IMPORT segstruct FROM MEMORY ID sy-uname.
FREE MEMORY ID sy-uname.
creation of internal table itdaten and structure wadaten...
CALL FUNCTION 'DDIF_NAMETAB_GET'
EXPORTING
tabname = segstruct
TABLES
dfies_tab = it_dfies
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
creation of structure
LOOP AT it_dfies INTO wa_dfies.
ls_alv_cat-fieldname = wa_dfies-fieldname .
ls_alv_cat-ref_table = segstruct.
ls_alv_cat-ref_field = wa_dfies-fieldname .
APPEND ls_alv_cat TO lt_alv_cat.
ENDLOOP.
internal table build
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_alv_cat
IMPORTING
ep_table = ref_itdaten.
ASSIGN ref_itdaten->* TO .
...creation of internal table itdaten and structure wadaten
creation of internal table itbackup and structure wabackup...
ASSIGN ref_itdaten->* TO .
...creation of internal table itbackup and structure wabackup
begin of insertion SW_05042004
creation of internal table itdel and structure wadel...
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_alv_cat
IMPORTING
ep_table = ref_itdel.
ASSIGN ref_itdel->* TO .
end of insertion SW_05042004
creation of internal table itfarbe and structure wafarbe...
creation of structure
ls_alv_cat-fieldname = 'CT'.
ls_alv_cat-ref_table = farb_strukt.
ls_alv_cat-ref_field = 'CT'.
APPEND ls_alv_cat TO lt_alv_cat.
internal table build
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_alv_cat
IMPORTING
ep_table = ref_itfarbe.
ASSIGN ref_itfarbe->* TO .
CLEAR: it_dfies, wa_dfies, ls_alv_cat, lt_alv_cat.
...creation of internal table itfarbe and structure wafarbe "...cd+
**********************************************************************
Local class for Definition (colour change)
**********************************************************************
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column,
feldaenderung
IMPORTING
i_row TYPE lvc_s_row
i_column TYPE lvc_s_col
i_posfe TYPE i
EXPORTING
i_changed TYPE c,
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
PRIVATE SECTION.
DATA: posfa TYPE i,
posfe TYPE i,
farbindex TYPE i.
ENDCLASS. "lcl_handler DEFINITION
local class for change of colours
CLASS lcl_handler IMPLEMENTATION.
METHOD handle_double_click.
DATA: changed(1),
row_col_stbl TYPE lvc_s_stbl.
LOOP AT itfieldnames INTO wafieldnames WHERE
fieldname = e_column-fieldname.
posfa = sy-tabix - 1.
posfe = sy-tabix.
ENDLOOP.
change entry for display mode
1. colour of a cell
2. change X to -
READ TABLE posfa(1) = 'X'. "cd
IF <wafarbe>-farbcode+posfa(1) = 'X'. "cd-
did field content change
Method fieldchange
ASSIGN COMPONENT counter "cd+...
OF STRUCTURE INTO wact. "cd+
LOOP AT <wafarbe>-ct INTO wact "cd-
WHERE fname = e_column-fieldname. "cd-
IF wact-fname = e_column-fieldname. "cd+
wact-color-col = col_positive.
farbindex = sy-tabix.
EXIT. "cd+
ENDIF. "cd+
ENDLOOP.
MODIFY <wafarbe>-ct FROM wact INDEX farbindex. "cd-
MODIFY FROM wact INDEX farbindex."cd+
<wafarbe>-farbcode+posfa(1) = '-'. "cd-
posfa(1) = '-'. "cd
MODIFY refresh_table_display
EXPORTING
is_stable = row_col_stbl.
ELSE.
MESSAGE i332.
ENDIF.
ELSEIF <wafarbe>-farbcode+posfa(1) = '-'. "cd-
ELSEIF posfa(1) = '-'. "cd
nothing should happen
ELSE.
MESSAGE i331.
ENDIF.
ENDMETHOD. "handle_double_click
METHOD feldaenderung.
fieldsymbols to retrieve the field-values
FIELD-SYMBOLS: TYPE ANY.
retrieve the field-values from value table
READ TABLE .
IF sy-subrc NE 0. EXIT. ENDIF.
ENDDO.
retrieve the field-values from display-table
DO posfe TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE .
IF sy-subrc NE 0. EXIT. ENDIF.
ENDDO.
compare values
IF is_ready_for_input( ) = 1.
append a separator to normal toolbar
CLEAR ls_toolbar.
MOVE 3 TO ls_toolbar-butn_type.
APPEND ls_toolbar TO e_object->mt_toolbar.
append an icon for search and replace
CLEAR ls_toolbar.
MOVE 'REPLACE' TO ls_toolbar-function.
MOVE icon_replace TO ls_toolbar-icon.
MOVE text-015 TO ls_toolbar-quickinfo.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDIF.
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
DATA: lt_columns TYPE lvc_t_col,
n TYPE i.
CASE e_ucomm.
WHEN 'REPLACE'.
CALL METHOD alv->get_selected_columns
IMPORTING
et_index_columns = lt_columns.
CALL METHOD cl_gui_cfw=>flush.
IF sy-subrc NE 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = g_repid
txt2 = sy-subrc
txt1 = 'Error in Flush'(500).
ELSE.
DESCRIBE TABLE lt_columns LINES n.
IF n <> 1.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-001
textline1 = text-005
textline2 = ' '
start_column = 15
start_row = 6
EXCEPTIONS
OTHERS = 1.
ELSE.
PERFORM search_replace TABLES lt_columns.
ENDIF.
ENDIF.
ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl_handler IMPLEMENTATION
************************************************************************
Selection-Screen
************************************************************************
SELECTION-SCREEN: SKIP 1,
COMMENT /1(72) text-000,
COMMENT /1(72) text-001,
SKIP 1,
BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: p_type LIKE zzxrice-zzxtype,
p_objn LIKE zzxrice-zzxobjn,
p_cntr LIKE zzxrice-zzxcntr.
SELECTION-SCREEN END OF BLOCK b1.
DATA: event_receiver TYPE REF TO lcl_handler.
************************************************************************
Start of Selection
************************************************************************
START-OF-SELECTION.
Get the suspense filename for this interface from the ZZXRICE table.
SELECT SINGLE * FROM zzxrice WHERE zzxtype = p_type
AND zzxobjn = p_objn
AND zzxcntr = p_cntr.
IF sy-subrc <> 0.
MESSAGE e521 WITH p_objn 'ZZXRICE'.
ENDIF.
CONCATENATE zzxrice-suspath zzxrice-susfile INTO v_fullfilename.
begin of insertion SW_05042004
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004
Open the input suspense file.
OPEN DATASET v_fullfilename FOR INPUT IN LEGACY TEXT MODE
IGNORING CONVERSION ERRORS.
IF sy-subrc <> 0.
MESSAGE e522 WITH v_fullfilename 'ZZXRICE'.
ENDIF.
begin of insertion SW_05042004
ENDIF.
end of insertion SW_05042004
SELECT SINGLE * FROM zerrsyn INTO wazerrsyn
WHERE filetype = zzxrice-filetype.
IF sy-subrc <> 0.
MESSAGE e523 WITH zzxrice-filetype 'ZERRSYN'.
ENDIF.
Load the suspense file into an internal table.
PERFORM load_suspense_file.
begin of insertion SW_05042004
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004
Close the file. File may be opened for output later.
CLOSE DATASET v_fullfilename.
begin of insertion SW_05042004
ENDIF.
end of insertion SW_05042004
************************************************************************
Start
************************************************************************
CALL SCREEN 100.
************************************************************************
End of main program
************************************************************************
*&----
*
*& Module STATUS_0100 OUTPUT
*&----
*
text
*----
*
MODULE status_0100 OUTPUT.
IF v_aendern = 'X'.
begin of insertion SW_05042004
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004
SET PF-STATUS 'STAT100'.
begin of insertion SW_05042004
ELSE.
SET PF-STATUS 'STAT100NEU'.
ENDIF.
end of insertion SW_05042004
SET TITLEBAR 'TITAEND'.
ELSE.
SET PF-STATUS 'STATANZ'.
SET TITLEBAR 'TIT100'.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&----
*
*& Module exit INPUT
*&----
*
text
*----
*
MODULE exit INPUT.
IF okcode = 'EXIT'.
PERFORM edit_flag_loeschen.
LEAVE PROGRAM.
PERFORM memory_free.
ENDIF.
ENDMODULE. " exit INPUT
*&----
*
*& Module daten_ins_alv OUTPUT
*&----
*
text
*----
*
MODULE daten_ins_alv OUTPUT.
PERFORM daten_im_alv_anzeigen.
ENDMODULE. " daten_ins_alv OUTPUT
*&----
*
*& Form memory_free
*&----
*
release memory
*----
*
FORM memory_free.
CALL METHOD alv->free.
CALL METHOD cont->free.
FREE: alv, cont.
ENDFORM. " memory_free
*&----
*
*& Module user_command_0100 INPUT
*&----
*
Retrieve commands
*----
*
MODULE user_command_0100 INPUT.
CASE save_ok.
WHEN 'BACK'.
PERFORM edit_flag_loeschen.
LEAVE PROGRAM.
WHEN 'CHANGE'.
IF v_aendern IS INITIAL.
begin of insertion SW_19022003
Is file already being edited? (ZZSUSLOCK)
SELECT SINGLE user_edit FROM zzsuslock INTO v_editflag
WHERE objn = p_objn
AND cntr = p_cntr.
IF v_editflag EQ ' '.
end of insertion SW_19022003
Check Authorizations for changing values in suspense file
CPR 9616, DT0K947592 -> using c_change
PERFORM check_editing_authorizations USING c_change.
begin of insertion SW_19022003
Update ZSUSLOCK (being edited)
PERFORM edit_flag_schreiben.
end of insertion SW_19022003
IF v_aendern = 'X'.
PERFORM aendern_modus.
ENDIF.
ELSE.
begin of insertion SW_19022003
Error-message: file is locked
SELECT SINGLE unlock_user FROM zzsuslock INTO v_unlock_user
WHERE objn = p_objn
AND cntr = p_cntr
AND user_edit = 'X'.
MESSAGE e537 WITH v_unlock_user p_objn p_cntr.
CONCATENATE v_unlock_user text-002 INTO edit_text1 SEPARATED
BY space.
CONCATENATE text-004 p_objn text-003 p_cntr INTO edit_text2
SEPARATED BY space.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-001
textline1 = edit_text1
textline2 = edit_text2
start_column = 15
start_row = 6
EXCEPTIONS
OTHERS = 1.
ENDIF.
end of insertion SW_19022003
ELSE.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Wollen Sie sichern?'
text_button_1 = 'Ja'
text_button_2 = 'Nein'
default_button = '2'
display_cancel_button = 'X'
start_column = 15
start_row = 6
IMPORTING
answer = v_okcode.
CASE v_okcode.
WHEN '1'.
PERFORM fileit. " das war vorher schon da
ENDCASE.
PERFORM anzeigen_modus.
begin of insertion SW_19022003
clear edit-flag in table ZSUSLOCK
PERFORM edit_flag_loeschen.
end of insertion SW_19022003
v_aendern = ' '.
v_editflag = ' '.
ENDIF.
WHEN 'ZBACK'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = 'Wollen Sie sichern?'
text_button_1 = 'Ja'
text_button_2 = 'Nein'
default_button = '2'
display_cancel_button = 'X'
start_column = 15
start_row = 6
IMPORTING
answer = v_okcode.
CASE v_okcode.
WHEN '1'.
PERFORM fileit. " das war vorher schon da
PERFORM edit_flag_loeschen.
LEAVE PROGRAM.
WHEN '2'.
PERFORM edit_flag_loeschen.
LEAVE PROGRAM.
ENDCASE.
User Command File-It.
WHEN 'FILEIT'.
Check Authorizations for storing changed values in suspense file
CPR 9616, DT0K947592 -> using c_change
PERFORM check_editing_authorizations USING c_change.
PERFORM fileit.
User Command Refresh.
WHEN 'REFR'.
Check Authorizations for refreshing values in suspense file
CPR 9616, DT0K947592 -> using c_display
PERFORM check_editing_authorizations USING c_display.
v_edited = space.
OPEN DATASET v_fullfilename FOR INPUT IN LEGACY TEXT MODE
IGNORING CONVERSION ERRORS.
IF sy-subrc <> 0.
MESSAGE e522 WITH v_fullfilename 'ZZXRICE'.
ENDIF.
PERFORM load_suspense_file.
PERFORM memory_free.
PERFORM daten_im_alv_anzeigen.
PERFORM aendern_modus.
User Command - Download Suspense File to Presentation Server
WHEN 'DOWN'.
added for CPR 9616, DT0K947592
Check Authorizations for downloading the suspense file
PERFORM check_editing_authorizations USING c_display.
populate internal table for download
PERFORM itdown_fuellen.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
FILENAME = ' '
filetype = 'DAT'
MODE = ' '
FILEMASK_MASK = ' '
FILEMASK_TEXT = ' '
FILETYPE_NO_CHANGE = ' '
FILEMASK_ALL = ' '
Comment has been removed; file can be downloaded only
in DAT-Format; ASCII caused a program termination
filetype_no_show = 'X' " DT0K947592
SILENT = 'S'
importing
act_filename =
act_filetype =
filesize =
cancel =
TABLES
data_tab = itdown
EXCEPTIONS
invalid_filesize = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4
unknown_error = 5
gui_refuse_filetransfer = 6
OTHERS = 7.
CLEAR: itdown, wadown.
ENDCASE.
ENDMODULE. " user_command_0100 INPUT
*&----
*
*& Form fileit
*&----
*
Contents of ALV will be stored in error-file
*----
*
FORM fileit.
Check if Data has changed
CALL METHOD alv->check_changed_data
IMPORTING
e_valid = v_edited.
Do not save if nothing was edited
IF v_edited IS INITIAL.
MESSAGE w525.
ELSE.
Prompt to confirm backup on first save
IF v_backup NE 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = text-031
text_question = text-012
text_button_1 = text-032
text_button_2 = text-033
default_button = '2'
display_cancel_button = 'X'
start_column = 15
start_row = 6
IMPORTING
answer = v_okcode.
If user says Yes, backup suspense file with timestamp
IF v_okcode = '1'.
begin of insertion SW_05042004.
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004.
CPR 9616, DT0K947592
OPEN DATASET v_fullfilename FOR INPUT IN LEGACY TEXT MODE
IGNORING CONVERSION ERRORS.
IF sy-subrc <> 0.
MESSAGE e522 WITH v_fullfilename 'ZZXRICE'.
ENDIF.
begin of insertion SW_05042004.
ENDIF.
end of insertion SW_05042004.
PERFORM load_suspense_file_backup. "cd-
begin of insertion SW_05042004.
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004.
CPR 9616, DT0K947592
CLOSE DATASET v_fullfilename.
begin of insertion SW_05042004.
ENDIF.
end of insertion SW_05042004.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Location of backup file
CONCATENATE zzxrice-susfile sy-datum sy-uzeit INTO v_filename_backup.
CONCATENATE zzxrice-suspath c_backup_dir INTO v_path_backup.
v_path_backup = zzxrice-suspath.
CONCATENATE v_path_backup v_filename_backup
INTO v_fullfilename_backup.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
OPEN DATASET v_fullfilename_backup FOR OUTPUT
IN LEGACY TEXT MODE.
IF sy-subrc NE 0.
v_error = 'X'.
MESSAGE e101 WITH v_fullfilename_backup.
ENDIF.
LOOP AT TO v_fullfilename_backup.
ENDLOOP.
CLOSE DATASET v_fullfilename_backup.
refresh ifile_backup.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-031
textline1 = text-013
textline2 = v_filename_backup
textline3 = text-014
start_column = 15
start_row = 6
EXCEPTIONS
OTHERS = 1.
v_backup = 'X'.
ELSE.
MESSAGE i526.
EXIT.
ENDIF.
ENDIF.
begin of insertion SW_05042004.
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004.
Update current suspense file with edits and deletions
OPEN DATASET v_fullfilename FOR OUTPUT IN LEGACY TEXT MODE.
IF sy-subrc NE 0.
v_error = 'X'.
MESSAGE e101 WITH v_fullfilename.
ENDIF.
begin of insertion SW_05042004.
ENDIF.
end of insertion SW_05042004.
begin of insertion SW_05042004.
delete the data from the errortable before the saving of the
changed data
IF zzxrice-location = 'T'.
check the data of <itfarbe> if its n ot in <itdel> then it must be
written in <itdel> cause of datsets that in ZERR are inserted.
LOOP AT .
IF sy-subrc = 0.
COMMIT WORK.
Refresh the internal Table
DELETE TABLE .
ENDIF.
ENDLOOP.
ENDIF.
end of insertion SW_05042004.
LOOP AT .
ENDDO. "...cd+
LOOP AT <itfarbe> INTO <wafarbe>. "cd-
MOVE-CORRESPONDING <wafarbe> TO <wadaten>. "cd-
begin of insertion SW_05042004.
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004.
TRANSFER TO v_fullfilename.
begin of insertion SW_05042004.
ELSE.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
rnd_min = 0
rnd_max = 999999999
IMPORTING
rnd_value = h_randomi4.
Jetzt muss das Feld LFDNMR in der Struktur <wadaten> gesucht werden
und der neue Schlüssel übergeben werden.
LOOP AT itfieldnames INTO wafieldnames WHERE
fieldname = 'LFDNMR'.
poslfdnmr = sy-tabix.
ENDLOOP.
ASSIGN COMPONENT poslfdnmr
OF STRUCTURE .
IF sy-subrc EQ 0.
Refresh the internal Table
APPEND .
ELSE.
DO.
CALL FUNCTION 'RANDOM_I4'
EXPORTING
rnd_min = 0
rnd_max = 999999999
IMPORTING
rnd_value = h_randomi4.
Jetzt muss das Feld LFDNMR in der Struktur <wadaten> gesucht werden
und der neue Schlüssel übergeben werden.
LOOP AT itfieldnames INTO wafieldnames WHERE
fieldname = 'LFDNMR'.
poslfdnmr = sy-tabix.
ENDLOOP.
ASSIGN COMPONENT poslfdnmr
OF STRUCTURE .
IF sy-subrc EQ 0.
Refresh the internal Table
APPEND .
EXIT.
ENDIF.
ENDDO.
ENDIF.
ENDIF.
end of insertion SW_05042004.
ENDLOOP.
CLOSE DATASET v_fullfilename.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = 'Information'
textline1 = text-034
textline2 = space
start_column = 15
start_row = 6
EXCEPTIONS
OTHERS = 1.
IF sy-subrc EQ 0.
v_saved = 'X'.
ENDIF.
v_edited = space.
ENDIF.
ENDFORM. " fileit
*&----
*
*& Form load_suspense_file
*&----
*
Prepare data in internal table for the ALV
*----
*
FORM load_suspense_file.
DATA: BEGIN OF it_sort OCCURS 0,
zeile(72),
END OF it_sort.
IF .
ENDIF.
begin of insertion SW_05042004
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004
read file
ASSIGN ref_wadaten->* TO .
ENDDO.
begin of insertion SW_05042004
ELSE.
retrieve field names for dynamic sort
SELECT fieldname position intlen
INTO (dd03l-fieldname, dd03l-position, dd03l-intlen)
FROM dd03l
WHERE tabname = wazerrsyn-segstruct
ORDER BY position.
wafieldnames-fieldname = dd03l-fieldname.
wafieldnames-intlen = dd03l-intlen.
APPEND wafieldnames TO itfieldnames.
ENDSELECT.
Fill the table with the fieldnames for the dynamic sort
LOOP AT itfieldnames INTO wafieldnames
FROM 3.
IF wafieldnames-fieldname NE '.INCLUDE'.
APPEND wafieldnames-fieldname TO it_sort.
ENDIF.
ENDLOOP.
SELECT * FROM (zzxrice-filetype) INTO TABLE .
CLEAR: wafieldnames, itfieldnames[].
end of insertion SW_05042004
ENDFORM. " load_suspense_file
*&----
*
*& Form load_suspense_file_backup
*&----
*
read date in int. table for the backup
*----
*
FORM load_suspense_file_backup.
read file
DO.
READ DATASET v_fullfilename INTO .
ENDDO.
ENDFORM. " load_suspense_file_backup
*&----
*
*& Form check_editing_authorizations
*&----
*
Check if user is allowed to edit error file
*----
*
*& Form CHECK_EDITING_AUTHORIZATIONS
*& CPR 9616, DT0K947592 -> using parameter:
*& Form has been changed to take different activities concerning
*& the authorization for a single user into account (display/edit)
*&----
*
FORM check_editing_authorizations USING p_activity.
SELECT SINGLE * FROM zerrconfig
CLIENT SPECIFIED
WHERE mandt = sy-mandt.
IF zerrconfig-sus_security = 'X'.
AUTHORITY-CHECK OBJECT 'ZSUS'
ID 'ZZXOBJN' FIELD zzxrice-zzxobjn
ID 'LAND1' FIELD zzxrice-zzxcntr
ID 'ACTVT' FIELD p_activity. " DT0K947592
CASE sy-subrc.
WHEN 0. " DT0K947592
IF p_activity = '2'.
v_aendern = 'X'.
ENDIF.
EXIT. " Authority Check successful
WHEN 8.
MESSAGE e528.
WHEN 24.
MESSAGE e528.
WHEN 4.
MESSAGE e529 WITH sy-uname.
WHEN 12.
MESSAGE e529 WITH sy-uname.
WHEN 16.
MESSAGE e529 WITH sy-uname.
WHEN OTHERS.
MESSAGE e528.
ENDCASE.
ELSE.
v_aendern = 'X'.
ENDIF.
ENDFORM. " CHECK_EDITING_AUTHORIZATIONS
*&----
*
*& Form aendern_modus
*&----
*
Switch ALV to change mode
*----
*
FORM aendern_modus.
Set editing mode
IF alv->is_ready_for_input( ) = 0.
CALL METHOD alv->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
Begin of insertion SW09072004
begin of insertion SW_05042004
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004
Open the input suspense file.
OPEN DATASET v_fullfilename FOR INPUT IN LEGACY TEXT MODE
IGNORING CONVERSION ERRORS.
IF sy-subrc <> 0.
MESSAGE e522 WITH v_fullfilename 'ZZXRICE'.
ENDIF.
begin of insertion SW_05042004
ENDIF.
end of insertion SW_05042004
SELECT SINGLE * FROM zerrsyn INTO wazerrsyn
WHERE filetype = zzxrice-filetype.
IF sy-subrc <> 0.
MESSAGE e523 WITH zzxrice-filetype 'ZERRSYN'.
ENDIF.
Load the suspense file into an internal table.
PERFORM load_suspense_file.
begin of insertion SW_05042004
IF sy-sysid+2(1) = '6' OR zzxrice-location = 'D'.
end of insertion SW_05042004
Close the file. File may be opened for output later.
CLOSE DATASET v_fullfilename.
begin of insertion SW_05042004
ENDIF.
end of insertion SW_05042004
retrieve field names
CLEAR: f_anzahl.
SELECT fieldname position intlen
INTO (dd03l-fieldname, dd03l-position, dd03l-intlen)
FROM dd03l
WHERE tabname = wazerrsyn-segstruct
ORDER BY position.
wafieldnames-fieldname = dd03l-fieldname.
wafieldnames-intlen = dd03l-intlen.
APPEND wafieldnames TO itfieldnames.
ADD 1 TO f_anzahl.
ENDSELECT.
feldnummer = sy-dbcnt.
Retrieve fieldlength of the last filed in the structure
READ TABLE itfieldnames INTO wafieldnames INDEX feldnummer.
anzahl = wafieldnames-intlen.
initialisieren der Ausgabetabelle
IF .
ENDIF.
Übergeben der Eingabedaten an die Ausgabetabelle
LOOP AT <itdaten> INTO <wadaten>. "cd-
MOVE-CORRESPONDING <wadaten> TO <wafarbe>. "cd-
LOOP AT . "...cd+
CLEAR: wact, <wafarbe>-ct. "cd-
DO anzahl TIMES.
READ TABLE itfieldnames INTO wafieldnames INDEX sy-index.
SW_10102006
Wegen ERP2005 verlassen der Schleife beim Feld FARBCODE
IF wafieldnames-fieldname = 'FARBCODE'.
EXIT.
ELSE.
hilf = sy-index - 1.
CASE hilf(1). "cd
CASE wafarbe-farbcode+hilf(1). "cd-
WHEN 'X'.
wact-fname = wafieldnames-fieldname.
wact-color-col = col_negative.
APPEND wact TO <wafarbe>-ct. "cd-
APPEND wact TO . "cd+
WHEN '-'.
wact-fname = wafieldnames-fieldname.
wact-color-col = col_positive.
APPEND wact TO <wafarbe>-ct. "cd-
APPEND wact TO .
ENDLOOP.
End of insertion SW09072004
*CD...
SET HANDLER event_receiver->handle_toolbar FOR alv.
SET HANDLER event_receiver->handle_user_command FOR alv.
*...CD
ENDIF.
refresh ALV-display
CALL METHOD alv->refresh_table_display.
ENDFORM. " aendern_modus
*&----
*
*& Form anzeigen_modus
*&----
*
Switch ALV to display mode
*----
*
FORM anzeigen_modus.
Set display mode
IF alv->is_ready_for_input( ) = 1.
CALL METHOD alv->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.
refresh ALV-display
CALL METHOD alv->refresh_table_display.
ENDFORM. " anzeigen_modus
*&----
*
*& Form daten_im_ALV_anzeigen
*&----
*
Create ALV
*----
*
FORM daten_im_alv_anzeigen.
Create objects for the Container of the ALV-Grid
IF cont IS INITIAL.
CREATE OBJECT cont
EXPORTING
container_name = 'CONT100'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE e686 WITH 'Container'.
ENDIF.
CREATE OBJECT e_object.
CREATE OBJECT alv
EXPORTING
i_parent = cont
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE e686 WITH 'ALV-Grid'.
ENDIF.
Event ALV-Grid Double-click
CREATE OBJECT event_receiver.
retrieve field names
CLEAR: f_anzahl.
SELECT fieldname position intlen
INTO (dd03l-fieldname, dd03l-position, dd03l-intlen)
FROM dd03l
WHERE tabname = wazerrsyn-segstruct
ORDER BY position.
wafieldnames-fieldname = dd03l-fieldname.
wafieldnames-intlen = dd03l-intlen.
APPEND wafieldnames TO itfieldnames.
ADD 1 TO f_anzahl.
ENDSELECT.
feldnummer = sy-dbcnt.
Retrieve fieldlength of the last filed in the structure
READ TABLE itfieldnames INTO wafieldnames INDEX feldnummer.
anzahl = wafieldnames-intlen.
initialisieren der Ausgabetabelle
CLEAR: .
Übergeben der Eingabedaten an die Ausgabetabelle
LOOP AT <itdaten> INTO <wadaten>. "cd-
MOVE-CORRESPONDING <wadaten> TO <wafarbe>. "cd-
LOOP AT . "...cd+
CLEAR: wact, <wafarbe>-ct. "cd-
DO anzahl TIMES.
READ TABLE itfieldnames INTO wafieldnames INDEX sy-index.
SW_10102006
Wegen ERP2005 verlassen der Schleife beim Feld FARBCODE
IF wafieldnames-fieldname = 'FARBCODE'.
EXIT.
ELSE.
hilf = sy-index - 1.
CASE +hilf(1). "cd+
CASE wafarbe-farbcode+hilf(1). "cd-
WHEN 'X'.
wact-fname = wafieldnames-fieldname.
wact-color-col = col_negative.
APPEND wact TO <wafarbe>-ct. "cd-
APPEND wact TO . "cd+
WHEN '-'.
wact-fname = wafieldnames-fieldname.
wact-color-col = col_positive.
APPEND wact TO <wafarbe>-ct. "cd-
APPEND wact TO .
ENDLOOP.
Setzen der Editierung
listlayout-edit = 'X'.
listlayout-ctab_fname = 'CT'.
Inactivating of toolbar functions
SELECT SINGLE * FROM zzxrice
WHERE zzxobjn = p_objn.
IF sy-subrc = 0.
IF zzxrice-zzxdel = 'X'.
APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row TO toolbarexc.
ENDIF.
ENDIF.
APPEND cl_gui_alv_grid=>mc_fc_sort_asc TO toolbarexc.
APPEND cl_gui_alv_grid=>mc_fc_sort_dsc TO toolbarexc.
APPEND cl_gui_alv_grid=>mc_fc_filter TO toolbarexc.
APPEND cl_gui_alv_grid=>mc_fc_views TO toolbarexc.
APPEND cl_gui_alv_grid=>mc_mb_sum TO toolbarexc.
CALL METHOD e_object->disable_functions
EXPORTING
fcodes = toolbarexc.
layout per user
g_repid = sy-repid.
gs_layout-report = g_repid.
Übergabe der Daten ans ALV-Grid
CALL METHOD alv->set_table_for_first_display
EXPORTING
i_structure_name = wazerrsyn-segnam
is_layout = listlayout
is_variant = gs_layout
it_toolbar_excluding = toolbarexc
i_save = 'A'
i_default = 'X'
CHANGING
it_outtab = 0.
MESSAGE e687 WITH 'ALV-Grid'.
ENDIF.
Ausblenden der letzten Spalte und setzen der Groß/Kleinschreibung
CALL METHOD alv->get_frontend_fieldcatalog
IMPORTING
et_fieldcatalog = it_fields.
ind = 1.
LOOP AT it_fields INTO wa_fields.
wa_fields-lowercase = 'X'.
IF wa_fields-fieldname = 'FARBCODE'.
wa_fields-no_out = 'X'.
ENDIF.
begin of insertion SW_05042004
IF wa_fields-fieldname = 'LFDNMR'.
wa_fields-no_out = 'X'.
ENDIF.
end of insertion SW_05042004
MODIFY it_fields INDEX ind FROM wa_fields.
ind = ind + 1.
ENDLOOP.
CALL METHOD alv->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = it_fields.
Registrierung der Ereignisbehandlung für das ALV-Grid
SET HANDLER event_receiver->handle_double_click FOR alv.
SET HANDLER event_receiver->handle_toolbar FOR alv.
SET HANDLER event_receiver->handle_user_command FOR alv.
Setzen der Eingabebereitschaft auf Anzeigen
IF alv->is_ready_for_input( ) = 1.
CALL METHOD alv->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.
Auffrischen der Anzeige des ALV
CALL METHOD alv->refresh_table_display.
ENDIF.
ENDFORM. " daten_im_ALV_anzeigen
*&----
*
*& Module save INPUT
*&----
*
text
*----
*
MODULE save INPUT.
save_ok = okcode.
CLEAR okcode.
ENDMODULE. " save INPUT
*&----
*
*& Form itdown_fuellen
*&----
*
Unterprogramm um die interne Tabelle für den Download zu füllen
*----
*
FORM itdown_fuellen.
FIELD-SYMBOLS: TYPE ANY.
DATA: pos TYPE i.
Auslesen der int. Tabelle mit den Feldnamen
LOOP AT itfieldnames INTO wafieldnames.
IF wafieldnames-intlen .
ENDDO. "...cd+
LOOP AT <itfarbe> INTO <wafarbe>. "cd-
MOVE-CORRESPONDING <wafarbe> TO <wadaten>. "cd-
pos = 0.
CLEAR: wadown.
DO.
READ TABLE itfieldnames INTO wafieldnames INDEX sy-index.
ASSIGN COMPONENT sy-index OF STRUCTURE .
pos = pos + wafieldnames-intlen + 1.
ENDIF.
ENDDO.
APPEND wadown TO itdown.
ENDLOOP.
ENDFORM. " itdown_fuellen
*&----
*
*& Form edit_flag_schreiben
*&----
*
Hier wird das EDIT_FLAG in der Tabelle ZZSUSLOCK gesetzt
Damit ist die Datei für andere User zum editieren gesperrt
*----
*
FORM edit_flag_schreiben.
wazsuslock-type = p_type.
wazsuslock-objn = p_objn.
wazsuslock-cntr = p_cntr.
wazsuslock-unlock_user = sy-uname.
wazsuslock-lock_date = sy-datum. "cd+
wazsuslock-lock_time = sy-uzeit. "cd+
wazsuslock-user_edit = 'X'.
INSERT INTO zzsuslock VALUES wazsuslock.
IF sy-subrc NE 0.
Fehlermeldung Fehlerdatei konnte nicht gesperrt werden.
MESSAGE e693 WITH p_objn p_cntr.
ENDIF.
ENDFORM. " edit_flag_schreiben
*&----
*
*& Form edit_flag_loeschen
*&----
*
Hier wird die Datei wieder zum Editieren freigegeben
*----
*
FORM edit_flag_loeschen.
IF v_aendern = 'X'.
DELETE FROM zzsuslock WHERE type = p_type
AND objn = p_objn
AND cntr = p_cntr
AND unlock_user = sy-uname.
ENDIF.
ENDFORM. " edit_flag_loeschen
*&----
*
*& Form search_replace
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM search_replace TABLES p_et_index_columns
STRUCTURE lvc_s_col.
FIELD-SYMBOLS: TYPE ANY.
DATA: ls_selected_columns LIKE lvc_s_col,
col1(100) TYPE c,
col2(100) TYPE c,
found(1) TYPE c,
found1(1) TYPE c,
text(80) TYPE c,
farbindex TYPE i,
posfa TYPE i.
CLEAR: col_name,
found.
LOOP AT p_et_index_columns INTO ls_selected_columns.
"cd-...
concatenate 'wafarbe-' ls_selected_columns-fieldname into column.
concatenate 'wafarbe-' ls_selected_columns-fieldname into col1.
concatenate 'wafarbe-' ls_selected_columns-fieldname into col2.
"...cd-
"cd+...
CONCATENATE '.
CALL SCREEN 200 STARTING AT 10 10
ENDING AT 60 20.
CASE sy-ucomm.
WHEN 'OK'.
LOOP AT itfieldnames INTO wafieldnames WHERE
fieldname = ls_selected_columns-fieldname.
posfa = sy-tabix - 1.
field = sy-tabix.
ENDLOOP.
DO. "cd+
loop at itfarbe into wafarbe. "cd-
READ TABLE 0.
EXIT.
ENDIF. "...cd+
assign (column) to <colvalue>. "cd-
ASSIGN COMPONENT field "cd+...
OF STRUCTURE INTO wact. "cd+
LOOP AT wafarbe-ct INTO wact "cd-
WHERE fname = ls_selected_columns-fieldname. "cd-
IF wact-fname = ls_selected_columns-fieldname. "cd+
wact-color-col = col_total.
MODIFY wafarbe-ct FROM wact. "cd-
MODIFY 'X'.
wact-fname = ls_selected_columns-fieldname.
wact-color-col = col_total.
insert wact into table wafarbe-ct. "cd-
INSERT wact INTO TABLE posfa(1) = '-'. "cd
<wafarbe>-farbcode+posfa(1) = '-'. "cd-
MODIFY INDEX sy-index.
ENDIF.
endloop. "cd-
ENDDO. "cd+
row_col_stbl-col = 'X'.
row_col_stbl-row = 'X'.
CALL METHOD alv->refresh_table_display
EXPORTING
is_stable = row_col_stbl.
IF found = space.
CONCATENATE col_name INTO text SEPARATED BY
space.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-001
textline1 = text
textline2 = text-006
start_column = 15
start_row = 6
EXCEPTIONS
OTHERS = 1.
ELSE.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-001
textline1 = text-007
textline2 = text-008
start_column = 15
start_row = 6
EXCEPTIONS
OTHERS = 1.
ENDIF.
ENDCASE.
ENDFORM. " search_replace
*&----
*
*& Module STATUS_0200 OUTPUT
*&----
*
text
*----
*
MODULE status_0200 OUTPUT.
SET PF-STATUS '0200'.
SET TITLEBAR '0200'.
ENDMODULE. " STATUS_0200 OUTPUT
*&----
*
*& Module USER_COMMAND_0200 INPUT
*&----
*
text
*----
*
MODULE user_command_0200 INPUT.
SET SCREEN 0.
ENDMODULE. " USER_COMMAND_0200 INPUT
2007 Mar 08 1:10 PM
try this..
LOOP AT i_lieferdatenn.
MOVE i_lieferdaten-kunnr TO <fs_2>.
INSERT <fs_2> INTO TABLE <fs_1>.
ENDLOOP.
2007 Mar 08 1:11 PM
where does your code crash?
what error message do you get?
come on. please help us to help you, without the necessity to skim your total code.
I´m willing to help, but i´m not willing to read the whole code you pasted.
2007 Mar 08 1:20 PM
LOOP AT <V_VALUE> INTO <WA>.
ASSIGN COMPONENT 'AUFNR' OF STRUCTURE <WA> TO <AUFNR>.
ASSIGN COMPONENT 'ARCHIVEKEY' OF STRUCTURE <WA> TO <ARCHIVEKEY>.
ASSIGN COMPONENT 'ARCHIVEOFS' OF STRUCTURE <WA> TO <ARCHIVEOFS>.
endloop.
t5ry using assign instead of move
2007 Mar 08 1:53 PM
check this link
is a excel file, what i want.
<a href="http://http://www.file-upload.net/download-215346/Matrix.zip.html">file</a>
2007 Mar 09 8:48 AM
the program is finish now
PROGRAM zliefervolu.
*---------------------------------------------------------------------*
* Definition *
*---------------------------------------------------------------------*
* Datenbanktabelle
TABLES: likp, "Vertriebsbeleg: Lieferung: Kopfdaten
lips, "Vertriebsbeleg: Lieferung: Positionsdaten
kna1, "Kundenstamm (allgemeiner Teil)
marm. "Mengeneinheiten zum Material
*Feldsymbole für dynamische Zuweisungen
FIELD-SYMBOLS: <fs_data> TYPE REF TO data,
<fs_1> TYPE ANY TABLE,
<fs_2> TYPE ANY,
<fs_3>.
*Interne Tabelle
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.
*Variablendefinition
DATA: ok_code LIKE sy-ucomm, "Bildschirmbilder, Funktionscode, der PAI ausgelöst hat
i_lieferdatenn TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2, "Interne Tabelle speichern von Hauptdaten
i_lieferdaten TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2, "Interne Tabelle2 speichern von Hauptdaten
v_debittext TYPE string, "Kundentext
v_debitnulltext TYPE string,"Kundennummer ohne führende Nullen
v_debit TYPE kunnr, "Kundennummer zum vergleichen
v_umvkz TYPE string, "Faktor vergleiche
v_lifg TYPE i, "Liefermenge ausgabe
v_datumkl TYPE wadat, "Datum vergleiche klein
v_datumgr TYPE wadat, "Datum vergleiche gross
v_faktor(5) TYPE n, "Anzahl Faktor
v_volurech TYPE string, "Volumenberechnung
v_faktors TYPE string, "Faktor
v_datum TYPE string, "Datum
v_count TYPE i, "Zähler
lt_fieldcatalog TYPE lvc_t_fcat, "Feldkatalog
ls_fieldcatalog TYPE lvc_s_fcat, "Feldkatalog Append Tabelle
new_line TYPE REF TO data, "FS2 in Komponenten umwandeln
lt_data TYPE REF TO data, "FS1 Struktur füllen
v_datumlow(10) TYPE c, "Datumklein aufsplitten
v_datumhigh(10) TYPE c, "Datumgross aufsplitten
v_text TYPE string, "Datum- und Volumentext
name_catolog TYPE lvc_t_fcat, "Ändern von Spaltenname
g_container TYPE scrfname VALUE 'BCALV_GRID_CONTROL', "Dynproname
grid1 TYPE REF TO cl_gui_alv_grid, "ALV Grid Definition
g_fieldname(100) TYPE c, "Referenzfeld Definition
g_custom_container TYPE REF TO cl_gui_custom_container. "ALV Container
*Selektion-Optionen
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.
REFRESH: i_lieferdaten.
* 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: i_lieferdaten.
* Kundennummer an interne Tabelle übergeben
MOVE likp-kunnr TO i_lieferdaten-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.
CLEAR: v_volurech.
* Volumen = Zähler für die Umrechnung in Basismengeneinheiten * Tatsächlich gelieferte Menge in VME * Höhe
v_volurech = lips-lfimg * marm-hoehe.
MOVE v_volurech TO i_lieferdaten-volomen.
MOVE lips-lfimg TO i_lieferdaten-lfimg.
MOVE lips-umvkz TO i_lieferdaten-umvkz.
APPEND i_lieferdaten.
* Vorhandene Faktor abspeichern
MOVE lips-umvkz TO i_vbeln-faktor.
APPEND i_vbeln.
ENDSELECT.
ENDSELECT.
CLEAR: i_vbeln, i_lieferdaten.
SORT i_vbeln BY faktor.
* Sortieren interne Tabelle nach Kundennummer um Faktor
SORT i_lieferdaten BY kunnr umvkz ASCENDING.
*------------------------*
* Matrixdaten füllen *
*------------------------*
LOOP AT i_lieferdaten.
* Kundenummer verleichen
IF i_lieferdaten-kunnr NE v_debit.
* Verhindert leere Zeile beim 1 Mal
IF v_count NE 0.
APPEND i_lieferdatenn.
ENDIF.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-kunnr TO v_debit.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
v_count = v_count + 1.
* Wenn gleiche Kundenummer und Faktor
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz EQ v_umvkz.
* Additionen zu Volumen und Liefermenge
ADD i_lieferdaten-lfimg TO i_lieferdatenn-lfimg.
ADD i_lieferdaten-volomen TO i_lieferdatenn-volomen.
* Wenn gleiche Kundenummer und ungleiche Faktor
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz NE v_umvkz.
APPEND i_lieferdatenn.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
ENDIF.
ENDLOOP.
* Sorgt für letzte Datensatzspeicherung
APPEND i_lieferdatenn.
*------------------------*
* Datumsfeld aussplitten *
*------------------------*
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.
* Schaut auf High-Feld
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.
* Wenn Datumlow und -high vorhanden sind
IF v_datumgr IS NOT INITIAL.
CONCATENATE v_datumlow '-' v_datumhigh INTO v_datum.
ELSE.
MOVE v_datumlow TO v_datum.
ENDIF.
*------------------------*
* Faktorfelder erzeugen *
*------------------------*
* Datumsfeld erstellen
CLEAR v_text.
v_text = 'DATUM'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
CLEAR: v_count.
* Gleichartige Felder werden gelöscht
* Nicht vorhandene Felder werden gespeichert
LOOP AT i_vbeln.
IF i_vbeln-faktor NE v_faktor. "Falls Faktor nicht gleich sind
MOVE i_vbeln-faktor TO v_faktor.
PACK i_vbeln-faktor TO v_faktors.
CONDENSE v_faktors.
MOVE v_faktors TO v_lief-faktor.
* Hinweis das Lieferungsnummer gefunden wurde
v_count = v_count + 1.
APPEND v_lief.
ENDIF.
ENDLOOP.
* Volumenfeld erstellen
CLEAR v_text.
v_text = 'VOLUMEN'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
*-----------------------------*
* Erstellen von Dym. Tabelle *
*-----------------------------*
CLEAR: v_lief.
LOOP AT v_lief.
* Erzeugen von Felder Datum und Volumen
IF v_lief-faktor EQ 'DATUM' OR v_lief-faktor EQ 'VOLUMEN'.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
IF v_lief-faktor EQ 'DATUM'. "Datumsfeld Eigenschaft
ls_fieldcatalog-coltext = v_datum.
ls_fieldcatalog-emphasize = 'C100'.
ls_fieldcatalog-outputlen = '30'.
ELSEIF v_lief-faktor EQ 'VOLUMEN'."Volumenfeld Eigenschaft
ls_fieldcatalog-coltext = 'Volumen'.
ls_fieldcatalog-outputlen = '10'.
ENDIF.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ELSE.
* Dynamische Faktorfelder
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
ls_fieldcatalog-coltext = v_lief-faktor.
ls_fieldcatalog-outputlen = '6'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDIF.
ENDLOOP.
* Dynamische Zuweisung über Data-TYPE
ASSIGN lt_data TO <fs_data>.
* Falls keine Lieferungsnummer gefunden wurde
IF v_count NE 0.
* Erzeugen von Dynamische Tabelle
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fieldcatalog "Feldkatalog Struktur
IMPORTING
ep_table = <fs_data> "Kopf füllen
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
* Wenn Tabelle nicht erzeugt wurde
IF sy-subrc <> 0.
EXIT.
ENDIF.
*-------------------------------------------*
* Matrixfelder füllen *
* Die Arbeitsweise von Matrix besteht darin,*
* dass die Elemente "dynamisch" sein müssen,*
* Feldsymbole sind bestens geeignet dafür *
*-------------------------------------------*
* Dynamische Struktur erzeugen, ->* Data Type ausmerzen
ASSIGN <fs_data>->* TO <fs_1>.
* Erzeugung von Datenstruktur für Komponentenfeld
CREATE DATA new_line LIKE LINE OF <fs_1>.
* Erzeugung von Datenstruktur für Komponentenfeld
ASSIGN new_line->* TO <fs_2>.
CLEAR: v_count, v_debit, i_lieferdatenn, v_volurech.
* Erzeugen von leerer Datensatz, damit
* das erste und letzte Lieferdaten gespeichert werden
APPEND i_lieferdatenn.
LOOP AT i_lieferdatenn.
CLEAR: kna1.
* Selektion Kundenstamm (allgemeiner Teil)
SELECT SINGLE * FROM kna1 WHERE kunnr EQ i_lieferdatenn-kunnr.
* Falls neuer Debitor vorkommt
IF i_lieferdatenn-kunnr NE v_debit.
IF v_count NE 0.
* Das Feld i_lieferdatenn-umkz bestimmt, wo die Daten
* in Matrix hineinkommt
CONCATENATE '<FS_2>-' 'VOLUMEN' INTO g_fieldname.
* Zuweisung von Feldwerte
ASSIGN (g_fieldname) TO <fs_3>.
<fs_3> = v_volurech.
* Interne Taballe füllen
INSERT <fs_2> INTO TABLE <fs_1>.
CLEAR:<fs_2>.
ENDIF.
MOVE i_lieferdatenn-kunnr TO v_debit.
* Counter hochzählen
v_count = v_count + 1.
* Datumsfeld mit Wert füllen
CONCATENATE '<FS_2>-' 'DATUM' INTO g_fieldname. "<FS_2>-DATUM Feld
ASSIGN (g_fieldname) TO <fs_3>.
PACK i_lieferdatenn-kunnr TO v_debitnulltext.
CONDENSE v_debitnulltext.
CONCATENATE v_debitnulltext ` ` kna1-name1 INTO v_debittext.
<fs_3> = v_debittext.
* Verhindert Kommenstellen
v_umvkz = i_lieferdatenn-umvkz.
CONCATENATE '<FS_2>-' v_umvkz INTO g_fieldname."<FS_2>-DATUM Feld
ASSIGN (g_fieldname) TO <fs_3>.
v_lifg = i_lieferdatenn-lfimg.
<fs_3> = v_lifg.
* Totale Volumenberechnung
v_volurech = v_volurech + i_lieferdatenn-volomen.
ELSEIF i_lieferdatenn-kunnr EQ v_debit.
CLEAR v_umvkz.
v_umvkz = i_lieferdatenn-umvkz.
CONCATENATE '<FS_2>-' v_umvkz INTO g_fieldname.
ASSIGN (g_fieldname) TO <fs_3>.
v_lifg = i_lieferdatenn-lfimg.
<fs_3> = v_lifg.
v_volurech = v_volurech + i_lieferdatenn-volomen.
ENDIF.
ENDLOOP.
* dann wird ein POPUP Fenster ausgegeben, Programmabbruch folgt
ELSE.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-tit
textline1 = text-feh
start_column = 15 "Abstand von Links
start_row = 6. "Abstand von Oben
* Programmabbruch
EXIT.
ENDIF.
CALL SCREEN 100.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
* Titel zuweisen
SET TITLEBAR 'TITEL100'.
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 = 'lvc_t_fcat'
CHANGING
it_outtab = <fs_1> "Felddaten
it_fieldcatalog = lt_fieldcatalog. "Kopfdaten
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
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |