注意:数量和金额必须用字符,否则 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.
<