ABAP 期初库存批量导入 demo1

&---------------------------------------------------------------------
*& Report ZMMCP005
&---------------------------------------------------------------------

  • 作者: Liv
  • 完成日期:
  • 描述: 期初库存导入
  • 需求简要说明:
    &---------------------------------------------------------------------
  • 版本号 日期 作者 修改描述 功能更改说明书
    &---------------------------------------------------------------------
  • 1.0 2021/11/19 Liv 程序创建
    *&
    &---------------------------------------------------------------------
    REPORT zmmcp005 MESSAGE-ID 00.

TABLES:sscrfields.
TYPE-POOLS: slis.
INCLUDE .

DEFINE append_str.
CONCATENATE &1 &2 INTO &1 SEPARATED BY ‘,’.
END-OF-DEFINITION.

DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.

*&For DOC ALV
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_event TYPE slis_t_event,
it_layout TYPE slis_layout_alv,
w_callback_ucomm TYPE slis_formname,
i_list_comments TYPE slis_t_listheader,
w_list_comments LIKE LINE OF i_list_comments,
i_events TYPE slis_t_event,
w_events LIKE LINE OF i_events.

*定义隐藏标准按钮的变量
DATA: wa_excluding TYPE slis_extab,
it_excluding TYPE slis_t_extab.

DEFINE initial_field.

wa_fieldcat-ddictxt = ‘L’.
wa_fieldcat-fieldname = &1 .
wa_fieldcat-seltext_l = &2 .
wa_fieldcat-seltext_m = &2 .
wa_fieldcat-seltext_s = &2 .
wa_fieldcat-reptext_ddic = &2.
wa_fieldcat-no_zero = &3.
wa_fieldcat-key = &4.
wa_fieldcat-just = &5.
wa_fieldcat-ref_fieldname = &6.
wa_fieldcat-ref_tabname = &7.

  • IF WA_FIELDCAT-FIELDNAME = ‘Z_KPI’.
  • WA_FIELDCAT-INTLEN = 18.
    
  • ENDIF.

APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.

*DATA gt_input LIKE TABLE OF zcpfit_0600 WITH HEADER LINE. "久其报表KPI数据源配置表

DATA:BEGIN OF gt_input OCCURS 0,
zlsh TYPE i,
zhxm TYPE i,
zks , " 开始
zjs , " 结束
zmess_h(255) , " 抬头系统消息
zmess_i(255) , " 行项目系统消息
bldat LIKE gohead-bldat , " 凭证日期
budat LIKE gohead-budat , " 过账日期
bwart LIKE godefault_tv-bwart , " 移动类型
bktxt LIKE gohead-bktxt , " 抬头文本
werks LIKE goitem-werks, " 工厂
name1 LIKE t001w-name1 , " 工厂名称
lgobe LIKE goitem-lgobe , " 库存地点
zxh(20) , " 序号
matnr LIKE goitem-matnr , " 物料
maktx LIKE goitem-maktx , " 物料描述
xchar LIKE marc-xchar , " 批次启用标识
charg LIKE goitem-charg , " 批次
erfmg LIKE goitem-erfmg , " 数量
meins LIKE mara-meins , " 计量单位
lifnr LIKE goitem-lifnr , " 供应商
kunnr LIKE goitem-kunnr , " 客户
dmbtr LIKE goitem-dmbtr , " 总金额
sobkz LIKE goitem-sobkz , " 特殊库存标识
kdauf LIKE goitem-kdauf , " 销售订单
kdpos LIKE goitem-kdpos , " 行项目
bklas LIKE mbew-bklas , " 系统评估类
vprsv LIKE mbew-vprsv , " 系统价格控制
stprs LIKE mbew-stprs , " 系统标准单价
zprice LIKE goitem-dmbtr , " 系统计算总价
class LIKE klah-class , " 系统分类代码

  •   zflbm(20) ,                     "  分类代码
    
  •   mwert01      LIKE rctms-mwert , "  特性1
    
  •   mwert02      LIKE rctms-mwert , "  特性2
    
  •   mwert03      LIKE rctms-mwert , "  特性3
    
  •   mwert04      LIKE rctms-mwert , "  特性4
    
  •   mwert05      LIKE rctms-mwert , "  特性5
    
  •   mwert06      LIKE rctms-mwert , "  特性6
    
  •   mwert07      LIKE rctms-mwert , "  特性7
    
  •   mwert08      LIKE rctms-mwert , "  特性8
    
  •   mwert09      LIKE rctms-mwert , "  特性9
    
  •   mwert10      LIKE rctms-mwert , "  特性10
    
  •   mwert11      LIKE rctms-mwert , "  特性11
    
  •   mwert12      LIKE rctms-mwert , "  特性12
    
  •   mwert13      LIKE rctms-mwert , "  特性13
     icon         TYPE icon_d, "图标
    
    END OF gt_input.

DATA gt_input_hd LIKE TABLE OF gt_input WITH HEADER LINE.
DATA gt_input_it LIKE TABLE OF gt_input WITH HEADER LINE.

DATA BEGIN OF iexcel OCCURS 0. " excel上载内表
INCLUDE STRUCTURE alsmex_tabline.
DATA END OF iexcel.

