文章目录
- 前言
- 一、工具类创建
- 二、工具类方法
-
- [1.POST_DN 交货单过账](#1.POST_DN 交货单过账)
-
- [1.1 参数](#1.1 参数)
- [1.2 代码](#1.2 代码)
- [2.CREATE_DN_REF_SO 根据销售订单生成交货单](#2.CREATE_DN_REF_SO 根据销售订单生成交货单)
-
- [2.1 参数](#2.1 参数)
- [2.2 代码](#2.2 代码)
- [3.CREATE_STO_DN_REF_PO 根据采购订单生成交货单](#3.CREATE_STO_DN_REF_PO 根据采购订单生成交货单)
-
- [3.1 参数](#3.1 参数)
- [3.2 代码](#3.2 代码)
- [4.GET_XSLX_DATE 获取业务类型取值时间范围](#4.GET_XSLX_DATE 获取业务类型取值时间范围)
- [5.RECORD_EXCUTE_INFO 记录程序执行信息](#5.RECORD_EXCUTE_INFO 记录程序执行信息)
-
- [5.1 无参数](#5.1 无参数)
- [5.2 代码](#5.2 代码)
- [5.3 自建表](#5.3 自建表)
- [6.GET_TIMESTAMP 获取时间戳](#6.GET_TIMESTAMP 获取时间戳)
-
- [6.1 参数](#6.1 参数)
- [6.2 代码](#6.2 代码)
- [7.GET_MATNR_VALUE 获取物料是否启用价值管](#7.GET_MATNR_VALUE 获取物料是否启用价值管)
-
- [7.1 参数](#7.1 参数)
- [7.2 代码](#7.2 代码)
- [8. CHECK_DATE_VALIDATION 判断当前日期是否在有效账期内](#8. CHECK_DATE_VALIDATION 判断当前日期是否在有效账期内)
-
- [8.1 参数](#8.1 参数)
- [8.2 代码](#8.2 代码)
- 三、调用示例
前言
封装的ABAP交货单创建和过账工具类代码,主要是为了方便ABAP的开发,可以收藏保存以便后用.
一、工具类创建
事务代码SE24,名称ZCL_UTILITY


二、工具类方法
1.POST_DN 交货单过账
1.1 参数

1.2 代码
c
method POST_DN.
DATA: ls_header_data TYPE bapiobdlvhdrcon.
DATA: ls_header_control TYPE bapiobdlvhdrctrlcon.
DATA: lv_tzntstmps TYPE tzntstmps.
DATA: lv_date TYPE sy-datum.
DATA lt_header_deadlines TYPE TABLE OF bapidlvdeadln .
DATA ls_header_deadlines TYPE bapidlvdeadln .
lv_date = iv_date.
CALL FUNCTION 'FRE_CONVERT_DATE_TO_TIMESTMP'
EXPORTING
ip_start_date = lv_date
ip_time_zone = 'UTC'
IMPORTING
ep_start_date = lv_tzntstmps.
CLEAR:ls_header_data, ls_header_control.
ls_header_data-deliv_numb = iv_vbeln.
ls_header_control-deliv_numb = iv_vbeln .
ls_header_control-post_gi_flg = 'X'.
ls_header_control-volume_flg = 'X'.
CLEAR:lt_header_deadlines, ls_header_deadlines.
ls_header_deadlines-deliv_numb = iv_vbeln.
ls_header_deadlines-timestamp_utc = lv_tzntstmps.
ls_header_deadlines-timetype = 'WSHDRWADTI'.
APPEND ls_header_deadlines TO lt_header_deadlines.
"外向交货单发货过账
CLEAR:et_return.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC'
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = iv_vbeln
TABLES
header_deadlines = lt_header_deadlines
return = et_return.
LOOP AT et_return TRANSPORTING NO FIELDS WHERE type CA 'EA'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'RV_DELIVERY_INIT'
EXPORTING
status_buff_init = abap_true.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
endmethod.
2.CREATE_DN_REF_SO 根据销售订单生成交货单
2.1 参数

2.2 代码
c
method CREATE_DN_REF_SO.
DATA:lt_sales_order_items TYPE TABLE OF bapidlvreftosalesorder.
DATA:ls_sales_order_items TYPE bapidlvreftosalesorder.
SELECT vbap~vbeln,vbap~posnr INTO TABLE @DATA(lt_vbap) FROM vbap
WHERE vbeln = @iv_vbeln
##DB_FEATURE_MODE[TABLE_LEN_MAX1].
CLEAR: lt_sales_order_items.
LOOP AT lt_vbap INTO DATA(ls_vbap).
CLEAR ls_sales_order_items.
ls_sales_order_items-ref_doc = ls_vbap-vbeln.
ls_sales_order_items-ref_item = ls_vbap-posnr.
APPEND ls_sales_order_items TO lt_sales_order_items.
ENDLOOP.
CLEAR:ev_delivery_num,et_return.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
IMPORTING
delivery = ev_delivery_num
TABLES
sales_order_items = lt_sales_order_items
* SERIAL_NUMBERS =
* EXTENSION_IN =
* DELIVERIES =
* CREATED_ITEMS =
* EXTENSION_OUT =
return = et_return.
LOOP AT et_return TRANSPORTING NO FIELDS WHERE type CA 'EA'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'RV_DELIVERY_INIT'
EXPORTING
status_buff_init = abap_true.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
endmethod.
3.CREATE_STO_DN_REF_PO 根据采购订单生成交货单
3.1 参数

3.2 代码
c
method CREATE_STO_DN_REF_PO.
DATA:ls_item TYPE bapidlvreftosto.
DATA:lt_item TYPE TABLE OF bapidlvreftosto.
DATA:lt_created_items TYPE TABLE OF bapidlvitemcreated.
SELECT ebeln, ebelp, menge,meins INTO TABLE @DATA(lt_ekpo) FROM ekpo
WHERE ebeln = @iv_ebeln AND
loekz = @abap_false.
LOOP AT lt_ekpo INTO DATA(ls_ekpo) .
CLEAR ls_item.
ls_item-ref_doc = ls_ekpo-ebeln.
ls_item-ref_item = ls_ekpo-ebelp.
ls_item-dlv_qty = ls_ekpo-menge.
ls_item-sales_unit = ls_ekpo-meins.
APPEND ls_item TO lt_item.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
ship_point = iv_ship_point
due_date = '99991231'
* DEBUG_FLG =
* NO_DEQUEUE = ' '
IMPORTING
delivery = ev_delivery_num
* NUM_DELIVERIES =
TABLES
stock_trans_items = lt_item
* SERIAL_NUMBERS =
* EXTENSION_IN =
* DELIVERIES =
created_items = lt_created_items
* EXTENSION_OUT =
return = et_return.
LOOP AT et_return INTO DATA(ls_return) WHERE type CA 'EA'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
IF lines( lt_item ) = lines( lt_created_items ).
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CLEAR ev_delivery_num.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ls_return-type = 'E'.
MODIFY et_return FROM ls_return TRANSPORTING type WHERE type = 'W'.
ENDIF.
ENDIF.
endmethod.
4.GET_XSLX_DATE 获取业务类型取值时间范围
4.1参数


ZSDT_001是自建表,结构在下方
4.2代码
c
method GET_XSLX_DATE.
DATA: ls_xslx TYPE zsdt_001.
*** 获取所有业务类型
SELECT * INTO TABLE @DATA(lt_005) FROM zsdt_005.
*** 读取业务类型的取值范围
LOOP AT lt_005 INTO DATA(ls_005).
SELECT SINGLE * INTO @DATA(ls_001) FROM zsdt_001 WHERE zzxslx = @ls_005-zzxslx AND ztybs = @abap_false.
IF sy-subrc = 0.
CLEAR ls_xslx.
ls_xslx-zzxslx = ls_005-zzxslx.
ls_xslx-begda = ls_001-begda.
ls_xslx-endda = ls_001-endda.
APPEND ls_xslx TO rt_xslx.
ELSE.
CLEAR ls_xslx.
ls_xslx-zzxslx = ls_005-zzxslx.
ls_xslx-begda = '19000101'.
ls_xslx-endda = '99991230'.
APPEND ls_xslx TO rt_xslx.
ENDIF.
ENDLOOP.
endmethod.
4.3 自建表
4.3.1 ZSDT_001

未维护数据.
4.3.2 ZSDT_005

维护数据:

5.RECORD_EXCUTE_INFO 记录程序执行信息
5.1 无参数
5.2 代码
c
method RECORD_EXCUTE_INFO.
DATA: ls_record TYPE zcat_record.
CLEAR ls_record.
ls_record-cprog = sy-cprog.
ls_record-tcode = sy-tcode.
ls_record-datum = sy-datum.
ls_record-uzeit = sy-uzeit.
ls_record-uname = sy-uname.
MODIFY zcat_record FROM ls_record.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
endmethod.
5.3 自建表

6.GET_TIMESTAMP 获取时间戳
6.1 参数

6.2 代码
c
method GET_TIMESTAMP.
GET TIME STAMP FIELD rv_timestamp.
endmethod.
7.GET_MATNR_VALUE 获取物料是否启用价值管
7.1 参数

7.2 代码
c
method GET_MATNR_VALUE.
*** Get 物料类型
SELECT SINGLE mtart INTO @DATA(lv_mtart) FROM mara WHERE matnr = @iv_matnr.
*** 价值管理配置信息
SELECT SINGLE * INTO @DATA(ls_t134) FROM t134m WHERE bwkey = @iv_werks AND mtart = @lv_mtart.
IF ls_t134-wertu = abap_true.
rv_value = abap_true.
ELSE.
rv_value = abap_false.
ENDIF.
endmethod.
8. CHECK_DATE_VALIDATION 判断当前日期是否在有效账期内
8.1 参数

8.2 代码
c
method CHECK_DATE_VALIDATION.
DATA:lv_year TYPE bapi0002_4-fiscal_year.
DATA:lv_period TYPE bapi0002_4-fiscal_period.
*** 取日期的当前年度和当前日期
CLEAR: lv_period,lv_year.
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
companycodeid = iv_bukrs
posting_date = iv_date
IMPORTING
fiscal_year = lv_year
fiscal_period = lv_period
" RETURN =
.
CLEAR rv_result.
*** 取物料账期数据
SELECT SINGLE * INTO @DATA(ls_marv) FROM marv WHERE bukrs = @iv_bukrs.
IF ls_marv-xruem = abap_true.
IF ls_marv-lfgja = lv_year AND ls_marv-lfmon = lv_period.
rv_result = abap_true.
RETURN.
ENDIF.
IF ls_marv-vmgja = lv_year AND ls_marv-vmmon = lv_period.
rv_result = abap_true.
RETURN.
ENDIF.
ELSE.
IF ls_marv-lfgja = lv_year AND ls_marv-lfmon = lv_period.
rv_result = abap_true.
ENDIF.
ENDIF.
endmethod.