REPORT zeta_navozy.

TABLES: zeta_navozy, zetaf4_mvgr3_st.

*-----------------------------------------------------------------*
*       CLASS lcl_event_receiver DEFINITION
*-----------------------------------------------------------------*
*       Definice td                                                  *
*-----------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS
      handle_data_changed
                    FOR EVENT data_changed OF cl_gui_alv_grid
        IMPORTING er_data_changed.

    CLASS-METHODS
      handle_double_click
                    FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING e_row
                    e_column .

    METHODS:
      top_of_page FOR EVENT top_of_page              "event handler
                    OF cl_gui_alv_grid
        IMPORTING e_dyndoc_id.

ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION

TYPES : BEGIN OF ty_itab.                " struktura vstupn tabulky
        INCLUDE STRUCTURE zeta_navozy_str.
TYPES:  cellstyles TYPE lvc_t_styl,
        END OF ty_itab.

DATA: BEGIN OF it_t024 OCCURS 0,    " nkupce
        ekgrp LIKE t024-ekgrp,
        eknam LIKE t024-eknam,
      END OF it_t024,

      BEGIN OF it_kontej OCCURS 0,  " doprava
        domvalue_l TYPE char2,
        ddtext     TYPE char20,
      END OF it_kontej.

DATA: wa_itab   TYPE ty_itab,
      wa_t024   LIKE it_t024,

      itab      LIKE TABLE OF wa_itab,
      itab_orig LIKE TABLE OF wa_itab,
      lt_itab   LIKE zeta_navozy OCCURS 0 WITH HEADER LINE.

DATA: i_cond  LIKE rfc_db_opt OCCURS 0 WITH HEADER LINE,
      wa_cond TYPE string.

DATA: lt_dropdown TYPE lvc_t_drop,
      ls_dropdown TYPE lvc_s_drop.

DATA: o_container TYPE REF TO cl_gui_custom_container,
      o_grid      TYPE REF TO cl_gui_alv_grid,
      ok_code     LIKE sy-ucomm.

DATA: dg_dyndoc_id   TYPE REF TO cl_dd_document,
      dg_splitter    TYPE REF TO cl_gui_splitter_container,
      dg_parent_grid TYPE REF TO cl_gui_container,
      dg_html_cntrl  TYPE REF TO cl_gui_html_viewer,
      dg_parent_html TYPE REF TO cl_gui_container,
      g_handler      TYPE REF TO lcl_event_receiver. "handler

DATA: w_variant   TYPE disvariant,
      w_layout    TYPE lvc_s_layo,
      tb_exclude  TYPE ui_functions,
      ws_fieldcat TYPE lvc_t_fcat,
      ws_field    LIKE LINE OF ws_fieldcat,
      is_stable   TYPE lvc_s_stbl.

DATA: ls_edit TYPE lvc_s_styl,
      lt_edit TYPE lvc_t_styl.

DATA: lv_edit   TYPE char1 VALUE ''.

FIELD-SYMBOLS: <ls_table_structure> TYPE STANDARD TABLE,
               <wa>,
               <field>.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-h01.
SELECT-OPTIONS: s_weeks  FOR zeta_navozy-weeks,
                s_datum  FOR zeta_navozy-datum,
                s_typ    FOR zeta_navozy-zzdopr     NO INTERVALS,
                s_ekgrp  FOR zetaf4_mvgr3_st-mvgr3  NO INTERVALS,
                s_ebeln  FOR zeta_navozy-ebeln,
                s_kontej FOR zeta_navozy-kontejner  NO INTERVALS.