DATA: error TYPE REF TO cx_root,
lv_message TYPE string.

DATA: gv_message_h TYPE string,
gv_message_i TYPE string,
gv_msg_h TYPE string,
gv_msg_i TYPE string.
DATA: gv_subrc LIKE sy-subrc.

SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.

PARAMETERS: p_file LIKE rlgrap-filename DEFAULT ‘’ . "文件目录.
SELECTION-SCREEN SKIP.
*
*PARAMETERS: R1 RADIOBUTTON GROUP RG1,

  •        R2 RADIOBUTTON GROUP RG1.
    

SELECTION-SCREEN: END OF BLOCK b1.

INITIALIZATION.
sscrfields-functxt_01 = ‘模板下载’.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM get_filename.

** 权限检查

  • PERFORM AUTHORITY_CHECK.

AT SELECTION-SCREEN.

CASE sscrfields-ucomm .
WHEN ‘FC01’.
DATA rec_objdata LIKE wwwdatatab.
rec_objdata-relid = ‘MI’.
rec_objdata-objid = ‘ZMMCP005’.
** 下载模版
CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’
EXPORTING
key = rec_objdata
destination = p_file.
WHEN OTHERS.
ENDCASE.

*-----------------------------------------------------------------------

  • START-OF-SELECTION
    *-----------------------------------------------------------------------

START-OF-SELECTION.

PERFORM read_data .
PERFORM check_data .

PERFORM initialize_fieldcat .
PERFORM build_layout .
PERFORM display_alv TABLES gt_input[].

&---------------------------------------------------------------------
*& Form READ_DATA
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM read_data .

FIELD-SYMBOLS LIKE LINE OF iexcel.
CLEAR: iexcel[],
iexcel.

*上载excel文件
CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 3
i_end_col = 50
i_end_row = 5000
TABLES
intern = iexcel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
WRITE: / 'EXCEL 上载失败 ', p_file, sy-subrc.
STOP.
ELSE.
SORT iexcel BY row col.
ENDIF.

*excel内表中的数据放到内表中
LOOP AT iexcel ASSIGNING .

  • CONDENSE -value NO-GAPS.
    CASE -col.
    WHEN 1. "开始
    gt_input-zks = -value.
    WHEN 2. "结束
    gt_input-zjs = -value.
    WHEN 4. "凭证日期
    gt_input-bldat = -value.
    WHEN 5. "过账日期
    gt_input-budat = -value.
    WHEN 6. "移动类型
    gt_input-bwart = -value.
    WHEN 7. "抬头文本
    gt_input-bktxt = -value.
    WHEN 8. "工厂
    gt_input-werks = -value.
    WHEN 9. "库存地点
    gt_input-lgobe = -value.
    WHEN 10. "序号
    gt_input-zxh = -value.
    WHEN 11. "物料
    gt_input-matnr = -value.
    WHEN 12. "物料描述
    gt_input-maktx = -value.
    WHEN 13. "批次
    gt_input-charg = -value.
    WHEN 14. "数量
    gt_input-erfmg = -value.
    WHEN 15. "计量单位
    gt_input-meins = -value.
    WHEN 16. "总金额
    gt_input-dmbtr = -value.
    WHEN 17. "特殊库存标识
    gt_input-sobkz = -value.
    WHEN 18. "销售订单
    gt_input-kdauf = -value.
    WHEN 19. "行项目
    gt_input-kdpos = -value.
    ENDCASE.
AT END OF row.
  APPEND gt_input. CLEAR gt_input.
ENDAT.

ENDLOOP.

ENDFORM. "READ_DATA

FORM check_data .

DATA:l_tabix LIKE sy-tabix.
DATA:l_start_flag,l_end_flag.
DATA:l_lsh TYPE i,l_hxm TYPE i.

LOOP AT gt_input.
IF gt_input-zks = ‘S’.
l_lsh = l_lsh + 1.
l_hxm = 1.
ELSE.
l_hxm = l_hxm + 1.
ENDIF.

