





取消后

*&---------------------------------------------------------------------*
*& Report ZRPT_MM_PURCHAS_APPROVE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrpt_mm_purchas_approve.
TABLES: sscrfields,ekko.
DATA: it_bapiret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA:l_filename TYPE string,l_muban TYPE string.
DATA:gv_fullpath TYPE string,gv_path TYPE string,gv_name TYPE string.
TYPES:BEGIN OF i_itab,
ebeln TYPE ekko-ebeln,
rel_ind TYPE frgke,
rel_status TYPE frgzu,
ztype TYPE c,
zmsg(80) ,
END OF i_itab.
DATA:itab_load TYPE TABLE OF i_itab.
DATA: return(01),
message(100),
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_layout TYPE lvc_s_layo.
*&---------------------------------------------------------------------*
*& 选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK fu WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file LIKE rlgrap-filename MEMORY ID zy1 .
PARAMETERS:pline TYPE i.
SELECTION-SCREEN END OF BLOCK fu.
SELECTION-SCREEN:FUNCTION KEY 1.
INITIALIZATION.
DATA:
lv_repid TYPE sy-repid.
"下载按钮
lv_repid = sy-repid.
sscrfields-functxt_01 = icon_export && '模版下载'.
*&---------------------------------------------------------------------*
*& At Selection-Screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
l_filename = 'ZMM040.xlsx'.
l_muban = 'ZMM040'.
CASE sscrfields-ucomm.
WHEN 'FC01'.
PERFORM download_data(zabap_common_program) USING l_filename l_muban gv_fullpath gv_path gv_name.
ENDCASE.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name = p_file.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
IF p_file IS INITIAL OR p_file = space.
MESSAGE s055(00) DISPLAY LIKE 'E'.
RETURN.
ENDIF.
PERFORM frm_get_data.
PERFORM frm_getstatue.
PERFORM frm_display_alv.
FORM frm_getstatue.
FIELD-SYMBOLS:<fs> TYPE i_itab.
DATA: pohead TYPE bapiekkol.
LOOP AT itab_load ASSIGNING <fs>.
CALL FUNCTION 'BAPI_PO_GETDETAIL'
EXPORTING
purchaseorder = <fs>-ebeln
IMPORTING
po_header = pohead.
<fs>-rel_ind = pohead-rel_ind.
<fs>-rel_status = pohead-rel_status.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
DATA:lt_raw TYPE truxs_t_text_data.
DATA:lt_excel TYPE TABLE OF zalsmex_tabline_line,
ls_excel TYPE zalsmex_tabline_line,
l_type TYPE c LENGTH 2.
DATA: lo_data TYPE REF TO data.
FIELD-SYMBOLS: <fs_data>,
<fs_value>.
CREATE DATA lo_data LIKE LINE OF itab_load.
ASSIGN lo_data->* TO <fs_data>.
* 读取Excel文件数据到内表
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 12
i_end_row = pline
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE '导入数据文件失败!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
SORT lt_excel BY row col.
IF NOT lt_excel IS INITIAL.
LOOP AT lt_excel INTO ls_excel. "检查内表中的数据
AT NEW row.
CLEAR <fs_data>.
ENDAT.
ASSIGN COMPONENT ls_excel-col OF STRUCTURE <fs_data> TO <fs_value>.
DESCRIBE FIELD <fs_value> TYPE l_type .
CASE l_type.
WHEN 'D'.
"检查是否为日期
CALL FUNCTION 'RP_01C_FORMAL_DATE_CHECK'
EXPORTING
i13_datum = ls_excel-value
EXCEPTIONS
no_date_input = 1
date_not_numeric = 2
invald_date = 3
OTHERS = 4.
IF sy-subrc <> 0.
ls_excel-row = ls_excel-row + 1.
MESSAGE ID 'ZGD' TYPE 'E' NUMBER '000' WITH ls_excel-row ls_excel-col ls_excel-value l_type .
ENDIF.
WHEN 'P'.
"检查数字型
IF ls_excel-value CO '0123456789,. '.
REPLACE ALL OCCURRENCES OF ',' IN ls_excel-value WITH ''.
CONDENSE ls_excel-value.
ELSE.
ls_excel-row = ls_excel-row + 1.
MESSAGE ID 'ZGD' TYPE 'E' NUMBER '000' WITH ls_excel-row ls_excel-col ls_excel-value l_type .
ENDIF.
WHEN 'C'.
ENDCASE.
<fs_value> = ls_excel-value.
AT END OF row.
APPEND <fs_data> TO itab_load.
ENDAT.
ENDLOOP.
ELSE .
MESSAGE 'EXCEL数据为空!' TYPE 'E' .
ENDIF.
ENDFORM. " frm_get_data
*&---------------------------------------------------------------------*
*& Form frm_display_log
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_display_alv .
PERFORM build_fieldcat USING 'EBELN' '' '' 'EKKO' 'EBELN' '' '' '采购订单' 'X'.
PERFORM build_fieldcat USING 'REL_IND' '' '' '' '' '' '' '批准标识:采购凭证' ''.
PERFORM build_fieldcat USING 'REL_STATUS' '' '' '' '' '' '' '发布状态' ''.
PERFORM build_fieldcat USING 'ZTYPE' '' '' '' '' '' '' '状态' ''.
PERFORM build_fieldcat USING 'ZMSG' '' '' '' '' '' '' '信息' ''.
gs_layout-cwidth_opt = 'X'.
gs_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
" I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV'
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'SET_PF_STATUS'
it_fieldcat_lvc = gt_fieldcat
is_layout_lvc = gs_layout
i_default = 'X'
i_save = 'A'
TABLES
t_outtab = itab_load[]
EXCEPTIONS
OTHERS = 1.
ENDFORM. " frm_display_log
*&--------------------------------------------------------------------- *
*& Form g_status_form 调用自定义屏幕
*&---------------------------------------------------------------------
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
ENDFORM. "SET_PF_STATUS
FORM user_command USING rf_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
FIELD-SYMBOLS:<fs> TYPE i_itab.
CASE rf_ucomm.
WHEN '&LCK'. "审批
LOOP AT itab_load ASSIGNING <fs>.
CALL FUNCTION 'BAPI_PO_RELEASE'
EXPORTING
purchaseorder = <fs>-ebeln
po_rel_code = '01'
TABLES
return = it_bapiret2.
LOOP AT it_bapiret2 INTO DATA(ls_return_release) WHERE type = 'E' OR type = 'A'.
DATA(pv_release) = 'E'.
<fs>-ztype = 'E'.
<fs>-zmsg = <fs>-zmsg && ls_return_release-message.
ENDLOOP.
IF <fs>-ztype <> 'E'.
<fs>-ztype = 'S'.
<fs>-zmsg = '审批成功'.
ENDIF.
IF pv_release EQ 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDLOOP.
WHEN '&UNL'."取消审批
LOOP AT itab_load ASSIGNING <fs>.
CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
EXPORTING
purchaseorder = <fs>-ebeln
po_rel_code = '01'
TABLES
return = it_bapiret2.
LOOP AT it_bapiret2 INTO DATA(ls1_return_release) WHERE type = 'E' OR type = 'A'.
DATA(pv1_release) = 'E'.
<fs>-ztype = 'E'.
<fs>-zmsg = <fs>-zmsg && ls1_return_release-message.
ENDLOOP.
IF <fs>-ztype <> 'E'.
<fs>-ztype = 'S'.
<fs>-zmsg = '取消审批成功'.
ENDIF.
IF pv_release EQ 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDLOOP.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM build_fieldcat USING p_fieldname TYPE fieldname
p_qfieldname TYPE lvc_qfname
p_cfieldname TYPE lvc_cfname
p_ref_table TYPE lvc_rtname
p_ref_field TYPE lvc_rfname
p_convexit TYPE convexit
p_emphasize TYPE lvc_emphsz
p_scrtext_l TYPE scrtext_l
p_no_zero TYPE xflag.
gs_fieldcat-fieldname = p_fieldname.
gs_fieldcat-qfieldname = p_qfieldname.
gs_fieldcat-cfieldname = p_cfieldname.
gs_fieldcat-ref_table = p_ref_table.
gs_fieldcat-ref_field = p_ref_field.
gs_fieldcat-convexit = p_convexit.
gs_fieldcat-emphasize = p_emphasize.
gs_fieldcat-scrtext_l = p_scrtext_l.
gs_fieldcat-no_zero = p_no_zero.
gs_fieldcat-colddictxt = 'L'.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
ENDFORM. "BUILD_FIELDCAT