SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

[OK] Подставить ограничения в средство поиска для EQUI-EQUNR



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Timer
Участник
Участник



Joined: 21 Jul 2008
Posts: 6

PostPosted: Fri Jun 24, 2011 8:58 am    Post subject: [OK] Подставить ограничения в средство поиска для EQUI-EQUNR Reply with quote

Здравствуйте!

Передо мной стоит следующая задача по разработке ALV-грида: учитывать ограничение, введённое по STORT, при вызове средства поиска для поля EQUNR. Рисунок — 01_задача

Я задал обработчик события onf4 в ALV-гриде, в нём вызвал функциональный модуль F4IF_FIELD_VALUE_REQUEST (по примеру в программе BCALV_EDIT_08)
Code:
  Call function 'F4IF_FIELD_VALUE_REQUEST'
    exporting
      tabname           = 'EQUI'
      fieldname         = 'EQUNR'
      callback_program  = 'ZPMP006'
      value             = lv_help_value
      callback_form     = 'F4CALLBACK'
    tables
      return_tab        = lt_f4.


Получил результат: отдельный экран выбора, такой же, что и в транзакции IH08. Рисунок — 02_результат

На этом экране не учитываются ограничивающие данные. Я посмотрел, какое средство поиска вызывается в этом случае. В таблице EQUI для поля EQUNR (к которому я обращаюсь при вызове F4IF_FIELD_VALUE_REQUEST) средство поиска не задано. Оно задано в элементе данных EQUNR для этого поля (вкладка "ДополнитСвойства") и называется EQUI. Рисунки 03_элемент_данных, 04_средство_поиска.

В этом средстве поиска только один выходной (EXP) параметр EQUNR и нет ни одного входного. Видимо, из-за этого поля экрана не заполняются ограничивающими данными (я пытался подставить ограничения по примеру в программе BCALV_EDIT_08, отсюда и ссылка на подпрограмму F4CALLBACK программы ZPMP006 в вызове ФМ)?

Можно ли подставить ограничения в данное средство поиска (очень оно удобное)? Если можно, то долго/сложно ли это делается и не лучше ли будет создать собственное средство поиска через транзакцию SE11?

И где можно прочитать про создание средств поиска, в которых ограничения задаются на экране выбора (как в этом случае)?

Исправление 04.07.2011: задача решена, добавил в заголовок темы [OK]



01_задача.PNG
 Description:
Задача: учитывать ограничение по STORT в средстве поиска для EQUNR
 Filesize:  4.89 KB
 Viewed:  24255 Time(s)

01_задача.PNG



02_результат.PNG
 Description:
Результат нажатия F4 — отдельный экран выбора, такой же, что и в транзакции IH08
 Filesize:  29.47 KB
 Viewed:  24255 Time(s)

02_результат.PNG



03_элемент_данных.PNG
 Description:
Элемент данных EQUNR, вкладка "ДополнитСвойства", ссылка на средство поиска EQUI
 Filesize:  31.67 KB
 Viewed:  24255 Time(s)

03_элемент_данных.PNG



04_средство_поиска.PNG
 Description:
Средство поиска EQUI, только один параметр EXP, ни одного IMP
 Filesize:  31.63 KB
 Viewed:  24255 Time(s)

04_средство_поиска.PNG




Last edited by Timer on Mon Jul 04, 2011 11:32 am; edited 1 time in total
Back to top
View user's profile Send private message
vvk
Гуру
Гуру



Joined: 17 Jan 2011
Posts: 14

PostPosted: Fri Jun 24, 2011 1:53 pm    Post subject: Reply with quote

Можете воспользоваться функциональностью дескриптора SH. В общем виде логика работы следующая
Code:

  TYPE-POOLS shlp.

  DATA: ls_shlp TYPE shlp_descr_t,
        lt_ret  TYPE TABLE OF ddshretval,
        lf_rc   TYPE syst-sybrc.

* Данные дескриптора SH
  CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
       EXPORTING
            shlpname = 'EQUI'
       IMPORTING
            shlp     = ls_shlp.

