Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *&---------------------------------------------------------------------*
- *& Report ZHR_RAP_WZOR_02
- *&
- *&---------------------------------------------------------------------*
- *& Opis:
- *& Wzorzec raportu ALV - wyswietlenie rożnic limitu nieobecnosci i zmniejszenia
- *&---------------------------------------------------------------------*
- *& Autor:
- *& Mikołaj Marcinkowski
- *&---------------------------------------------------------------------*
- *&
- *&---------------------------------------------------------------------*
- REPORT z_limit_monika.
- INFOTYPES: 0000, 0001, 0002, 0006, 2006.
- NODES: peras.
- TABLES: pernr, pa0000, pa0002, pa2006, ptquoded.
- TYPE-POOLS: slis.
- ************************************************************************
- **> Parametry selekcji
- SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
- **> Wybór układu wyświetlania ALV
- PARAMETER: p_var TYPE slis_vari.
- SELECTION-SCREEN END OF BLOCK bl1.
- ************************************************************************
- **> Deklaracje ALV
- **> Tabela z danymi do wyświetlania
- TYPES: BEGIN OF str_data_container,
- pernr LIKE pa0000-pernr, "Numer osobowy
- vorna LIKE pa0002-vorna, "Imie pracownika
- nachn LIKE pa0002-nachn, "Nazwisko pracownika
- begda LIKE pa2006-begda, "Poczatek ważności
- endda LIKE pa2006-endda, "Koniec ważności
- anzhl LIKE pa2006-anzhl, "Dostępna wartość zmniejszenia
- kverb LIKE pa2006-kverb, "Wielkosc zmniejszenia
- quosu LIKE pa2006-kverb, "Wielkosc zmniejszenia w ptquoded
- kvqus LIKE pa2006-kverb,
- ktart LIKE pa2006-ktart, "Kod typu nieobecnosci
- ktext LIKE t556b-ktext, "Opis typu nieobecnosci
- quonr LIKE pa2006-quonr, "Numer limitu
- END OF str_data_container.
- **> Deklaracja tabeli na dane alv
- DATA : tab_data_container TYPE STANDARD TABLE OF str_data_container,
- wa_data_container TYPE str_data_container.
- **> Deklaracja tabeli przechowującej tymczasowe dane z pozycji zmniejszenia
- DATA : tab_ptquoded TYPE STANDARD TABLE OF ptquoded,
- wa_ptquoded LIKE LINE OF tab_ptquoded.
- **> Deklaracja tabeli przechowującej tymczasowe dane z inft2006.
- DATA : tab_2006 TYPE STANDARD TABLE OF p2006,
- wa_2006 LIKE LINE OF tab_2006.
- **> Deklaracja tabeli na dane tymczasowe
- DATA : tab_0002 TYPE STANDARD TABLE OF p0002,
- wa_0002 LIKE LINE OF tab_0002.
- **> Deklaracja tabeli do wyciągnięcia opisów nieobecnosci
- DATA : tab_t556b TYPE STANDARD TABLE OF t556b,
- wa_t556b LIKE LINE OF tab_t556b.
- **>Zmienna do naliczania pozycji nieobecnosci z ptquoted
- DATA : quode_sum TYPE p LENGTH 10 DECIMALS 5.
- **> Deklaracja obiektu tabeli ALV (Grid)
- DATA : gr_table TYPE REF TO cl_salv_table.
- **> Deklaracje dla obiektu ustawień układu(Layout Settings)
- DATA : gr_layout TYPE REF TO cl_salv_layout,
- gr_layout_key TYPE salv_s_layout_key.
- **> Deklaracja obiektu dla obsługi zdarzeń (Events handling)
- CLASS : lcl_handle_events DEFINITION DEFERRED.
- DATA : gr_events TYPE REF TO lcl_handle_events.
- ************************************************************************
- **> Deklaracje zmiennych globalnych
- DATA: gv_page_cnt TYPE i.
- DATA: gv_message(100) TYPE c.
- ************************************************************************
- **> Obsługa wczytywania wcześniej zapisanych wariantów wyświetlania
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
- DATA: ls_layout TYPE salv_s_layout,
- lt_layout_info TYPE salv_t_layout_info.
- TRY.
- cl_salv_table=>factory(
- EXPORTING list_display = if_salv_c_bool_sap=>false
- IMPORTING r_salv_table = gr_table
- CHANGING t_table = tab_data_container ).
- CATCH cx_salv_msg .
- ENDTRY.
- IF gr_table IS NOT INITIAL.
- gr_layout_key-report = sy-repid.
- gr_layout = gr_table->get_layout( ).
- gr_layout->set_key( gr_layout_key ).
- **> Pobranie wcześniej zapisanych układów raportu
- lt_layout_info = gr_layout->get_layouts( ).
- IF lt_layout_info[] IS NOT INITIAL.
- **> Aktywacja klawisza F4 dla pomocy wyszukiwania układów
- ls_layout = gr_layout->f4_layouts( ).
- IF ls_layout IS NOT INITIAL.
- MOVE ls_layout-layout TO p_var.
- ENDIF.
- ENDIF.
- ENDIF.
- ************************************************************************
- START-OF-SELECTION.
- ************************************************************************
- **> Selekcja i przetwarzanie danych
- GET peras.
- CONCATENATE 'Przetwarzanie pracownika' peras-pernr INTO gv_message SEPARATED BY space.
- CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
- EXPORTING
- percentage = 100
- text = gv_message
- EXCEPTIONS
- OTHERS = 1.
- PERFORM get_data.
- ************************************************************************
- END-OF-SELECTION.
- PERFORM prepare_report.
- PERFORM set_report_header.
- PERFORM set_report_footer.
- PERFORM adjust_columns.
- PERFORM handle_events.
- PERFORM display_report.
- **********************************************************************
- *&---------------------------------------------------------------------*
- *& Form GET_DATA
- *&---------------------------------------------------------------------*
- * Pobranie danych raportu
- *----------------------------------------------------------------------*
- FORM get_data.
- LOOP AT p2006 INTO wa_2006.
- CLEAR quode_sum.
- CLEAR tab_ptquoded[].
- CLEAR wa_ptquoded.
- **>Pobieranie danych z tabeli quode dla odpowiedniego numeru limitu nieobecnosci
- SELECT * FROM ptquoded INTO wa_ptquoded WHERE quonr = wa_2006-quonr AND pernr = wa_2006-pernr.
- APPEND wa_ptquoded TO tab_ptquoded.
- CLEAR wa_ptquoded.
- ENDSELECT.
- **>sumowanie pozycji zmniejszenia
- LOOP AT tab_ptquoded INTO wa_ptquoded.
- quode_sum = quode_sum + wa_ptquoded-quode.
- ENDLOOP.
- **>Jeśli sie nie zgadza
- IF quode_sum NE 0 AND quode_sum NE wa_2006-kverb.
- **>Wielkosc zmniejszenia w qtquoded
- wa_data_container-quosu = quode_sum.
- **>Roznica zmniejszeń w p2006 i ptquoted
- wa_data_container-kvqus = wa_2006-kverb - quode_sum.
- **>Pobranie imie i nazwisko
- LOOP AT p0002 INTO wa_0002.
- IF wa_0002-pernr = wa_2006-pernr.
- wa_data_container-vorna = wa_0002-vorna.
- wa_data_container-nachn = wa_0002-nachn.
- ENDIF.
- ENDLOOP.
- **>Pobieranie opisu typu nieobecności
- SELECT * FROM t556b INTO wa_t556b WHERE ktart = wa_2006-ktart.
- wa_data_container-ktext = wa_t556b-ktext.
- ENDSELECT.
- **>Wysłanie danych do alv
- MOVE-CORRESPONDING wa_2006 TO wa_data_container.
- APPEND wa_data_container TO tab_data_container.
- CLEAR wa_data_container.
- ENDIF.
- ENDLOOP.
- CLEAR wa_2006.
- ENDFORM. "get_data
- *&---------------------------------------------------------------------*
- *& Form PREPARE_REPORT
- *&---------------------------------------------------------------------*
- * Przygotowanie układu raportu ALV
- *----------------------------------------------------------------------*
- FORM prepare_report.
- DATA: lr_functions TYPE REF TO cl_salv_functions_list,
- lr_display TYPE REF TO cl_salv_display_settings.
- **> Utworzenie obiektu listy ALV
- TRY.
- cl_salv_table=>factory(
- EXPORTING list_display = if_salv_c_bool_sap=>false
- IMPORTING r_salv_table = gr_table
- CHANGING t_table = tab_data_container ).
- CATCH cx_salv_msg .
- ENDTRY.
- **> Ustawienie układu wyświetlania ALV (wariant)
- gr_layout_key-report = sy-repid.
- gr_layout = gr_table->get_layout( ).
- gr_layout->set_key( gr_layout_key ).
- gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
- IF p_var IS INITIAL.
- gr_layout->set_default( if_salv_c_bool_sap=>true ).
- ELSE.
- gr_layout->set_initial_layout( p_var ).
- ENDIF.
- **> Aktywacja wszystkich funkcji ALV (przycisków)
- lr_functions = gr_table->get_functions( ).
- lr_functions->set_all( if_salv_c_bool_sap=>true ).
- **> Globalne ustawienia wyświetlania ALV
- lr_display = gr_table->get_display_settings( ).
- lr_display->set_striped_pattern( cl_salv_display_settings=>true ).
- ENDFORM. "prepare_report
- *&---------------------------------------------------------------------*
- *& Form ADJUST_COLUMNS
- *&---------------------------------------------------------------------*
- * Ustawienie sposobu wyświetlania kolumn raportu
- *----------------------------------------------------------------------*
- FORM adjust_columns.
- **> Deklaracja obiektu dla kolumn ALV (Columns)
- DATA : lr_columns TYPE REF TO cl_salv_columns_table,
- lr_column TYPE REF TO cl_salv_column_table,
- lt_column_ref TYPE salv_t_column_ref,
- ls_column_ref TYPE salv_s_column_ref.
- **> Kolorowanie kolumn
- DATA : lt_colo TYPE STANDARD TABLE OF lvc_s_colo,
- ls_colo TYPE lvc_s_colo.
- **> Struktury dla kolorów kolumn
- DATA : lt_color TYPE lvc_t_scol,
- ls_color TYPE lvc_s_scol.
- DATA: color TYPE lvc_s_colo.
- IF gr_table IS NOT INITIAL.
- lr_columns = gr_table->get_columns( ).
- TRY.
- lr_column ?= lr_columns->get_column( 'PERNR' ).
- color-col = '5'.
- color-int = '1'.
- color-inv = '1'.
- lr_column->set_color( color ).
- *- Catch the Exceptions
- CATCH cx_salv_not_found. "#EC NO_HANDLER
- ENDTRY.
- TRY.
- lr_column ?= lr_columns->get_column( 'NACHN' ).
- lr_column->set_long_text( 'Nazwisko pracownika' ).
- lr_column->set_medium_text( 'Nazwisko prac.' ).
- lr_column->set_short_text( 'Nazwisko' ).
- *- Catch the Exceptions
- CATCH cx_salv_not_found. "#EC NO_HANDLER
- ENDTRY.
- TRY.
- lr_column ?= lr_columns->get_column( 'KVERB' ).
- lr_column->set_long_text( 'Wielkosc zmniejszenia w p2006' ).
- lr_column->set_medium_text( 'Zmniejszenie w p2006' ).
- lr_column->set_short_text( 'w p2006.' ).
- *- Catch the Exceptions
- CATCH cx_salv_not_found. "#EC NO_HANDLER
- ENDTRY.
- TRY.
- lr_column ?= lr_columns->get_column( 'ANZHL' ).
- lr_column->set_long_text( 'Pole zmniejszenie' ).
- lr_column->set_medium_text( 'zmniejszenie' ).
- lr_column->set_short_text( 'zmn.' ).
- *- Catch the Exceptions
- CATCH cx_salv_not_found. "#EC NO_HANDLER
- ENDTRY.
- TRY.
- lr_column ?= lr_columns->get_column( 'KVQUS' ).
- lr_column->set_long_text( 'ROZNICA KV I QU' ).
- lr_column->set_medium_text( 'Roznica' ).
- lr_column->set_short_text( 'Rozn.' ).
- *- Catch the Exceptions
- CATCH cx_salv_not_found. "#EC NO_HANDLER
- ENDTRY.
- TRY.
- lr_column ?= lr_columns->get_column( 'QUOSU' ).
- lr_column->set_long_text( 'Wielkosc/suma zmniejszenia w ptquoded' ).
- lr_column->set_medium_text( 'ptquoded' ).
- lr_column->set_short_text( 'w ptq.' ).
- *- Catch the Exceptions
- CATCH cx_salv_not_found. "#EC NO_HANDLER
- ENDTRY.
- lr_columns->set_optimize( if_salv_c_bool_sap=>true ).
- lr_columns->set_key_fixation( if_salv_c_bool_sap=>true ).
- ENDIF.
- ENDFORM. "adjust_columns
- *&---------------------------------------------------------------------*
- *& Form SET_REPORT_HEADER
- *&---------------------------------------------------------------------*
- * Nagłówek raportu
- *----------------------------------------------------------------------*
- FORM set_report_header.
- DATA : lr_grid TYPE REF TO cl_salv_form_layout_grid,
- lr_text TYPE REF TO cl_salv_form_text,
- lr_label TYPE REF TO cl_salv_form_label,
- lr_flow TYPE REF TO cl_salv_form_layout_flow,
- lr_head TYPE string.
- CREATE OBJECT lr_grid.
- lr_grid->add_row( ).
- lr_label = lr_grid->create_label( row = 1
- column = 1
- text = 'Nagłówek raportu' ).
- lr_flow = lr_grid->create_flow( row = 2 column = 1 ).
- lr_flow->create_label( text = 'Wykonał:' ).
- lr_flow = lr_grid->create_flow( row = 2 column = 2 ).
- lr_flow->create_text( text = sy-uname ).
- lr_flow = lr_grid->create_flow( row = 3 column = 1 ).
- lr_flow->create_label( text = 'Data:' ).
- lr_flow = lr_grid->create_flow( row = 3 column = 2 ).
- lr_flow->create_text( text = sy-datum ).
- gr_table->set_top_of_list( lr_grid ).
- ENDFORM. "set_report_header
- *&---------------------------------------------------------------------*
- *& Form SET_REPORT_FOOTER
- *&---------------------------------------------------------------------*
- * Stopka raportu
- *----------------------------------------------------------------------*
- FORM set_report_footer.
- DATA : lr_grid TYPE REF TO cl_salv_form_layout_grid,
- lr_text TYPE REF TO cl_salv_form_text.
- gv_page_cnt = gv_page_cnt + 1.
- CREATE OBJECT lr_grid.
- lr_grid->add_row( ).
- lr_text = lr_grid->create_text( row = 1
- column = 1
- text = 'Strona:' ).
- lr_text = lr_grid->create_text( row = 1
- column = 2
- text = gv_page_cnt ).
- **> Stopka widoczna tylko na wydruku
- gr_table->set_end_of_list_print( lr_grid ).
- ENDFORM. "set_report_footer
- *&---------------------------------------------------------------------*
- *& Form DISPLAY_REPORT
- *&---------------------------------------------------------------------*
- * Wyświetlenie raportu za pomocą tabeli ALV
- *----------------------------------------------------------------------*
- FORM display_report.
- **> Wyświetlanie tabeli
- gr_table->display( ).
- ENDFORM. "display_report
- *&---------------------------------------------------------------------*
- *& Form DISPLAY_DETAIL_FOR_FIELD
- *&---------------------------------------------------------------------*
- *
- *----------------------------------------------------------------------*
- FORM display_detail_for_field USING row column.
- IF column EQ 'PERNR'.
- READ TABLE tab_data_container INTO wa_data_container INDEX row.
- IF sy-subrc EQ 0.
- SET PARAMETER ID 'PER' FIELD wa_data_container-pernr.
- CALL TRANSACTION 'PA20' AND SKIP FIRST SCREEN.
- ENDIF.
- ENDIF.
- ENDFORM. "display_detail_for_field
- *&---------------------------------------------------------------------*
- *& CLASS lcl_handle_events DEFINITION
- *&---------------------------------------------------------------------*
- * Definicja lokalnej klasy obsługi zdarzeń ALV
- *----------------------------------------------------------------------*
- CLASS lcl_handle_events DEFINITION.
- PUBLIC SECTION.
- METHODS: on_double_click
- FOR EVENT double_click OF cl_salv_events_table
- IMPORTING row column.
- ENDCLASS. "lcl_handle_events DEFINITION
- *&---------------------------------------------------------------------*
- *& CLASS lcl_handle_events IMPLEMENTATION
- *&---------------------------------------------------------------------*
- * Implementacja lokalnej klasy obsługi zdarzeń ALV
- *----------------------------------------------------------------------*
- CLASS lcl_handle_events IMPLEMENTATION.
- METHOD on_double_click.
- PERFORM display_detail_for_field USING row column.
- ENDMETHOD. "on_double_click
- ENDCLASS. "lcl_handle_events IMPLEMENTATION
- *&---------------------------------------------------------------------*
- *& Form HANDLE_EVENTS
- *&---------------------------------------------------------------------*
- * Ustawienie obsługi zdarzeń
- *----------------------------------------------------------------------*
- FORM handle_events.
- DATA: lr_events TYPE REF TO cl_salv_events_table.
- **> Rejestracja zdarzeń
- lr_events = gr_table->get_event( ).
- CREATE OBJECT gr_events.
- SET HANDLER gr_events->on_double_click FOR lr_events.
- ENDFORM. "handle_events
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement