alv弹出ALV实例1

*&-----------------------------------------------------------------------------*

*  Program Type: Report

*  Program Name:ZPSR002

*  Program Transaction Code:ZPS001

*  Application area:PS

*&-----------------------------------------------------------------------------*

*  Author's name:                     Date written:2015/07/27

*  Description:BOM主数据创建维护

*&-----------------------------------------------------------------------------*

* Change History:

* Version(s)  Date      Description            Author          Change Request

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

*

*

*

*

*&-----------------------------------------------------------------------------*

REPORT  ZPSR002 MESSAGE-ID ZWMT.

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

*Tables

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

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

*Type_pools

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

TYPE-POOLS:slis.

TYPES:BEGIN OF ty_out,

  checkbox TYPE c,"复选框

  werks TYPE werks_d,"工厂

  matnr TYPE ztswi3d-matnr,"物料

  drawnno TYPE ztbomhead-drawnno,"3D数模号

  maktx TYPE ztswi3d-maktx1,"物料描述

  isok(2) TYPE c,"是否具备创建BOM条件

  statu TYPE ztbomhead-statu,"状态

  statx TYPE ztbomhead-statx,"状态描述

END OF ty_out.

TYPES:BEGIN OF ty_item,

  hdrawnno TYPE ztbomitem-hdrawnno,"上级模型号

  hmatnr TYPE ztswi3d-matnr,"上级物料

  hmaktx TYPE ztswi3d-maktx1,"物料描述

  postp TYPE postp,"行项目类别

  matnr TYPE ztswi3d-matnr,"物料

  drawnno TYPE ztbomitem-drawnno,"3D数模号

  maktx TYPE ztswi3d-maktx1,"物料描述

  statu TYPE ztswi3d-statu,"状态

  menge TYPE ztbomitem-menge,"数量,

  romei TYPE ztbomitem-romei,"单位

  tabix TYPE i,"记录行号

END OF ty_item.

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

*Internal Tables

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

DATA:gs_out TYPE ty_out,

     gt_out TYPE STANDARD TABLE OF ty_out.

DATA:gs_bomhead TYPE ztbomhead,

     gt_bomhead TYPE STANDARD TABLE OF ztbomhead.

DATA:gs_swi3d TYPE ztswi3d,

     gt_swi3d TYPE STANDARD TABLE OF ztswi3d.

DATA:gs_bomitem TYPE ztbomitem,

     gt_bomitem TYPE STANDARD TABLE OF ztbomitem.

DATA:gs_item TYPE ty_item,

     gt_item TYPE STANDARD TABLE OF ty_item.

DATA gt_item_ls TYPE STANDARD TABLE OF ty_item."临时存放信息

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

*Global variable

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

*  显示抬头信息alv

DATA: it_fieldcat TYPE slis_t_fieldcat_alv,

      wa_fieldcat TYPE slis_fieldcat_alv,

      it_events   TYPE slis_t_event WITH HEADER LINE,

      gs_layout   TYPE slis_layout_alv,

      it_sort     TYPE slis_t_sortinfo_alv,

      it_print    TYPE slis_print_alv,

      g_grid TYPE REF TO cl_gui_alv_grid.

*   显示BOM ITEM信息alv

DATA: GS_DIALOGBOX TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER,

      GO_SPLITTER_CONTAINER      TYPE REF TO CL_GUI_SPLITTER_CONTAINER,

      GO_TOOLBAR                 TYPE REF TO CL_GUI_TOOLBAR.

DATA GR_ALVGRID TYPE REF TO  CL_GUI_ALV_GRID.

DATA gs_toolbar TYPE LINE OF TTB_BUTTON.

DATA GT_FIELDCAT1 TYPE LVC_T_FCAT.

DATA GS_LAYOUT1 TYPE LVC_S_LAYO.

DATA :E_HYPE  TYPE LVC_S_HYPE,

      TS_HYPE TYPE LVC_T_HYPE.

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

*Macro

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

