FORM frm_call_bapi USING u_data TYPE zcmt0002.
DATA:lv_salesdocument TYPE bapivbeln-vbeln, "so
ls_sales_header_in TYPE bapisdhd1,
ls_sales_header_inx TYPE bapisdhd1x.
DATA:lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2,
ls_sales_schedules_in TYPE bapischdl,
lt_sales_schedules_in TYPE STANDARD TABLE OF bapischdl,
ls_sales_schedules_inx TYPE bapischdlx,
lt_sales_schedules_inx TYPE STANDARD TABLE OF bapischdlx,
lt_sales_conditions_in TYPE STANDARD TABLE OF bapicond,
ls_sales_conditions_in TYPE bapicond,
ls_sales_conditions_inx TYPE bapicondx,
lt_sales_conditions_inx TYPE STANDARD TABLE OF bapicondx,
ls_sales_items_in TYPE bapisditm,
lt_sales_items_in TYPE STANDARD TABLE OF bapisditm,
ls_sales_items_inx TYPE bapisditmx,
lt_sales_items_inx TYPE STANDARD TABLE OF bapisditmx,
ls_sales_partners TYPE bapiparnr,
lt_sales_partners TYPE STANDARD TABLE OF bapiparnr,
ls_extensionin TYPE bapiparex,
lt_extensionin TYPE STANDARD TABLE OF bapiparex,
lt_textheaders_ex TYPE TABLE OF bapisdtehd,
ls_textheaders_ex TYPE bapisdtehd,
lt_textlines_ex TYPE TABLE OF bapitextli,
ls_textlines_ex TYPE bapitextli,
lt_schedule_ex TYPE TABLE OF bapisdhedu,
ls_schedule_ex TYPE bapisdhedu,
lt_items_ex LIKE TABLE OF bapisdit,
ls_items_ex LIKE bapisdit.
DATA:lv_kunag TYPE vbak-kunnr,
lv_posnr TYPE vbap-posnr,
lv_str TYPE string,
lv_dwerk TYPE mvke-dwerk,
lv_matnr TYPE mvke-matnr,
lv_spart TYPE mara-spart,
lv_waers TYPE knvv-waers,
lv_num TYPE i.
DATA:lv_tdname TYPE thead-tdname, "
lt_tline TYPE TABLE OF tline, "
ls_tline TYPE tline.
READ TABLE gt_docs INTO DATA(ls_docs) WITH KEY bstkd = u_data-key_value01 .
IF sy-subrc = 0.
CLEAR:lv_salesdocument,ls_sales_header_in,ls_sales_header_inx,lt_item,
lt_return,lt_sales_schedules_in,lt_sales_schedules_inx,lt_sales_conditions_in,
lt_sales_conditions_inx,lt_sales_items_in ,lt_sales_items_inx,lt_sales_partners,
lt_extensionin, lt_textheaders_ex,ls_textheaders_ex,lt_textlines_ex,ls_textlines_ex ,
lt_schedule_ex ,ls_schedule_ex,lt_items_ex ,ls_items_ex,lv_kunag,lv_posnr,lv_str,
lv_matnr,lv_spart,lv_waers,lv_num.
ls_sales_header_in-doc_type ="订单类型
ls_sales_header_in-sales_org ="销售组织
ls_sales_header_in-distr_chan ="销售渠道
ls_sales_header_in-doc_date ="提单有效期到
ls_sales_header_in-created_by ="创建人
ls_sales_header_in-purch_no_c ="提单号
ls_sales_header_in-division =" 产品组
ls_sales_header_inx-updateflag = 'I'.
ls_sales_header_inx-doc_type = 'X'."订单类型
ls_sales_header_inx-sales_org = 'X'."销售组织
ls_sales_header_inx-distr_chan = 'X' ."销售渠道
ls_sales_header_inx-doc_date = 'X'."提单有效期到
ls_sales_header_inx-s_proc_ind = 'X'."混规标识
ls_sales_header_inx-purch_no_c = 'X'."提单号
ls_sales_header_inx-division = 'X' ." 产品组
ls_sales_partners-partn_role = 'AG'.
ls_sales_partners-partn_numb = "售达方
ls_sales_partners-country = 'CN'.
APPEND ls_sales_partners TO lt_sales_partners.
CLEAR ls_sales_partners.
ls_sales_partners-partn_role = 'WE'.
ls_sales_partners-partn_numb = "收货方
SELECT SINGLE name1 pstlz regio anred ort01 FROM kna1
INTO (ls_sales_partners-name,ls_sales_partners-postl_code,
ls_sales_partners-region,ls_sales_partners-title,
ls_sales_partners-city)
WHERE kunnr ="售达方
ls_sales_partners-country = 'CN'.
APPEND ls_sales_partners TO lt_sales_partners.
CLEAR ls_sales_partners.
ls_sales_items_in-plant = "工厂
ls_sales_items_in-ship_point = "装运点
ls_sales_items_in-itm_number = "销售凭证项目
ls_sales_items_in-material ="物料
ls_sales_items_in-store_loc = "发货仓库
APPEND ls_sales_items_in TO lt_sales_items_in.
CLEAR ls_sales_items_in.
ls_sales_items_inx-plant = 'X'."工厂
ls_sales_items_inx-ship_point = 'X'."装运点
ls_sales_items_inx-itm_number = lv_posnr.
ls_sales_items_inx-material = 'X'.
ls_sales_items_inx-store_loc = 'X'.
APPEND ls_sales_items_inx TO lt_sales_items_inx.
CLEAR ls_sales_items_inx.
ls_sales_schedules_in-itm_number = lv_posnr.
ls_sales_schedules_in-sched_line = 1.
ls_sales_schedules_in-req_qty = "订单数量
APPEND ls_sales_schedules_in TO lt_sales_schedules_in.
CLEAR ls_sales_schedules_in.
ls_sales_schedules_inx-itm_number = lv_posnr.
ls_sales_schedules_inx-sched_line = 1.
ls_sales_schedules_inx-req_qty = 'X'.
APPEND ls_sales_schedules_inx TO lt_sales_schedules_inx.
CLEAR :ls_sales_schedules_inx.
ls_items_ex-itm_number = lv_posnr.
ls_items_ex-creat_date = "提单创建日期
APPEND ls_items_ex TO lt_items_ex.
CLEAR ls_items_ex.
"录入价格相关数据
SELECT SINGLE"通过销售组织 分销渠道获取到客户的定价过程 用于判断价格是用pr00 还是zpr1
t~vkorg, t~vtweg, t~spart, t~kalsm, t~kartv, k~kalks,k~kunnr, t~kalvg
FROM t683v AS t INNER
JOIN knvv AS k ON t~vkorg = k~vkorg
AND t~kalks = k~kalks INNER
JOIN tvkov AS v ON v~vkorg = k~vkorg
AND v~vtwku = k~vtweg INNER
JOIN tvkos AS s ON s~vkorg = k~vkorg
AND s~spaku = k~spart INNER
JOIN tvak AS a ON t~kalvg = a~kalvg
INTO @DATA(ls_t683v)
WHERE t~vkorg = "销售组织
AND t~vtweg = "销售渠道
AND t~spart = "产品组
AND a~auart = "订单类型
AND t~kalsm IN ('Z00002','Z00007')
AND k~kunnr = "售达方.
IF 单价 IS NOT INITIAL."单价(含税)
ls_sales_conditions_in-itm_number = "销售凭证项目.
ls_sales_conditions_in-cond_st_no = '011'. "步骤
ls_sales_conditions_in-cond_type = ls_t683v-kartv."'PR00'. " "Condition type
ls_sales_conditions_in-cond_value = "单价."
ls_sales_conditions_in-currency = "币种."'CNY'.
APPEND ls_sales_conditions_in TO lt_sales_conditions_in.
CLEAR ls_sales_conditions_in.
ls_sales_conditions_inx-itm_number = "销售凭证项目. "Condition item number
ls_sales_conditions_inx-cond_st_no = '011'. "步骤
ls_sales_conditions_inx-cond_type = ls_t683v-kartv."'PR00'. " "Condition type
ls_sales_conditions_inx-cond_value = 'X'."
ls_sales_conditions_inx-updateflag = 'I'.
ls_sales_conditions_inx-currency = 'X'.
APPEND ls_sales_conditions_inx TO lt_sales_conditions_inx.
CLEAR ls_sales_conditions_inx.
ENDIF.
"返回销售订单号给发起系统
CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE' "退货单创建
EXPORTING
return_header_in = ls_sales_header_in
return_header_inx = ls_sales_header_inx
IMPORTING
salesdocument = lv_salesdocument
TABLES
return = lt_return
return_items_in = lt_sales_items_in
return_items_inx = lt_sales_items_inx
return_partners = lt_sales_partners
return_schedules_in = lt_sales_schedules_in
return_schedules_inx = lt_sales_schedules_inx
return_conditions_in = lt_sales_conditions_in.
IF lv_salesdocument IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
LOOP AT gt_log ASSIGNING FIELD-SYMBOL(<fs_log>) WHERE key_value01 = ls_docs-bstkd.
* 更新日志 <fs_log>
-status = cns_sucss. <fs_log>
-fkey_value01 = lv_salesdocument.
MESSAGE s028(zcm) INTO lv_str WITH lv_salesdocument. <fs_log>
-message = lv_str ."TEXT-t05 && lv_salesdocument && '已生成'.
* 更新返回表 gs_ret
-key_value01 = <fs_log>-key_value01. gs_ret
-status = cns_sucss. gs_ret
-message = <fs_log>-message. gs_ret
-fkey_value01 = lv_salesdocument.
APPEND gs_ret TO gt_rets.
ENDLOOP.
UPDATE vbak SET XX = ls_docs-XX"更新抬头增强字段
WHERE vbeln = lv_salesdocument.
IF sy-subrc = 0 .
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
"添加so抬头文本 lv_tdname
= lv_salesdocument. ls_tline
-tdformat = '01'. ls_tline
-tdline = ls_docs-zcommt.
APPEND ls_tline TO lt_tline.
CLEAR ls_tline.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING fid
= '0001' flanguage
= '1' fname
= lv_tdname fobject
= 'VBBK'
TABLES flines
= lt_tline
EXCEPTIONS no_init
= 1 no_save
= 2
OTHERS = 3.
****给行项目文本进行赋值
CLEAR:lv_posnr.
LOOP AT lt_item INTO ls_item ." WHERE zrsv01 <> '' .
CLEAR:lv_tdname,lt_tline.
ADD 10 TO lv_posnr..
IF ls_item-zrsv01 <> '' . lv_tdname
= lv_salesdocument && lv_posnr. ls_tline
-tdformat = '01'. ls_tline
-tdline = ls_item-zrsv01.
APPEND ls_tline TO lt_tline.
CLEAR ls_tline.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING fid
= '0001' flanguage
= '1' fname
= lv_tdname fobject
= 'VBBP'
TABLES flines
= lt_tline
EXCEPTIONS no_init
= 1 no_save
= 2
OTHERS = 3.
ENDIF.
CLEAR:ls_item,lt_return,lt_sales_items_in, lt_sales_items_inx, lt_sales_partners
, lt_sales_schedules_in,lt_sales_schedules_inx
, lt_sales_conditions_in.
ENDLOOP.
ELSE.
CLEAR: lv_str.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT lt_return INTO ls_return.
IF ls_return-type CA 'AEX'. lv_str
= lv_str && ls_return-message.
LOOP AT gt_log ASSIGNING <fs_log> WHERE key_value01 = ls_docs-bstkd.
* 更新日志 <fs_log>
-status = cns_error. <fs_log>
-fkey_value01 = lv_salesdocument. <fs_log>
-message = lv_str.
* 更新返回表 gs_ret
-key_value01 = <fs_log>-key_value01. gs_ret
-status = <fs_log>-status. gs_ret
-message = <fs_log>-message. gs_ret
-fkey_value01 = <fs_log>-key_value01.
APPEND gs_ret TO gt_rets.
ENDLOOP.
ENDIF.
ENDLOOP.
CLEAR:ls_item,lt_return,lt_sales_items_in, lt_sales_items_inx, lt_sales_partners
, lt_sales_schedules_in,lt_sales_schedules_inx
, lt_sales_conditions_in..
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
单价(含税)