*&---------------------------------------------------------------------*
*& Report ZPP1000F0024
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zpp1000f0024.
*--------------------------------------------------------------------*定义
TABLES: zppt004,sscrfields,proj.
TYPES:BEGIN OF ts_data,
werks TYPE zppt004-werks, "工厂
psphi TYPE zppt004-psphi, "项目号
matnr TYPE zppt004-matnr, "物料编号
rsnum TYPE zppt004-rsnum, "预留/相关需求的编号
rspos TYPE zppt004-rspos, "预留 / 相关需求的项目编号
zclxh TYPE zppt004-zclxh, "处理序号
zcfhh TYPE zppt004-zcfhh, "拆分行号
post1 TYPE proj-post1, "项目描述
astnr TYPE proj-astnr, "事业部代码
astna TYPE proj-astna, "事业部名称
zxqrq TYPE zppt004-zxqrq, "需求日期
wlylje TYPE bwert, "未领预留金额
fpkcje TYPE bwert, "分配库存金额
fpjskcje TYPE bwert, "分配寄售库存金额
fpfjskcje TYPE bwert, "分配寄售库存金额
zzmng TYPE zppt004-zzmng, "待发数量
peris TYPE p DECIMALS 4, "价格
zgysl TYPE zppt004-zgysl, "供应分配数量
zgylx TYPE zppt004-zgylx, "供应类型
zgydh TYPE zppt004-zgydh, "供应单号
pspid TYPE proj-pspid, "项目定义-24
pspel TYPE zppt004-pspel, "wbs
box TYPE c,
END OF ts_data.
DATA:gt_data TYPE STANDARD TABLE OF ts_data.
DATA:gt_fcat TYPE lvc_t_fcat.
DATA:gs_layo TYPE lvc_s_layo.
TYPES:BEGIN OF ts_coll,
werks TYPE zppt004-werks, "工厂
* psphi TYPE zppt004-psphi, "项目号
pspid TYPE proj-pspid, "项目定义-24
post1 TYPE proj-post1, "项目描述
astnr TYPE proj-astnr, "事业部代码
astna TYPE proj-astna, "事业部名称
zxqrq TYPE zppt004-zxqrq, "需求日期
wlylje TYPE bwert, "未领预留金额
fpkcje TYPE bwert, "分配库存金额
fpjskcje TYPE bwert, "分配寄售库存金额
fpfjskcje TYPE bwert, "分配非寄售库存金额
END OF ts_coll.
DATA:gt_coll TYPE STANDARD TABLE OF ts_coll,
gs_coll TYPE ts_coll,
gt_coll_01 TYPE STANDARD TABLE OF ts_coll,
gs_coll_01 TYPE ts_coll.
DATA:lv_line_psphi TYPE sy-tabix VALUE '1'.
*--------------------------------------------------------------------*seletion
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
*s_psphi FOR zppt004-psphi,"项目号
s_pspid FOR proj-pspid, "项目号
s_astnr FOR proj-astnr, "事业部代码
s_werks FOR proj-werks OBLIGATORY. "工厂
SELECTION-SCREEN END OF BLOCK b1.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_psphi-low.
* PERFORM frm_help_psphi USING s_psphi-low.
*
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_psphi-high.
* PERFORM frm_help_psphi USING s_psphi-high.
START-OF-SELECTION.
*--------------------------------------------------------------------*获取数据处理
SELECT a~werks psphi zxqrq zzmng zgysl matnr zgylx pspel rsnum rspos
b~post1 astnr astna
INTO CORRESPONDING FIELDS OF TABLE gt_data
FROM zppt004 AS a
INNER JOIN proj AS b
ON pspnr = a~psphi
WHERE b~pspid IN s_pspid
* psphi IN s_psphi
AND zgydh = ''
AND astnr IN s_astnr
AND a~werks IN s_werks
AND a~psphi NE ''
%_HINTS ORACLE 'INDEX(ZPPT004"Z1")'.
IF gt_data[] IS INITIAL.
MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
SORT gt_data BY werks psphi.
DATA(gt_data_02) = gt_data.
DELETE ADJACENT DUPLICATES FROM gt_data_02 COMPARING psphi.
SELECT bwkey AS werks,matnr,vprsv,stprs,verpr,peinh
INTO TABLE @DATA(gt_peris)
FROM mbew
FOR ALL ENTRIES IN @gt_data
WHERE bwkey = @gt_data-werks
AND matnr = @gt_data-matnr.
SORT gt_peris BY werks matnr.
*--项目库存价格
SELECT bwkey AS werks,matnr,vprsv,stprs,verpr,peinh,pspnr AS pspel
INTO TABLE @DATA(gt_peris_qbew)
FROM qbew
FOR ALL ENTRIES IN @gt_data
WHERE bwkey = @gt_data-werks
AND matnr = @gt_data-matnr.
* AND pspnr = @gt_data-pspel.
SORT gt_peris_qbew BY werks matnr pspel.
LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT'
EXPORTING
input = <fs_data>-psphi
IMPORTING
output = <fs_data>-pspid
" PSELT =
.
AT END OF psphi.
cl_progress_indicator=>progress_indicate( i_text = |正在处理 { lv_line_psphi }/{ lines( gt_data_02 ) }:{ <fs_data>-pspid }| i_output_immediately = abap_true i_processed = lv_line_psphi i_total = lines( gt_data_02 ) ).
lv_line_psphi = lv_line_psphi + 1.
ENDAT.
READ TABLE gt_peris INTO DATA(ls_peris) WITH KEY werks = <fs_data>-werks matnr = <fs_data>-matnr BINARY SEARCH.
IF sy-subrc = 0.
CASE ls_peris-vprsv.
WHEN 'S'.
<fs_data>-peris = ls_peris-stprs / ls_peris-peinh.
WHEN 'V'.
<fs_data>-peris = ls_peris-verpr / ls_peris-peinh.
WHEN OTHERS.
ENDCASE.
ENDIF.
"库存价格获取失败,获取项目库存价格
IF <fs_data>-peris IS INITIAL .
READ TABLE gt_peris_qbew INTO DATA(ls_peris_qbew) WITH KEY werks = <fs_data>-werks matnr = <fs_data>-matnr pspel = <fs_data>-pspel BINARY SEARCH.
IF sy-subrc = 0.
CASE ls_peris_qbew-vprsv.
WHEN 'S'.
<fs_data>-peris = ls_peris_qbew-stprs / ls_peris_qbew-peinh.
WHEN 'V'.
<fs_data>-peris = ls_peris_qbew-verpr / ls_peris_qbew-peinh.
WHEN OTHERS.
ENDCASE.
* Add by nabap02 Start{
* 如果有Q移动平均价的取Q移动平均价,没有Q移动平均价取物料移动平均价,如果物料移动平均价也没有的去标准价格
* 此处增加,项目库存价格 wbs 为项目首层时按物料取
ELSE.
READ TABLE gt_peris_qbew INTO ls_peris_qbew WITH KEY werks = <fs_data>-werks matnr = <fs_data>-matnr.
IF sy-subrc = 0.
CASE ls_peris_qbew-vprsv.
WHEN 'S'.
<fs_data>-peris = ls_peris_qbew-stprs / ls_peris_qbew-peinh.
WHEN 'V'.
<fs_data>-peris = ls_peris_qbew-verpr / ls_peris_qbew-peinh.
WHEN OTHERS.
ENDCASE.
ENDIF.
ENDIF.
* }end
ENDIF.
"未领预留金额
* <fs_data>-wlylje = <fs_data>-zzmng * <fs_data>-peris.
"分配寄售库存金额
IF <fs_data>-zgylx = '非限制寄售' .
<fs_data>-fpjskcje = <fs_data>-zgysl * <fs_data>-peris.
ENDIF.
* 分配库存金额
<fs_data>-fpkcje = <fs_data>-zgysl * <fs_data>-peris .
"分配非寄售库存金额
<fs_data>-fpfjskcje = <fs_data>-fpkcje - <fs_data>-fpjskcje.
gs_coll = CORRESPONDING #( <fs_data> ).
COLLECT gs_coll INTO gt_coll.
ENDLOOP.
SORT gt_data BY rsnum rspos .
DELETE ADJACENT DUPLICATES FROM gt_data COMPARING rsnum rspos .
LOOP AT gt_data INTO DATA(gs_data).
gs_coll_01 = CORRESPONDING #( gs_data ).
gs_coll_01-wlylje = gs_data-zzmng * gs_data-peris.
COLLECT gs_coll_01 INTO gt_coll_01.
ENDLOOP.
SORT gt_coll_01 BY werks pspid astnr zxqrq.
LOOP AT gt_coll ASSIGNING FIELD-SYMBOL(<f_coll>).
READ TABLE gt_coll_01 INTO gs_coll_01 WITH KEY werks = <f_coll>-werks pspid = <f_coll>-pspid astnr = <f_coll>-astnr zxqrq = <f_coll>-zxqrq BINARY SEARCH.
IF sy-subrc = 0.
<f_coll>-wlylje = gs_coll_01-wlylje.
ENDIF.
ENDLOOP.
*--------------------------------------------------------------------*alv
"fcat
gt_fcat = VALUE #(
( fieldname = 'WERKS' ref_field = '' ref_table = '' coltext = '工厂' )
( fieldname = 'PSPID' ref_field = '' ref_table = '' coltext = '项目号' )
( fieldname = 'POST1' ref_field = '' ref_table = '' coltext = '项目描述' )
( fieldname = 'ASTNR' ref_field = '' ref_table = '' coltext = '事业部代码' )
( fieldname = 'ASTNA' ref_field = '' ref_table = '' coltext = '事业部名称' )
( fieldname = 'ZXQRQ' ref_field = '' ref_table = '' coltext = '需求日期' )
( fieldname = 'WLYLJE' ref_field = '' ref_table = '' coltext = '未领预留金额' )
( fieldname = 'FPKCJE' ref_field = '' ref_table = '' coltext = '分配库存金额' )
( fieldname = 'FPJSKCJE' ref_field = '' ref_table = '' coltext = '分配寄售库存金额')
( fieldname = 'FPFJSKCJE' ref_field = '' ref_table = '' coltext = '分配非寄售库存金额')
).
"layo
gs_layo = VALUE #(
zebra = abap_true
sel_mode = 'A'
cwidth_opt = 'X'
).
"alv
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
it_fieldcat_lvc = gt_fcat
i_default = abap_true
is_layout_lvc = gs_layo
i_save = 'A'
TABLES
t_outtab = gt_coll[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
*&---------------------------------------------------------------------*
*& Form FRM_HELP_PSPHI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_help_psphi USING u_psphi .
DATA:lit_ddshretval TYPE TABLE OF ddshretval,
lwa_ddshretval TYPE ddshretval.
DATA:BEGIN OF lit_psphi OCCURS 0,
psphi TYPE zppt004-psphi,
post1 TYPE proj-post1,
END OF lit_psphi.
SELECT psphi post1
FROM zppt004
INTO TABLE lit_psphi
ORDER BY psphi.
DELETE ADJACENT DUPLICATES FROM lit_psphi.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PSPHI'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'S_PSPHI'
window_title = '项目号'
value_org = 'S'
TABLES
value_tab = lit_psphi
return_tab = lit_ddshretval
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
帮我详细解读这段代码