1. function module是全局性的
2.subroutine是局部的
3.function module可封装成RFC,供外部系统调用
4.subroutine一般情况下只能在程序内部调用
5.DEOMO:
5.1: function module
FUNCTION ZTEST_0001.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IN_CHAR) TYPE CHAR20 OPTIONAL
*" EXPORTING
*" VALUE(OUT_CHAR) TYPE CHAR20
*"----------------------------------------------------------------------
out_char = '传出:' && in_char.
ENDFUNCTION.
5.2:subroutine
FORM p1 ."采购订单
DATA:gs_poheader TYPE bapimepoheader, "采购订单抬头数据
gs_poheaderx TYPE bapimepoheaderx, "采购订单抬头数据(更改参数) 针对要增加的内容做一个标记,其实标记过了才可以被修改的
gt_return TYPE STANDARD TABLE OF bapiret2,
gwa_return TYPE bapiret2,
gt_item TYPE STANDARD TABLE OF bapimepoitem, "采购订单行项目
gwa_item TYPE bapimepoitem,
gt_itemx TYPE STANDARD TABLE OF bapimepoitemx,
gwa_itemx TYPE bapimepoitemx,
gt_poschedule TYPE STANDARD TABLE OF bapimeposchedule, "采购订单交货计划行的字段
gwa_poschedule TYPE bapimeposchedule, "采购订单交货计划行的字段
gt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
gwa_poschedulex TYPE bapimeposchedulx,
gt_pocond TYPE STANDARD TABLE OF bapimepocond,
gwa_pocond TYPE bapimepocond, "采购订单中的条件
gt_pocondx TYPE STANDARD TABLE OF bapimepocondx,
gwa_pocondx TYPE bapimepocondx,
gt_pocomponents TYPE STANDARD TABLE OF bapimepocomponent,
gwa_pocomponents TYPE bapimepocomponent,
gwa_pocomponents_temp TYPE bapimepocomponent,
gt_pocomponentsx TYPE STANDARD TABLE OF bapimepocomponentx,
gwa_pocomponentsx TYPE bapimepocomponentx.
DATA:lv_num TYPE bapimepoheader-po_number.
""""采购订单单据头赋值""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gs_poheader-doc_type = 'ZPO2'."采购订单类型:自营订单
gs_poheader-vendor = '0010000208'."供应商
gs_poheader-purch_org = '1100'."采购组织
gs_poheader-pur_group = 'A07'."采购组
gs_poheader-comp_code = '1100'."公司的,
gs_poheader-currency = 'CNY'."货币
gs_poheader-doc_date = sy-datum."单据日期
gs_poheader-langu = sy-langu."当前语言
gs_poheader-status = 'I'." 采购单状态,在域中可以查到所有装 I:来自 BAPI 的采购订单
* GS_POHEADER-INFO_UPD = 'I'.
* GS_POHEADER-ITEM_INTVL = ''.
* GS_POHEADER-ITEM_INTVL = ''.
"采购订单抬头数据(更改参数) 针对要增加的内容做一个标记,其实标记过了才可以被修改的""""""""""""""""""""""""""""""""""""""""
gs_poheaderx-doc_type = 'X'.
gs_poheaderx-vendor = 'X'.
gs_poheaderx-purch_org = 'X'.
gs_poheaderx-pur_group = 'X'.
gs_poheaderx-comp_code = 'X'.
gs_poheaderx-doc_date = 'X'.
gs_poheaderx-langu = 'X'.
gs_poheaderx-currency = 'X'."货币
gs_poheaderx-status = 'X'."货币
* GS_POHEADERX-ITEM_INTVL = 'X'.
"采购订单行项目""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gwa_item-po_item = '1'. "采购凭证的项目编号
gwa_item-material = '01.01.01.0060'."物料编号
gwa_item-item_cat = ''."采购凭证中的项目类别 800 I=空
"gwa_item-short_text = 'SHORT'."短文本,这个一般情况下不用,应该自动带出来,
gwa_item-quantity = 1."采购订单数量
gwa_item-po_unit = 'KG' ."采购订单的计量单位
gwa_item-plant = '1120'. "工厂
gwa_item-stge_loc = '1101'."库存地点
gwa_item-tax_code = 'J2'."税码
APPEND gwa_item TO gt_item.
"采购订单行项目允许修改""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gwa_itemx-po_item = '1'. "采购凭证的项目编号
gwa_itemx-material = 'X'.
"gwa_itemx-short_text = 'X'."短文本 "短文本,这个一般情况下不用,应该自动带出来,
gwa_itemx-quantity = 'X'."采购订单数量
gwa_itemx-po_unit = 'X' ."采购订单的计量单位
gwa_itemx-plant = 'X'."工厂
gwa_itemx-stge_loc = 'X'. "库存地点
gwa_itemx-item_cat = 'X'.
gwa_itemx-tax_code = 'X'.
" GWA_ITEMX-DATE_QTY_FIXED = 'X'."报错,可能是版本问题
APPEND gwa_itemx TO gt_itemx.
"采购订单[交货计划行]的字段"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gwa_poschedule-po_item = '1'. "采购凭证的项目编号
gwa_poschedule-sched_line = 0001. "采购凭证的项目编号
gwa_poschedule-del_datcat_ext = 'D'."交货日期的类别
gwa_poschedule-delivery_date = sy-datum."交货日期
gwa_poschedule-quantity = 1."采购订单数量
APPEND gwa_poschedule TO gt_poschedule.
""采购订单中的条件"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gwa_pocond-itm_number = '1'.
gwa_pocond-cond_type = 'PBXX'.
gwa_pocond-cond_value = 11. "价格
gwa_pocond-cond_unit = 'KG'. "条件单位
gwa_pocond-cond_p_unt = 1."GS_EXCEL_RAW0-PEINH. "价格单位
gwa_pocond-currency = 'CNY'."货币
gwa_pocond-change_id = 'U'.
* U 更新
*I 插入
*E 删除 (单字段文档)
*D 删除
*J 插入 (单字段文档)
APPEND gwa_pocond TO gt_pocond.
"采购订单中的条件不允许修,"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gwa_pocondx-itm_number = '1'.
gwa_pocondx-cond_type = 'X'.
gwa_pocondx-cond_value = 'X'.
gwa_pocondx-cond_unit = 'X'. "条件单位
gwa_pocondx-cond_p_unt = 'X'. "价格单位
gwa_pocondx-currency = 'X'.
gwa_pocondx-change_id = 'X'.
APPEND gwa_pocondx TO gt_pocondx.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = gs_poheader
poheaderx = gs_poheaderx
* POADDRVENDOR =
* TESTRUN =
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
no_price_from_po = 'X'
* PARK_COMPLETE =
* PARK_UNCOMPLETE =
IMPORTING
exppurchaseorder = lv_num "单据号
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
return = gt_return
poitem = gt_item
poitemx = gt_itemx
* POADDRDELIVERY =
poschedule = gt_poschedule
poschedulex = gt_poschedulex
* POACCOUNT =
* POACCOUNTPROFITSEGMENT =
* POACCOUNTX =
* POCONDHEADER =
* POCONDHEADERX =
pocond = gt_pocond
pocondx = gt_pocondx
* POLIMITS =
* POCONTRACTLIMITS =
* POSERVICES =
* POSRVACCESSVALUES =
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* POTEXTITEM =
* ALLVERSIONS =
* POPARTNER =
pocomponents = gt_pocomponents
pocomponentsx = gt_pocomponentsx.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WRITE:/ '单据号=',lv_num. "单据号,奇怪,报了错,依然sy-subrc = 0,在实战中考虑用lv_num单据号做为是否成功的判断,
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
WRITE:/ '采购订单BAPI生成失败'.
ENDIF.
CLEAR dd.
CLEAR gt_return.
ENDFORM. " P1