DEFINE add_field.

  wa_fieldcat-fieldname    = &1.

  wa_fieldcat-reptext_ddic = &2.

  wa_fieldcat-key          = &3.

  wa_fieldcat-edit         = &4.

  wa_fieldcat-checkbox     = &5.

  wa_fieldcat-do_sum       = &6.

  wa_fieldcat-decimals_out = &7.

  wa_fieldcat-emphasize    = &8.

  wa_fieldcat-no_zero      = &9.

  append wa_fieldcat to it_fieldcat.

END-OF-DEFINITION.

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

* Selection  screen

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

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.

SELECTION-SCREEN END OF BLOCK B1 .

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

* At selection-screen

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

AT SELECTION-SCREEN.

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

* Start-of-selection

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

START-OF-SELECTION.

  PERFORM frm_get_data.

  PERFORM frm_process_data.

  PERFORM frm_output_data.

*&---------------------------------------------------------------------*

*&      Form  FRM_GET_DATA

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_get_data .

  CLEAR:gt_out,

        gt_bomhead,

        gt_bomitem,

        gt_swi3d,

        gt_item.

 SELECT * FROM ztbomhead INTO TABLE gt_bomhead WHERE statu <> '3'.

 SELECT * FROM ztbomitem INTO TABLE gt_bomitem.

 SELECT * FROM ztswi3d INTO TABLE gt_swi3d.

 SORT gt_bomhead BY drawnno.

 SORT gt_bomitem BY hdrawnno.

 SORT gt_swi3d BY drawnno.

*IF GT_BSIS[] IS INITIAL.

*  MESSAGE '没有找到数据,请重新输入查询条件' TYPE 'S' DISPLAY LIKE 'E'.

*  STOP.

*  ENDIF.

ENDFORM.                    "FRM_GET_DATA

*&---------------------------------------------------------------------*

*&      Form  FRM_PROCESS_DATA

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_process_data .

  DATA flg_ok TYPE boolean.

  LOOP AT gt_bomhead INTO gs_bomhead.

    CLEAR: gs_out,

           gs_swi3d.

    flg_ok = 'X'.

    READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomhead-drawnno BINARY SEARCH.

*   判断抬头物料业务视图是否创建成功

    IF gs_swi3d-statu <> '3'.

      flg_ok = ''.

    ENDIF.

*   判断行项目物料业务视图是否创建成功

    LOOP AT gt_bomitem INTO gs_bomitem WHERE hdrawnno = gs_bomhead-drawnno.

      CLEAR gs_swi3d.

      READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomitem-drawnno BINARY SEARCH.

      IF gs_swi3d-statu <> '3'.

        flg_ok = ''.

        EXIT.

      ENDIF.

    ENDLOOP.

    IF flg_ok = 'X'.

      gs_out-isok = '是'.

    ELSE.

      gs_out-isok = '否'.

    ENDIF.

    gs_out-matnr = gs_swi3d-matnr.

    gs_out-maktx = gs_swi3d-maktx1.

    gs_out-drawnno = gs_bomhead-drawnno.

    gs_out-statu = gs_bomhead-statu.

    gs_out-statx = gs_bomhead-statx.

    APPEND gs_out to gt_out.

  ENDLOOP.

* 行项目信息

  LOOP AT gt_bomitem INTO gs_bomitem.

    CLEAR: gs_item,

           gs_swi3d.

    READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomitem-drawnno BINARY SEARCH.

    gs_item-matnr = gs_swi3d-matnr.

    gs_item-hdrawnno = gs_bomitem-hdrawnno.

    gs_item-drawnno = gs_bomitem-drawnno.

    gs_item-maktx = gs_swi3d-maktx1.

    gs_item-statu = gs_swi3d-statu.

    gs_item-menge = gs_bomitem-menge.

    gs_item-romei = gs_bomitem-romei.

*    上级物料信息

    CLEAR gs_swi3d.

    READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomitem-hdrawnno BINARY SEARCH.

    gs_item-hmatnr = gs_swi3d-matnr.

    gs_item-hmaktx = gs_swi3d-maktx1.

    APPEND gs_item to gt_item.

  ENDLOOP.

ENDFORM.                    "FRM_PROCESS_DATA

*&---------------------------------------------------------------------*

*&      Form  FRM_OUTPUT_DATA

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_output_data .

  PERFORM frm_set_fieldcat.

  PERFORM frm_set_layout.

  PERFORM frm_set_events.

  PERFORM frm_set_sort.

  PERFORM frm_call_alv_list.

