dialog例子-维护流水线

1、表结构如下



2、效果图如下:


下拉框表示工厂, ##??表示流水线号,按钮分别是提取,保存,删除


代码:

REPORT  zppt009a.


INCLUDE zppt009A_top.
INCLUDE zppt009A_getdata.
INCLUDE zppt009A_core.




INITIALIZATION.

AT SELECTION-SCREEN OUTPUT.

START-OF-SELECTION.
  CALL SCREEN 100.


zppt009A_top包括代码:

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

*&  包括                ZPPT009A_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS:slis,vrm.

TABLES sscrfields.
TABLES:zppt009a.

DATA:gt_fcat TYPE lvc_t_fcat,
      gs_layout TYPE lvc_s_layo,
      wa_fieldcat TYPE lvc_s_fcat,
      tmp_fieldcat TYPE lvc_t_fcat,
      gt_fieldcat TYPE lvc_t_fcat,
      gt_exclude TYPE ui_functions,
      alv_grid TYPE REF TO cl_gui_alv_grid,
      container TYPE scrfname VALUE 'ZSR1',
      custom_container TYPE REF TO cl_gui_custom_container.

DATA:ls_layout TYPE disvariant.
DATAok_code LIKE sy-ucomm,
      save_ok LIKE ok_code.

DATAc_form_name TYPE tdsfname,
      c_form_title TYPE string.

DATAz_werks LIKE marc-werksz_assline LIKE zppt009a-asslinename.
DATAitab LIKE TABLE OF zppt009a WITH HEADER LINE.
DATAit_out LIKE TABLE OF zppt009a WITH HEADER LINE.
DATABEGIN OF wa_werks,
  werks LIKE t001w-werks,
  name1 LIKE t001w-name1,
 END OF wa_werks.
DATA:it_werks LIKE TABLE OF wa_werks WITH HEADER LINE.

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA:
      gi_index_rows TYPE lvc_t_row,
      g_selected_row LIKE lvc_s_row.

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
    handle_data_changed
    FOR EVENT data_changed OF cl_gui_alv_grid
    IMPORTING er_data_changed.
ENDCLASS.                    "lcl_event_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_data_changed.
    PERFORM handle_data_changed USING er_data_changed.
  ENDMETHOD.                    "handle_data_changed
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

DATAg_alv_application TYPE REF TO lcl_event_receiver.
DATA:
      o_event_receiver TYPE REF TO lcl_event_receiver.
DATA:zcw TYPE lvc_t_cell,
      wa_cw TYPE lvc_s_cell.


zppt009A_getdata.包含代码

*&---------------------------------------------------------------------*
*&  包括                ZPPT009A_GETDATA
*&---------------------------------------------------------------------*
FORM getdata.
  IF z_werks IS INITIAL AND z_assline IS INITIAL.
    SELECT
      asslineno
      werks
      asslinename
      arbpl
      zstatus
       INTO CORRESPONDING FIELDS OF TABLE itab  FROM zppt009a.
  ELSEIF z_werks IS INITIAL AND z_assline IS NOT INITIAL.
    SELECT
      asslineno
      werks
      asslinename
      arbpl
       zstatus
        INTO CORRESPONDING FIELDS OF TABLE itab  FROM zppt009a WHERE  asslineno z_assline.
  ELSEIF z_werks IS NOT INITIAL AND z_assline IS INITIAL.
    SELECT
      asslineno
      werks
      asslinename
      arbpl
      zstatus
         INTO CORRESPONDING FIELDS OF TABLE itab  FROM zppt009a WHERE werks z_werks.
  ELSE.
    SELECT
      asslineno
      werks
      asslinename
      arbpl
      zstatus
        INTO CORRESPONDING FIELDS OF TABLE itab  FROM zppt009a WHERE werks z_werks AND asslineno z_assline.
  ENDIF.
ENDFORM.                    "getdata