gt_input-zlsh = l_lsh.
gt_input-zhxm = l_hxm.
  •  zhxm
    

    MODIFY gt_input INDEX sy-tabix.
    ENDLOOP.

    LOOP AT gt_input WHERE zks = ‘S’ .
    gt_input_hd = gt_input.
    APPEND gt_input_hd.
    ENDLOOP.

    LOOP AT gt_input.

    l_tabix = sy-tabix.

    READ TABLE gt_input_hd WITH KEY zlsh = gt_input-zlsh.

    CLEAR: gt_input-zmess_h,gt_input-zmess_i,gt_input-icon,gv_msg_h,gv_message_h,gv_msg_i,gv_message_i.

    IF gt_input-zks = ‘S’ OR gt_input-zks IS INITIAL.
    ELSE.
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘凭证开始标识不为S’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF gt_input-zjs = ‘E’ OR gt_input-zjs IS INITIAL.
    ELSE.
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘凭证结束标识不为E’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF gt_input-zks = ‘S’ AND l_end_flag <> ‘E’ AND l_tabix <> 1.
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘上笔记录缺少凭证结束标识E’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF l_end_flag = ‘E’ AND gt_input-zks <> ‘S’ .
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘凭证开始标识不为S’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    CLEAR l_end_flag.

    IF gt_input-zks = ‘S’ AND gt_input-bldat IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘凭证日期不能为空’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF gt_input-bldat IS NOT INITIAL AND gt_input-zks <> ‘S’ .
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘凭证开始标识不为S’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF gt_input-zks = ‘S’ AND gt_input-budat IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘过账日期不能为空’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF gt_input-zks = ‘S’ AND gt_input-bwart IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_h = ‘移动类型不能为空’.
    append_str gv_message_h gv_msg_h.
    ENDIF.

    IF gt_input-werks IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘工厂不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input-lgobe IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘库存地点不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input-zxh IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘序号不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input-matnr IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘物料不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input-maktx IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘物料描述不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input-erfmg IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘数量不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input_hd-sobkz = ‘K’ AND gt_input-lifnr IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘供应商不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

    IF gt_input_hd-sobkz = ‘W’ AND gt_input-kunnr IS INITIAL.
    gt_input-icon = icon_led_red.
    gv_msg_i = ‘客户不能为空’.
    append_str gv_message_i gv_msg_i.
    ENDIF.

  • IF gt_input-dmbtr IS INITIAL.

  •  gt_input-icon = icon_led_red.
    
  •  gv_msg_i = '总金额不能为空'.
    
  •  append_str gv_message_i gv_msg_i.
    
  • ENDIF.

IF  gt_input-xchar = 'X' AND gt_input-charg IS INITIAL.
  gt_input-icon = icon_led_red.
  gv_msg_i = '批次不能为空'.
  append_str gv_message_i gv_msg_i.
ENDIF.
  • IF GT_INPUT-XCHAR = ‘X’ AND GT_INPUT-ZFLBM IS INITIAL .
  •  GT_INPUT-ICON = ICON_LED_RED.
    
  •  GV_MSG_I = '分类代码不能为空'.
    
  •  APPEND_STR GV_MESSAGE_I GV_MSG_I.
    
  • ENDIF.

*********系统取值

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' "物料前导零
  EXPORTING
    input        = gt_input-matnr
  IMPORTING
    output       = gt_input-matnr
  EXCEPTIONS
    length_error = 1
    OTHERS       = 2.

*批次启用标识
SELECT SINGLE xchar
INTO gt_input-xchar
FROM marc
WHERE matnr = gt_input-matnr
AND werks = gt_input-werks.

*工厂名称
SELECT SINGLE name1
INTO gt_input-name1
FROM t001w
WHERE werks = gt_input-werks.

*计量单位
SELECT SINGLE meins
INTO gt_input-meins
FROM mara
WHERE matnr = gt_input-matnr.

*系统标准单价
SELECT SINGLE stprs bklas vprsv
INTO ( gt_input-stprs,gt_input-bklas,gt_input-vprsv )
FROM mbewh
WHERE matnr = gt_input-matnr
AND bwkey = gt_input-werks
AND lfgja = ‘2018’
AND lfmon = ‘12’.

  •  AND vprsv = 'S'.
    

*系统计算总价
gt_input-zprice = gt_input-erfmg * gt_input-stprs.

*系统分类代码
IF gt_input-xchar = ‘X’.
SELECT SINGLE klah~class
INTO gt_input-class
FROM inob
INNER JOIN kssk
ON inob~cuobj = kssk~objek
INNER JOIN klah
ON kssk~clint = klah~clint
WHERE inob~obtab = ‘MARA’
AND inob~objek = gt_input-matnr.
ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  EXPORTING
    input  = gt_input-kdauf
  IMPORTING
    output = gt_input-kdauf.

IF  gt_input-xchar IS NOT INITIAL AND gt_input-charg IS INITIAL.
  gt_input-icon = icon_led_red.
  gv_msg_i = '批次不能为空'.
  append_str gv_message_i gv_msg_i.
ENDIF.
  • IF GT_INPUT-XCHAR IS NOT INITIAL AND GT_INPUT-ZFLBM IS INITIAL AND R2 IS NOT INITIAL.

  •  GT_INPUT-ICON = ICON_LED_RED.
    
  •  GV_MSG_I = '分类代码不能为空'.
    
  •  APPEND_STR GV_MESSAGE_I GV_MSG_I.
    
  • ENDIF.

  • IF GT_INPUT-CLASS <> GT_INPUT-ZFLBM AND R2 IS NOT INITIAL.

  •  GT_INPUT-ICON = ICON_LED_RED.
    
  •  GV_MSG_I = '分类代码与系统分类代码不一致'.
    
  •  APPEND_STR GV_MESSAGE_I GV_MSG_I.
    
  • ENDIF.


IF gv_message_h IS NOT INITIAL.
  gt_input-zmess_h = gv_message_h.
ENDIF.

IF gv_message_i IS NOT INITIAL.
  gt_input-zmess_i = gv_message_i.
ENDIF.

IF  gt_input-zjs = 'E'.
  l_end_flag = 'E'.
ENDIF.

MODIFY gt_input INDEX l_tabix.

ENDLOOP.

ENDFORM.

FORM get_filename .
CALL FUNCTION ‘WS_FILENAME_GET’
EXPORTING
def_path = ‘C’
mask = ‘,Excel,.XLSX;.XLS.’
title = ‘选择文件’
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.

