填报日历保存设置

**************************************************************4**********
* TRANSATION ID        :
* PROGRAM TITLE        : ZFID
* AUTHOR               :
* SUPPLIER             :
* DATE                 :
* DEVELOPMENT ID       : ZFID
* CHANGE REQUEST (CTS) :
* DESCRIPTION          :
*=======================================================================
* COPIED FROM         : (CLONED PROGRAM)
* TITLE               : (PROGRAM TITLE)
* OTHER RELATED OBJ   : (OBJECT NAMES)
*=======================================================================
* CHANGE HISTORY LOG
*-----------------------------------------------------------------------
* MOD. NO.|  DATE    | NAME           | CORRECTION NUMBER  | CHANGE REFE
*-----------------------------------------------------------------------
* MOD-001 |YYYY.MM.DD| XXXXXXXXXXXXXX | XXXXXXXXXX         | XXXXXXXXXX
*
* DESCRIPTION:
*-----------------------------------------------------------------------
* MOD-002 |YYYY.MM.DD| XXXXXXXXXXXXXX | XXXXXXXXXX         | XXXXXXXXXX
*
* DESCRIPTION:
************************************************************************
REPORT zfid1146 MESSAGE-ID 00 NO STANDARD PAGE HEADING.

DATA: date_from   TYPE sy-datum,
      date_to     TYPE sy-datum,
      return_code TYPE sy-subrc.

DATA: gt_attributes TYPE STANDARD TABLE OF casdayattr,
      gs_attributes TYPE casdayattr.
*--------------------------------------------------------------------*
TYPES:BEGIN OF typ_alv,
        id(10)    TYPE i,
        ms        TYPE char10,
        z1        TYPE char8,
        z2        TYPE char8,
        z3        TYPE char8,
        z4        TYPE char8,
        z5        TYPE char8,
        z6        TYPE char8,
        z7        TYPE char8,
        d1        TYPE datum,
        d2        TYPE datum,
        d3        TYPE datum,
        d4        TYPE datum,
        d5        TYPE datum,
        d6        TYPE datum,
        d7        TYPE datum,
        cellcolor TYPE lvc_t_scol,
      END OF typ_alv.
DATA:gt_alv TYPE STANDARD TABLE OF typ_alv,
     gs_alv TYPE typ_alv.

DATA:gt_ztfi0425 TYPE STANDARD TABLE OF ztfi0425,
     gs_ztfi0425 TYPE ztfi0425.

DATA:id(10) TYPE i.
*--------------------------------------------------------------------*
*---------------------------------------------------------------------*
*           alv component                                             *
*---------------------------------------------------------------------*
DATA: gt_fieldcat         TYPE lvc_t_fcat,
      gs_fieldcat         TYPE lvc_s_fcat,
      gs_layout           TYPE lvc_s_layo,
      gt_sort             TYPE lvc_t_sort,
      gs_sort             TYPE lvc_s_sort,
      go_grid             TYPE REF TO cl_gui_alv_grid,
      go_custom_container TYPE REF TO cl_gui_custom_container.

DATA: gs_stable           TYPE lvc_s_stbl.         " 刷新

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: o_event_receiver    TYPE REF TO lcl_event_receiver.

DATA: ok_code TYPE sy-ucomm.
DATA: save_ok TYPE sy-ucomm.
*--------------------------------------------------------------------*
PARAMETERS :p_gjahr TYPE gjahr OBLIGATORY DEFAULT sy-datum+0(4).

DATA gs_cellcolor TYPE lvc_s_scol . " 单元格颜色结构
DATA gt_cellcolor TYPE lvc_t_scol.
DEFINE set_color.
  gs_cellcolor-fname = &1.
  gs_cellcolor-color-col = '3'.
  gs_cellcolor-color-int = '1'.
  gs_cellcolor-color-inv = '0'.
  APPEND gs_cellcolor TO gt_cellcolor.
END-OF-DEFINITION.
DEFINE set_color1.
  gs_cellcolor-fname = &1.
  gs_cellcolor-color-col = '2'.
  gs_cellcolor-color-int = '1'.
  gs_cellcolor-color-inv = '0'.
  APPEND gs_cellcolor TO gt_cellcolor.