*&---------------------------------------------------------------------*
*&      Form  alvdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alvdata.
  DATA:it_fcat TYPE lvc_t_fcat WITH HEADER LINE,
        ls_fcat TYPE lvc_s_fcat,
        l_col_pos LIKE lvc_s_fcat-col_pos,
        l_tabix LIKE sy-tabix.
  CLEAR gt_fcat[].
  CLEAR ls_fcat.

  ls_fcat-fieldname 'CHE'.
  ls_fcat-coltext '选择'.
  ls_fcat-checkbox 'X'.
  ls_fcat-outputlen 4.
  ls_fcat-edit 'X'.
  APPEND ls_fcat TO gt_fcat.
  CLEAR ls_fcat.

  ls_fcat-fieldname 'WERKS'.
  ls_fcat-coltext  =  '工厂'.
  ls_fcat-outputlen 6.
  ls_fcat-edit 'X'.
  ls_fcat-ref_field 'WERKS'.
  ls_fcat-ref_table 'T001W'.
  APPEND ls_fcat TO gt_fcat.
  CLEAR ls_fcat.

  ls_fcat-fieldname   =  'ASSLINENAME'.
  ls_fcat-coltext  =  '流水线'.
  ls_fcat-outputlen 10.
  ls_fcat-edit 'X'.
  APPEND ls_fcat TO gt_fcat.
  CLEAR ls_fcat.


  ls_fcat-fieldname  =  'ARBPL'.
  ls_fcat-coltext  =  '工作中心'.
  ls_fcat-outputlen 12.
  ls_fcat-edit 'X'.
  "ls_fcat-ref_table = 'CRHD'.
  "ls_fcat-ref_field = 'ARBPL'.
  APPEND ls_fcat TO gt_fcat.
  CLEAR ls_fcat.

  ls_fcat-fieldname  =  'ZSTATUS'.
  ls_fcat-coltext  =  '状态'.
  ls_fcat-drdn_hndl '1'."下拉选项
  ls_fcat-outputlen 4.
  ls_fcat-edit 'X'.
  APPEND ls_fcat TO gt_fcat.
  CLEAR ls_fcat.

ENDFORM.                    "alvdata

*&---------------------------------------------------------------------*
*&      Form  prepare_drilldown_values
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM prepare_drilldown_values.
  DATAlt_ddval TYPE lvc_t_drop.
  DATAls_ddval TYPE lvc_s_drop.
  ls_ddval-handle 1.
  ls_ddval-value 'Y'.
  APPEND ls_ddval TO lt_ddval.
  ls_ddval-handle 1.
  ls_ddval-value 'N'.
  APPEND ls_ddval TO lt_ddval.
  CALL METHOD alv_grid->set_drop_down_tableit_drop_down lt_ddval ).
ENDFORM.                    "prepare_drilldown_values


zppt009A_core.包含代码

*&---------------------------------------------------------------------*
*&  包括                ZPPT009A_CORE
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '009'.
  SET TITLEBAR 'T009'.
ENDMODULE.                    "status_0100 OUTPUT

*----------------------------------------------------------------------*
*  MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok =  ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN '&BACK' OR '&EXIT' OR '&CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'ZGET'.
      PERFORM getdata.
    WHEN 'ZSAVE'.
      CALL METHOD alv_grid->check_changed_data.
      PERFORM savedata.
    WHEN 'ZDEL'.
      PERFORM deldata.
  ENDCASE.
ENDMODULE.                    "user_command_0100 INPUT

