一、功能逻辑









二、功能界面






三、功能代码
*&———————————————————————*
*& 程序名: ZRPPP_0006
*& 创建者(公司)/日期:*
*& 程序描述:
*&
*&———————————————————————*
*& 版本/修改者(公司)/日期//修改描述
*&
*&———————————————————————*
REPORT zrppp_0006.
TABLES:afpo,ztpp006_head.
TYPE-POOLS:icon,slis.
DATA: BEGIN OF gt_item OCCURS 0,
werks TYPE marc-werks,
aufnr TYPE afpo-aufnr,
zrktp(6),
rsnum TYPE rsnum,
rspos TYPE rspos,
zrknum TYPE zbfnum,
zrspos TYPE zrspos,
erdat TYPE erdat,
matnr TYPE afpo-matnr,
maktx TYPE maktx,
amein TYPE co_aufme,
psmng TYPE afpo-psmng, “总数
wemng TYPE afpo-wemng, “已收
gamng1 TYPE menge_d, “应收
gamng2 TYPE menge_d, “实收
lgort TYPE lgort_d,
zid TYPE ernam,
arbpl TYPE arbpl,
kostl TYPE kostl,
ltext LIKE cskt-ltext, “成本中心长文本
loekz TYPE ztpp006-loekz,
ztxt2(200),”备注
ztxt4 TYPE i, “打印次数
mark ,”TYPE check_box,
icon TYPE icon_d, “红绿灯
message TYPE string, “消息
zrkd(8),
mblnr TYPE mblnr,
zmptp(3),
statu(1),
auart TYPE aufk-auart,
END OF gt_item.
DATA:gt_ztpp006 TYPE TABLE OF ztpp006 WITH HEADER LINE.
DATA:gs_ztpp006 TYPE ztpp006.
DATA:gt_ztpp006_head TYPE TABLE OF ztpp006_head WITH HEADER LINE.
DATA gs_ztpp006_head TYPE ztpp006_head.
DATA:ls_ztpp006 LIKE zspp006.
DATA: lt_out LIKE TABLE OF zspp006.
DATA:wt_ztpp006 TYPE ztpp006_head.
“F4帮助
DATA:BEGIN OF gt_name OCCURS 0,”用户ID
ernam TYPE ekko-ernam,
name_last TYPE adrp-name_last,
END OF gt_name,
BEGIN OF gt_zrkdh OCCURS 0,
zrknum TYPE ztpp006_head-zrknum,
* aufnr TYPE ztpp006_head-aufnr,
erdat TYPE ztpp006_head-erdat,
zid TYPE ztpp006_head-zid,
werks TYPE ztpp006_head-werks,
zrktp TYPE ztpp006_head-zrktp,
END OF gt_zrkdh,
BEGIN OF gt_cskt OCCURS 0,
kokrs TYPE cskt-kokrs,
kostl TYPE cskt-kostl,
ltext TYPE cskt-ltext,
datbi TYPE cskt-datbi,
END OF gt_cskt.
“alv参数
DATA:it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat LIKE LINE OF it_fieldcat,
is_layout TYPE lvc_s_layo,
is_fact TYPE lvc_s_fcat,
it_layout TYPE slis_layout_alv.
CONSTANTS cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'.
“打印参数
DATA:g_fm_name TYPE rs38l_fnam,
gw_options TYPE ssfcompop,
gw_control TYPE ssfctrlop.
“ALV 相关变量定义
DATA:lt_fcat TYPE lvc_t_fcat,
ls_layo TYPE lvc_s_layo.
DATA:is_grid_settings TYPE lvc_s_glay.
DATA:gt_ztpp004 TYPE TABLE OF ztpp008 WITH HEADER LINE.
DATA:gt_ddval TYPE lvc_t_drop,
gw_ddval TYPE lvc_s_drop,
gt_events TYPE slis_t_event,
gw_events TYPE slis_alv_event.
“权限控制
DATA:actvt_01 TYPE c, “创建
actvt_02 TYPE c, “打印
actvt_03 TYPE c, “删除
actvt_04 TYPE c. “过账
“入库过账
DATA:goodsmvt_header TYPE TABLE OF bapi2017_gm_head_01 WITH HEADER LINE.
DATA:goodsmvt_code TYPE TABLE OF bapi2017_gm_code WITH HEADER LINE.
DATA:goodsmvt_item TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE .
DATA:goodsmvt_headret TYPE TABLE OF bapi2017_gm_head_ret WITH HEADER LINE.
DATA:materialdocument TYPE bapi2017_gm_head_ret-mat_doc.
DATA:goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber WITH HEADER LINE.
DATA:t_return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA:l_mblnr TYPE mseg-mblnr.
DATA i_grid_title TYPE lvc_title.
DATA job_output_info TYPE ssfcrescl.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:r1 RADIOBUTTON GROUP g1 USER-COMMAND cmd DEFAULT 'X',
r2 RADIOBUTTON GROUP g1,
rr RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS:p_werks FOR afpo-dwerk MODIF ID d1.
SELECT-OPTIONS:s_aufnr FOR afpo-aufnr MODIF ID d3,
s_zrknum FOR ztpp006_head-zrknum MODIF ID d1 ,
s_erdat FOR ztpp006_head-erdat MODIF ID d1,
s_matnr FOR afpo-matnr MODIF ID d1,
s_zid FOR ztpp006_head-zid MODIF ID d1,
s_kostl FOR ztpp006_head-kostl MODIF ID d1.
PARAMETERS:p_zrknum TYPE ztpp006_head-zrknum MODIF ID d4,
p_data TYPE sy-datum DEFAULT sy-datum MODIF ID d4.
PARAMETERS:zzt TYPE char10 DEFAULT '0' AS LISTBOX VISIBLE LENGTH 15 MODIF ID d1 .
PARAMETERS:cx AS CHECKBOX MODIF ID d1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
SELECTION-SCREEN: BEGIN OF LINE .
SELECTION-SCREEN POSITION 10.
PARAMETERS:r3 RADIOBUTTON GROUP g2 .
SELECTION-SCREEN COMMENT 12(10) TEXT-004.”产品入库
SELECTION-SCREEN POSITION 35.
PARAMETERS:r4 RADIOBUTTON GROUP g2.
SELECTION-SCREEN:COMMENT 37(10) TEXT-005.”副产品入库
SELECTION-SCREEN POSITION 50.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF r1 = 'X'.
IF screen-group1 = 'D1' OR screen-group1 = 'D4'.
screen-active = 0.
ENDIF.
ELSEIF r2 = 'X'.
IF screen-group1 = 'D4'.
screen-active = 0.
ENDIF.
ELSEIF rr = 'X'.
IF screen-group1 = 'D1' OR screen-group1 = 'D3'.
screen-active = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zid-low.
PERFORM show_values.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zid-high.
PERFORM show_values1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zrknum-low.
PERFORM show_values2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zrknum-high.
PERFORM show_values3.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kostl-low.
PERFORM show_values4.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kostl-high.
PERFORM show_values5.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zrknum.
PERFORM show_values6.
INITIALIZATION.
DATA itab_list TYPE vrm_values.
itab_list = VALUE #(
( key = '0' text = '已创建' )
( key = '1' text = '已过账' )
).
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'ZZT'
values = itab_list.
REFRESH itab_list.
START-OF-SELECTION.
CLEAR:actvt_01,actvt_02,actvt_03,actvt_04.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ACTVT' FIELD '01'.”创建入库单
IF sy-subrc EQ 0.
actvt_01 = 'X'.
ENDIF.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ACTVT' FIELD '04'.”打印入库单
IF sy-subrc EQ 0.
actvt_02 = 'X'.
ENDIF.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ACTVT' FIELD '06'.”删除入库单
IF sy-subrc EQ 0.
actvt_03 = 'X'.
ENDIF.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ACTVT' FIELD '10'.”入库单过账及冲销
IF sy-subrc EQ 0.
actvt_04 = 'X'.
ENDIF.
IF r1 = 'X'.
IF p_werks IS INITIAL AND s_aufnr IS INITIAL.
MESSAGE '请输入查询条件' TYPE 'I' DISPLAY LIKE 'E' .
STOP.
ENDIF.
IF actvt_01 = ''.
MESSAGE '无权限创建入库单' TYPE 'I' DISPLAY LIKE 'E' .
STOP.
ENDIF.
ELSEIF r2 = 'X' .
IF p_werks IS INITIAL AND s_aufnr IS INITIAL AND s_zrknum IS INITIAL
AND s_erdat IS INITIAL AND s_matnr IS INITIAL AND s_zid IS INITIAL AND s_kostl IS INITIAL.
MESSAGE '请输入查询条件' TYPE 'I' DISPLAY LIKE 'E' .
STOP.
ENDIF.
ELSEIF rr = 'X'.
IF actvt_04 = ''.
MESSAGE '无权限过账入库单' TYPE 'I' DISPLAY LIKE 'E' .
STOP.
ENDIF.
ENDIF.
IF r1 = 'X'.
i_grid_title = '入库单-创建'.
ELSEIF r2 = 'X'.
i_grid_title = '入库单-浏览'.
ELSEIF rr = 'X'.
i_grid_title = '入库单-过账'.
ENDIF.
DATA:BEGIN OF gt_afpo OCCURS 0,
aufnr TYPE afpo-aufnr,
auart TYPE aufk-auart,
objnr TYPE aufk-objnr,
werks TYPE aufk-werks,
matnr TYPE afpo-matnr,
amein TYPE afpo-amein,
psmng TYPE afpo-psmng,
wemng TYPE afpo-wemng,
lgort TYPE afpo-lgort,
END OF gt_afpo.
DATA:gt_aufk TYPE TABLE OF aufk WITH HEADER LINE.
DATA:gt_resb TYPE TABLE OF resb WITH HEADER LINE.
DATA:order_objects TYPE bapi_pp_order_objects,
return TYPE bapiret2,
operation TYPE TABLE OF bapi_order_operation1 WITH HEADER LINE,
gt_makt TYPE TABLE OF makt WITH HEADER LINE.
DATA:BEGIN OF gt_temp OCCURS 0,
zrknum TYPE zbfnum,
zrspos TYPE zrspos,
aufnr TYPE aufnr,
gamng1 TYPE menge_d,
END OF gt_temp.
DATA:l_line TYPE bsvx-sttxt.
IF r1 = 'X'.
IF r3 = 'X'.”产品入库
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_afpo FROM afpo JOIN aufk ON afpo~aufnr = aufk~aufnr
WHERE werks IN p_werks
AND afpo~aufnr IN s_aufnr
AND autyp = '10'
AND elikz = ''”交货完成标识
AND idat2 = '00000000'”TECO时间
AND idat3 = '00000000'.”关闭时间
LOOP AT gt_afpo.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ZWERKS' FIELD gt_afpo-werks.”检查工厂权限
IF sy-subrc NE 0.
CLEAR gt_afpo.
CONTINUE.
ENDIF.
CLEAR l_line.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
objnr = gt_afpo-objnr
spras = '1'
IMPORTING
line = l_line
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
SEARCH l_line FOR 'CRTD'.
IF sy-subrc EQ 0.
CLEAR gt_afpo.
CONTINUE..
ELSE.
gt_item-werks = gt_afpo-werks.
gt_item-auart = gt_afpo-auart.
gt_item-aufnr = gt_afpo-aufnr.
gt_item-matnr = gt_afpo-matnr.
gt_item-amein = gt_afpo-amein.
gt_item-psmng = gt_afpo-psmng.
gt_item-wemng = gt_afpo-wemng.
gt_item-gamng1 = gt_item-psmng – gt_item-wemng.
gt_item-lgort = gt_afpo-lgort.
gt_item-zrktp = 'CP'.
APPEND gt_item.
CLEAR:gt_afpo,gt_item.
ENDIF.
ENDLOOP.
ELSEIF r4 = 'X'.
“副产品入库
SELECT *
INTO TABLE gt_resb FROM resb
WHERE werks IN p_werks
AND aufnr IN s_aufnr
AND shkzg = 'S'
AND xwaok = 'X'”允许的货物移动
AND xloek = ''”删除标识
AND kzear = ''”最后发货标识
AND bdmng > 0.
IF gt_resb[] IS NOT INITIAL.
SELECT * INTO TABLE gt_aufk FROM aufk FOR ALL ENTRIES IN gt_resb
WHERE aufnr = gt_resb-aufnr.
SORT gt_aufk BY aufnr.
ENDIF.
LOOP AT gt_resb.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ZWERKS' FIELD gt_resb-werks.”检查工厂权限
IF sy-subrc NE 0.
CLEAR gt_resb.
CONTINUE.
ENDIF.
gt_item-werks = gt_resb-werks.
gt_item-aufnr = gt_resb-aufnr.
gt_item-matnr = gt_resb-matnr.
gt_item-amein = gt_resb-meins.
gt_item-psmng = gt_resb-bdmng.
gt_item-wemng = gt_resb-enmng.
gt_item-lgort = gt_resb-lgort.
gt_item-rsnum = gt_resb-rsnum.
gt_item-rspos = gt_resb-rspos.
gt_item-gamng1 = gt_item-psmng – gt_item-wemng.
gt_item-zrktp = 'FCP'.
READ TABLE gt_aufk WITH KEY aufnr = gt_item-aufnr BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-auart = gt_aufk-auart.
ENDIF.
APPEND gt_item.
CLEAR:gt_resb,gt_item.
ENDLOOP.
ENDIF.
IF gt_item[] IS INITIAL.
MESSAGE '没有符合条件的数据' TYPE 'I' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ELSEIF r2 = 'X'.
IF r3 = 'X'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
FROM ztpp006 AS a JOIN ztpp006_head AS b ON a~zrknum = b~zrknum
WHERE werks IN p_werks
AND aufnr IN s_aufnr
AND a~zrknum IN s_zrknum
AND matnr IN s_matnr
AND erdat IN s_erdat
AND zid IN s_zid
AND kostl IN s_kostl
AND zrktp = 'CP'.
IF gt_ztpp006[] IS NOT INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_afpo FROM afpo FOR ALL ENTRIES IN gt_ztpp006
WHERE aufnr = gt_ztpp006-aufnr.
SORT gt_afpo BY aufnr.
SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
SORT gt_ztpp006_head BY zrknum.
ENDIF.
ELSEIF r4 = 'X'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
FROM ztpp006 JOIN ztpp006_head ON ztpp006~zrknum = ztpp006_head~zrknum
WHERE werks IN p_werks
AND aufnr IN s_aufnr
AND ztpp006~zrknum IN s_zrknum
AND matnr IN s_matnr
AND erdat IN s_erdat
AND zid IN s_zid
AND kostl IN s_kostl
AND zrktp = 'FCP'.
IF gt_ztpp006[] IS NOT INITIAL.
SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
SORT gt_ztpp006_head BY zrknum.
SELECT * INTO TABLE gt_resb FROM resb FOR ALL ENTRIES IN gt_ztpp006
WHERE rsnum = gt_ztpp006-rsnum AND rspos = gt_ztpp006-rspos.
SORT gt_resb BY rsnum rspos.
ENDIF.
ENDIF.
LOOP AT gt_ztpp006.
IF cx = '' AND gt_ztpp006-loekz = 'X'.
CLEAR gt_ztpp006.
CONTINUE.
ENDIF.
MOVE-CORRESPONDING gt_ztpp006 TO gt_item.
gt_item-amein = gt_ztpp006-meins.
CLEAR gt_ztpp006_head.
READ TABLE gt_ztpp006_head WITH KEY zrknum = gt_item-zrknum BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-erdat = gt_ztpp006_head-erdat.
gt_item-zid = gt_ztpp006_head-zid.
gt_item-werks = gt_ztpp006_head-werks.
gt_item-arbpl = gt_ztpp006_head-arbpl.
gt_item-kostl = gt_ztpp006_head-kostl.
gt_item-ztxt4 = gt_ztpp006_head-ztxt4.
gt_item-zrktp = gt_ztpp006_head-zrktp.
gt_item-mblnr = gt_ztpp006_head-mblnr.
gt_item-zmptp = gt_ztpp006_head-zmptp.
gt_item-statu = gt_ztpp006_head-statu.
ENDIF.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ZWERKS' FIELD gt_item-werks.”检查工厂权限
IF sy-subrc NE 0.
CLEAR gt_item.
CONTINUE.
ENDIF.
APPEND gt_item.
CLEAR gt_item.
ENDLOOP.
IF zzt <> ''.
SEARCH zzt FOR '0'.
IF sy-subrc EQ 0.
DELETE gt_item WHERE statu = '1'.
ELSE.
DELETE gt_item WHERE statu = '0' OR statu = '2'.
ENDIF.
ENDIF.
IF gt_item[] IS INITIAL.
MESSAGE '没有符合条件的数据' TYPE 'I' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ELSEIF rr = 'X'.
IF r3 = 'X'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
FROM ztpp006 AS a JOIN ztpp006_head AS b ON a~zrknum = b~zrknum
WHERE a~zrknum = p_zrknum
AND zrktp = 'CP'.
IF gt_ztpp006[] IS NOT INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_afpo FROM afpo FOR ALL ENTRIES IN gt_ztpp006
WHERE aufnr = gt_ztpp006-aufnr.
SORT gt_afpo BY aufnr.
SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
SORT gt_ztpp006_head BY zrknum.
ENDIF.
ELSEIF r4 = 'X'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ztpp006
FROM ztpp006 JOIN ztpp006_head ON ztpp006~zrknum = ztpp006_head~zrknum
WHERE ztpp006~zrknum = p_zrknum
AND zrktp = 'FCP'.
IF gt_ztpp006[] IS NOT INITIAL.
SELECT * INTO TABLE gt_ztpp006_head FROM ztpp006_head
FOR ALL ENTRIES IN gt_ztpp006 WHERE zrknum = gt_ztpp006-zrknum.
SORT gt_ztpp006_head BY zrknum.
SELECT * INTO TABLE gt_resb FROM resb FOR ALL ENTRIES IN gt_ztpp006
WHERE rsnum = gt_ztpp006-rsnum AND rspos = gt_ztpp006-rspos.
SORT gt_resb BY rsnum rspos.
ENDIF.
ENDIF.
LOOP AT gt_ztpp006.
MOVE-CORRESPONDING gt_ztpp006 TO gt_item.
gt_item-amein = gt_ztpp006-meins.
CLEAR gt_ztpp006_head.
READ TABLE gt_ztpp006_head WITH KEY zrknum = gt_item-zrknum BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-erdat = gt_ztpp006_head-erdat.
gt_item-zid = gt_ztpp006_head-zid.
gt_item-werks = gt_ztpp006_head-werks.
gt_item-arbpl = gt_ztpp006_head-arbpl.
gt_item-kostl = gt_ztpp006_head-kostl.
gt_item-ztxt4 = gt_ztpp006_head-ztxt4.
gt_item-zrktp = gt_ztpp006_head-zrktp.
gt_item-mblnr = gt_ztpp006_head-mblnr.
gt_item-zmptp = gt_ztpp006_head-zmptp.
gt_item-statu = gt_ztpp006_head-statu.
ENDIF.
AUTHORITY-CHECK OBJECT 'ZRKD'
ID 'ZWERKS' FIELD gt_item-werks.”检查工厂权限
IF sy-subrc NE 0.
CLEAR gt_item.
CONTINUE.
ENDIF.
APPEND gt_item.
CLEAR gt_item.
ENDLOOP.
IF gt_item[] IS INITIAL.
MESSAGE '没有符合条件的数据' TYPE 'I' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ENDIF.
IF r1 = 'X'.
SELECT * INTO TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_item
WHERE matnr = gt_item-matnr AND spras = 1.
ELSE.
IF r3 = 'X'.
SELECT * INTO TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_afpo
WHERE matnr = gt_afpo-matnr AND spras = 1.
ELSE.
SELECT * INTO TABLE gt_makt FROM makt FOR ALL ENTRIES IN gt_resb
WHERE matnr = gt_resb-matnr AND spras = 1.
ENDIF.
ENDIF.
SORT gt_makt BY matnr.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt FROM cskt FOR ALL ENTRIES IN gt_item
WHERE kostl = gt_item-kostl.
SORT gt_cskt BY kostl.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_temp FROM ztpp006 AS a JOIN ztpp006_head AS b “已创建入库单数量
ON a~zrknum = b~zrknum
FOR ALL ENTRIES IN gt_item
WHERE aufnr = gt_item-aufnr
AND loekz = ''
AND ( statu = '0' OR statu = '2' ).
order_objects-operations = 'X'.
LOOP AT gt_item.
IF gt_item-psmng = 0 .
IF r3 = 'X'.
READ TABLE gt_afpo WITH KEY aufnr = gt_item-aufnr BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-psmng = gt_afpo-psmng.
gt_item-wemng = gt_afpo-wemng.
gt_item-matnr = gt_afpo-matnr.
ENDIF.
ELSE.
READ TABLE gt_resb WITH KEY rsnum = gt_item-rsnum rspos = gt_item-rspos BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-psmng = gt_resb-bdmng.
gt_item-wemng = gt_resb-enmng.
gt_item-matnr = gt_resb-matnr.
ENDIF.
ENDIF.
ENDIF.
READ TABLE gt_makt WITH KEY matnr = gt_item-matnr BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-maktx = gt_makt-maktx.
ENDIF.
IF gt_item-kostl = ''.
CLEAR operation[].
CALL FUNCTION 'BAPI_PRODORD_GET_DETAIL'
EXPORTING
number = gt_item-aufnr
* COLLECTIVE_ORDER =
order_objects = order_objects
IMPORTING
return = return
TABLES
operation = operation.
IF sy-subrc EQ 0.
READ TABLE operation INDEX 1.
gt_item-arbpl = operation-work_center.
ENDIF.
SELECT SINGLE kostl INTO gt_item-kostl
FROM crhd JOIN crco ON crhd~objid = crco~objid AND crhd~objty = crco~objty
WHERE arbpl = gt_item-arbpl AND werks = gt_item-werks.
SELECT SINGLE ltext INTO gt_item-ltext FROM cskt WHERE kostl = gt_item-kostl AND spras = 1.
ENDIF.
READ TABLE gt_cskt WITH KEY kostl = gt_item-kostl BINARY SEARCH.
IF sy-subrc EQ 0.
gt_item-ltext = gt_cskt-ltext.
ENDIF.
IF r3 = 'X'.
gt_item-zrktp = 'CP'.
gt_item-zrkd = '生产入库'.
ELSE.
gt_item-zrktp = 'FCP'.
gt_item-zrkd = '副产品入库'.
ENDIF.
IF r1 = 'X'.
LOOP AT gt_temp WHERE aufnr = gt_item-aufnr.
gt_item-gamng1 = gt_item-gamng1 – gt_temp-gamng1.
CLEAR gt_temp.
ENDLOOP.
ENDIF.
MODIFY gt_item.
CLEAR:gt_makt,gt_afpo,gt_resb,gt_cskt,gt_item.
ENDLOOP.
DELETE gt_item WHERE gamng1 <= 0.
“fieldcat 字段填充
CLEAR lt_fcat[].
PERFORM frm_fill_fcat TABLES lt_fcat.
is_grid_settings-edt_cll_cb = 'X'.
“布局设置
CLEAR ls_layo.
ls_layo-zebra = 'X'.”斑马线
FORM frm_fill_fcat TABLES t_fcat TYPE lvc_t_fcat.
“局部变量的定义
DATA ls_fcat TYPE lvc_s_fcat.
DEFINE m_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = &1.
ls_fcat-coltext = &2.
ls_fcat-outputlen = &3.
ls_fcat-edit = &4.
ls_fcat-ref_field = &5.
ls_fcat-ref_table = &6.
ls_fcat-drdn_hndl = &7.
ls_fcat-fix_column = &8.
ls_fcat-inttype = &9.
IF &1 EQ 'MARK'.
ls_fcat-checkbox = 'X'.
ENDIF.
IF &1 EQ 'MATNR' OR &1 EQ 'AUFNR'.
ls_fcat-no_zero = 'X'.
ENDIF.
IF &1 EQ 'PSMNG' OR &1 EQ 'WEMNG' OR &1 EQ 'GAMNG1'.
ls_fcat-inttype = 'C'.
ENDIF.
APPEND ls_fcat TO t_fcat.
END-OF-DEFINITION.
IF r1 = 'X'.
ELSE.
m_fieldcat 'MARK' '选择框' '5' 'X' '' '' '' 'X' ''.
ENDIF.
m_fieldcat 'ZRKNUM' '入库单号' '14' '' '' '' '' 'X' ''.
m_fieldcat 'ZRSPOS' '行项目' '4' '' '' '' '' 'X' ''.
m_fieldcat 'ZRKD' '入库类型' '8' '' '' '' '' '' ''.
m_fieldcat 'WERKS' '工厂' '4' '' '' '' '' '' ''.
m_fieldcat 'AUFNR' '工单号' '11' '' '' '' '' '' ''.
m_fieldcat 'MATNR' '物料编码' '9' '' '' '' '' '' ''.
m_fieldcat 'MAKTX' '物料描述' '20' '' '' '' '' '' ''.
m_fieldcat 'PSMNG' '总数量' '10' '' '' '' '' '' 'C'.
m_fieldcat 'WEMNG' '收货数量' '10' '' '' '' '' '' 'C'.
m_fieldcat 'AMEIN' '计量单位' '4' '' '' '' '' '' ''.
m_fieldcat 'GAMNG1' '应收数量' '11' 'X' '' 'ZTPP006' '' '' 'C'.
m_fieldcat 'LGORT' '库存地点' '' 'X' '' '' '' '' ''.
m_fieldcat 'ZTXT2' '备注' '50' 'X' '' '' '' '' ''.
m_fieldcat 'ARBPL' '工作中心' '8' '' '' '' '' '' ''.
m_fieldcat 'KOSTL' '成本中心' '10' '' '' '' '' '' ''.
m_fieldcat 'LTEXT' '成本中心描述' '' '' '' '' '' '' ''.
m_fieldcat 'ERDAT' '入库单创建日期' '' '' '' '' '' '' ''.
m_fieldcat 'ZID' '用户名' '' '' '' '' '' '' ''.
m_fieldcat 'ZTXT4' '打印次数' '4' '' '' '' '' '' ''.
m_fieldcat 'LOEKZ' '删除标识' '5' '' '' '' '' '' ''.
m_fieldcat 'STATU' '入库单状态' '5' '' '' '' '' '' ''.
m_fieldcat 'AUART' '订单类型' '' '' '' '' '' '' ''.
m_fieldcat 'MBLNR' '物料凭证号' '' '' '' '' '' '' ''.
m_fieldcat 'ZMPTP' '移动类型' '' '' '' '' '' '' ''.
* ALV显示数据
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = ls_layo
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
i_grid_settings = is_grid_settings
it_fieldcat_lvc = lt_fcat[]
i_save = 'A'
i_grid_title = i_grid_title
it_events = gt_events
TABLES
t_outtab = gt_item[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
* 数据显示失败
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
FORM frm_set_status USING rt_extab TYPE slis_t_extab.
* 获取gui状态
DATA: wa_extab TYPE slis_extab.
DATA: lt_extab TYPE TABLE OF sy-ucomm.
IF rr <> 'X'.
REFRESH: lt_extab.
APPEND 'POST' TO lt_extab.
APPEND 'RETURN' TO lt_extab.
ENDIF.
SET PF-STATUS 'STANDARD' EXCLUDING lt_extab.
ENDFORM.
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
DATA: l_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_grid.
CALL METHOD l_grid->check_changed_data.
CASE r_ucomm.
WHEN 'ALL'.
LOOP AT gt_item.
gt_item-mark = 'X'.
MODIFY gt_item .
CLEAR gt_item.
ENDLOOP.
WHEN 'CLEAR'.
LOOP AT gt_item .
gt_item-mark = ''.
MODIFY gt_item.
CLEAR gt_item.
ENDLOOP.
WHEN 'PRINT'.
IF actvt_02 <> 'X'.
MESSAGE '无权限打印领料单' TYPE 'I' DISPLAY LIKE 'E' .
RETURN.
ELSE.
PERFORM print.
ENDIF.
WHEN 'SAVE'.
PERFORM save.
WHEN 'DEL'.
IF actvt_03 <> 'X'.
MESSAGE '无权限删除领料单' TYPE 'I' DISPLAY LIKE 'E' .
RETURN.
ELSE.
PERFORM delete.
ENDIF.
WHEN 'POST'.
IF rr <> 'X'.
MESSAGE '请在过账界面过账单据' TYPE 'I' DISPLAY LIKE 'E'.
RETURN.
ELSE.
PERFORM post.
ENDIF.
WHEN 'RETURN'.
IF rr <> 'X'.
MESSAGE '请在过账界面过账单据' TYPE 'I' DISPLAY LIKE 'E'.
RETURN.
ELSE.
PERFORM return.
ENDIF.
WHEN'&IC1'.
READ TABLE gt_item INDEX rs_selfield-tabindex.
CASE rs_selfield-sel_tab_field.
WHEN '1-AUFNR'.
SET PARAMETER ID 'ANR' FIELD rs_selfield-value.
SET PARAMETER ID 'AUFNR' FIELD gt_item-aufnr.
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
WHEN '1-MATNR'.
SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
SET PARAMETER ID 'MATNR' FIELD gt_item-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
WHEN OTHERS.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM.
FORM print .
CLEAR:gs_ztpp006,gt_ztpp006[].
LOOP AT gt_item WHERE mark = 'X' AND zrknum <> ''.
MOVE-CORRESPONDING gt_item TO gs_ztpp006.
APPEND gs_ztpp006 TO gt_ztpp006.
CLEAR:gs_ztpp006,gt_item.
ENDLOOP.
SORT gt_ztpp006 BY zrknum.
DELETE ADJACENT DUPLICATES FROM gt_ztpp006 COMPARING zrknum.
CHECK gt_ztpp006[] IS NOT INITIAL.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZSFPP_002'
IMPORTING
fm_name = g_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
gw_options-tdnewid = ''. “New Spool
gw_options-tdimmed = 'X'.
gw_options-tddelete = 'X'. “Delete Spool After Print
gw_options-tdfinal = 'X'.
gw_options-tdiexit = 'X'. “Exit after printing in print preview
gw_options-tddest = 'LP01'.
gw_control-no_dialog = ''.
gw_control-preview = 'X'.
gw_control-no_open = 'X'.
gw_control-no_close = 'X'.
CALL FUNCTION 'SSF_OPEN' “打开打印窗口
EXPORTING
control_parameters = gw_control
output_options = gw_options
user_settings = ''
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
LOOP AT gt_ztpp006 INTO gs_ztpp006.
LOOP AT gt_item WHERE zrknum = gs_ztpp006-zrknum.
ls_ztpp006-zrknum = gt_item-zrknum.
ls_ztpp006-zrspos = gt_item-zrspos.
ls_ztpp006-meins = gt_item-amein.
ls_ztpp006-aufnr = gt_item-aufnr.
ls_ztpp006-werks = gt_item-werks.
ls_ztpp006-matnr = gt_item-matnr.
ls_ztpp006-gamng1 = gt_item-gamng1.
ls_ztpp006-gamng2 = gt_item-gamng2.
ls_ztpp006-lgort = gt_item-lgort.
ls_ztpp006-kostl = gt_item-kostl.
ls_ztpp006-ltext = gt_item-ltext.
ls_ztpp006-maktx = gt_item-maktx.
ls_ztpp006-zrktp = gt_item-zrktp.
ls_ztpp006-ztxt2 = gt_item-ztxt2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ls_ztpp006-aufnr
IMPORTING
output = ls_ztpp006-aufnr.
APPEND ls_ztpp006 TO lt_out.
CLEAR:gt_item,ls_ztpp006.
ENDLOOP.
CALL FUNCTION g_fm_name
EXPORTING
control_parameters = gw_control
output_options = gw_options
TABLES
it_out = lt_out[]
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
CLEAR:gs_ztpp006,lt_out[].
ENDLOOP.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
job_output_info = job_output_info
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
IF job_output_info-outputdone = 'X'.
LOOP AT gt_ztpp006.
SELECT SINGLE * INTO wt_ztpp006 FROM ztpp006_head WHERE zrknum = gt_ztpp006-zrknum.
wt_ztpp006-ztxt4 = wt_ztpp006-ztxt4 + 1.
MODIFY ztpp006_head FROM wt_ztpp006.
CLEAR:gt_ztpp006,wt_ztpp006.
ENDLOOP.
ENDIF.
ENDFORM.
FORM save .
DATA:str TYPE i.
DATA:znum TYPE string.
CLEAR:gs_ztpp006,gt_ztpp006[],gs_ztpp006_head.
IF r1 = 'X'.
SELECT MAX( zrknum ) INTO gs_ztpp006_head-zrknum FROM ztpp006_head WHERE erdat = sy-datum.
IF gs_ztpp006_head-zrknum IS NOT INITIAL.
CLEAR:znum.
znum = gs_ztpp006_head-zrknum+6(9).
znum = znum + 1.
gs_ztpp006_head-zrknum = 'XXWORC' && znum.
ELSE.
gs_ztpp006_head-zrknum = 'XXWORC' && sy-datum+2(6) && '001'.
ENDIF.
gs_ztpp006_head-erdat = sy-datum.
gs_ztpp006_head-uzeit = sy-uzeit.
gs_ztpp006_head-zid = sy-uname.
gs_ztpp006_head-statu = '0'.
MODIFY ztpp006_head FROM gs_ztpp006_head.
CLEAR str.
LOOP AT gt_item WHERE gamng1 > 0 AND zrknum = ''.
IF gt_item-gamng1 > gt_item-psmng – gt_item-wemng.
MESSAGE '工单号' && gt_item-aufnr && '入库数量不能大于未清数!' TYPE 'I' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
str = str + 1.
gt_ztpp006-zrspos = str.
gt_ztpp006-zrknum = gs_ztpp006_head-zrknum.
gt_ztpp006-aufnr = gt_item-aufnr.
gt_ztpp006-rsnum = gt_item-rsnum.
gt_ztpp006-rspos = gt_item-rspos.
gt_ztpp006-matnr = gt_item-matnr.
gt_ztpp006-ztxt2 = gt_item-ztxt2.
gt_ztpp006-meins = gt_item-amein.
gt_ztpp006-gamng1 = gt_item-gamng1.
gt_ztpp006-gamng2 = gt_item-gamng2.
gt_ztpp006-lgort = gt_item-lgort.
gt_ztpp006-auart = gt_item-auart.
APPEND gt_ztpp006.
gt_item-zrknum = gs_ztpp006_head-zrknum.
gt_item-zrspos = gt_ztpp006-zrspos.
gt_item-erdat = gs_ztpp006_head-erdat.
gt_item-zid = gs_ztpp006_head-zid.
gt_item-statu = gs_ztpp006_head-statu.
MODIFY gt_item.
gs_ztpp006_head-werks = gt_item-werks.
gs_ztpp006_head-zrktp = gt_item-zrktp.
gs_ztpp006_head-arbpl = gt_item-arbpl.
gs_ztpp006_head-kostl = gt_item-kostl.
CLEAR:gt_item,gt_ztpp006.
ENDLOOP.
IF gt_ztpp006[] IS NOT INITIAL.
MODIFY ztpp006 FROM TABLE gt_ztpp006.
MODIFY ztpp006_head FROM gs_ztpp006_head.
COMMIT WORK.
MESSAGE '入库单号:' && gs_ztpp006_head-zrknum && '已生成' TYPE 'S'.
ELSE.
DELETE ztpp006_head FROM gs_ztpp006_head.
ENDIF.
ELSE.
LOOP AT gt_item WHERE zrknum <> '' AND mblnr = '' AND mark = 'X' AND loekz = ''.
IF gt_item-zid <> sy-uname AND rr <> 'X'.
MESSAGE '不能修改' && gt_item-zid && '创建的入库单!' TYPE 'I' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
IF gt_item-gamng1 > gt_item-psmng – gt_item-wemng.
MESSAGE '工单号' && gt_item-aufnr && '入库数量不能大于未清数!' TYPE 'I' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
CLEAR gt_ztpp006.
SELECT SINGLE * INTO gt_ztpp006 FROM ztpp006
WHERE zrknum = gt_item-zrknum AND zrspos = gt_item-zrspos.
IF sy-subrc EQ 0.
gt_ztpp006-gamng1 = gt_item-gamng1.
gt_ztpp006-ztxt2 = gt_item-ztxt2.
MODIFY ztpp006 FROM gt_ztpp006.
ENDIF.
CLEAR:gt_item.
ENDLOOP.
IF sy-subrc <> 0.
MESSAGE '入库单号:' && gt_ztpp006-zrknum && '不允许修改' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM.
FORM delete .
CLEAR:gs_ztpp006,gt_ztpp006[].
LOOP AT gt_item WHERE mark = 'X' AND zrknum <> '' AND mblnr = '' AND loekz = ''.
SELECT SINGLE * INTO gs_ztpp006 FROM ztpp006 WHERE zrknum = gt_item-zrknum AND zrspos = gt_item-zrspos.
IF sy-subrc EQ 0.
gs_ztpp006-loekz = 'X'.
APPEND gs_ztpp006 TO gt_ztpp006.
gt_item-loekz = 'X'.
ENDIF.
MODIFY gt_item.
CLEAR gs_ztpp006.
ENDLOOP.
IF gt_ztpp006[] IS NOT INITIAL.
MODIFY ztpp006 FROM TABLE gt_ztpp006.
COMMIT WORK.
MESSAGE '入库单号删除成功' TYPE 'S'.
ELSE.
MESSAGE '入库单号不允许删除' TYPE 'E'.
ENDIF.
ENDFORM.
FORM show_values .
SELECT bname name_last INTO TABLE gt_name
FROM usr21 JOIN adrp ON adrp~persnumber = usr21~persnumber.
SORT gt_name.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BNAME'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_ZID-LOW'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_name
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
FORM show_values1 .
SELECT bname name_last INTO TABLE gt_name
FROM usr21 JOIN adrp ON adrp~persnumber = usr21~persnumber.
SORT gt_name.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BNAME'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_ZID-HIGH'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_name
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
FORM show_values2 .
SELECT zrknum “TYPE ztpp005-zbfnum,
* aufnr “TYPE ztpp005-aufnr,
erdat “TYPE ztpp005-erdat,
zid “TYPE ztpp005-zid,
werks “TYPE ztpp005-werks,
zrktp “TYPE ztpp005-loekz,
INTO TABLE gt_zrkdh FROM ztpp006_head.
SORT gt_zrkdh BY zrknum.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZRKNUM'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_ZBFNUM-LOW'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_zrkdh
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
FORM show_values3 .
SELECT zrknum “TYPE ztpp005-zbfnum,
* aufnr “TYPE ztpp005-aufnr,
erdat “TYPE ztpp005-erdat,
zid “TYPE ztpp005-zid,
werks “TYPE ztpp005-werks,
zrktp “TYPE ztpp005-loekz,
INTO TABLE gt_zrkdh FROM ztpp006_head.
SORT gt_zrkdh BY zrknum.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZRKNUM'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_ZBFNUM-HIGH'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_zrkdh
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
FORM show_values4 .
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt FROM cskt.
SORT gt_cskt BY kostl.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'KOSTL'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_KOSTL-LOW'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_cskt
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
FORM show_values5 .
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_cskt FROM cskt.
SORT gt_cskt BY kostl.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'KOSTL'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'S_KOSTL-HIGH'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_cskt
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form post
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM post .
CLEAR :gs_ztpp006,wt_ztpp006.
REFRESH gt_ztpp006.
DATA:p_message TYPE string.
READ TABLE gt_item WITH KEY mark = 'X'.
IF sy-subrc <> 0.
MESSAGE '请选择要过账的单据' TYPE 'E'.
ENDIF.
IF p_data = '00000000'.
p_data = sy-datum.
ENDIF.
goodsmvt_header-pstng_date = p_data.
goodsmvt_header-doc_date = sy-datum.
” 01: Goods receipt for purchase order
” 02: Goods receipt for production order
” 03: Goods issue
” 04: Transfer posting
” 05: Other goods receipts
” 06: Reversal of goods movements
” 07: Subsequent adjustment to a subcontract order
IF r3 = 'X'.
goodsmvt_code = '02' .
ELSEIF r4 = 'X'.
goodsmvt_code = '03' .
ENDIF.
REFRESH goodsmvt_item[].
LOOP AT gt_item WHERE loekz = '' AND ( mblnr = '' OR zmptp = '102' OR zmptp = '532' ) AND gamng1 > 0.
IF gt_item-gamng1 > gt_item-psmng – gt_item-wemng.
MESSAGE '工单号' && gt_item-aufnr && '入库数量不能大于未清数!' TYPE 'I' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
goodsmvt_item-plant = gt_item-werks.
goodsmvt_item-material = gt_item-matnr.
goodsmvt_item-stge_loc = gt_item-lgort.
goodsmvt_item-entry_qnt = gt_item-gamng1.
goodsmvt_item-entry_uom = gt_item-amein.
IF r3 = 'X'.
goodsmvt_item-move_type = '101'.
goodsmvt_item-orderid = gt_item-aufnr.
goodsmvt_item-mvt_ind = 'F'.
* goodsmvt_item-order_itno = '10'.
ELSEIF r4 = 'X'.
goodsmvt_item-move_type = '531'.
goodsmvt_item-reserv_no = gt_item-rsnum.
goodsmvt_item-res_item = gt_item-rspos.
ENDIF.
goodsmvt_header-header_txt = gt_item-zrknum.
APPEND goodsmvt_item.
CLEAR :goodsmvt_item,gt_item.
ENDLOOP.
IF goodsmvt_item[] IS NOT INITIAL.
CLEAR:t_return[],l_mblnr,goodsmvt_headret.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = goodsmvt_header
goodsmvt_code = goodsmvt_code
IMPORTING
goodsmvt_headret = goodsmvt_headret
materialdocument = l_mblnr
TABLES
goodsmvt_item = goodsmvt_item
return = t_return.
ENDIF.
IF l_mblnr <> ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT gt_item WHERE ( mblnr = '' OR zmptp = '102' OR zmptp = '532') AND loekz = '' .
gt_item-mblnr = l_mblnr.
IF r3 = 'X'.
gt_item-zmptp = '101'.
ELSEIF r4 = 'X'.
gt_item-zmptp = '531'.
ENDIF.
SELECT SINGLE * INTO gt_ztpp006 FROM ztpp006 WHERE zrknum = gt_item-zrknum AND zrspos = gt_item-zrspos.
gt_ztpp006-gamng1 = gt_item-gamng1.
gt_ztpp006-lgort = gt_item-lgort.
gt_ztpp006-ztxt2 = gt_item-ztxt2.
APPEND gt_ztpp006.
MODIFY gt_item .
CLEAR :gt_ztpp006, gt_item.
ENDLOOP.
MESSAGE '物料凭证' && l_mblnr && '过账成功!' TYPE 'S'.
SELECT SINGLE * INTO wt_ztpp006 FROM ztpp006_head WHERE zrknum = p_zrknum.
wt_ztpp006-mblnr = l_mblnr.
IF r3 = 'X'.
wt_ztpp006-zmptp = '101'.
ELSEIF r4 = 'X'.
wt_ztpp006-zmptp = '531'.
ENDIF.
wt_ztpp006-statu = '1'.
MODIFY ztpp006_head FROM wt_ztpp006.
MODIFY ztpp006 FROM TABLE gt_ztpp006.
CLEAR :gt_ztpp006[],wt_ztpp006.
ELSE.
CLEAR p_message.
LOOP AT t_return WHERE type = 'E' OR type = 'A'.
IF p_message = ''.
p_message = t_return-message .
ELSE.
p_message = p_message && t_return-message .
ENDIF.
ENDLOOP.
MESSAGE p_message TYPE 'E'.
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form return
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM return .
DATA:s_mkpf TYPE mkpf.
CLEAR :wt_ztpp006.
DATA:p_message TYPE string.
DATA:goodsmvt_headret TYPE bapi2017_gm_head_ret,
l_return TYPE TABLE OF bapiret2 WITH HEADER LINE,
t_goodsmvt_matdocitem TYPE TABLE OF bapi2017_gm_item_04 WITH HEADER LINE.
READ TABLE gt_item INDEX 1.
IF gt_item-mblnr <> '' AND ( gt_item-zmptp = '101' OR gt_item-zmptp = '531' ).
SELECT SINGLE * INTO s_mkpf FROM mkpf WHERE mblnr = gt_item-mblnr.
SELECT zeile INTO TABLE t_goodsmvt_matdocitem FROM mseg WHERE mblnr = gt_item-mblnr.
IF sy-subrc EQ 0.
IF p_data = '00000000'.
p_data = sy-datum.
ENDIF.
CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
EXPORTING
materialdocument = s_mkpf-mblnr
matdocumentyear = s_mkpf-mjahr
goodsmvt_pstng_date = p_data
goodsmvt_pr_uname = sy-uname
IMPORTING
goodsmvt_headret = goodsmvt_headret
TABLES
return = l_return
goodsmvt_matdocitem = t_goodsmvt_matdocitem.
IF goodsmvt_headret IS NOT INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT gt_item.
gt_item-mblnr = goodsmvt_headret-mat_doc.
IF r3 = 'X'.
gt_item-zmptp = '102'.
ELSEIF r4 = 'X'.
gt_item-zmptp = '532'.
ENDIF.
gt_item-statu = '2'.
MODIFY gt_item .
CLEAR gt_item.
ENDLOOP.
MESSAGE '物料凭证' && goodsmvt_headret-mat_doc && '冲销成功!' TYPE 'S'.
SELECT SINGLE * INTO wt_ztpp006 FROM ztpp006_head WHERE zrknum = p_zrknum.
wt_ztpp006-mblnr = goodsmvt_headret-mat_doc.
IF r3 = 'X'.
wt_ztpp006-zmptp = '102'.
ELSEIF r4 = 'X'.
wt_ztpp006-zmptp = '532'.
ENDIF.
wt_ztpp006-statu = '2'.
MODIFY ztpp006_head FROM wt_ztpp006.
ELSE.
CLEAR p_message.
LOOP AT l_return WHERE type = 'E' OR type = 'A'.
IF p_message = ''.
p_message = l_return-message .
ELSE.
p_message = p_message && l_return-message .
ENDIF.
ENDLOOP.
MESSAGE p_message TYPE 'E'.
ENDIF.
ELSE.
MESSAGE '凭证不允许冲销' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM.
*&———————————————————————*
*& Form show_values6
*&———————————————————————*
*& text
*&———————————————————————*
*& –> p1 text
*& <– p2 text
*&———————————————————————*
FORM show_values6 .
SELECT zrknum “TYPE ztpp005-zbfnum,
* aufnr “TYPE ztpp005-aufnr,
erdat “TYPE ztpp005-erdat,
zid “TYPE ztpp005-zid,
werks “TYPE ztpp005-werks,
zrktp “TYPE ztpp005-loekz,
INTO TABLE gt_zrkdh FROM ztpp006_head.
SORT gt_zrkdh BY zrknum.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZRKNUM'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_ZBFNUM'
value_org = 'S'
* callback_program = sy-repid
* callback_form = 'CM_FORM'
TABLES
value_tab = gt_zrkdh
* field_tab = lt_field_tab
* return_tab = lt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.