SELECTION-SCREEN END OF BLOCK b1.

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  " Zmna dat
  METHOD handle_data_changed.
    ASSIGN er_data_changed->mp_mod_rows->* TO <ls_table_structure>.

    DATA: ls_good   TYPE lvc_s_modi,
          ls_dele   TYPE lvc_s_moce,
          lv_week   TYPE scal-week,
          lv_datum  LIKE sy-datum,
          lv_date   TYPE scal-date,
          lv_answer TYPE flag.

    CLEAR: lv_week, lv_date, lv_answer.

    "------------------------------------------------------------------------
    "------------------------------------------------------------------------
    " mazn
    LOOP AT er_data_changed->mt_deleted_rows INTO ls_dele.
      " pokud jsi v databazi mazu te i z tama
      READ TABLE itab INTO wa_itab INDEX ls_dele-row_id.

      IF wa_itab-znavoz IS NOT INITIAL.
        IF sy-uname EQ wa_itab-ernam OR wa_itab-ernam IS INITIAL.

          IF lv_answer IS INITIAL.
            CALL FUNCTION 'POPUP_TO_CONFIRM'
              EXPORTING
                titlebar       = text-tm1
                text_question  = text-tm1
                text_button_1  = 'Ano'(101)
                text_button_2  = 'Ne'(102)
                default_button = '1'
              IMPORTING
                answer         = lv_answer
              EXCEPTIONS
                text_not_found = 1
                OTHERS         = 2.
          ENDIF.

          IF lv_answer EQ '1'.
            CLEAR: wa_itab.
            READ TABLE itab INTO wa_itab INDEX ls_dele-row_id.
            DELETE FROM zeta_navozy WHERE znavoz = wa_itab-znavoz.

          ELSE.
            READ TABLE itab INTO wa_itab INDEX ls_dele-row_id.
            APPEND wa_itab TO itab.

          ENDIF.

        ELSE.
          MESSAGE 'Nemte prv pro smazn tohoto zznamu' TYPE 'I'.
          READ TABLE itab INTO wa_itab INDEX ls_dele-row_id.
          APPEND wa_itab TO itab.
        ENDIF.
      ENDIF.
    ENDLOOP.


    "------------------------------------------------------------------------
    "------------------------------------------------------------------------
    " zmny
    LOOP AT er_data_changed->mt_mod_cells INTO ls_good.
      IF ls_good-value IS NOT INITIAL.

        CASE ls_good-fieldname. "datum
          WHEN 'DATUM'.
            READ TABLE itab INTO wa_itab INDEX ls_good-row_id.

            CLEAR: lv_datum.
            CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
              EXPORTING
                date_external            = ls_good-value
              IMPORTING
                date_internal            = lv_datum
              EXCEPTIONS
                date_external_is_invalid = 1
                OTHERS                   = 2.

            lv_date = lv_datum.
            " zjistm si tyden v roce
            CALL FUNCTION 'DATE_GET_WEEK'
              EXPORTING
                date         = lv_date
              IMPORTING
                week         = lv_week
              EXCEPTIONS
                date_invalid = 1
                OTHERS       = 2.

            MOVE: lv_date      TO wa_itab-datum,
                  lv_week+4(2) TO wa_itab-weeks.
            MODIFY itab FROM wa_itab INDEX ls_good-row_id.

            is_stable-row = 'X'.
            is_stable-col = 'X'.
            CALL METHOD o_grid->refresh_table_display
              EXPORTING
                is_stable = is_stable
              EXCEPTIONS
                finished  = 1
                OTHERS    = 2.

          WHEN 'EBELN'. " slo objednvky
            READ TABLE itab INTO wa_itab INDEX ls_good-row_id.

            SELECT SINGLE ekgrp FROM ekko INTO wa_itab-ekgrp
              WHERE ebeln EQ ls_good-value.

            IF wa_itab-ekgrp IS NOT INITIAL.
              CLEAR: wa_t024.
              READ TABLE it_t024 INTO wa_t024 WITH KEY ekgrp = wa_itab-ekgrp BINARY SEARCH.
              CONCATENATE wa_itab-ekgrp wa_t024-eknam INTO wa_itab-ekgrp SEPARATED BY ' - '.
            ENDIF.
            MODIFY itab FROM wa_itab INDEX ls_good-row_id.

            is_stable-row = 'X'.
            is_stable-col = 'X'.
            CALL METHOD o_grid->refresh_table_display
              EXPORTING
                is_stable = is_stable
              EXCEPTIONS
                finished  = 1
                OTHERS    = 2.
        ENDCASE.

      ENDIF.
    ENDLOOP.



  ENDMETHOD.

  " dvojklik
  METHOD handle_double_click.
    PERFORM get_double_click USING e_column e_row-index.
  ENDMETHOD.

  " hlavika
  METHOD top_of_page.
    PERFORM event_top_of_page USING dg_dyndoc_id.
  ENDMETHOD.