* Обработка параметров SH (добавляете необходимые ограничения, закрываете поля от изменения и т.д. -> исп. параметры дескриптора ls_shlp-interface, ls_shlp-fieldprop, ls_shlp-selopt)

* Вызов SH
  CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
       EXPORTING
            shlp          = ls_shlp
       IMPORTING
            rc        = lf_rc
       TABLES
            return_values = lt_ret
       EXCEPTIONS
            OTHERS        = 1.
Back to top
View user's profile Send private message
Timer
Участник
Участник



Joined: 21 Jul 2008
Posts: 6

PostPosted: Fri Jun 24, 2011 3:47 pm    Post subject: Reply with quote

Попробовал использовать функциональные модули F4IF_GET_SHLP_DESCR и F4IF_START_VALUE_REQUEST. Для элементарных средств поиска ограничения задаются нормально (через ls_shlp-selopt). В этом же случае, для комплексного средства поиска EQUI, ограничения не задаются.

СП EQUI содержит в себе несколько элементарных СП, например, СП EQUIN. Рисунок 1

СП EQUIN тоже не простое: использует ФМ F4_MATCHCODE_USER_EXIT (ПользовСредстПоиск) и PM_HLP_EQUI_LIST_SV (значение по умолчанию в поле FUNCNAME). Рисунок 2

ФМ PM_HLP_EQUI_LIST_SV вызывает подпрограмму SUBMIT_RIEQUI20_F00, которая вызывает программу RIEQUI20. Рисунок 3 и код

Code:
FORM SUBMIT_RIEQUI20_F00 TABLES F_VALUES STRUCTURE RSMVA
                         USING F_TCODE F_SELSTR.

  DATA: G_ERRORCODE LIKE SY-SUBRC.
  DATA: BEGIN OF SEL_TAB OCCURS 1.
          INCLUDE STRUCTURE RIHEQUI_LIST.
  DATA: END OF SEL_TAB.
  DATA: H_SELM VALUE 'X'.

*--- Report aufrufen ------------------------------------------------*
  PERFORM SUBMIT_LIST_REPORT USING F_TCODE
                                   'RIEQUI20'
                                   F_SELSTR
                                   H_SELM.
*--- Im Selektionsmodus nicht selektiert ? --------------------------*
  IMPORT SEL_TAB FROM MEMORY ID M_ID_RIEQUI20.

  READ TABLE SEL_TAB INDEX 1.
  IF SY-SUBRC = 0.
    REFRESH F_VALUES.
    LOOP AT SEL_TAB.
      F_VALUES-FLDID = 'KEY'.
      F_VALUES-FLDLG = 18.
      F_VALUES-VALUE = SEL_TAB-EQUNR.
      APPEND F_VALUES.
    ENDLOOP.
  ELSE.
    MESSAGE S047.
  ENDIF.

ENDFORM.                               " SUBMIT_RIEQUI20_F00


При запуске программа RIEQUI20 отображает экран выбора, который я приложил рисунком 02_результат в первом сообщении этой темы. Я не понял, как задать ограничения на этом экране, т.е. чтобы при отображении экрана в полях уже стояли ограничивающие значения.

Буду делать собственное элементарное средство поиска.
Это не так функционально, как экран выбора программы RIEQUI20, но зато проще. И на сапфоруме говорят, что для RIEQUI20 нет пользовательских расширений.



01_комплексное_средство_поиска_EQUI.PNG
 Description:
комплексное средство поиска EQUI
 Filesize:  55.38 KB
 Viewed:  24167 Time(s)

01_комплексное_средство_поиска_EQUI.PNG



02_элементарное_средство_поиска_EQUIN.PNG
 Description:
элементарное средство поиска EQUIN
 Filesize:  39.45 KB
 Viewed:  24167 Time(s)

02_элементарное_средство_поиска_EQUIN.PNG



03_ФМ_PM_HLP_EQUI_LIST_SV.PNG
 Description:
функциональный модуль PM_HLP_EQUI_LIST_SV
 Filesize:  52.98 KB
 Viewed:  24167 Time(s)