IF sy-subrc <> 0 AND sy-subrc = 3.
MESSAGE ‘选择文件出错’ TYPE ‘I’ DISPLAY LIKE ‘E’.
STOP.
ENDIF.
ENDFORM. "GET_FILENAME

FORM build_layout .
it_layout-zebra = ‘X’.
it_layout-detail_popup = ‘X’.
it_layout-colwidth_optimize = ‘X’.
ENDFORM.

FORM initialize_fieldcat .

  • initial_field ‘ZLSH’ ‘流水号’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • initial_field ‘ZHXM’ ‘行项目’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ICON’ ‘状态’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ZMESS_H’ ‘抬头消息’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ZMESS_I’ ‘行项目消息’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ZKS’ ‘开始’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ZJS’ ‘结束’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘BLDAT’ ‘凭证日期’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘BUDAT’ ‘过账日期’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘BWART’ ‘移动类型’ ‘’ ‘’ ‘’ ‘’ ‘’.

initial_field ‘BKTXT’ ‘抬头文本’ ‘’ ‘’ ‘’ ‘’ ‘’.

initial_field ‘ZEMNUM’ ‘工号’ ‘’ ‘’ ‘’ ‘’ ‘’.
initial_field ‘ZPRJVD’ ‘施工单位’ ‘’ ‘’ ‘’ ‘’ ‘’.

initial_field ‘WERKS’ ‘工厂’ ‘’ ‘’ ‘’ ‘’ ‘’.

  • INITIAL_FIELD ‘NAME1’ ‘工厂名称’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘LGOBE’ ‘库存地点’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ZXH’ ‘序号’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘MATNR’ ‘物料’ ‘X’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘XCHAR’ ‘批次启用标识’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘CHARG’ ‘批次’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ERFMG’ ‘数量’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘MEINS’ ‘计量单位’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘LIFNR’ ‘供应商’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘KUNNR’ ‘客户’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘DMBTR’ ‘总金额’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘SOBKZ’ ‘特殊库存标识’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘KDAUF’ ‘销售订单’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘KDPOS’ ‘行项目’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘BKLAS’ ‘评估类’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘VPRSV’ ‘价格控制’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘STPRS’ ‘标准单价’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘ZPRICE’ ‘系统计算总价’ ‘’ ‘’ ‘’ ‘’ ‘’.
    initial_field ‘CLASS’ ‘系统分类代码’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘ZFLBM’ ‘分类代码’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT01’ ‘特性1’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT02’ ‘特性2’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT03’ ‘特性3’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT04’ ‘特性4’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT05’ ‘特性5’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT06’ ‘特性6’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT07’ ‘特性7’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT08’ ‘特性8’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT09’ ‘特性9’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT10’ ‘特性10’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT11’ ‘特性11’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT12’ ‘特性12’ ‘’ ‘’ ‘’ ‘’ ‘’.
  • INITIAL_FIELD ‘MWERT13’ ‘特性13’ ‘’ ‘’ ‘’ ‘’ ‘’.
    ENDFORM. " INITIALIZE_FIELDCAT

&---------------------------------------------------------------------
*& Form WRITE_BAPILOG_ALV
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  -->P_IT_DOC_RETURN  text
    

----------------------------------------------------------------------
FORM display_alv TABLES p_table STRUCTURE gt_input.

CLEAR:wa_excluding,it_excluding.

*设置要隐藏的FCODE

  • wa_excluding-fcode = ‘SAV_DATA’.
  • APPEND wa_excluding TO it_excluding.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = sy-repid
is_layout = it_layout
it_fieldcat = it_fieldcat

  • IT_EVENTS                = I_EVENTS
    i_callback_pf_status_set = 'SET_PF_STATUS'
    i_callback_user_command  = 'USER_COMMAND'
    i_default                = 'X'
    i_save                   = 'A'
    
    TABLES
    t_outtab = p_table
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
    MESSAGE ‘显示错误.’ TYPE ‘W’.
    STOP.
    ENDIF.
    ENDFORM. " WRITE_BAPILOG_ALV

FORM set_pf_status USING rt_extab TYPE slis_t_extab.
rt_extab = it_excluding.

  • IF R1 = ‘X’.
    SET PF-STATUS ‘STANDARD’. "EXCLUDING rt_extab.
  • ELSE.
  • SET PF-STATUS ‘ST200’. "EXCLUDING rt_extab.
  • SET TITLEBAR ‘TIT100’ WITH ‘批次库存特性信息补导入’.
  • ENDIF.
    ENDFORM. "SET_PF_STATUS

FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

DATA: lt_params LIKE rsparams OCCURS 0 WITH HEADER LINE.
DATA:l_index TYPE i.
DATA: l_varid TYPE varid.

DATA: lr_grid TYPE REF TO cl_gui_alv_grid,
is_stable TYPE lvc_s_stbl.

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = lr_grid.
CALL METHOD lr_grid->check_changed_data.

CASE r_ucomm.
WHEN ‘TEST’.

  PERFORM frm_imp_data_test.

  CALL METHOD lr_grid->refresh_table_display
    EXPORTING
      is_stable = is_stable.