ENDCLASS.

*&---------------------------------------------------------------------*
*&      Form  GET_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_double_click USING e_column e_row.
  DATA : wa_struct TYPE ty_itab.

  IF e_column EQ 'EBELN'.
    READ TABLE itab INDEX e_row INTO wa_struct.

*    SET PARAMETER ID 'BES' FIELD wa_struct-ebeln.
*    CALL TRANSACTION 'ZETA_OBJ_NAHLED' AND SKIP FIRST SCREEN.
    CALL FUNCTION 'ZETA_FM_CALL_ORDER_READ' STARTING NEW TASK 'ETA' DESTINATION 'NONE'
      EXPORTING
        i_ebeln = wa_struct-ebeln
        i_bstyp = 'F'.

    CALL FUNCTION 'RFC_CONNECTION_CLOSE'
      EXPORTING
        destination          = 'NONE'
        taskname             = 'ETA'
      EXCEPTIONS
        destination_not_open = 1
        OTHERS               = 2.

  ENDIF.
ENDFORM.

START-OF-SELECTION.
  PERFORM get_labels .
  " dynamick sestaven podmnky
  PERFORM build_dynamic_cond.
  PERFORM get_data.
*  PERFORM set_editable_row.
  PERFORM create_object.
  PERFORM build_listbox.
  PERFORM create_fieldcat.
  PERFORM set_layout.
  PERFORM display_output.
  CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Form  GET_XLS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_data.
  REFRESH: itab.
  CLEAR: itab.

  " natu vechna data z tabulky nvoz
  REFRESH itab.
  SELECT * FROM zeta_navozy INTO CORRESPONDING FIELDS OF TABLE itab
    WHERE (i_cond).

  DELETE itab WHERE datum IS NOT INITIAL AND datum(4) NE sy-datum(4).

  LOOP AT itab INTO wa_itab.
    CLEAR: it_t024.
    READ TABLE it_t024 WITH KEY ekgrp = wa_itab-ekgrp BINARY SEARCH.
    CONCATENATE wa_itab-ekgrp it_t024-eknam INTO wa_itab-ekgrp SEPARATED BY ' - '.

    CLEAR: it_kontej.
    READ TABLE it_kontej WITH KEY domvalue_l = wa_itab-zzdopr BINARY SEARCH.
    CONCATENATE wa_itab-zzdopr it_kontej-ddtext INTO wa_itab-zzdopr SEPARATED BY ' - '.

    MODIFY itab FROM wa_itab.
  ENDLOOP.

  itab_orig[] = itab[].

  " pokud nenajdu dny zznam automaticky pechzim do editace s przdnmi dky
  IF itab[] IS INITIAL.
    lv_edit = 'X'.
    DO 15 TIMES.
      APPEND INITIAL LINE TO itab.
    ENDDO.
  ENDIF.

  SORT itab BY weeks datum uzeit kontejner.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  BUILD_DYNAMIC_COND
