SAP_ABAP_FUNCTION_ALV案例

news2025/1/10 11:09:00

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977

一、Function ALV

1.1 基于退货采购订单创建,解释 FUNCTION_ALV开发的程序结构与代码模板参考

1.2 程序结构 top|sel|frm|pbo|pai


*&---------------------------------------------------------------------*
*& Report ZMMRP008
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

REPORT zmmrp008.

*******************************************************
*程序名: zmmrp008
*程序描述:退货采购订单创建
*----------------------------------------------------------------------
*创建日期 ABAP开发顾问 业务顾问
*2019.09.19. 
*===============================================
*修改请求号 修改日期 修改人 修改描述
*xxxxxxxx xxxx.xx.xx xxxxxxxx xxxxxxxx
*******************************************************

INCLUDE zrp008_top.

INCLUDE zrp008_sel.

INCLUDE zrp008_frm.

INCLUDE zrp008_pbo.

INCLUDE zrp008_pai.


*------------------------------------------------------------------------*
* INITIALIZATION *
*------------------------------------------------------------------------*
INITIALIZATION."第一次打开屏幕或者点击执行代码已经执行完成重新显示屏幕的时候会运行
*(1).只能用于报表程序
*(2).在选择屏幕出现之前执行.
*(3).通常的用法是在这里给选择屏幕中的字段赋值。

*------------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*------------------------------------------------------------------------*
AT SELECTION-SCREEN."当在选择屏幕上有做操作的时候都会进入到这个事件
* 选择屏幕PAI事件,检查用户数据正确性和全部字段一致性,发生错误所有元素可重新输入
* 在这里我们可以用来检查输入的参数是否有问题

 "选择屏幕至少需要填写一个字段
 PERFORM check_inputterm.


*------------------------------------------------------------------------*
* START-OF-SELECTION *
*------------------------------------------------------------------------*
START-OF-SELECTION."当触发执行的时候屏幕
* 选择开始事件(默认事件),在选择屏幕的处理结束后触发

 PERFORM get_data. "可以创建一个子程序用来做数据处理的
* PERFORM set_catalog. "可以创建一个子程序用来设置显示字段的信息
 PERFORM prm_bulid_field.
 PERFORM display_alv. "这个子程序可以用来显示ALV

*------------------------------------------------------------------------*
* END-OF-SELECTION *
*------------------------------------------------------------------------*
END-OF-SELECTION."在选择屏处理完逻辑数据之后(会重新调用屏幕所以会触发INITIALIZATION)
* 选择结束事件,在所有逻辑数据库处理结束后触发,一般用于输出列表
*&---------------------------------------------------------------------*
*& Form CHECK_INPUTTERM
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*






*&---------------------------------------------------------------------*
*& 包含               ZRP008_TOP
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*                      GLOBLE-DEFINATION             *
*----------------------------------------------------------------------*

TABLES ztmm_incom_list."来料单号
TABLES ekpo.
TABLES ekko.
TYPES: BEGIN OF gy_data," 定义最终显示的结构
         check(2)     TYPE c,
         bukrs        TYPE ekko-bukrs, "公司代码
         incom        TYPE ztmm_incom_list-incom, "来料单号
         item         TYPE ztmm_incom_list-item, "来料单项次
         bsart        TYPE ekko-bsart, "采购订单类型
         ebeln        TYPE ekko-ebeln, "采购订单号
         ebelp        TYPE ekpo-ebelp, "采购订单项次
         menge        TYPE ekpo-menge, "数量
         meins        TYPE ekpo-meins, "单位
         matnr        TYPE ekpo-matnr, "物资编码
         txz01        TYPE ekpo-txz01, "物料描述
         mfrpn        TYPE ekpo-mfrpn, "原厂码
         subcode      TYPE ekpo-subcode, "Subcode
         werks        TYPE ekpo-werks, "工厂
         lgort        TYPE ekpo-lgort, "库存地点
         ekorg        TYPE ekko-ekorg, "采购组织
         ekgrp        TYPE ekko-ekgrp, "采购组
         netpr_co     TYPE ztmm_incom_list-netpr_co, "采购价格-含税
         netpr        TYPE ekpo-netpr, "采购价格-未税
         peinh        TYPE ekpo-peinh, "价格基数
         waers        TYPE ekko-waers, "采购货币
         mwskz        TYPE ekpo-mwskz, "税码
         lifnr        TYPE ekko-lifnr, "供应商
         name1        TYPE lfa1-name1, "采购供应商名称
         kbetr        TYPE  konp-kbetr, "条件金额(借用辅助计算字段)
         effwr        TYPE  ekpo-effwr, "税率 (借用辅助计算字段)
         status(2)    TYPE  c, "退货订单创建状态
         message(255) TYPE c, "退货订单创建消息
       END OF gy_data.
DATA gs_data TYPE gy_data.
DATA gt_data TYPE TABLE OF gy_data.
DATA gs_data_copy TYPE gy_data.
DATA gt_data_copy TYPE TABLE OF gy_data.

DATA gt_data_success_log TYPE TABLE OF gy_data. "采购退货订单创建成功记录
DATA gs_data_success_log TYPE gy_data.

DATA gt_data_temp TYPE TABLE OF gy_data. "临时存放
DATA gs_data_temp TYPE gy_data.

DATA: gv_ok_code LIKE sy-ucomm.
DATA: gt_fieldcat_lvc TYPE lvc_t_fcat, "ALV:定义一个先显示字段的表
      gs_fieldcat_lvc LIKE LINE OF gt_fieldcat_lvc. "ALV:定义一个先显示字段的结构体




&---------------------------------------------------------------------*
*& 包含               ZRP008_FRM
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_data.
  SELECT
      ekko~bukrs "公司代码
      ztmm_incom_list~incom "来料单
      ztmm_incom_list~item "项次
      ztmm_incom_list~ebeln "采购订单号
      ztmm_incom_list~ebelp  "采购订单项次
      ztmm_incom_list~matnr "物资编码
      makt~maktx AS txz01
      ztmm_incom_list~menge "数量
      ztmm_incom_list~meins "订单单位
      ztmm_incom_list~netpr_co "采购含税价
      ztmm_incom_list~peinh "价格基数
      ztmm_incom_list~netpr "采购未税价格
      ztmm_incom_list~mwskz "税码
      ekko~bsart "取采购凭证类型
      ekko~lifnr "供应商
      lfa1~name1 "供应商名称
      ekko~ekorg "采购组织
      ekko~ekgrp "采购组
      ekpo~werks "工厂
      ekpo~lgort"库存地点
      ekpo~subcode"SUBCODE
      ekpo~factory_code"厂家码
