http发出代码
REPORT zmmr026. TABLES:vfclmshlpacntid,csks,cosp,coep,lfa1. INCLUDE <icon>. TYPE-POOLS: slis. DATA: gv_container TYPE REF TO cl_gui_docking_container, gv_alv TYPE REF TO cl_gui_alv_grid , "ALV网格 gv_row_alv TYPE REF TO cl_gui_alv_grid_base, gt_exclude TYPE ui_functions, "用于去掉不要的菜单栏 gv_index_columns TYPE lvc_t_col, "选择列 gt_fieldcat TYPE lvc_t_fcat, "FCAT gs_fieldcat TYPE LINE OF lvc_t_fcat, "FCAT gt_f4 TYPE lvc_t_f4 WITH HEADER LINE, "搜索帮助 gs_layout TYPE lvc_s_layo , "布局结构 gs_variant TYPE disvariant, "字段格式保存 gt_sort TYPE TABLE OF lvc_s_sort, "用于排序 gs_sort TYPE lvc_s_sort, "用于排序 gt_index TYPE lvc_t_col, "选择列 gt_filt TYPE lvc_t_filt. "用于过滤 DATA:gs_stable TYPE lvc_s_stbl. "刷新稳定 DATA:filt_table TYPE lvc_t_fidx."过滤内表 DATA: gt_nu3_rows TYPE lvc_t_row, "获取行 gt_nu3_no TYPE lvc_t_roid, gs_nu3_no TYPE lvc_s_roid. *&---------------------------------------------------------------------* * DEFINE VARIABLE 变量 *&---------------------------------------------------------------------* DATA:gv_ok_code LIKE sy-ucomm. *&---------------------------------------------------------------------* * DEFIEN INNER TABLE 内表 *&---------------------------------------------------------------------* DATA:BEGIN OF gs_alv, opertype TYPE char1, bukrs TYPE ztmm030-bukrs, "公司代码 lifnr TYPE ztmm030-lifnr, "供应商科目编号 unw_reason TYPE bp001-unw_reason, "供应商等级 unw_text TYPE tp18t-unw_text, "供应商等级描述 minbw TYPE ztmm030-minbw, "预付款总额度 zhsla TYPE ztmm030-zhsla, "已预付金额 zhslb TYPE ztmm030-zhslb, "应付暂估金额 yfkye TYPE ztmm030-yfkye, "预付款余额 name TYPE lfa1-name1, "//客商名称 zsel TYPE char1, "选择 zcheck TYPE char30, "红绿灯 message TYPE char220, "消息 END OF gs_alv. DATA:gt_alv LIKE TABLE OF gs_alv. FIELD-SYMBOLS:<fs_alv> LIKE gs_alv. *--------------------------------------------------------------------* * 定义 类 *---------------------------------------------------------------------* CLASS lcl_event_handler DEFINITION. PUBLIC SECTION. METHODS: 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, *--基于单元格的效验 handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm, *--在数据修改完成之后 handle_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid IMPORTING e_modified et_good_cells , *--搜索帮助 handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid IMPORTING e_fieldname es_row_no er_event_data, handle_double_click FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column es_row_no, handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid "屏幕中的单击事件,可以具体到某行某列,需要设置热点 IMPORTING e_row_id e_column_id es_row_no. ENDCLASS. *&---------------------------------------------------------------------* * CLASS实例化 *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_event_handler IMPLEMENTATION. *--HANDLE DATA CHANGED FINISHED METHOD handle_data_changed_finished. PERFORM frm_data_changed_finished USING e_modified et_good_cells . ENDMETHOD. "HANDLE_DATA_CHANGED_FINISHED METHOD handle_data_changed. "单元格事件触发相关 * PERFORM FRM_HANDLE_DATA_CHANGED USING ER_DATA_CHANGED. ENDMETHOD. "HANDLE_DATA_CHANGED METHOD handle_toolbar. DATA: ls_toolbar TYPE stb_button. MOVE 'REFRESH' TO ls_toolbar-function. MOVE icon_refresh TO ls_toolbar-icon. MOVE '刷新' TO ls_toolbar-quickinfo. APPEND ls_toolbar TO e_object->mt_toolbar. CLEAR ls_toolbar. MOVE 'SELALL' TO ls_toolbar-function. MOVE icon_select_all TO ls_toolbar-icon. MOVE '全选' TO ls_toolbar-quickinfo. MOVE '全选' TO ls_toolbar-text. APPEND ls_toolbar TO e_object->mt_toolbar. CLEAR ls_toolbar. MOVE 'DELALL' TO ls_toolbar-function. MOVE icon_deselect_all TO ls_toolbar-icon. MOVE '取消全选' TO ls_toolbar-quickinfo. MOVE '取消全选' TO ls_toolbar-text. APPEND ls_toolbar TO e_object->mt_toolbar. CLEAR ls_toolbar. MOVE 'ZPOST' TO ls_toolbar-function. MOVE icon_okay TO ls_toolbar-icon. MOVE '上传' TO ls_toolbar-quickinfo. MOVE '上传' TO ls_toolbar-text. APPEND ls_toolbar TO e_object->mt_toolbar. CLEAR ls_toolbar. ENDMETHOD. METHOD handle_user_command. PERFORM frm_handle_user_command USING e_ucomm. ENDMETHOD. METHOD handle_double_click. PERFORM handle_double_click USING e_row e_column es_row_no. ENDMETHOD. *--搜索帮助 METHOD handle_onf4. * PERFORM FRM_HANDLE_ONF4 USING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA. ENDMETHOD . METHOD handle_hotspot_click. PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no. ENDMETHOD. ENDCLASS. "LCL_EVENT_HANDLER IMPLEMENTATION *&---------------------------------------------------------------------* * DEFINE SCREEN 选择屏幕 *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001 . SELECT-OPTIONS:s_bukrs FOR csks-bukrs MODIF ID m1, s_lifnr FOR lfa1-lifnr MODIF ID m1. SELECTION-SCREEN END OF BLOCK b1 . *&---------------------------------------------------------------------* * INITIALIZATION 初始化 INITIALIZATION. *AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hbkid-low. * PERFORM f4_s_hbkid. * *AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hbkid-high. * PERFORM f4_s_hbkid. * *AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hktid-low. * PERFORM f4_s_hktid. * *AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_hktid-high. * PERFORM f4_s_hktid. AT SELECTION-SCREEN OUTPUT. *&---------------------------------------------------------------------* * AT SELECTION-SCREEN *&------------------------------- --------------------------------------* AT SELECTION-SCREEN. "权限校验 PERFORM frm_authority_check. *&---------------------------------------------------------------------* * START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. "读取数据 PERFORM frm_get_data. "调用屏幕 IF sy-batch EQ 'X'. PERFORM frm_zpost_data."上传 ELSE. CALL SCREEN 9000. ENDIF. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form f4_s_hbkid *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM f4_s_hbkid . SELECT vfclmshlpacntid~hbkid, bnka~banka FROM vfclmshlpacntid LEFT JOIN bnka ON vfclmshlpacntid~bankl = bnka~bankl AND vfclmshlpacntid~banks = bnka~banks INTO TABLE @DATA(lt_hbkid). SORT lt_hbkid BY hbkid banka. DELETE ADJACENT DUPLICATES FROM lt_hbkid COMPARING hbkid banka. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'HBKID' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'S_HBKID' value_org = 'S' callback_program = sy-repid TABLES value_tab = lt_hbkid EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form f4_s_hktid *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM f4_s_hktid . SELECT vfclmshlpacntid~hktid FROM vfclmshlpacntid INTO TABLE @DATA(lt_hktid). SORT lt_hktid BY hktid. DELETE ADJACENT DUPLICATES FROM lt_hktid COMPARING hktid. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'HKTID' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'S_HKTID' value_org = 'S' callback_program = sy-repid TABLES value_tab = lt_hktid EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. * IMPLEMENT SUITABLE ERROR HANDLING HERE ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_authority_check *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_authority_check . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DISPLAY_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_display_alv . IF gv_alv IS INITIAL . "ALV对象如果为空,则生成对象,把ALV放入容器中 CREATE OBJECT gv_container EXPORTING repid = sy-repid dynnr = '9000' extension = 2050 side = cl_gui_docking_container=>property_floating. CREATE OBJECT gv_alv EXPORTING i_parent = gv_container. PERFORM frm_build_fieldcat. * PERFORM FRM_BUILD_SORT. "排序 PERFORM frm_exclude_tb_functions CHANGING gt_exclude. "去掉不用的菜单按钮 PERFORM frm_prepare_layout CHANGING gs_layout . "获取样式 PERFORM frm_eventload. "读取事件(总) *-----显示ALV------------------------------------------- CLEAR gs_variant. gs_variant = sy-repid. * CALL METHOD gv_alv->set_drop_down_table * EXPORTING * it_drop_down = gt_dropdowm. "添加下拉框方法到ALV中顯示 CALL METHOD gv_alv->set_table_for_first_display EXPORTING is_layout = gs_layout it_toolbar_excluding = gt_exclude is_variant = gs_variant i_save = 'A' CHANGING it_outtab = gt_alv it_fieldcatalog = gt_fieldcat it_sort = gt_sort EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. CALL METHOD gv_alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified. ELSE . *----------------------------刷新ALV---------------------- PERFORM frm_refurbish_alv. "刷新ALV ENDIF . ENDFORM. *&---------------------------------------------------------------------* *& FORM FRM_REFURBISH_ALV *&---------------------------------------------------------------------* *& TEXT *&---------------------------------------------------------------------* *& --> P1 TEXT *& <-- P2 TEXT *&---------------------------------------------------------------------* FORM frm_refurbish_alv. " 调整可更改的单元格 *----------------------------刷新ALV---------------------- gs_stable-row = 'X'. gs_stable-col = 'X'. CALL METHOD gv_alv->refresh_table_display EXPORTING is_stable = gs_stable EXCEPTIONS finished = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. CLEAR gs_stable. ENDFORM. FORM frm_build_fieldcat . DATA:lv_fieldname TYPE char20, lv_fieldvalue TYPE char20, lv_colindex TYPE char2. REFRESH: gt_fieldcat . PERFORM frm_get_fieldcat USING: 'ZSEL' '选择' '' '' '' '' 'X' 'X' '' . PERFORM frm_get_fieldcat USING: 'ZCHECK' '红绿灯' '' '' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'MESSAGE' '消息' '' '' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'BUKRS' '公司代码' 'ZTMM030' 'BUKRS' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'LIFNR' '供应商科目编号' 'ZTMM030' 'LIFNR' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'NAME' '供应商名称' 'LFA1' 'NAME1' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'UNW_REASON' '供应商等级' 'BP001' 'UNW_REASON' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'UNW_TEXT' '供应商等级描述' 'TP18T' 'UNW_TEXT' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'MINBW' '预付款总额度' 'ZTMM030' 'MINBW' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'ZHSLA' '已预付金额' 'ZTMM030' 'ZHSLA' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'ZHSLB' '应付暂估金额' 'ZTMM030' 'ZHSLB' '' '' '' '' '' . PERFORM frm_get_fieldcat USING: 'YFKYE' '预付款余额' 'ZTMM030' 'YFKYE' '' '' '' '' '' . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_EXCLUDE_TB_FUNCTIONS *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& <-- GT_EXCLUDE *&---------------------------------------------------------------------* FORM frm_exclude_tb_functions CHANGING p_gt_exclude TYPE ui_functions. CLEAR:gt_exclude. DATA ls_exclude TYPE ui_func. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_print . APPEND ls_exclude TO gt_exclude. ls_exclude = cl_gui_alv_grid=>mc_fc_refresh. APPEND ls_exclude TO gt_exclude. ENDFORM. *&---------------------------------------------------------------------* *& FORM PREPARE_LAYOUT_9001 *&---------------------------------------------------------------------* * 获取显示状态 *----------------------------------------------------------------------* * -->P_GDS_LAYOUT TEXT *----------------------------------------------------------------------* FORM frm_prepare_layout CHANGING p_gds_layout TYPE lvc_s_layo. CLEAR:gs_layout. p_gds_layout-cwidth_opt = 'X'. "最优化宽度 p_gds_layout-zebra = 'X'. "间隔颜色 p_gds_layout-sel_mode = 'A'. "选择模式 p_gds_layout-no_rowmark = 'X'. * P_GDS_LAYOUT-STYLEFNAME = 'CELTAB'. ENDFORM. " PREPARE_LAYOUT *&---------------------------------------------------------------------* *& Form FRM_EVENTLOAD *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_eventload . DATA lv_event_handler TYPE REF TO lcl_event_handler . "事件响应 CREATE OBJECT lv_event_handler. DATA:lt_f4 TYPE lvc_t_f4, ls_f4 TYPE lvc_s_f4. IF gv_alv IS NOT INITIAL. CALL METHOD gv_alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter. SET HANDLER lv_event_handler->handle_data_changed FOR gv_alv. SET HANDLER lv_event_handler->handle_data_changed_finished FOR gv_alv. SET HANDLER lv_event_handler->handle_double_click FOR gv_alv. SET HANDLER lv_event_handler->handle_toolbar FOR gv_alv. "注册工具栏 SET HANDLER lv_event_handler->handle_user_command FOR gv_alv. "注册用户自定义命令 SET HANDLER lv_event_handler->handle_onf4 FOR gv_alv. "F4 SET HANDLER lv_event_handler->handle_hotspot_click FOR gv_alv. "单击 DATA lv_event_handler1 TYPE REF TO lcl_event_handler . "事件响应 CREATE OBJECT lv_event_handler1. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_data_changed_finished *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> E_MODIFIED *& --> ET_GOOD_CELLS *&---------------------------------------------------------------------* FORM frm_data_changed_finished USING e_modified et_good_cells TYPE lvc_t_modi. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_HANDLE_USER_COMMAND *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> E_UCOMM *&---------------------------------------------------------------------* FORM frm_handle_user_command USING p_e_ucomm. DATA: lr_grid TYPE REF TO cl_gui_alv_grid, rs_selfield TYPE slis_selfield. CASE p_e_ucomm. WHEN 'SELALL'. CLEAR:filt_table. CALL METHOD gv_alv->get_filtered_entries IMPORTING et_filtered_entries = filt_table. "被过滤的内表数据行 LOOP AT gt_alv ASSIGNING <fs_alv>. READ TABLE filt_table TRANSPORTING NO FIELDS WITH KEY table_line = sy-tabix. IF sy-subrc <> 0. <fs_alv>-zsel = 'X'. ENDIF. ENDLOOP. WHEN 'DELALL'. CLEAR:filt_table. CALL METHOD gv_alv->get_filtered_entries IMPORTING et_filtered_entries = filt_table. "被过滤的内表数据行 LOOP AT gt_alv ASSIGNING <fs_alv>. READ TABLE filt_table TRANSPORTING NO FIELDS WITH KEY table_line = sy-tabix. IF sy-subrc <> 0. <fs_alv>-zsel = ''. ENDIF. ENDLOOP. WHEN 'REFRESH'."刷新 PERFORM frm_get_data. WHEN 'ZPOST'. PERFORM frm_zpost_data."上传 WHEN OTHERS. ENDCASE. PERFORM frm_refurbish_alv. ENDFORM. *&---------------------------------------------------------------------* *& Form handle_double_click *&---------------------------------------------------------------------* *& text双击 *&---------------------------------------------------------------------* *& --> E_ROW *& --> E_COLUMN *&---------------------------------------------------------------------* FORM handle_double_click USING e_rowtype TYPE lvc_s_row e_column TYPE lvc_s_col e_row_no TYPE lvc_s_roid. ENDFORM. *&---------------------------------------------------------------------* *& Form handle_hotspot_click *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> E_ROW_ID *& --> E_COLUMN_ID *& --> ES_ROW_NO *&---------------------------------------------------------------------* FORM handle_hotspot_click USING e_row_id TYPE lvc_s_row e_column_id TYPE lvc_s_col es_row_no TYPE lvc_s_roid. ENDFORM. *&---------------------------------------------------------------------* *& Module STATUS_9000 OUTPUT *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* MODULE status_9000 OUTPUT. SET PF-STATUS 'S001'. SET TITLEBAR 'T001'. ENDMODULE. *&---------------------------------------------------------------------* *& Module DISPLAY_ALV OUTPUT *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* MODULE display_alv OUTPUT. PERFORM frm_display_alv. ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_9000 INPUT. CLEAR gv_ok_code. gv_ok_code = sy-ucomm. CASE gv_ok_code. WHEN '&F03' OR '&F15' OR '&F12'. LEAVE TO SCREEN 0. WHEN OTHERS. ENDCASE. CLEAR:gv_ok_code. ENDMODULE. *&---------------------------------------------------------------------* *& Form frm_get_data *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_get_data . SELECT DISTINCT a~bukrs, a~lifnr, d~name1 AS name, a~zgrup AS unw_reason, c~unw_text , a~webtr AS minbw FROM lfb1 AS a INNER JOIN lfa1 AS d ON a~lifnr = d~lifnr INNER JOIN bp001 AS b ON a~lifnr = b~partner LEFT JOIN tp18t AS c ON A~zgrup = c~unw_reason AND c~langu EQ 1 WHERE a~bukrs IN @s_bukrs AND a~lifnr IN @s_lifnr INTO CORRESPONDING FIELDS OF TABLE @gt_alv. *已预付金额 WITH +data AS ( SELECT DISTINCT bukrs,lifnr FROM @gt_alv AS zdata ) SELECT a~bukrs, a~lifnr, SUM( b~hsl ) AS hsl FROM +data AS a INNER JOIN acdoca AS b ON b~rbukrs = a~bukrs AND b~lifnr = a~lifnr WHERE b~drcrk EQ 'S' AND b~racct EQ '1123020101' GROUP BY a~bukrs, a~lifnr INTO TABLE @DATA(lt_acdoca_a) . *应付暂估金额 IF sy-mandt EQ '110'. WITH +data AS ( SELECT DISTINCT bukrs,lifnr FROM @gt_alv AS zdata ) SELECT a~bukrs, a~lifnr, SUM( b~hsl ) AS hsl FROM +data AS a INNER JOIN acdoca AS b ON b~rbukrs = a~bukrs AND b~lifnr = a~lifnr WHERE b~blart EQ 'WE' AND b~racct EQ '2202030101' GROUP BY a~bukrs, a~lifnr INTO TABLE @DATA(lt_acdoca_b) . ELSE. WITH +data AS ( SELECT DISTINCT bukrs,lifnr FROM @gt_alv AS zdata ) SELECT a~bukrs, a~lifnr, SUM( b~hsl ) AS hsl FROM +data AS a INNER JOIN acdoca AS b ON b~rbukrs = a~bukrs AND b~lifnr = a~lifnr WHERE b~blart EQ 'WE' AND b~racct EQ '1123020101' GROUP BY a~bukrs, a~lifnr INTO TABLE @lt_acdoca_b. ENDIF. * zhsla TYPE ztmm030-zhsla, "已预付金额 * zhslb TYPE ztmm030-zhslb, "应付暂估金额 * yfkye TYPE ztmm030-yfkye, "预付款余额 LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs>). READ TABLE lt_acdoca_a INTO DATA(ls_acdoca_a) WITH KEY bukrs = <fs>-bukrs lifnr = <fs>-lifnr. IF sy-subrc EQ 0. <fs>-zhsla = ls_acdoca_a-hsl. ENDIF. READ TABLE lt_acdoca_b INTO DATA(ls_acdoca_b) WITH KEY bukrs = <fs>-bukrs lifnr = <fs>-lifnr. IF sy-subrc EQ 0. <fs>-zhslb = ls_acdoca_b-hsl * ( 113 / 100 ). ENDIF. <fs>-yfkye = <fs>-minbw - <fs>-zhsla - <fs>-zhslb. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ZPOST_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_zpost_data . IF sy-batch = 'X'."后台 全量 LOOP AT gt_alv ASSIGNING <fs_alv>. <fs_alv>-zsel = 'X'. ENDLOOP. ENDIF. * READ TABLE gt_alv ASSIGNING <fs_alv> WITH KEY zsel = 'X'. IF sy-subrc <> 0. MESSAGE '请选择数据' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. "判断是I , U , D "查询底表 SELECT * FROM ztmm030 INTO TABLE @DATA(lt_log). LOOP AT gt_alv ASSIGNING <fs_alv> WHERE zsel = 'X'. READ TABLE lt_log INTO DATA(ls_log) WITH KEY lifnr = <fs_alv>-lifnr bukrs = <fs_alv>-bukrs . IF sy-subrc = 0. <fs_alv>-opertype = 'U'. ELSE. <fs_alv>-opertype = 'I'. ENDIF. ENDLOOP. * 日志表 DATA:lt_ztmm030 TYPE TABLE OF ztmm030, ls_ztmm030 TYPE ztmm030. DATA:BEGIN OF ls_name , abap TYPE abap_compname, json TYPE string, END OF ls_name , lt_name LIKE HASHED TABLE OF ls_name WITH UNIQUE KEY abap. lt_name[] = VALUE #( ( abap = 'OPERTYPE' json = 'opertype' ) ( abap = 'NAME' json = 'name' ) ( abap = 'BUKRS' json = 'BUKRS' ) ( abap = 'LIFNR' json = 'LIFNR' ) ( abap = 'ZGRUP' json = 'ZGRUP' ) ( abap = 'WEBTR' json = 'WEBTR' ) ( abap = 'HSL' json = 'HSL' ) ( abap = 'YFKYE' json = 'YFKYE' ) ). DATA:BEGIN OF ls_data, opertype TYPE char1, bukrs TYPE ztmm030-bukrs, "公司代码 name TYPE lfa1-name1, "//客商名称 lifnr TYPE ztmm030-lifnr, "供应商科目编号 zgrup TYPE tp18t-unw_text, " 供应商等级 unw_text webtr TYPE lfa1-name1, " //预付款总额度 minbw hsl TYPE lfa1-name1, " //已预付金额 zhsla yfkye TYPE lfa1-name1, " //预付款余额 yfkye END OF ls_data. DATA:BEGIN OF ls_out, data LIKE TABLE OF ls_data, END OF ls_out. TYPES:BEGIN OF ty_code, code TYPE string, message TYPE string, END OF ty_code. DATA:BEGIN OF ls_ret, code TYPE char1, data TYPE ty_code, message TYPE bapi_msg, END OF ls_ret. DATA: lv_url TYPE string, lt_fields TYPE tihttpnvp, lv_send TYPE string, lv_type TYPE bapi_mtype, lv_message TYPE string, lv_response TYPE string. CONSTANTS service_name TYPE string VALUE 'syncCreditResource/syncCredit'. SELECT SINGLE * FROM ztif_url WHERE system_id = 'OA' AND active_flg IS NOT INITIAL INTO @DATA(ls_url). IF sy-subrc <> 0. MESSAGE '请维护外围系统URL配置表' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. CHECK ls_url-url IS NOT INITIAL. "创建客户端请求 lv_url = |{ ls_url-url }{ service_name }|. lt_fields = VALUE #( ( name = 'Content-Type' value = 'application/json' ) ). CLEAR:gs_alv,lv_send,lv_type,lv_message,lv_response,ls_ret,ls_out. LOOP AT gt_alv INTO gs_alv WHERE zsel = 'X'. CLEAR:ls_data. MOVE-CORRESPONDING gs_alv TO ls_data. ls_data-lifnr = |{ ls_data-lifnr ALPHA = OUT }|. ls_data-zgrup = gs_alv-unw_reason."供应商等级 unw_text ls_data-webtr = gs_alv-minbw." //预付款总额度 minbw CONDENSE ls_data-webtr. ls_data-hsl = gs_alv-zhsla. " //已预付金额 zhsla CONDENSE ls_data-hsl. ls_data-yfkye = gs_alv-yfkye. " //预付款余额 yfkye CONDENSE ls_data-yfkye. APPEND ls_data TO ls_out-data. ENDLOOP. /ui2/cl_json=>serialize( EXPORTING data = ls_out pretty_name = 'X' numc_as_string = 'X' name_mappings = lt_name RECEIVING r_json = lv_send ). "传入数据 BREAK itl_abap04. CALL FUNCTION 'ZFM_RESTFUL_SEND' EXPORTING iv_url = lv_url it_fields = lt_fields iv_send_data = lv_send IMPORTING ev_type = lv_type ev_message = lv_message ev_response_data = lv_response. "反序列json解析 /ui2/cl_json=>deserialize( EXPORTING json = lv_response CHANGING data = ls_ret ). IF ls_ret-data-code EQ '1'. gs_alv-message = '推送失败' && ls_ret-data-message. MODIFY gt_alv FROM VALUE #( zcheck = icon_led_red message = gs_alv-message ) TRANSPORTING zcheck message WHERE zsel EQ 'X'. ELSE. MODIFY gt_alv FROM VALUE #( zcheck = icon_led_green message = '推送成功' ) TRANSPORTING zcheck message WHERE zsel EQ 'X'. LOOP AT gt_alv INTO gs_alv WHERE zsel = 'X'. CLEAR ls_ztmm030. MOVE-CORRESPONDING gs_alv TO ls_ztmm030. APPEND ls_ztmm030 TO lt_ztmm030. ENDLOOP. IF lt_ztmm030[] IS NOT INITIAL. MODIFY ztmm030 FROM TABLE lt_ztmm030[]. COMMIT WORK AND WAIT. ENDIF. ENDIF. ENDFORM. FORM frm_get_fieldcat USING p1 p2 p3 p4 p5 p6 p7 p8 p9. CLEAR: gs_fieldcat. gs_fieldcat-fieldname = p1. gs_fieldcat-coltext = p2. gs_fieldcat-scrtext_l = p2. gs_fieldcat-scrtext_m = p2. gs_fieldcat-scrtext_s = p2. gs_fieldcat-ref_table = p3. gs_fieldcat-ref_field = p4. gs_fieldcat-emphasize = p5. gs_fieldcat-fix_column = p6. gs_fieldcat-edit = p7. gs_fieldcat-checkbox = p8. gs_fieldcat-hotspot = p9. APPEND gs_fieldcat TO gt_fieldcat. ENDFORM.
FUNCTION zfm_restful_send. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IV_URL) TYPE STRING *" VALUE(IV_METHOD) TYPE STRING DEFAULT 'POST' *" VALUE(IV_USERNAME) TYPE STRING OPTIONAL *" VALUE(IV_PASSWORD) TYPE STRING OPTIONAL *" VALUE(IT_FIELDS) TYPE TIHTTPNVP OPTIONAL *" VALUE(IV_SEND_DATA) TYPE STRING OPTIONAL *" EXPORTING *" VALUE(EV_TYPE) TYPE BAPI_MTYPE *" VALUE(EV_MESSAGE) TYPE STRING *" VALUE(EV_RESPONSE_DATA) TYPE STRING *"---------------------------------------------------------------------- " 接口日志写入 /afl/log_init. TYPES: BEGIN OF ty_response, code TYPE char1, message TYPE string, END OF ty_response. DATA: ls_response TYPE ty_response. DATA:lo_http_client TYPE REF TO if_http_client, lv_code TYPE i. DATA:lv_proxy_host TYPE string. DATA:lv_proxy_service TYPE string. DATA: lv_ssl_id TYPE ssfapplssl . IF sy-host = 'vhhsgps4ci'. lv_proxy_host = 'proxy'. lv_proxy_service = '3128'. ENDIF. *创建客户端请求 CALL METHOD cl_http_client=>create_by_url EXPORTING url = iv_url proxy_host = lv_proxy_host proxy_service = lv_proxy_service ssl_id = lv_ssl_id IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 pse_not_found = 4 pse_not_distrib = 5 pse_errors = 6 oa2c_set_token_error = 7 oa2c_missing_authorization = 8 oa2c_invalid_config = 9 oa2c_invalid_parameters = 10 oa2c_invalid_scope = 11 oa2c_invalid_grant = 12 OTHERS = 13. IF sy-subrc <> 0. ev_type = 'E'. lo_http_client->get_last_error( IMPORTING message = ev_message ). ev_message = '创建代理失败!' && ev_message. RETURN. ENDIF. *不显示登录界面 lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled. *设置账号+密码 IF iv_username IS NOT INITIAL AND iv_password IS NOT INITIAL. lo_http_client->authenticate( EXPORTING username = iv_username password = iv_password ). ENDIF. *设定调用服务 lo_http_client->request->set_method( EXPORTING method = iv_method ). *设置Headers lo_http_client->request->set_header_fields( EXPORTING fields = it_fields[] ). *设置报文数据 IF iv_send_data IS NOT INITIAL. CALL METHOD lo_http_client->request->set_cdata EXPORTING data = iv_send_data offset = 0 length = strlen( iv_send_data ). ENDIF. *发送请求 CALL METHOD lo_http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2. IF sy-subrc <> 0. ev_type = 'E'. lo_http_client->get_last_error( IMPORTING message = ev_message ). ev_message = '发送请求失败!' && ev_message. RETURN. ENDIF. *读取远程服务返回的处理过结果 CALL METHOD lo_http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3. IF sy-subrc <> 0 . ev_type = 'E'. lo_http_client->get_last_error( IMPORTING message = ev_message ). ev_message = '获取返回消息失败!' && ev_message. RETURN. ELSE. CALL METHOD lo_http_client->response->get_status IMPORTING code = lv_code reason = ev_message. IF lv_code BETWEEN '200' AND '299'. ev_type = 'S'. ev_message = '调用接口成功!'. ELSE. ev_type = 'E'. ev_message = '返回码提示失败!' && ev_message. ENDIF. *读取返回内容 ev_response_data = lo_http_client->response->get_cdata( ). IF ev_response_data IS NOT INITIAL. * REPLACE ALL OCCURRENCES OF '#' IN ev_response_data WITH space. * CONDENSE ev_response_data NO-GAPS. /ui2/cl_json=>deserialize( EXPORTING json = ev_response_data CHANGING data = ls_response ). IF ls_response-code = 1 AND ls_response-message IS NOT INITIAL. ev_type = 'E'. ev_message = ls_response-message && ev_message. ENDIF. ENDIF. ENDIF. " 保存日志 /afl/save. ENDFUNCTION.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示