最近公司新增了PS模块用于技术部门研发使用。
涉及到后续业务部门一系列的操作,文章就是说一下关于PS模块下生产订单做的增强操作。
因为不是标准的业务流程,新产品研发可能需要多次试验以及物料不确定的情况,研发的生产订单需要研发人员自己下达。为了防止研发人员操作的时候没有维护"结算规则",会导致后续财务结算问题,可以做一下增强校验。
增强校验判断研发工单是否有对应的"结算规则" 。
1. 选择无销售订单的生产订单CO01或者无物料的CO07,如下图所示:
填写相关信息后回车该生产订单直接下达,接着点击保存按钮。
没有去维护"结算规则",则报如下错误。
接着去到"抬头"-->"结算规则",进行结算规则的维护。
物料的自动带出,我们需要填写WBS元素方便后续去归结费用。
接着返回之后保存就完成啦。
那么我们需要做的增强点校验如下:
前往T-CODE:SMOD--PPCO0007(保存前触发的增强)我多方认证以及debug的出来的结果有误请纠正谢谢!
点击"显示":
点击"组件"
这就是出口,也就是我们需要找到的增强点。
校验判断的逻辑如下:
TYPES: BEGIN OF ty_cobra_buf.
INCLUDE STRUCTURE cobra.
TYPES: uflag LIKE dkobr-upd_flag,
END OF ty_cobra_buf.
TYPES: ty_t_cobra_buf TYPE ty_cobra_buf OCCURS 10.
TYPES: BEGIN OF ty_cobrb_buf.
INCLUDE STRUCTURE cobrb.
TYPES: uflag LIKE dkobr-upd_flag,
END OF ty_cobrb_buf.
TYPES: ty_t_cobrb_buf TYPE ty_cobrb_buf OCCURS 10.
DATA: gt_cobra_buf TYPE ty_t_cobra_buf.
DATA: gt_cobrb_buf TYPE ty_t_cobrb_buf.
DATA:
lv_found TYPE abap_bool,
l_mem_cobra LIKE gt_cobra_buf[],
l_mem_cobrb LIKE gt_cobrb_buf[].
" 判断是否是研发工单类型
IF header_imp-auart = 'S06' OR header_imp-auart = 'S07' .
CALL FUNCTION 'K_SRULE_EXPORT_IMPORT'
EXPORTING
i_mode = 'EX'
EXCEPTIONS
wrong_mode = 1
OTHERS = 2.
IF sy-subrc = 0.
l_mem_cobra[] = gt_cobra_buf[].
l_mem_cobrb[] = gt_cobrb_buf[].
IMPORT l_mem_cobra l_mem_cobrb FROM MEMORY ID 'K_SRULE'.
LOOP AT l_mem_cobrb INTO DATA(ls_cobrb).
" 判断有无WBS元素
IF ls_cobrb-konty = 'PR' AND ls_cobrb-prozs <> 0.
lv_found = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF lv_found <> abap_true..
MESSAGE e001(00) WITH '研发工单结算规则有误,请修改!'.
ENDIF.
ENDIF.
保存激活后。
前往TODE:CMOD,创建新项目并填写相关信息后,进行增强分配。
保存并激活即可处于活动状态。
研发工单自动填入对应的"结算规则" 。
2. 选择需要输入WBS以及物料的生产订单CO10,如下图所示:
填写好相关信息后,分配这里会自动来出创建的时候输入的WBS元素。
这时候点击保存按钮
,保存前触发增强会自动将在创建的时候的WBS元素填充到"结算规则"中,这样可以降低使用复杂度。
增强还是上面的PPCO0007具体的代码逻辑如下:
TYPES: BEGIN OF ty_cobra_buf.
INCLUDE STRUCTURE cobra.
TYPES: uflag LIKE dkobr-upd_flag,
END OF ty_cobra_buf.
TYPES: ty_t_cobra_buf TYPE ty_cobra_buf OCCURS 10.
TYPES: BEGIN OF ty_cobrb_buf.
INCLUDE STRUCTURE cobrb.
TYPES: uflag LIKE dkobr-upd_flag,
END OF ty_cobrb_buf.
TYPES: ty_t_cobrb_buf TYPE ty_cobrb_buf OCCURS 10.
DATA: gt_cobra_buf TYPE ty_t_cobra_buf.
DATA: gt_cobrb_buf TYPE ty_t_cobrb_buf.
DATA:
lv_found TYPE abap_bool,
l_mem_cobra LIKE gt_cobra_buf[],
l_mem_cobrb LIKE gt_cobrb_buf[].
IF header_imp-auart = 'S06' OR header_imp-auart = 'S07' .."增加WBS结算规则
DATA:it_objnr TYPE STANDARD TABLE OF ionrb WITH HEADER LINE.
it_objnr-objnr = header_imp-objnr.
APPEND it_objnr.
LOOP AT l_mem_cobrb ASSIGNING FIELD-SYMBOL(<l_mem_cobrb>) WHERE konty = 'MA'.
<l_mem_cobrb>-prozs = 0.
ENDLOOP.
DATA:ls_ty_cobrb_buf TYPE ty_cobrb_buf.
CLEAR:ls_ty_cobrb_buf.
ls_ty_cobrb_buf-objnr = it_objnr-objnr.
ls_ty_cobrb_buf-lfdnr = '2'.
ls_ty_cobrb_buf-extnr = '2'.
ls_ty_cobrb_buf-perbz = 'PER'.
ls_ty_cobrb_buf-prozs = 100.
* ls_ty_cobrb_buf-avorg = 'KOAO'.
ls_ty_cobrb_buf-konty = 'PR'.
ls_ty_cobrb_buf-ps_psp_pnr = header_imp-projn.
ls_ty_cobrb_buf-rec_objnr1 = ls_ty_cobrb_buf-konty && ls_ty_cobrb_buf-ps_psp_pnr.
ls_ty_cobrb_buf-uflag = 'I'.
APPEND ls_ty_cobrb_buf TO l_mem_cobrb.
EXPORT l_mem_cobra[] l_mem_cobrb[] TO MEMORY ID 'K_SRULE'.
CALL FUNCTION 'K_SETTLEMENT_RULE_REFRESH'
EXPORTING
* ALL_REFRESH = ' '
objnr = it_objnr-objnr.
CALL FUNCTION 'K_SRULE_EXPORT_IMPORT'
EXPORTING
i_mode = 'IM'
EXCEPTIONS
wrong_mode = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
各位大神有问题请指正,谢谢!