END-OF-DEFINITION.
DEFINE set_color2.
  gs_cellcolor-fname = &1.
  gs_cellcolor-color-col = '4'.
  gs_cellcolor-color-int = '1'.
  gs_cellcolor-color-inv = '0'.
  APPEND gs_cellcolor TO gt_cellcolor.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*&  包含                ZFID044_C01
*&---------------------------------------------------------------------*
*****************************定义类
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
            e_object e_interactive,

      handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.

ENDCLASS.

CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_toolbar.
    PERFORM set_toolbar CHANGING e_object." e_interactive.
  ENDMETHOD.

  METHOD handle_user_command.
    PERFORM handle_user_command_alv USING  e_ucomm.
  ENDMETHOD.


ENDCLASS.               "lcl_event_receiver

START-OF-SELECTION.
  PERFORM sel_data.
*  PERFORM dis_data.
*&---------------------------------------------------------------------*
*&      Form  SEL_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sel_data .
  date_from = p_gjahr && '0101'.
  date_to = p_gjahr && '1231'.

  SELECT * FROM ztfi0425 INTO TABLE gt_ztfi0425
    WHERE datum >= date_from
  AND datum <= date_to.
  SORT gt_ztfi0425 BY datum.

  CALL FUNCTION 'DAY_ATTRIBUTES_GET'
    EXPORTING
      factory_calendar           = ' '              "工厂日历ID
      holiday_calendar           = ' '              "假期日历ID
      date_from                  = date_from       "开始日期
      date_to                    = date_to      "截止日期
      language                   = sy-langu         "系统当前语言
      non_iso                    = ' '