*&---------------------------------------------------------------------*
*       podle toho kter vstupn filtry jsou vyplnny sestavim select
*----------------------------------------------------------------------*
FORM build_dynamic_cond .
  REFRESH: i_cond.
  CLEAR: i_cond.

  " pokud je vyplnn pouze tden musm se ptt na tden aktulnho roku
  IF s_weeks[] IS NOT INITIAL AND s_datum[] IS INITIAL.
    s_datum-sign = 'I'.
    s_datum-option = 'BT'.
    CONCATENATE sy-datum(4) '0101' INTO s_datum-low.
    CONCATENATE sy-datum(4) '1231' INTO s_datum-high.
    APPEND s_datum.
  ENDIF.

  PERFORM f_dyn_range_bld: TABLES s_weeks[]  USING 'weeks'     'IN' 's_weeks',
                           TABLES s_typ[]    USING 'zzdopr'    'IN' 's_typ',
                           TABLES s_ekgrp[]  USING 'ekgrp'     'IN' 's_ekgrp',
                           TABLES s_ebeln[]  USING 'ebeln'     'IN' 's_ebeln',
                           TABLES s_kontej[] USING 'kontejner' 'IN' 's_kontej'.

  IF i_cond[] IS INITIAL.
    PERFORM f_dyn_range_bld: TABLES s_datum[]  USING 'datum'     'IN' 's_datum'.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  f_dyn_range_bld
*&---------------------------------------------------------------------*
*       text:Build Dynamic range table
*----------------------------------------------------------------------*
FORM f_dyn_range_bld TABLES lt_input STRUCTURE bapi_rangesvtweg
                     USING  i_tab_field
                            i_operator
                            i_input.

  CLEAR: wa_cond.
  IF lt_input[] IS NOT INITIAL.
    IF i_cond[] IS NOT INITIAL.
      CONCATENATE 'AND' i_tab_field i_operator i_input INTO wa_cond SEPARATED BY space.
    ELSE.
      CONCATENATE i_tab_field i_operator i_input INTO wa_cond SEPARATED BY space.
    ENDIF.

    i_cond-text = wa_cond.
    APPEND i_cond.
    CLEAR i_cond.
  ENDIF.

ENDFORM.                    " f_dyn_range_bld

*&---------------------------------------------------------------------*
*&      Form  SET_EDITABLE_ROW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_labels .
  IF it_t024[] IS INITIAL.
    SELECT ekgrp eknam FROM t024 INTO CORRESPONDING FIELDS OF TABLE it_t024
      WHERE ekgrp LIKE '7%'.
  ENDIF.

  IF it_kontej[] IS INITIAL.
    SELECT ddtext domvalue_l FROM dd07t INTO CORRESPONDING FIELDS OF TABLE it_kontej
      WHERE domname EQ 'ZETA_DDOPR' AND
            ddlanguage EQ 'CS'.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  BUILD_LISTBOX
*&---------------------------------------------------------------------*
*       Tvorba listboxu v ALV
*----------------------------------------------------------------------*
FORM build_listbox .
  " listbox .1 Importn manaer
  REFRESH lt_dropdown.
  ls_dropdown-handle = '1'.
  LOOP AT it_t024.
    CONCATENATE it_t024-ekgrp it_t024-eknam INTO ls_dropdown-value SEPARATED BY ' - '.
    APPEND ls_dropdown TO lt_dropdown.
  ENDLOOP.

  CALL METHOD o_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lt_dropdown.

  " listbox .2 typ dopravy
  REFRESH lt_dropdown.
  ls_dropdown-handle = '2'.
  LOOP AT it_kontej.
    CONCATENATE it_kontej-domvalue_l it_kontej-ddtext INTO ls_dropdown-value SEPARATED BY ' - '.
    APPEND ls_dropdown TO lt_dropdown.
  ENDLOOP.

  CALL METHOD o_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lt_dropdown.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  CREATE_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_object .

  CREATE OBJECT o_container
    EXPORTING
      container_name = 'CONTAINER'.

*  CREATE OBJECT o_grid
*    EXPORTING
*      i_parent = o_container.

  CREATE OBJECT dg_dyndoc_id
    EXPORTING
      style = 'ALV_GRID'.

