**&--------------------------------------------------------------------*
**---------------------------------------------------------------------*
** PROGRAM ID :ZMMR0006 *
** DESCRIPTION :采购计划协议批导 *
** APPLICATION NAME :MM *
** TRANSACTION :N/A *
** DEVELOPMENT CLAS@5B@ :ZMIND001 *
** AUTHOR : *
** REQ DATE : *
**---------------------------------------------------------------------*
**=====================================================================*
** MODIFICATIONS *
**---------------------------------------------------------------------*
** DATE CHANGE BY DESCRIPTION TR NO. *
**---------------------------------------------------------------------*
** 20241229 采购计划协议批导 DS4K900065 *
**---------------------------------------------------------------------*
REPORT zmmr0006.
*&---------------------------------------------------------------------*
*& 包含 ZMMR0006_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS: slis,icon,truxs.
TABLES: sscrfields.
DATA: functxt TYPE smp_dyntxt.
*导入模板
DATA: BEGIN OF i_data,
zxh(4) TYPE n,
bsart TYPE string, "计划协议类型
ebeln TYPE string, "协议编号
bukrs TYPE string, "公司代码
* bstyp TYPE string, "凭证类别
lifnr TYPE string, "供应商
waers TYPE string, "货币
ekorg TYPE string, "采购组织
ekgrp TYPE string, "采购组
kdatb TYPE string, "有效起始日期
kdate TYPE string, "有效截至日期
aedat TYPE string, "协议日期
unsez TYPE string, " 我方参考
* ebelp TYPE string, "行项目
pstyp TYPE string, "项目类别
ematn TYPE string, "物料编码
txz01 TYPE string, "短文本
ktmng TYPE string, "目标数量
meins TYPE string, "订单单位
netpr TYPE string, "净价
peinh TYPE string, "价格单位
bprme TYPE string, "订单价格单位(采购)
* matkl TYPE string, "物料组
werks TYPE string, "工厂
lgort TYPE string, "库存地点
* bstae TYPE string, "确认控制默认0001
uebtk TYPE string, "无限制过量交货
etfz1 TYPE string, "确定域
etfz2 TYPE string, "平衡域
kzstu TYPE string, "捆绑在MRP
* loekz TYPE string , "删除标识
light(4) TYPE c, "执行情况
message TYPE string, "消息
END OF i_data.
DATA: t_data LIKE TABLE OF i_data, "ALV显示
w_data LIKE LINE OF t_data.
DATA: BEGIN OF l_data2 OCCURS 0,
zxh(4) TYPE n,
bsart TYPE ekko-bsart, "计划协议类型
ebeln TYPE ekko-ebeln, "协议编号
bukrs TYPE ekko-bukrs, "公司代码
* bstyp TYPE ekko-bstyp, "凭证类别
lifnr TYPE ekko-lifnr, "供应商
waers TYPE ekko-waers, "货币
ekorg TYPE ekko-ekorg, "采购组织
ekgrp TYPE ekko-ekgrp, "采购组
kdatb TYPE ekko-kdatb, "有效起始日期
kdate TYPE ekko-kdate, "有效截至日期
aedat TYPE ekko-aedat, "协议日期
unsez TYPE ekko-unsez, " 我方参考
* ebelp TYPE ekpo-ebelp, "行项目
pstyp TYPE ekpo-pstyp, "项目类别
ematn TYPE ekpo-ematn, "物料编码
txz01 TYPE ekpo-txz01, "短文本
ktmng TYPE ekpo-ktmng, "目标数量
meins TYPE ekpo-meins, "订单单位
netpr TYPE ekpo-netpr, "净价
peinh TYPE ekpo-peinh, "价格单位
bprme TYPE ekpo-bprme, "订单价格单位(采购)
* matkl TYPE ekpo-matkl, "物料组
werks TYPE ekpo-werks, "工厂
lgort TYPE ekpo-lgort, "库存地点
* bstae TYPE ekpo-bstae, "确认控制默认0001
uebtk TYPE ekpo-uebtk, "无限制过量交货
etfz1 TYPE ekpo-etfz1, "确定域
etfz2 TYPE ekpo-etfz2, "平衡域
kzstu TYPE ekpo-kzstu, "捆绑在MRP
* loekz TYPE ekpo-loekz , "删除标识
light(4) TYPE c, "执行情况
message TYPE string, "消息
END OF l_data2.
DATA:ls_data2 LIKE l_data2,
t_data_dl LIKE TABLE OF l_data2. "ALV显示
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid.
DATA lv_c1(10) TYPE c.
DATA lv_n1(2) TYPE n.
DATA lv_ebelp TYPE ebelp.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-901.
"单选按钮
PARAMETERS: p_dwload RADIOBUTTON GROUP ch DEFAULT 'X' USER-COMMAND a,
p_upload RADIOBUTTON GROUP ch.
SELECTION-SCREEN: FUNCTION KEY 1.
PARAMETERS: p_file LIKE rlgrap-filename MODIF ID lo. "文件路径
SELECTION-SCREEN END OF BLOCK blk1.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM select_path.
AT SELECTION-SCREEN OUTPUT.
IF p_dwload = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'LO'.
screen-active = '0'.
ENDIF .
IF screen-group1 = 'X'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF p_upload = 'X'.
LOOP AT SCREEN.
IF screen-group1 = 'LO'.
screen-active = '1'.
ENDIF.
IF screen-group1 = 'X'.
screen-active = '1'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
START-OF-SELECTION.
IF p_dwload = 'X'.
* 下载模板
PERFORM temp_excel_get USING sy-repid.
ELSE.
IF NOT p_file IS INITIAL.
CLEAR: t_data[].
* 数据导入
PERFORM upload_material_data.
PERFORM get_data_pd.
* FIELDCAT
PERFORM build_fieldcatalog.
* LAYOUT
PERFORM build_layout.
* ALV展示
PERFORM display_alv_report.
ELSE.
MESSAGE '请输入文件路径!' TYPE '@5B@' DISPLAY LIKE '@5C@'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& 包含 ZMMR0003_FORM
*&---------------------------------------------------------------------*
FORM temp_excel_get USING p_objid TYPE wwwdata-objid.
"-----检查系统是否纯在模板
DATA: lv_objname TYPE wwwdata-objid.
DATA: ls_objdata TYPE wwwdatatab.
DATA:lv_ret TYPE abap_bool,
lv_answer.
"-----弹出选择存放的路径.
DATA: lv_window_title TYPE string VALUE '文件下载',
lv_default_extension TYPE string VALUE 'XLS', "缺省文件类型
lv_default_file_name TYPE string,
lv_file_filter TYPE string VALUE 'EXCEL 文件 (*.XLS)|*.XLS|EXCEL 文件 (*.XLSX)|*.XLSX|所有文件 (*.*)|*.*|',
lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_user_action TYPE i.
DATA: lv_key TYPE wwwdatatab,
lv_destination TYPE rlgrap-filename,
lv_rc TYPE i,
lv_temp TYPE c.
"****----------------------------------------------
CLEAR:ls_objdata.
*从SAP服务器中下载EXCEL模板
SELECT SINGLE relid
objid
text
FROM wwwdata "存对象模板的表
INTO CORRESPONDING FIELDS OF ls_objdata
WHERE srtf2 = 0
AND relid = 'MI' "有三种类型 HT MI IT
AND objid = p_objid. "MONTLYSTOCK
IF sy-subrc <> 0.
MESSAGE 'EXCEL 模板不存在,请用TCODE:SMW0进行加载' TYPE '@5C@'.
RETURN.
ENDIF.
IF ls_objdata-objid = space .
MESSAGE 'EXCEL 模板不存在,请用TCODE:SMW0进行加载' TYPE '@5C@'.
RETURN.
ENDIF.
lv_default_file_name = ls_objdata-text && sy-datum && '.XLS'."模板名称=系统中模板描述
"---检查模板是否存在
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_default_file_name
RECEIVING
result = lv_ret
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = lv_window_title
default_extension = lv_default_extension
default_file_name = lv_default_file_name
file_filter = lv_file_filter
CHANGING
filename = lv_filename "获得用户输入文件名
path = lv_path "获得用户所选路径
fullpath = lv_fullpath "路径加文件名
user_action = lv_user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF lv_user_action = ( cl_gui_frontend_services=>action_ok ).
* 下载模板
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF lv_key
FROM wwwdata
WHERE objid = p_objid .
lv_destination = lv_fullpath.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_key
destination = lv_destination
IMPORTING
rc = lv_rc
CHANGING
temp = lv_temp.
IF lv_rc <> 0.
MESSAGE '下载EXCEL模板出错' TYPE '@5C@'.
STOP.
ENDIF.
ELSE.
MESSAGE '已取消选择下载文件!' TYPE '@5B@'.
ENDIF.
ENDIF.
ENDFORM. " TEMP_EXCEL_GET
FORM upload_material_data .
DATA: lt_intern TYPE TABLE OF zalsmex_tabline,
lw_intern TYPE zalsmex_tabline.
DATA : ld_index TYPE i.
FIELD-SYMBOLS: <fs>.
*EXCEL导入
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 4
i_end_col = 26
i_end_row = 65535
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'EXCEL数据导入失败!' TYPE '@5C@'.
ENDIF.
* 数据保存到内表
LOOP AT lt_intern INTO lw_intern.
MOVE lw_intern-col TO ld_index.
ASSIGN COMPONENT ld_index OF STRUCTURE w_data TO <fs>.
MOVE lw_intern-value TO <fs>.
AT END OF row.
APPEND w_data TO t_data.
CLEAR w_data.
ENDAT.
ENDLOOP.
LOOP AT t_data ASSIGNING FIELD-SYMBOL(<fs_t_data>).
MOVE-CORRESPONDING <fs_t_data> TO ls_data2.
APPEND ls_data2 TO l_data2.
ENDLOOP.
t_data_dl[] = l_data2[].
SORT t_data_dl BY zxh.
DELETE ADJACENT DUPLICATES FROM t_data_dl COMPARING zxh.
ENDFORM.
FORM select_path .
DATA v_matnr LIKE rlgrap-filename.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mask = ',*.* ,*.*.'
mode = 'O'
title = '请选择要上传的信息文件'
IMPORTING
filename = v_matnr
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
p_file = v_matnr.
ENDFORM. " SELECT_PATH
FORM build_fieldcatalog.
CLEAR: fieldcatalog.
DEFINE build_fieldcat.
fieldcatalog-fieldname = &1.
fieldcatalog-seltext_m = &2.
fieldcatalog-outputlen = &3.
IF fieldcatalog-fieldname = 'LIGHT'.
fieldcatalog-key = 'X'.
ENDIF.
IF fieldcatalog-fieldname = 'MESSAGE'.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
ENDIF.
IF fieldcatalog-fieldname = 'EBELN'.
fieldcatalog-key = 'X'.
ENDIF.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
END-OF-DEFINITION.
build_fieldcat 'ZXH' '序号' 10.
build_fieldcat 'BSART' '计划协议类型' 10.
build_fieldcat 'EBELN' '协议编号' 4.
build_fieldcat 'BUKRS' '公司代码' 1.
* build_fieldcat 'BSTYP' '凭证类别' 10.
build_fieldcat 'LIFNR' '供应商' 4.
build_fieldcat 'WAERS' '货币' 5.
build_fieldcat 'EKORG' '采购组织' 4.
build_fieldcat 'EKGRP' '采购组' 8.
build_fieldcat 'KDATB' '有效起始日期' 8.
build_fieldcat 'KDATE' '有效截至日期' 8.
build_fieldcat 'AEDAT' '协议日期' 8.
build_fieldcat 'UNSEZ' '我方参考' 8.
* build_fieldcat 'EBELP' '行项目' 3.
build_fieldcat 'PSTYP' '项目类别' 1.
build_fieldcat 'EMATN' '物料编码' 40.
build_fieldcat 'TXZ01' '短文本' 40.
build_fieldcat 'KTMNG' '目标数量' 28.
build_fieldcat 'MEINS' '订单单位' 3.
build_fieldcat 'NETPR' '净价' 9.
build_fieldcat 'PEINH' '价格单位' 4.
build_fieldcat 'BPRME' '订单价格单位(采购)' 3.
build_fieldcat 'WERKS' '工厂' 4.
build_fieldcat 'LGORT' '库存地点' 4.
* build_fieldcat 'BSTAE' '确认控制' 4.
build_fieldcat 'UEBTK' '无限制过量交货' 1.
build_fieldcat 'ETFZ1' '确定域' 3.
build_fieldcat 'ETFZ2' '平衡域' 3.
build_fieldcat 'KZSTU' '捆绑在MRP' 1.
* build_fieldcat 'KZSTU' '捆绑在MRP' 1.
build_fieldcat 'LIGHT' '执行情况' 1.
build_fieldcat 'MESSAGE' '消息' 1.
ENDFORM. "BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& FORM BUILD_LAYOUT
*&---------------------------------------------------------------------*
* LAYOUT
*----------------------------------------------------------------------*
FORM build_layout.
gd_layout-colwidth_optimize = 'X'.
gd_layout-zebra = 'X'.
gd_layout-header_text = '库存期初批导'.
ENDFORM. "BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& FORM DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* ALV 展示
*----------------------------------------------------------------------*
FORM display_alv_report.
gd_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gd_repid
i_callback_pf_status_set = 'ALV_STATUS_SET'
i_callback_user_command = 'FRM_USER_COMMAND'
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
i_save = 'A'
TABLES
t_outtab = l_data2[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "DISPLAY_ALV_REPORT
FORM alv_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZALV_STATUS' .
ENDFORM.
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
"实时更新内表数据
DATA:ref_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid. " 获取全局变量
CALL METHOD ref_grid->check_changed_data. " 获取响应事件
rs_selfield-refresh = 'X'.
CASE r_ucomm.
WHEN 'ZXZ'.
PERFORM set_alv_data.
ENDCASE.
"刷新ALV
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid. " 获取全局变量
CALL METHOD ref_grid->check_changed_data. " 获取响应事件
rs_selfield-refresh = 'X'.
ENDFORM.
FORM set_alv_data.
TYPES: BEGIN OF ty_header,
line(50) TYPE c,
END OF ty_header.
DATA:
lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_destination LIKE rlgrap-filename,
ls_objdata LIKE wwwdatatab,
lv_objid TYPE wwwdatatab-objid,
lv_fname TYPE string.
DATA: lt_header TYPE STANDARD TABLE OF ty_header, " 内表
ls_header LIKE LINE OF lt_header. " 结构体
LOOP AT fieldcatalog ASSIGNING FIELD-SYMBOL(<fs_cat>).
ls_header-line = <fs_cat>-seltext_m.
APPEND ls_header TO lt_header.
ENDLOOP.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_file_name = lv_fname
window_title = '另存为:'
default_extension = 'xls' "默认保存的类型
file_filter = '.xls' "选择要另存的文件类型
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
CALL FUNCTION 'GUI_DOWNLOAD' " 使用GUI_DOWNLOAD函数将内表数据导入到Excel文件中
EXPORTING
filename = lv_filename
filetype = 'DAT'
TABLES
data_tab = t_data
fieldnames = lt_header
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
ENDFORM.
FORM get_file_name USING p_extension
p_file_filter
CHANGING p_fullpath.
DATA: l_filename TYPE string,
l_path TYPE string,
l_fullpath TYPE string,
l_titile TYPE string,
l_init_dir TYPE string.
CLEAR p_fullpath.
l_titile = '采购计划协议批导'.
l_init_dir = TEXT-t03.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = l_titile
default_extension = '.XLSX'
initial_directory = l_init_dir
prompt_on_overwrite = 'X'
file_filter = p_file_filter
CHANGING
filename = l_filename
path = l_path
fullpath = l_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
p_fullpath = l_fullpath.
ENDFORM. "GET_FILE_NAME
FORM get_data_pd .
DATA: ls_header TYPE bapimeoutheader,
ls_headerx TYPE bapimeoutheaderx,
ls_item TYPE bapimeoutitem,
lt_item TYPE bapimeout_t_item,
ls_itemx TYPE bapimeoutitemx,
lt_itemx TYPE bapimeout_t_itemx,
ls_item_con TYPE bapimeoutcondition,
lt_item_con TYPE TABLE OF bapimeoutcondition,
ls_item_conx TYPE bapimeoutconditionx,
lt_item_conx TYPE TABLE OF bapimeoutconditionx,
lt_validity TYPE TABLE OF bapimeoutvalidity, "条件的有效期间
ls_validity TYPE bapimeoutvalidity,
lt_validityx TYPE TABLE OF bapimeoutvalidityx, "更改参数 - 条件的有效期间
ls_validityx TYPE bapimeoutvalidityx,
ls_schedule TYPE bapimeoutschedule,
lt_schedule TYPE bapimeout_t_schedule,
ls_schedulex TYPE bapimeoutschedulex,
lt_schedulex TYPE bapimeout_t_schedulex,
l_ebeln TYPE bapimeoutheader-number,
lt_return TYPE bapiret2_t,
ls_return TYPE bapiret2.
LOOP AT t_data_dl ASSIGNING FIELD-SYMBOL(<fs_dl>).
ls_header-vendor = |{ <fs_dl>-lifnr ALPHA = IN } |."供应商
ls_header-number = <fs_dl>-ebeln. "采购凭证编号
ls_header-doc_type = <fs_dl>-bsart. "计划协议类型
ls_header-comp_code = <fs_dl>-bukrs. "公司代码
ls_header-purch_org = <fs_dl>-ekorg. "采购组织
ls_header-pur_group = <fs_dl>-ekgrp. "采购组
ls_header-vper_start = <fs_dl>-kdatb. "有效起始日期
ls_header-vper_end = <fs_dl>-kdate. "有效截至日期
ls_header-doc_date = <fs_dl>-aedat. "采购凭证日期
ls_header-our_ref = <fs_dl>-unsez. "我方参考
IF <fs_dl>-waers IS INITIAL.
SELECT SINGLE lifnr,ekorg,waers FROM lfm1 INTO @DATA(ls_lfmi) WHERE lifnr = @<fs_dl>-lifnr.
IF sy-subrc = 0.
ls_header-currency = ls_lfmi-waers. "货币
ENDIF.
ELSE.
ls_header-currency = <fs_dl>-waers. "货币
ENDIF.
ls_headerx-vendor = 'X'. "供应商
ls_headerx-doc_type = <fs_dl>-bsart. "公司代码
ls_headerx-number = 'X'. "采购凭证编号
ls_headerx-comp_code = 'X'. "公司代码
* ls_headerx-doc_type = 'X'. "采购凭证类型
ls_headerx-purch_org = 'X'. "采购组织
ls_headerx-pur_group = 'X'. "采购组
ls_headerx-vper_start = 'X'. "有效起始日期
ls_headerx-vper_end = 'X'. "有效截至日期
ls_headerx-doc_date = 'X'. "采购凭证日期
ls_headerx-our_ref = 'X'. "我方参考
ls_headerx-currency = 'X'. "货币
CLEAR: lt_item[],lt_itemx[],lt_schedule[],lt_schedulex[],ls_item_con,lt_item_con[].
CLEAR:lt_validityx,lt_validity.
CLEAR: ls_item,ls_itemx.
CLEAR: lv_c1, lv_n1,lv_ebelp.
LOOP AT l_data2 ASSIGNING FIELD-SYMBOL(<fs_data2>) WHERE zxh = <fs_dl>-zxh.
SELECT SINGLE matnr ,spras,maktx FROM makt INTO @DATA(ls_makt)
WHERE matnr = @<fs_data2>-ematn
AND spras = '1'.
lv_ebelp = lv_ebelp + 10. "项目类别
ls_item-item_no = lv_ebelp.
* IF sy-subrc = 0.
lv_c1 = lv_c1 + 1.
lv_n1 = lv_n1 + 1.
CLEAR:ls_item_con,ls_item_conx.
ls_item_con-item_no = lv_ebelp.
ls_item_con-serial_id = lv_c1.
ls_item_con-cond_count = lv_n1."'01'.
ls_item_con-cond_type = 'PB00'.
ls_item_con-cond_value = <fs_data2>-netpr."净价
ls_item_con-currency = ls_lfmi-waers."'RMB'."货币码
ls_item_con-cond_unit = <fs_data2>-meins."'EA'.
ls_item_con-cond_p_unt = 1.
ls_item_con-calctypcon = 'C'.
APPEND ls_item_con TO lt_item_con.
ls_item_conx-item_no = lv_ebelp.
ls_item_conx-serial_id = lv_c1.
ls_item_conx-cond_count = lv_n1."'01'.
ls_item_conx-item_nox = 'X'.
ls_item_conx-serial_idx = 'X'.
ls_item_conx-cond_countx = 'X'.
ls_item_conx-cond_type = 'X'.
ls_item_conx-cond_value = 'X'.
ls_item_conx-currency = 'X'.
ls_item_conx-cond_unit = 'X'.
ls_item_conx-cond_p_unt = 'X'.
ls_item_conx-calctypcon = 'X'.
APPEND ls_item_conx TO lt_item_conx.
CLEAR:ls_validity,ls_validityx.
ls_validity-item_no = lv_ebelp.
ls_validity-serial_id = lv_c1.
ls_validity-valid_from = <fs_dl>-kdatb.
ls_validity-valid_to = <fs_dl>-kdate.
APPEND ls_validity TO lt_validity.
ls_validityx-item_no = lv_ebelp.
ls_validityx-serial_id = lv_c1.
ls_validityx-valid_from = 'X'.
ls_validityx-valid_to = 'X'.
APPEND ls_validityx TO lt_validityx.
* ENDIF.
ls_item-ematerial_long = <fs_data2>-ematn. "物料编号
ls_item-plant = <fs_data2>-werks. "工厂
ls_item-stge_loc = <fs_data2>-lgort. "存储地点
ls_item-net_price = <fs_data2>-netpr. "净价
ls_item-po_unit = <fs_data2>-meins. "采购订单计量单位
ls_item-short_text = ls_makt-maktx. "短文本
ls_item-target_qty = <fs_data2>-ktmng. "目标数量
ls_item-price_unit = <fs_data2>-peinh. "价格单位
ls_item-orderpr_un = <fs_data2>-bprme. "订单价格单位(采购)
* ls_item-matl_group = <fs_data2>-matkl. "物料组
ls_item-item_cat = <fs_data2>-pstyp. "物料组
ls_item-conf_ctrl = '0001'. "确认控制
ls_item-unlimited_dlv = <fs_data2>-uebtk. "无限制过量交货
ls_item-firm_zone = <fs_data2>-etfz1. "确定的域
ls_item-trade_off = <fs_data2>-etfz2. "平衡区域
ls_item-binding_mrp = <fs_data2>-kzstu. "捆绑在MRP.
* ls_item-delete_ind = <fs_input>-loekz. "删除标识.
ls_item-info_upd = 'C'. "删除标识.
APPEND ls_item TO lt_item.
ls_itemx-item_no = lv_ebelp. "项目类别
ls_itemx-item_nox = 'X'. "
ls_itemx-ematerial_long = 'X'. "物料编号
ls_itemx-plant = 'X'. "工厂
ls_itemx-stge_loc = 'X'. "存储地点
ls_itemx-net_price = 'X'. "净价
ls_itemx-po_unit = 'X'. "采购订单计量单位
ls_itemx-short_text = 'X'. "短文本
ls_itemx-target_qty = 'X'. "目标数量
ls_itemx-price_unit = 'X'. "价格单位
ls_itemx-orderpr_un = 'X'. "订单价格单位(采购)
* ls_itemx-matl_group = 'X'. "物料组
ls_itemx-item_cat = 'X'. "采购凭证中的项目类别
ls_itemx-conf_ctrl = 'X'. "确认控制
ls_itemx-unlimited_dlv = 'X'. "无限制过量交货
ls_itemx-firm_zone = 'X'. "确定的域
ls_itemx-trade_off = 'X'. "平衡区域
ls_itemx-binding_mrp = 'X'. "捆绑在MRP.
* ls_itemx-delete_ind = 'X'. "删除标识
ls_itemx-info_upd = 'X'. "删除标识
APPEND ls_itemx TO lt_itemx.
ENDLOOP.
IF <fs_dl>-ebeln IS INITIAL.
IF l_data2-light NE '@5C@'.
CALL FUNCTION 'BAPI_SAG_CREATE'
EXPORTING
header = ls_header
headerx = ls_headerx
IMPORTING
purchasingdocument = l_ebeln
TABLES
return = lt_return
item = lt_item
itemx = lt_itemx
item_cond_validity = lt_validity
item_cond_validityx = lt_validityx
item_condition = lt_item_con
item_conditionx = lt_item_conx.
ELSE.
<fs_dl>-light = l_data2-light.
<fs_dl>-message = l_data2-message.
<fs_dl>-unsez = l_ebeln.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_SAG_CHANGE'
EXPORTING
purchasingdocument = <fs_dl>-ebeln
header = ls_header
headerx = ls_headerx
TABLES
return = lt_return
item = lt_item
itemx = lt_itemx
item_cond_validity = lt_validity
item_cond_validityx = lt_validityx
item_condition = lt_item_con
item_conditionx = lt_item_conx.
ENDIF.
LOOP AT lt_return INTO ls_return WHERE type CA 'EA'.
IF <fs_dl>-message IS INITIAL.
<fs_dl>-message = ls_return-message.
ELSE.
<fs_dl>-message = |{ l_data2-message },{ ls_return-message }|.
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<fs_dl>-light = '@5C@'.
ELSE.
LOOP AT lt_return INTO ls_return .
IF ls_return-type = 'S'.
<fs_dl>-message = ls_return-message.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
<fs_dl>-light = '@5B@'.
<fs_dl>-unsez = l_ebeln.
ENDIF.
CLEAR: ls_header,ls_headerx,l_ebeln,lt_return[],lt_item[],lt_itemx[],lt_validity[],lt_validityx[],lt_item_con[],lt_item_conx.
ENDLOOP.
SORT t_data_dl BY zxh.
LOOP AT l_data2 ASSIGNING FIELD-SYMBOL(<fs_data>).
READ TABLE t_data_dl INTO DATA(ls_data_dl) WITH KEY zxh = <fs_data>-zxh BINARY SEARCH.
IF sy-subrc = 0.
<fs_data>-unsez = ls_data_dl-unsez.
<fs_data>-light = ls_data_dl-light.
<fs_data>-message = ls_data_dl-message.
ENDIF.
ENDLOOP.
ENDFORM.此代码中价格单位维护1000 但是me33l前台显示1 为什么 怎么解决
最新发布