*    IMPORTING
*     year_of_valid_from         = year_of_valid_from
*     year_of_valid_to           = year_of_valid_to
*     returncode                 = return_code
    TABLES
      day_attributes             = gt_attributes "返回日期每日属性
    EXCEPTIONS
      factory_calendar_not_found = 1
      holiday_calendar_not_found = 2
      date_has_invalid_format    = 3
      date_inconsistency         = 4
      OTHERS                     = 5.

  DATA:lv_zsfjj TYPE char1.
  LOOP AT gt_attributes INTO gs_attributes.
    IF gs_attributes-date = date_from.
      gs_alv-ms = date_from+0(6).
    ELSE.
      IF gs_attributes-weekday = '1'.
        IF gs_alv-ms IS INITIAL.
          gs_alv-ms = gs_attributes-date+0(6).
        ENDIF.
      ENDIF.
    ENDIF.

    IF gt_ztfi0425[] IS NOT INITIAL.
      CLEAR:lv_zsfjj.
      READ TABLE gt_ztfi0425 INTO gs_ztfi0425 WITH KEY datum =  gs_attributes-date BINARY SEARCH.
      IF gs_ztfi0425-sfjjr = 'X'.
        lv_zsfjj = 'X'.
      ENDIF.

      CASE gs_attributes-date+4(2).
        WHEN '01' OR '03' OR '05' OR '07' OR '09' OR '11'.
          IF gs_attributes-weekday = '1'.
            gs_alv-z1 = gs_attributes-date+6(2).
            gs_alv-d1 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z1'.
            ELSE.
              set_color1 'Z1'.
            ENDIF.

            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '2'.
            gs_alv-z2 = gs_attributes-date+6(2).
            gs_alv-d2 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z2'.
            ELSE.
              set_color1 'Z2'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '3'.
            gs_alv-z3 = gs_attributes-date+6(2).
            gs_alv-d3 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z3'.
            ELSE.
              set_color1 'Z3'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '4'.
            gs_alv-z4 = gs_attributes-date+6(2).
            gs_alv-d4 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z4'.
            ELSE.
              set_color1 'Z4'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '5'.
            gs_alv-z5 = gs_attributes-date+6(2).
            gs_alv-d5 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z5'.
            ELSE.
              set_color1 'Z5'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '6'.
            gs_alv-z6 = gs_attributes-date+6(2).
            gs_alv-d6 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z6'.
            ELSE.
              set_color1 'Z6'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '7'.
            gs_alv-z7 = gs_attributes-date+6(2).
            gs_alv-d7 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z7'.
            ELSE.
              set_color1 'Z7'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.

            APPEND gs_alv TO gt_alv.
            CLEAR:gs_alv.
            CLEAR:gt_cellcolor[].
          ENDIF.
        WHEN '02' OR '04' OR '06' OR '08' OR '10' OR '12'.
          IF gs_attributes-weekday = '1'.
            gs_alv-z1 = gs_attributes-date+6(2).
            gs_alv-d1 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z1'.
            ELSE.
              set_color2 'Z1'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '2'.
            gs_alv-z2 = gs_attributes-date+6(2).
            gs_alv-d2 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z2'.
            ELSE.
              set_color2 'Z2'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '3'.
            gs_alv-z3 = gs_attributes-date+6(2).
            gs_alv-d3 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z3'.
            ELSE.
              set_color2 'Z3'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '4'.
            gs_alv-z4 = gs_attributes-date+6(2).
            gs_alv-d4 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z4'.
            ELSE.
              set_color2 'Z4'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '5'.
            gs_alv-z5 = gs_attributes-date+6(2).
            gs_alv-d5 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z5'.
            ELSE.
              set_color2 'Z5'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '6'.
            gs_alv-z6 = gs_attributes-date+6(2).
            gs_alv-d6 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z6'.
            ELSE.
              set_color2 'Z6'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '7'.
            gs_alv-z7 = gs_attributes-date+6(2).
            gs_alv-d7 = gs_attributes-date.
            IF lv_zsfjj = 'X'.
              set_color 'Z7'.
            ELSE.
              set_color2 'Z7'.
            ENDIF.
            gs_alv-cellcolor = gt_cellcolor.

            APPEND gs_alv TO gt_alv.
            CLEAR:gs_alv.
            CLEAR:gt_cellcolor[].
          ENDIF.
        WHEN OTHERS.
      ENDCASE.

    ELSE.
      CASE gs_attributes-date+4(2).
        WHEN '01' OR '03' OR '05' OR '07' OR '09' OR '11'.
          IF gs_attributes-weekday = '1'.
            gs_alv-z1 = gs_attributes-date+6(2).
            gs_alv-d1 = gs_attributes-date.
            set_color1 'Z1'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '2'.
            gs_alv-z2 = gs_attributes-date+6(2).
            gs_alv-d2 = gs_attributes-date.
            set_color1 'Z2'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '3'.
            gs_alv-z3 = gs_attributes-date+6(2).
            gs_alv-d3 = gs_attributes-date.
            set_color1 'Z3'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '4'.
            gs_alv-z4 = gs_attributes-date+6(2).
            gs_alv-d4 = gs_attributes-date.
            set_color1 'Z4'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '5'.
            gs_alv-z5 = gs_attributes-date+6(2).
            gs_alv-d5 = gs_attributes-date.
            set_color1 'Z5'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '6'.
            gs_alv-z6 = gs_attributes-date+6(2).
            gs_alv-d6 = gs_attributes-date.
            set_color 'Z6'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '7'.
            gs_alv-z7 = gs_attributes-date+6(2).
            gs_alv-d7 = gs_attributes-date.
            set_color 'Z7'.
            gs_alv-cellcolor = gt_cellcolor.

            APPEND gs_alv TO gt_alv.
            CLEAR:gs_alv.
            CLEAR:gt_cellcolor[].
          ENDIF.
        WHEN '02' OR '04' OR '06' OR '08' OR '10' OR '12'.
          IF gs_attributes-weekday = '1'.
            gs_alv-z1 = gs_attributes-date+6(2).
            gs_alv-d1 = gs_attributes-date.
            set_color2 'Z1'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '2'.
            gs_alv-z2 = gs_attributes-date+6(2).
            gs_alv-d2 = gs_attributes-date.
            set_color2 'Z2'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '3'.
            gs_alv-z3 = gs_attributes-date+6(2).
            gs_alv-d3 = gs_attributes-date.
            set_color2 'Z3'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '4'.
            gs_alv-z4 = gs_attributes-date+6(2).
            gs_alv-d4 = gs_attributes-date.
            set_color2 'Z4'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '5'.
            gs_alv-z5 = gs_attributes-date+6(2).
            gs_alv-d5 = gs_attributes-date.
            set_color2 'Z5'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '6'.
            gs_alv-z6 = gs_attributes-date+6(2).
            gs_alv-d6 = gs_attributes-date.
            set_color 'Z6'.
            gs_alv-cellcolor = gt_cellcolor.
          ELSEIF gs_attributes-weekday = '7'.
            gs_alv-z7 = gs_attributes-date+6(2).
            gs_alv-d7 = gs_attributes-date.
            set_color 'Z7'.
            gs_alv-cellcolor = gt_cellcolor.

            APPEND gs_alv TO gt_alv.
            CLEAR:gs_alv.
            CLEAR:gt_cellcolor[].
          ENDIF.
        WHEN OTHERS.
      ENDCASE.

    ENDIF.
    IF gs_attributes-date = date_to AND gs_attributes-weekday NE 7.
      APPEND gs_alv TO gt_alv.
      CLEAR:gs_alv.
      CLEAR:gt_cellcolor[].
    ENDIF.
  ENDLOOP.
  IF gt_ztfi0425[] IS INITIAL.
    LOOP AT gt_attributes INTO gs_attributes.
      gs_ztfi0425-datum = gs_attributes-date.
      IF gs_attributes-weekday = '6' OR gs_attributes-weekday = '7'.
        gs_ztfi0425-sfjjr = 'X'.
      ENDIF.
      APPEND gs_ztfi0425 TO gt_ztfi0425.
      CLEAR:gs_ztfi0425.
    ENDLOOP.
  ENDIF.
  LOOP AT gt_alv INTO gs_alv.
    id = id + 1.
    gs_alv-id = id.
    MODIFY gt_alv FROM gs_alv.
  ENDLOOP.
  CALL SCREEN 100.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '100'.
  SET TITLEBAR '100'.
  PERFORM frm_alv.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv .
  IF go_custom_container IS INITIAL.
    CREATE OBJECT go_custom_container
      EXPORTING
        container_name = 'CON1'.

    CREATE OBJECT go_grid
      EXPORTING
        i_parent = go_custom_container.

    PERFORM  prepare_field_catalog.

    PERFORM  prepare_layout CHANGING gs_layout .

    PERFORM frm_alv_display.

    CREATE OBJECT o_event_receiver."创造事件对象


