根据proj-pspid 找物料

ABAP查找物料
本文介绍了一种使用ABAP编程语言从特定项目阶段中查找并筛选物料的方法。通过联接多个表,实现根据项目阶段编号(PSPID)获取物料号(MATNR),并对结果进行排序、去重及过滤空白值等操作。

根据proj-pspid 找物料

  data: begin of st,         matnr like mara-matnr,         end of st.

  data: it_matnr like standard table of st with header line.   data: rtn like ddshretval occurs 0 with header line.

  data: l_pspnr like proj-pspnr.

  ranges: l_matkl for t023t-matkl.   l_matkl-sign = 'I'.   l_matkl-option = 'BT'.   l_matkl-low = 'L0601'.   l_matkl-high = 'L0606'.   append l_matkl.

  select single pspnr     into l_pspnr     from proj    where proj~pspid = proj-pspid.

  select o~matnr     into corresponding fields of table it_matnr     from ebkn as n    inner join prps as r on n~ps_psp_pnr = r~pspnr    inner join eban as p on n~banfn = p~banfn    inner join ekpo as o on p~banfn = o~banfn                        and o~bnfpo = p~bnfpo    where r~psphi eq l_pspnr      and p~matkl in l_matkl.

  sort it_matnr.   delete adjacent duplicates from it_matnr comparing matnr.   delete it_matnr where matnr eq space.

  call function 'F4IF_INT_TABLE_VALUE_REQUEST'        exporting             retfield        = 'MATNR'             dynpprog        = sy-cprog             dynpnr          = sy-dynnr             dynprofield     = 'MATNR'             stepl           = sy-stepl             window_title    = '物料'             value_org       = 'S'        tables             value_tab       = it_matnr             return_tab      = rtn        exceptions             parameter_error = 1             no_values_found = 2             others          = 3.

*&---------------------------------------------------------------------* *& 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. 帮我详细解读这段代码
08-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值