03_ФМ_PM_HLP_EQUI_LIST_SV.PNG


Back to top
View user's profile Send private message
Timer
Участник
Участник



Joined: 21 Jul 2008
Posts: 6

PostPosted: Mon Jul 04, 2011 11:26 am    Post subject: Reply with quote

Ответ на вопрос
Я получил ответ на вопрос, как сделать так, чтобы при отображении экрана (программа RIEQUI20) в полях уже стояли ограничивающие значения.
Обсуждение — на sapboard.ru, совет от Besa:
Besa wrote:

... жмите F1 на операторе submit ...
SUBMIT prog
WITH Ваши параметры с экрана и их значения + не забываем про return
В общем не обязательно работать через память (set/get parameters).


Code:
Form submit.
  Data:
    ls_param type RSPARAMS,
    lt_params type table of RSPARAMS,
    lt_list type table of ABAPLIST.

"Поставить значение 13 в поле Местоположение (STORT)
  ls_param-selname = 'STORT'.
  ls_param-kind = 'S'.
  ls_param-sign = 'I'.
  ls_param-option = 'EQ'.
  ls_param-low = '13'.
  Append ls_param to lt_params.

"Вызвать программу с местоположением, подставленным на экран выбора
  Submit RIEQUI20
    via selection-screen with selection-table lt_params
    exporting list to memory "Получить результат — выбранные единицы оборуд-я
    and return.

  CALL FUNCTION 'LIST_FROM_MEMORY'
    TABLES
      LISTOBJECT       = lt_list
    EXCEPTIONS
      NOT_FOUND        = 1
      OTHERS           = 2
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

"Показать выбранные единицы оборудования
  CALL FUNCTION 'DISPLAY_LIST'
*   EXPORTING
*     FULLSCREEN                  =
*     CALLER_HANDLES_EVENTS       =
*     STARTING_X                  = 10
*     STARTING_Y                  = 10
*     ENDING_X                    = 60
*     ENDING_Y                    = 20
*   IMPORTING
*     USER_COMMAND                =
    TABLES
      LISTOBJECT                  = lt_list
    EXCEPTIONS
      EMPTY_LIST                  = 1
      OTHERS                      = 2
            .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

Endform.


Решение
В итоге я всё-же сделал собственное элементарное средство поиска.

F4 для столбца "Местополож" — это содержимое внутренней таблицы (подпрограмма alv_1_show_f4_stort, вызов функционального модуля F4IF_INT_TABLE_VALUE_REQUEST).
F4 для столбца "Ед. оборудов." — это вызов собственного средства поиска ZPMP006_1 (подпрограмма alv_1_show_f4_equnr). При этом сначала вызывается ФМ F4IF_GET_SHLP_DESCR, а затем ФМ F4IF_START_VALUE_REQUEST. Первый получает описание СП из словаря данных, чтобы потом подкрутить его (спасибо vvk за совет), а затем подкрученное описание передаётся второму.

Код с сокращениями
Code:
Constants:
  gc_true type boolean value 'X',
  gc_false type boolean value ' ',
  gc_asterisk type c length 1 value '*',
  begin of gcs,
    ...
    begin of screens,
      ...
      begin of data_create, "Экран для ввода новых записей, режим CREATE
        number type i value 10,
        title type gui_title value '0010',
      end of data_create,
      begin of data_change, "Экран для изменения записей, режим CHANGE
        number type i value 20,
        title type gui_title value '0020',
      end of data_change,
      begin of data_view, "Экран для просмотра записей, режим VIEW
        number type i value 30,
        title type gui_title value '0030',
      end of data_view,
      ...
    end of screens,
    begin of data_table,
      ...
      stort type NAME_FELD value 'STORT',
      equnr type NAME_FELD value 'EQUNR',
      ...
    end of data_table,
  end of gcs.

