注意:数量和金额必须用字符,否则 0.81 会变成81
*&---------------------------------------------------------------------*
*& Report ZSDR006B
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSDR006B.
INCLUDE ZSDR006B_TOP.
INCLUDE ZSDR006B_SCR.
INCLUDE ZSDR006B_FRM.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE' " 给按钮添加图标和文本
EXPORTING
name = icon_wd_dropdown_key " 按钮的图片的名字
text = '模板下载' "按钮的文本
info = 'MBXZ'
IMPORTING
result = p_mbxz
EXCEPTIONS
OTHERS = 0.
AT SELECTION-SCREEN.
IF sscrfields-ucomm EQ 'MBXZ'.
PERFORM frm_excel_down.
sscrfields-ucomm = ''.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path .
PERFORM get_filename CHANGING p_path.
START-OF-SELECTION.
PERFORM get_file_data.
end-of-SELECTION.
PERFORM get_data.
PERFORM alv.
*&---------------------------------------------------------------------*
*& 包含 ZSDR006B_TOP
*&---------------------------------------------------------------------*
TABLES: sscrfields.
DATA:BEGIN OF wa_item_mes,
checkbox TYPE char1, "勾选框
status TYPE char10, "红绿灯
mes_01 TYPE char1, "提示类别
mes_02 TYPE string, "错误信息
END OF wa_item_mes.
DATA:BEGIN OF wa_item,
vbeln LIKE vbak-vbeln, "系统订单编号
audat TYPE char10, "下单日期
bstdk TYPE char10, "客户参考日期/发货日期
auart LIKE vbak-auart, "单据类型
vkbur LIKE vbak-vkbur, "销售部门/销售办事处
bstnk LIKE vbak-bstnk, "客户参考/平台单号
* bname LIKE vbak-bname, "名称/旺旺号
cpmc LIKE zsdt003-cpmc, "产品名称/商品编码
* MATNR LIKE zsdt003-MATNR, "规格代码
* GGMC LIKE zsdt003-GGMC, "规格名称
* bzfs LIKE zsdt003-bzfs, "包装方式
kwmeng LIKE vbap-kwmeng, "数量
txt_01 TYPE string, "行项目文本.订单行项目文本
lgort LIKE vbap-lgort, "库存地点
* txt_02 TYPE string, "物流方式
vsbed LIKE vbak-vsbed, "装运条件
* txt_03 TYPE string, "物流单号
ihrez LIKE vbak-ihrez, "您的参考/客户联系人
kmein LIKE vbap-kmein, "单位
txt_04 TYPE string, "抬头文本,订单抬头文本
kbetr LIKE konv-kbetr, "单价
zongje LIKE konv-kbetr, "总金额
waerk LIKE vbap-waerk, "货币
zterm LIKE vbkd-zterm, "付款条件
matnr_01 LIKE vbap-matnr, "物料编码
ggxh LIKE zsdt003-ggxh, "规格型号
cpmc_01 LIKE zsdt003-cpmc_01, "物料描述
edatu TYPE char10, "请求交货日期
pstyv LIKE vbap-pstyv, "行项目类别
vkorg LIKE vbak-vkorg, "销售组织
vtweg LIKE vbak-vtweg, "分销渠道
spart LIKE vbak-spart, "产品组
vkgrp LIKE vbak-vkgrp, "销售组
kunnr LIKE vbak-kunnr, "客户编码
kunnr_01 LIKE vbak-kunnr, "送达方
werks LIKE vbap-werks, "工厂
augru LIKE vbak-augru, "订单原因
posnr LIKE vbap-posnr, "行项目
kpein LIKE vbap-kpein, "价格单位
bs_txt TYPE c. "标识不写入文本
* audat_d_01 like sy-datum,"下单日期 day类型
INCLUDE STRUCTURE wa_item_mes.
DATA:END OF wa_item.
DATA:gt_item LIKE TABLE OF wa_item,
gt_item_01 LIKE TABLE OF wa_item,
gt_item_02 LIKE TABLE OF wa_item,
gt_item_po LIKE TABLE OF wa_item,
gt_item_po_01 LIKE TABLE OF wa_item,
gt_item_po_02 LIKE TABLE OF wa_item.
DATA: gs_order_header_in TYPE bapisdhd1, "销售订单抬头
gs_order_header_inx TYPE bapisdhd1x,
gs_return_header_in TYPE bapisdhd1,
gs_return_header_inx TYPE bapisdhd1x,
gs_order_items_in LIKE bapisditm, "销售订单行项目
gs_order_items_inx LIKE bapisditmx,
gs_order_partners LIKE bapiparnr, "销售订单:合作伙伴
gs_return_items_in LIKE bapisditm,
gs_return_items_inx LIKE bapisditmx,
gs_return_partners LIKE bapiparnr,
gs_order_conditions_in LIKE bapicond, "销售订单:通讯字段
gs_order_conditions_inx LIKE bapicondx,
gs_return_conditions_in LIKE bapicond,
gs_order_header_in_s TYPE bapisdhead,
gs_order_items_in_s LIKE bapiitemin,
gs_order_partners_s LIKE bapipartnr,
gs_order_schedule_in LIKE bapischdl,
gs_order_items_out LIKE bapiitemex,
gs_order_condition_ex LIKE bapicond,
gt_order_items_in TYPE TABLE OF bapisditm, "销售订单行项目
gt_order_items_inx TYPE TABLE OF bapisditmx,
gt_order_partners TYPE TABLE OF bapiparnr,
gt_return_items_in TYPE TABLE OF bapisditm,
gt_return_items_inx TYPE TABLE OF bapisditmx,
gt_return_partners TYPE TABLE OF bapiparnr,
gt_order_conditions_in TYPE TABLE OF bapicond,
gt_order_conditions_inx TYPE TABLE OF bapicondx,
gt_return_conditions_in TYPE TABLE OF bapicond,
gt_order_header_in_s TYPE TABLE OF bapisdhead,
gt_order_items_in_s LIKE TABLE OF bapiitemin,
gt_order_partners_s LIKE TABLE OF bapipartnr,
gt_order_schedule_in LIKE TABLE OF bapischdl,
gt_order_items_out LIKE TABLE OF bapiitemex,
gt_order_condition_ex LIKE TABLE OF bapicond,
gs_order_schedules_in LIKE bapischdl,
gt_order_schedules_in LIKE TABLE OF bapischdl,
gs_return_schedules_in LIKE bapischdl,
gt_return_schedules_in LIKE TABLE OF bapischdl,
wa_return LIKE bapiret2,
return LIKE TABLE OF bapiret2,
gs_text LIKE bapisdtext,
gt_text TYPE TABLE OF bapisdtext.
TYPE-POOLS:truxs.
DATA:xlstab TYPE truxs_t_text_data.
DATA:matnr_18 TYPE char18.
DATA:l_switch TYPE TABLE OF bapisdls WITH HEADER LINE.
l_switch-pricing = 'G'.
APPEND l_switch.
DATA:w_text TYPE tline,
l_text TYPE TABLE OF tline,
tdname TYPE thead-tdname,
vbtyp TYPE c.
DATA:mes_str TYPE string.
TYPE-POOLS:slis.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv, "lvc_t_fcat, "列描述内表,列清单
wa_fieldcat LIKE LINE OF it_fieldcat,
it_layout TYPE slis_layout_alv. "lvc_s_layo. "表格规格属性内表
CONSTANTS cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND' .
DATA:z_pp_0001 TYPE REF TO zhele_pp_0001.
CREATE OBJECT z_pp_0001.
*&---------------------------------------------------------------------*
*& 包含 ZSDR006B_SCR
*&---------------------------------------------------------------------*
PARAMETERS p_path LIKE rlgrap-filename." OBLIGATORY.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN PUSHBUTTON 4(20) p_mbxz USER-COMMAND mbxz. " 定义搜索按钮
*&---------------------------------------------------------------------*
*& 包含 ZSDR006B_FRM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含 ZSDR003_FRM
*&---------------------------------------------------------------------*
FORM frm_excel_down .
* 相关变量定义
DATA:lo_objdata LIKE wwwdatatab,
lo_mime LIKE w3mime,
lc_filename TYPE string VALUE '销售订单批导模板',
lc_fullpath TYPE string VALUE 'c:\',
lc_path TYPE string VALUE 'c:\',
ls_destination LIKE rlgrap-filename,
ls_objnam TYPE string,
l_rc LIKE sy-subrc,
ls_errtxt TYPE string,
l_objid TYPE wwwdatatab-objid,
l_dest LIKE sapb-sappfad.
* 模版上传的对象名
l_objid = 'ZSDR006B'.
* 模板下载路径名
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '模板下载'
default_extension = 'XLS'
default_file_name = lc_filename
CHANGING
filename = lc_filename
path = lc_path
fullpath = lc_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
* 没有选择路径
IF lc_fullpath = ''.
MESSAGE '请选择正确的路径!' TYPE 'E'.
ELSE.
*- 路径名
l_dest = lc_fullpath.
SELECT SINGLE
relid "IMPORT/EXPORT 记录中的区域
objid "SAP WWW 网关对象名
FROM wwwdata
INTO CORRESPONDING FIELDS OF lo_objdata
WHERE srtf2 = 0
AND relid = 'MI'
AND objid = l_objid.
IF sy-subrc <> 0 OR lo_objdata-objid IS INITIAL.
MESSAGE '没有获得模板数据' TYPE 'E'.
ENDIF.
ls_destination = l_dest.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = ls_destination
IMPORTING
rc = l_rc.
IF l_rc <> 0.
MESSAGE '模板下载失败' TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM.
FORM get_filename CHANGING p_path.
DATA: l_v_file_filter TYPE string.
DATA: l_v_filetable TYPE file_table,
l_t_filetable TYPE filetable.
DATA: l_v_rc TYPE i.
DATA: l_v_user_action TYPE i.
l_v_file_filter = '(*.xlsx;*.xls)|*.xlsx;*.xls|'.
cl_gui_frontend_services=>file_open_dialog(
EXPORTING window_title = 'Select file'
file_filter = l_v_file_filter
CHANGING file_table = l_t_filetable
rc = l_v_rc
user_action = l_v_user_action ).
CHECK l_v_user_action EQ 0.
CHECK l_t_filetable[] IS NOT INITIAL.
READ TABLE l_t_filetable INTO l_v_filetable INDEX 1.
p_path = l_v_filetable-filename.
ENDFORM. " GET_FILENAME
FORM get_file_data .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = '2'
i_tab_raw_data = xlstab
i_filename = p_path
TABLES
i_tab_converted_data = gt_item
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* LOOP AT gt_data INTO gw_data.
* TRANSLATE gw_data-bsart TO UPPER CASE.
* TRANSLATE gw_data-mtabc TO UPPER CASE.
* MODIFY gt_data FROM gw_data.
* ENDLOOP.
ENDFORM. "get_file_data
FORM get_data.
DATA:i TYPE posnr_va.
APPEND LINES OF gt_item TO gt_item_po.
LOOP AT gt_item INTO wa_item.
"必输信息,不能为空
* IF wa_item-bstdk IS INITIAL
IF wa_item-auart IS INITIAL
* OR wa_item-vkbur IS INITIAL
* OR wa_item-bstnk IS INITIAL
* OR wa_item-bname IS INITIAL
* OR wa_item-matnr IS INITIAL
* OR wa_item-ggmc IS INITIAL
* OR wa_item-cpmc IS INITIAL
OR wa_item-kwmeng IS INITIAL
OR wa_item-lgort IS INITIAL
* OR wa_item-txt_02 IS INITIAL
* OR wa_item-txt_03 IS INITIAL
* OR wa_item-ihrez IS INITIAL
OR wa_item-kmein IS INITIAL
* OR wa_item-txt_04 IS INITIAL
* OR ( wa_item-kbetr IS INITIAL and wa_item-pstyv <> 'ZANN' )
OR wa_item-waerk IS INITIAL
OR wa_item-zterm IS INITIAL
OR wa_item-edatu IS INITIAL
OR wa_item-pstyv IS INITIAL
OR wa_item-vkorg IS INITIAL
OR wa_item-vtweg IS INITIAL
* OR wa_item-vkgrp IS INITIAL
OR wa_item-kunnr IS INITIAL
OR wa_item-kunnr_01 IS INITIAL
OR wa_item-werks IS INITIAL.
"提示字段不能为空,
wa_item-mes_01 = 'E'.
wa_item-mes_02 = '必输字段不能为空,请检查!'.
ENDIF.
IF wa_item-vbeln IS NOT INITIAL.
APPEND wa_item TO gt_item_01.
APPEND wa_item TO gt_item_po_01.
ELSE.
APPEND wa_item TO gt_item_02.
APPEND wa_item TO gt_item_po_02.
ENDIF.
ENDLOOP.
CLEAR:gt_item,wa_item.
SORT gt_item_01 BY vbeln.
SORT gt_item_po_01 BY vbeln.
DELETE ADJACENT DUPLICATES FROM gt_item_01 COMPARING vbeln.
SORT gt_item_02 BY bstnk.
SORT gt_item_po_02 BY bstnk.
DELETE ADJACENT DUPLICATES FROM gt_item_02 COMPARING bstnk.
"有 销售订单号 的单据处理
LOOP AT gt_item_01 INTO DATA(wa_item_01)
WHERE mes_01 = ''.
CLEAR:gs_order_header_in,
gs_order_header_inx,
gt_order_items_in,
gt_order_items_inx,
gt_order_partners,
gt_order_schedules_in,
gt_order_conditions_in,
gt_order_conditions_inx,
i.
"下单日期格式转换
SEARCH wa_item_01-audat FOR '/'.
IF sy-subrc = 0.
CALL METHOD z_pp_0001->date_change
EXPORTING
biaos = '/'
day_in = wa_item_01-audat
IMPORTING
day_out = wa_item_01-audat.
ELSE.
CALL METHOD z_pp_0001->date_change
EXPORTING
day_in = wa_item_01-audat
IMPORTING
day_out = wa_item_01-audat.
ENDIF.
"客户参考日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_01-bstdk
* IMPORTING
* day_out = wa_item_01-bstdk.
SEARCH wa_item_01-bstdk FOR '/'.
IF sy-subrc = 0.
CALL METHOD z_pp_0001->date_change
EXPORTING
biaos = '/'
day_in = wa_item_01-bstdk
IMPORTING
day_out = wa_item_01-bstdk.
ELSE.
CALL METHOD z_pp_0001->date_change
EXPORTING
day_in = wa_item_01-bstdk
IMPORTING
day_out = wa_item_01-bstdk.
ENDIF.
"请求交货日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_01-edatu
* IMPORTING
* day_out = wa_item_01-edatu.
SEARCH wa_item_01-edatu FOR '/'.
IF sy-subrc = 0.
CALL METHOD z_pp_0001->date_change
EXPORTING
biaos = '/'
day_in = wa_item_01-edatu
IMPORTING
day_out = wa_item_01-edatu.
ELSE.
CALL METHOD z_pp_0001->date_change
EXPORTING
day_in = wa_item_01-edatu
IMPORTING
day_out = wa_item_01-edatu.
ENDIF.
gs_order_header_in-doc_date = wa_item_01-audat. "下单日期
IF gs_order_header_in-doc_date = ''.
gs_order_header_in-doc_date = sy-datum.
ENDIF.
gs_order_header_in-purch_date = wa_item_01-bstdk. "客户参考日期/发货日期
gs_order_header_in-doc_type = wa_item_01-auart. "单据类型
* gs_order_header_in-doc_type = 'ZSO2'.
gs_order_header_in-sales_off = wa_item_01-vkbur. "销售部门/销售办事处
gs_order_header_in-purch_no_c = wa_item_01-bstnk."客户参考
* gs_order_header_in-name = wa_item_01-bname. "名称/旺旺号
gs_order_header_in-ref_1 = wa_item_01-ihrez. "您的参考/客户联系人
gs_order_header_in-sales_org = wa_item_01-vkorg. "销售组织
gs_order_header_in-distr_chan = wa_item_01-vtweg. "分销渠道
gs_order_header_in-division = wa_item_01-spart. "产品组
gs_order_header_in-sales_grp = wa_item_01-vkgrp. "销售组
gs_order_header_in-ord_reason = wa_item_01-augru. "订单原因
gs_order_header_in-req_date_h = wa_item_01-edatu. "请求交货日期
gs_order_header_in-pmnttrms = wa_item_01-zterm. "付款条件
gs_order_header_in-ship_cond = wa_item_01-vsbed. "物流信息
gs_order_header_inx-updateflag = 'X'.
gs_order_header_inx-doc_date = 'X'. "下单日期
gs_order_header_inx-purch_date = 'X'. "客户参考日期/发货日期
gs_order_header_inx-doc_type = 'X'. "单据类型
gs_order_header_inx-sales_off = 'X'. "销售部门/销售办事处
gs_order_header_inx-purch_no_c = 'X'."客户参考
* gs_order_header_inx-name = 'X'. "名称/旺旺号
gs_order_header_inx-ref_1 = 'X'. "您的参考/客户联系人
gs_order_header_inx-sales_org = 'X'. "销售组织
gs_order_header_inx-distr_chan = 'X'. "分销渠道
gs_order_header_inx-division = 'X'. "产品组
gs_order_header_inx-sales_grp = 'X'. "销售组
gs_order_header_inx-ord_reason = 'X'. "订单原因
gs_order_header_inx-req_date_h = 'X'.
gs_order_header_inx-pmnttrms = 'X'.
gs_order_header_inx-ship_cond = 'X'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_01-kunnr
IMPORTING
output = wa_item_01-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_01-kunnr_01
IMPORTING
output = wa_item_01-kunnr_01.
"合作伙伴
IF wa_item_01-kunnr IS INITIAL.
gs_order_partners-partn_role = 'AG'.
gs_order_partners-partn_numb = wa_item_01-kunnr.
APPEND gs_order_partners TO gt_order_partners.
gs_order_partners-partn_role = 'WE'.
gs_order_partners-partn_numb = wa_item_01-kunnr_01.
APPEND gs_order_partners TO gt_order_partners.
ELSE.
gs_order_partners-partn_role = 'AG'.
gs_order_partners-partn_numb = wa_item_01-kunnr.
APPEND gs_order_partners TO gt_order_partners.
gs_order_partners-partn_role = 'WE'.
gs_order_partners-partn_numb = wa_item_01-kunnr_01.
APPEND gs_order_partners TO gt_order_partners.
ENDIF.
* APPEND gs_order_partners TO gt_order_partners.
LOOP AT gt_item_po_01 INTO DATA(wa_item_po_01)
WHERE vbeln = wa_item_01-vbeln.
CLEAR:gs_order_items_in,
gs_order_items_inx,
gs_order_partners,
gs_order_conditions_in,
gs_order_conditions_inx,
gs_text.
IF wa_item_po_01-ihrez <> wa_item_01-ihrez.
wa_item_01-mes_01 = 'E'.
wa_item_01-mes_02 = '同一订单下:您的参考/客户联系人不一致,请检查'.
MODIFY gt_item_01
FROM wa_item_01
TRANSPORTING mes_01 mes_02.
wa_item_po_01-mes_01 = 'E'.
wa_item_po_01-mes_02 = '同一订单下:您的参考/客户联系人不一致,请检查'.
MODIFY gt_item_po_01
FROM wa_item_po_01
TRANSPORTING mes_01 mes_02.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_po_01-kunnr
IMPORTING
output = wa_item_po_01-kunnr.
IF wa_item_po_01-kunnr <> wa_item_01-kunnr
OR wa_item_po_01-vkorg <> wa_item_01-vkorg
OR wa_item_po_01-vtweg <> wa_item_01-vtweg
OR wa_item_po_01-spart <> wa_item_01-spart.
"提示同一订单下的 客户编码,销售组织,分销渠道,产品组不相同
wa_item_01-mes_01 = 'E'.
wa_item_01-mes_02 = '同一订单下:客户编码,销售组织,分销渠道,产品组不相同'.
MODIFY gt_item_01
FROM wa_item_01
TRANSPORTING mes_01 mes_02.
wa_item_po_01-mes_01 = 'E'.
wa_item_po_01-mes_02 = '同一订单下:客户编码,销售组织,分销渠道,产品组不相同'.
MODIFY gt_item_po_01
FROM wa_item_po_01
TRANSPORTING mes_01 mes_02.
ENDIF.
* IF wa_item_po_01-matnr_01 IS INITIAL.
* SELECT SINGLE matnr_01 INTO wa_item_po_01-matnr_01
* FROM zsdt003
* WHERE matnr = wa_item_po_01-matnr
* AND ggmc = wa_item_po_01-ggmc
* AND cpmc = wa_item_po_01-cpmc
* AND bzfs = wa_item_po_01-bzfs.
* IF sy-subrc <> 0.
* "提示物料错误,请检查数据
* wa_item_01-mes_01 = 'E'.
* wa_item_01-mes_02 = '物料不存在,请检查!'.
* MODIFY gt_item_01 FROM wa_item_01 TRANSPORTING mes_01 mes_02.
*
* wa_item_po_01-mes_01 = 'E'.
* wa_item_po_01-mes_02 = '物料不存在,请检查!'.
* MODIFY gt_item_po_01 FROM wa_item_po_01 TRANSPORTING mes_01 mes_02.
*
* ENDIF.
* ENDIF.
IF wa_item_po_01-kunnr IS NOT INITIAL.
CLEAR:wa_item_po_01-kunnr.
SELECT SINGLE kunnr INTO wa_item_po_01-kunnr
FROM kna1
WHERE kunnr = wa_item_01-kunnr.
IF sy-subrc <> 0.
"提示物料错误,请检查数据
wa_item_01-mes_01 = 'E'.
wa_item_01-mes_02 = '客户不存在,请检查!'.
MODIFY gt_item_01 FROM wa_item_01 TRANSPORTING mes_01 mes_02.
wa_item_po_01-mes_01 = 'E'.
wa_item_po_01-mes_02 = '客户不存在,请检查!'.
MODIFY gt_item_po_01 FROM wa_item_po_01 TRANSPORTING mes_01 mes_02.
ENDIF.
ENDIF.
"行项目
i = i + 10.
* call function 'CONVERSION_EXIT_ALPHA_INPUT'
* exporting
* input = i
* importing
* output = i.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' " 单位转换
EXPORTING
input = wa_item_po_01-kmein
language = sy-langu
IMPORTING
output = wa_item_po_01-kmein
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
gs_order_items_in-itm_number = i.
gs_order_items_in-target_qty = wa_item_po_01-kwmeng.
gs_order_items_in-store_loc = wa_item_po_01-lgort.
* gs_order_items_in-target_qu = wa_item_po_01-kmein.
gs_order_items_in-sales_unit = wa_item_po_01-kmein.
gs_order_items_in-currency = wa_item_po_01-waerk.
* DATA:matnr_18 TYPE char18.
CLEAR:matnr_18.
matnr_18 = wa_item_po_01-matnr_01.
gs_order_items_in-material = matnr_18. "物料号,18位的,需要转换
* call function 'CONVERSION_EXIT_ALPHA_INPUT'
* exporting
* input = t_zsds11-material
* importing
* output = t_zsds11-material.
gs_order_items_in-item_categ = wa_item_po_01-pstyv.
* gs_order_items_in-item_categ = 'ZAN'.
gs_order_items_in-plant = wa_item_po_01-werks.
APPEND gs_order_items_in TO gt_order_items_in.
gs_order_items_inx-itm_number = i.
gs_order_items_inx-updateflag = 'X'.
gs_order_items_inx-target_qty = 'X'.
gs_order_items_inx-store_loc = 'X'.
* gs_order_items_inx-target_qu = 'X'.
gs_order_items_inx-sales_unit = 'X'.
* gs_order_items_inx-CURRENCY = 'X'.
gs_order_items_inx-material = 'X'. "物料号,18位的,需要转换
gs_order_items_inx-item_categ = 'X'.
gs_order_items_inx-plant = 'X'.
APPEND gs_order_items_inx TO gt_order_items_inx.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_item_01-kunnr
* IMPORTING
* output = wa_item_01-kunnr.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_item_01-kunnr_01
* IMPORTING
* output = wa_item_01-kunnr_01.
* "合作伙伴
* IF wa_item_01-kunnr IS INITIAL.
* gs_order_partners-partn_role = 'AG'.
* gs_order_partners-partn_numb = wa_item_01-kunnr_01.
* APPEND gs_order_partners TO gt_order_partners.
* gs_order_partners-partn_role = 'WE'.
* gs_order_partners-partn_numb = wa_item_01-kunnr_01.
* APPEND gs_order_partners TO gt_order_partners.
* ELSE.
* gs_order_partners-partn_role = 'AG'.
* gs_order_partners-partn_numb = wa_item_01-kunnr.
* APPEND gs_order_partners TO gt_order_partners.
* gs_order_partners-partn_role = 'WE'.
* gs_order_partners-partn_numb = wa_item_01-kunnr_01.
* APPEND gs_order_partners TO gt_order_partners.
* ENDIF.
* APPEND gs_order_partners TO gt_order_partners.
"定价条件
gs_order_conditions_in-itm_number = i. "itm_number
gs_order_conditions_in-cond_type = 'ZPR1'. "定价条件
gs_order_conditions_in-cond_value = wa_item_po_01-kbetr.
gs_order_conditions_in-currency = wa_item_po_01-waerk. "
gs_order_conditions_in-cond_unit = wa_item_po_01-kmein. "条件单位
gs_order_conditions_in-cond_p_unt = wa_item_po_01-kpein. "价格单位
APPEND gs_order_conditions_in TO gt_order_conditions_in.
CLEAR gs_order_conditions_inx.
gs_order_conditions_inx-itm_number = i.
gs_order_conditions_inx-cond_type = 'ZPR1'.
gs_order_conditions_inx-updateflag = 'X'.
gs_order_conditions_inx-cond_value = 'X'.
gs_order_conditions_inx-currency = 'X'.
gs_order_conditions_inx-cond_unit = 'X'.
gs_order_conditions_inx-cond_p_unt = 'X'.
APPEND gs_order_conditions_inx TO gt_order_conditions_inx.
"凭证计划行字段
gs_order_schedules_in-itm_number = i.
gs_order_schedules_in-req_qty = wa_item_po_01-kwmeng.
APPEND gs_order_schedules_in TO gt_order_schedules_in.
* gs_text-DOC_NUMBER = wa_item_01-vbeln.
* gs_text-ITM_NUMBER = i.
* gs_text-TEXT_ID = '0001'.
* gs_text-TEXT_LINE = wa_item_po_01-txt_01.
* APPEND gs_text TO gt_text.
"行项目赋值
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i
IMPORTING
output = wa_item_po_01-posnr.
MODIFY gt_item_po_01 FROM wa_item_po_01 TRANSPORTING posnr.
CLEAR:wa_item_po_01.
ENDLOOP.
IF wa_item_01-mes_01 = ''.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_01-vbeln
IMPORTING
output = wa_item_01-vbeln.
* DATA:l_switch TYPE TABLE OF bapisdls WITH HEADER LINE.
* l_switch-pricing = 'G'.
* APPEND l_switch.
CLEAR:return,vbtyp.
SELECT SINGLE vbtyp
INTO vbtyp
FROM tvak
WHERE auart = wa_item_01-auart.
IF vbtyp = 'H'.
CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE'
EXPORTING
salesdocumentin = wa_item_01-vbeln "销售订单
return_header_in = gs_order_header_in "通讯字段: 销售和分销凭证抬头
return_header_inx = gs_order_header_inx "通讯字段: 销售和分销凭证抬头复选框
* SENDER = "发送人逻辑系统
* BINARY_RELATIONSHIPTYPE = "对象关系服务二进位链接类型
* INT_NUMBER_ASSIGNMENT = "标记
* BEHAVE_WHEN_ERROR = "标记
logic_switch = l_switch "逻辑切换的 SD 复选框
* TESTRUN = "标记
* CONVERT = ' ' "标记
* IMPORTING
* salesdocument = wa_item_02-vbeln "销售订单
TABLES
return = return "返回参数
return_items_in = gt_order_items_in "通讯字段: 销售和分销凭证项目
return_items_inx = gt_order_items_inx "通讯字段: 销售和分销凭证项目复选框
return_partners = gt_order_partners "通讯字段: SD单据合作伙伴:WWW
return_schedules_in = gt_order_schedules_in "维护 SD 凭证计划行的通讯字段
* order_schedules_inx = gt_order_schedules_inx "维护销售凭证计划行的复选框清单
return_conditions_in = gt_order_conditions_in "维护订单条件的通讯字段
* order_conditions_inx = gt_order_conditions_inx "维护订单条件的通讯字段的复选框清单
* ORDER_CFGS_REF = "CU:配置数据
* ORDER_CFGS_INST = "个别配置实例
* ORDER_CFGS_PART_OF = "个别配置的部分信息
* ORDER_CFGS_VALUE = "个别配置的特性值分配
* ORDER_CFGS_BLOB = "BLOB 内部配置数据 (SCE)
* ORDER_CFGS_VK = "配置的变式条件代码
* ORDER_CFGS_REFINST = "CU:在配置中参考订单项目 / 实例
* ORDER_CCARD = "通讯表:付款单/开票凭证的说明
* ORDER_TEXT = "通讯字段:SD 文本
* ORDER_KEYS = "销售和分销凭证中的关键值
* EXTENSIONIN = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
* PARTNERADDRESSES = "地址的 BAPI 参考结构(组织/公司)
* EXTENSIONEX = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
.
ELSE.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
salesdocumentin = wa_item_01-vbeln "销售订单
order_header_in = gs_order_header_in "通讯字段: 销售和分销凭证抬头
order_header_inx = gs_order_header_inx "通讯字段: 销售和分销凭证抬头复选框
* SENDER = "发送人逻辑系统
* BINARY_RELATIONSHIPTYPE = "对象关系服务二进位链接类型
* INT_NUMBER_ASSIGNMENT = "标记
* BEHAVE_WHEN_ERROR = "标记
logic_switch = l_switch "逻辑切换的 SD 复选框
* TESTRUN = "标记
* CONVERT = ' ' "标记
* importing
* salesdocument = salesdocument "销售订单
TABLES
return = return "返回参数
order_items_in = gt_order_items_in "通讯字段: 销售和分销凭证项目
order_items_inx = gt_order_items_inx "通讯字段: 销售和分销凭证项目复选框
order_partners = gt_order_partners "通讯字段: SD单据合作伙伴:WWW
order_schedules_in = gt_order_schedules_in "维护 SD 凭证计划行的通讯字段
* order_schedules_inx = gt_order_schedules_inx "维护销售凭证计划行的复选框清单
order_conditions_in = gt_order_conditions_in "维护订单条件的通讯字段
order_conditions_inx = gt_order_conditions_inx "维护订单条件的通讯字段的复选框清单
* ORDER_CFGS_REF = "CU:配置数据
* ORDER_CFGS_INST = "个别配置实例
* ORDER_CFGS_PART_OF = "个别配置的部分信息
* ORDER_CFGS_VALUE = "个别配置的特性值分配
* ORDER_CFGS_BLOB = "BLOB 内部配置数据 (SCE)
* ORDER_CFGS_VK = "配置的变式条件代码
* ORDER_CFGS_REFINST = "CU:在配置中参考订单项目 / 实例
* ORDER_CCARD = "通讯表:付款单/开票凭证的说明
* ORDER_TEXT = gt_text"通讯字段:SD 文本
* ORDER_KEYS = "销售和分销凭证中的关键值
* EXTENSIONIN = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
* PARTNERADDRESSES = "地址的 BAPI 参考结构(组织/公司)
* EXTENSIONEX = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
.
ENDIF.
READ TABLE return INTO wa_return
WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
tdname = wa_item_01-vbeln.
"抬头文本:物流方式
* CLEAR:w_text,l_text.
* w_text-tdline = wa_item_01-txt_02.
* APPEND w_text TO l_text.
*
* CALL FUNCTION 'CREATE_TEXT'
* EXPORTING
* fid = '0002'
* flanguage = sy-langu
* fname = tdname
* fobject = 'VBBK'
* save_direct = 'X'
* fformat = '*'
* TABLES
* flines = l_text.
"抬头文本:物流单号
* CLEAR:w_text,l_text.
* w_text-tdline = wa_item_01-txt_03.
* APPEND w_text TO l_text.
*
* CALL FUNCTION 'CREATE_TEXT'
* EXPORTING
* fid = '0004'
* flanguage = sy-langu
* fname = tdname
* fobject = 'VBBK'
* save_direct = 'X'
* fformat = '*'
* TABLES
* flines = l_text.
"抬头文本
CLEAR:w_text,l_text.
w_text-tdline = wa_item_01-txt_04.
APPEND w_text TO l_text.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
fid = '0001'
flanguage = sy-langu
fname = tdname
fobject = 'VBBK'
save_direct = 'X'
fformat = '*'
TABLES
flines = l_text.
"给行项目的 bs_txt 字段赋值,以判断后面行项目文本的创建
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
* EXPORTING
* input = wa_item_01-vbeln
* IMPORTING
* output = wa_item_01-vbeln.
wa_item_po_01-bs_txt = '1'.
wa_item_po_01-mes_01 = 'S'.
wa_item_po_01-mes_02 = '保存成功,销售单号为:' && wa_item_01-vbeln.
MODIFY gt_item_po_01
FROM wa_item_po_01
TRANSPORTING bs_txt mes_01 mes_02
WHERE vbeln = wa_item_01-vbeln.
CLEAR:wa_item_po_01.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
CLEAR:mes_str,wa_return.
LOOP AT return INTO wa_return
WHERE type = 'E'.
mes_str = mes_str && wa_return-message && ','.
ENDLOOP.
wa_item_01-mes_01 = 'E'.
wa_item_01-mes_02 = mes_str.
MODIFY gt_item_01
FROM wa_item_01
TRANSPORTING mes_01 mes_02.
wa_item_po_01-mes_01 = 'E'.
wa_item_po_01-mes_02 = mes_str.
MODIFY gt_item_po_01
FROM wa_item_po_01
TRANSPORTING mes_01 mes_02
WHERE vbeln = wa_item_01-vbeln.
ENDIF.
ENDIF.
CLEAR:wa_item_01.
ENDLOOP.
LOOP AT gt_item_po_01 INTO wa_item_po_01
WHERE bs_txt = '1'.
CLEAR:tdname.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_po_01-posnr
IMPORTING
output = wa_item_po_01-posnr.
tdname = wa_item_po_01-vbeln && wa_item_po_01-posnr.
CLEAR:w_text,l_text.
w_text-tdline = wa_item_po_01-txt_01.
APPEND w_text TO l_text.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
fid = '0001'
flanguage = sy-langu
fname = tdname
fobject = 'VBBP'
save_direct = 'X'
fformat = '*'
TABLES
flines = l_text.
ENDLOOP.
CLEAR:gt_order_items_in,
gt_order_items_inx,
gt_order_partners,
gt_order_schedules_in,
gt_order_conditions_in,
gt_order_conditions_inx,
return.
**************** 没有 销售订单号 的单据 ****************
LOOP AT gt_item_02 INTO DATA(wa_item_02)
WHERE mes_01 = ''.
CLEAR:gs_order_header_in,
gs_order_header_inx,
gt_order_items_in,
gt_order_items_inx,
gt_order_partners,
gt_order_schedules_in,
gt_order_conditions_in,
gt_order_conditions_inx,
i.
* "下单日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_02-audat
* IMPORTING
* day_out = wa_item_02-audat.
*
* "客户参考日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_02-bstdk
* IMPORTING
* day_out = wa_item_02-bstdk.
*
* "请求交货日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_02-edatu
* IMPORTING
* day_out = wa_item_02-edatu.
"下单日期格式转换
SEARCH wa_item_02-audat FOR '/'.
IF sy-subrc = 0.
CALL METHOD z_pp_0001->date_change
EXPORTING
biaos = '/'
day_in = wa_item_02-audat
IMPORTING
day_out = wa_item_02-audat.
ELSE.
CALL METHOD z_pp_0001->date_change
EXPORTING
day_in = wa_item_02-audat
IMPORTING
day_out = wa_item_02-audat.
ENDIF.
"客户参考日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_01-bstdk
* IMPORTING
* day_out = wa_item_01-bstdk.
SEARCH wa_item_02-bstdk FOR '/'.
IF sy-subrc = 0.
CALL METHOD z_pp_0001->date_change
EXPORTING
biaos = '/'
day_in = wa_item_02-bstdk
IMPORTING
day_out = wa_item_02-bstdk.
ELSE.
CALL METHOD z_pp_0001->date_change
EXPORTING
day_in = wa_item_02-bstdk
IMPORTING
day_out = wa_item_02-bstdk.
ENDIF.
"请求交货日期格式转换
* CALL METHOD z_pp_0001->date_change
* EXPORTING
* biaos = '/'
* day_in = wa_item_01-edatu
* IMPORTING
* day_out = wa_item_01-edatu.
SEARCH wa_item_02-edatu FOR '/'.
IF sy-subrc = 0.
CALL METHOD z_pp_0001->date_change
EXPORTING
biaos = '/'
day_in = wa_item_02-edatu
IMPORTING
day_out = wa_item_02-edatu.
ELSE.
CALL METHOD z_pp_0001->date_change
EXPORTING
day_in = wa_item_02-edatu
IMPORTING
day_out = wa_item_02-edatu.
ENDIF.
gs_order_header_in-doc_date = wa_item_02-audat. "下单日期
IF gs_order_header_in-doc_date = ''.
gs_order_header_in-doc_date = sy-datum.
ENDIF.
gs_order_header_in-purch_date = wa_item_02-bstdk. "客户参考日期/发货日期
gs_order_header_in-doc_type = wa_item_02-auart. "单据类型
* gs_order_header_in-doc_type = 'ZSO2'.
gs_order_header_in-sales_off = wa_item_02-vkbur. "销售部门/销售办事处
gs_order_header_in-purch_no_c = wa_item_02-bstnk."客户参考
* gs_order_header_in-name = wa_item_02-bname. "名称/旺旺号
gs_order_header_in-ref_1 = wa_item_02-ihrez. "您的参考/客户联系人
gs_order_header_in-sales_org = wa_item_02-vkorg. "销售组织
gs_order_header_in-distr_chan = wa_item_02-vtweg. "分销渠道
gs_order_header_in-division = wa_item_02-spart. "产品组
gs_order_header_in-sales_grp = wa_item_02-vkgrp. "销售组
gs_order_header_in-ord_reason = wa_item_02-augru. "订单原因
gs_order_header_in-req_date_h = wa_item_02-edatu. "请求交货日期
gs_order_header_in-pmnttrms = wa_item_02-zterm. "付款条件
gs_order_header_in-ship_cond = wa_item_02-vsbed. "物流信息
gs_order_header_inx-updateflag = 'X'.
gs_order_header_inx-doc_date = 'X'. "下单日期
gs_order_header_inx-purch_date = 'X'. "客户参考日期/发货日期
gs_order_header_inx-doc_type = 'X'. "单据类型
gs_order_header_inx-sales_off = 'X'. "销售部门/销售办事处
gs_order_header_inx-purch_no_c = 'X'."客户参考
* gs_order_header_inx-name = 'X'. "名称/旺旺号
gs_order_header_inx-ref_1 = 'X'. "您的参考/客户联系人
gs_order_header_inx-sales_org = 'X'. "销售组织
gs_order_header_inx-distr_chan = 'X'. "分销渠道
gs_order_header_inx-division = 'X'. "产品组
gs_order_header_inx-sales_grp = 'X'. "销售组
gs_order_header_inx-ord_reason = 'X'. "订单原因
gs_order_header_inx-req_date_h = 'X'. "请求交货日期
gs_order_header_inx-pmnttrms = 'X'.
gs_order_header_inx-ship_cond = 'X'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_02-kunnr
IMPORTING
output = wa_item_02-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_02-kunnr_01
IMPORTING
output = wa_item_02-kunnr_01.
"合作伙伴
IF wa_item_01-kunnr IS INITIAL.
gs_order_partners-partn_role = 'AG'.
gs_order_partners-partn_numb = wa_item_02-kunnr.
APPEND gs_order_partners TO gt_order_partners.
gs_order_partners-partn_role = 'WE'.
gs_order_partners-partn_numb = wa_item_02-kunnr_01.
APPEND gs_order_partners TO gt_order_partners.
ELSE.
gs_order_partners-partn_role = 'AG'.
gs_order_partners-partn_numb = wa_item_02-kunnr.
APPEND gs_order_partners TO gt_order_partners.
gs_order_partners-partn_role = 'WE'.
gs_order_partners-partn_numb = wa_item_02-kunnr_01.
APPEND gs_order_partners TO gt_order_partners.
ENDIF.
* APPEND gs_order_partners TO gt_order_partners.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
* EXPORTING
* input = wa_item_02-kunnr
* IMPORTING
* output = wa_item_02-kunnr.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
* EXPORTING
* input = wa_item_02-kunnr_01
* IMPORTING
* output = wa_item_02-kunnr_01.
LOOP AT gt_item_po_02 INTO DATA(wa_item_po_02)
WHERE bstnk = wa_item_02-bstnk.
CLEAR:gs_order_items_in,
gs_order_items_inx,
gs_order_partners,
gs_order_conditions_in,
gs_order_conditions_inx.
CLEAR:wa_item_02-mes_01,wa_item_02-mes_02,
wa_item_po_02-mes_01,wa_item_po_02-mes_02.
IF wa_item_po_02-ihrez <> wa_item_02-ihrez.
wa_item_02-mes_01 = 'E'.
wa_item_02-mes_02 = '同一订单下:您的参考/客户联系人不一致,请检查'.
MODIFY gt_item_02
FROM wa_item_02
TRANSPORTING mes_01 mes_02.
wa_item_po_02-mes_01 = 'E'.
wa_item_po_02-mes_02 = '同一订单下:您的参考/客户联系人不一致,请检查'.
MODIFY gt_item_po_02
FROM wa_item_po_02
TRANSPORTING mes_01 mes_02.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_po_02-kunnr
IMPORTING
output = wa_item_po_02-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_po_02-kunnr_01
IMPORTING
output = wa_item_po_02-kunnr_01.
IF wa_item_po_02-kunnr <> wa_item_02-kunnr
OR wa_item_po_02-vkorg <> wa_item_02-vkorg
OR wa_item_po_02-vtweg <> wa_item_02-vtweg
OR wa_item_po_02-spart <> wa_item_02-spart.
"提示同一客户参考下的 客户编码,销售组织,分销渠道,产品组不相同
wa_item_02-mes_01 = 'E'.
wa_item_02-mes_02 = '同一客户参考下:客户编码,销售组织,分销渠道,产品组不相同'.
MODIFY gt_item_02
FROM wa_item_02
TRANSPORTING mes_01 mes_02.
wa_item_po_02-mes_01 = 'E'.
wa_item_po_02-mes_02 = '同一客户参考下:客户编码,销售组织,分销渠道,产品组不相同'.
MODIFY gt_item_po_02
FROM wa_item_po_02
TRANSPORTING mes_01 mes_02.
ENDIF.
* IF wa_item_po_02-matnr_01 IS INITIAL.
* SELECT SINGLE matnr_01 INTO wa_item_po_02-matnr_01
* FROM zsdt003
* WHERE matnr = wa_item_po_02-matnr
* AND ggmc = wa_item_po_02-ggmc
* AND cpmc = wa_item_po_02-cpmc
* AND bzfs = wa_item_po_02-bzfs.
* IF sy-subrc <> 0.
* "提示物料错误,请检查数据
* wa_item_02-mes_01 = 'E'.
* wa_item_02-mes_02 = '物料不存在,请检查!'.
* MODIFY gt_item_02 FROM wa_item_02 TRANSPORTING mes_01 mes_02.
*
* wa_item_po_02-mes_01 = 'E'.
* wa_item_po_02-mes_02 = '物料不存在,请检查!'.
* MODIFY gt_item_po_02 FROM wa_item_po_02 TRANSPORTING mes_01 mes_02.
*
*
* ENDIF.
* ENDIF.
IF wa_item_po_02-kunnr IS NOT INITIAL.
CLEAR:wa_item_po_02-kunnr.
SELECT SINGLE kunnr INTO wa_item_po_02-kunnr
FROM kna1
WHERE kunnr = wa_item_02-kunnr.
IF sy-subrc <> 0.
"提示物料错误,请检查数据
wa_item_02-mes_01 = 'E'.
wa_item_02-mes_02 = '客户不存在,请检查!'.
MODIFY gt_item_02 FROM wa_item_02 TRANSPORTING mes_01 mes_02.
wa_item_po_02-mes_01 = 'E'.
wa_item_po_02-mes_02 = '客户不存在,请检查!'.
MODIFY gt_item_po_02 FROM wa_item_po_02 TRANSPORTING mes_01 mes_02.
ENDIF.
ENDIF.
"行项目
i = i + 10.
* call function 'CONVERSION_EXIT_ALPHA_INPUT'
* exporting
* input = i
* importing
* output = i.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' " 单位转换
EXPORTING
input = wa_item_po_02-kmein
language = sy-langu
IMPORTING
output = wa_item_po_02-kmein
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
gs_order_items_in-itm_number = i.
gs_order_items_in-target_qty = wa_item_po_02-kwmeng.
gs_order_items_in-store_loc = wa_item_po_02-lgort.
* gs_order_items_in-target_qu = wa_item_po_01-kmein.
gs_order_items_in-sales_unit = wa_item_po_02-kmein.
gs_order_items_in-currency = wa_item_po_02-waerk.
CLEAR:matnr_18.
matnr_18 = wa_item_po_02-matnr_01.
gs_order_items_in-material = matnr_18. "物料号,18位的,需要转换
* call function 'CONVERSION_EXIT_ALPHA_INPUT'
* exporting
* input = t_zsds11-material
* importing
* output = t_zsds11-material.
gs_order_items_in-item_categ = wa_item_po_02-pstyv.
* gs_order_items_in-item_categ = 'ZAN'.
gs_order_items_in-plant = wa_item_po_02-werks.
APPEND gs_order_items_in TO gt_order_items_in.
gs_order_items_inx-itm_number = i.
gs_order_items_inx-updateflag = 'X'.
gs_order_items_inx-target_qty = 'X'.
gs_order_items_inx-store_loc = 'X'.
* gs_order_items_inx-target_qu = 'X'.
gs_order_items_inx-sales_unit = 'X'.
* gs_order_items_inx-CURRENCY = 'X'.
gs_order_items_inx-material = 'X'. "物料号,18位的,需要转换
gs_order_items_inx-item_categ = 'X'.
gs_order_items_inx-plant = 'X'.
APPEND gs_order_items_inx TO gt_order_items_inx.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_item_02-kunnr
* IMPORTING
* output = wa_item_02-kunnr.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_item_02-kunnr_01
* IMPORTING
* output = wa_item_02-kunnr_01.
* "合作伙伴
* IF wa_item_01-kunnr IS INITIAL.
* gs_order_partners-partn_role = 'AG'.
* gs_order_partners-partn_numb = wa_item_02-kunnr_01.
* APPEND gs_order_partners TO gt_order_partners.
* gs_order_partners-partn_role = 'WE'.
* gs_order_partners-partn_numb = wa_item_02-kunnr_01.
* APPEND gs_order_partners TO gt_order_partners.
* ELSE.
* gs_order_partners-partn_role = 'AG'.
* gs_order_partners-partn_numb = wa_item_02-kunnr.
* APPEND gs_order_partners TO gt_order_partners.
* gs_order_partners-partn_role = 'WE'.
* gs_order_partners-partn_numb = wa_item_02-kunnr_01.
* APPEND gs_order_partners TO gt_order_partners.
* ENDIF.
* APPEND gs_order_partners TO gt_order_partners.
"定价条件
gs_order_conditions_in-itm_number = i. "itm_number
gs_order_conditions_in-cond_type = 'ZPR1'. "定价条件
gs_order_conditions_in-cond_value = wa_item_po_02-kbetr. "单价
gs_order_conditions_in-currency = wa_item_po_02-waerk. "货币
gs_order_conditions_in-cond_unit = wa_item_po_02-kmein. "条件单位
gs_order_conditions_in-cond_p_unt = wa_item_po_02-kpein. "价格单位
APPEND gs_order_conditions_in TO gt_order_conditions_in.
CLEAR gs_order_conditions_inx.
gs_order_conditions_inx-itm_number = i.
gs_order_conditions_inx-cond_type = 'ZPR1'.
gs_order_conditions_inx-updateflag = 'X'.
gs_order_conditions_inx-cond_value = 'X'.
gs_order_conditions_inx-currency = 'X'.
gs_order_conditions_inx-cond_unit = 'X'.
gs_order_conditions_inx-cond_p_unt = 'X'.
APPEND gs_order_conditions_inx TO gt_order_conditions_inx.
"凭证计划行字段
gs_order_schedules_in-itm_number = i.
gs_order_schedules_in-req_qty = wa_item_po_02-kwmeng.
APPEND gs_order_schedules_in TO gt_order_schedules_in.
"行项目赋值
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i
IMPORTING
output = wa_item_po_02-posnr.
MODIFY gt_item_po_02 FROM wa_item_po_02 TRANSPORTING posnr.
CLEAR:wa_item_po_02.
ENDLOOP.
* if return[] is initial.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_item_01-vbeln
* IMPORTING
* output = wa_item_01-vbeln.
IF wa_item_02-mes_01 = ''.
CLEAR:return,vbtyp.
SELECT SINGLE vbtyp
INTO vbtyp
FROM tvak
WHERE auart = wa_item_02-auart.
IF vbtyp = 'H'.
CALL FUNCTION 'BAPI_CUSTOMERRETURN_CREATE'
EXPORTING
* salesdocumentin = wa_item_01-vbeln "销售订单
return_header_in = gs_order_header_in "通讯字段: 销售和分销凭证抬头
return_header_inx = gs_order_header_inx "通讯字段: 销售和分销凭证抬头复选框
* SENDER = "发送人逻辑系统
* BINARY_RELATIONSHIPTYPE = "对象关系服务二进位链接类型
* INT_NUMBER_ASSIGNMENT = "标记
* BEHAVE_WHEN_ERROR = "标记
logic_switch = l_switch "逻辑切换的 SD 复选框
* TESTRUN = "标记
* CONVERT = ' ' "标记
IMPORTING
salesdocument = wa_item_02-vbeln "销售订单
TABLES
return = return "返回参数
return_items_in = gt_order_items_in "通讯字段: 销售和分销凭证项目
return_items_inx = gt_order_items_inx "通讯字段: 销售和分销凭证项目复选框
return_partners = gt_order_partners "通讯字段: SD单据合作伙伴:WWW
return_schedules_in = gt_order_schedules_in "维护 SD 凭证计划行的通讯字段
* order_schedules_inx = gt_order_schedules_inx "维护销售凭证计划行的复选框清单
return_conditions_in = gt_order_conditions_in "维护订单条件的通讯字段
* order_conditions_inx = gt_order_conditions_inx "维护订单条件的通讯字段的复选框清单
* ORDER_CFGS_REF = "CU:配置数据
* ORDER_CFGS_INST = "个别配置实例
* ORDER_CFGS_PART_OF = "个别配置的部分信息
* ORDER_CFGS_VALUE = "个别配置的特性值分配
* ORDER_CFGS_BLOB = "BLOB 内部配置数据 (SCE)
* ORDER_CFGS_VK = "配置的变式条件代码
* ORDER_CFGS_REFINST = "CU:在配置中参考订单项目 / 实例
* ORDER_CCARD = "通讯表:付款单/开票凭证的说明
* ORDER_TEXT = "通讯字段:SD 文本
* ORDER_KEYS = "销售和分销凭证中的关键值
* EXTENSIONIN = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
* PARTNERADDRESSES = "地址的 BAPI 参考结构(组织/公司)
* EXTENSIONEX = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
.
ELSE.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
* salesdocumentin = wa_item_01-vbeln "销售订单
order_header_in = gs_order_header_in "通讯字段: 销售和分销凭证抬头
order_header_inx = gs_order_header_inx "通讯字段: 销售和分销凭证抬头复选框
* SENDER = "发送人逻辑系统
* BINARY_RELATIONSHIPTYPE = "对象关系服务二进位链接类型
* INT_NUMBER_ASSIGNMENT = "标记
* BEHAVE_WHEN_ERROR = "标记
logic_switch = l_switch "逻辑切换的 SD 复选框
* TESTRUN = "标记
* CONVERT = ' ' "标记
IMPORTING
salesdocument = wa_item_02-vbeln "销售订单
TABLES
return = return "返回参数
order_items_in = gt_order_items_in "通讯字段: 销售和分销凭证项目
order_items_inx = gt_order_items_inx "通讯字段: 销售和分销凭证项目复选框
order_partners = gt_order_partners "通讯字段: SD单据合作伙伴:WWW
order_schedules_in = gt_order_schedules_in "维护 SD 凭证计划行的通讯字段
* order_schedules_inx = gt_order_schedules_inx "维护销售凭证计划行的复选框清单
order_conditions_in = gt_order_conditions_in "维护订单条件的通讯字段
order_conditions_inx = gt_order_conditions_inx "维护订单条件的通讯字段的复选框清单
* ORDER_CFGS_REF = "CU:配置数据
* ORDER_CFGS_INST = "个别配置实例
* ORDER_CFGS_PART_OF = "个别配置的部分信息
* ORDER_CFGS_VALUE = "个别配置的特性值分配
* ORDER_CFGS_BLOB = "BLOB 内部配置数据 (SCE)
* ORDER_CFGS_VK = "配置的变式条件代码
* ORDER_CFGS_REFINST = "CU:在配置中参考订单项目 / 实例
* ORDER_CCARD = "通讯表:付款单/开票凭证的说明
* ORDER_TEXT = "通讯字段:SD 文本
* ORDER_KEYS = "销售和分销凭证中的关键值
* EXTENSIONIN = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
* PARTNERADDRESSES = "地址的 BAPI 参考结构(组织/公司)
* EXTENSIONEX = "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
.
ENDIF.
READ TABLE return INTO wa_return
WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_02-vbeln
IMPORTING
output = wa_item_02-vbeln.
CLEAR:tdname.
tdname = wa_item_02-vbeln.
"抬头文本:物流方式
* CLEAR:w_text,l_text.
* w_text-tdline = wa_item_02-txt_02.
* APPEND w_text TO l_text.
*
* CALL FUNCTION 'CREATE_TEXT'
* EXPORTING
* fid = '0002'
* flanguage = sy-langu
* fname = tdname
* fobject = 'VBBK'
* save_direct = 'X'
* fformat = '*'
* TABLES
* flines = l_text.
"抬头文本:物流单号
* CLEAR:w_text,l_text.
* w_text-tdline = wa_item_02-txt_03.
* APPEND w_text TO l_text.
*
* CALL FUNCTION 'CREATE_TEXT'
* EXPORTING
* fid = '0004'
* flanguage = sy-langu
* fname = tdname
* fobject = 'VBBK'
* save_direct = 'X'
* fformat = '*'
* TABLES
* flines = l_text.
"抬头文本
CLEAR:w_text,l_text.
w_text-tdline = wa_item_02-txt_04.
APPEND w_text TO l_text.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
fid = '0001'
flanguage = sy-langu
fname = tdname
fobject = 'VBBK'
save_direct = 'X'
fformat = '*'
TABLES
flines = l_text.
"给行项目的 bs_txt 字段赋值,以判断后面行项目文本的创建
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
* EXPORTING
* input = wa_item_02-vbeln
* IMPORTING
* output = wa_item_02-vbeln.
wa_item_po_02-bs_txt = '1'.
wa_item_po_02-vbeln = wa_item_02-vbeln.
wa_item_po_02-mes_01 = 'S'.
wa_item_po_02-mes_02 = '保存成功,销售单号为:' && wa_item_02-vbeln.
MODIFY gt_item_po_02
FROM wa_item_po_02
TRANSPORTING vbeln bs_txt mes_01 mes_02
WHERE bstnk = wa_item_02-bstnk.
CLEAR:wa_item_po_02.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
CLEAR:mes_str,wa_return.
LOOP AT return INTO wa_return
WHERE type = 'E'.
mes_str = mes_str && wa_return-message && ','.
ENDLOOP.
wa_item_02-mes_01 = 'E'.
wa_item_02-mes_02 = mes_str.
MODIFY gt_item_02
FROM wa_item_02
TRANSPORTING mes_01 mes_02.
wa_item_po_02-mes_01 = 'E'.
wa_item_po_02-mes_02 = mes_str.
MODIFY gt_item_po_02
FROM wa_item_po_02
TRANSPORTING mes_01 mes_02
WHERE bstnk = wa_item_02-bstnk.
ENDIF.
ENDIF.
CLEAR:wa_item_02.
ENDLOOP.
LOOP AT gt_item_po_02 INTO wa_item_po_02
WHERE bs_txt = '1'.
CLEAR:tdname.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_item_po_02-posnr
IMPORTING
output = wa_item_po_02-posnr.
tdname = wa_item_po_02-vbeln && wa_item_po_02-posnr.
CLEAR:w_text,l_text.
w_text-tdline = wa_item_po_02-txt_01.
APPEND w_text TO l_text.
CALL FUNCTION 'CREATE_TEXT'
EXPORTING
fid = '0001'
flanguage = sy-langu
fname = tdname
fobject = 'VBBP'
save_direct = 'X'
fformat = '*'
TABLES
flines = l_text.
ENDLOOP.
APPEND LINES OF gt_item_po_02 TO gt_item_po_01.
ENDFORM.
FORM alv.
DATA : col_pos TYPE i VALUE 1.
CLEAR:it_fieldcat,wa_fieldcat.
* ALV显示界面的设置
* it_layout-sel_mode = 'A'.
it_layout-zebra = 'X'.
it_layout-colwidth_optimize = 'X'.
* it_layout-info_fieldname = 'COLOR'.
PERFORM fieldcat_int USING col_pos 'MES_01' '' '提示类别' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'MES_02' '' '提示信息' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'VBELN' '' '系统订单编号' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'POSNR' '' '订单行项目' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'AUDAT' '' '下单日期' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'BSTDK' '' '客户参考日期/发货日期' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'AUART' '' '单据类型' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'VKBUR' '' '销售部门/销售办事处' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'BSTNK' '' '客户参考/平台单号' '' '' '' '' '' ''.
* PERFORM fieldcat_int USING col_pos 'BNAME' '' '名称/旺旺号' '' '' '' '' '' ''.
* PERFORM fieldcat_int USING col_pos 'MATNR' '' '规格代码/商品编码' '' '' '' '' '' ''.
* PERFORM fieldcat_int USING col_pos 'GGMC' '' '规格名称' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'CPMC' '' '产品名称' '' '' '' '' '' ''.
* PERFORM fieldcat_int USING col_pos 'BZFS' '' '包装方式' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'KWMENG' '' '数量' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'TXT_01' '' '订单行项目文本' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'LGORT' '' '库存地点' '' '' '' '' '' ''.
* PERFORM fieldcat_int USING col_pos 'TXT_02' '' '物流方式' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'VSBED' '' '装运条件' '' '' '' '' '' ''.
* PERFORM fieldcat_int USING col_pos 'TXT_03' '' '物流单号' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'IHREZ' '' '您的参考/客户联系人' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'KMEIN' '' '单位' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'TXT_04' '' '订单抬头文本' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'KBETR' '' '单价' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'ZONGJE' '' '总金额' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'WAERK' '' '货币' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'ZTERM' '' '付款条件' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'MATNR_01' '' '物料编码' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'GGXH' '' '规格型号' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'CPMC_01' '' '物料描述' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'EDATU' '' '请求交货日期' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'PSTYV' '' '行项目类别' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'VKORG' '' '销售组织' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'VTWEG' '' '分销渠道' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'SPART' '' '产品组' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'VKGRP' '' '销售组' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'KUNNR' '' '客户编码' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'KUNNR_1' '' '送达方' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'WERKS' '' '工厂' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'AUGRU' '' '订单原因' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'POSNR' '' '行项目' '' '' '' '' '' ''.
PERFORM fieldcat_int USING col_pos 'KPEIN' '' '价格单位' '' '' '' '' '' ''.
* 调用ALV需要使用的函数
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = cns_user_command
is_layout = it_layout
it_fieldcat = it_fieldcat
i_save = 'A'
TABLES
t_outtab = gt_item_po_01.
ENDFORM. "alv_data
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
* 获取gui状态
DATA: wa_extab TYPE slis_extab.
SET PF-STATUS 'OPEN' EXCLUDING rt_extab.
ENDFORM. "set_pf_status
FORM fieldcat_int USING p_col_pos " 1
p_fieldname " 2
p_key " 3
p_seltext_l " 4
p_edit
p_zero
p_checkbox
p_no_out
p_tname
p_fname.
wa_fieldcat-col_pos = p_col_pos.
wa_fieldcat-fieldname = p_fieldname.
wa_fieldcat-key = p_key.
* wa_fieldcat-coltext = p_seltext_l.
wa_fieldcat-seltext_l = p_seltext_l.
wa_fieldcat-edit = p_edit.
wa_fieldcat-no_zero = p_zero.
wa_fieldcat-checkbox = p_checkbox.
wa_fieldcat-no_out = p_no_out.
* wa_fieldcat-colddictxt = 'L'.
wa_fieldcat-ref_tabname = p_tname.
wa_fieldcat-ref_fieldname = p_fname.
APPEND wa_fieldcat TO it_fieldcat.
p_col_pos = p_col_pos + 1.
CLEAR: wa_fieldcat.
ENDFORM. "FIELDCAT_INT