主营业务成本替代增强
对销售发货凭证(物料凭证类型 = WL),主营业务成本科目、其他业务成本科目需要区分集团内和集团外。
增强点:INCLUDE MM07MFK0_KONTIERUNG_LESEN (隐式增强)
1、 增强的处理逻辑
当MKPF-BLART(物料凭证类型)='WL' 并且MKPF-XBLNR(参考凭证号)不为空时进行检查和科目替代:
1) 获取客户账户分配组
从KNVV和LIKP表查找客户账户分配组字段。
表关联:inner join
关联条件:
likp~kunag(售达方) = knvv~kunnr(客户编号) and
likp~vkorg (销售组织) = v~vkorg (销售组织)
筛选条件:
likp~kunag(售达方)不为空 and
likp~vbeln = MKPF-XBLNR
输出字段:
KNVV- KTGRD (客户账户分配组)
如果sql语句返回记录为空(sy-subrc <> 0),则继续从KNVV和LIKP表中根据likp-kunnr(客户编号)字段继续查找账户分配组字段(将LIKP的kunag(售达方)替换kunnr(客户编号)。
表关联:inner join
关联条件:
likp~kunnr(售达方) = knvv~kunnr(客户编号) and
likp~vkorg (销售组织) = v~vkorg (销售组织)
筛选条件:
likp~kunnr(售达方)不为空 and
likp~vbeln = MKPF-XBLNR
输出字段:KNVV- KTGRD (客户账户分配组)
执行上面的sql语句之后,还需要针对退货交货单场景取数(sy-subrc <> 0)继续查找客户账户分配组,因为在退货订单立即过账的场景中LIKP表没有数据。退货场景直接从knvv表获取数据:
筛选条件:
KNVV~VKORG (销售组织) = MSEG-BUKRS (公司代码) AND
KNVV~KUNNR (客户编号) = MSEG-KUNNR (客户编号)
输出字段:KNVV- KTGRD (客户账户分配组)
2)获取物料的科目分配组
从MVKE表获取KTGRM(物料的科目分配组)字段
筛选条件:
mvke~matnr = mseg~matnr (物料编码) AND
mvke~vkorg (销售组织)= mseg~bukrs (公司代码)
输出字段:MVKE- KTGRM (物料的科目分配组)
3)根据客户的账户分配组和物料的账户分配组查找对应的成本科目
从配置表C901中获取数据:
筛选条件:
kappl = 'V' (应用程序)
AND kschl = 'KOFI' (条件类型,)
AND ktopl = '1000' (科目表)
AND kvsl1 = 'ZCT' (科目代码)
AND ktgrd = 步骤1获取的客户账户分配组
AND ktgrm =步骤2获取的物料账户分配组
输出字段:C901- sakn1 (总账科目号)
4) 执行科目替代
如果获取的科目代码不为空,则将dm07m-konto替换为获取的科目(C901-sakn1)。

DATA lv_flg TYPE c . CLEAR lv_flg . IF dm07m-konto IS NOT INITIAL . lv_flg = 'X' . ENDIF.

DATA : lv_ktgrd TYPE knvv-ktgrd. DATA : lv_ktgrm TYPE mvke-ktgrm. DATA : lv_hkont TYPE konto. CLEAR:lv_ktgrd,lv_ktgrm,lv_hkont. IF lv_flg IS INITIAL AND mkpf-blart = 'WL' AND mkpf-xblnr IS NOT INITIAL .. "如果前面没有指定科目,且按规则找到科目,进行替代 SELECT SINGLE v~ktgrd INTO lv_ktgrd FROM knvv AS v INNER JOIN likp AS p ON p~kunag = v~kunnr AND p~kunag <> '' AND p~vkorg = v~vkorg "取售达方科目类别组 20250319 * INNER JOIN likp AS p ON p~kunnr = v~kunnr AND p~vkorg = v~vkorg "取送达方科目类别组 WHERE p~vbeln = mkpf-xblnr. "mseg-xblnr_mkpf. IF sy-subrc <> 0 . " 会出现售达方为空的情况,为空取不到值的时候,用收货方取数 SELECT SINGLE v~ktgrd INTO lv_ktgrd FROM knvv AS v INNER JOIN likp AS p ON p~kunnr = v~kunnr AND p~kunnr <> '' AND p~vkorg = v~vkorg "取售达方科目类别组 20250319 WHERE p~vbeln = mkpf-xblnr. IF sy-subrc <> 0 . " 针对退货交货单,会出现创建完立马过账的情况,此时LIKP表无数据,直接取客户主数据中的 ktgrd 20250603 SELECT SINGLE v~ktgrd INTO lv_ktgrd FROM knvv AS v WHERE v~vkorg = mseg-bukrs AND v~kunnr = mseg-kunnr. ENDIF. ENDIF. SELECT SINGLE ktgrm INTO lv_ktgrm FROM mvke WHERE matnr = mseg-matnr AND vkorg = mseg-bukrs. SELECT SINGLE sakn1 INTO lv_hkont FROM c901 WHERE kappl = 'V' AND kschl = 'KOFI' AND ktopl = 'INST' AND kvsl1 = 'ZCT' AND ktgrd = lv_ktgrd AND ktgrm = lv_ktgrm. IF lv_hkont IS NOT INITIAL. dm07m-konto = lv_hkont. ENDIF. ENDIF.
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号