1. 效果
界面
2. 实现方法
代码
CLASS lcl_events_receiver DEFINITION DEFERRED.
TABLES: zmm_ap_po_head.
TYPES: BEGIN OF ty_zmm_ap_po_head,
box TYPE c.
INCLUDE STRUCTURE zmm_ap_po_head.
TYPES: END OF ty_zmm_ap_po_head.
TYPES: BEGIN OF ty_zmm_ap_po_item,
box TYPE c.
INCLUDE STRUCTURE zmm_ap_po_item.
TYPES: END OF ty_zmm_ap_po_item.
DATA: sellist TYPE TABLE OF vimsellist,
wa_sellist TYPE vimsellist.
DATA: go_customer_container TYPE REF TO cl_gui_custom_container,
go_split TYPE REF TO cl_gui_splitter_container,
go_grid_head TYPE REF TO cl_gui_alv_grid,
go_grid_item TYPE REF TO cl_gui_alv_grid.
DATA: gt_zmm_ap_po_head TYPE TABLE OF ty_zmm_ap_po_head,
gt_zmm_ap_po_item TYPE TABLE OF ty_zmm_ap_po_item.
DATA: gr_table_head TYPE REF TO cl_salv_table,
gr_table_item TYPE REF TO cl_salv_table.
DATA: go_columns TYPE REF TO cl_salv_columns.
DATA: gs_layout TYPE lvc_s_layo, "布局
gt_fieldcat TYPE lvc_t_fcat, "字段属性内表
gt_fieldcat_head TYPE lvc_t_fcat, "字段属性内表
gt_fieldcat_item TYPE lvc_t_fcat, "字段属性内表
gs_fieldcat TYPE lvc_s_fcat,
gs_ui_func TYPE ui_func, "隐藏工具栏图标
gt_ui_func TYPE ui_functions,
gv_col TYPE i.
DATA: go_events_receiver TYPE REF TO lcl_events_receiver.
CONSTANTS: lc_appid TYPE string VALUE 'dcfa5c7d-cef8-8837-a49f-6f1d92adf792'.
*----------------------------------------------------------------------*
* CLASS lcl_events_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_events_receiver DEFINITION .
PUBLIC SECTION.
"工具栏事件
METHODS toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object.
"处理命令事件
METHODS user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
"数据改变事件
METHODS data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
METHODS data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified.
"单击事件
METHODS hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id.
"双击事件
METHODS double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
ENDCLASS. "LCL_EVENTS_RECEIVER DEFINITION
"事件接收类实现
*----------------------------------------------------------------------*
* CLASS LCL_EVENTS_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_events_receiver IMPLEMENTATION.
"工具栏事件实现
METHOD toolbar.
PERFORM frm_toolbar USING e_object.
ENDMETHOD. "TOOLBAR
"处理命令事件实现
METHOD user_command.
PERFORM frm_user_command USING e_ucomm.
ENDMETHOD. "USER_COMMAND
METHOD data_changed_finished .
PERFORM frm_data_changed_finished USING e_modified .
ENDMETHOD . "handle_data_changed_finished
"数据改变事件实现
METHOD data_changed.
* PERFORM frm_data_changed USING er_data_changed.
ENDMETHOD. "DATA_CHANGED
"单击事件实现
METHOD hotspot_click.
* PERFORM frm_hotspot_click USING e_row_id e_column_id.
ENDMETHOD. "HOTSPOT_CLICK
"双击事件
METHOD double_click.
* PERFORM frm_double_click USING e_row e_column.
ENDMETHOD. "DOUBLE_CLICK
ENDCLASS. "LCL_EVENTS_RECEIVER IMPLEMENTATION
DEFINE marco_sellist.
wa_sellist-viewfield = &1.
wa_sellist-operator = &2.
wa_sellist-value = &3.
wa_sellist-and_or = &4.
append wa_sellist to sellist.
clear wa_sellist.
END-OF-DEFINITION.
DEFINE m_fieldcat.
clear gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-ref_table = &2.
gs_fieldcat-ref_field = &3.
gs_fieldcat-scrtext_s = &4.
gs_fieldcat-scrtext_m = &4.
gs_fieldcat-scrtext_l = &4.
gv_col = gv_col + 1.
gs_fieldcat-col_pos = gv_col.
if &1 eq 'BOX'.
if &5 = 'X'.
gs_fieldcat-edit = 'X'.
endif.
gs_fieldcat-checkbox = 'X'.
endif.
append gs_fieldcat to gt_fieldcat.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_sync TYPE c RADIOBUTTON GROUP g1 USER-COMMAND ucomm DEFAULT'X',
p_send TYPE c RADIOBUTTON GROUP g1,
p_reset TYPE c RADIOBUTTON GROUP g1,
p_query TYPE c RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_fm1 TYPE c MODIF ID m1 DEFAULT'X' USER-COMMAND fm.",
* p_fm2 TYPE c RADIOBUTTON GROUP g2 MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
SELECT-OPTIONS: s1_ebeln FOR zmm_ap_po_head-ebeln MODIF ID m2,
s1_bsart FOR zmm_ap_po_head-bsart MODIF ID m2,
s1_bukrs FOR zmm_ap_po_head-bukrs MODIF ID m2,
s1_lifnr FOR zmm_ap_po_head-lifnr MODIF ID m2,
s1_zterm FOR zmm_ap_po_head-zterm MODIF ID m2,
s1_aedat FOR zmm_ap_po_head-aedat MODIF ID m2,
s1_ernam FOR zmm_ap_po_head-ernam MODIF ID m2,
s1_loekz FOR zmm_ap_po_head-loekz MODIF ID m2,
s1_zcdat FOR zmm_ap_po_head-zcdate MODIF ID m2,
s1_zctim FOR zmm_ap_po_head-zctime MODIF ID m2,
s1_type FOR zmm_ap_po_head-type MODIF ID m2,
s1_msg FOR zmm_ap_po_head-message MODIF ID m2,
s1_zupmo FOR zmm_ap_po_head-zupmod NO INTERVALS MODIF ID m3,
s1_zupfl FOR zmm_ap_po_head-zupflg NO INTERVALS MODIF ID m4.
PARAMETERS: p_max TYPE tbmaxsel MODIF ID mi OBLIGATORY DEFAULT 500.
SELECTION-SCREEN END OF BLOCK b3.
INITIALIZATION.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_fm1 = 'X'.
IF p_query = 'X' AND screen-group1 = 'MI'.
screen-active = 1.
ELSEIF screen-group1 = 'MI'.
screen-active = 0.
ENDIF.
CASE 'X'.
WHEN p_sync. "后台同步
IF screen-group1 = 'M2' OR screen-group1 = 'M3' OR screen-group1 = 'M4'.
screen-active = 0.
ENDIF.
WHEN p_reset. "重置传输标识
WHEN p_send. "手动同步
IF screen-group1 = 'M3'.
screen-input = 0.
ENDIF.
WHEN p_query. "查询
WHEN OTHERS.
ENDCASE.
* ELSEIF p_fm2 = 'X'.
* IF screen-group1 = 'M2' OR screen-group1 = 'M3'.
* screen-active = 0.
* ELSEIF p_query = 'X' AND screen-group1 = 'MI'.
* screen-active = 1.
* ELSEIF screen-group1 = 'MI'.
* screen-active = 0.
* ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
AT SELECTION-SCREEN.
CASE sy-ucomm.
WHEN 'UCOMM'.
IF p_send = 'X'.
s1_zupmo-sign = 'I'.
s1_zupmo-option = 'EQ'.
s1_zupmo-low = '2'.
APPEND s1_zupmo.
CLEAR: s1_zupfl,s1_zupfl[].
ELSEIF p_reset = 'X'.
CLEAR: s1_zupfl,s1_zupfl[],s1_zupmo,s1_zupmo[].
ELSE.
CLEAR: s1_zupmo,s1_zupmo[].
ENDIF.
ENDCASE.
PERFORM frm_check_author.
START-OF-SELECTION.
IF p_fm1 = 'X'. "采购订单业务
CASE 'X'.
WHEN p_sync. "后台同步
PERFORM frm_syncdata_to_oa_fm1.
WHEN p_reset. "重置传输标识
PERFORM frm_reset_fm1.
WHEN p_query OR p_send. "查询 & 手动同步
PERFORM frm_query_fm1.
WHEN OTHERS.
ENDCASE.
* ELSEIF p_fm2 = 'X'. "收货凭证业务
* CASE 'X'.
* WHEN p_sync. "后台同步
** PERFORM frm_syncdata_to_oa_FM2.
* WHEN p_reset. "重置传输标识
** PERFORM frm_reset_fm2.
* WHEN p_query OR p_send. "查询 & 手动同步
** PERFORM frm_query_fm2.
* WHEN OTHERS.
* ENDCASE.
ENDIF.
END-OF-SELECTION.
CASE 'X'.
WHEN p_query OR p_send. "查询 & 手动同步
CALL SCREEN 9000.
ENDCASE.
*&---------------------------------------------------------------------*
*& Form frm_reset_fm1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_reset_fm1 .
* marco_sellist: 'ZUPFLG' 'EQ' p2_ZUPFL 'AND'.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'ZUPFLG'
TABLES
sellist = sellist
rangetab = s1_zupfl.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'ZUPMOD'
TABLES
sellist = sellist
rangetab = s1_zupmo.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'EBELN'
TABLES
sellist = sellist
rangetab = s1_ebeln.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'BSART'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_bsart.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'BUKRS'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_bukrs.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'LIFNR'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_lifnr.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'ZTERM'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_zterm.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'AEDAT'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_aedat.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'ERNAM'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_ernam.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'LOEKZ'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_loekz.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'ZCDATE'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_zcdat.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'ZCTIME'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_zctim.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'TYPE'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_type.
CALL FUNCTION 'VIEW_RANGETAB_TO_SELLIST'
EXPORTING
fieldname = 'MESSAGE'
append_conjunction = 'AND'
TABLES
sellist = sellist
rangetab = s1_msg.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
action = 'U'
* CORR_NUMBER = ' '
* GENERATE_MAINT_TOOL_IF_MISSING = ' '
* SHOW_SELECTION_POPUP = ' '
view_name = 'ZMM_AP_PO_HEAD'
* NO_WARNING_FOR_CLIENTINDEP = ' '
* RFC_DESTINATION_FOR_UPGRADE = ' '
* CLIENT_FOR_UPGRADE = ' '
* VARIANT_FOR_SELECTION = ' '
complex_selconds_used = 'X'
* CHECK_DDIC_MAINFLAG = ' '
* SUPPRESS_WA_POPUP = ' '
TABLES
dba_sellist = sellist
EXCEPTIONS
client_reference = 1
foreign_lock = 2
invalid_action = 3
no_clientindependent_auth = 4
no_database_function = 5
no_editor_function = 6
no_show_auth = 7
no_tvdir_entry = 8
no_upd_auth = 9
only_show_allowed = 10
system_failure = 11
unknown_field_in_dba_sellist = 12
view_not_found = 13
maintenance_prohibited = 14
OTHERS = 15.
ENDFORM. " FRM_RESET_FM1
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTHOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_check_author .
DATA: lt_t001 TYPE TABLE OF t001,
wa_t001 TYPE t001.
SELECT * FROM t001 INTO TABLE lt_t001 WHERE bukrs IN s1_bukrs.
LOOP AT lt_t001 INTO wa_t001.
zcl_common_authority_check=>check_bukrs( EXPORTING iv_bukrs = wa_t001-bukrs ).
ENDLOOP.
ENDFORM. " FRM_CHECK_AUTHOR
*&---------------------------------------------------------------------*
*& Form FRM_QUERY_FM1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_query_fm1 .
PERFORM frm_init_object_fm1.
PERFORM frm_set_layout_fm1.
PERFORM frm_set_fieldcat_fm1.
PERFORM frm_excluding_toolbar_fm1.
PERFORM frm_get_data_fm1.
PERFORM frm_show_data_fm1.
ENDFORM. "FRM_QUERY_FM1
*&---------------------------------------------------------------------*
*& Form frm_init_object_fm1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_init_object_fm1 .
"初始化GRID ALV对象
IF go_customer_container IS INITIAL.
CREATE OBJECT go_customer_container
EXPORTING
container_name = 'CONTAINER_ROOT'.
ENDIF.
IF go_split IS INITIAL.
CREATE OBJECT go_split
EXPORTING
parent = go_customer_container
rows = 2
columns = 1.
ENDIF.
IF go_grid_head IS INITIAL.
CREATE OBJECT go_grid_head
EXPORTING
i_parent = go_split->get_container( row = 1 column = 1 ).
ENDIF.
IF go_grid_item IS INITIAL.
CREATE OBJECT go_grid_item
EXPORTING
i_parent = go_split->get_container( row = 2 column = 1 ).
ENDIF.
ENDFORM. " frm_init_object_fm1
*&---------------------------------------------------------------------*
*& Form frm_get_data_fm1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data_fm1 .
IF p_query = 'X'.
SELECT *
FROM zmm_ap_po_head
INTO CORRESPONDING FIELDS OF TABLE gt_zmm_ap_po_head
UP TO p_max ROWS
WHERE ebeln IN s1_ebeln
AND bsart IN s1_bsart
AND bukrs IN s1_bukrs
AND lifnr IN s1_lifnr
AND zterm IN s1_zterm
AND aedat IN s1_aedat
AND ernam IN s1_ernam
AND loekz IN s1_loekz.
ELSE.
SELECT *
FROM zmm_ap_po_head
INTO CORRESPONDING FIELDS OF TABLE gt_zmm_ap_po_head
WHERE ebeln IN s1_ebeln
AND bsart IN s1_bsart
AND bukrs IN s1_bukrs
AND lifnr IN s1_lifnr
AND zterm IN s1_zterm
AND aedat IN s1_aedat
AND ernam IN s1_ernam
AND loekz IN s1_loekz
AND zupmod IN s1_zupmo
AND zupflg IN s1_zupfl.
ENDIF.
IF gt_zmm_ap_po_head IS NOT INITIAL.
SELECT *
FROM zmm_ap_po_item
INTO CORRESPONDING FIELDS OF TABLE gt_zmm_ap_po_item
FOR ALL ENTRIES IN gt_zmm_ap_po_head
WHERE ebeln = gt_zmm_ap_po_head-ebeln.
ENDIF.
SORT gt_zmm_ap_po_head BY ebeln ASCENDING.
SORT gt_zmm_ap_po_item BY ebeln ebelp ASCENDING.
ENDFORM. " frm_get_data_fm1
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA_FM1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_show_data_fm1 .
"实例化事件对象
CREATE OBJECT go_events_receiver.
"注册事件
SET HANDLER go_events_receiver->toolbar FOR go_grid_head.
SET HANDLER go_events_receiver->user_command FOR go_grid_head.
SET HANDLER go_events_receiver->data_changed FOR go_grid_head.
SET HANDLER go_events_receiver->data_changed_finished FOR go_grid_head.
SET HANDLER go_events_receiver->hotspot_click FOR go_grid_head.
SET HANDLER go_events_receiver->double_click FOR go_grid_head.
CALL METHOD go_grid_head->register_edit_event "注册编辑事件响应Checkbox
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD go_grid_head->set_table_for_first_display
EXPORTING
i_save = 'A'
i_default = 'X'
is_layout = gs_layout
it_toolbar_excluding = gt_ui_func
CHANGING
it_outtab = gt_zmm_ap_po_head
it_fieldcatalog = gt_fieldcat_head
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
"注册事件
*SET HANDLER go_events_receiver->toolbar FOR go_grid_item.
SET HANDLER go_events_receiver->user_command FOR go_grid_item.
SET HANDLER go_events_receiver->data_changed FOR go_grid_item.
SET HANDLER go_events_receiver->data_changed_finished FOR go_grid_item.
SET HANDLER go_events_receiver->hotspot_click FOR go_grid_item.
SET HANDLER go_events_receiver->double_click FOR go_grid_item.
CALL METHOD go_grid_item->set_table_for_first_display
EXPORTING
i_save = 'A'
i_default = 'X'
is_layout = gs_layout
it_toolbar_excluding = gt_ui_func
CHANGING
it_outtab = gt_zmm_ap_po_item
it_fieldcatalog = gt_fieldcat_item
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
ENDFORM. " FRM_SHOW_DATA_FM1
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
DATA: l_text TYPE char100.
IF p_fm1 = 'X' AND p_query = 'X'.
l_text = '显示下传OA的销售订单数据!'.
ELSEIF p_fm1 = 'X' AND p_send = 'X'.
l_text = '手工下传销售订单到OA!'.
* ELSEIF p_fm2 = 'X' AND p_query = 'X'.
* l_text = '显示下传OA的收货凭证数据!'.
* ELSEIF p_fm2 = 'X' AND p_send = 'X'.
* l_text = '手工下传收货凭证到OA!'.
ENDIF.
SET PF-STATUS '9000'.
SET TITLEBAR '9000' WITH l_text.
ENDMODULE. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
DATA lv_ucomm TYPE sy-ucomm.
lv_ucomm = sy-ucomm.
CASE lv_ucomm.
WHEN '&F03' OR '&F12' OR '&F15'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Form frm_set_layout_fm1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_layout_fm1 .
CLEAR: gs_layout.
gs_layout-cwidth_opt = 'X'. "自动列宽
gs_layout-zebra = 'X'. "斑马纹
* gs_layout-box_fname = 'BOX'.
* gs_layout-sel_mode = 'A'. "显示选择块
* GS_LAYOUT-EDIT = 'X'.
gs_layout-detailinit = 'X'.
gs_layout-detailtitl = '详细信息'.
* GS_LAYOUT-STYLEFNAME = 'ZSTYLE'. "用于改变字段属性
ENDFORM. " frm_set_layout_fm1
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat_fm1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_fieldcat_fm1 .
m_fieldcat: 'BOX' '' '' '选择' 'X'.
m_fieldcat: 'EBELN' 'ZMM_AP_PO_HEAD' 'EBELN' '采购凭证号' ''.
m_fieldcat: 'BSART' 'ZMM_AP_PO_HEAD' 'BSART' '采购凭证类型' ''.
m_fieldcat: 'BUKRS' 'ZMM_AP_PO_HEAD' 'BUKRS' '公司代码' ''.
m_fieldcat: 'BUTXT' 'ZMM_AP_PO_HEAD' 'BUTXT' '公司代码的名称' ''.
m_fieldcat: 'WAERS' 'ZMM_AP_PO_HEAD' 'WAERS' '货币码' ''.
m_fieldcat: 'LIFNR' 'ZMM_AP_PO_HEAD' 'LIFNR' '供应商代码' ''.
m_fieldcat: 'NAME1' 'ZMM_AP_PO_HEAD' 'NAME1' '供应商名称' ''.
m_fieldcat: 'ZTERM' 'ZMM_AP_PO_HEAD' 'ZTERM' '付款条件代码' ''.
m_fieldcat: 'TEXT1' 'ZMM_AP_PO_HEAD' 'TEXT1' '付款条件描述' ''.
m_fieldcat: 'ZDDHSZJ' 'ZMM_AP_PO_HEAD' 'ZDDHSZJ' '整单含税总价' ''.
m_fieldcat: 'AEDAT' 'ZMM_AP_PO_HEAD' 'AEDAT' '创建日期' ''.
m_fieldcat: 'ERNAM' 'ZMM_AP_PO_HEAD' 'ERNAM' '创建人' ''.
m_fieldcat: 'NAME_TEXT' 'ZMM_AP_PO_HEAD' 'NAME_TEXT' '创建人名称' ''.
m_fieldcat: 'LOEKZ' 'ZMM_AP_PO_HEAD' 'LOEKZ' '删除标识' ''.
m_fieldcat: 'ZUPMOD' 'ZMM_AP_PO_HEAD' 'ZUPMOD' '更新模式' ''.
m_fieldcat: 'ZUPFLG' 'ZMM_AP_PO_HEAD' 'ZUPFLG' '更新标识' ''.
m_fieldcat: 'ZCDATE' 'ZMM_AP_PO_HEAD' 'ZCDATE' '上次同步日期' ''.
m_fieldcat: 'ZCTIME' 'ZMM_AP_PO_HEAD' 'ZCTIME' '上次同步时间' ''.
m_fieldcat: 'TYPE' 'ZMM_AP_PO_HEAD' 'TYPE' '信息类型' ''.
m_fieldcat: 'MESSAGE' 'ZMM_AP_PO_HEAD' 'MESSAGE' '消息文本' ''.
gt_fieldcat_head = gt_fieldcat.
CLEAR gv_col.
REFRESH gt_fieldcat.
m_fieldcat: 'BOX' '' '' '选择' ''.
m_fieldcat: 'EBELN' 'ZMM_AP_PO_ITEM' 'EBELN' '采购凭证号' ''.
m_fieldcat: 'EBELP' 'ZMM_AP_PO_ITEM' 'EBELP' '采购凭证项目' ''.
m_fieldcat: 'WERKS' 'ZMM_AP_PO_ITEM' 'WERKS' '工厂' ''.
m_fieldcat: 'NAME1' 'ZMM_AP_PO_ITEM' 'NAME1' '工厂名称' ''.
m_fieldcat: 'MTART' 'ZMM_AP_PO_ITEM' 'MTART' '商品类型' ''.
m_fieldcat: 'MTBEZ' 'ZMM_AP_PO_ITEM' 'MTBEZ' '商品类型描述' ''.
m_fieldcat: 'MATNR' 'ZMM_AP_PO_ITEM' 'MATNR' '物料编码' ''.
m_fieldcat: 'TXZ01' 'ZMM_AP_PO_ITEM' 'TXZ01' '物料描述' ''.
m_fieldcat: 'MEINS' 'ZMM_AP_PO_ITEM' 'MEINS' '采购订单计计量单位' ''.
m_fieldcat: 'MWSKZ' 'ZMM_AP_PO_ITEM' 'MWSKZ' '进项税代码' ''.
m_fieldcat: 'MENGE' 'ZMM_AP_PO_ITEM' 'MENGE' '采购订单数量' ''.
m_fieldcat: 'NETPR' 'ZMM_AP_PO_ITEM' 'NETPR' '净价' ''.
m_fieldcat: 'NETWR' 'ZMM_AP_PO_ITEM' 'NETWR' '订单净值' ''.
m_fieldcat: 'ZHSDJ' 'ZMM_AP_PO_ITEM' 'ZHSDJ' '含税单价' ''.
m_fieldcat: 'BONBA' 'ZMM_AP_PO_ITEM' 'BONBA' '含税总价' ''.
m_fieldcat: 'EINDT' 'ZMM_AP_PO_ITEM' 'EINDT' '项目交货日期' ''.
m_fieldcat: 'PRDAT' 'ZMM_AP_PO_ITEM' 'PRDAT' '价格确定日期' ''.
m_fieldcat: 'LOEKZ' 'ZMM_AP_PO_ITEM' 'LOEKZ' '删除标识' ''.
gt_fieldcat_item = gt_fieldcat.
CLEAR gv_col.
REFRESH gt_fieldcat.
ENDFORM. " frm_set_fieldcat_fm1
*&---------------------------------------------------------------------*
*& Form FRM_DATA_CHANGED_FINISHED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_MODIFIED text
*----------------------------------------------------------------------*
FORM frm_data_changed_finished USING p_e_modified.
DATA: is_stable TYPE lvc_s_stbl.
DATA: ls_row_id TYPE lvc_s_row.
FIELD-SYMBOLS: <fs_zmm_ap_po_head> TYPE ty_zmm_ap_po_head,
<fs_zmm_ap_po_item> TYPE ty_zmm_ap_po_item.
CALL METHOD go_grid_head->get_current_cell
IMPORTING
es_row_id = ls_row_id.
READ TABLE gt_zmm_ap_po_head ASSIGNING <fs_zmm_ap_po_head> INDEX ls_row_id.
IF sy-subrc = 0.
LOOP AT gt_zmm_ap_po_item ASSIGNING <fs_zmm_ap_po_item> WHERE ebeln = <fs_zmm_ap_po_head>-ebeln.
<fs_zmm_ap_po_item>-box = <fs_zmm_ap_po_head>-box.
ENDLOOP.
ENDIF.
is_stable-row = 'X'. "保持行
is_stable-col = 'X'. "保持列
CALL METHOD go_grid_head->refresh_table_display( EXPORTING is_stable = is_stable ).
CALL METHOD go_grid_item->refresh_table_display( EXPORTING is_stable = is_stable ).
ENDFORM. " FRM_DATA_CHANGED_FINISHED
*&---------------------------------------------------------------------*
*& Form frm_excluding_toolbar_fm1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_excluding_toolbar_fm1 .
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_append_row. "附加行
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_insert_row."插入行
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_delete_row."删除行
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy_row."复制行
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND gs_ui_func TO gt_ui_func.
gs_ui_func = cl_gui_alv_grid=>mc_fc_info. "文本信息
APPEND gs_ui_func TO gt_ui_func.
ENDFORM. " frm_excluding_toolbar_fm1
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM frm_user_command USING p_e_ucomm.
DATA: l_answer TYPE c,
is_stable TYPE lvc_s_stbl.
FIELD-SYMBOLS: <fs_zmm_ap_po_head> TYPE ty_zmm_ap_po_head, "手工同步选择的数据
<fs_zmm_ap_po_item> TYPE ty_zmm_ap_po_item.
CASE p_e_ucomm.
WHEN 'ZPOST'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = '是否立即执行同步'
IMPORTING
answer = l_answer.
IF l_answer = '1'.
PERFORM frm_syncdata_to_oa_fm1.
ENDIF.
WHEN 'ZSELALL'.
LOOP AT gt_zmm_ap_po_head ASSIGNING <fs_zmm_ap_po_head> WHERE box NE 'X'.
<fs_zmm_ap_po_head>-box = 'X'.
ENDLOOP.
LOOP AT gt_zmm_ap_po_item ASSIGNING <fs_zmm_ap_po_item> WHERE box NE 'X'.
<fs_zmm_ap_po_item>-box = 'X'.
ENDLOOP.
WHEN 'ZDESELALL'.
LOOP AT gt_zmm_ap_po_head ASSIGNING <fs_zmm_ap_po_head> WHERE box = 'X'.
CLEAR <fs_zmm_ap_po_head>-box.
ENDLOOP.
LOOP AT gt_zmm_ap_po_item ASSIGNING <fs_zmm_ap_po_item> WHERE box = 'X'.
CLEAR <fs_zmm_ap_po_item>-box.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
is_stable-row = 'X'. "保持行
is_stable-col = 'X'. "保持列
CALL METHOD go_grid_head->refresh_table_display( EXPORTING is_stable = is_stable ).
CALL METHOD go_grid_item->refresh_table_display( EXPORTING is_stable = is_stable ).
ENDFORM. " FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_TOOLBAR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
*----------------------------------------------------------------------*
FORM frm_toolbar USING p_object TYPE REF TO cl_alv_event_toolbar_set.
DATA: ls_toolbar TYPE stb_button.
"插入分隔符
CLEAR ls_toolbar.
ls_toolbar-butn_type = 3.
APPEND ls_toolbar TO p_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'ZSELALL'. "function code
ls_toolbar-icon = icon_select_all.
ls_toolbar-quickinfo = '全选'. "按钮信息 鼠标停在按钮上显示的信息
ls_toolbar-butn_type = 0. "按钮类型
IF p_send = 'X'.
ls_toolbar-disabled = ''.
ELSE.
ls_toolbar-disabled = 'X'.
ENDIF.
ls_toolbar-text = '全选'. "按钮名称
APPEND ls_toolbar TO p_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'ZDESELALL'. "function code
ls_toolbar-icon = icon_deselect_all.
ls_toolbar-quickinfo = '取消全选'. "按钮信息 鼠标停在按钮上显示的信息
ls_toolbar-butn_type = 0. "按钮类型
IF p_send = 'X'.
ls_toolbar-disabled = ''.
ELSE.
ls_toolbar-disabled = 'X'.
ENDIF.
ls_toolbar-text = '取消全选'. "按钮名称
APPEND ls_toolbar TO p_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'ZPOST'. "function code
ls_toolbar-icon = icon_execute_object.
ls_toolbar-quickinfo = '手工同步数据到OA'. "按钮信息 鼠标停在按钮上显示的信息
ls_toolbar-butn_type = 0. "按钮类型
IF p_send = 'X'.
ls_toolbar-disabled = ''.
ELSE.
ls_toolbar-disabled = 'X'.
ENDIF.
ls_toolbar-text = '同步数据到OA'. "按钮名称
APPEND ls_toolbar TO p_object->mt_toolbar.
ENDFORM. " FRM_TOOLBAR
*&---------------------------------------------------------------------*
*& Form FRM_SYNCDATA_OA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_syncdata_to_oa_fm1 .
DATA: ls_output TYPE zpi_mt_oa_003_output,
ls_input TYPE zpi_mt_oa_003_input.
DATA: l_string TYPE string.
DATA: l_javascript_code TYPE string,
lo_javascript TYPE REF TO cl_java_script.
DATA: ls_hash TYPE md5_fields-hash.
DATA: lt_db_head TYPE TABLE OF zmm_ap_po_head, "head缓存表,用于向数据库回写数据
wa_db_head TYPE zmm_ap_po_head,
lt_db_items TYPE TABLE OF zmm_ap_po_item, "item缓存表
wa_db_item TYPE zmm_ap_po_item, "item缓存表结构
wa_if_item TYPE zpi_dt_oa_003_output_detail, "item同步接口结构
wa_if_head TYPE zpi_dt_oa_003_output_common. "head同步接口结构
DATA: wa_zmm_ap_po_head TYPE ty_zmm_ap_po_head, "手工同步选择的数据
wa_zmm_ap_po_item TYPE ty_zmm_ap_po_item.
FIELD-SYMBOLS: <fs_head> TYPE zpi_dt_oa_003_output_common,
<fs_zmm_ap_po_head> TYPE ty_zmm_ap_po_head.
DATA: lo_proxy TYPE REF TO zpi_co_si_oa_003_outbound.
DATA: ls_return_msg TYPE zpi_dt_oa_003_input_data.
CASE 'X'.
WHEN p_sync. "后台
SELECT *
FROM zmm_ap_po_head
INTO CORRESPONDING FIELDS OF TABLE ls_output-mt_oa_003_output-common
WHERE zupmod = '1' "自动更新的
AND zupflg = 'X'. "带更新标识的数据
IF ls_output-mt_oa_003_output-common IS NOT INITIAL.
SELECT *
FROM zmm_ap_po_item
INTO TABLE lt_db_items
FOR ALL ENTRIES IN ls_output-mt_oa_003_output-common
WHERE ebeln = ls_output-mt_oa_003_output-common-ebeln.
ENDIF.
LOOP AT ls_output-mt_oa_003_output-common ASSIGNING <fs_head> .
LOOP AT lt_db_items INTO wa_db_item WHERE ebeln = <fs_head>-ebeln.
CLEAR wa_if_item.
MOVE-CORRESPONDING wa_db_item TO wa_if_item.
APPEND wa_if_item TO <fs_head>-detail.
ENDLOOP.
ENDLOOP.
WHEN p_send. "手工
LOOP AT gt_zmm_ap_po_head INTO wa_zmm_ap_po_head WHERE box = 'X'.
CLEAR: wa_if_head.
MOVE-CORRESPONDING wa_zmm_ap_po_head TO wa_if_head.
LOOP AT gt_zmm_ap_po_item INTO wa_zmm_ap_po_item WHERE box = 'X' AND ebeln = wa_zmm_ap_po_head-ebeln.
CLEAR: wa_if_item.
MOVE-CORRESPONDING wa_zmm_ap_po_item TO wa_if_item.
APPEND wa_if_item TO wa_if_head-detail.
ENDLOOP.
APPEND wa_if_head TO ls_output-mt_oa_003_output-common.
ENDLOOP.
ENDCASE.
"Create object
lo_javascript = cl_java_script=>create( ).
"Compiler
CONCATENATE
`var lv_date = new Date().getTime();`
`lv_date;`
INTO l_javascript_code SEPARATED BY cl_abap_char_utilities=>cr_lf.
lo_javascript->compile( script_name = 'get_date.js' script = l_javascript_code ).
"Execute
ls_output-mt_oa_003_output-ts = lo_javascript->execute( 'get_date.js' ).
IF ls_output-mt_oa_003_output-ts IS INITIAL.
MESSAGE '获取时间戳错误,请稍后重试!' TYPE 'E'.
ENDIF.
l_string = lc_appid && ls_output-mt_oa_003_output-ts.
CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
EXPORTING
data = l_string
* LENGTH = 0
* VERSION = 1
IMPORTING
hash = ls_hash
* TABLES
* DATA_TAB = DATA_TAB
EXCEPTIONS
no_data = 1
internal_error = 2
OTHERS = 3.
ls_output-mt_oa_003_output-key = ls_hash.
IF ls_output-mt_oa_003_output-key IS INITIAL.
MESSAGE '获取AppKey,请稍后重试!' TYPE 'E'.
ENDIF.
IF ls_output-mt_oa_003_output-common IS NOT INITIAL. "有数据,进行同步
IF lo_proxy IS INITIAL.
CREATE OBJECT lo_proxy.
ENDIF.
TRY.
CALL METHOD lo_proxy->si_oa_003_outbound
EXPORTING
output = ls_output
IMPORTING
input = ls_input.
CATCH cx_ai_system_fault .
CATCH cx_ai_application_fault .
ENDTRY.
SORT ls_input-mt_oa_003_input-common-data BY ebeln ASCENDING.
IF ls_input-mt_oa_003_input-common IS NOT INITIAL. "同步成功
LOOP AT ls_output-mt_oa_003_output-common ASSIGNING <fs_head>.
CLEAR: wa_db_head.
MOVE-CORRESPONDING <fs_head> TO wa_db_head.
wa_db_head-zcdate = sy-datum.
wa_db_head-zctime = sy-uzeit.
READ TABLE ls_input-mt_oa_003_input-common-data INTO ls_return_msg WITH KEY ebeln = <fs_head>-ebeln BINARY SEARCH.
IF sy-subrc = 0.
wa_db_head-type = ls_return_msg-type.
wa_db_head-message = ls_return_msg-message.
IF p_send = 'X'.
READ TABLE gt_zmm_ap_po_head ASSIGNING <fs_zmm_ap_po_head> WITH KEY ebeln = <fs_head>-ebeln BINARY SEARCH. "消息回写alv
IF sy-subrc = 0.
<fs_zmm_ap_po_head>-zcdate = sy-datum.
<fs_zmm_ap_po_head>-zctime = sy-uzeit.
<fs_zmm_ap_po_head>-type = ls_return_msg-type.
<fs_zmm_ap_po_head>-message = ls_return_msg-message.
CLEAR: <fs_zmm_ap_po_head>-zupflg. "取消同步标识
ENDIF.
ENDIF.
ENDIF.
CASE 'X'.
WHEN p_sync. "后台.
wa_db_head-zupmod = '1'. "自动更新
WHEN p_send.
wa_db_head-zupmod = '2'. "手动更新
WHEN OTHERS.
ENDCASE.
IF wa_db_head-type = 'S'.
CLEAR: wa_db_head-zupflg. "重置传输标识
ENDIF.
APPEND wa_db_head TO lt_db_head.
ENDLOOP.
MODIFY zmm_ap_po_head FROM TABLE lt_db_head. "回写本次同步返回的消息
ENDIF.
l_string = lines( ls_input-mt_oa_003_input-common-data ).
l_string = '本次同步:' && l_string && '条数据!'.
MESSAGE l_string TYPE 'S'.
ELSE.
MESSAGE '无数据更新' TYPE 'S'.
ENDIF.
ENDFORM. " FRM_SYNCDATA_OA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
GUI STATUS & GUI TITLE
屏幕
————————————————
版权声明:本文为CSDN博主「rogerix4」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。