WHEN 'IMPORT'.


  PERFORM frm_imp_data.
  •  CLEAR: gt_input,gt_input[].
    
    CALL METHOD lr_grid->refresh_table_display
      EXPORTING
        is_stable = is_stable.
    

    WHEN ‘IMPORT1’.

    PERFORM frm_imp_data_1.
    
    CALL METHOD lr_grid->refresh_table_display
      EXPORTING
        is_stable = is_stable.
    
  • WHEN ‘EXIT’.

  •  LEAVE PROGRAM.
    
  • WHEN ‘BACK’.

  •  LEAVE TO SCREEN 0.
    
  • WHEN ‘CANC’.

  •  LEAVE PROGRAM.
    

    WHEN OTHERS.

    ENDCASE.
    ENDFORM. "user_command

DATA:g_header LIKE bapi2017_gm_head_01.
DATA:g_mat LIKE bapi2017_gm_head_ret-mat_doc.
DATA:gt_item LIKE TABLE OF bapi2017_gm_item_create WITH HEADER LINE.
DATA:gt_ret LIKE TABLE OF bapiret2 WITH HEADER LINE.

DATA gs_bapi_te_xmkpf TYPE bapi_te_xmkpf.
DATA: gt_ext LIKE TABLE OF bapiparex WITH HEADER LINE.

DATA:txt(255) TYPE c.
DATA:code TYPE bapi2017_gm_code.

FORM frm_imp_data_test.

DATA:l_answer TYPE c.
DATA:l_subrc TYPE sy-subrc.

CLEAR: g_header,g_mat,gt_item,gt_item[],gt_ret,gt_ret[],txt,code.

IF gt_input[] IS INITIAL.
MESSAGE e001(00) WITH ‘无批导数据’.
ENDIF.

READ TABLE gt_input WITH KEY icon = icon_led_red.
IF sy-subrc = 0.
MESSAGE e001(00) WITH ‘导入数据存在错误’.
ENDIF.

READ TABLE gt_input INDEX 1.
IF gt_input-zmess_i IS NOT INITIAL.
MESSAGE e001(00) WITH ‘已生成物料凭证’.
ENDIF.

  • CALL FUNCTION ‘POPUP_TO_CONFIRM’

  • EXPORTING

  •  titlebar              = '提示'
    
  •  text_question         = '是否确认导入期初库存'
    
  •  text_button_1         = '确认'
    
  •  text_button_2         = '取消'
    
  •  default_button        = '2'
    
  •  display_cancel_button = ' '
    
  •  popup_type            = 'ICON_MESSAGE_WARNING'
    
  • IMPORTING

  •  answer                = l_answer
    
  • EXCEPTIONS

  •  text_not_found        = 1
    
  •  OTHERS                = 2.
    
  • CHECK l_answer = ‘1’.
    REFRESH gt_ext.
    LOOP AT gt_input_hd.

    CLEAR:gt_input_it,gt_input_it[].
    LOOP AT gt_input WHERE zlsh = gt_input_hd-zlsh.
    gt_input_it = gt_input.
    APPEND gt_input_it.
    ENDLOOP.
    SORT gt_input_it BY zlsh zhxm.

BAPI*************
CLEAR: g_header,gt_item,gt_item[].

g_header-pstng_date = gt_input_hd-budat. " 凭证日期
g_header-doc_date   = gt_input_hd-bldat. " 过账日期
g_header-header_txt   = gt_input_hd-bktxt. " 抬头文本
  • "* header增强字段
  • gs_bapi_te_xmkpf-zemnum = gt_input_hd-zemnum.
  • gs_bapi_te_xmkpf-zprjvd = gt_input_hd-zprjvd.
  • gt_ext-structure = ‘BAPI_TE_XMKPF’.
  • gt_ext-valuepart1 = gs_bapi_te_xmkpf.
  • APPEND gt_ext.
  • CLEAR gt_ext.
  • CLEAR gs_bapi_te_xmkpf.
" 移动类型
IF gt_input_hd-bwart = '201' OR gt_input_hd-bwart = '202' OR gt_input_hd-bwart = '551'
  OR gt_input_hd-bwart = '552' OR gt_input_hd-bwart = '261' OR gt_input_hd-bwart = '262'.
  code = '03'.
ELSEIF gt_input_hd-bwart = '701' OR gt_input_hd-bwart = '702' OR gt_input_hd-bwart = '561' OR gt_input_hd-bwart = '562'  .
  code = '05'.
ELSE.
  code = '04'.
ENDIF.

LOOP AT gt_input_it .

  gt_item-batch = gt_input_it-charg .     " 批次
  gt_item-material = gt_input_it-matnr.   " 物料
  gt_item-plant = gt_input_it-werks.      " 工厂
  gt_item-stge_loc = gt_input_it-lgobe.   " 库存地点
  gt_item-move_type = gt_input_hd-bwart.  " 移动类型
  gt_item-entry_qnt = gt_input_it-erfmg.  " 数量
  gt_item-entry_uom = gt_input_it-meins.  " 计量单位
  gt_item-spec_stock = gt_input_it-sobkz. "特殊库存标识
  gt_item-val_sales_ord = gt_input_it-kdauf. "销售订单
  gt_item-val_s_ord_item = gt_input_it-kdpos. "销售订单行项目
  •  gt_item-vendor = gt_input_hd-lifnr.     "供应商
    
  •  gt_item-customer = gt_input_hd-kunnr.   "客户
    
  •  gt_item-amount_lc = gt_input_hd-zprice. " 总金额 zprice
    gt_item-amount_lc = gt_input_it-dmbtr. " 金额
    
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'           "供应商
      EXPORTING
        input  = gt_input_it-lifnr
      IMPORTING
        output = gt_item-vendor.
    
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'           "客户
      EXPORTING
        input  = gt_input_it-kunnr
      IMPORTING
        output = gt_item-customer.
    
  •  IF gt_input_hd-sobkz = 'W'.
    
  •    gt_item-customer = gt_input_hd-lifnr.
    
  •  ELSE.
    
  •    gt_item-vendor = gt_input_hd-lifnr.
    
  •  ENDIF.
    
    APPEND gt_item.
    CLEAR gt_item.
    
  •  stprs        LIKE mbew-stprs  , " 系统标准单价
    
  •  zprice       LIKE goitem-dmbtr ,  " 系统计算总价
    

    ENDLOOP.

    IF gt_item[] IS NOT INITIAL.
    PERFORM exec_bapi USING ‘X’
    CHANGING gt_input_hd-zmess_h
    l_subrc.
    ENDIF.

    gt_input-zmess_h = gt_input_hd-zmess_h.

    IF l_subrc = 0.
    gt_input-icon = icon_led_green.
    ELSE.
    gt_input-icon = icon_led_red.
    ENDIF.

    MODIFY gt_input TRANSPORTING zmess_h icon WHERE zlsh = gt_input_hd-zlsh
    AND zhxm = 1.

    ENDLOOP.

ENDFORM.

FORM frm_imp_data.

DATA:l_answer TYPE c.
DATA:l_subrc TYPE sy-subrc.

CLEAR: g_header,g_mat,gt_item,gt_item[],gt_ret,gt_ret[],txt,code.

IF gt_input[] IS INITIAL.
MESSAGE e001(00) WITH ‘无批导数据’.
ENDIF.

READ TABLE gt_input WITH KEY icon = icon_led_red.
IF sy-subrc = 0.
MESSAGE e001(00) WITH ‘导入数据存在错误’.
ENDIF.

READ TABLE gt_input WITH KEY icon = icon_led_green.
IF sy-subrc <> 0.
MESSAGE e001(00) WITH ‘未运行导入检查’.
ENDIF.

READ TABLE gt_input INDEX 1.
IF gt_input-zmess_i IS NOT INITIAL.
MESSAGE e001(00) WITH ‘已生成物料凭证’.
ENDIF.

CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar = ‘提示’
text_question = ‘是否确认导入期初库存’
text_button_1 = ‘确认’
text_button_2 = ‘取消’
default_button = ‘2’
display_cancel_button = ’ ’
popup_type = ‘ICON_MESSAGE_WARNING’
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.

CHECK l_answer = ‘1’.

REFRESH gt_ext.

LOOP AT gt_input_hd.

CLEAR:gt_input_it,gt_input_it[].
LOOP AT  gt_input WHERE zlsh = gt_input_hd-zlsh.
  gt_input_it = gt_input.
  APPEND gt_input_it.
ENDLOOP.
SORT gt_input_it BY zlsh zhxm.

BAPI*************
CLEAR: g_header,gt_item,gt_item[].