ENDFORM.                    "FRM_OUTPUT_DATA

*&---------------------------------------------------------------------*

*&      Form  FRM_SET_FIELDCAT

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_set_fieldcat .

  add_field     'CHECKBOX'      text-001   'X' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'WERKS'         text-002   'X' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'MATNR'         text-003   '' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'DRAWNNO'       text-004   '' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'MAKTX'         text-005   '' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'ISOK'          text-006   '' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'STATU'         text-007   '' ' ' ' ' ' ' ' ' ' ' ' '.

  add_field     'STATX'         text-008   '' ' ' ' ' ' ' ' ' ' ' ' '.

ENDFORM.                    "FRM_SET_FIELDCAT

*&---------------------------------------------------------------------*

*&      Form  FRM_SET_LAYOUT

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_set_layout .

  CLEAR gs_layout.

  gs_layout-colwidth_optimize = 'X'.

ENDFORM.                    "FRM_SET_LAYOUT

*&---------------------------------------------------------------------*

*&      Form  FRM_SET_EVENTS

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_set_events .

  CLEAR it_events.

  it_events-name = slis_ev_user_command.

  it_events-form = 'FRM_USER_COMMAND'.

  APPEND it_events.

  CLEAR it_events.

  it_events-name = slis_ev_pf_status_set.

  it_events-form = 'FRM_PF_STATUS_SET'.

  APPEND it_events.

*  it_events-name = slis_ev_top_of_page.

*  it_events-form = 'FRM_TOP_OF_PAGE'.

*  APPEND it_events.

ENDFORM.                    "FRM_SET_EVENTS

*&---------------------------------------------------------------------*

*&      Form  FRM_CALL_ALV_LIST

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_call_alv_list .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      i_callback_program = sy-repid

      it_fieldcat        = it_fieldcat

      is_layout          = gs_layout

      it_events          = it_events[]

      it_sort            = it_sort[]

      i_save             = 'A'

    TABLES

      t_outtab           = gt_out

    EXCEPTIONS

      program_error      = 1

      OTHERS             = 2.

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

ENDFORM.                    "FRM_CALL_ALV_LIST

*&---------------------------------------------------------------------*

*&      Form  frm_pf_status_set

*&---------------------------------------------------------------------*

*       text

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

*      -->I_EXTAB    text

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

FORM frm_pf_status_set USING i_extab TYPE slis_t_extab.

  SET PF-STATUS 'ZPSR002' EXCLUDING i_extab.

ENDFORM.                    "FRM_PF_STATUS_SET

*&---------------------------------------------------------------------*

*&      Form  frm_top_of_page

*&---------------------------------------------------------------------*

*       text

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

form frm_top_of_page.

endform.                    " FRM_TOP_OF_PAGE                  "FRM_TOP_OF_PAGE

*&---------------------------------------------------------------------*

*&      Form  FRM_SET_SORT

*&---------------------------------------------------------------------*

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM frm_set_sort .

ENDFORM.                    "FRM_SET_SORT

*&---------------------------------------------------------------------*

*&      Form  user_command

*&---------------------------------------------------------------------*

*       text

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

*      -->VALUE(R_UCOMM)  text

*      -->RS_SELFIELD     text

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

FORM frm_user_command USING value(r_ucomm) LIKE sy-ucomm

                  CHANGING rs_selfield TYPE slis_selfield.

  DATA: lv_answer TYPE c,

        lv_question(200) TYPE c.

  DATA:es_row_id TYPE  lvc_s_row,

       es_col_id TYPE  lvc_s_col,

       es_row_no TYPE  lvc_s_roid.

  DATA ref1 TYPE REF TO cl_gui_alv_grid.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

      e_grid = ref1.

*  刷新数据

  CALL METHOD ref1->check_changed_data.

  rs_selfield-refresh = 'X'.

"  获取选中行

  CALL METHOD ref1->get_current_cell

        IMPORTING

          es_row_id = es_row_id

          es_col_id = es_col_id

          es_row_no = es_row_no.

  CASE r_ucomm.

    WHEN 'DETAIL'.

      CLEAR gs_out.

      READ TABLE gt_out INTO gs_out WITH KEY checkbox = 'X'.

      PERFORM frm_show_detail."显示BOM详细信息

    WHEN 'CREATE'.

      PERFORM frm_bom_create."创建BOM

    WHEN OTHERS.

  ENDCASE.