*  注册附件上传alv事件
    SET HANDLER o_event_receiver->handle_toolbar FOR go_grid.
    SET HANDLER o_event_receiver->handle_user_command FOR go_grid.
*    SET HANDLER o_event_receiver->handle_hotspot_click FOR go_grid .
    CALL METHOD go_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    CALL METHOD go_grid->set_toolbar_interactive.
  ENDIF.

  go_grid->refresh_table_display( is_stable = gs_stable ).
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_field_catalog .
  DATA ls_fcat TYPE lvc_s_fcat .

  DATA:lt_fieldcat TYPE slis_t_fieldcat_alv.
  DATA:gs_fieldcat LIKE LINE OF lt_fieldcat.

  DEFINE add_fcat.
    CLEAR ls_fcat.
    lv_ipos = lv_ipos + 1.
    ls_fcat-col_pos   = lv_ipos.
    ls_fcat-fieldname = &1.
    ls_fcat-reptext   = &2.
    ls_fcat-outputlen = &3.
    ls_fcat-ref_field = &4.
    ls_fcat-ref_table = &5.
    ls_fcat-no_zero   = 'X'.
    ls_fcat-just      = 'L'.
    ls_fcat-edit      = ''.

    APPEND ls_fcat TO gt_fieldcat.
  END-OF-DEFINITION.

  DATA: lv_ipos TYPE i.

  add_fcat 'MS'    '描述'    '6'   ''     ''   ."   ."
  add_fcat 'Z1'    '周一'    '4'   ''     ''   ."   ."
  add_fcat 'Z2'    '周二'    '4'   ''     ''   ."   ."
  add_fcat 'Z3'    '周三'    '4'   ''     ''   ."   ."
  add_fcat 'Z4'    '周四'    '4'   ''     ''   ."   ."
  add_fcat 'Z5'    '周五'    '4'   ''     ''   ."   ."
  add_fcat 'Z6'    '周六'    '4'   ''     ''   ."   ."
  add_fcat 'Z7'    '周日'    '4'   ''     ''   ."   ."


  gs_sort-fieldname = 'MS'.
  gs_sort-up = 'X'.
  gs_sort-subtot = 'X'.

  APPEND gs_sort TO gt_sort.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  prepare_layout
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GS_LAYOUT  text
*----------------------------------------------------------------------*
FORM prepare_layout  CHANGING ps_layout TYPE lvc_s_layo.