g_header-pstng_date = gt_input_hd-budat. " 凭证日期
g_header-doc_date   = gt_input_hd-bldat. " 过账日期
g_header-header_txt   = gt_input_hd-bktxt. " 抬头文本
  • "* header增强字段

  • gs_bapi_te_xmkpf-zemnum = gt_input_hd-zemnum.

  • gs_bapi_te_xmkpf-zprjvd = gt_input_hd-zprjvd.

  • gt_ext-structure = ‘BAPI_TE_XMKPF’.

  • gt_ext-valuepart1 = gs_bapi_te_xmkpf.

  • APPEND gt_ext.

  • CLEAR gt_ext.

  • CLEAR gs_bapi_te_xmkpf.

  • G_HEADER-ZEMNUM = GT_INPUT_HD-ZEMNUM. " 工号

  •  G_HEADER-ZPRJVD   = GT_INPUT_HD-ZPRJVD. " 施工单位
    

    " 移动类型
    IF gt_input_hd-bwart = ‘201’ OR gt_input_hd-bwart = ‘202’ OR gt_input_hd-bwart = ‘551’
    OR gt_input_hd-bwart = ‘552’ OR gt_input_hd-bwart = ‘261’ OR gt_input_hd-bwart = ‘262’.
    code = ‘03’.
    ELSEIF gt_input_hd-bwart = ‘701’ OR gt_input_hd-bwart = ‘702’ OR gt_input_hd-bwart = ‘561’ OR gt_input_hd-bwart = ‘562’ .
    code = ‘05’.
    ELSE.
    code = ‘04’.
    ENDIF.

    LOOP AT gt_input_it .

    gt_item-batch = gt_input_it-charg .     " 批次
    gt_item-material = gt_input_it-matnr.   " 物料
    gt_item-plant = gt_input_it-werks.      " 工厂
    gt_item-stge_loc = gt_input_it-lgobe.   " 库存地点
    gt_item-move_type = gt_input_hd-bwart.  " 移动类型
    gt_item-entry_qnt = gt_input_it-erfmg.  " 数量
    gt_item-entry_uom = gt_input_it-meins.  " 计量单位
    gt_item-spec_stock = gt_input_it-sobkz. "特殊库存标识
    gt_item-val_sales_ord = gt_input_it-kdauf. "销售订单
    gt_item-val_s_ord_item = gt_input_it-kdpos. "销售订单行项目
    
  •  gt_item-vendor = gt_input_hd-lifnr.     "供应商
    
  •  gt_item-customer = gt_input_hd-kunnr.   "客户
    
  •  gt_item-amount_lc = gt_input_hd-zprice. " 总金额 zprice
    gt_item-amount_lc = gt_input_it-dmbtr. " 金额
    
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'           "供应商
      EXPORTING
        input  = gt_input_it-lifnr
      IMPORTING
        output = gt_item-vendor.
    
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'           "客户
      EXPORTING
        input  = gt_input_it-kunnr
      IMPORTING
        output = gt_item-customer.
    
  •  IF gt_input_hd-sobkz = 'W'.
    
  •    gt_item-customer = gt_item-vendor.
    
  •  ELSE.
    
  •    gt_item-vendor = gt_item-customer.
    
  •  ENDIF.
    
    APPEND gt_item.
    CLEAR gt_item.
    
  •  stprs        LIKE mbew-stprs  , " 系统标准单价
    
  •  zprice       LIKE goitem-dmbtr ,  " 系统计算总价
    

    ENDLOOP.

    IF gt_item[] IS NOT INITIAL.
    PERFORM exec_bapi USING ‘’
    CHANGING gt_input_hd-zmess_i
    l_subrc.
    ENDIF.

    gt_input-zmess_h = ‘生成物料凭证’.
    gt_input-zmess_i = gt_input_hd-zmess_i.

    IF l_subrc = 0.
    gt_input-icon = icon_led_green.
    ELSE.
    gt_input-icon = icon_led_red.
    ENDIF.

    MODIFY gt_input TRANSPORTING zmess_h zmess_i icon WHERE zlsh = gt_input_hd-zlsh
    AND zhxm = 1.

    ENDLOOP.

ENDFORM.

更改物料特性BAPI变量******BEGIN

DATA: g_objek TYPE cuobn.
DATA: g_obtab TYPE tabelle.
DATA: g_klart TYPE klassenart.
DATA: g_class TYPE klasse_d.



DATA:g_objectkey LIKE bapi1003_key-object.
DATA:g_objecttable LIKE bapi1003_key-objecttable.
DATA:g_classnum LIKE bapi1003_key-classnum.
DATA:g_classtype LIKE bapi1003_key-classtype.
DATA:g_objectkey_long LIKE bapi1003_key-object_long.

DATA:gt_allocvaluesnumnew LIKE TABLE OF bapi1003_alloc_values_num WITH HEADER LINE.
DATA:gt_allocvaluescharnew LIKE TABLE OF bapi1003_alloc_values_char WITH HEADER LINE.
DATA:gt_allocvaluescurrnew LIKE TABLE OF bapi1003_alloc_values_curr WITH HEADER LINE.
DATA:gt_return LIKE TABLE OF bapiret2 WITH HEADER LINE.

更改物料特性BAPI变量******END

DATA:g_no(2) TYPE n . "当前字段
DATA g_field(50).
FIELD-SYMBOLS .
DATA: g_index TYPE i.

DATA g_msg TYPE string.

*特性值内表
DATA g_clint LIKE klah-clint.
DATA gt_ksml LIKE TABLE OF ksml WITH HEADER LINE.
DATA gs_cabn LIKE cabn.


FORM frm_imp_data_1 .

DATA:l_answer TYPE c.
DATA:l_subrc TYPE sy-subrc.

CLEAR: g_header,g_mat,gt_item,gt_item[],gt_ret,gt_ret[],txt,code.

IF gt_input[] IS INITIAL.
MESSAGE e001(00) WITH ‘无批导数据’.
ENDIF.

READ TABLE gt_input WITH KEY icon = icon_led_red.
IF sy-subrc = 0.
MESSAGE e001(00) WITH ‘导入数据存在错误’.
ENDIF.

CLEAR:gt_input_it,gt_input_it[].
LOOP AT gt_input WHERE class IS NOT INITIAL.
gt_input_it = gt_input.
APPEND gt_input_it.
ENDLOOP.

SORT gt_input_it BY zlsh zhxm.

*******更改物料特性BAPIBEGIN

LOOP AT gt_input_it.

CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
  EXPORTING
    i_matnr = gt_input_it-matnr "物料编号
    i_charg = gt_input_it-charg "批次
    i_werks = gt_input_it-werks "工厂
  IMPORTING
    e_objek = g_objek "对象名 (物料 + 批次) '000000101110001013                      Y121710003'
    e_obtab = g_obtab "'MCH1'
    e_klart = g_klart "类别种类 '023'
    e_class = g_class. "类别 'Z_101306_001'.

*特性类别

