首页 > 其他 > 详细

MM039

时间:2021-01-10 22:40:35      阅读:31      评论:0      收藏:0      [点我收藏+]

主程序

REPORT ztest_001.

INCLUDE ztest_001_top.
INCLUDE ztest_001_c01.
INCLUDE ztest_001_frm.
INCLUDE ztest_001_pbo.
INCLUDE ztest_001_pai.
ztest_001_top

*&---------------------------------------------------------------------*
*&  Include           ZTEST_001_TOP
*&---------------------------------------------------------------------*

CLASS lcl_alv_event_receiver DEFINITION DEFERRED.

TYPES: BEGIN OF ty_out,
         light TYPE icon_int, "状态
         aufnr TYPE aufnr,   "订单号
         menge TYPE menge_d, "数量
         lgort TYPE lgort_d, "仓位
         gernr TYPE gernr,   "序列号
         zvin  TYPE char17,  "VIN 码
         werks TYPE werks_d, "工厂
         matnr TYPE matnr,   "物料
         msg   TYPE char255, "消息
         err   TYPE char1,   "错误标识
         grflg TYPE char1,   "收货标识
       END OF ty_out.


DATA:
  gt_out TYPE STANDARD TABLE OF ty_out,
  gt_sel TYPE STANDARD TABLE OF ty_out,"选中的行
  gs_out TYPE ty_out.

*DATA:gt_save TYPE TABLE OF ztable.

DATA: g_row   TYPE i,
      g_value TYPE char10,
      g_col   TYPE i,
      gs_col  TYPE lvc_s_col.

DATA:
  gt_alv_field_cat     TYPE lvc_t_fcat,          "field for General ALV
  gt_toolbar_excluding TYPE ui_functions,        "Alv excluding toolbars
  gs_toolbar_excluding TYPE ui_func,             "WA of git_toolbar_excluding
  gs_alv_field_cat     TYPE lvc_s_fcat,          "WA of gt_alv_field_cat
  gs_layout            TYPE lvc_s_layo,          "Layout for alv
  gs_variant           TYPE disvariant,          "Layout (External Use)
  go_grid              TYPE REF TO cl_gui_alv_grid.

DATA: gt_rowid TYPE  lvc_t_row,
      gt_row   TYPE  lvc_t_roid.

DATA:gs_bdc LIKE bdcdata,
     gt_bdc LIKE STANDARD TABLE OF bdcdata.

DATA: gc_event_receiver TYPE REF TO lcl_alv_event_receiver."Event handle for ooalv
DATA:gs_toolbar TYPE stb_button."alv button

*Set alv field
DEFINE set_alv_fieldcat.
  gs_alv_field_cat-fieldname = &1.
  gs_alv_field_cat-coltext   = &2.
  gs_alv_field_cat-rollname  = &3.
  gs_alv_field_cat-lzero     = space.
  gs_alv_field_cat-no_zero   = X.
  APPEND gs_alv_field_cat TO gt_alv_field_cat.
  CLEAR gs_alv_field_cat.
END-OF-DEFINITION.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK bl1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_get_file.

START-OF-SELECTION.
  PERFORM frm_convert_to_table.
  CALL SCREEN 100.

ZTEST_001_C01

*&---------------------------------------------------------------------*
*&  Include           ZTEST_001_C01
*&---------------------------------------------------------------------*
CLASS lcl_alv_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      constructor IMPORTING i_flag TYPE i,
      handle_menu_button FOR EVENT menu_button OF cl_gui_alv_grid
        IMPORTING e_object e_ucomm,

      handle_toolbar
                    FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive,
      handle_user_command
                    FOR EVENT after_user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm e_saved e_not_processed,
      handle_hotspot_click
                    FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING e_row_id e_column_id es_row_no,

      handle_double_click
                    FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row e_column,
      handle_data_changed
                    FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm,

      handle_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
        IMPORTING e_modified et_good_cells.


*      handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid IMPORTING e_dyndoc_id.
*  PRIVATE SECTION.
    DATA:lp_alv_flag TYPE i VALUE 1."Multiple ALV Will Use This Flag。
ENDCLASS.                    "LCL_ALV_EVENT_RECEIVER DEFINITION