*      ekpo~factory_code
    INTO CORRESPONDING FIELDS OF TABLE gt_data
    FROM ztmm_incom_list
    INNER JOIN ekko ON ztmm_incom_list~ebeln = ekko~ebeln
    INNER JOIN ekpo ON ztmm_incom_list~ebeln = ekpo~ebeln AND  ztmm_incom_list~ebelp = ekpo~ebelp
    INNER JOIN lfa1 ON ekko~lifnr = lfa1~lifnr
    LEFT JOIN makt ON makt~matnr = ztmm_incom_list~matnr
    WHERE
    ztmm_incom_list~incom IN so_incom AND
    ztmm_incom_list~item IN so_item AND
    ztmm_incom_list~ebeln IN so_ebeln AND
    ztmm_incom_list~ebelp IN so_ebelp AND
    ztmm_incom_list~matnr IN so_matnr AND
    ekko~lifnr IN so_lifnr
    .

  "根据税码取税率
  IF gt_data IS NOT INITIAL.
    DATA lt_ftaxp TYPE TABLE OF ftaxp.
    DATA ls_ftaxp TYPE ftaxp.
    LOOP AT gt_data INTO gs_data.
      "税码转换成税率
      CALL FUNCTION 'GET_TAX_PERCENTAGE'
        EXPORTING
          aland   = 'CN'
          datab   = sy-datum
          mwskz   = gs_data-mwskz
          txjcd   = 'TAXBRA'
*         EXPORT  = ' '
        TABLES
          t_ftaxp = lt_ftaxp.
      IF sy-subrc = 0.
        READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
        gs_data-effwr = ls_ftaxp-kbetr / 1000.
        gs_data-kbetr = ls_ftaxp-kbetr.

      ENDIF.
      "单位转换
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
        EXPORTING
          input    = gs_data-meins
          language = sy-langu
        IMPORTING
*         LONG_TEXT            =
          output   = gs_data-meins
*         SHORT_TEXT           =
*       EXCEPTIONS
*         UNIT_NOT_FOUND       = 1
*         OTHERS   = 2
        .
      IF sy-subrc = 0.
      ENDIF.
      MODIFY gt_data FROM gs_data.
    ENDLOOP.
  ENDIF.
ENDFORM.

FORM check_inputterm .

  DATA lv_times TYPE num10.
  lv_times  = 0.
  IF so_incom IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_item IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_ebeln IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_ebelp IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_matnr IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_lifnr IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF lv_times = 0.
    MESSAGE '选择屏幕至少需要填写一个字段!' TYPE 'E'.
  ENDIF.

ENDFORM.

*DATA: fieldcat  TYPE lvc_t_fcat.
FORM prm_bulid_field .
  PERFORM create_fieldcat USING:
        gt_fieldcat_lvc 'BUKRS' '公司代码' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'INCOM' '来料单号' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'ITEM' '来料单项次' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'BSART' '采购订单类型' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'EBELN' '采购订单号' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'EBELP' '采购订单项次' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MATNR' '物资编码' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MENGE' '数量' '' 'X' '' '' '' '' '' '' '' '' '' 'QUAN' 'C',
        gt_fieldcat_lvc 'MEINS' '单位' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'TXZ01' '物料描述' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'FACTORY_CODE' '厂家码' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'SUBCODE' 'SUBCODE' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'WERKS' '工厂' '' 'X' '' '' '' '' '' '' '' 'T001W' 'WERKS' '' '',
        gt_fieldcat_lvc 'LGORT' '库存地点' '' 'X' '' '' '' '' '' 'X' '' '' '' '' '',
        gt_fieldcat_lvc 'EKORG' '采购组织' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'EKGRP' '采购组' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'NETPR_CO' '采购价格-含税' '' '' '' '' '' '' '' '' '' '' '' 'CURR' '',
        gt_fieldcat_lvc 'NETPR' '采购价格-未税' '' 'X' '' '' '' '' '' '' '' '' '' 'CURR' '',
        gt_fieldcat_lvc 'PEINH' '价格基数' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'WAERS' '采购货币' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MWSKZ' '税码' '' '' '' '' '' '' '' '' '' 'EKPO' 'MWSKZ' '' '',
        gt_fieldcat_lvc 'LIFNR' '供应商' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'NAME1' '采购供应商名称' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'STATUS' '状态' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MESSAGE' '消息' '30' '' '' '' '' '' '' '' '' '' '' '' ''
         .
ENDFORM.

FORM create_fieldcat  USING p0 TYPE lvc_t_fcat p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15.
  DATA: l_alv_filed  TYPE lvc_s_fcat.
  l_alv_filed-fieldname     =  p1.  "内表中的字段 大写
  l_alv_filed-reptext       =  p2.  "表头的文本
  l_alv_filed-outputlen     =  p3.  "字段长度
  l_alv_filed-edit          =  p4.  "是否编辑
  l_alv_filed-convexit      =  p5.  "转换例程
  l_alv_filed-key           =  p6.  "左右滑动 固定列
  l_alv_filed-do_sum        =  p7.  "汇总
  l_alv_filed-checkbox      =  p8.  "CHECK BOX
  l_alv_filed-no_zero       =  p9.  "LV 控制: 为输出隐藏零
  l_alv_filed-hotspot       =  p10. "当击敏感
  l_alv_filed-qfieldname    =  p11. "参考单位
  l_alv_filed-f4availabl    = 'X'.  "是否有搜索帮助
  l_alv_filed-ref_table     =  p12. "内表对应的搜索帮助表
  l_alv_filed-ref_field     =  p13. "内表对应的搜索帮助字段
  l_alv_filed-datatype      =  p14. "输出类型
  l_alv_filed-inttype       =  p15. ""指定该字段类型
  APPEND l_alv_filed TO p0.
  CLEAR l_alv_filed.
