понедельник, 22 сентября 2014 г.

Свой фильтр к стандартной таблице ALV

Обработка нажатия кнопки

    CASE okcode.
      WHEN '&MY_ILT'.
        PERFORM my_filter.


Переменные в главной программе

DATAg_custom_container TYPE REF TO cl_gui_custom_container,
      g_alv_grid_ref TYPE REF TO cl_gui_alv_grid,
      gt_sflight TYPE sflight OCCURS 0.

  FIELD-SYMBOLS<my_fs> TYPE ANY TABLE.

  DATA:
    go_struct    TYPE REF TO cl_abap_structdescr,
    go_table     TYPE REF TO cl_abap_tabledescr,
    gt_comp         TYPE abap_compdescr_tab,
    wa_gt_comp like LINE OF gt_comp,
    gs_comp_a       LIKE LINE OF gt_comp,
    gdo_data     type ref to data,
    gr  TYPE REF TO data,
    grf4  TYPE REF TO data.



  FIELD-SYMBOLS<my_table> TYPE STANDARD TABLE.
  FIELD-SYMBOLS<fld_f4table> TYPE STANDARD TABLE.

datadyn_table    type ref to data,
*      dyn_line     type ref to data,
      wa_fcat type lvc_s_fcat,
      it_fcat type lvc_t_fcat,
      d_table    type ref to data.



Сама процедура

FORM my_filter.

  DATAls_row_id TYPE lvc_s_row.
  DATAls_col type i.
  DATAls_col_id TYPE lvc_s_col.
  DATAl_value TYPE lvc_s_data-value.
*  DATA: ls_selfield TYPE lvc_s_self.
*  DATA: ls_fieldcat TYPE slis_fieldcat_alv.
*  DATA: ls_fieldcat_lvc TYPE lvc_s_fcat.

  DATAlt_fcat_lvc TYPE lvc_t_fcat,
*        lt_sort_lvc TYPE lvc_t_sort,
*        ls_lyout_lvc TYPE lvc_s_layo,
        lt_filter_lvc TYPE lvc_t_filt,
        wa_lt_filter_lvc LIKE LINE OF lt_filter_lvc.

  DATA:
        i_retab TYPE TABLE OF  ddshretval,
        wa_retab LIKE LINE OF i_retab OCCURS WITH HEADER LINE,
        r_field TYPE  dfies-fieldname,
        r_dynprofield TYPE  help_info-dynprofld.

  FIELD-SYMBOLS:
                 <ls_wa> TYPE ANY,
                 <my_wa> TYPE ANY.


  FIELD-SYMBOLS:
                       <fs1> TYPE ANY,
                       <fs2> TYPE ANY.

**********************************************************************


  CALL METHOD gt_grid-grid->get_current_cell
    IMPORTING
      es_row_id ls_row_id
      e_col     ls_col
      es_col_id ls_col_id
      e_value   l_value.


  CALL METHOD gt_grid-grid->get_filter_criteria
    IMPORTING
      et_filter lt_filter_lvc.

*** создаем ссылку на динамическую.таблицу
  IF <my_fs> IS NOT ASSIGNED.
    ASSIGN ('T_OUTTAB[]'TO <my_fs>.
  ENDIF.


*** создаем копию динамическ.таблицы с полными данными
  IF <my_table> IS NOT ASSIGNED.
    GET REFERENCE OF <my_fs> INTO gdo_data.

    go_table  ?= cl_abap_structdescr=>describe_by_data_refgdo_data ).
    go_struct ?= go_table->get_table_line_type).
    gt_comp go_struct->components.

    CREATE DATA gr  TYPE HANDLE go_table" создаем обект-данных полученного типа
    ASSIGN gr->TO <my_table>"создаем таблицу
    <my_table>[] <my_fs>[].
  ENDIF.
**********************************************************************

  r_field ls_col_id.
  r_dynprofield ls_col_id.

clear it_fcat.
refresh it_fcat.

*  IF <fld_f4table> IS NOT ASSIGNED.
    READ TABLE gt_comp INTO wa_gt_comp WITH KEY name ls_col_id.

    wa_fcat-fieldname wa_gt_comp-name .
    wa_fcat-datatype  wa_gt_comp-type_kind.
    wa_fcat-inttype   wa_gt_comp-type_kind.
    wa_fcat-intlen    wa_gt_comp-length.
    wa_fcat-decimals  wa_gt_comp-decimals.

    APPEND wa_fcat TO it_fcat.

* Create dynamic internal table and assign to Field-Symbol
    CALL METHOD cl_alv_table_create=>create_dynamic_table
      EXPORTING
        it_fieldcatalog it_fcat
      IMPORTING
        ep_table        d_table.

    ASSIGN d_table->TO <fld_f4table>.
*  else.
*    UNASSIGN   <fld_f4table>.
*
*    READ TABLE gt_comp INTO wa_gt_comp WITH KEY name = ls_col_id.
*
*    wa_fcat-fieldname = wa_gt_comp-name .
*    wa_fcat-datatype  = wa_gt_comp-type_kind.
*    wa_fcat-inttype   = wa_gt_comp-type_kind.
*    wa_fcat-intlen    = wa_gt_comp-length.
*    wa_fcat-decimals  = wa_gt_comp-decimals.
*
*    APPEND wa_fcat TO it_fcat.
*
** Create dynamic internal table and assign to Field-Symbol
*    CALL METHOD cl_alv_table_create=>create_dynamic_table
*      EXPORTING
*        it_fieldcatalog = it_fcat
*      IMPORTING
*        ep_table        = d_table.
*
*    ASSIGN d_table->* TO <fld_f4table>.
*  ENDIF.

  REFRESH <fld_f4table>.

  ASSIGN COMPONENT r_field OF STRUCTURE <fld_f4table> TO <fs2>.
  LOOP AT <my_table> ASSIGNING <ls_wa>.
    ASSIGN COMPONENT r_field OF STRUCTURE <ls_wa> TO <fs1>.
    APPEND <fs1> TO <fld_f4table>.
  ENDLOOP.