*&-------------------------------------------------------------------*
*& Обработчик событий для всех типов ALV-гридов, объявление
*&-------------------------------------------------------------------*
Class lcl_grid_event_handler definition final.
  Public section.
    Methods:
      ...
      handle_onf4
        for event onf4 of cl_gui_alv_grid
          importing sender e_fieldname e_fieldvalue es_row_no er_event_data,
      ...
  Private section.
    "Пусто
Endclass.

Types:
  begin of ty_s_string,
    string type string,
  end of ty_s_string,
  ty_t_strings type standard table of ty_s_string,
  ty_t_data type ZPMP006_1_TABLE_TYPE,
  ty_s_data type line of ty_t_data,
  begin of ty_s_alv,
    begin of 01,
      r_grid type ref to cl_gui_alv_grid,
      r_handler type ref to lcl_grid_event_handler,
      r_cont type ref to cl_gui_docking_container,
      t_fcat type lvc_t_fcat,
      t_sort type lvc_t_sort,
      t_excl type ui_functions,
      t_f4 type lvc_t_f4,
      s_layo type lvc_s_layo,
      s_vari type disvariant,
      v_save type c,
    end of 01,
  end of ty_s_alv.

Data:
"Ограничения на поле ZPMP006_1-STORT "Местоположение"
  gt_create_stort_restrictions type ty_t_strings, "для операции CREATE
  gt_change_stort_restrictions type ty_t_strings, "для операции CHANGE
  ...
  gs_alv type ty_s_alv.

*&-------------------------------------------------------------------*
*& Обработчик событий для всех типов ALV-гридов, реализация
*&-------------------------------------------------------------------*
Class lcl_grid_event_handler implementation.
  ...
  Method handle_onf4.
    Case sender.
      When gs_alv-01-r_grid.
        Case e_fieldname.
          When gcs-data_table-stort. "Местоположение
            Data:
              lt_restrictions type ty_t_strings. "Ограничения
          "Заполнить таблицу с ограничениями
            Case sy-dynnr.
              When gcs-screens-data_create-number.
                Move gt_create_stort_restrictions to lt_restrictions.
              When gcs-screens-data_change-number.
                Move gt_change_stort_restrictions to lt_restrictions.
              When others.
              "Оставить стандартную помощь по вводу
                Exit.
            Endcase.
          "Показать свою помощь по вводу (с ограничениями)
            Perform alv_1_show_f4_stort
              using es_row_no
                    er_event_data
                    lt_restrictions
                    .
          When gcs-data_table-equnr. "Единица оборудования
            Data: ls_data_row type ty_s_data.
            Read table gt_data into ls_data_row index es_row_no-row_id.
          "Показать свою помощь по вводу
            Perform alv_1_show_f4_equnr
              using ls_data_row
                    es_row_no
                    er_event_data
                    .
          When others.
            Message i000(SU) with 'Событие onf4' 'не обрабатывается для этого поля'.
        Endcase.
      When others.
        Message i000(SU) with 'Событие onf4' 'не обрабатывается для этого ALV-Grid''а'.
    Endcase.
  Endmethod.
  ...
Endclass.

*&-------------------------------------------------------------------*
*&   Показать свою помощь по вводу (клавиша F4) для местоположения (STORT)
*& с ограничениями
*&-------------------------------------------------------------------*
Form alv_1_show_f4_stort
  using
    is_row_no type lvc_s_roid
    ir_event_data type ref to cl_alv_event_data
    it_restriction_strings type ty_t_strings.

  Types:
    begin of ty_s_restriction,
      stand type T499S-STAND,
    end of ty_s_restriction,
    ty_t_restrictions type standard table of ty_s_restriction.

  Constants:
  "Источник данных для помощи по вводу
    lc_tabname type tabname value 'T499S', "Изменил? Ищи from T499S, of T499S
    lc_field_1 type fieldname value 'STAND', "Поле со значением местоположения
    lc_field_2 type fieldname value 'KTEXT'. "Поле с поясняющим текстом

  Data:
    ls_restriction_string type ty_s_string,
    lt_restrictions type ty_t_restrictions,
    ls_restriction type ty_s_restriction,
    lt_data_source type table of T499S,
    ls_data_source like line of lt_data_source,
    ls_value type seahlpres,
    lt_values type table of seahlpres,
    ls_field  type dfies,
    lt_fields type table of dfies,
    lt_selected_sh_rows type standard table of ddshretval,
    ls_selected_sh_row type ddshretval,
    ls_modi type lvc_s_modi.

  Field-symbols:
    <ft_modi> type lvc_t_modi.