ENDFORM.



*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_alv .

  DATA: ls_layout TYPE lvc_s_layo.
  IF gt_data IS NOT INITIAL.
    ls_layout-zebra = 'X'.
    ls_layout-box_fname = 'CHECK'.  "指定行选择字段
    ls_layout-cwidth_opt = 'X'.

    "---------------enter
    DATA: gt_event TYPE slis_t_event WITH HEADER LINE,
          ref_grid TYPE REF TO cl_gui_alv_grid.
    gt_event-name = 'CALLER_EXIT'.
    gt_event-form = 'FM_BUTTON'.
    APPEND gt_event .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
      EXPORTING
        i_callback_program       = sy-repid "这里是调用这个ALV的程序名
        i_callback_pf_status_set = 'PF_STATUS' "设置ALV状态栏的函数
        i_callback_user_command  = 'USER_COMMAND' "获取用户事件的函数
        is_layout_lvc            = ls_layout "显示的布局
        it_fieldcat_lvc          = gt_fieldcat_lvc "设置显示的字段以及字段的功能
        it_events                = gt_event[]
      TABLES
        t_outtab                 = gt_data
      EXCEPTIONS
        program_error            = 1.
    IF sy-subrc <> 0.

    ENDIF.
  ELSE.
* 这个消息用来显示我们是不是获取到了数据,自己用的时候把这个硬代码换成你需要的TEXT-XXX.
    MESSAGE '没有获取到数据,请重新检索!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO LIST-PROCESSING.
    EXIT.
  ENDIF.

ENDFORM.

CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS handle_modify
                FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION

DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_modify.
    DATA stbl TYPE lvc_s_stbl.
    PERFORM frm_refresh_alv.
    stbl-row = 'x'." 基于行的稳定刷新
    stbl-col = 'x'." 基于列稳定刷新
    CALL METHOD ref_grid->refresh_table_display
      EXPORTING
        is_stable = stbl.
  ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION

DATA:gt_event_receiver TYPE REF TO lcl_event_receiver.

"实现FM_BUTTON:
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = ref_grid.
  "设置enter事件
  CALL METHOD ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  CREATE OBJECT gt_event_receiver.
  SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
ENDFORM. "FM_BUTTON
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_refresh_alv .
  "全表更新 含税价。
  CLEAR gs_data.
  IF gt_data IS NOT INITIAL.
    LOOP AT gt_data INTO gs_data.
      IF gs_data-netpr IS NOT INITIAL.
        gs_data-netpr_co = gs_data-netpr * ( 1 + gs_data-effwr ).
        MODIFY gt_data FROM gs_data.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.*&---------------------------------------------------------------------*
*& 包含               ZRP008_FRM
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_data.
  SELECT
      ekko~bukrs "公司代码
      ztmm_incom_list~incom "来料单
      ztmm_incom_list~item "项次
      ztmm_incom_list~ebeln "采购订单号
      ztmm_incom_list~ebelp  "采购订单项次
      ztmm_incom_list~matnr "物资编码
      makt~maktx AS txz01
      ztmm_incom_list~menge "数量
      ztmm_incom_list~meins "订单单位
      ztmm_incom_list~netpr_co "采购含税价
      ztmm_incom_list~peinh "价格基数
      ztmm_incom_list~netpr "采购未税价格
      ztmm_incom_list~mwskz "税码
      ekko~bsart "取采购凭证类型
      ekko~lifnr "供应商
      lfa1~name1 "供应商名称
      ekko~ekorg "采购组织
      ekko~ekgrp "采购组
      ekpo~werks "工厂
      ekpo~lgort"库存地点
      ekpo~subcode"SUBCODE
      ekpo~factory_code"厂家码
*      ekpo~factory_code
    INTO CORRESPONDING FIELDS OF TABLE gt_data
    FROM ztmm_incom_list
    INNER JOIN ekko ON ztmm_incom_list~ebeln = ekko~ebeln
    INNER JOIN ekpo ON ztmm_incom_list~ebeln = ekpo~ebeln AND  ztmm_incom_list~ebelp = ekpo~ebelp
    INNER JOIN lfa1 ON ekko~lifnr = lfa1~lifnr
    LEFT JOIN makt ON makt~matnr = ztmm_incom_list~matnr
    WHERE
    ztmm_incom_list~incom IN so_incom AND
    ztmm_incom_list~item IN so_item AND
    ztmm_incom_list~ebeln IN so_ebeln AND
    ztmm_incom_list~ebelp IN so_ebelp AND
    ztmm_incom_list~matnr IN so_matnr AND
    ekko~lifnr IN so_lifnr
    .

  "根据税码取税率
  IF gt_data IS NOT INITIAL.
    DATA lt_ftaxp TYPE TABLE OF ftaxp.
    DATA ls_ftaxp TYPE ftaxp.
    LOOP AT gt_data INTO gs_data.
      "税码转换成税率
      CALL FUNCTION 'GET_TAX_PERCENTAGE'
        EXPORTING
          aland   = 'CN'
          datab   = sy-datum
          mwskz   = gs_data-mwskz
          txjcd   = 'TAXBRA'
*         EXPORT  = ' '
        TABLES
          t_ftaxp = lt_ftaxp.
      IF sy-subrc = 0.
        READ TABLE lt_ftaxp INTO ls_ftaxp INDEX 1.
        gs_data-effwr = ls_ftaxp-kbetr / 1000.
        gs_data-kbetr = ls_ftaxp-kbetr.

      ENDIF.
      "单位转换
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
        EXPORTING
          input    = gs_data-meins
          language = sy-langu
        IMPORTING
*         LONG_TEXT            =
          output   = gs_data-meins
*         SHORT_TEXT           =
*       EXCEPTIONS
*         UNIT_NOT_FOUND       = 1
*         OTHERS   = 2
        .
      IF sy-subrc = 0.
      ENDIF.
      MODIFY gt_data FROM gs_data.
    ENDLOOP.
  ENDIF.
ENDFORM.