**********************************************************************
  DATA h_field_tab LIKE dfies OCCURS WITH HEADER LINE.
  DATA h_field_wa LIKE dfies.
  DATA wa_it_fieldcat LIKE LINE OF it_fieldcat OCCURS WITH HEADER LINE.

  READ TABLE it_fieldcat INTO wa_it_fieldcat WITH KEY fieldname wa_gt_comp-name.

  h_field_wa-tabname   'LT_VALUES'.
  CONCATENATE '1~' wa_gt_comp-name INTO h_field_wa-fieldname.
  r_field h_field_wa-fieldname.
  h_field_wa-intlen    wa_gt_comp-length.                 "'000008'.
  h_field_wa-outputlen wa_gt_comp-length.                 "'000008'.
  h_field_wa-inttype   wa_gt_comp-type_kind."'N'.
  h_field_wa-LOWERCASE 'X'.
  IF wa_it_fieldcat-seltext_l IS NOT INITIAL.
    h_field_wa-reptext   wa_it_fieldcat-seltext_l.
  ELSEIF wa_it_fieldcat-seltext_m IS NOT INITIAL.
    h_field_wa-reptext   wa_it_fieldcat-seltext_m.
  ELSE.
    h_field_wa-reptext   wa_it_fieldcat-seltext_s.
  ENDIF.

  APPEND h_field_wa TO h_field_tab.
**********************************************************************

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield    =  r_field   "<---Return field column name
*      dynpprog    = sy-repid
*      dynpnr      = sy-dynnr
     dynprofield =  'RSCSEL-SLOW_I' "r_dynprofield
      value_org        'S'
      multiple_choice  'X'
    TABLES
      value_tab   <fld_f4table>
      field_tab   h_field_tab
      return_tab  i_retab.
  IF sy-subrc EQ 0.

  ENDIF.


  LOOP AT i_retab INTO wa_retab.

    wa_lt_filter_lvc-fieldname wa_gt_comp-name.
    wa_lt_filter_lvc-tabname   '1'.
    wa_lt_filter_lvc-seltext   =  h_field_wa-reptext.
    wa_lt_filter_lvc-lowercase 'X'.
    wa_lt_filter_lvc-inttype   wa_gt_comp-type_kind.
    wa_lt_filter_lvc-no_sign   'X'.
    wa_lt_filter_lvc-order     ls_col.
    wa_lt_filter_lvc-REF_FIELD wa_gt_comp-name.
    wa_lt_filter_lvc-low       wa_retab-fieldval.
    wa_lt_filter_lvc-sign      'I'.
    wa_lt_filter_lvc-option    'EQ'.
    APPEND  wa_lt_filter_lvc TO lt_filter_lvc.
    CLEAR wa_lt_filter_lvc.
  ENDLOOP.

  CALL METHOD gt_grid-grid->set_filter_criteria
    EXPORTING
      it_filter lt_filter_lvc.

    CALL METHOD gt_grid-grid->REFRESH_TABLE_DISPLAY.
ENDFORM.                    "my_filter

понедельник, 14 апреля 2014 г.

Режим отладки в модальных окнах

Иногда нужно отладить или отследить выполнение программы, для этого в поле команд необходимо написать команду /h и нажать клавишу Ввод. Но бывают случаи, когда отладчик необходимо включить во всплывающем окне. Как поступить?

понедельник, 24 марта 2014 г.

Добавление текста на экран входа в систему SAP

Если нужно на экране входа в систему (где мы вводим логин, пароль, мандант, язык) написать какое-нибудь сообщение (например, какой мандант что означает), то нужно в транзакции SE61 создать текст ZLOGIN_SCREEN_INFO для класса «Общий текст». 

среда, 12 марта 2014 г.

SAP ABAP функции для работы с датой и временем

В данной теме хочется поговорить о функциях работы с датами.
Очень часто в своих разработках мы используем данные функции п.э. далее перечислим самые популярные и полезные на мой взгляд.

среда, 22 января 2014 г.

Работа с сервисами фронтенд (frontend)

   При разработке программ в ABAP иногда требуется организовать взаимодействие с операционной системой рабочей станции пользователя. Это может быть работа с файлами, каталогами, программами, установленными на рабочей станции и т.д. Для всех этих действий в системе SAP ERP предусмотрен класс для работы с сервером представления, называется он: CL_GUI_FRONTEND_SERVICES.

четверг, 19 декабря 2013 г.

Редактирование записей таблиц в системе SAP

Способов существует несколько:

1. Запускаем транзакцию SE16N, указываем имя таблицы и нажимаем клавишу Enter (что бы вывелись на экран поля данной таблицы). Затем  в поле команды вводим  &sap_edit и нажимаем клавишу Enter. Указываем условия выбора и нажимаем кнопку "Выполнить" (F8).