SAP ABAP 批量创建PR

SAP ABAP 批量创建PR
&---------------------------------------------------------------------
*& Report ZRMM_049
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zrmm_049.

TABLES:sscrfields,eban.

**定义
TYPES:BEGIN OF tp_alv,
incon TYPE char50, "图标
index TYPE i,
message(100),
charg TYPE mseg-charg,
maktx TYPE makt-maktx,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,

  matnr TYPE eina-matnr, "物料编码
  menge TYPE eban-menge, "数量
  werks TYPE eine-werks, "工厂
  lfdat TYPE eban-lfdat, "交货日期

END OF tp_alv.
DATA:gt_alv TYPE TABLE OF tp_alv,
gs_alv TYPE tp_alv.

DATA:lv_error.

DATA: BEGIN OF itfile OCCURS 0 ,
matnr TYPE string, "物料编码
menge TYPE string, "数量
werks TYPE string, "工厂
lfdat TYPE string, "交货日期
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.

**选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_bsart TYPE eban-bsart DEFAULT ‘Z002’ OBLIGATORY.
SELECTION-SCREEN SKIP 1.
PARAMETERS:p_pfile TYPE localfile MODIF ID m1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN FUNCTION KEY 1.

**初始化
INITIALIZATION.

gs_functxt-icon_id = icon_export.
gs_functxt-quickinfo = ‘下载模版’.
gs_functxt-icon_text = ‘下载模版’.
sscrfields-functxt_01 = gs_functxt.

AT SELECTION-SCREEN.
IF sscrfields-ucomm = ‘FC01’.
PERFORM frm_download_template.
ENDIF.

IF sscrfields-ucomm = ‘ONLI’.
IF p_bsart = ‘Z001’ OR p_bsart = ‘Z002’.
ELSE.
MESSAGE '此功能只允许创建 ''Z001:手工采购申请和 Z002:售后采购申请 ’ TYPE ‘E’.
ENDIF.
ENDIF.

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

START-OF-SELECTION.
CLEAR lv_error…
PERFORM get_data USING p_pfile. "导入数据
PERFORM check_data.
PERFORM frm_bapi.

END-OF-SELECTION.
CHECK lv_error = ‘’.
PERFORM frm_show.
&---------------------------------------------------------------------
*& 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 = ‘ZMM049’.

"保存对话框
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = ‘下载模板’
default_extension = ‘xlsx’
default_file_name = ‘采购申请模板.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_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 get_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> P_PFILE
&---------------------------------------------------------------------
FORM get_data USING p_i_file.
FIELD-SYMBOLS: TYPE any.
DATA: l_intern TYPE alsmex_tabline 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).

REFRESH l_intern.

CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
EXPORTING
filename = p_pfile
i_begin_col = ‘1’ "开始列
i_begin_row = ‘2’ "开始行
i_end_col = ‘9’ "结束列
i_end_row = ‘9999’ "结束行

  • 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.

    CLEAR:gt_alv[],gs_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.

ENDFORM.
&---------------------------------------------------------------------
*& Form check_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM check_data .
DELETE gt_alv WHERE matnr = ‘’.

CHECK gt_alv IS NOT INITIAL.

LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>).
CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
EXPORTING
input = <fs_alv>-matnr
IMPORTING
output = <fs_alv>-matnr.
ENDLOOP.

SELECT
matnr,
maktx
INTO TABLE @DATA(lt_makt)
FROM makt
FOR ALL ENTRIES IN @gt_alv
WHERE matnr EQ @gt_alv-matnr
AND spras EQ @sy-langu.
SORT lt_makt BY matnr.

SELECT
matnr,
werks,
plifz
INTO TABLE @DATA(lt_marc)
FROM marc
FOR ALL ENTRIES IN @gt_alv
WHERE matnr EQ @gt_alv-matnr
AND werks EQ @gt_alv-werks.
SORT lt_marc BY matnr werks.

LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv1>).

READ TABLE lt_makt INTO DATA(lw_makt) WITH KEY matnr = <fs_alv1>-matnr BINARY SEARCH.
IF sy-subrc = 0.
  <fs_alv1>-maktx = lw_makt-maktx.
ENDIF.