* Create Splitter for custom_container
  CREATE OBJECT dg_splitter
    EXPORTING
      parent  = o_container
      rows    = 2
      columns = 1.

  CALL METHOD dg_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = dg_parent_html.

  CALL METHOD dg_splitter->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = dg_parent_grid.

  CALL METHOD dg_splitter->set_row_height
    EXPORTING
      id     = 1
      height = 17.

  CREATE OBJECT o_grid
    EXPORTING
      i_parent = dg_parent_grid.

  SET HANDLER: lcl_event_receiver=>handle_data_changed FOR o_grid,
               lcl_event_receiver=>handle_double_click FOR o_grid.

  CREATE OBJECT g_handler.
  SET HANDLER g_handler->top_of_page FOR o_grid.

  CALL METHOD o_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_fieldcat .
  CLEAR: ws_field, ws_fieldcat.
  PERFORM alv_append_wsfield USING:
***   col_pos fieldname        coltext  inttype decimals decimals_o outputlen fix emphasize
   1    'DATUM'          text-p01 'D'     2        2          13       'X'  'C150'  ''  'X' '',
   2    'UZEIT'          text-p02 'T'     2        2          13        ''  'C150'  ''  'X' '',
   3    'WEEKS'          text-p03 'C'     2        2           8        ''  'C150'  ''  'X' '',
   4    'EBELN'          text-p04 'C'     2        2          15        ''  'C150'  'X' 'X' '',
   5    'EKGRP'          text-p05 'C'     2        2          23        ''  'C150'  'X' ''  1,
   6    'ZZDOPR'         text-p06 'C'     2        2          20        ''  'C150'  'X' ''  2,
   7    'SPZ'            text-p07 'C'     2        2          20        ''  'C150'  'X' 'X' '',
   8    'KONTEJNER'      text-p08 'C'     2        2          30        ''  'C150'  'X' 'X' '',
   9    'DAT_PRISTAV'    text-p09 'D'     2        2          20        ''  'C150'  'X' 'X' '',
  10    'DAT_ROZVOZ'     text-p10 'D'     2        2          20        ''  'C150'  ''  'X' '',
  11    'NOTE'           text-p11 'C'     0        0          20        ''  'C150'  'X' 'X' ''.


ENDFORM.

*---------------------------------------------------------------------*
*       FORM append_wsfield                                           *
*---------------------------------------------------------------------*
FORM alv_append_wsfield USING col_pos fieldname coltext inttype decimals decimals_o outputlen fix emphasize do_sum ref_field drdn_hndl.
***col_pos fieldname        coltext  inttype decimals decimals_o outputlen fix emphasize
  ws_field-col_pos    = col_pos.
  ws_field-fieldname  = fieldname.
  ws_field-seltext    = coltext.
  ws_field-coltext    = coltext.
  ws_field-inttype    = inttype.
  ws_field-decimals   = decimals.
  ws_field-decimals_o = decimals_o.
  ws_field-outputlen  = outputlen.
  ws_field-emphasize  = emphasize.
  ws_field-fix_column = fix.
  ws_field-do_sum     = do_sum.
  ws_field-lowercase  = 'X'.
  IF ref_field EQ 'X'.
    ws_field-ref_table = 'ZETA_NAVOZY'.
    ws_field-ref_field = fieldname.
  ELSE.
    ws_field-ref_table = ''.
    ws_field-ref_field = ''.
  ENDIF.
  ws_field-drdn_hndl = drdn_hndl.
  ws_field-edit = lv_edit.
  APPEND ws_field TO ws_fieldcat .

ENDFORM.                    "APPEND_WSFIELD

*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_layout .
  w_variant-report    = sy-repid.
  w_layout-stylefname = 'CELLSTYLES'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM display_output .



  PERFORM build_exclude_toolbar_table.



  CALL METHOD o_grid->set_table_for_first_display
    EXPORTING
      is_variant                    = w_variant
      i_save                        = 'A'
      is_layout                     = w_layout
      it_toolbar_excluding          = tb_exclude
    CHANGING
      it_outtab                     = itab
      it_fieldcatalog               = ws_fieldcat
    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.

  " vytvoen zhlav
  CALL METHOD dg_dyndoc_id->initialize_document.

  CALL METHOD o_grid->list_processing_events
    EXPORTING
      i_event_name = 'TOP_OF_PAGE'
      i_dyndoc_id  = dg_dyndoc_id.

  CALL METHOD o_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  EVENT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       Hlavika
