怎么做网站链接广告,如何做一个好的wordpress,天津市建设教育培训网,网站注册后能不能注销场景
MD04跑出来很多MRP元素#xff0c;用户想手工控制某些MRP元素不参与运算
分析
增强点还蛮好找的#xff0c;控制MRP元素是否参与运算用下面的se19三代增强点就可以#xff0c;打个断点看下MD04进的哪个增强点就行 旧版本的用这个#xff1a;MD_CHANGE_MRP_DATA 新…场景
MD04跑出来很多MRP元素用户想手工控制某些MRP元素不参与运算
分析
增强点还蛮好找的控制MRP元素是否参与运算用下面的se19三代增强点就可以打个断点看下MD04进的哪个增强点就行 旧版本的用这个MD_CHANGE_MRP_DATA 新版本的用这个MD_ADD_ELEMENTS 这个项目的客户SAP版本比较新用的MD_ADD_ELEMENTS 只要在这个增强点中找到用户需要排除的行项目将该行的需求数量置空同时将参数CH_CHANGED赋值’X’即可 看到这好像还挺简单的只要拉个报表把MD04的行项目拉出来把需要排除的行项目打上标记在增强点读取出需要排除掉的行项目即可 对于一般的MRP元素上述方案完全可行但是有些MRP元素是多层的比如工单涉及的其他下层物料MRP元素也需要一起排除所以此时用户实际上的需求并不是按屏幕上MD04的行项目去排除而是按订单去排除…跟业务沟通了好些时候才弄清楚可能我以前没做过MRP增强而且也比较笨 分析完了就开始冻手观察前台的数据了通过BAPI【MD_STOCK_REQUIREMENTS_LIST_API】输入工厂和物料可以拉取前台MD04的内表实际MD04也是用的这个BAPI前台的内表对应BAPI中的mdezx后台增强的内表对应mdpsx 可以通过mdezx-aline找到对应的mdpsxaline这个字段就代表前台md04内表mdezx在后台增强内表mdpsx的索引值 现在前后台内表的关联关系也有了下一步就是排除所有相关的MRP元素对应的单据业务给我做了条数据左侧是最上层的工单右侧是此工单产生的需求都是要排除掉的 以此工单10000000560为例增强的内表mdpsx中字段del12delnrdelps三个字段组合起来可以作为唯一值关联到后续两个MD04的MRP元素也是找了不少数据做校验才得出这个结论所以只要能够在MD04增强的内表中组合这三个字段在后台表中捞取得到就把该行MRP元素排除
实现
我就只放关键代码和自建表了 MRP排除元素自建表内表mdpsx中字段del12delnrdelps组合起来形成的主键MRP_ELMENTS才是关键其他都是没啥用的字段不重要 报表取数逻辑 CODE PART1 报表内表结构
TYPES:BEGIN OF ty_output,matnr TYPE marc-matnr , 物料maktx TYPE makt-maktx , 物料描述werks TYPE marc-werks , 工厂name1 TYPE t001w-name1 , 工厂描述del12 TYPE mdps-del12,delnr TYPE mdps-delnr,delps TYPE mdps-delps,excld TYPE c , 排除mrp_elments TYPE zppt025-mrp_elments , MRP元素号 DEL12DELNRDELPS组合字段flag TYPE c , 修改标记delb1 TYPE t457t-delb1 . MRP元素描述INCLUDE STRUCTURE mdez.TYPES:END OF ty_output. CODE PART2 根据物料和工厂获取MD04物料信息CALL FUNCTION MD_STOCK_REQUIREMENTS_LIST_APIEXPORTINGmatnr ls_data-matnrwerks ls_data-werksTABLESmdpsx lt_mdps MD04前台内表mdezx lt_mdez. 后台增强的内表 将前后台的表根据aline做匹配mdezx中数据量会多一些具体原因不清楚LOOP AT lt_mdez INTO DATA(ls_mdez).lv_tabix sy-tabix.READ TABLE lt_zppt024 TRANSPORTING NO FIELDS WITH KEY delkz ls_mdez-delkz BINARY SEARCH.IF sy-subrc 0.MOVE-CORRESPONDING ls_mdez TO gs_output.READ TABLE lt_mdps INTO DATA(ls_mdps) INDEX gs_output-aline.IF sy-subrc 0.gs_output VALUE #( BASE gs_outputdel12 ls_mdps-del12delnr ls_mdps-delnrdelps ls_mdps-delpsmrp_elments ls_mdps-del12 ls_mdps-delnr ls_mdps-delps ). 重点就是这个字段后续需要存到数据库中ENDIF.APPEND gs_output TO gt_output.ENDIF.ENDLOOP.报表成品长这样用户勾选哪行要删除的话对应的字段del12delnrdelps组合起来形成主键mrp_elments保存到数据库 增强代码 METHOD if_ex_md_add_elements~add_change_elements.TYPES:BEGIN OF ty_data,index TYPE i , 索引mrp_elments TYPE zppt025-mrp_elments , MRP元素号 DEL12DELNRDELPS组合字段END OF ty_data.DATA: lv_index TYPE i,lt_data TYPE TABLE OF ty_data,lr_delkz TYPE RANGE OF zppt024-delkz.IF sy-tcode SE38 OR sy-tcode ZPPR026. 跑程序的时候需要拉所有清单不做过滤EXIT.ENDIF. 获取配置表拉取需要排除的订单类型 zppt024这个表也是个配置表用户想在MD04排除某一特定类型的单据好像是预留单被排除掉了...SELECT*FROM zppt024WHEREexcld XINTO TABLE DATA(lt_zppt024).SORT lt_zppt024 BY delkz.lr_delkz[] VALUE #( FOR lw_zppt024 IN lt_zppt024( sign I option EQ low lw_zppt024-delkz ) ). 拉取所有元素预处理索引和MRP元素LOOP AT ch_copy_mdpsx INTO DATA(ls_mdps).lt_data VALUE #( BASE lt_data( index lv_index 1mrp_elments ls_mdps-del12 ls_mdps-delnr ls_mdps-delps ) ). 工单特殊处理下钻的时候有可能带上预留单所以要通过这个方式筛选出下钻的工单lt_data VALUE #( BASE lt_data( index lv_index 1mrp_elments ls_mdps-del12 ls_mdps-delps ) ). 委外订单特殊处理下钻的时候需要通过AUFVR和POSVR找到上层的委外订单才能删除下钻的预留单IF ls_mdps-delvr BE AND ls_mdps-delkz BB. 采购 外协lt_data VALUE #( BASE lt_data( index lv_index 1mrp_elments ls_mdps-aufvr ls_mdps-posvr ) ).ENDIF.lv_index 1.ENDLOOP.SORT lt_data BY index mrp_elments.DELETE ADJACENT DUPLICATES FROM lt_data COMPARING ALL FIELDS.IF lt_data IS INITIAL.EXIT.ENDIF. 读取需要被排除的mrp_elmentsSELECTtb~index,zppt025~mrp_elmentsFROM zppt025INNER JOIN lt_data AS tb ON tb~mrp_elments zppt025~mrp_elments 其次在MRP元素中删除所有该单据WHEREzppt025~exclude XINTO TABLE DATA(lt_zppt025).SORT lt_zppt025 BY index.DELETE ADJACENT DUPLICATES FROM lt_zppt025 COMPARING index.IF lt_zppt025 IS INITIAL.EXIT.ENDIF. 按mrp_elments排除单据LOOP AT lt_zppt025 INTO DATA(ls_zppt025).READ TABLE ch_copy_mdpsx ASSIGNING FIELD-SYMBOL(fs_mdps) INDEX ls_zppt025-index.IF sy-subrc 0.CLEAR fs_mdps-mng01.ch_changed X.ENDIF.ENDLOOP. 按单据类型排除单据IF lr_delkz[] IS NOT INITIAL.LOOP AT ch_copy_mdpsx ASSIGNING fs_mdps WHERE delkz IN lr_delkz.CLEAR fs_mdps-mng01.ch_changed X.ENDLOOP.ENDIF.ENDMETHOD.收工追番为美好的世界献上祝福