FORM check_inputterm .

  DATA lv_times TYPE num10.
  lv_times  = 0.
  IF so_incom IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_item IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_ebeln IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_ebelp IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_matnr IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF so_lifnr IS NOT INITIAL.
    lv_times = lv_times + 1.
  ENDIF.
  IF lv_times = 0.
    MESSAGE '选择屏幕至少需要填写一个字段!' TYPE 'E'.
  ENDIF.

ENDFORM.

*DATA: fieldcat  TYPE lvc_t_fcat.
FORM prm_bulid_field .
  PERFORM create_fieldcat USING:
        gt_fieldcat_lvc 'BUKRS' '公司代码' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'INCOM' '来料单号' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'ITEM' '来料单项次' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'BSART' '采购订单类型' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'EBELN' '采购订单号' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'EBELP' '采购订单项次' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MATNR' '物资编码' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MENGE' '数量' '' 'X' '' '' '' '' '' '' '' '' '' 'QUAN' 'C',
        gt_fieldcat_lvc 'MEINS' '单位' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'TXZ01' '物料描述' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'FACTORY_CODE' '厂家码' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'SUBCODE' 'SUBCODE' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'WERKS' '工厂' '' 'X' '' '' '' '' '' '' '' 'T001W' 'WERKS' '' '',
        gt_fieldcat_lvc 'LGORT' '库存地点' '' 'X' '' '' '' '' '' 'X' '' '' '' '' '',
        gt_fieldcat_lvc 'EKORG' '采购组织' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'EKGRP' '采购组' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'NETPR_CO' '采购价格-含税' '' '' '' '' '' '' '' '' '' '' '' 'CURR' '',
        gt_fieldcat_lvc 'NETPR' '采购价格-未税' '' 'X' '' '' '' '' '' '' '' '' '' 'CURR' '',
        gt_fieldcat_lvc 'PEINH' '价格基数' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'WAERS' '采购货币' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MWSKZ' '税码' '' '' '' '' '' '' '' '' '' 'EKPO' 'MWSKZ' '' '',
        gt_fieldcat_lvc 'LIFNR' '供应商' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'NAME1' '采购供应商名称' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'STATUS' '状态' '' '' '' '' '' '' '' '' '' '' '' '' '',
        gt_fieldcat_lvc 'MESSAGE' '消息' '30' '' '' '' '' '' '' '' '' '' '' '' ''
         .
ENDFORM.

FORM create_fieldcat  USING p0 TYPE lvc_t_fcat p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15.
  DATA: l_alv_filed  TYPE lvc_s_fcat.
  l_alv_filed-fieldname     =  p1.  "内表中的字段 大写
  l_alv_filed-reptext       =  p2.  "表头的文本
  l_alv_filed-outputlen     =  p3.  "字段长度
  l_alv_filed-edit          =  p4.  "是否编辑
  l_alv_filed-convexit      =  p5.  "转换例程
  l_alv_filed-key           =  p6.  "左右滑动 固定列
  l_alv_filed-do_sum        =  p7.  "汇总
  l_alv_filed-checkbox      =  p8.  "CHECK BOX
  l_alv_filed-no_zero       =  p9.  "LV 控制: 为输出隐藏零
  l_alv_filed-hotspot       =  p10. "当击敏感
  l_alv_filed-qfieldname    =  p11. "参考单位
  l_alv_filed-f4availabl    = 'X'.  "是否有搜索帮助
  l_alv_filed-ref_table     =  p12. "内表对应的搜索帮助表
  l_alv_filed-ref_field     =  p13. "内表对应的搜索帮助字段
  l_alv_filed-datatype      =  p14. "输出类型
  l_alv_filed-inttype       =  p15. ""指定该字段类型
  APPEND l_alv_filed TO p0.
  CLEAR l_alv_filed.
ENDFORM.


*
*
**&---------------------------------------------------------------------*
**& Form SET_CATALOG
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& -->  p1        text
**& <--  p2        text
**&---------------------------------------------------------------------*
*FORM set_catalog .
*  DATA:lv_position TYPE i VALUE 1.
*  CLEAR: lv_position.
*  lv_position = lv_position + 1.
** 预定义一个输出模式
*  DEFINE df_fieldcat.
*    CLEAR gs_fieldcat_lvc.
*    gs_fieldcat_lvc-col_pos = lv_position."ALV 控制: 输出列
*    gs_fieldcat_lvc-scrtext_m   = &1."中字段标签
*    gs_fieldcat_lvc-fieldname = &2."ALV 控制: 内部表字段的字段名称
*    gs_fieldcat_lvc-no_zero = &3."ALV 控制: 为输出隐藏零
*    gs_fieldcat_lvc-checkbox = &4."ALV 控制: 作为复选框输出
*    gs_fieldcat_lvc-edit = &5."设置可编辑模式
*    gs_fieldcat_lvc-hotspot = &6."ALV 控制: 单击敏感
**    gs_fieldcat_lvc-outputlen = &7."输出长度
*    gs_fieldcat_lvc-datatype = &7."输出类型
*    gs_fieldcat_lvc-f4availabl = 'X'."是否有搜索帮助
**    gs_fieldcat_lvc-qfieldname = &8. "参考单位
**    gs_fieldcat_lvc-convexit = &9."转换例程
*    gs_fieldcat_lvc-ref_table = &8."内表对应的搜索帮助表
*    gs_fieldcat_lvc-ref_field = &9."内表对应的搜索帮助字段
*
*    APPEND gs_fieldcat_lvc TO gt_fieldcat_lvc.
*    ADD 1 TO lv_position.
*  END-OF-DEFINITION.
*  df_fieldcat:
*   '公司代码' 'BUKRS' '' '' '' '' '' '' '',
*   '来料单号' 'INCOM' '' '' '' '' '' '' '',
*   '来料单项次' 'ITEM ' '' '' '' '' '' '' '',
*   '采购订单类型' 'BSART' '' '' '' '' '' '' '',
*   '采购订单号' 'EBELN' '' '' '' '' '' '' '',
*   '采购订单项次' 'EBELP' '' '' '' '' '' '' '',
*   '物资编码' 'MATNR' '' '' '' '' '' '' '',
*   '数量' 'MENGE' '' '' 'X' '' 'QUAN' '' '',
*   '单位' 'MEINS' '' '' '' '' '' '' '',
*   '物料描述' 'TXZ01' '' '' '' '' '' '' '',
**   '原厂码' 'MFRPN' '' '' '' '' '' '' '',
*   '厂家码' 'FACTORY_CODE' '' '' '' '' '' '' '',
*   'Subcode' 'SUBCODE' '' '' '' '' '' '' '',
*   '工厂' 'WERKS' '' '' 'X' '' '' 'T001W' 'WERKS',
*   '库存地点' 'LGORT' '' '' 'X' 'X' '' '' '',
*   '采购组织' 'EKORG' '' '' '' '' '' '' '',
*   '采购组' 'EKGRP' '' '' '' '' '' '' '',
*   '采购价格-含税' 'NETPR_CO' '' '' '' '' 'CURR' '' '',
*   '采购价格-未税' 'NETPR' '' '' 'X' '' 'CURR' '' '',
*   '价格基数' 'PEINH' '' '' '' '' '' '' '',
*   '采购货币' 'WAERS' '' '' '' '' '' '' '',
*   '税码' 'MWSKZ' '' '' 'X' '' '' 'EKPO' 'MWSKZ',
*   '供应商' 'LIFNR' '' '' '' '' '' '' '',
*   '采购供应商名称' 'NAME1' '' '' '' '' '' '' '',
*   '状态' 'STATUS' '' '' '' '' '' '' '',
*   '消息' 'MESSAGE' '' '' '' '' '' '' ''
*
*   .
*ENDFORM.

