用dialog创建一个可修改表
生活随笔
收集整理的這篇文章主要介紹了
用dialog创建一个可修改表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用dialog制作一個表,可刪除添加修改行項目,并可支持從本地批量上傳數據。
?
DATA:?BEGIN?OF?gt_tab?OCCURS?0,
???????????flag?.
????????INCLUDE?STRUCTURE?ztext1.
DATA:?END?OF?gt_tab.
DATA:?t_tab?LIKE?TABLE?OF?ztext1?WITH?HEADER?LINE,
??????????wa_itab?LIKE?gt_tab.
DATA:?g_edit?TYPE?c?VALUE?'0'.
DATA:?ok_code?LIKE?sy-ucomm,
??????????save_ok?LIKE?sy-ucomm.
*&SPWIZARD:?DECLARATION?OF?TABLECONTROL?'DDTEST'?ITSELF
CONTROLS:?ddtest?TYPE?TABLEVIEW?USING?SCREEN?0101.
START-OF-SELECTION.
??PERFORM?get_data.
??PERFORM?call_screen.
*&---------------------------------------------------------------------*
*&??????Form??GET_DATA
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?get_data?.
??SELECT?*?INTO?CORRESPONDING?FIELDS?OF?TABLE?gt_tab
????????????????FROM?ztext1.
ENDFORM.????????????????????"?GET_DATA
*&---------------------------------------------------------------------*
*&??????Form??CALL_SCREEN
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?call_screen?.
??CALL?SCREEN?0101.
ENDFORM.????????????????????"?CALL_SCREEN
*&SPWIZARD:?OUTPUT?MODULE?FOR?TC?'DDTEST'.?DO?NOT?CHANGE?THIS?LINE!
*&SPWIZARD:?UPDATE?LINES?FOR?EQUIVALENT?SCROLLBAR
MODULE?ddtest_change_tc_attr?OUTPUT.
??DESCRIBE?TABLE?gt_tab?LINES?ddtest-lines.
ENDMODULE.????????????????????"DDTEST_CHANGE_TC_ATTR?OUTPUT
*&SPWIZARD:?INPUT?MODUL?FOR?TC?'DDTEST'.?DO?NOT?CHANGE?THIS?LINE!
*&SPWIZARD:?MARK?TABLE
MODULE?ddtest_mark?INPUT.
??DATA:?g_ddtest_wa2?LIKE?LINE?OF?gt_tab.
??IF?ddtest-line_sel_mode?=?1
??AND?gt_tab-flag?=?'X'.
????LOOP?AT?gt_tab?INTO?g_ddtest_wa2
??????WHERE?flag?=?'X'.
??????g_ddtest_wa2-flag?=?''.
??????MODIFY?gt_tab
????????FROM?g_ddtest_wa2
????????TRANSPORTING?flag.
????ENDLOOP.
??ENDIF.
??MODIFY?gt_tab
????INDEX?ddtest-current_line
????TRANSPORTING?flag.
ENDMODULE.????????????????????"DDTEST_MARK?INPUT
*&---------------------------------------------------------------------*
*&??????Module??STATUS_0101??OUTPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?status_0101?OUTPUT.
??SET?PF-STATUS?'TEST01'.
??SET?TITLEBAR?'TEST01'.
ENDMODULE.?????????????????"?STATUS_0101??OUTPUT
*&---------------------------------------------------------------------*
*&??????Module??ADD_FIELD??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?add_field?INPUT.
??DATA:?lv_line?TYPE?i.
??DESCRIBE?TABLE?gt_tab?LINES?lv_line.
??IF?lv_line?<?ddtest-current_line.
????APPEND?gt_tab?TO?gt_tab.
??ELSE.
????MODIFY?gt_tab?FROM?gt_tab?INDEX?ddtest-current_line.
??ENDIF.
ENDMODULE.?????????????????"?ADD_FIELD??INPUT
*&---------------------------------------------------------------------*
*&??????Module??USER_COMMAND_0101??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?user_command_0101?INPUT.
??save_ok?=?ok_code.
??CASE?save_ok.
????WHEN?'BACK'.??SET?SCREEN?0.?LEAVE?TO?SCREEN?0.
????WHEN?'EXIT'?OR?'CANCEL'.???LEAVE?PROGRAM.
????WHEN?'EDIT'.????PERFORM?form_edit.
????WHEN?'ADD'.
??????IF?g_edit?=?'1'.
????????PERFORM?form_add?USING?'DDTEST'??'GT_TAB'.
??????ENDIF.
????WHEN?'DEL'.
??????IF?g_edit?=?'1'.
????????PERFORM?form_del?USING?'DDTEST'??'GT_TAB'?'FLAG'.
??????ENDIF.
????WHEN?'SAL'.?PERFORM?form_sal.
????WHEN?'CAL'.PERFORM?form_cal.
????WHEN?'PC'.??PERFORM?form_pc.
????WHEN?'SAVE'.PERFORM?form_save.
????WHEN?OTHERS.
??ENDCASE.
??clear:?save_ok,ok_code.
ENDMODULE.?????????????????"?USER_COMMAND_0101??INPUT
*&---------------------------------------------------------------------*
*&??????Form??FORM_EDIT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_edit?.
??IF?g_edit?=?'0'.
????g_edit?=?'1'.
??ELSE.
????g_edit?=?'0'.
??ENDIF.
ENDFORM.????????????????????"?FORM_EDIT
*&---------------------------------------------------------------------*
*&??????Module??CHANGE_EDIT??OUTPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?change_edit?OUTPUT.
??IF?g_edit?=?'0'.
????LOOP?AT?SCREEN.
??????screen-input?=?'0'.
??????MODIFY?SCREEN.
????ENDLOOP.
??ELSE.
????LOOP?AT?SCREEN.
??????screen-input?=?'1'.
??????MODIFY?SCREEN.
????ENDLOOP.
??ENDIF.
ENDMODULE.?????????????????"?CHANGE_EDIT??OUTPUT
*&---------------------------------------------------------------------*
*&??????Form??FORM_ADD
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_add?USING?p_tc_name
????????????????????????????????????p_table_name.
??DATA?l_lines_name???????LIKE?feld-name.
??DATA?l_selline??????????LIKE?sy-stepl.
??DATA?l_lastline?????????TYPE?i.
??DATA?l_line?????????????TYPE?i.
??DATA?l_table_name???????LIKE?feld-name.
??FIELD-SYMBOLS?<tc>?????????????????TYPE?cxtab_control.
??FIELD-SYMBOLS?<table>??????????????TYPE?STANDARD?TABLE.
??FIELD-SYMBOLS?<lines>??????????????TYPE?i.
*?檢查空行存在
*??PERFORM?frm_check_blank_row.
??ASSIGN?(p_tc_name)?TO?<tc>.
*?Get?the?table,?which?belongs?to?the?tc
??CONCATENATE?p_table_name?'[]'?INTO?l_table_name.?"table?body
??ASSIGN?(l_table_name)?TO?<table>.????????????????"not?headerline
*?Get?looplines?of?TableControl
??CONCATENATE?p_tc_name?'-LINES'?INTO?l_lines_name.
??ASSIGN?(l_lines_name)?TO?<lines>.
*?Get?current?line
??GET?CURSOR?LINE?l_selline.
??IF?sy-subrc?<>?0.???????????????????"?append?line?to?table
????l_selline?=?<tc>-lines?+?1.
????<tc>-top_line?=?1.
*?SPWIZARD:?set?top?line
*????IF?l_selline?>?<lines>.
*??????<tc>-top_line?=?l_selline?-?<lines>?+?1?.
*????ELSE.
*??????<tc>-top_line?=?1.
*????ENDIF.
??ELSE.???????????????????????????????"?insert?line?into?table
????l_selline?=?<tc>-top_line?+?l_selline?.
????l_lastline?=?<tc>-top_line?+?<lines>?-?1.
??ENDIF.
*?SPWIZARD:?set?new?cursor?line????????????????????????????????????????*
??l_line?=?l_selline?-?<tc>-top_line??+?1.
*?SPWIZARD:?insert?initial?line????????????????????????????????????????*
??INSERT?INITIAL?LINE?INTO?<table>?INDEX?l_selline.
??<tc>-lines?=?<tc>-lines?+?1.
*?添加到導入數據庫的內表
*?SPWIZARD:?set?cursor?????????????????????????????????????????????????*
??SET?CURSOR?LINE?l_line.
ENDFORM.????????????????????"?FORM_ADD
*&---------------------------------------------------------------------*
*&??????Form??FORM_DEL
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??????-->P_0193???text
*??????-->P_0194???text
*??????-->P_0195???text
*----------------------------------------------------------------------*
FORM?form_del??USING??????p_tc_name
???????????????????????????????????????p_table_name
???????????????????????????????????????p_mark_name.
*&SPWIZARD:?BEGIN?OF?LOCAL?DATA----------------------------------------*
??DATA?l_table_name???????LIKE?feld-name.
??FIELD-SYMBOLS?<tc>?????????TYPE?cxtab_control.
??FIELD-SYMBOLS?<table>??????TYPE?STANDARD?TABLE.
??FIELD-SYMBOLS?<wa>.
??FIELD-SYMBOLS?<mark_field>.
*?SPWIZARD:?END?OF?LOCAL?DATA------------------------------------------*
??ASSIGN?(p_tc_name)?TO?<tc>.
*?SPWIZARD:?get?the?table,?which?belongs?to?the?tc?????????????????????*
??CONCATENATE?p_table_name?'[]'?INTO?l_table_name.?"table?body
??ASSIGN?(l_table_name)?TO?<table>.????????????????"not?headerline
*?SPWIZARD:?delete?marked?lines????????????????????????????????????????*
??DESCRIBE?TABLE?<table>?LINES?<tc>-lines.
??LOOP?AT?<table>?ASSIGNING?<wa>.
*?SPWIZARD:?access?to?the?component?'FLAG'?of?the?table?header?????????*
????ASSIGN?COMPONENT?p_mark_name?OF?STRUCTURE?<wa>?TO?<mark_field>.
????IF?<mark_field>?=?'X'.
??????DELETE?<table>?INDEX?syst-tabix.
??????IF?sy-subrc?=?0.
????????<tc>-lines?=?<tc>-lines?-?1.
??????ENDIF.
????ENDIF.
??ENDLOOP.
ENDFORM.????????????????????"?FORM_DEL
*&---------------------------------------------------------------------*
*&??????Form??FORM_SAL
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_sal?.
??LOOP?AT?gt_tab.
????gt_tab-flag?=?'X'.
????MODIFY?gt_tab?FROM?gt_tab?INDEX?sy-tabix.
??ENDLOOP.
ENDFORM.????????????????????"?FORM_SAL
*&---------------------------------------------------------------------*
*&??????Form??FORM_CAL
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_cal?.
??LOOP?AT?gt_tab.
????gt_tab-flag?=?''.
????MODIFY?gt_tab?FROM?gt_tab?INDEX?sy-tabix.
??ENDLOOP.
ENDFORM.????????????????????"?FORM_CAL
*&---------------------------------------------------------------------*
*&??????Form??FORM_PC
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_pc?.
??DATA:?filename??????TYPE?string,
????????path??????????TYPE?string,
????????fullpath??????TYPE?string,
????????rs????????????TYPE?c,
????????openpath(128)?TYPE?c.
??FIELD-SYMBOLS:?<f1>.
??DATA:?l_col?TYPE?i.
??DATA:?up_excle?LIKE?TABLE?OF?zalsmex_tabline?WITH?HEADER?LINE.
*?選擇打開文件的路徑
??CALL?METHOD?cl_gui_frontend_services=>file_save_dialog
????EXPORTING
??????window_title??????=?'Please?Check?File?Path'
??????default_extension?=?'.XLS'
????CHANGING
??????filename??????????=?filename
??????path??????????????=?path
??????fullpath??????????=?fullpath
????EXCEPTIONS
??????cntl_error????????=?1
??????error_no_gui??????=?2
??????OTHERS????????????=?3.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
???????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
*?檢查文件是否存在
??CALL?METHOD?cl_gui_frontend_services=>file_exist
????EXPORTING
??????file????????????=?fullpath
????RECEIVING
??????result??????????=?rs
????EXCEPTIONS
??????cntl_error??????=?1
??????error_no_gui????=?2
??????wrong_parameter?=?3
??????OTHERS??????????=?4.
??IF?sy-subrc?<>?0.
????MESSAGE?'The?file?is?not?existing.'?TYPE?'E'.
??ENDIF.
??IF?rs?<>?'X'.
????MESSAGE?'The?file?is?not?existing.'?TYPE?'E'.
??ENDIF.
??openpath?=?fullpath.
*?取EXCEL?數據
??CALL?FUNCTION?'ALSM_EXCEL_TO_INTERNAL_TABLE'
????EXPORTING
??????filename????????????????=?openpath
??????i_begin_col?????????????=?1
??????i_begin_row?????????????=?2
??????i_end_col???????????????=?6
??????i_end_row???????????????=?65000
????TABLES
??????intern??????????????????=?up_excle
????EXCEPTIONS
??????inconsistent_parameters?=?1
??????upload_ole??????????????=?2
??????OTHERS??????????????????=?3.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
??CLEAR:?t_tab[],?t_tab.
??LOOP?AT?up_excle.
????CASE?up_excle-col.
??????WHEN?'001'.
????????WRITE?up_excle-value?TO?t_tab-text01.
??????WHEN?'002'.
????????WRITE?up_excle-value?TO?t_tab-text02.
????ENDCASE.
????AT?END?OF?row.
??????APPEND?t_tab.
??????CLEAR?t_tab.
????ENDAT.
??ENDLOOP.
*?添加到數據庫
??SORT?t_tab?BY?text01?text02.
??LOOP?AT?t_tab.
????CLEAR?wa_itab.
????MOVE-CORRESPONDING?t_tab?TO?wa_itab.
????READ?TABLE?gt_tab?WITH?KEY?text01?=?t_tab-text01
????????????????????????????????????????????????text02?=?t_tab-text02.
????IF?sy-subrc?<>?0.
??????APPEND?wa_itab?TO?gt_tab.
????ELSE.
??????MODIFY?TABLE?gt_tab?FROM?wa_itab?TRANSPORTING?text01?text02.
????ENDIF.
??ENDLOOP.
??PERFORM?form_save.
ENDFORM.????????????????????"?FORM_PC
*&---------------------------------------------------------------------*
*&??????Form??FORM_SAVE
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_save?.
*?檢查空行存在
??PERFORM?check_line.
??CALL?FUNCTION?'ENQUEUE_EZTEXT1'
????EXPORTING
??????mode_ztext1????=?'E'
??????mandt??????????=?sy-mandt
??????_scope?????????=?'2'
??????_wait??????????=?'?'
??????_collect???????=?'?'
????EXCEPTIONS
??????foreign_lock???=?1
??????system_failure?=?2
??????OTHERS?????????=?3.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
??FREE?t_tab.
??LOOP?AT?gt_tab.
????MOVE-CORRESPONDING?gt_tab?TO?t_tab.
????t_tab-mandt?=?sy-mandt.
????APPEND?t_tab.
????CLEAR?t_tab.
??ENDLOOP.
??DELETE?FROM?ztext1?WHERE?text01?NE?space.
??IF?sy-subrc?EQ?0.
????COMMIT?WORK?.
??ELSE.
????ROLLBACK?WORK.
??ENDIF.
??INSERT?ztext1?FROM?TABLE?t_tab.
??IF?sy-subrc?EQ?0.
????MESSAGE?'changed?ok'?TYPE?'S'.
????COMMIT?WORK.
??ELSE.
????ROLLBACK?WORK.
??ENDIF.
??FREE?t_tab.
*?UNLOCK
??CALL?FUNCTION?'DEQUEUE_EZTEXT1'
????EXPORTING
??????mode_ztext1?=?'E'
??????mandt???????=?sy-mandt
??????_scope??????=?'3'
??????_synchron???=?'?'
??????_collect????=?'?'.
ENDFORM.????????????????????"?FORM_SAVE
*&---------------------------------------------------------------------*
*&??????Form??CHECK_LINE
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?check_line?.
??DATA:lv_message(255).
??LOOP?AT?gt_tab.
????IF?gt_tab-text01?=?space?OR?gt_tab-text02?=?space.
??????MESSAGE?'Please?Fullfill?Primary?Key?Fields.'?TYPE?'E'.
??????EXIT.
????ENDIF.
????CLEAR?gt_tab.
??ENDLOOP.
*?檢查有無重復Key?字段
??SORT?gt_tab?BY?text01?text02.
??DELETE?ADJACENT?DUPLICATES?FROM?gt_tab.
??CLEAR:?gt_tab,?t_tab.
??LOOP?AT?gt_tab.
????IF?t_tab-text01?=?gt_tab-text01?AND?t_tab-text02?=?gt_tab-text02.
??????CLEAR?lv_message.
??????CONCATENATE??'TEXT01'?t_tab-text01?'有重復記錄!'?INTO?lv_message.
??????MESSAGE?lv_message?TYPE?'E'.
????ENDIF.
????CLEAR?t_tab.
????t_tab?=?gt_tab.
??ENDLOOP.
ENDFORM.????????????????????"?CHECK_LINE
*&---------------------------------------------------------------------*
*&??????Module??CHECK_TEXT01??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?check_text01?INPUT.
??IF?gt_tab-text01?IS?INITIAL.
????MESSAGE?'TEXT01?should?not?be?initial'?TYPE?'E'.
??ENDIF.
ENDMODULE.?????????????????"?CHECK_TEXT01??INPUT
*&---------------------------------------------------------------------*
*&??????Module??CHECK_TEXT02??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?check_text02?INPUT.
??DATA:?i?TYPE?i?VALUE?'0'.
??IF?gt_tab-text02?IS?INITIAL.
????MESSAGE?'TEXT02?should?not?be?initial'?TYPE?'E'.
??ENDIF.
??LOOP?AT?gt_tab?TO?wa_itab?WHERE?text01?=?gt_tab-text01
??????????????????????????????????????????AND??????text02?=?gt_tab-text02.
????i?=?i?+?1.
??ENDLOOP.
??IF??i?>=?2.
????MESSAGE?'?EXISTING?THE?DATA'?TYPE?'E'.
??ENDIF.
ENDMODULE.?????????????????"?CHECK_TEXT02??INPUT
DATA:?BEGIN?OF?gt_tab?OCCURS?0,
???????????flag?.
????????INCLUDE?STRUCTURE?ztext1.
DATA:?END?OF?gt_tab.
DATA:?t_tab?LIKE?TABLE?OF?ztext1?WITH?HEADER?LINE,
??????????wa_itab?LIKE?gt_tab.
DATA:?g_edit?TYPE?c?VALUE?'0'.
DATA:?ok_code?LIKE?sy-ucomm,
??????????save_ok?LIKE?sy-ucomm.
*&SPWIZARD:?DECLARATION?OF?TABLECONTROL?'DDTEST'?ITSELF
CONTROLS:?ddtest?TYPE?TABLEVIEW?USING?SCREEN?0101.
START-OF-SELECTION.
??PERFORM?get_data.
??PERFORM?call_screen.
*&---------------------------------------------------------------------*
*&??????Form??GET_DATA
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?get_data?.
??SELECT?*?INTO?CORRESPONDING?FIELDS?OF?TABLE?gt_tab
????????????????FROM?ztext1.
ENDFORM.????????????????????"?GET_DATA
*&---------------------------------------------------------------------*
*&??????Form??CALL_SCREEN
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?call_screen?.
??CALL?SCREEN?0101.
ENDFORM.????????????????????"?CALL_SCREEN
*&SPWIZARD:?OUTPUT?MODULE?FOR?TC?'DDTEST'.?DO?NOT?CHANGE?THIS?LINE!
*&SPWIZARD:?UPDATE?LINES?FOR?EQUIVALENT?SCROLLBAR
MODULE?ddtest_change_tc_attr?OUTPUT.
??DESCRIBE?TABLE?gt_tab?LINES?ddtest-lines.
ENDMODULE.????????????????????"DDTEST_CHANGE_TC_ATTR?OUTPUT
*&SPWIZARD:?INPUT?MODUL?FOR?TC?'DDTEST'.?DO?NOT?CHANGE?THIS?LINE!
*&SPWIZARD:?MARK?TABLE
MODULE?ddtest_mark?INPUT.
??DATA:?g_ddtest_wa2?LIKE?LINE?OF?gt_tab.
??IF?ddtest-line_sel_mode?=?1
??AND?gt_tab-flag?=?'X'.
????LOOP?AT?gt_tab?INTO?g_ddtest_wa2
??????WHERE?flag?=?'X'.
??????g_ddtest_wa2-flag?=?''.
??????MODIFY?gt_tab
????????FROM?g_ddtest_wa2
????????TRANSPORTING?flag.
????ENDLOOP.
??ENDIF.
??MODIFY?gt_tab
????INDEX?ddtest-current_line
????TRANSPORTING?flag.
ENDMODULE.????????????????????"DDTEST_MARK?INPUT
*&---------------------------------------------------------------------*
*&??????Module??STATUS_0101??OUTPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?status_0101?OUTPUT.
??SET?PF-STATUS?'TEST01'.
??SET?TITLEBAR?'TEST01'.
ENDMODULE.?????????????????"?STATUS_0101??OUTPUT
*&---------------------------------------------------------------------*
*&??????Module??ADD_FIELD??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?add_field?INPUT.
??DATA:?lv_line?TYPE?i.
??DESCRIBE?TABLE?gt_tab?LINES?lv_line.
??IF?lv_line?<?ddtest-current_line.
????APPEND?gt_tab?TO?gt_tab.
??ELSE.
????MODIFY?gt_tab?FROM?gt_tab?INDEX?ddtest-current_line.
??ENDIF.
ENDMODULE.?????????????????"?ADD_FIELD??INPUT
*&---------------------------------------------------------------------*
*&??????Module??USER_COMMAND_0101??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?user_command_0101?INPUT.
??save_ok?=?ok_code.
??CASE?save_ok.
????WHEN?'BACK'.??SET?SCREEN?0.?LEAVE?TO?SCREEN?0.
????WHEN?'EXIT'?OR?'CANCEL'.???LEAVE?PROGRAM.
????WHEN?'EDIT'.????PERFORM?form_edit.
????WHEN?'ADD'.
??????IF?g_edit?=?'1'.
????????PERFORM?form_add?USING?'DDTEST'??'GT_TAB'.
??????ENDIF.
????WHEN?'DEL'.
??????IF?g_edit?=?'1'.
????????PERFORM?form_del?USING?'DDTEST'??'GT_TAB'?'FLAG'.
??????ENDIF.
????WHEN?'SAL'.?PERFORM?form_sal.
????WHEN?'CAL'.PERFORM?form_cal.
????WHEN?'PC'.??PERFORM?form_pc.
????WHEN?'SAVE'.PERFORM?form_save.
????WHEN?OTHERS.
??ENDCASE.
??clear:?save_ok,ok_code.
ENDMODULE.?????????????????"?USER_COMMAND_0101??INPUT
*&---------------------------------------------------------------------*
*&??????Form??FORM_EDIT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_edit?.
??IF?g_edit?=?'0'.
????g_edit?=?'1'.
??ELSE.
????g_edit?=?'0'.
??ENDIF.
ENDFORM.????????????????????"?FORM_EDIT
*&---------------------------------------------------------------------*
*&??????Module??CHANGE_EDIT??OUTPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?change_edit?OUTPUT.
??IF?g_edit?=?'0'.
????LOOP?AT?SCREEN.
??????screen-input?=?'0'.
??????MODIFY?SCREEN.
????ENDLOOP.
??ELSE.
????LOOP?AT?SCREEN.
??????screen-input?=?'1'.
??????MODIFY?SCREEN.
????ENDLOOP.
??ENDIF.
ENDMODULE.?????????????????"?CHANGE_EDIT??OUTPUT
*&---------------------------------------------------------------------*
*&??????Form??FORM_ADD
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_add?USING?p_tc_name
????????????????????????????????????p_table_name.
??DATA?l_lines_name???????LIKE?feld-name.
??DATA?l_selline??????????LIKE?sy-stepl.
??DATA?l_lastline?????????TYPE?i.
??DATA?l_line?????????????TYPE?i.
??DATA?l_table_name???????LIKE?feld-name.
??FIELD-SYMBOLS?<tc>?????????????????TYPE?cxtab_control.
??FIELD-SYMBOLS?<table>??????????????TYPE?STANDARD?TABLE.
??FIELD-SYMBOLS?<lines>??????????????TYPE?i.
*?檢查空行存在
*??PERFORM?frm_check_blank_row.
??ASSIGN?(p_tc_name)?TO?<tc>.
*?Get?the?table,?which?belongs?to?the?tc
??CONCATENATE?p_table_name?'[]'?INTO?l_table_name.?"table?body
??ASSIGN?(l_table_name)?TO?<table>.????????????????"not?headerline
*?Get?looplines?of?TableControl
??CONCATENATE?p_tc_name?'-LINES'?INTO?l_lines_name.
??ASSIGN?(l_lines_name)?TO?<lines>.
*?Get?current?line
??GET?CURSOR?LINE?l_selline.
??IF?sy-subrc?<>?0.???????????????????"?append?line?to?table
????l_selline?=?<tc>-lines?+?1.
????<tc>-top_line?=?1.
*?SPWIZARD:?set?top?line
*????IF?l_selline?>?<lines>.
*??????<tc>-top_line?=?l_selline?-?<lines>?+?1?.
*????ELSE.
*??????<tc>-top_line?=?1.
*????ENDIF.
??ELSE.???????????????????????????????"?insert?line?into?table
????l_selline?=?<tc>-top_line?+?l_selline?.
????l_lastline?=?<tc>-top_line?+?<lines>?-?1.
??ENDIF.
*?SPWIZARD:?set?new?cursor?line????????????????????????????????????????*
??l_line?=?l_selline?-?<tc>-top_line??+?1.
*?SPWIZARD:?insert?initial?line????????????????????????????????????????*
??INSERT?INITIAL?LINE?INTO?<table>?INDEX?l_selline.
??<tc>-lines?=?<tc>-lines?+?1.
*?添加到導入數據庫的內表
*?SPWIZARD:?set?cursor?????????????????????????????????????????????????*
??SET?CURSOR?LINE?l_line.
ENDFORM.????????????????????"?FORM_ADD
*&---------------------------------------------------------------------*
*&??????Form??FORM_DEL
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??????-->P_0193???text
*??????-->P_0194???text
*??????-->P_0195???text
*----------------------------------------------------------------------*
FORM?form_del??USING??????p_tc_name
???????????????????????????????????????p_table_name
???????????????????????????????????????p_mark_name.
*&SPWIZARD:?BEGIN?OF?LOCAL?DATA----------------------------------------*
??DATA?l_table_name???????LIKE?feld-name.
??FIELD-SYMBOLS?<tc>?????????TYPE?cxtab_control.
??FIELD-SYMBOLS?<table>??????TYPE?STANDARD?TABLE.
??FIELD-SYMBOLS?<wa>.
??FIELD-SYMBOLS?<mark_field>.
*?SPWIZARD:?END?OF?LOCAL?DATA------------------------------------------*
??ASSIGN?(p_tc_name)?TO?<tc>.
*?SPWIZARD:?get?the?table,?which?belongs?to?the?tc?????????????????????*
??CONCATENATE?p_table_name?'[]'?INTO?l_table_name.?"table?body
??ASSIGN?(l_table_name)?TO?<table>.????????????????"not?headerline
*?SPWIZARD:?delete?marked?lines????????????????????????????????????????*
??DESCRIBE?TABLE?<table>?LINES?<tc>-lines.
??LOOP?AT?<table>?ASSIGNING?<wa>.
*?SPWIZARD:?access?to?the?component?'FLAG'?of?the?table?header?????????*
????ASSIGN?COMPONENT?p_mark_name?OF?STRUCTURE?<wa>?TO?<mark_field>.
????IF?<mark_field>?=?'X'.
??????DELETE?<table>?INDEX?syst-tabix.
??????IF?sy-subrc?=?0.
????????<tc>-lines?=?<tc>-lines?-?1.
??????ENDIF.
????ENDIF.
??ENDLOOP.
ENDFORM.????????????????????"?FORM_DEL
*&---------------------------------------------------------------------*
*&??????Form??FORM_SAL
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_sal?.
??LOOP?AT?gt_tab.
????gt_tab-flag?=?'X'.
????MODIFY?gt_tab?FROM?gt_tab?INDEX?sy-tabix.
??ENDLOOP.
ENDFORM.????????????????????"?FORM_SAL
*&---------------------------------------------------------------------*
*&??????Form??FORM_CAL
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_cal?.
??LOOP?AT?gt_tab.
????gt_tab-flag?=?''.
????MODIFY?gt_tab?FROM?gt_tab?INDEX?sy-tabix.
??ENDLOOP.
ENDFORM.????????????????????"?FORM_CAL
*&---------------------------------------------------------------------*
*&??????Form??FORM_PC
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_pc?.
??DATA:?filename??????TYPE?string,
????????path??????????TYPE?string,
????????fullpath??????TYPE?string,
????????rs????????????TYPE?c,
????????openpath(128)?TYPE?c.
??FIELD-SYMBOLS:?<f1>.
??DATA:?l_col?TYPE?i.
??DATA:?up_excle?LIKE?TABLE?OF?zalsmex_tabline?WITH?HEADER?LINE.
*?選擇打開文件的路徑
??CALL?METHOD?cl_gui_frontend_services=>file_save_dialog
????EXPORTING
??????window_title??????=?'Please?Check?File?Path'
??????default_extension?=?'.XLS'
????CHANGING
??????filename??????????=?filename
??????path??????????????=?path
??????fullpath??????????=?fullpath
????EXCEPTIONS
??????cntl_error????????=?1
??????error_no_gui??????=?2
??????OTHERS????????????=?3.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
???????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
*?檢查文件是否存在
??CALL?METHOD?cl_gui_frontend_services=>file_exist
????EXPORTING
??????file????????????=?fullpath
????RECEIVING
??????result??????????=?rs
????EXCEPTIONS
??????cntl_error??????=?1
??????error_no_gui????=?2
??????wrong_parameter?=?3
??????OTHERS??????????=?4.
??IF?sy-subrc?<>?0.
????MESSAGE?'The?file?is?not?existing.'?TYPE?'E'.
??ENDIF.
??IF?rs?<>?'X'.
????MESSAGE?'The?file?is?not?existing.'?TYPE?'E'.
??ENDIF.
??openpath?=?fullpath.
*?取EXCEL?數據
??CALL?FUNCTION?'ALSM_EXCEL_TO_INTERNAL_TABLE'
????EXPORTING
??????filename????????????????=?openpath
??????i_begin_col?????????????=?1
??????i_begin_row?????????????=?2
??????i_end_col???????????????=?6
??????i_end_row???????????????=?65000
????TABLES
??????intern??????????????????=?up_excle
????EXCEPTIONS
??????inconsistent_parameters?=?1
??????upload_ole??????????????=?2
??????OTHERS??????????????????=?3.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
??CLEAR:?t_tab[],?t_tab.
??LOOP?AT?up_excle.
????CASE?up_excle-col.
??????WHEN?'001'.
????????WRITE?up_excle-value?TO?t_tab-text01.
??????WHEN?'002'.
????????WRITE?up_excle-value?TO?t_tab-text02.
????ENDCASE.
????AT?END?OF?row.
??????APPEND?t_tab.
??????CLEAR?t_tab.
????ENDAT.
??ENDLOOP.
*?添加到數據庫
??SORT?t_tab?BY?text01?text02.
??LOOP?AT?t_tab.
????CLEAR?wa_itab.
????MOVE-CORRESPONDING?t_tab?TO?wa_itab.
????READ?TABLE?gt_tab?WITH?KEY?text01?=?t_tab-text01
????????????????????????????????????????????????text02?=?t_tab-text02.
????IF?sy-subrc?<>?0.
??????APPEND?wa_itab?TO?gt_tab.
????ELSE.
??????MODIFY?TABLE?gt_tab?FROM?wa_itab?TRANSPORTING?text01?text02.
????ENDIF.
??ENDLOOP.
??PERFORM?form_save.
ENDFORM.????????????????????"?FORM_PC
*&---------------------------------------------------------------------*
*&??????Form??FORM_SAVE
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?form_save?.
*?檢查空行存在
??PERFORM?check_line.
??CALL?FUNCTION?'ENQUEUE_EZTEXT1'
????EXPORTING
??????mode_ztext1????=?'E'
??????mandt??????????=?sy-mandt
??????_scope?????????=?'2'
??????_wait??????????=?'?'
??????_collect???????=?'?'
????EXCEPTIONS
??????foreign_lock???=?1
??????system_failure?=?2
??????OTHERS?????????=?3.
??IF?sy-subrc?<>?0.
????MESSAGE?ID?sy-msgid?TYPE?sy-msgty?NUMBER?sy-msgno
????????????WITH?sy-msgv1?sy-msgv2?sy-msgv3?sy-msgv4.
??ENDIF.
??FREE?t_tab.
??LOOP?AT?gt_tab.
????MOVE-CORRESPONDING?gt_tab?TO?t_tab.
????t_tab-mandt?=?sy-mandt.
????APPEND?t_tab.
????CLEAR?t_tab.
??ENDLOOP.
??DELETE?FROM?ztext1?WHERE?text01?NE?space.
??IF?sy-subrc?EQ?0.
????COMMIT?WORK?.
??ELSE.
????ROLLBACK?WORK.
??ENDIF.
??INSERT?ztext1?FROM?TABLE?t_tab.
??IF?sy-subrc?EQ?0.
????MESSAGE?'changed?ok'?TYPE?'S'.
????COMMIT?WORK.
??ELSE.
????ROLLBACK?WORK.
??ENDIF.
??FREE?t_tab.
*?UNLOCK
??CALL?FUNCTION?'DEQUEUE_EZTEXT1'
????EXPORTING
??????mode_ztext1?=?'E'
??????mandt???????=?sy-mandt
??????_scope??????=?'3'
??????_synchron???=?'?'
??????_collect????=?'?'.
ENDFORM.????????????????????"?FORM_SAVE
*&---------------------------------------------------------------------*
*&??????Form??CHECK_LINE
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
*??-->??p1????????text
*??<--??p2????????text
*----------------------------------------------------------------------*
FORM?check_line?.
??DATA:lv_message(255).
??LOOP?AT?gt_tab.
????IF?gt_tab-text01?=?space?OR?gt_tab-text02?=?space.
??????MESSAGE?'Please?Fullfill?Primary?Key?Fields.'?TYPE?'E'.
??????EXIT.
????ENDIF.
????CLEAR?gt_tab.
??ENDLOOP.
*?檢查有無重復Key?字段
??SORT?gt_tab?BY?text01?text02.
??DELETE?ADJACENT?DUPLICATES?FROM?gt_tab.
??CLEAR:?gt_tab,?t_tab.
??LOOP?AT?gt_tab.
????IF?t_tab-text01?=?gt_tab-text01?AND?t_tab-text02?=?gt_tab-text02.
??????CLEAR?lv_message.
??????CONCATENATE??'TEXT01'?t_tab-text01?'有重復記錄!'?INTO?lv_message.
??????MESSAGE?lv_message?TYPE?'E'.
????ENDIF.
????CLEAR?t_tab.
????t_tab?=?gt_tab.
??ENDLOOP.
ENDFORM.????????????????????"?CHECK_LINE
*&---------------------------------------------------------------------*
*&??????Module??CHECK_TEXT01??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?check_text01?INPUT.
??IF?gt_tab-text01?IS?INITIAL.
????MESSAGE?'TEXT01?should?not?be?initial'?TYPE?'E'.
??ENDIF.
ENDMODULE.?????????????????"?CHECK_TEXT01??INPUT
*&---------------------------------------------------------------------*
*&??????Module??CHECK_TEXT02??INPUT
*&---------------------------------------------------------------------*
*???????text
*----------------------------------------------------------------------*
MODULE?check_text02?INPUT.
??DATA:?i?TYPE?i?VALUE?'0'.
??IF?gt_tab-text02?IS?INITIAL.
????MESSAGE?'TEXT02?should?not?be?initial'?TYPE?'E'.
??ENDIF.
??LOOP?AT?gt_tab?TO?wa_itab?WHERE?text01?=?gt_tab-text01
??????????????????????????????????????????AND??????text02?=?gt_tab-text02.
????i?=?i?+?1.
??ENDLOOP.
??IF??i?>=?2.
????MESSAGE?'?EXISTING?THE?DATA'?TYPE?'E'.
??ENDIF.
ENDMODULE.?????????????????"?CHECK_TEXT02??INPUT
總結
以上是生活随笔為你收集整理的用dialog创建一个可修改表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: check上传模板中的金额字段中的千分位
- 下一篇: 使用ALV中输出ICON