* 布局设置
  ps_layout-zebra = 'X' .
  ps_layout-sel_mode = 'D'.
*  ps_layout-cwidth_opt = 'X'.
  ps_layout-box_fname = 'SEL'.
  ps_layout-ctab_fname = 'CELLCOLOR'.  "一定要大写

ENDFORM.                    " prepare_layout
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_display .
  DATA: lt_excluding TYPE ui_functions,
        ls_excluding LIKE LINE OF lt_excluding.

  DATA: is_variant  TYPE disvariant.

  ls_excluding = cl_gui_alv_grid=>mc_fc_check.
  APPEND ls_excluding TO lt_excluding.
  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND ls_excluding TO lt_excluding.
  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND ls_excluding TO lt_excluding.
  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND ls_excluding TO lt_excluding.

  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND ls_excluding TO lt_excluding.

  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  APPEND ls_excluding TO lt_excluding.

  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND ls_excluding TO lt_excluding.
  ls_excluding = cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND ls_excluding TO lt_excluding.


  go_grid->set_table_for_first_display(
      EXPORTING
        i_save                        = 'X'
        is_layout                     = gs_layout
        it_toolbar_excluding          = lt_excluding
      CHANGING
        it_outtab                     = gt_alv
        it_fieldcatalog               = gt_fieldcat
        it_sort                       = gt_sort

     ).

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SET_TOOLBAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_E_OBJECT  text
*----------------------------------------------------------------------*
FORM set_toolbar  CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.

  DATA: ls_toolbar TYPE stb_button.
  DATA: lt_toolbar TYPE TABLE OF stb_button.
  DATA: ls_icon TYPE icon.

*  CLEAR prf_object->mt_toolbar[].

  CLEAR  ls_toolbar.
  MOVE   'ZJR'            TO   ls_toolbar-function.
  MOVE   '节假日'           TO   ls_toolbar-quickinfo.
*  MOVE   icon_insert_row  TO   ls_toolbar-icon.
  MOVE   '节假日'           TO   ls_toolbar-text.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 23.

  CLEAR  ls_toolbar.
  MOVE   'ZGZ'            TO   ls_toolbar-function.
  MOVE   '工作日'           TO   ls_toolbar-quickinfo.
*  MOVE   icon_delete_row  TO   ls_toolbar-icon.
  MOVE   '工作日'           TO   ls_toolbar-text.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 24.

  CLEAR  ls_toolbar.
  MOVE   'ZBC'            TO   ls_toolbar-function.
  MOVE   '保存'           TO   ls_toolbar-quickinfo.