*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_alv .

  DATA: ls_layout TYPE lvc_s_layo.
  IF gt_data IS NOT INITIAL.
    ls_layout-zebra = 'X'.
    ls_layout-box_fname = 'CHECK'.  "指定行选择字段
    ls_layout-cwidth_opt = 'X'.

    "---------------enter
    DATA: gt_event TYPE slis_t_event WITH HEADER LINE,
          ref_grid TYPE REF TO cl_gui_alv_grid.
    gt_event-name = 'CALLER_EXIT'.
    gt_event-form = 'FM_BUTTON'.
    APPEND gt_event .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
      EXPORTING
        i_callback_program       = sy-repid "这里是调用这个ALV的程序名
        i_callback_pf_status_set = 'PF_STATUS' "设置ALV状态栏的函数
        i_callback_user_command  = 'USER_COMMAND' "获取用户事件的函数
        is_layout_lvc            = ls_layout "显示的布局
        it_fieldcat_lvc          = gt_fieldcat_lvc "设置显示的字段以及字段的功能
        it_events                = gt_event[]
      TABLES
        t_outtab                 = gt_data
      EXCEPTIONS
        program_error            = 1.
    IF sy-subrc <> 0.

    ENDIF.
  ELSE.
* 这个消息用来显示我们是不是获取到了数据,自己用的时候把这个硬代码换成你需要的TEXT-XXX.
    MESSAGE '没有获取到数据,请重新检索!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE TO LIST-PROCESSING.
    EXIT.
  ENDIF.

ENDFORM.

CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS handle_modify
                FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION

DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_modify.
    DATA stbl TYPE lvc_s_stbl.
    PERFORM frm_refresh_alv.
    stbl-row = 'x'." 基于行的稳定刷新
    stbl-col = 'x'." 基于列稳定刷新
    CALL METHOD ref_grid->refresh_table_display
      EXPORTING
        is_stable = stbl.
  ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION

DATA:gt_event_receiver TYPE REF TO lcl_event_receiver.

"实现FM_BUTTON:
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = ref_grid.
  "设置enter事件
  CALL METHOD ref_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  CREATE OBJECT gt_event_receiver.
  SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
ENDFORM. "FM_BUTTON
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_refresh_alv .
  "全表更新 含税价。
  CLEAR gs_data.
  IF gt_data IS NOT INITIAL.
    LOOP AT gt_data INTO gs_data.
      IF gs_data-netpr IS NOT INITIAL.
        gs_data-netpr_co = gs_data-netpr * ( 1 + gs_data-effwr ).
        MODIFY gt_data FROM gs_data.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& 包含 ZRP008_PBO
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form PF_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM pf_status USING i_it_extab TYPE slis_t_extab.
* 这里我们需要设置状态栏 首先要在程序里面创建一个状态栏
* 定义好名称来这里替换硬代码
 SET PF-STATUS 'ZSTATUS_001'.

* 这里我们需要设置状态栏标题 首先要在程序里面创建一个状态栏标题
* 定义好名称来这里替换硬代码
 SET TITLEBAR 'ZSTATUS_TITLE'.
ENDFORM.

 *&---------------------------------------------------------------------*
*& 包含               ZRP008_PAI
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*

