ABAP 批导demo&调用SM30表维护demo

ABAP 批导demo&调用SM30表维护demo

&---------------------------------------------------------------------
*& Report ZPP036
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zpp036.

TABLES:ztpp010,sscrfields.

**全局定义
DATA:gt_alv TYPE TABLE OF ztpp010,
gs_alv TYPE ztpp010.

DATA: BEGIN OF itfile OCCURS 0 ,
matnr TYPE string, "物料
zmatnr1 TYPE string, "替代料1
zmatnr2 TYPE string, "替代料2
END OF itfile.

DATA: gs_functxt TYPE smp_dyntxt. "功能代码文本
DATA: gt_fcat TYPE lvc_t_fcat, "字段目录
gs_fcat TYPE lvc_s_fcat,
gs_layout TYPE lvc_s_layo.
DATA: excl_cua_funct TYPE TABLE OF vimexclfun.

PARAMETERS: p_pfile TYPE localfile.
SELECTION-SCREEN: FUNCTION KEY 1.
SELECTION-SCREEN: FUNCTION KEY 2.

**初始化
INITIALIZATION.

gs_functxt-icon_id = icon_tools.
gs_functxt-quickinfo = ‘替代料关系表’.
gs_functxt-icon_text = ‘替代料关系表’.
sscrfields-functxt_01 = gs_functxt.

gs_functxt-icon_id = icon_export.
gs_functxt-quickinfo = ‘下载导入模版’.
gs_functxt-icon_text = ‘下载导入模版’.
sscrfields-functxt_02 = gs_functxt.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_pfile.
PERFORM frm_input_help CHANGING p_pfile.

AT SELECTION-SCREEN.
IF sscrfields-ucomm = ‘FC02’.
PERFORM frm_download_template.
ELSEIF sscrfields-ucomm = ‘FC01’.
PERFORM frm_view_maintenance_call TABLES excl_cua_funct USING ‘ZTPP010’ ‘S’.
ENDIF.

START-OF-SELECTION.
PERFORM get_data USING p_pfile. "导入数据

END-OF-SELECTION.
PERFORM frm_layout.
PERFORM frm_fcat.
PERFORM frm_show.
&---------------------------------------------------------------------
*& Form frm_input_help
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& <-- P_PFILE
&---------------------------------------------------------------------
FORM frm_input_help CHANGING p_o_file.
DATA:
ltd_filetable TYPE filetable,
lth_filetable TYPE LINE OF filetable,
lw_rc TYPE i.

CALL METHOD cl_gui_frontend_services=>file_open_dialog
CHANGING
file_table = ltd_filetable
rc = lw_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.

IF sy-subrc = 0.
READ TABLE ltd_filetable INTO lth_filetable INDEX 1.
p_o_file = lth_filetable-filename.
ELSE.
MESSAGE ID sy-msgid TYPE ‘I’ NUMBER sy-msgno
DISPLAY LIKE ‘E’
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
LEAVE LIST-PROCESSING.
ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_download_template
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_download_template .
DATA: lv_filepath TYPE string, " 存放路径
lv_filename TYPE string, "文件名称
lv_path TYPE string . " 下载后存放全路径
DATA: lv_objdata LIKE wwwdatatab,
lv_obj_name LIKE wwwdatatab-objid,
lt_mime LIKE w3mime OCCURS 10.
DATA: lv_ret TYPE abap_bool,
lv_answer.
DATA: lv_file TYPE string.

"设置 www object信息
lv_obj_name = ‘ZPP036’.

"保存对话框
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = ‘下载模板’
default_extension = ‘xlsx’
default_file_name = ‘ZPP036导入模板.xlsx’
file_filter = ‘EXCEL’
prompt_on_overwrite = ‘’
CHANGING
fullpath = lv_path
filename = lv_filename
path = lv_filepath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.

"检查文件是否存在
MOVE lv_path TO lv_file.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_file
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.

