1
订单介绍
服务类采购订单:是用于采购“服务”的单据,比如软件费、维修费、物流费等无形的商品。
作用:
流程标准化与规范化: 为服务的采购提供了一个从申请、审批、执行到付款的标准化流程,确保合规性。
成本控制与预算管理: 在创建订单时即可指定成本中心、内部订单、WBS元素等成本对象,便于事前预算控制和事中成本归集。
服务执行的监控: 通过服务确认流程,业务部门可以监控服务的进度、检查服务质量,确保供应商履行合同。
精确的发票校验: 供应商发票必须与采购订单及已确认的服务数量/金额匹配,财务部门才能进行付款,避免了超额支付。
服务主数据管理: 建立可重复使用的服务主数据(如“高级SAP开发-人天”),提高采购效率和数据一致性。
2
订单创建
ME21N
代码实现
"--------------------@斌将军--------------------DATA: ls_poheader TYPE bapimepoheader, ls_poheaderx TYPE bapimepoheaderx, lt_poitem TYPE TABLE OF bapimepoitem, ls_poitem TYPE bapimepoitem, lt_poitemx TYPE TABLE OF bapimepoitemx, ls_poitemx TYPE bapimepoitemx, lt_polimits TYPE TABLE OF bapiesuhc, ls_polimits TYPE bapiesuhc, lt_return TYPE TABLE OF bapiret2, ls_return TYPE bapiret2.DATA: lv_ebeln LIKE bapimepoheader-po_number, lv_check TYPE char1, lv_message TYPE char255. "行项目ls_poheader-doc_type = 'NB'."采购凭证类型ls_poheader-vendor = '0002012980'.ls_poheader-purch_org = '8030'."采购组织ls_poheader-pur_group = 'P22'."采购组ls_poheader-comp_code = '8030'."公司代码ls_poheader-currency = 'CNY'."货币ls_poheader-doc_date = sy-datum."采购凭证日期ls_poheader-langu = sy-langu."语言代码ls_poheaderx-doc_type = abap_true.ls_poheaderx-vendor = abap_true.ls_poheaderx-purch_org = abap_true.ls_poheaderx-pur_group = abap_true.ls_poheaderx-comp_code = abap_true.ls_poheaderx-currency = abap_true.ls_poheaderx-doc_date = abap_true.ls_poheaderx-langu = abap_true.ls_poitem-po_item = 1."采购凭证的项目编号ls_poitem-acctasscat = 'U'."科目分配类别ls_poitem-item_cat = 'D'."采购凭证项目类别 服务ls_poitem-short_text = '自动生成 - 运费服务'."短文本ls_poitem-quantity = 1."采购订单数量ls_poitem-po_unit = 'LE'." 采购订单的计量单位 AUls_poitem-gr_ind = 'X'." 货物收据标识ls_poitem-ir_ind = 'X'." 发票收据标识ls_poitem-gr_basediv = 'X'." 标识:基于收货的发票验证ls_poitem-plant = '8030'." 工厂ls_poitem-matl_group = '809'." 物料组 在建工程-设备ls_poitem-pckg_no = '0000000010'." 包编号APPEND ls_poitem TO lt_poitem.ls_poitemx-po_item = 1.ls_poitemx-item_cat = abap_true.ls_poitemx-acctasscat = abap_true.ls_poitemx-short_text = abap_true.ls_poitemx-quantity = abap_true.ls_poitemx-po_unit = abap_true .ls_poitemx-gr_ind = abap_true .ls_poitemx-ir_ind = abap_true .ls_poitemx-gr_basediv = abap_true .ls_poitemx-plant = abap_true .ls_poitemx-matl_group = abap_true .ls_poitemx-pckg_no = abap_true .APPEND ls_poitemx TO lt_poitemx.ls_polimits-pckg_no = '0000000010'." 包编号 与行项目的包编号对应ls_polimits-no_limit = 'X'."不限制ls_polimits-exp_value = '5'."期望值APPEND ls_polimits TO lt_polimits.CLEAR:lv_ebeln.CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING poheader = ls_poheader poheaderx = ls_poheaderx IMPORTING exppurchaseorder = lv_ebeln TABLES poitem = lt_poitem poitemx = lt_poitemx polimits = lt_polimits return = lt_return.CLEAR:lv_check,lv_message.LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'. lv_message = lv_message && ls_return-message. lv_check = 'E'. CLEAR:ls_return.ENDLOOP.IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ENDIF.REFRESH:lt_poitem,lt_poitemx,lt_polimits,lt_return."--------------------@斌将军--------------------3
服务确认
ML81N
输入对应的采购订单进行确认
在采购订单历史中可以看到产生的物料凭证
同时也产生了对应的会计凭证(暂估)和成本控制凭证。
直接产生会计凭证是未勾选“收获,未评估”
会计凭证分录为,借:在建工程,贷:设备工程暂估
因为采购订单选择的是设备物料组,所以此处进设备工程暂估科目
使用MIRO进行发票校验
将产生新的会计凭证,借:设备工程暂估,贷:应付国内供应商
ML81N服务确认创建代码参考
"--------------------@斌将军--------------------DATA: ls_heetheader LIKE bapiessrc, lt_esll LIKE TABLE OF bapiesllc, ls_esll LIKE bapiesllc, lt_eskn LIKE TABLE OF bapiesknc, ls_eskn LIKE bapiesknc, lt_eskl LIKE TABLE OF bapiesklc, ls_eskl LIKE bapiesklc, lt_return TYPE TABLE OF bapiret2, ls_return TYPE bapiret2, lv_pckg_no LIKE bapiesllc-pckg_no VALUE 1, lv_line_no LIKE bapiesllc-line_no VALUE 1, lv_entrysheet LIKE bapiessr-sheet_no, lv_tknum TYPE vttk-tknum.DATA:lv_check TYPE char1, lv_message TYPE char255."抬头CLEAR:ls_heetheader.ls_heetheader-pckg_no = lv_pckg_no."包编号ls_heetheader-po_number = '4501000304'."PO编号ls_heetheader-po_item = 10."PO项目编号CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = '900003111E' IMPORTING output = lv_tknum.ls_heetheader-short_text = lv_tknum."短文本ls_heetheader-ref_doc_no = lv_tknum."短文本ls_heetheader-acceptance = 'K'."承诺标识ls_heetheader-accasscat = 'K'."科目分配类别ls_heetheader-post_date = sy-datum."凭证中的凭证日期ls_heetheader-doc_date = sy-datum."凭证中的过帐日期"行项目 相当于总行项目CLEAR:ls_esll.ls_esll-pckg_no = lv_pckg_no."包编号ls_esll-line_no = lv_line_no.*ls_esll-ext_line = 0.*ls_esll-outl_level = '0'.ls_esll-outl_ind = 'X'.ls_esll-subpckg_no = 2. "子包编号 等于第二个行项目的包编号APPEND ls_esll TO lt_esll."科目分配CLEAR:ls_eskn.ls_eskn-pckg_no = lv_pckg_no."包编号ls_eskn-serial_no = 1."科目分配的序号ls_eskn-gl_account = '0066013306'."总账科目ls_eskn-costcenter = '0080301712'."成本中心APPEND ls_eskn TO lt_eskn."行项目CLEAR:ls_esll.ls_esll-pckg_no = 2."等于 上述子包编号ls_esll-line_no = 10."内部行编号ls_esll-quantity = 1."数量ls_esll-base_uom = 'LE'."单位 AUls_esll-gr_price = '5'."总价ls_esll-short_text = lv_tknum."短文本APPEND ls_esll TO lt_esll.CLEAR:ls_eskl.ls_eskl-pckg_no = 2."等于 上述子包编号ls_eskl-line_no = 10."行号ls_eskl-serno_line = 1."帐户分配规范序号:服务行ls_eskl-serial_no = 1."科目分配的序号ls_eskl-quantity = 1."数量APPEND ls_eskl TO lt_eskl.CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE' EXPORTING entrysheetheader = ls_heetheader IMPORTING entrysheet = lv_entrysheet TABLES entrysheetaccountassignment = lt_eskn entrysheetservices = lt_esll entrysheetsrvaccassvalues = lt_eskl return = lt_return.CLEAR:lv_check,lv_message.LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'. lv_message = lv_message && ls_return-message. lv_check = 'E'.ENDLOOP.IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ENDIF.REFRESH:lt_eskn,lt_esll,lt_eskl,lt_return."--------------------@斌将军--------------------—— 希望本篇文章对您有所帮助 ——