Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

fill dymnamic table

Former Member
0 Likes
1,358

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

6 REPLIES 6
Read only

Former Member
0 Likes
1,027

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

Read only

Former Member
0 Likes
1,027

try this..

 LOOP AT i_lieferdatenn.
     MOVE i_lieferdaten-kunnr TO <fs_2>.
INSERT <fs_2> INTO TABLE <fs_1>.
    ENDLOOP.

Read only

Former Member
0 Likes
1,027

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.

Read only

Former Member
0 Likes
1,027

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

Read only

0 Likes
1,027

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>

Read only

Former Member
0 Likes
1,027

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