g_objectkey = g_objek.   "对象名 (物料 + 批次)
g_objecttable = g_obtab. "'MCH1'
g_classnum = g_class.    ""类别
g_classtype = g_klart.   "类别种类
g_objectkey_long = g_objek."对象名 (物料 + 批次)


SELECT SINGLE clint
  INTO g_clint
  FROM klah
 WHERE klart = g_classtype
   AND class = g_classnum.

IF sy-subrc = 0.
  SELECT *
    INTO TABLE gt_ksml
    FROM ksml
   WHERE clint = g_clint.
ENDIF.

SORT gt_ksml BY clint posnr.

LOOP AT gt_ksml WHERE posnr <= 13.

  SELECT SINGLE *
    INTO gs_cabn
    FROM cabn
    WHERE atinn =  gt_ksml-imerk.

  g_index = sy-tabix.
  g_no = g_index.

  CONCATENATE 'GT_INPUT_IT-MWERT' g_no INTO g_field.
  ASSIGN (g_field) TO .

  IF gs_cabn-atfor =  'NUM'.

    IF  IS ASSIGNED.
      gt_allocvaluesnumnew-charact = gs_cabn-atnam. "'ZDY_YJ_SI'
      gt_allocvaluesnumnew-value_from = .

      APPEND gt_allocvaluesnumnew.
    ENDIF.
  ELSEIF gs_cabn-atfor = 'CHAR'.
    gt_allocvaluescharnew-charact = gs_cabn-atnam. "'ZDY_YJ_SI'
    gt_allocvaluescharnew-value_char = .
    gt_allocvaluescharnew-value_neutral = .
    gt_allocvaluescharnew-value_char_long = .
    gt_allocvaluescharnew-value_neutral_long = .

    APPEND gt_allocvaluescharnew.

  ENDIF.

ENDLOOP.

CALL FUNCTION 'BAPI_OBJCL_CHANGE'
  EXPORTING
    objectkey          = g_objectkey
    objecttable        = g_objecttable
    classnum           = g_classnum
    classtype          = g_classtype
  •   STATUS             = '1'
    
  •   STANDARDCLASS      =
    
  •   CHANGENUMBER       =
    
  •   KEYDATE            = SY-DATUM
    
  •   NO_DEFAULT_VALUES  = ' '
    
  •   KEEP_SAME_DEFAULTS = ' '
      objectkey_long     = g_objectkey_long
    
  • IMPORTING

  •   CLASSIF_STATUS     =
    TABLES
      allocvaluesnumnew  = gt_allocvaluesnumnew[]
      allocvaluescharnew = gt_allocvaluescharnew[]
      allocvaluescurrnew = gt_allocvaluescurrnew[]
      return             = gt_return[].
    

    READ TABLE gt_return WITH KEY type = ‘E’.

    IF sy-subrc = 0.

    CLEAR g_msg.
    
    LOOP AT gt_return.
      CONCATENATE g_msg
                 gt_return-id
                 gt_return-message_v1
                 gt_return-message_v2
                 gt_return-message_v3
                 gt_return-message_v4
                 gt_return-message
      INTO g_msg SEPARATED BY ','.
    
      CONDENSE g_msg NO-GAPS.
    ENDLOOP.
    
    gt_input-zmess_h = '错误'.
    gt_input-zmess_i = g_msg.
    gt_input-icon = icon_led_red.
    

    ELSE .

    gt_input-icon = icon_led_green.
    gt_input-zmess_h = '成功'.
    COMMIT WORK AND WAIT.
    

    ENDIF.

    MODIFY gt_input TRANSPORTING zmess_h zmess_i icon WHERE zlsh = gt_input_it-zlsh
    AND zhxm = gt_input_it-zhxm.

*******更改物料特性BAPIEND
ENDLOOP.

ENDFORM.

&---------------------------------------------------------------------
*& Form EXEC_BAPI
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------
FORM exec_bapi USING p_test
CHANGING p_msg
p_subrc.

CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
goodsmvt_header = g_header
goodsmvt_code = code
testrun = p_test

  • GOODSMVT_REF_EWM =
    

    IMPORTING

  • GOODSMVT_HEADRET =
    materialdocument = g_mat
    
  • MATDOCUMENTYEAR  =
    

    TABLES
    goodsmvt_item = gt_item[]

  • GOODSMVT_SERIALNUMBER   =
    return           = gt_ret[]
    
  • GOODSMVT_SERV_PART_DATA =
    extensionin      = gt_ext.
    

    READ TABLE gt_ret WITH KEY type = ‘E’.

    IF sy-subrc = 0.

    LOOP AT gt_ret.
    CONCATENATE p_msg
    gt_ret-id
    gt_ret-message_v1
    gt_ret-message_v2
    gt_ret-message_v3
    gt_ret-message_v4
    gt_ret-message
    INTO p_msg SEPARATED BY ‘,’.
    ENDLOOP.

    p_subrc = 1.

    ELSE .

    IF p_test = ‘X’.
    p_msg = ‘测试成功’.
    ELSE.
    p_msg = g_mat.
    COMMIT WORK AND WAIT.
    ENDIF.
    p_subrc = 0.
    ENDIF.

ENDFORM . "EXEC_BAPI

你可能感兴趣的:(SAP-ABAP,SAP-MM,ABAP)