*----------------------------------------------------------------------*
*       CLASS lcl_ALV_envent_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv_event_receiver IMPLEMENTATION.
  METHOD  constructor.
    lp_alv_flag = i_flag.
  ENDMETHOD.                    "constructor

  METHOD handle_menu_button.

  ENDMETHOD.                    "handle_menu_button
  METHOD handle_toolbar.
    PERFORM frm_handle_toolbar USING e_object e_interactive.
  ENDMETHOD.                    "HANDLE_TOOLBAR_101

  METHOD handle_user_command.
    PERFORM frm_handle_command USING e_ucomm e_saved e_not_processed.
  ENDMETHOD.                    "AFTER_USER_COMMAND

  METHOD handle_hotspot_click.

  ENDMETHOD.                    "HOTSPOT_CLICK

  METHOD handle_data_changed.

  ENDMETHOD.                    "data_changed

  METHOD    handle_data_changed_finished.

  ENDMETHOD.                    "handle_data_changed_finished


  METHOD handle_double_click.

  ENDMETHOD.                    "data_changed

ENDCLASS. "gc_event_receiver IMPLEMENTATION

ZTEST_001_FRM

*&---------------------------------------------------------------------*
*&  Include           ZTEST_001_FRM
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  frm_create_alv_grid
*&---------------------------------------------------------------------*
*       text create alv grid
*----------------------------------------------------------------------*
*      -->T_OUTTAB             text  data to show
*      -->I_GUI_CUS_CONTAINER  text gui container
*      -->I_ALV_CONTROL        text alv object
*      -->I_IT_FIELD           text alv field
*      -->I_FLAG               text derector when there is more than on alv
*----------------------------------------------------------------------*
FORM frm_create_alv_grid TABLES t_outtab TYPE STANDARD TABLE
                         USING
                                 i_alv_control       TYPE REF TO cl_gui_alv_grid
                                 i_it_field          TYPE  lvc_t_fcat
                                 i_flag              TYPE i.
  DATA:lwa_stable    TYPE lvc_s_stbl.

  CLEAR: gs_variant,gc_event_receiver.
  gs_variant-report = sy-repid.
  IF i_alv_control IS  INITIAL.
    CREATE OBJECT i_alv_control
      EXPORTING
        i_parent = cl_gui_container=>default_screen.


    CREATE OBJECT gc_event_receiver
      EXPORTING
        i_flag = i_flag.

    SET HANDLER gc_event_receiver->handle_toolbar       FOR i_alv_control.
    SET HANDLER gc_event_receiver->handle_menu_button   FOR i_alv_control.
    SET HANDLER gc_event_receiver->handle_user_command  FOR i_alv_control.
    SET HANDLER gc_event_receiver->handle_hotspot_click FOR i_alv_control.
    SET HANDLER gc_event_receiver->handle_double_click  FOR i_alv_control.
    SET HANDLER gc_event_receiver->handle_data_changed  FOR i_alv_control.
    SET HANDLER gc_event_receiver->handle_data_changed_finished  FOR i_alv_control.
*    SET HANDLER gc_event_receiver->handle_top_of_page   FOR i_alv_control.

    CALL METHOD i_alv_control->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified
      EXCEPTIONS
        error      = 1
        OTHERS     = 2.

    CALL METHOD i_alv_control->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter
      EXCEPTIONS
        error      = 1
        OTHERS     = 2.


    CALL METHOD i_alv_control->set_table_for_first_display
      EXPORTING
        i_buffer_active               = X
        i_bypassing_buffer            = X
        i_save                        = A
        i_default                     = space
        is_layout                     = gs_layout
        is_variant                    = gs_variant
        it_toolbar_excluding          = gt_toolbar_excluding
      CHANGING
        it_outtab                     = t_outtab[]
        it_fieldcatalog               = i_it_field
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

  ELSE.
    CALL METHOD cl_gui_cfw=>set_new_ok_code
      EXPORTING
        new_code = RELOAD.

    CLEAR lwa_stable.
    lwa_stable-col = abap_true.
    CALL METHOD i_alv_control->refresh_table_display
      EXPORTING
        is_stable = lwa_stable.
*        i_soft_refresh = gco_true.
    CALL METHOD cl_gui_cfw=>flush.
  ENDIF.

ENDFORM.                    "frm_layout_container