*&---------------------------------------------------------------------*
*&      Form  savedata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM savedata.
  DATA TYPE i.
  DATAtb_asslineno TYPE zppt009a-asslineno.
  DATA:s_werks TYPE zppt009a-werkss_mess(20TYPE c.
  DESCRIBE TABLE itab LINES b.
  IF b > 0.
    LOOP AT itab.
      SELECT SINGLE werks INTO s_werks FROM zppt009a WHERE werks itab-werks AND asslinename itab-asslinename.
      IF s_werks IS INITIAL.

        tb_asslineno  itab-asslineno.
        IF tb_asslineno IS INITIAL OR  tb_asslineno ''.

          CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'
            EXPORTING
              object           'ZSERIALNO'
            EXCEPTIONS
              foreign_lock     1
              object_not_found 2
              system_failure   3
              OTHERS           4.

          CALL FUNCTION 'NUMBER_GET_NEXT'
            EXPORTING
              nr_range_nr             '00'
              object                  'ZSERIALNO'
              ignore_buffer           'X'
            IMPORTING
              number                  tb_asslineno
            EXCEPTIONS
              interval_not_found      1
              number_range_not_intern 2
              object_not_found        3
              quantity_is_0           4
              quantity_is_not_1       5
              interval_overflow       6
              buffer_overflow         7
              OTHERS                  8.

          CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'
            EXPORTING
              object 'ZSERIALNO'.

          SHIFT tb_asslineno LEFT DELETING LEADING '0'.
          itab-asslineno =  tb_asslineno.
          MODIFY itab.
        ENDIF.
      ELSE.
*        DATA: s_mess1(20) TYPE c.
*        s_mess1 = ''.
*        CONCATENATE '工厂' itab-werks '拉号' itab-asslinename '已经存在' INTO s_mess1.
*        MESSAGE s_mess1 TYPE 'I'.
        EXIT.
      ENDIF.
    ENDLOOP.
    SORT itab BY werks asslinename.
    DELETE ADJACENT DUPLICATES FROM itab COMPARING werks asslinename.

    MODIFY zppt009a FROM TABLE itab.
    IF sy-subrc 0.
      COMMIT WORK.
      MESSAGE'保存成功' TYPE 'I'.
    ELSE.
      ROLLBACK WORK.
      MESSAGE:'保存失败' TYPE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.                    "savedata

*&---------------------------------------------------------------------*
*&      Form  deldata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM deldata.
  DATA:TYPE i.
  a 0.
  LOOP AT itab WHERE che EQ 'X'.
    a a + 1.
  ENDLOOP.
  IF 0.
    MESSAGE:'请选择需要删除的行项目' TYPE 'E'.
  ELSE.
    DATA:  wl_answer  TYPE c.
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        text_question         '确定要删除选择的行项目吗?'
        icon_button_1         '确定' "是
        icon_button_2         '不确定'"否
        default_button        '2'
        display_cancel_button 'X'
        start_column          25
        start_row             6
      IMPORTING
        answer                wl_answer
      EXCEPTIONS
        text_not_found        1
        OTHERS                2.
    CASE wl_answer.
      WHEN '1'.
        DELETE itab WHERE che <> 'X'.
        DELETE zppt009a FROM TABLE itab.
        PERFORM getdata.
      WHEN '2'.
        LEAVE TO SCREEN 0.
      WHEN OTHERS.
    ENDCASE.
  ENDIF.
ENDFORM.                    "deldata
*----------------------------------------------------------------------*
*  MODULE displayalv OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE displayalv OUTPUT.
  IF custom_container IS INITIAL.
    CREATE OBJECT custom_container
    EXPORTING
      container_name container.
  ENDIF.

  IF alv_grid IS INITIAL.
    CREATE OBJECT alv_grid
    EXPORTING
      i_parent custom_container.
  ENDIF.

  IF g_alv_application IS INITIAL.
    CREATE OBJECT g_alv_application.
  ENDIF.

  SET HANDLER g_alv_application->handle_data_changed FOR alv_grid.

  CLEAR gs_layout.
  ls_layout-report sy-repid.
  gs_layout-sel_mode 'C'.
  gs_layout-box_fname 'CHE'.
  gs_layout-zebra 'X'.
  PERFORM alvdata.
  PERFORM prepare_drilldown_values.

  CALL METHOD alv_grid->set_table_for_first_display
    EXPORTING
      is_layout            gs_layout
      it_toolbar_excluding gt_exclude
      i_save               'A'
    CHANGING
      it_outtab            itab[]
      it_fieldcatalog      gt_fcat[].

  CALL METHOD alv_grid->register_edit_event
    EXPORTING
      i_event_id cl_gui_alv_grid=>mc_evt_modified.
ENDMODULE.                    "displayalv OUTPUT

*&---------------------------------------------------------------------*
*&      Form  handle_data_changed
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ER_DATA_CHANGED  text
*----------------------------------------------------------------------*
FORM handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
  DATA:mod_data TYPE lvc_t_modi,
        wa_mod_data TYPE lvc_s_modi.
  mod_data p_er_data_changed->mt_mod_cells.
ENDFORM.                    "handle_data_changed
*&---------------------------------------------------------------------*
*&      Module  create_dropdown_box  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE create_dropdown_box INPUT.
  SELECT werks name1 FROM t001w INTO CORRESPONDING FIELDS OF TABLE it_werks.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        'WERKS'
      value_org       'S'
    TABLES
      value_tab       it_werks
    EXCEPTIONS
      parameter_error 1
      no_values_found 2
      OTHERS          3.

ENDMODULE.                    "create_dropdown_box INPUT


screen 100的逻辑流如下

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE displayalv.
PROCESS AFTER INPUT.
  MODULE user_command_0100.

PROCESS ON VALUE-REQUEST.
field z_werks MODULE create_dropdown_box.


屏幕设计如下:


工厂下拉框名为Z_WERKS, 选择LIstbox

流水线号名z_assline    ,三个按钮分别为zget, zsave, zdel

定制控制位ZSR1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值