FORM user_command USING i_ucomm TYPE sy-ucomm
                  i_wa_selfield TYPE slis_selfield.
  "------------------------------刷新ALV---------------
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.
  CALL METHOD lr_grid->refresh_table_display.
  i_wa_selfield-refresh = 'X'.

  DATA lv_length TYPE num10.
  CASE i_ucomm.
    WHEN '&IC1'.
      READ TABLE gt_data INTO gs_data INDEX i_wa_selfield-tabindex.
      CASE i_wa_selfield-fieldname.
        WHEN 'LGORT'.
          DATA: l_dselc TYPE TABLE OF dselc WITH HEADER LINE.
          DATA: l_ddshretval TYPE TABLE OF ddshretval WITH HEADER LINE.
          TYPES:BEGIN OF ly_t001l,
                  werks TYPE t001l-werks,
                  lgort TYPE t001l-lgort,
                  lgobe TYPE t001l-lgobe,
                END OF ly_t001l.

          DATA: lt_lgort TYPE TABLE OF ly_t001l WITH HEADER LINE.
          "T001L 库存地点
          SELECT lgort lgobe werks INTO CORRESPONDING FIELDS OF TABLE lt_lgort FROM t001l WHERE werks = gs_data-werks.
          l_dselc-fldname = 'LGORT'.
          l_dselc-dyfldname = 'LGORT'.
          APPEND l_dselc.
          l_dselc-fldname = 'LGOBE'.
          l_dselc-dyfldname = 'LGOBE'.
          APPEND l_dselc.

          CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
            EXPORTING
              retfield        = 'LGORT'
              dynpprog        = sy-repid
              dynpnr          = sy-dynnr
              dynprofield     = 'LGORT' "返回到屏幕上的ALV  或者屏幕上对应的字段。
              window_title    = '选择库存地点'
              value_org       = 'S' "Structure
            TABLES
              value_tab       = lt_lgort[]
              return_tab      = l_ddshretval[]
              dynpfld_mapping = l_dselc[]
            EXCEPTIONS
              parameter_error = 1
              no_values_found = 2
              OTHERS          = 3.
          IF sy-subrc = 0.
            IF l_ddshretval[] IS NOT INITIAL.
              READ TABLE l_ddshretval[] INTO l_ddshretval INDEX 1.
              gs_data-lgort = l_ddshretval-fieldval.
              MODIFY gt_data FROM gs_data INDEX i_wa_selfield-tabindex.
            ENDIF.
          ENDIF.
      ENDCASE.

    WHEN 'CREATE_PO'. "创建采购退货订单
      lv_length = 0.
      CLEAR gs_data.
      REFRESH gt_data_copy.
      LOOP AT gt_data INTO gs_data WHERE check = 'X' .
        lv_length = lv_length + 1.
        IF gs_data-status = 'S'.
          APPEND gs_data TO gt_data_copy.
        ENDIF.
      ENDLOOP.
      IF lv_length = 0.
        MESSAGE '请选择行!' TYPE 'E'.
      ENDIF.
      IF lines( gt_data_copy ) > 0 .
        MESSAGE '选中的行有已经创建成功的记录!' TYPE 'E'.
      ENDIF.
      "供应商、公司、采购组织、采购组 都相同的数据,创建在同一张采购订单不同行上。
      CLEAR gs_data.
      REFRESH gt_data_copy.
      LOOP AT gt_data INTO gs_data WHERE check = 'X'.
        APPEND gs_data TO gt_data_copy.
      ENDLOOP.
      DELETE ADJACENT DUPLICATES FROM gt_data_copy COMPARING bukrs lifnr ekorg ekgrp.
      "=========创建PO需要的参数类型定义
      DATA ls_poheader TYPE bapimepoheader.
      DATA ls_poheaderx TYPE bapimepoheaderx.
      DATA ls_poitem TYPE  bapimepoitem.
      DATA lt_poitem TYPE TABLE OF bapimepoitem.
      DATA ls_poitemx TYPE  bapimepoitemx.
      DATA lt_poitemx TYPE TABLE OF bapimepoitemx.
      DATA lv_poitem TYPE num10.
      DATA lt_bapiret2 TYPE TABLE OF bapiret2.
      DATA ls_bapiret2 TYPE bapiret2.

      DATA lt_extensionin TYPE TABLE OF bapiparex .
      DATA ls_extensionin TYPE bapiparex .
      DATA ls_bapi_te_mepoitem TYPE bapi_te_mepoitem.
      DATA ls_bapi_te_mepoitemx TYPE bapi_te_mepoitemx.

      CLEAR gs_data_copy.
      LOOP AT gt_data_copy INTO gs_data_copy.
        ls_poheader-comp_code = gs_data_copy-bukrs. "公司代码
        ls_poheader-doc_type = gs_data_copy-bsart. "采购凭证类型
        ls_poheader-creat_date = sy-datum. "系统当前日期
        ls_poheader-created_by = sy-uname.
        ls_poheader-item_intvl = '00010'. "项目编号间隔
        ls_poheader-vendor = gs_data_copy-lifnr."指定的供应商
        ls_poheader-purch_org = gs_data_copy-ekorg. "采购组织
        ls_poheader-pur_group = gs_data_copy-ekgrp. "采购组
        ls_poheaderx-comp_code = 'X'. "公司代码
        ls_poheaderx-doc_type = 'X'. "采购凭证类型
        ls_poheaderx-creat_date = 'X'. "系统当前日期
        ls_poheaderx-created_by = 'X'.
        ls_poheaderx-item_intvl = 'X'. "项目编号间隔
        ls_poheaderx-vendor = 'X'."指定的供应商
        ls_poheaderx-purch_org = 'X'. "采购组织
        ls_poheaderx-pur_group = 'X'. "采购组
        lv_poitem = 10.
        LOOP AT gt_data INTO gs_data WHERE bukrs = gs_data_copy-bukrs
          AND lifnr = gs_data_copy-lifnr AND ekorg = gs_data_copy-ekorg AND ekgrp = gs_data_copy-ekgrp AND check = 'X'.
          ls_poitem-po_item = lv_poitem.
*          ls_poitem-material = gs_data-matnr."物料号 "注:不支持40位物料号,故换成 :ls_poitem-material_long = gs_data-matnr."物料号
          ls_poitem-material_long = gs_data-matnr."物料号
          ls_poitem-plant = gs_data-werks."工厂
          ls_poitem-info_rec = ''."采购信息记录的编号
          ls_poitem-quantity = gs_data-menge."数量
          "外部单位转换成内部单位
          IF gs_data-meins IS NOT INITIAL.
            PERFORM conversion_exit_cunit_input CHANGING gs_data.
          ENDIF.
          ls_poitem-po_unit = gs_data-meins."单位
          ls_poitem-net_price = gs_data-netpr."采购价格-未税
          ls_poitem-price_unit = gs_data-peinh. "价格单位
          ls_poitem-tax_code = gs_data-mwskz."税
          ls_poitem-ret_item = 'X'."退货项目
          APPEND ls_poitem TO lt_poitem.
          ls_poitemx-po_item = lv_poitem.
          ls_poitemx-po_itemx = 'X'.