*  MOVE   icon_delete_row  TO   ls_toolbar-icon.
  MOVE   '保存'           TO   ls_toolbar-text.
  MOVE    ''              TO   ls_toolbar-disabled.
  INSERT ls_toolbar       INTO prf_object->mt_toolbar INDEX 25.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_user_command_alv  USING    e_ucomm.

  DATA: gt_cell TYPE lvc_t_cell.
  DATA: gs_cell TYPE lvc_s_cell.

  DATA: lt_rowid TYPE lvc_t_row,
        lw_rowid TYPE lvc_s_row,
        lt_row   TYPE lvc_t_roid.

  DATA: gt_columns TYPE lvc_t_col,
        gs_columns TYPE lvc_s_col.


  DATA: lv_col(10) TYPE i.
  DATA: lv_index(10) TYPE i.
  DATA: lv_datum TYPE datum.
  DATA: lv_lines TYPE i.

  CASE e_ucomm.

    WHEN 'ZJR'.
      go_grid->get_selected_cells(  IMPORTING et_cell = gt_cell ).

      IF gt_cell[] IS INITIAL.

        CALL METHOD go_grid->get_selected_rows(
          IMPORTING
            et_index_rows = lt_rowid
            et_row_no     = lt_row ).

        IF lt_rowid[] IS NOT INITIAL.
          LOOP AT lt_rowid INTO lw_rowid.
            gs_cell-row_id-index = lw_rowid-index.
            gs_cell-col_id = 'Z1'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z2'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z3'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z4'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z5'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z6'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z7'.APPEND gs_cell TO gt_cell.
            CLEAR:lw_rowid.
          ENDLOOP.

        ELSE.
          go_grid->get_selected_columns(  IMPORTING et_index_columns = gt_columns ).
          CLEAR:lv_lines.
          lv_lines = lines( gt_alv ).

          LOOP AT gt_columns INTO gs_columns.
            CLEAR:lv_index.
            lv_index = 1.
            gs_cell-col_id = gs_columns-fieldname.
            DO lv_lines TIMES.
              gs_cell-row_id-index = lv_index.
              lv_index = lv_index + 1.
              APPEND gs_cell TO gt_cell.
            ENDDO.
            CLEAR:gs_columns.
          ENDLOOP.

        ENDIF.

      ENDIF.


      LOOP AT gt_cell INTO gs_cell.
        CLEAR:lv_datum.
        READ TABLE gt_alv INTO gs_alv INDEX gs_cell-row_id.
        IF gs_cell-col_id = 'Z1'.

          lv_datum = gs_alv-d1.

        ELSEIF gs_cell-col_id = 'Z2'.

          lv_datum = gs_alv-d2.

        ELSEIF gs_cell-col_id = 'Z3'.

          lv_datum = gs_alv-d3.

        ELSEIF gs_cell-col_id = 'Z4'.

          lv_datum = gs_alv-d4.

        ELSEIF gs_cell-col_id = 'Z5'.

          lv_datum = gs_alv-d5.

        ELSEIF gs_cell-col_id = 'Z6'.

          lv_datum = gs_alv-d6.

        ELSEIF gs_cell-col_id = 'Z7'.

          lv_datum = gs_alv-d7.

        ENDIF.

        READ TABLE gt_ztfi0425 INTO gs_ztfi0425 WITH KEY datum = lv_datum BINARY SEARCH.
        gs_ztfi0425-sfjjr = 'X'.
        MODIFY gt_ztfi0425 FROM gs_ztfi0425 TRANSPORTING sfjjr WHERE datum = lv_datum.

        id = gs_cell-row_id-index.
        gt_cellcolor = gs_alv-cellcolor.
        LOOP AT gt_cellcolor INTO gs_cellcolor WHERE fname = gs_cell-col_id.
          gs_cellcolor-color-col = '3'.
          MODIFY gt_cellcolor FROM gs_cellcolor.
        ENDLOOP.

        gs_alv-cellcolor = gt_cellcolor.
        MODIFY gt_alv FROM gs_alv TRANSPORTING cellcolor WHERE id = id.

        CLEAR:gs_cell,gs_alv,gs_ztfi0425.
      ENDLOOP.

    WHEN 'ZGZ'.

      go_grid->get_selected_cells(  IMPORTING et_cell = gt_cell ).

      IF gt_cell[] IS INITIAL.

        CALL METHOD go_grid->get_selected_rows(
          IMPORTING
            et_index_rows = lt_rowid
            et_row_no     = lt_row ).

        IF lt_rowid[] IS NOT INITIAL.
          LOOP AT lt_rowid INTO lw_rowid.
            gs_cell-row_id-index = lw_rowid-index.
            gs_cell-col_id = 'Z1'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z2'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z3'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z4'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z5'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z6'.APPEND gs_cell TO gt_cell.
            gs_cell-col_id = 'Z7'.APPEND gs_cell TO gt_cell.
            CLEAR:lw_rowid.
          ENDLOOP.

        ELSE.
          go_grid->get_selected_columns(  IMPORTING et_index_columns = gt_columns ).
          CLEAR:lv_lines.
          lv_lines = lines( gt_alv ).

          LOOP AT gt_columns INTO gs_columns.
            CLEAR:lv_index.
            lv_index = 1.
            gs_cell-col_id = gs_columns-fieldname.
            DO lv_lines TIMES.
              gs_cell-row_id-index = lv_index.
              lv_index = lv_index + 1.
              APPEND gs_cell TO gt_cell.
            ENDDO.
            CLEAR:gs_columns.
          ENDLOOP.

        ENDIF.

      ENDIF.

      LOOP AT gt_cell INTO gs_cell.
        CLEAR:lv_col.
        CLEAR:lv_datum.
        READ TABLE gt_alv INTO gs_alv INDEX gs_cell-row_id.
        IF gs_cell-col_id = 'Z1'.

          lv_datum = gs_alv-d1.

        ELSEIF gs_cell-col_id = 'Z2'.

          lv_datum = gs_alv-d2.

        ELSEIF gs_cell-col_id = 'Z3'.

          lv_datum = gs_alv-d3.

        ELSEIF gs_cell-col_id = 'Z4'.

          lv_datum = gs_alv-d4.

        ELSEIF gs_cell-col_id = 'Z5'.

          lv_datum = gs_alv-d5.

        ELSEIF gs_cell-col_id = 'Z6'.

          lv_datum = gs_alv-d6.

        ELSEIF gs_cell-col_id = 'Z7'.

          lv_datum = gs_alv-d7.

        ENDIF.

        READ TABLE gt_ztfi0425 INTO gs_ztfi0425 WITH KEY datum = lv_datum BINARY SEARCH.
        gs_ztfi0425-sfjjr = ''.
        MODIFY gt_ztfi0425 FROM gs_ztfi0425 TRANSPORTING sfjjr WHERE datum = lv_datum.

        CASE lv_datum+4(2).
          WHEN '01' OR '03' OR '05' OR '07' OR '09' OR '11'.
            lv_col = '2'.
          WHEN '02' OR '04' OR '06' OR '08' OR '10' OR '12'.
            lv_col = '4'.
          WHEN OTHERS.
        ENDCASE.

        id = gs_cell-row_id-index.
        gt_cellcolor = gs_alv-cellcolor.
        LOOP AT gt_cellcolor INTO gs_cellcolor WHERE fname = gs_cell-col_id.
          gs_cellcolor-color-col = lv_col.
          MODIFY gt_cellcolor FROM gs_cellcolor.
        ENDLOOP.

        gs_alv-cellcolor = gt_cellcolor.
        MODIFY gt_alv FROM gs_alv TRANSPORTING cellcolor WHERE id = id.

        CLEAR:gs_cell,gs_alv,gs_ztfi0425.
      ENDLOOP.
    WHEN 'ZBC'.

      MODIFY ztfi0425 FROM TABLE gt_ztfi0425.

      IF sy-subrc = 0.
        COMMIT WORK.
        MESSAGE '保存成功' TYPE 'S'.
      ELSE.
        ROLLBACK WORK.
        MESSAGE '保存失败' TYPE 'E'.
      ENDIF.

  ENDCASE.

  gs_stable-row = 'X'.
  go_grid->refresh_table_display( is_stable = gs_stable ).

ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR: ok_code.

  CASE save_ok.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  EXIT_COMMAND  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit_command INPUT.
  save_ok = ok_code.
  CLEAR: ok_code.

  CASE save_ok.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值