"Отказаться от стандартной помощи по вводу
  ir_event_data->m_event_handled = gc_true.

"Выбрать данные для помощи по вводу с учётом ограничений
  Loop at it_restriction_strings into ls_restriction_string.
    ls_restriction-stand = ls_restriction_string-string.
    Append ls_restriction to lt_restrictions.
  Endloop.
  Select *
    into table lt_data_source
    from T499S
    for all entries in lt_restrictions "Если нет ограничений — выбрать всё
      where STAND = lt_restrictions-stand.

"Перевести выбранные данные в формат "ячейка-за-ячейкой" (cell-by-cell)
  Loop at lt_data_source into ls_data_source.
    ls_value-string = ls_data_source-stand.
    Append ls_value to lt_values.
    ls_value-string = ls_data_source-ktext.
    Append ls_value to lt_values.
  Endloop.

"Задать набор столбцов для отображения выбранных данных
  ls_field-tabname   = lc_tabname.
  ls_field-fieldname = lc_field_1.
  Append ls_field to lt_fields.

  ls_field-tabname   = lc_tabname.
  ls_field-fieldname = lc_field_2.
  Append ls_field to lt_fields.

"Показать помощь по вводу во всплывающем окне
  Call function 'F4IF_INT_TABLE_VALUE_REQUEST'
    exporting
      retfield               = lc_field_1
      multiple_choice        = gc_false
      display                = gc_false
    tables
      value_tab              = lt_values
      field_tab              = lt_fields
      return_tab             = lt_selected_sh_rows
    exceptions
      parameter_error        = 1
      no_values_found        = 2
      others                 = 3
            .
  If sy-subrc <> 0.
  "Ошибка, показать сообщение и выйти
    Message id sy-msgid type sy-msgty number sy-msgno
        with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    Exit.
  Endif.

"Передать выбранное значение в ALV-грид
  Read table lt_selected_sh_rows into ls_selected_sh_row index 1.
  If sy-subrc <> 0.
  "Нет ни одной выбранной строки, выйти из подпрограммы
    Exit.
  Endif.
  ls_modi-value = ls_selected_sh_row-fieldval.
  ls_modi-fieldname = gcs-data_table-stort. "В поле "Местоположение"
  ls_modi-row_id = is_row_no-row_id.
  Assign ir_event_data->m_data->* to <ft_modi>.
  Append ls_modi to <ft_modi>. "Добавить к изменённым ячейкам ALV-грида
  Unassign <ft_modi>.

Endform. "alv_1_show_f4_stort

*&-------------------------------------------------------------------*
*&   Показать свою помощь по вводу (клавиша F4) для единицы оборудования (ЕО,
*& EQUNR) с учётом уже введённых данных в поля столбцов "Местоположение",
*& "Тип/модель", "Наименование", "Серийный номер".
*&-------------------------------------------------------------------*
Form alv_1_show_f4_equnr
  using
    is_data_row type ty_s_data
    is_row_no type lvc_s_roid
    ir_event_data type ref to cl_alv_event_data.

  Constants:
  "Источник данных для помощи по вводу
    lc_shlpname type shlpname value 'ZPMP006_1'.

  Data:
    ls_shlp type shlp_descr,
    ls_interface type ddshiface,
    ls_selopt type ddshselopt,
    lv_rc type sy-subrc,
    lt_selected_sh_rows type standard table of ddshretval,
    ls_selected_sh_row type ddshretval,
    ls_modi type lvc_s_modi.

  Field-symbols:
    <ft_modi> type lvc_t_modi.

"Отказаться от стандартной помощи по вводу
  ir_event_data->m_event_handled = gc_true.