*----------------------------------------------------------------------*
FORM event_top_of_page USING   dg_dyndoc_id TYPE REF TO cl_dd_document.
  DATA: dl_text(255) TYPE c.  "Text

* Populating header to top-of-page
  CALL METHOD dg_dyndoc_id->add_text
    EXPORTING
      text      = 'ETA - Pehled nvoz importnho zbo'
      sap_style = cl_dd_area=>heading.
* Add new-line
  CALL METHOD dg_dyndoc_id->new_line.

  CLEAR : dl_text.
  dl_text = '1.kont. 7:00'.
  PERFORM add_text USING dl_text.
  CALL METHOD dg_dyndoc_id->new_line.

  CLEAR : dl_text.
  dl_text = '2.kont. 9:00'.
  PERFORM add_text USING dl_text.
  CALL METHOD dg_dyndoc_id->new_line.

  CLEAR : dl_text.
  dl_text = '3.kont. 11:00'.
  PERFORM add_text USING dl_text.
  CALL METHOD dg_dyndoc_id->new_line.

  CLEAR : dl_text.
  dl_text = '4.kont. 12:00'.
  PERFORM add_text USING dl_text.
  CALL METHOD dg_dyndoc_id->new_line.

  CLEAR : dl_text.
  dl_text = '5.kont. 13:00'.
  PERFORM add_text USING dl_text.
  CALL METHOD dg_dyndoc_id->new_line.

  PERFORM html.
ENDFORM.                    " EVENT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  ADD_TEXT
*&---------------------------------------------------------------------*
*       Pidn textov dky do hlaviky
*----------------------------------------------------------------------*
FORM add_text USING p_text TYPE sdydo_text_element.
  CALL METHOD dg_dyndoc_id->add_text
    EXPORTING
      text         = p_text
      sap_emphasis = cl_dd_area=>heading.
ENDFORM.                    " ADD_TEXT
*&---------------------------------------------------------------------*
*&      Form  HTML
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM html.
  DATA : dl_length        TYPE i,                           " Length
         dl_background_id TYPE sdydo_key VALUE space. " Background_id
* Creating html control
  IF dg_html_cntrl IS INITIAL.
    CREATE OBJECT dg_html_cntrl
      EXPORTING
        parent = dg_parent_html.
  ENDIF.
* Reuse_alv_grid_commentary_set
  CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
    EXPORTING
      document = dg_dyndoc_id
      bottom   = space
    IMPORTING
      length   = dl_length.
* Get TOP->HTML_TABLE ready
  CALL METHOD dg_dyndoc_id->merge_document.
* Set wallpaper
  CALL METHOD dg_dyndoc_id->set_document_background
    EXPORTING
      picture_id = dl_background_id.
* Connect TOP document to HTML-Control
  dg_dyndoc_id->html_control = dg_html_cntrl.
* Display TOP document
  CALL METHOD dg_dyndoc_id->display_document
    EXPORTING
      reuse_control      = 'X'
      parent             = dg_parent_html
    EXCEPTIONS
      html_display_error = 1.
  IF sy-subrc NE 0.
*    MESSAGE I999 WITH 'Error in displaying top-of-page'(036).
  ENDIF.