*          ls_poitemx-material = 'X'."物料号
          ls_poitemx-material_long = 'X'."物料号
          ls_poitemx-plant = 'X'."工厂
          ls_poitemx-info_rec = 'X'."采购信息记录的编号
          ls_poitemx-quantity = 'X'."数量
          ls_poitemx-po_unit = 'X'."单位
          ls_poitemx-net_price = 'X'."采购价格-含税
          ls_poitemx-price_unit = 'X'. "价格单位
          ls_poitemx-tax_code = 'X'."税
          ls_poitemx-ret_item = 'X'."退货项目
          APPEND ls_poitemx TO lt_poitemx.
          "增强字段
          ls_bapi_te_mepoitem-po_item = lv_poitem."项次
          ls_bapi_te_mepoitemx-po_item = lv_poitem."项次  "注:增强这个位置比较特殊。
          ls_bapi_te_mepoitem-item_note = gs_data-incom."行项目备注-来料单号
          ls_bapi_te_mepoitemx-item_note = 'X'."行项目备注
          ls_extensionin-structure = 'BAPI_TE_MEPOITEM'.
          ls_extensionin-valuepart1 = ls_bapi_te_mepoitem.
          APPEND ls_extensionin TO lt_extensionin.
          CLEAR: ls_extensionin.
          ls_extensionin-structure = 'BAPI_TE_MEPOITEMX'.
          ls_extensionin-valuepart1 = ls_bapi_te_mepoitemx.
          APPEND ls_extensionin TO lt_extensionin.
          CLEAR: ls_extensionin.
          lv_poitem = lv_poitem + 10.
          APPEND gs_data TO gt_data_temp. "临时记录将要被更新的记录
        ENDLOOP.
        "创建一个PO
        DATA ls_expheader TYPE bapimepoheader.
        CALL FUNCTION 'BAPI_PO_CREATE1'
          EXPORTING
            poheader    = ls_poheader
            poheaderx   = ls_poheaderx
          IMPORTING
            expheader   = ls_expheader
          TABLES
            return      = lt_bapiret2
            poitem      = lt_poitem
            poitemx     = lt_poitemx
            extensionin = lt_extensionin.
        IF sy-subrc = 0.
          "表示PO创建成功,更新内表记录
          IF lt_bapiret2 IS NOT INITIAL.
            DATA zmessage(255) TYPE c.
            zmessage = ''.
            DATA zflag(8) TYPE c.
            LOOP AT lt_bapiret2 INTO ls_bapiret2 .
              IF ls_bapiret2-type = 'E'.
                zmessage = zmessage && ls_bapiret2-type && ':' && ls_bapiret2-message && ','.
              ELSEIF ls_bapiret2-type = 'S'.
                zflag = 'S'.
              ENDIF.
            ENDLOOP.
            IF zmessage IS NOT INITIAL. "表示有失败的信息记录
              MESSAGE zmessage TYPE 'S' DISPLAY LIKE 'E'.
              LOOP AT gt_data_temp INTO gs_data_temp.
                gs_data_temp-status = 'E'.
                gs_data_temp-message = zmessage.
                MODIFY gt_data_temp FROM gs_data_temp.
              ENDLOOP.
            ELSE.
              IF zflag = 'S'. "确认采购订单被创建成功
                DATA ls_pocommit_return TYPE bapiret2.
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "BAPI事务提交
                  EXPORTING
                    wait   = 'X'
                  IMPORTING
                    return = ls_pocommit_return.
                zmessage = ls_expheader-po_number && '采购订单创建成功'.
                MESSAGE zmessage TYPE 'S'.
                LOOP AT gt_data_temp INTO gs_data_temp.
                  gs_data_temp-status = zflag.
                  gs_data_temp-message = zmessage.
                  MODIFY gt_data_temp FROM gs_data_temp.
                ENDLOOP.
              ENDIF.
              APPEND LINES OF gt_data_temp TO gt_data_success_log. "最终记录创建成功的记录。
            ENDIF.
          ENDIF.
        ENDIF.
        CLEAR ls_poitemx.
        CLEAR ls_poitem.
        REFRESH lt_poitemx.
        REFRESH lt_poitem.
        CLEAR ls_bapi_te_mepoitem.
        CLEAR ls_bapi_te_mepoitemx.
        CLEAR: ls_extensionin.
        REFRESH lt_extensionin.
        REFRESH gt_data_temp.
      ENDLOOP.
      "对创建成功的记录更新到ALV显示内表  GT_DADA.
      CLEAR gs_data.
      LOOP AT gt_data INTO gs_data WHERE check = 'X'.
        READ TABLE gt_data_success_log INTO gs_data_success_log WITH KEY ebeln = gs_data-ebeln  ebelp = gs_data-ebelp.
        IF sy-subrc = 0."在记录表中存在, 将更新GT_DATA 记录状态。
          gs_data-status = gs_data_success_log-status.
          gs_data-message = gs_data_success_log-message.
          MODIFY gt_data FROM gs_data.
        ENDIF.
      ENDLOOP.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

*& Form CONVERSION_EXIT_CUNIT_INPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- GS_DATA
*&---------------------------------------------------------------------*
FORM conversion_exit_cunit_input  CHANGING p_gs_data TYPE gy_data.
  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
    EXPORTING
      input    = p_gs_data-meins
      language = sy-langu
    IMPORTING
      output   = p_gs_data-meins.
ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/945920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ORA-00604 ORA-00069报错

在测试环境上删除用户&#xff0c;报错如下 rop user "USR_EOS" cascade; * ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-00069: cannot acquire lock -- table locks disabled for T_EMPLOYEE 解决方法 alter table USR_EOS.T_EMPL…

运维架构师:驱动企业运维向高效发展“

运维架构师是高级运维工程师的角色&#xff0c;主要负责运维工作的策划和执行。他们需要熟练掌握开源工具&#xff0c;但更重要的是运用思维来进行运维工作&#xff0c;实现DevOps理念和解决各种企业运营中的挑战。他们的职责包括设计各种运维解决方案&#xff0c;例如自动化代…

Python框架【模板继承、继承模板实战、装饰器、蓝图(介绍、单文件、目录结构、模版文件、静态文件 url_for函数子域名实现)】(五)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

深入解析SNMP协议及其在网络设备管理中的应用

SNMP&#xff08;Simple Network Management Protocol&#xff0c;简单网络管理协议&#xff09;作为一种用于网络设备管理的协议&#xff0c;在实现网络设备的监控、配置和故障排除方面发挥着重要的作用。本文将深入解析SNMP协议的工作原理、重要概念和功能&#xff0c;并探讨…