ENDFORM.                    "FRM_USER_COMMAND

*==========================class  定义事件=============================

CLASS LCL_EVENT_HANDLER DEFINITION.

  PUBLIC SECTION.

    METHODS:

*      关闭dialogbox

      ON_CLOSE

        FOR EVENT CLOSE OF CL_GUI_DIALOGBOX_CONTAINER

          IMPORTING SENDER,

*    设置工具栏

     handle_toolbar     FOR EVENT toolbar OF cl_gui_alv_grid

       IMPORTING

         e_object,

*    用户命令响应

     handle_user_command FOR EVENT user_command OF cl_gui_alv_grid

       IMPORTING

         e_ucomm.

ENDCLASS.

CLASS LCL_EVENT_HANDLER IMPLEMENTATION.

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

* Handles the Close event of the dialogbox. The colse event is

* triggered when the close button in the top right corner of the

* dialogbox is pushed. Closes the dialog box

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

  METHOD ON_CLOSE.

    IF NOT SENDER IS INITIAL.

      CALL METHOD SENDER->FREE

        EXCEPTIONS

          OTHERS = 1.

      IF SY-SUBRC <> 0.

*   Error handling

      ENDIF.

      FREE GS_DIALOGBOX.

      CLEAR GS_DIALOGBOX.

    ENDIF.

  ENDMETHOD.

*   method toolbar handler

  METHOD handle_toolbar.

   PERFORM set_toolbar CHANGING e_object.

  ENDMETHOD.                    "handle_toolbar

 METHOD handle_user_command.

*   Handle own functions defined in the toolbar

    CASE e_ucomm.

      WHEN 'OK'.

         GR_ALVGRID->CHECK_CHANGED_DATA( ).

         LOOP AT gt_item_ls INTO gs_item.

           modify gt_item from gs_item INDEX gs_item-tabix.

         ENDLOOP.

        CALL METHOD GS_DIALOGBOX->FREE.

        FREE GS_DIALOGBOX.

        CLEAR GS_DIALOGBOX.

    ENDCASE.

  ENDMETHOD.

ENDCLASS.

 FORM set_toolbar

  CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.

    CLEAR prf_object->mt_toolbar.

    CLEAR  gs_toolbar.

    MOVE 'OK' TO gs_toolbar-function.

    MOVE ICON_OKAY TO gs_toolbar-icon.

    MOVE 'OK' TO gs_toolbar-quickinfo.

    MOVE ' ' TO gs_toolbar-disabled.

    MOVE text-016 TO gs_toolbar-text.

    APPEND gs_toolbar       to prf_object->mt_toolbar .

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FRM_SHOW_DETAIL

*&---------------------------------------------------------------------*

*       显示行项目

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

*  -->  p1        text

*  <--  p2        text

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

FORM FRM_SHOW_DETAIL .

  DATA GO_EVENT_HANDLER           TYPE REF TO LCL_EVENT_HANDLER.

  CLEAR gt_item_ls.

*  IF gs_out is INITIAL.

*     MESSAGE S002 DISPLAY LIKE 'E'.

*     RETURN.

*  ENDIF.

  LOOP AT gt_item INTO gs_item WHERE hdrawnno = gs_out-drawnno.

    gs_item-tabix = sy-tabix.

    APPEND gs_item to gt_item_ls.

  ENDLOOP.

  IF GS_DIALOGBOX IS INITIAL.

*   创建 dialogbox 对象

    CREATE OBJECT GS_DIALOGBOX

      EXPORTING

        PARENT                      = CL_GUI_CONTAINER=>SCREEN0

        WIDTH                       = 900

        HEIGHT                      = 300

        STYLE                       = CL_GUI_CONTROL=>WS_SYSMENU

*       REPID                       = SY-REPID

*       DYNNR                       = SY-DYNNR

*       LIFETIME                    = LIFETIME_DEFAULT

        TOP                         = 80

        LEFT                        = 50

        CAPTION                     = 'BOM行项目'