FORM frm_get_sel.
  CLEAR:gt_rowid,gt_row.
  CALL METHOD go_grid->get_selected_rows(
    IMPORTING
      et_index_rows = gt_rowid
      et_row_no     = gt_row ).
ENDFORM.

FORM frm_get_cel.
  CLEAR:g_row,g_value,g_col,gs_col.
  CALL METHOD go_grid->get_current_cell
    IMPORTING
      e_row     = g_row
      e_value   = g_value
      e_col     = g_col
      es_col_id = gs_col.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  refresh_alv
*&---------------------------------------------------------------------*
*       text refresh alv list
*----------------------------------------------------------------------*
*      -->I_ALV_CONTROL  text alv object
*      -->P_ROW          text row of alv grid
*----------------------------------------------------------------------*
FORM refresh_alv USING i_alv_control TYPE REF TO cl_gui_alv_grid
                                                 p_row.

  DATA: ls_stable TYPE lvc_s_stbl.
  IF NOT i_alv_control IS INITIAL.
    ls_stable-row = X.
    ls_stable-col = X.
    CALL METHOD i_alv_control->refresh_table_display
      EXPORTING
        is_stable = ls_stable.
*        i_soft_refresh = ‘X‘.
    CALL METHOD cl_gui_cfw=>flush.
  ENDIF.
ENDFORM.                    "refresh_alv

FORM frm_set_layout.
  gs_layout-sel_mode = D.
ENDFORM.


FORM frm_set_field.
  set_alv_fieldcat AUFNR ‘‘ AUFNR .
  set_alv_fieldcat MENGE ‘‘ MENGE_D .
  set_alv_fieldcat LGORT ‘‘ LGORT_D .
  set_alv_fieldcat GERNR ‘‘ GERNR .
  set_alv_fieldcat ZVIN  序列号 ‘‘ .

*  set_alv_fieldcat ‘DESCR‘ ‘消息‘ ‘‘ .

ENDFORM.


FORM frm_handle_toolbar USING i_object  TYPE REF TO cl_alv_event_toolbar_set
                          i_interactive TYPE  char01.

  CLEAR: gs_toolbar.
  gs_toolbar-butn_type = 3.
  APPEND gs_toolbar TO i_object->mt_toolbar.

  CLEAR: gs_toolbar.
  gs_toolbar-function  = SAVE.
  gs_toolbar-icon      = icon_display.
  gs_toolbar-quickinfo = 保存.
  gs_toolbar-butn_type = 0.
  gs_toolbar-disabled  = ‘‘.
  gs_toolbar-text      = 保存.
  APPEND gs_toolbar TO i_object->mt_toolbar.
ENDFORM.

FORM frm_handle_command USING i_ucomm TYPE  sy-ucomm
                              i_saved TYPE  char01
                      i_not_processed TYPE  char01.

  CASE i_ucomm.
    WHEN SAVE."保存到内表
      PERFORM frm_save_data.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

FORM frm_save_data.

  LOOP AT gt_out INTO DATA(ls_out) WHERE err = X.
    EXIT.
  ENDLOOP.

  IF sy-subrc = 0.
    MESSAGE e001(00) WITH 数据有错误!.
  ENDIF.

*  LOOP AT gt_out INTO ls_out.
*    APPEND INITIAL LINE TO gt_save ASSIGNING FIELD-SYMBOL(<fs_save>).
*    <fs_save>-aufnr = ls_out-aufnr.
*    <fs_save>-menge = ls_out-menge.
*    <fs_save>-lgort = ls_out-lgort.
*    <fs_save>-gernr = ls_out-gernr.
*    <fs_save>-zvin  = ls_out-zvin.
*  ENDLOOP.
*   MODIFY ztable FROM TABLE gt_save.
*   IF sy-subrc = 0.
*     COMMIT WORK.
*            MESSAGE s001(00) WITH ‘保存成功!‘ .
*     ELSE.
*       MESSAGE s001(00) WITH ‘保存失败!‘ DISPLAY LIKE ‘E‘.
*   ENDIF.
ENDFORM.

