*&---------------------------------------------------------------------*
*& Report ZRPMM_0011
*&
*&---------------------------------------------------------------------*
*&Author:XXXXXX
*&Create date:2015.12.11
*&Desc.:批量反审核及关闭采购申请单
*&---------------------------------------------------------------------*
REPORT zrpmm_0011.
TABLES:eban.
DATA:BEGIN OF gt_out OCCURS 0,
banfn LIKE eban-banfn,
bnfpo LIKE eban-bnfpo,
bsart LIKE eban-bsart,
loekz LIKE eban-loekz,
ekgrp LIKE eban-ekgrp,
erdat LIKE eban-erdat,
txz01 LIKE eban-txz01,
matnr LIKE eban-matnr,
werks LIKE eban-werks,
lgort LIKE eban-lgort,
matkl LIKE eban-matkl,
menge LIKE eban-menge,
meins LIKE eban-meins,
flief LIKE eban-flief,
preis LIKE eban-preis,
peinh LIKE eban-peinh,
eknam LIKE t024-eknam, "采购组描述
wgbez LIKE t023t-wgbez,"物料组描述
frgst LIKE eban-frgst,
zmeng LIKE eban-menge, "未清数量
zstat(30) TYPE c,
msgty TYPE c,
zmsg(200) TYPE c,
check TYPE c,
END OF gt_out.
DATA:gt_t024 LIKE t024 OCCURS 0 WITH HEADER LINE,
gt_t023t LIKE t023t OCCURS 0 WITH HEADER LINE.
***alv data define
DATA:gs_layout TYPE slis_layout_alv,
gt_fcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DEFINE mcr_build_fieldcat.
gt_fcat-fieldname = &1.
gt_fcat-seltext_l = &2.
gt_fcat-seltext_m = &2.
gt_fcat-seltext_s = &2.
gt_fcat-ddictxt = 'L'.
gt_fcat-inttype = &3.
gt_fcat-intlen = &4.
gt_fcat-outputlen = &5.
APPEND gt_fcat.
CLEAR gt_fcat.
END-OF-DEFINITION.
CONSTANTS:c_pf_status TYPE slis_formname VALUE 'FRM_SET_PF_STATUS',
c_user_command TYPE slis_formname VALUE 'FRM_USER_COMMAND'.
***selection screen define
SELECTION-SCREEN BEGIN OF BLOCK blc WITH FRAME TITLE text-001.
SELECT-OPTIONS:s_banfn FOR eban-banfn,
s_bsart FOR eban-bsart,
s_ekgrp FOR eban-ekgrp,
s_matkl FOR eban-matkl,
s_erdat FOR eban-erdat,
s_matnr FOR eban-matnr,
s_werks FOR eban-werks,
s_flief FOR eban-flief.
SELECTION-SCREEN END OF BLOCK blc.
SELECTION-SCREEN BEGIN OF BLOCK blc1 WITH FRAME TITLE text-002.
PARAMETERS:r1 RADIOBUTTON GROUP ra DEFAULT 'X',
r2 RADIOBUTTON GROUP ra.
SELECTION-SCREEN END OF BLOCK blc1.
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_get_fieldcat.
PERFORM frm_output_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
DATA:lv_index LIKE sy-tabix.
DATA:BEGIN OF lt_ekpo OCCURS 0,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
menge LIKE ekpo-menge,
banfn LIKE ekpo-banfn,
bnfpo LIKE ekpo-bnfpo,
END OF lt_ekpo.
DATA:lv_menge TYPE p DECIMALS 3.
IF r1 = 'X'.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_out
FROM eban
WHERE banfn IN s_banfn
AND bsart IN s_bsart
AND ekgrp IN s_ekgrp
AND matkl IN s_matkl
AND erdat IN s_erdat
AND matnr IN s_matnr
AND werks IN s_werks
AND flief IN s_flief
AND frgkz = 'R'
AND loekz EQ space
AND statu NE 'B'.
ELSE.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_out
FROM eban
WHERE banfn IN s_banfn
AND bsart IN s_bsart
AND ekgrp IN s_ekgrp
AND matkl IN s_matkl
AND erdat IN s_erdat
AND matnr IN s_matnr
AND werks IN s_werks
AND flief IN s_flief
AND frgkz NE 'R'
AND ebakz = space
AND loekz EQ space
AND statu NE 'B'.
ENDIF.
IF gt_out[] IS NOT INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_t024 FROM t024.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_t023t FROM t023t WHERE spras = sy-langu.
* SELECT ebeln
* ebelp
* menge
* banfn
* bnfpo
* INTO CORRESPONDING FIELDS OF TABLE lt_ekpo
* FROM ekpo
* FOR ALL ENTRIES IN gt_out
* WHERE banfn = gt_out-banfn
* AND bnfpo = gt_out-bnfpo
* AND loekz EQ space.
ENDIF.
SORT gt_t024 BY ekgrp.
SORT gt_t023t BY matkl.
LOOP AT gt_out.
lv_index = sy-tabix.
* CLEAR:lv_menge.
* LOOP AT lt_ekpo WHERE banfn = gt_out-banfn AND bnfpo = gt_out-bnfpo.
* lv_menge = lv_menge + lt_ekpo-menge.
* ENDLOOP.
*
* IF lv_menge >= gt_out-menge.
* DELETE gt_out INDEX lv_index.
* CONTINUE.
* ELSE.
* gt_out-zmeng = gt_out-menge - lv_menge.
* ENDIF.
READ TABLE gt_t024 WITH KEY ekgrp = gt_out-ekgrp BINARY SEARCH.
IF sy-subrc = 0.
gt_out-eknam = gt_t024-eknam.
ENDIF.
READ TABLE gt_t023t WITH KEY matkl = gt_out-matkl BINARY SEARCH.
IF sy-subrc = 0.
gt_out-wgbez = gt_t023t-wgbez.
ENDIF.
gt_out-zstat = icon_light_out.
MODIFY gt_out INDEX lv_index.
ENDLOOP.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_GET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_fieldcat .
mcr_build_fieldcat:'CHECK' '选择' 'C' '1' '4',
'ZSTAT' '状态' 'C' '30' '4',
'ZMSG' '消息' 'C' '200' '15',
'BANFN' '采购申请号' 'C' '10' '8',
'BNFPO' '项次' 'N' '5' '5',
'BSART' '订单类型' 'C' '4' '4',
'EKGRP' '采购组' 'C' '3' '6',
'EKNAM' '采购组名称' 'C' '18' '10',
'ERDAT' '创建日期' 'D' '10' '8',
'MATNR' '物料号码' 'C' '18' '10',
'TXZ01' '物料描述' 'C' '40' '20',
'WERKS' '工厂' 'C' '4' '4',
'LGORT' '库位' 'C' '4' '4',
'MATKL' '物料组' 'C' '9' '6',
'WGBEZ' '物料组描述' 'C' '20' '10',
'MENGE' '数量' 'P' '15' '8',
'MEINS' '单位' 'C' '3' '3',
'FLIEF' '固定供应商' 'C' '10' '8',
'PREIS' '评估价格' 'P' '15' '8',
'PEINH' '价格单位' 'I' '5' '5'.
LOOP AT gt_fcat.
IF gt_fcat-fieldname = 'CHECK'.
gt_fcat-checkbox = 'X'.
gt_fcat-edit = 'X'.
gt_fcat-input = 'X'.
ENDIF.
IF gt_fcat-fieldname = 'MENGE'.
gt_fcat-qfieldname = 'MEINS'.
ENDIF.
IF gt_fcat-fieldname = 'MEINS'.
gt_fcat-ref_fieldname = 'MEINS'.
gt_fcat-ref_tabname = 'MARA'.
ENDIF.
IF gt_fcat-fieldname = 'BANFN' OR gt_fcat-fieldname = 'MATNR'.
gt_fcat-no_zero = 'X'.
ENDIF.
IF gt_fcat-fieldname = 'BANFN'.
gt_fcat-hotspot = 'X'.
ENDIF.
IF r2 = 'X' AND ( gt_fcat-fieldname = 'PREIS' OR gt_fcat-fieldname = 'PEINH' ).
gt_fcat-edit = 'X'.
ENDIF.
MODIFY gt_fcat INDEX sy-tabix.
ENDLOOP.
ENDFORM. " FRM_GET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_output_data .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
i_callback_pf_status_set = c_pf_status
i_callback_user_command = c_user_command
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT =
it_fieldcat = gt_fcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
i_default = 'X'
i_save = 'A'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_out[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_pf_status USING rt_extab TYPE slis_t_extab.
IF r1 = 'X'.
SET PF-STATUS 'S0100' EXCLUDING 'ZCLOSE'.
ELSE.
SET PF-STATUS 'S0100' EXCLUDING 'ZCANCELREL'.
ENDIF.
ENDFORM. " FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield..
DATA:lv_grid TYPE REF TO cl_gui_alv_grid.
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X'.
rs_selfield-row_stable = 'X'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lv_grid.
CALL METHOD lv_grid->check_changed_data( ).
CASE r_ucomm.
WHEN 'ZALL'.
PERFORM frm_select_data USING 'X'.
WHEN 'ZDALL'.
PERFORM frm_select_data USING space.
WHEN 'ZCANCELREL'.
PERFORM frm_cancel_release_pr.
WHEN 'ZCLOSE'.
PERFORM frm_change_pr.
WHEN '&IC1'.
PERFORM frm_click_data USING rs_selfield.
WHEN OTHERS.
ENDCASE.
ENDFORM. " FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0739 text
*----------------------------------------------------------------------*
FORM frm_select_data USING u_flag TYPE c.
LOOP AT gt_out WHERE check NE u_flag.
gt_out-check = u_flag.
MODIFY gt_out INDEX sy-tabix TRANSPORTING check.
ENDLOOP.
ENDFORM. " FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_CANCEL_RELEASE_PR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_cancel_release_pr .
DATA:lt_return LIKE bapireturn OCCURS 0 WITH HEADER LINE.
DATA:lv_index LIKE sy-tabix.
READ TABLE gt_out WITH KEY check = 'X'.
IF sy-subrc <> 0.
MESSAGE '请至少选择一行数据' TYPE 'I'.
EXIT.
ENDIF.
LOOP AT gt_out WHERE check = 'X' AND msgty NE 'S'.
lv_index = sy-tabix.
REFRESH lt_return.
CALL FUNCTION 'BAPI_REQUISITION_RESET_RELEASE'
EXPORTING
number = gt_out-banfn
item = gt_out-bnfpo
rel_code = gt_out-frgst
* USE_EXCEPTIONS = 'X'
* NO_COMMIT_WORK = ' '
TABLES
return = lt_return
EXCEPTIONS
authority_check_fail = 1
requisition_not_found = 2
enqueue_fail = 3
prerequisite_fail = 4
release_already_posted = 5
responsibility_fail = 6
no_release_already = 7
no_new_release_indicator = 8
OTHERS = 9.
LOOP AT lt_return WHERE type = 'E' OR type = 'A'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
gt_out-msgty = 'E'.
gt_out-zstat = icon_red_light.
gt_out-zmsg = lt_return-message.
ELSE.
gt_out-msgty = 'S'.
gt_out-zstat = icon_green_light.
gt_out-zmsg = '撤销审批成功'.
ENDIF.
MODIFY gt_out INDEX lv_index.
ENDLOOP.
ENDFORM. " FRM_CANCEL_RELEASE_PR
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_PR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_change_pr .
DATA:lv_index LIKE sy-tabix.
DATA:lt_out LIKE gt_out OCCURS 0 WITH HEADER LINE.
DATA:lt_pritem LIKE bapimereqitemimp OCCURS 0 WITH HEADER LINE,
lt_pritemx LIKE bapimereqitemx OCCURS 0 WITH HEADER LINE,
lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS:<fs_data> LIKE LINE OF gt_out.
READ TABLE gt_out WITH KEY check = 'X'.
IF sy-subrc <> 0.
MESSAGE '请至少选择一行数据' TYPE 'I'.
EXIT.
ENDIF.
APPEND LINES OF gt_out TO lt_out.
DELETE lt_out WHERE check EQ space OR msgty EQ 'S'.
SORT lt_out BY banfn bnfpo.
LOOP AT lt_out ASSIGNING <fs_data>.
AT NEW banfn.
REFRESH:lt_return,lt_pritem,lt_pritemx.
CLEAR:lt_return,lt_pritem,lt_pritemx.
ENDAT.
lt_pritem-preq_item = <fs_data>-bnfpo.
lt_pritem-closed = 'X'.
IF r2 = 'X'.
lt_pritem-preq_price = <fs_data>-preis.
lt_pritem-price_unit = <fs_data>-peinh.
ENDIF.
APPEND lt_pritem.
CLEAR lt_pritem.
lt_pritemx-preq_item = <fs_data>-bnfpo.
lt_pritemx-closed = 'X'.
IF r2 = 'X'.
lt_pritemx-preq_price = 'X'.
lt_pritemx-price_unit = 'X'.
ENDIF.
APPEND lt_pritemx.
CLEAR lt_pritemx.
AT END OF banfn.
REFRESH lt_return.
CALL FUNCTION 'BAPI_PR_CHANGE'
EXPORTING
number = <fs_data>-banfn
TABLES
return = lt_return[]
pritem = lt_pritem[]
pritemx = lt_pritemx[].
LOOP AT lt_return WHERE type = 'E' OR type = 'A'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT gt_out WHERE banfn = <fs_data>-banfn AND check = 'X' AND msgty NE 'S'.
gt_out-msgty = 'E'.
gt_out-zstat = icon_red_light.
gt_out-zmsg = lt_return-message.
MODIFY gt_out INDEX sy-tabix.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT gt_out WHERE banfn = <fs_data>-banfn AND check = 'X' AND msgty NE 'S'.
gt_out-msgty = 'S'.
gt_out-zstat = icon_green_light.
gt_out-zmsg = '执行成功'.
MODIFY gt_out INDEX sy-tabix.
ENDLOOP.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " FRM_CHANGE_PR
*&---------------------------------------------------------------------*
*& Form FRM_CLICK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_RS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_click_data USING rs_selfield TYPE slis_selfield.
IF rs_selfield-fieldname = 'BANFN'.
SET PARAMETER ID 'BAN' FIELD rs_selfield-value.
CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN.
ENDIF.
ENDFORM. " FRM_CLICK_DATA
SAP-批量反审核采购申请及关闭
最新推荐文章于 2024-10-11 23:54:43 发布