**        NO_AUTODEF_PROGID_DYNNR     =

**        METRIC                      = 0

**        NAME                        =

      EXCEPTIONS

        CNTL_ERROR                  = 1

        CNTL_SYSTEM_ERROR           = 2

        CREATE_ERROR                = 3

        LIFETIME_ERROR              = 4

        LIFETIME_DYNPRO_DYNPRO_LINK = 5

        EVENT_ALREADY_REGISTERED    = 6

        ERROR_REGIST_EVENT          = 7

        OTHERS                      = 8.

    IF SY-SUBRC <> 0.

*     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

*   创建alv对象

    CREATE OBJECT GR_ALVGRID

      EXPORTING

        I_PARENT          = GS_DIALOGBOX

      EXCEPTIONS

        ERROR_CNTL_CREATE = 1

        ERROR_CNTL_INIT   = 2

        ERROR_CNTL_LINK   = 3

        ERROR_DP_CREATE   = 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.

    ENDIF.

    CLEAR:GT_FIELDCAT1.

    PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT1.

    PERFORM PREPARE_LAYOUT CHANGING GS_LAYOUT1.

    CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY

      EXPORTING

        IS_LAYOUT                     = GS_LAYOUT1

        IT_HYPERLINK                  = TS_HYPE

      CHANGING

        IT_OUTTAB                     = gt_item_ls

        IT_FIELDCATALOG               = GT_FIELDCAT1

      EXCEPTIONS

        INVALID_PARAMETER_COMBINATION = 1

        PROGRAM_ERROR                 = 2

        TOO_MANY_LINES                = 3

        OTHERS                        = 4.

    IF SY-SUBRC <> 0.

      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    CREATE OBJECT GO_EVENT_HANDLER.

*   注册事件

    SET HANDLER GO_EVENT_HANDLER->handle_user_command FOR GR_ALVGRID.

    SET HANDLER GO_EVENT_HANDLER->handle_toolbar  FOR GR_ALVGRID.

    SET HANDLER GO_EVENT_HANDLER->on_close FOR GS_DIALOGBOX.

    CALL METHOD GR_ALVGRID->set_toolbar_interactive.

  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  PREPARE_FIELD_CATALOG

*&---------------------------------------------------------------------*

*       设置输出属性

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

*      <--P_GT_FIELDCAT  text

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

FORM PREPARE_FIELD_CATALOG  CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.

* 行项目类别

  DATA LS_FCAT TYPE LVC_S_FCAT .

  LS_FCAT-FIELDNAME = 'HMATNR' .

  LS_FCAT-EDIT = 'X'.

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-REF_TABLE = 'T418'.

  LS_FCAT-REF_FIELD = 'POSTP'.

  LS_FCAT-COLTEXT = text-017.

  LS_FCAT-SELTEXT = text-017 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

  LS_FCAT-FIELDNAME = 'HMAKTX' .

  LS_FCAT-EDIT = 'X'.

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-REF_TABLE = 'T418'.

  LS_FCAT-REF_FIELD = 'POSTP'.

  LS_FCAT-COLTEXT = text-005.

  LS_FCAT-SELTEXT = text-005 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

  LS_FCAT-FIELDNAME = 'POSTP' .

  LS_FCAT-EDIT = 'X'.

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-REF_TABLE = 'T418'.

  LS_FCAT-REF_FIELD = 'POSTP'.

  LS_FCAT-COLTEXT = text-009.

  LS_FCAT-SELTEXT = text-009 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

* 物料

  LS_FCAT-FIELDNAME = 'MATNR' .

  LS_FCAT-INTTYPE = 'C' .

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-COLTEXT = text-010 .

  LS_FCAT-SELTEXT = text-010 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

* 工程图号

  LS_FCAT-FIELDNAME = 'DRAWNNO' .

  LS_FCAT-INTTYPE = 'C' .

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-COLTEXT = text-011 .

  LS_FCAT-SELTEXT = text-011 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

* 物料描述

  LS_FCAT-FIELDNAME = 'MAKTX' .

  LS_FCAT-INTTYPE = 'C' .

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-COLTEXT = text-012 .

  LS_FCAT-SELTEXT = text-012 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