IF lv_ret EQ ‘X’.

  • 模版已存在,是否覆盖
    CALL FUNCTION ‘POPUP_TO_CONFIRM’
    EXPORTING
    text_question = ‘模版已存在,是否覆盖?’
    text_button_1 = ‘是’(005)
    text_button_2 = ‘否’(006)
    IMPORTING
    answer = lv_answer
    EXCEPTIONS
    text_not_found = 1
    OTHERS = 2.
    IF sy-subrc <> 0.

    ENDIF.

    IF lv_answer EQ ‘A’. "取消
    EXIT.
    ELSEIF lv_answer NE ‘1’. "否
    EXIT.
    ENDIF.
    ELSE.
    lv_answer = ‘1’.
    ENDIF.

    IF lv_answer EQ ‘1’.

    SELECT relid objid
    FROM wwwdata
    INTO CORRESPONDING FIELDS OF lv_objdata
    UP TO 1 ROWS
    WHERE srtf2 = 0
    AND relid = ‘MI’
    AND objid = lv_obj_name.
    ENDSELECT.

    IF lv_path IS NOT INITIAL.
    " 装载至本地文件
    p_pfile = lv_path.
    CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’ "
    EXPORTING
    key = lv_objdata
    destination = p_pfile.
    ENDIF.

    ENDIF.
    ENDFORM.
    &---------------------------------------------------------------------
    *& Form frm_view_maintenance_call
    &---------------------------------------------------------------------
    *& text
    &---------------------------------------------------------------------
    *& --> EXCL_CUA_FUNCT
    *& --> P_
    *& --> P_
    &---------------------------------------------------------------------
    FORM frm_view_maintenance_call TABLES excl_cua_funct STRUCTURE vimexclfun
    USING p_view_name LIKE dd02v-tabname
    p_action TYPE char1.

    CALL FUNCTION ‘VIEW_MAINTENANCE_CALL’
    EXPORTING
    action = p_action

  • CORR_NUMBER                  = '          '
    
  • GENERATE_MAINT_TOOL_IF_MISSING       = ' '
    
  • SHOW_SELECTION_POPUP         = ' '
    view_name                    = p_view_name
    
  • NO_WARNING_FOR_CLIENTINDEP   = ' '
    
  • RFC_DESTINATION_FOR_UPGRADE  = ' '
    
  • CLIENT_FOR_UPGRADE           = ' '
    
  • VARIANT_FOR_SELECTION        = ' '
    
  • COMPLEX_SELCONDS_USED        = ' '
    
  • CHECK_DDIC_MAINFLAG          = ' '
    
  • SUPPRESS_WA_POPUP            = ' '
    

    TABLES

  • DBA_SELLIST                  =
    excl_cua_funct               = excl_cua_funct
    

    EXCEPTIONS
    client_reference = 1
    foreign_lock = 2
    invalid_action = 3
    no_clientindependent_auth = 4
    no_database_function = 5
    no_editor_function = 6
    no_show_auth = 7
    no_tvdir_entry = 8
    no_upd_auth = 9
    only_show_allowed = 10
    system_failure = 11
    unknown_field_in_dba_sellist = 12
    view_not_found = 13
    maintenance_prohibited = 14
    OTHERS = 15.
    IF sy-subrc <> 0.

  • Implement suitable error handling here
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form get_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> P_PFILE
&---------------------------------------------------------------------
FORM get_data USING p_p_pfile.

FIELD-SYMBOLS: TYPE any.
DATA: l_intern TYPE zalsmex_tabline3 OCCURS 0 WITH HEADER LINE.

DATA: c_row TYPE i VALUE 4, "读EXCEL第4行开始
c_col TYPE i VALUE 1, "读EXCEL第1列开始
l_index TYPE i,
l_msg(60) TYPE c,
g_mod TYPE d,
l_row(5) TYPE n,
li_len TYPE sy-tabix,
l_cstr(4).

CALL FUNCTION ‘ZALSM_EXCEL_TO_INTERNAL_TABLE2’
EXPORTING
filename = p_pfile
i_begin_col = ‘1’ "开始列
i_begin_row = ‘2’ "开始行
i_end_col = ‘3’ "结束列
i_end_row = ‘99999’ "结束行

  • I_END_ROW               = '100000'   "结束行
    
  • I_SHEET_NO              =
    

    TABLES
    intern = l_intern
    EXCEPTIONS
    inconsistent_parameters = 1
    upload_ole = 2
    OTHERS = 3.
    IF sy-subrc <> 0.
    MESSAGE ‘导入数据文件失败!’ TYPE ‘S’.
    STOP.
    ENDIF.

    SORT l_intern BY row col.

    REFRESH gt_alv.
    LOOP AT l_intern.
    ASSIGN COMPONENT l_intern-col OF STRUCTURE itfile TO .
    "动态方法将值传到相应的内表
    = l_intern-value.

    AT END OF row.
    MOVE-CORRESPONDING itfile TO gs_alv.

    APPEND gs_alv TO gt_alv.
    CLEAR: gs_alv,itfile.
    

    ENDAT.
    ENDLOOP.

    CHECK gt_alv IS NOT INITIAL.

    MODIFY ztpp010 FROM TABLE gt_alv.
    IF sy-subrc = 0.
    COMMIT WORK.
    MESSAGE ‘已成功导入’ TYPE ‘S’.
    ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_layout
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_layout .
CLEAR gs_layout.
gs_layout-zebra = ‘X’.
gs_layout-cwidth_opt = ‘X’.
gs_layout-sel_mode = ‘A’.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_fcat
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_fcat .
REFRESH gt_fcat.
DEFINE set_fieldcat_alv.

CLEAR gs_fcat.

gs_fcat-fieldname = &1.
gs_fcat-coltext = &2.
gs_fcat-ref_field = &3.
gs_fcat-ref_table = &4.
gs_fcat-outputlen = &5.

APPEND gs_fcat TO gt_fcat.

END-OF-DEFINITION.

set_fieldcat_alv ‘MATNR’ ‘物料代码’ ‘’ ‘’ ‘18’ .
set_fieldcat_alv ‘ZMATNR1’ ‘替代料1’ ‘’ ‘’ ‘18’.
set_fieldcat_alv ‘ZMATNR2’ ‘替代料2’ ‘’ ‘’ ‘18’.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_show
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_show .
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fcat

  • i_callback_pf_status_set = 'PF_STATUS'
    
  • i_callback_user_command  = 'USER_COMMAND'
    
  • it_events          = lt_events
    i_save             = 'A'
    
    TABLES
    t_outtab = gt_alv
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    ENDFORM.
  • 30
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值