回首一路坎坷,献给刚入测试的你

恍惚间&#xff0c;已经进入测试岗位四年多的时间了&#xff0c;回顾过往&#xff0c;思绪良多&#xff0c;一路走来&#xff0c;或多或少的经历了一些坎坷&#xff0c;也遇到了不少的困难&#xff0c;也曾四顾迷茫&#xff0c;在此&#xff0c;我结合了自己的一些心得&#xf…

【实训项目】精点考研

1.设计摘要 如果说高考是一次能够改变命运的考试&#xff0c;那么考研应该是另外一次。为什么那么多人都要考研呢&#xff1f;从中国教育在线官方公布是考研动机调查来看&#xff0c;大家扎堆考研的原因大概集中在这6个方面&#xff1a;本科就业压力大&#xff0c;提升竞争力、…

C++ 面试题(一)--C++基础,面向对象,内存管理

目录 1.part1 C基础 1 C特点 2 说说C语言和C的区别 3 说说 C中 struct 和 class 的区别 4 include头文件的顺序以及双引号""和尖括号<>的区别 5 说说C结构体和C结构体的区别 6 导入C函数的关键字是什么&#xff0c;C编译时和C有什么不同&#xff1f; 7…

Tomcat安装及基本使用

1. 什么是Web服务器 Web服务器是一种应用程序&#xff08;软件&#xff09;&#xff0c;它封装了对HTTP协议的操作&#xff0c;使得开发人员无需直接操作协议&#xff0c;从而简化了Web开发。其主要功能是提供网上信息浏览服务。 Web服务器安装在服务器端&#xff0c;我们可以…

JavaWeb 速通JSON

目录 一、JSON快速入门 1.基本介绍 : 2.定义格式 : 3.入门案例 : 二、JSON对象和字符串的相互转换 1.常用方法 : 2.应用实例 : 3.使用细节 : 三、JSON在Java中的使用 1.基本说明 : 2.应用场景 : 2.1 JSON <---> JavaBean 2.2 JSON <---> List 2.3 JSON …

java对时间序列根据阈值进行连续性分片

问题描述&#xff1a;我需要对一个连续的时间戳list进行分片&#xff0c;分片规则是下一个数据比当前数据要大于某一个阈值则进行分片&#xff1b; 解决方式&#xff1a; 1、输入的有顺序的list &#xff0c;和需要进行分片的阈值 2、调用方法&#xff0c;填入该排序的list和阈…

非煤矿山风险监测预警算法 yolov8

非煤矿山风险监测预警算法通过yolov8网络模型深度学习算法框架&#xff0c;非煤矿山风险监测预警算法在煤矿关键地点安装摄像机等设备利用智能化视频识别技术&#xff0c;能够实时分析人员出入井口的情况&#xff0c;人数变化并检测作业状态。YOLO的结构非常简单&#xff0c;就…

element-ui el-upload组件 on-remove事件 传自定义参数

element-ui el-upload组件 on-remove事件 传自定义参数 1.vue页面 :on-remove"(file, fileList) > {handleRemove(file, fileList, item.order)}"2.methods方法里面

promethues监控postgres,emqx,redis

一、监控postgres 1、安装监控 docker pull wrouesnel/postgres_exporter2、执行 docker run -d -p 9187:9187 --name postgres_exporter --nethost -d -e DATA_SOURCE_NAME"postgresql://postgres:123456192.168.12.116:5432/rcc-manage?sslmodedisable" wroues…

移动隔断墙,高隔间将是一种十分理想的空间划分装饰

移动隔断墙&#xff0c;高隔间是一种非常理想的空间划分装饰方式。它可以根据需要随时移动和重新布置&#xff0c;提供灵活的空间解决方案。高隔间可以用于划分办公区域、会议室、展示区、休息区等不同功能的空间&#xff0c;使整个空间更加有序和高效。 高隔间的设计具有多样性…

context.WithCancel()的使用

“ WithCancel可以将一个Context包装为cancelCtx,并提供一个取消函数,调用这个取消函数,可以Cancel对应的Context Go语言context包-cancelCtx[1] 疑问 context.WithCancel()取消机制的理解[2] 父母5s钟后出门&#xff0c;倒计时&#xff0c;父母在时要学习&#xff0c;父母一走…

yo!这里是Linux进程入门介绍

目录 前言 os定位 进程基本介绍 进程基本操作 查看进程 创建进程 进程状态 理论层面 具体状态 进程优先级 环境变量 地址空间 进程地址空间&&页表介绍 深入理解地址空间 后记 前言 在了解学习过Linux环境下的基本操作以及工具之后&#xff0c;就来到了…

本地套接字通信

1.本地套接字 本地套接字的作用&#xff1a;本地的进程间通信 有关系的进程间的通信 没有关系的进程间的通信 本地套接字实现流程和网络套接字类似&#xff0c;一般采用TCP的通信流程 2.本地套接字通信的流程 - tcp // 服务器端 1.创建监听的套接字int lfd socket(AF_U…

聊聊中南亚跨境电商的机遇与前景

随着工业转移&#xff0c;中南亚地区作为一个充满潜力的区域&#xff0c;正逐渐成为跨境电商领域的热点。这一地区包括印度、孟加拉国、巴基斯坦、斯里兰卡等国家&#xff0c;拥有庞大的人口、不断增长的中产阶级&#xff0c;以及逐步完善的数字基础设施&#xff0c;为跨境电商…

Android投屏总结

#android手机投屏 ####导语 至于手机投屏的实现方法可谓五花八门&#xff0c;今天小袁就说下以开发人员的角度来说下当今手机的主流投屏方法。目前这种将终端信号经由WiFi传输到电视、电视盒的技术有三种&#xff1a;DLNA、AirPlay、Miracast、Google Cast。 ##手机投屏智能电…

for...in和for...of有什么区别

在JavaScript中遍历数组通常是使用for...i循环&#xff0c;在ES5具有遍历数组功能的还有forEach、map、filter、some、every、reduce、reduceRight等。 for...in和for...of是两种增强型循环&#xff0c;for...in是ES5标准&#xff0c;在ES6中新增了for...of的循环方式。 1.fo…