Normal business process:
Delivery(发货时确认成本):
Debit:cost Cost center
Credit:goods
Billiung(开票时确认收入):
Debit:A/R
Credit:revenue profit center
output-tax
————————————————
our pricess(开发票时同时确认收入和成本):
Delivery:
Dr:Issue Goods (GI)
Cr.Trading Goods
Billing:
Dr:cost Cost center
A/R
Cr:Issue Goods (GI)
revenue profit center
output-tax
第二种方式是中国式的会计思路,需要从销售订单上就带成本中心过来,否则会出问题;并且,成本中心里的会收入相关选项需要解锁。
SAP自动过账配置事物代码:
总账科目确定(FBKP)
固定资产(AO90)
后勤模块(MM-OBYC)
后勤模块(SD-VKOA)
成本要素确定成本中心(OKB9)
外币评估(FBKP)
注意:有的公司所有销售成本是都是计入到同一个成本中心的,这种情况在SAP里的处理方式为将成本科目的成本要素主数据中的默认成本中心维护成要计入的成本中心即可。KE52.
有的公司销售成本要计入到不同的成本中心(通常业务上叫部门、片区、销售小组这样的),目的是更好地分析每个片区的成本、业绩、预算控制。
这种情况就不能在KE52里维护默认成本要素了,而是需要从销售订单就开始增强,将销售订单航项目中的成本中心和利润中心字段通过配置或增强打开,然后通过copy control一路带到billing和accounting document。每个销售片区对应的成本中心通过配置表做好,开单的时候通过输入片区代码就自动带出成本中心。
当然,如果要求销售和成本一起计算,那么就需要将成本中心的收入选项放开,不然因为Billing的时候从航项目里有成本中心和利润中心,保存会报错。
同时确认收入和成本的Billing是这样的:
其对应的销售订单的行项目是这样的:
我们再看下发货时确认成本,开票时确认收入的情况:
SO
Invoice
本文作者: GavinDong
版权属于: GavinDong博客
文章链接: https://gavindong.com/320.html
如果使用过程中遇到问题,可 **点击此处** 交流沟通。
版权所有,转载时必须以链接形式注明作者和原始出处及本声明。
评论列表(7条)
FUNCTION z_fi_document_sdvfx008.
*”———————————————————————-
*”*”本地接口:
*” IMPORTING
*” VALUE(CVBRK) LIKE VBRK STRUCTURE VBRK
*” REFERENCE(DOC_NUMBER) LIKE VBRK-VBELN OPTIONAL
*” TABLES
*” XACCIT STRUCTURE ACCIT
*” XACCCR STRUCTURE ACCCR
*” CVBRP STRUCTURE VBRPVB OPTIONAL
*” CKOMV STRUCTURE KOMV
*” CACCDPC STRUCTURE ACCDPC OPTIONAL
*” XACCFI STRUCTURE ACCFI OPTIONAL
*”———————————————————————-
**–STO开票时生成会计凭证,对会计凭证行项目中的成本中心替代
DATA: lt_lips TYPE TABLE OF lips WITH HEADER LINE,
lw_cvbrp TYPE vbrpvb,
lw_accit TYPE accit.
READ TABLE cvbrp INTO lw_cvbrp WITH KEY vbeln = doc_number.
CHECK sy-subrc EQ 0.
SELECT *
INTO TABLE lt_lips
FROM lips
WHERE vbeln EQ lw_cvbrp-vgbel
AND posnr EQ lw_cvbrp-vgpos
AND pstyv EQ ‘NLC’
AND vgtyp EQ ‘V’
AND kostl EQ space.
IF sy-subrc EQ 0.
READ TABLE lt_lips INDEX 1.
LOOP AT xaccit INTO lw_accit WHERE hkont BETWEEN ‘0064010001’ AND ‘0064010003’.
CASE lt_lips-werks.
WHEN ‘1000’.
lw_accit-kostl = ‘11001’.
WHEN ‘2000’.
lw_accit-kostl = ‘12001’.
WHEN ‘3000’.
lw_accit-kostl = ‘13001’.
ENDCASE.
MODIFY xaccit FROM lw_accit TRANSPORTING kostl.
ENDLOOP.
**–主营业务收入
LOOP AT xaccit INTO lw_accit WHERE hkont BETWEEN ‘0060010001’ AND ‘0060010003’.
CASE lt_lips-werks.
WHEN ‘1000’.
lw_accit-prctr = ‘11001’.
WHEN ‘2000’.
lw_accit-prctr = ‘12001’.
WHEN ‘3000’.
lw_accit-prctr = ‘13001’.
ENDCASE.
MODIFY xaccit FROM lw_accit TRANSPORTING prctr.
ENDLOOP.
ENDIF.
ENDFUNCTION.
公司间开票时生成会计凭证,对会计凭证行项目中的成本中心替代,工厂1000赋11001,工厂2000赋12001,工厂3000赋13001,在smod增强点SDVFX008实现
*&———————————————————————*
*& 包含 ZXVVFU08
*&———————————————————————*
**–STO开票时生成会计凭证,对会计凭证行项目中的成本中心替代
**–考虑批量开票VF04
*IF ( sy-tcode EQ ‘VF01’ OR sy-tcode EQ ‘VF02’ ) AND ( sy-ucomm EQ ‘SICH’ OR sy-ucomm EQ ‘FKFR’ ).
IF ( sy-tcode EQ ‘VF01’ OR sy-tcode EQ ‘VF02’ OR sy-tcode EQ ‘VF04’ ) AND ( sy-ucomm EQ ‘SICH’ OR sy-ucomm EQ ‘FKFR’ ).
CALL FUNCTION ‘Z_FI_DOCUMENT_SDVFX008’
EXPORTING
cvbrk = cvbrk
doc_number = doc_number
TABLES
xaccit = xaccit
xacccr = xacccr
cvbrp = cvbrp
ckomv = ckomv
caccdpc = caccdpc
xaccfi = xaccfi.
ENDIF.
FUNCTION z_fi_document_sdvfx008.
*”———————————————————————-
*”*”本地接口:
*” IMPORTING
*” VALUE(CVBRK) LIKE VBRK STRUCTURE VBRK
*” REFERENCE(DOC_NUMBER) LIKE VBRK-VBELN OPTIONAL
*” TABLES
*” XACCIT STRUCTURE ACCIT
*” XACCCR STRUCTURE ACCCR
*” CVBRP STRUCTURE VBRPVB OPTIONAL
*” CKOMV STRUCTURE KOMV
*” CACCDPC STRUCTURE ACCDPC OPTIONAL
*” XACCFI STRUCTURE ACCFI OPTIONAL
*”———————————————————————-
**–STO开票时生成会计凭证,对会计凭证行项目中的成本中心替代
DATA: lt_lips TYPE TABLE OF lips WITH HEADER LINE,
lw_cvbrp TYPE vbrpvb,
lw_accit TYPE accit.
READ TABLE cvbrp INTO lw_cvbrp WITH KEY vbeln = doc_number.
CHECK sy-subrc EQ 0.
SELECT *
INTO TABLE lt_lips
FROM lips
WHERE vbeln EQ lw_cvbrp-vgbel
AND posnr EQ lw_cvbrp-vgpos
AND pstyv EQ ‘NLC’
AND vgtyp EQ ‘V’
AND kostl EQ space.
IF sy-subrc EQ 0.
READ TABLE lt_lips INDEX 1.
LOOP AT xaccit INTO lw_accit WHERE hkont BETWEEN ‘0064010001’ AND ‘0064010003’.
CASE lt_lips-werks.
WHEN ‘1000’.
lw_accit-kostl = ‘11001’.
WHEN ‘2000’.
lw_accit-kostl = ‘12001’.
WHEN ‘3000’.
lw_accit-kostl = ‘13001’.
ENDCASE.
MODIFY xaccit FROM lw_accit TRANSPORTING kostl.
ENDLOOP.
ENDIF.
ENDFUNCTION.
开票时把销售订单行项目的成本中心带到发票行项目成本中心,公司间开票不考虑成本中心;如果是公司间开票,给发票行项目利润中心赋值(工厂1000赋11001,工厂2000赋12001,工厂3000赋13001)。在出口RV60AFZC的子程序USEREXIT_FILL_VBRK_VBRP实现
*———————————————————————*
* FORM USEREXIT_FILL_VBRK_VBRP *
*———————————————————————*
* This userexit can be used to fill fields in VBRK and VBRP *
* Be aware, that at this time the work areas KUAGV KURGV *
* KUWEV and KUREV are not filled. *
* This form is called from FORM VBRK_VBRP_FUELLEN. *
*———————————————————————*
FORM USEREXIT_FILL_VBRK_VBRP.
* Example: change Tax country
* VBRK-LANDTX = T001-LAND1.
**–增加销售订单行项目中的成本中心
* IF sy-tcode EQ ‘VF01’ AND lips-vgtyp EQ ‘C’ AND vbak-vbeln IS NOT INITIAL.
IF sy-tcode EQ ‘VF01’ AND ( lips-vgtyp EQ ‘C’ OR lips-vgtyp EQ ‘H’ ) AND vbak-vbeln IS NOT INITIAL.
vbrp-kostl = vbap-kostl.
ENDIF.
**–针对项目类别为NCL的交货单,开票时,如果交货单行项目的利润中心为空,给其赋值
IF sy-tcode eq ‘VF01’.” OR sy-tcode EQ ‘VF02’ OR sy-tcode EQ ‘VF04’ OR sy-tcode EQ ‘VF11’.
IF lips-pstyv EQ ‘NLC’ AND lips-vgtyp eq ‘V’ AND lips-prctr IS INITIAL.
* CASE lips-werks.
* WHEN ‘1000’.
* vbrp-prctr = ‘11001’.
* WHEN ‘2000’.
* vbrp-prctr = ‘12001’.
* WHEN ‘3000’.
* vbrp-prctr = ‘13001’.
* ENDCASE.
SELECT SINGLE prctr
INTO vbrp-prctr
FROM ztsd_nlc_prctr
WHERE werks EQ lips-werks.
ENDIF.
ENDIF.
ENDFORM.
创建交货单时,把销售订单行项目中的成本中心带到交货单行项目中的成本中心;保存时如果成本中心为空,报错提示“无成本中心分配至销售订单&/&上,请检查销售订单成本中心!”在出口MV50AFZ1的子程序userexit_move_field_to_lips/userexit_save_document_prepare中实现
**–增加销售订单行项目中的成本中心
**–考虑退货订单
* IF sy-tcode EQ ‘VL01N’ AND lips-vgtyp EQ ‘C’.
**–增加VL10A批量创建交货单
* IF sy-tcode EQ ‘VL01N’ AND ( lips-vgtyp EQ ‘C’ OR lips-vgtyp EQ ‘H’ ).
* IF ( sy-tcode EQ ‘VL01N’ OR sy-tcode EQ ‘VL10X’ ) AND ( lips-vgtyp EQ ‘C’ OR lips-vgtyp EQ ‘H’ ).
*vgtyp的查找方式:Goto->Item->Preceding Data
IF sy-tcode EQ ‘VL01N’ AND ( lips-vgtyp EQ ‘C’ OR lips-vgtyp EQ ‘H’ ).
lips-kostl = vbap-kostl.
ENDIF.
DATA: lw_xlips LIKE LINE OF xlips.
**–增加VL10A批量创建交货单
* IF sy-tcode EQ ‘VL01N’.
IF sy-tcode EQ ‘VL01N’ OR sy-tcode EQ ‘VL10X’.
* LOOP AT xlips INTO lw_xlips WHERE vgtyp EQ ‘C’.
LOOP AT xlips INTO lw_xlips WHERE vgtyp EQ ‘C’ OR vgtyp EQ ‘H’.
IF lw_xlips-kostl IS INITIAL.
MESSAGE e007(zfi01) WITH lw_xlips-vgbel lw_xlips-vgpos.
ENDIF.
ENDLOOP.
ENDIF.
创建销售订单时,根据销售组织/销售部门从销售组织和利润中心/利润中心匹配表ZTSD_SO_PRCTR取利润中心、成本中心,赋值给行项目的利润中心、成本中心,在出口MV45AFZZ的子程序userexit_save_document_prepare中实现
**--销售订单利润中心、成本中心替代
DATA: lv_prctr TYPE prctr,
lv_kostl TYPE kostl,
lw_xvbap TYPE vbapvb.
* IF sy-tcode EQ ‘VA01’ AND t180-trtyp EQ ‘H’.
IF t180-trtyp EQ ‘H’.
SELECT SINGLE prctr kostl
INTO (lv_prctr,lv_kostl)
FROM ztsd_so_prctr
WHERE vkbur EQ vbak-vkbur
AND vkorg EQ vbak-vkorg.
IF sy-subrc EQ 0.
LOOP AT xvbap INTO lw_xvbap.
lw_xvbap-prctr = lv_prctr.
lw_xvbap-kostl = lv_kostl.
MODIFY xvbap FROM lw_xvbap INDEX sy-tabix TRANSPORTING prctr kostl.
ENDLOOP.
ENDIF.
ENDIF.
创建修改显示销售订单时,在销售订单行项目的科目分配页面新增成本中心字段,在用户出口MV45AFZB的子程序USEREXIT_COBL_SEND_ITEM中实现
*&———————————————————————*
*& Form USEREXIT_COBL_SEND_ITEM
*&———————————————————————*
* *
* This Userexit can be used to move data to the communication- *
* table INT_COBLF that is used in the function COBL_SEND_PBO. *
* *
* This form is called from form COBL_SEND_PBO_VBAP. *
* *
*———————————————————————*
FORM USEREXIT_COBL_SEND_ITEM.
**–增加销售订单行项目中的成本中心
IF sy-tcode eq ‘VA01’ or sy-tcode eq ‘VA02’.
int_coblf-fdnam = ‘KOSTL’.
int_coblf-output = ‘1’.
int_coblf-input = ‘1’.
APPEND int_coblf.
ELSEIF sy-tcode eq ‘VA03’.
int_coblf-fdnam = ‘KOSTL’.
int_coblf-output = ‘1’.
int_coblf-input = ‘0’.
APPEND int_coblf.
ENDIF.
* This example shows how to select fields that are shown in the
* account assignment block
* INT_COBLF-FDNAM = zzfield1.
* INT_COBLF-OUTPUT = ‘1’.
* IF T180-TRTYP NE CHARA AND
* VBAP-KZVBR NE KZVBR_P.
* INT_COBLF-INPUT = ‘1’.
* INT_COBLF-REQUIRED = ‘1’.
* ENDIF.
* INT_COBLF-ACTIVE = ‘1’.
* APPEND INT_COBLF.
ENDFORM.
User exit: MV45AFZB