IF <fs_alv1>-lfdat = ‘’ OR <fs_alv1>-lfdat = ‘00000000’.
READ TABLE lt_marc INTO DATA(lw_marc) WITH KEY matnr = <fs_alv1>-matnr
werks = <fs_alv1>-werks BINARY SEARCH.
IF sy-subrc = 0.
<fs_alv1>-lfdat = sy-datum + lw_marc-plifz.
ELSE.
<fs_alv1>-lfdat = sy-datum.
ENDIF.
ENDIF.

ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_bapi
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_bapi .
DATA:pr_number TYPE bapiebanc-preq_no. "purchase order num
DATA:lv_bnfpo TYPE eban-bnfpo.
DATA:lt_bapiebanc TYPE TABLE OF bapiebanc WITH HEADER LINE. " purchase order items
DATA:lt_return TYPE TABLE OF bapireturn WITH HEADER LINE. "return message
DATA:lv_mseg(500).

CHECK gt_alv IS NOT INITIAL.

CLEAR:pr_number,lv_bnfpo,lt_bapiebanc[],lt_return[].

LOOP AT gt_alv INTO gs_alv.
CLEAR lt_bapiebanc.

lv_bnfpo = lv_bnfpo + 10.

lt_bapiebanc-preq_item = lv_bnfpo.
lt_bapiebanc-doc_type = p_bsart.
lt_bapiebanc-preq_name = sy-uname.
lt_bapiebanc-material = gs_alv-matnr.
lt_bapiebanc-quantity = gs_alv-menge.
lt_bapiebanc-deliv_date = gs_alv-lfdat.
lt_bapiebanc-plant = gs_alv-werks.
APPEND lt_bapiebanc.

gs_alv-bnfpo = lv_bnfpo.
MODIFY gt_alv FROM gs_alv TRANSPORTING bnfpo.
ENDLOOP.

CALL FUNCTION ‘BAPI_REQUISITION_CREATE’

  • EXPORTING
  • SKIP_ITEMS_WITH_ERROR =
  • AUTOMATIC_SOURCE = ‘X’
    IMPORTING
    number = pr_number
    TABLES
    requisition_items = lt_bapiebanc
  • REQUISITION_ACCOUNT_ASSIGNMENT = lt_bapiebkn
  • requisition_item_text = lt_return
  • REQUISITION_LIMITS =
  • REQUISITION_CONTRACT_LIMITS =
  • REQUISITION_SERVICES =
  • REQUISITION_SRV_ACCASS_VALUES =
    return = lt_return
  • REQUISITION_SERVICES_TEXT =
  • REQUISITION_ADDRDELIVERY =
  • EXTENSIONIN =
    .

IF pr_number IS NOT INITIAL.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.

LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv2>).
<fs_alv2>-banfn = pr_number.
<fs_alv2>-incon = icon_led_green.
ENDLOOP.

ELSE.
lv_error = ‘X’.
LOOP AT lt_return WHERE type CA ‘AE’.
lv_mseg = lv_mseg && ‘/’ && lt_return-message.
ENDLOOP.

lv_mseg = ‘创建失败:’ && lv_mseg.
MESSAGE lv_mseg TYPE ‘I’.
EXIT.
ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_show
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_show .
CLEAR gs_layout.
gs_layout-zebra = ‘X’.
gs_layout-cwidth_opt = ‘X’.
gs_layout-sel_mode = ‘A’.

DEFINE set_fieldcat_alv.

CLEAR gs_fcat.
gs_fcat-fieldname  = &1.
gs_fcat-coltext    = &2.
gs_fcat-seltext    = &2.
gs_fcat-ref_field  = &3.
gs_fcat-ref_table  = &4.
gs_fcat-outputlen  = 20.

IF &1 = 'MATNR'.
 gs_fcat-no_zero = 'X'.
ENDIF.
  • IF &1 = ‘MENGE’.
  • gs_fcat-qfieldname = 'MEINS'.
    
  • ENDIF.
APPEND gs_fcat TO gt_fcat.

END-OF-DEFINITION.

set_fieldcat_alv ‘INCON’ ‘图标’ ‘’ ‘’.
set_fieldcat_alv ‘BANFN’ ‘采购申请’ ‘BANFN’ ‘EBAN’.
set_fieldcat_alv ‘BNFPO’ ‘行项目’ ‘BNFPO’ ‘EBAN’.
set_fieldcat_alv ‘WERKS’ ‘工厂’ ‘WERKS’ ‘EBAN’.
set_fieldcat_alv ‘MATNR’ ‘物料代码’ ‘MATNR’ ‘MARA’.
set_fieldcat_alv ‘MAKTX’ ‘物料描述’ ‘’ ‘’.
set_fieldcat_alv ‘MENGE’ ‘数量’ ‘MENGE’ ‘EKPO’.

  • set_fieldcat_alv ‘lfdat’ ‘交货日期’ ‘’ ‘’.

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'
    i_save                  = 'A'
    
    TABLES
    t_outtab = gt_alv
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    ENDFORM.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值