FUNCTION zmm_jsd_creatpo .
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(JSD) TYPE ZMM_YS_JSD_HEAD-JSD
*" EXPORTING
*" VALUE(E_FLAG) TYPE CHAR1
*" VALUE(E_INFO) TYPE TEXT60
*" VALUE(EBELN) TYPE EBELN
*"----------------------------------------------------------------------
* 根據結算單生成采購訂單 根據稅碼、物料組 分成多個行項目
*"----------------------------------------------------------------------
DATA : header LIKE bapimepoheader ,
headerx LIKE bapimepoheaderx .
DATA : it_return TYPE TABLE OF bapiret2 WITH HEADER LINE ,
it_poitem TYPE TABLE OF bapimepoitem WITH HEADER LINE ,
it_poitemx TYPE TABLE OF bapimepoitemx WITH HEADER LINE ,
it_poschedule TYPE TABLE OF bapimeposchedule WITH HEADER LINE ,
it_poschedulex TYPE TABLE OF bapimeposchedulx WITH HEADER LINE ,
it_poaccount TYPE TABLE OF bapimepoaccount WITH HEADER LINE ,
it_poaccountx TYPE TABLE OF bapimepoaccountx WITH HEADER LINE ,
it_polimits TYPE TABLE OF bapiesuhc WITH HEADER LINE ,
it_povalues TYPE TABLE OF bapiesklc WITH HEADER LINE ,
it_poservice TYPE TABLE OF bapiesllc WITH HEADER LINE .
DATA ext_line TYPE n LENGTH 10 .
DATA line_no TYPE n LENGTH 10 .
DATA pckg_no TYPE n LENGTH 10 .
DATA po_item TYPE n LENGTH 5 . "行項目編号
DATA serial_no TYPE n LENGTH 2 .
DATA short_text TYPE c LENGTH 40 . "項目短文本
DATA head_zterm TYPE lfm1 -zterm . "付款條件
DATA : gw_jsd_head LIKE zmm_ys_jsd_head ,
gw_jsd_item LIKE zmm_ys_jsd_item ,
gt_jsd_item LIKE TABLE OF zmm_ys_jsd_item .
"結算單暫存結構
TYPES : BEGIN OF ty_ys_jsd ,
beznk LIKE zmm_ys_jsd_item -beznk , "稅碼
matkl LIKE asmd -matkl , "物料組
asnum LIKE zmm_ys_jsd_item -asnum , "服務編号
jsd LIKE zmm_ys_jsd_item -jsd ,
jsdhh LIKE zmm_ys_jsd_item -jsdhh ,
qd LIKE zmm_ys_jsd_item -qd ,
zd LIKE zmm_ys_jsd_item -zd ,
smatnr LIKE zmm_ys_jsd_item -smatnr ,
kostl LIKE zmm_ys_jsd_item -kostl ,
shdw LIKE zmm_ys_jsd_item -shdw ,
ctype LIKE zmm_ys_jsd_item -ctype ,
menge LIKE zmm_ys_jsd_item -menge ,
meins LIKE zmm_ys_jsd_item -meins ,
hsdj LIKE zmm_ys_jsd_item -hsdj ,
bhsdj LIKE zmm_ys_jsd_item -bhsdj ,
cbckk LIKE zmm_ys_jsd_item -cbckk ,
se LIKE zmm_ys_jsd_item -se ,
bhsj LIKE zmm_ys_jsd_item -bhsj ,
hsj LIKE zmm_ys_jsd_item -hsj ,
beizhu LIKE zmm_ys_jsd_item -beizhu .
TYPES : END OF ty_ys_jsd .
DATA : gw_jsd_date TYPE ty_ys_jsd ,
gt_jsd_date TYPE TABLE OF ty_ys_jsd .
DATA : g_jsdlx TYPE zmm_ys_jsd_head -jsdlx , "結算單類型
g_lxms TYPE zmm_ys_jsdlx -lxms . "類型描述
e_flag = '0' .
e_info = '采購訂單建立成功!' .
CLEAR :gw_jsd_head ,gt_jsd_item .
"結算單擡頭
SELECT * FROM zmm_ys_jsd_head INTO gw_jsd_head WHERE jsd = jsd .
IF sy -subrc NE 0 .
e_flag = '1' .
e_info = '該結算單不存在!' .
ELSE .
IF gw_jsd_head -ebeln IS NOT INITIAL .
e_flag = '2' .
e_info = '該結算單已經建立采購訂單!' .
ENDIF .
ENDIF .
"取得結算單類型描述
g_jsdlx = gw_jsd_head -jsdlx .
SELECT SINGLE lxms FROM zmm_ys_jsdlx INTO g_lxms WHERE jsdlx EQ g_jsdlx .
"結算單行項目
SELECT * FROM zmm_ys_jsd_item INTO TABLE gt_jsd_item WHERE jsd = jsd .
"根據 供應商 與采購組織 找到付款條件
SELECT SINGLE zterm FROM lfm1 INTO head_zterm WHERE lifnr = gw_jsd_head -lifnr AND ekorg = '1000' .
ENDSELECT .
IF e_flag NE '0' .
RETURN .
ENDIF .
CLEAR :gw_jsd_item , gt_jsd_date .
"資料庫資料存入自建結構
LOOP AT gt_jsd_item INTO gw_jsd_item .
CLEAR : gw_jsd_date ,gw_jsd_date -matkl .
MOVE-CORRESPONDING gw_jsd_item TO gw_jsd_date .
"根據服務編号取得物料組
SELECT SINGLE matkl FROM asmd INTO gw_jsd_date -matkl WHERE asnum EQ gw_jsd_date -asnum .
IF sy -subrc <> 0 .
gw_jsd_date -matkl = '無物料組' .
ENDIF .
APPEND gw_jsd_date TO gt_jsd_date .
ENDLOOP .
"根據稅碼、物料組排序。
SORT gt_jsd_date BY beznk matkl .
***采購訂單擡頭
header -comp_code = '1000' . "公司代碼EKKO-BUKRS
header -doc_type = 'YS' . "YS(運輸服務采購訂單)
header -creat_date = sy -datum . "建立日期
header -vendor = gw_jsd_head -lifnr .
header -pmnttrms = head_zterm . "付款條件 "0001
header -incoterms2 = jsd . "國際貿易條件 儲存結算單号
header -purch_org = '1000' . "采購組織EKKO-EKORG
header -pur_group = '900' . "采購組EKKO-EKGRP:900(服務采購)
header - currency = 'RMB' . "貨币代碼
header -doc_date = sy -datum . "采購憑證日期
headerx -comp_code = 'X' .
headerx -doc_type = 'X' .
headerx -creat_date = 'X' .
headerx -vendor = 'X' .
headerx -langu = 'X' .
headerx -pmnttrms = 'X' .
headerx -incoterms2 = 'X' .
headerx -purch_org = 'X' .
headerx -pur_group = 'X' .
headerx - currency = 'X' .
headerx -doc_date = 'X' .
serial_no = '00' . "帳戶配置設定規範序号:服務行
ext_line = '0000000000' . "行号
line_no = '0000000001' . "内部行編号
po_item = '00000' . "行項目号
pckg_no = '0000000000' .
"行項目,資料集中處理
LOOP AT gt_jsd_date INTO gw_jsd_date .
"服務描述
CLEAR :short_text .
CONCATENATE sy -datum+4 ( 2 ) '月_' g_lxms INTO short_text .
"采購訂單項目
AT NEW matkl .
pckg_no = pckg_no + 1 .
po_item = po_item + 10 .
ext_line = '0000000000' .
line_no = '0000000001' .
it_poitem -po_item = po_item .
it_poitem -short_text = short_text . "服務描述
it_poitem -plant = '1000' . "工廠EKPO-WERKS
it_poitem -matl_group = gw_jsd_date -matkl . "服務主資料中的物料組
it_poitem -tax_code = gw_jsd_date -beznk . "結算單中服務對應稅碼
it_poitem -unlimited_dlv = 'X' .
it_poitem -item_cat = 'D' .
it_poitem -acctasscat = 'X' .
it_poitem -srv_based_iv = 'X' .
pckg_no = pckg_no + 1 .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = pckg_no
IMPORTING
output = pckg_no .
it_poitem -pckg_no = pckg_no .
APPEND it_poitem .
it_poitemx -po_item = po_item .
it_poitemx -po_itemx = 'X' .
it_poitemx -short_text = 'X' .
it_poitemx -plant = 'X' .
it_poitemx -matl_group = 'X' .
it_poitemx -tax_code = 'X' .
it_poitemx -unlimited_dlv = 'X' .
it_poitemx -item_cat = 'X' .
it_poitemx -acctasscat = 'X' .
it_poitemx -pckg_no = 'X' .
it_poitemx -srv_based_iv = 'X' .
APPEND it_poitemx .
"FILL SCHEDULE
it_poschedule -po_item = po_item .
it_poschedule -del_datcat_ext = 'D' .
it_poschedule -delivery_date = sy -datum .
it_poschedule -quantity = '1' . "計劃數量
* it_poschedule-sched_line = '0001' .
APPEND it_poschedule .
it_poschedulex -po_item = po_item .
it_poschedulex -po_itemx = 'X' .
it_poschedulex -del_datcat_ext = 'X' .
it_poschedulex -delivery_date = 'X' .
it_poschedulex -sched_line = 'X' .
it_poschedulex -sched_linex = 'X' .
it_poschedulex -quantity = 'X' .
APPEND it_poschedulex .
"服務包資料,一個行項目隻有一條此資料
it_poservice -pckg_no = pckg_no .
it_poservice -line_no = line_no .
it_poservice -ext_line = ext_line .
pckg_no = pckg_no + 1 .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = pckg_no
IMPORTING
output = pckg_no .
it_poservice -subpckg_no = pckg_no .
APPEND it_poservice .
ENDAT .
"開始處理服務明細
ext_line = ext_line + 10 .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ext_line
IMPORTING
output = ext_line .
line_no = line_no + 1 .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = line_no
IMPORTING
output = line_no .
it_poservice -pckg_no = pckg_no .
it_poservice -line_no = line_no .
it_poservice -ext_line = ext_line .
it_poservice -subpckg_no = '0000000000' .
it_poservice -ext_serv = gw_jsd_date -jsdhh . "結算單行号
it_poservice -service = gw_jsd_date -asnum . "服務編碼
it_poservice -matl_group = gw_jsd_date -matkl . "物料組
it_poservice -quantity = gw_jsd_date -menge . "數量
it_poservice -base_uom = gw_jsd_date -meins . "機關
it_poservice -gr_price = gw_jsd_date -bhsdj . "不含稅單價
it_poservice -tax_code = gw_jsd_date -beznk . "稅碼
it_poservice -short_text = gw_jsd_date -beizhu . "備注
APPEND it_poservice .
CLEAR it_poservice .
"*FILL ACCOUNT VALUE
serial_no = serial_no + 1 .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = serial_no
IMPORTING
output = serial_no .
it_povalues -pckg_no = pckg_no .
it_povalues -line_no = line_no .
it_povalues -serno_line = serial_no .
it_povalues -serial_no = serial_no .
APPEND it_povalues .
CLEAR it_povalues .
"科目成本中心資訊,一個行項目隻有一條此資料
it_poaccount -po_item = po_item .
it_poaccount -serial_no = serial_no .
* it_poaccount-gl_account = '1480000010' .
it_poaccount -costcenter = gw_jsd_date -kostl . "成本中心 '1000510000'."
it_poaccount -co_area = '1000' .
APPEND it_poaccount .
it_poaccountx -po_item = po_item .
it_poaccountx -gl_account = 'X' .
it_poaccountx -costcenter = 'X' .
it_poaccountx -co_area = 'X' .
APPEND it_poaccountx .
ENDLOOP .
"建立 BAPI
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = header
poheaderx = headerx
IMPORTING
exppurchaseorder = ebeln
TABLES
return = it_return[]
poitem = it_poitem[]
poitemx = it_poitemx[]
poschedule = it_poschedule[]
poschedulex = it_poschedulex[]
poaccount = it_poaccount[]
poaccountx = it_poaccountx[]
polimits = it_polimits[]
poservices = it_poservice[]
posrvaccessvalues = it_povalues[] .
DATA : str TYPE c LENGTH 60 .
LOOP AT it_return WHERE type = 'E' .
e_flag = '2' .
* str = e_info.
CLEAR e_info .
CONCATENATE str it_return - message INTO e_info .
ENDLOOP .
IF e_flag = '0' .
e_info = '采購訂單建立成功!' .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .
ENDIF .
ENDFUNCTION .