"Получить описание средства поиска СП
  Call function 'F4IF_GET_SHLP_DESCR'
       exporting
            shlpname = lc_shlpname
       importing
            shlp     = ls_shlp.

"Дополнить описание СП: задать возвращаемые из СП поля
  Loop at ls_shlp-interface into ls_interface
    where shlpfield <> gcs-data_table-stort.
    "Все, кроме поля "Местоположение
      ls_interface-valfield = ls_interface-shlpfield.
      Modify ls_shlp-interface from ls_interface index sy-tabix.
  Endloop.

"Дополнить описание СП: ввести начальные ограничения в ls_shlp-selopt
  ls_selopt-shlpname = lc_shlpname.
  ls_selopt-sign = gcs-so-sign-include.
  ls_selopt-option = gcs-so-option-equals.
  If is_data_row-stort is not initial. "Местоположение
    ls_selopt-shlpfield = gcs-data_table-stort.
    ls_selopt-low = is_data_row-stort.
    Append ls_selopt to ls_shlp-selopt.
  Endif.

  If is_data_row-type is not initial. "Тип/модель
    ls_selopt-shlpfield = gcs-data_table-type.
    ls_selopt-option = gcs-so-option-contains_pattern.
    Concatenate gc_asterisk is_data_row-type gc_asterisk
      into ls_selopt-low.
    Append ls_selopt to ls_shlp-selopt.
  Endif.

  If is_data_row-serge is not initial. "Серийный номер
    ls_selopt-shlpfield = gcs-data_table-serge.
    ls_selopt-option = gcs-so-option-contains_pattern.
    Concatenate gc_asterisk is_data_row-serge gc_asterisk
      into ls_selopt-low.
    Append ls_selopt to ls_shlp-selopt.
  Endif.

  If is_data_row-equipment_name is not initial. "Наименование
    ls_selopt-shlpfield = gcs-data_table-equipment_name.
    ls_selopt-option = gcs-so-option-contains_pattern.
    Concatenate gc_asterisk is_data_row-equipment_name gc_asterisk
      into ls_selopt-low.
    Append ls_selopt to ls_shlp-selopt.
  Endif.


"Вызвать дополненную помощь по вводу (с заданными начальными ограничениями)
  Call function 'F4IF_START_VALUE_REQUEST'
       exporting
            shlp          = ls_shlp
       importing
            rc            = lv_rc
       tables
            return_values = lt_selected_sh_rows.

  Case lv_rc.
    When 0.
    "Выбранное значение находится в таблице lt_selected_sh_rows
    When 4.
      Message s000(su) with 'Значения не найдены'.
      Exit.
    When 8.
      Message s000(su) with 'Ничего не выбрано'.
      Exit.
    When others.
      Message s000(su) with 'Ошибка номер'
                            lv_rc
                            'при вызове ФМ F4IF_START_VALUE_REQUEST,'
                            'сообщите разработчикам'
                       display like 'E'.
      Exit. "Выйти из подпрограммы
  Endcase.

"Передать поля выбранной строки из СП в ALV-грид
  Assign ir_event_data->m_data->* to <ft_modi>.
  Loop at lt_selected_sh_rows into ls_selected_sh_row.
    ls_modi-value = ls_selected_sh_row-fieldval.
    ls_modi-fieldname = ls_selected_sh_row-fieldname.
    ls_modi-row_id = is_row_no-row_id.
    Append ls_modi to <ft_modi>. "Добавить поле к изменённым ячейкам ALV-грида
  Endloop.
  Unassign <ft_modi>.

Endform. "alv_1_show_f4_equnr



SH_ZPMP006_1.PNG
 Description:
Средство поиска ZPMP006_1
 Filesize:  46.05 KB
 Viewed:  24099 Time(s)

SH_ZPMP006_1.PNG



Result.PNG
 Description:
Результат — в СП для единицы оборудования в поля подставляются значения из ALV-грида (автоматически подставились значения "85", "*8/0/0*" и "*для снятия заусенцев*")
 Filesize:  59.69 KB
 Viewed:  24099 Time(s)

Result.PNG


Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.