FORM frm_check_data.
  IF gt_row IS INITIAL.
    MESSAGE e001(00) WITH 请选择要收获的行!.
  ENDIF.

  LOOP AT gt_row INTO DATA(ls_row).
    READ TABLE gt_out INTO DATA(ls_out) INDEX ls_row-row_id.
    IF sy-subrc = 0.
      APPEND ls_out TO gt_sel.
    ENDIF.
  ENDLOOP.



ENDFORM.

FORM frm_post_gr.

ENDFORM.


FORM frm_get_file.
  DATA:lt_files TYPE TABLE OF file_table,
       l_count  TYPE i.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title            = ‘‘
      file_filter             = Excel Files (*.xls)|*.xlsx|Text File(*.txt)|*.txt
      initial_directory       = C:
      multiselection          = space
    CHANGING
      file_table              = lt_files
      rc                      = l_count
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.

  READ TABLE lt_files INTO DATA(ls_file) INDEX 1.
  IF sy-subrc = 0.
    p_file = ls_file-filename.
  ELSE.
    EXIT.
  ENDIF.
ENDFORM.


FORM frm_convert_to_table.
  DATA:lt_intern TYPE TABLE OF alsmex_tabline.
  CALL FUNCTION ALSM_EXCEL_TO_INTERNAL_TABLE
    EXPORTING
      filename                = p_file
      i_begin_col             = 1
      i_begin_row             = 1
      i_end_col               = 10
      i_end_row               = 5000
    TABLES
      intern                  = lt_intern
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

  IF sy-subrc <> 0.
    MESSAGE e001(00) WITH 转换失败.
  ENDIF.

  IF lt_intern IS NOT INITIAL.
    SORT lt_intern BY row col.
    CLEAR:gs_out,gt_out.
    LOOP AT lt_intern INTO DATA(ls_intern).
      IF ls_intern-row > 1.
        ASSIGN COMPONENT ls_intern-col OF STRUCTURE gs_out TO FIELD-SYMBOL(<fs_value>).
        <fs_value> = ls_intern-value.
        AT END OF row.
          CALL FUNCTION CONVERSION_EXIT_ALPHA_INPUT
            EXPORTING
              input  = gs_out-aufnr
            IMPORTING
              output = gs_out-aufnr.
          APPEND gs_out TO gt_out.
          CLEAR gs_out.
        ENDAT.
      ENDIF.
    ENDLOOP.
  ENDIF.

  IF gt_out IS NOT INITIAL.
    SELECT aufnr
      INTO TABLE @DATA(lt_aufk)
      FROM aufk
      FOR ALL ENTRIES IN @gt_out
      WHERE aufnr = @gt_out-aufnr.

    SELECT mblnr,
           mjahr,
           zeile,
           aufnr INTO TABLE @DATA(lt_mseg)
     FROM mseg
     FOR ALL ENTRIES IN @gt_out
     WHERE aufnr = @gt_out-aufnr.

    SORT lt_aufk BY aufnr.
    SORT lt_mseg BY aufnr.
    LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
      READ TABLE lt_aufk TRANSPORTING NO FIELDS WITH KEY aufnr = <fs_out>-aufnr BINARY SEARCH.
      IF sy-subrc NE 0.
        <fs_out>-light = @S_TL_R@.
        <fs_out>-msg   = 工单不存在.
        <fs_out>-err   = X.
      ELSE.
        <fs_out>-light = @S_TL_G@.
        <fs_out>-msg = ‘‘.
      ENDIF.

      READ TABLE lt_mseg INTO DATA(ls_mseg) WITH KEY aufnr = <fs_out>-aufnr BINARY SEARCH.
      IF sy-subrc = 0.
        <fs_out>-grflg = X.
        <fs_out>-msg = 已经收货.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.

ZTEST_001_PBO

*&---------------------------------------------------------------------*
*&  Include           ZTEST_001_PBO
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  INIT_100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE init_100 OUTPUT.
  PERFORM frm_set_field.
  PERFORM frm_set_layout.

  PERFORM frm_create_alv_grid  TABLES gt_out
                               USING  go_grid
                                      gt_alv_field_cat
                                       1.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS STATUS_100.
*  SET TITLEBAR ‘xxx‘.
ENDMODULE.

ZTEST_001_PAI

*&---------------------------------------------------------------------*
*&  Include           ZTEST_001_PAI
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

ENDMODULE.

 

MM039

原文:https://www.cnblogs.com/JackeyLove/p/14259095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!