BW根据相应逻辑将满足条件的订单进行合并;
BW005练习题
业务场景:前台终端系统传输订单明细到BW,BW根据相应逻辑将满足条件的订单进行合并;
订单合并原则:
- 订单类型(AUART)为ZOR1或ZRE1的才执行合并;
- 合并抬头:订单类型(AUART)、客户(KUNNR)、单据日期(AUDAT)、过账日期(BUDAT)、库位(LGORT、ZKCSX、ZIFPRN)相同时合并到一个单
- 合并项目:把相同物料(MATNR)合并;
- 合并内容:数量(KWMENG)、金额(NETWR)
- 合并模型要求:需要创建合并单号(HBDH),保留合并单号与原订单对应关系;
- 其它要求:同一订单单号(BSTKD)的项目只能合并在一个合并单中,不允许跨合并单合并;订单合并后,如果一个订单合并后的行项目超过了200行,则合并到一个新的合并单中,并且保证同一个订单单号(BSTKD)合并在一个合并单中(HBDH)。
模型设计原则:
1、 采取三层模型设计,基础明细层(ZD_D002)、逻辑转换层、汇总层;
2、 明细层:存储终端订单原始数据;(标准ADSO)
逻辑转换层:处理合并逻辑,生成合并单号(HBDH)与原订单号(BSTKD)对应关系(标准ADSO)
汇总层:按照汇总单号汇总数据;(汇总ADSO)
模型设计示意图:
实现
一、转换层逻辑实现
1、新建DSO:ZYXF_D001
增加合并单号HBDH字段
2、创建转换
根据开发规范,合并单号(HBDH)字段赋值为空,说明写上End Routine,表示字段赋值逻辑所在位置
3、开始例程
-
首次抽取时,取系统表当前最大的合并单号
IF gv_hbdh IS INITIAL.
SELECT MAX( hbdh ) FROM /bic/azyxf_d0012 INTO gv_hbdh.
ENDIF. -
排序
SORT source_package BY bstkd auart kunnr audat budat lgort zkcsx
zifprn matnr.
4、结束例程 -
局部:合并单号
DATA: lv_hbdh TYPE /bic/azyxf_d0011-hbdh.
DATA: lv_auart TYPE _ty_s_tg_1-auart,
lv_kunnr TYPE _ty_s_tg_1-kunnr,
lv_audat TYPE _ty_s_tg_1-audat,
lv_budat TYPE _ty_s_tg_1-budat,
lv_lgort TYPE _ty_s_tg_1-lgort,
lv_zkcsx TYPE _ty_s_tg_1-zkcsx,
lv_zifprn TYPE _ty_s_tg_1-zifprn,
lv_bstkd TYPE _ty_s_tg_1-bstkd.
DATA: lv_lines TYPE sy-tabix.
DATA: lv_newline TYPE c,
lv_newbstkd TYPE c,
lv_maxline TYPE c.
BREAK-POINT. -
排序
SORT result_package BY auart kunnr audat
budat lgort zkcsx zifprn bstkd.
LOOP AT result_package ASSIGNING <result_fields>. -
当前行(合并单号) lv_lines = lv_lines + 1. IF lv_lines GT 200. CLEAR lv_lines. lv_maxline = 'X'. ENDIF.
-
判断是否新行 IF lv_auart NE <result_fields>-auart OR lv_kunnr NE <result_fields>-kunnr OR lv_audat NE <result_fields>-audat OR lv_budat NE <result_fields>-budat OR lv_lgort NE <result_fields>-lgort OR lv_zkcsx NE <result_fields>-zkcsx OR lv_zifprn NE <result_fields>-zifprn . lv_newline = 'X'. ENDIF.
-
对于非ZOR1和非ZRE1的订单,每个订单对应一个合并单号 IF <result_fields>-auart NE 'ZOR1' AND <result_fields>-auart NE 'ZRE1' AND lv_bstkd NE <result_fields>-bstkd. lv_newbstkd = 'X'. ENDIF.
-
合并单号 + 1 IF lv_newline = 'X' OR lv_newbstkd = 'X' OR lv_maxline = 'X'. gv_hbdh = gv_hbdh + 1. lv_hbdh = gv_hbdh. CLEAR: lv_newline,lv_newbstkd,lv_maxline. ENDIF.
-
合并单号赋值 <result_fields>-hbdh = lv_hbdh.
-
记录上一行数据 lv_auart = <result_fields>-auart . lv_kunnr = <result_fields>-kunnr . lv_audat = <result_fields>-audat . lv_budat = <result_fields>-budat . lv_lgort = <result_fields>-lgort . lv_zkcsx = <result_fields>-zkcsx . lv_zifprn = <result_fields>-zifprn. lv_bstkd = <result_fields>-bstkd.
ENDLOOP.
5、新建DTP
设置语义组,保证所勾选的字段在通哟个
设置语义组,保证所勾选的字段在同一个请求包中,增加合并效率
抽取数据
显示请求号
二、汇总层实现
1、新建DSO:ZYXF_D002
2、创建转换
数量KWMENG聚合方式选择:SUM汇总
3、创建DTP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本