ENDFORM.                    " HTML
*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  IF lv_edit EQ ''.
    SET PF-STATUS '9001' EXCLUDING 'SAVE'.
  ELSE.
    SET PF-STATUS '9001'.
  ENDIF.


  SET TITLEBAR '9000'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.

  ok_code = sy-ucomm.
  CASE ok_code.
    WHEN 'EXIT'.
      LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.

    WHEN 'EDIT'.
      PERFORM edit_view.

    WHEN 'SAVE'.
      CALL METHOD o_grid->check_changed_data.

      REFRESH: lt_itab.
      LOOP AT itab INTO wa_itab.
        CLEAR: lt_itab.

        IF wa_itab IS NOT INITIAL.
          IF wa_itab-znavoz IS INITIAL.
            wa_itab-ernam = sy-uname.

            CALL FUNCTION 'NUMBER_GET_NEXT'
              EXPORTING
                nr_range_nr = '01'
                object      = 'ZNAVOZ'
              IMPORTING
                number      = wa_itab-znavoz.
          ENDIF.

*          MOVE-CORRESPONDING wa_itab TO lt_itab.
          PERFORM move_struct USING wa_itab
                           CHANGING lt_itab.
          APPEND lt_itab.
        ENDIF.
      ENDLOOP.

      MODIFY zeta_navozy FROM TABLE lt_itab.
      MESSAGE 'Data byla spn uloena !' TYPE 'I'.
      SUBMIT zeta_navozy VIA SELECTION-SCREEN.
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  EDIT_VIEW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM edit_view .
  IF lv_edit EQ ''.
    CALL FUNCTION 'ENQUEUE_EZNAVOZY'
      EXCEPTIONS
        foreign_lock   = 1
        system_failure = 2
        OTHERS         = 3.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              INTO DATA(mtext)
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

      MESSAGE mtext TYPE 'I'.

    ELSE.
      lv_edit = 'X'.
    ENDIF.

  ELSE.
    CALL FUNCTION 'DEQUEUE_EZNAVOZY'
      EXCEPTIONS
        foreign_lock   = 1
        system_failure = 2
        OTHERS         = 3.

    lv_edit = ''.
  ENDIF.

  PERFORM create_fieldcat.
  PERFORM display_output.


ENDFORM.
*---------------------------------------------------------------------*
*      Form  build_exclude_toolbar_table
*---------------------------------------------------------------------*
*       delete menu buttons
*----------------------------------------------------------------------*
FORM build_exclude_toolbar_table .
  REFRESH tb_exclude.
  CLEAR: tb_exclude.

  IF lv_edit NE 'X'.
    APPEND cl_gui_alv_grid=>mc_fc_loc_append_row
       TO tb_exclude.
    APPEND cl_gui_alv_grid=>mc_fc_loc_append_row
       TO tb_exclude.
    APPEND cl_gui_alv_grid=>mc_fc_loc_cut
       TO tb_exclude.
    APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row
       TO tb_exclude.
    APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row
       TO tb_exclude.
    APPEND cl_gui_alv_grid=>mc_fc_refresh
       TO tb_exclude.
    APPEND cl_gui_alv_grid=>mc_fc_loc_undo
       TO tb_exclude.

    APPEND cl_gui_alv_grid=>mc_fc_loc_paste
       TO tb_exclude.

    APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row
       TO tb_exclude.
  ENDIF.

  APPEND cl_gui_alv_grid=>mc_fc_loc_copy
     TO tb_exclude.
  APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row
     TO tb_exclude.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  MOVE_STRUCT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM move_struct  USING    is_itab TYPE ty_itab
                  CHANGING es_itab LIKE zeta_navozy.

  es_itab-znavoz = is_itab-znavoz.
  es_itab-datum = is_itab-datum.
  es_itab-uzeit = is_itab-uzeit.
  es_itab-weeks = is_itab-weeks.
  es_itab-ekgrp = is_itab-ekgrp(3).
  es_itab-ernam = is_itab-ernam.
  es_itab-zzdopr = is_itab-zzdopr(2).
  es_itab-spz = is_itab-spz.
  es_itab-kontejner = is_itab-kontejner.
  es_itab-ebeln = is_itab-ebeln.
  es_itab-dat_pristav = is_itab-dat_pristav.
  es_itab-dat_rozvoz = is_itab-dat_rozvoz.
  es_itab-note = is_itab-note.

ENDFORM.