* 状态

  LS_FCAT-FIELDNAME = 'STATU' .

  LS_FCAT-INTTYPE = 'C' .

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-COLTEXT = text-013 .

  LS_FCAT-SELTEXT = text-013 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

* 数量

  LS_FCAT-FIELDNAME = 'MENGE' .

  LS_FCAT-INTTYPE = 'C' .

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-COLTEXT = text-014 .

  LS_FCAT-SELTEXT = text-014 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

* 单位

  LS_FCAT-FIELDNAME = 'ROMEI' .

  LS_FCAT-INTTYPE = 'C' .

  LS_FCAT-OUTPUTLEN = '10' .

  LS_FCAT-COLTEXT = text-015 .

  LS_FCAT-SELTEXT = text-015 .

  APPEND LS_FCAT TO PT_FIELDCAT .

  CLEAR LS_FCAT .

ENDFORM.                    " PREPARE_FIELD_CATALOG

*&---------------------------------------------------------------------*

*&      Form  PREPARE_LAYOUT

*&---------------------------------------------------------------------*

*       设置layout

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

*      <--P_GS_LAYOUT  text

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

FORM PREPARE_LAYOUT  CHANGING PS_LAYOUT TYPE LVC_S_LAYO.

  PS_LAYOUT-ZEBRA = 'X' .

*  PS_LAYOUT-GRID_TITLE = 'BOM 行项目信息' .

  PS_LAYOUT-SMALLTITLE = 'X' .

*  PS_LAYOUT-NO_TOOLBAR = 'X'.

ENDFORM.                    " PREPARE_LAYOUT

*&---------------------------------------------------------------------*

*&      Form  FRM_BOM_CREATE

*&---------------------------------------------------------------------*

*       创建BOM

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

*  -->  p1        text

*  <--  p2        text

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

FORM FRM_BOM_CREATE .

  DATA LV_VALID_FROM type CSAP_MBOM-DATUV.

  DATA LV_WARNING TYPE CAPIFLAG-FLWARNING.

  DATA LV_ECNNO TYPE AENNR."ecn number

*  读取BOM信息的参数

  DATA: ls_stpo_r TYPE STPO_API02,

        lt_stpo_r TYPE STANDARD TABLE OF STPO_API02,

        ls_stpu_r TYPE STPU_API01,

        lt_stpu_r TYPE STANDARD TABLE OF STPU_API01.

*  创建BOM信息的参数

  DATA:lv_stko_s TYPE STKO_API01,

       lv_stko1_s TYPE STKO_API02,

       ls_stpo_s TYPE STPO_API03,

       lt_stpo_s TYPE STANDARD TABLE OF STPO_API03,

       ls_stpu_s TYPE STPU_API01,

       lt_stpu_s TYPE STANDARD TABLE OF STPU_API01.

  LOOP AT gt_out INTO gs_out where checkbox = 'X'.

    CLEAR:lt_stpo_r,

          lt_stpu_r.

    IF gs_out-isok = '否'.

      MESSAGE S021 DISPLAY LIKE 'E'.

      return.

    ENDIF.

    CLEAR:lv_valid_from,

          lv_warning.

*   读取BOM 信息

    CALL FUNCTION 'CSAP_MAT_BOM_READ'

      EXPORTING

        MATERIAL             = gs_out-matnr

        PLANT                = gs_out-werks

        BOM_USAGE            = '5'

     IMPORTING

       FL_WARNING           = lv_warning

     TABLES

        T_STPO               = lt_stpo_r

        T_STPU               = lt_stpu_r

     EXCEPTIONS

       ERROR                = 1

       OTHERS               = 2 .

*   BOM 不存在

     IF sy-subrc <> 0.

     ELSE."BOM已经存在

       PERFORM frm_create_ecn USING gs_out lv_ecnno."创建ECN

      

      

      

      

     ENDIF.

  ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  FRM_CREATE_ECN

*&---------------------------------------------------------------------*

*       创建ECN

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

*  -->  p1        text

*  <--  p2        text

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

FORM FRM_CREATE_ECN  USING s_out TYPE ty_out

                           ecnno TYPE aennr.

ENDFORM.

猜你喜欢

转载自www.cnblogs.com/jimi520/p/12103011.html
alv