SAPфорум.RU
https://sapboard.ru/forum/

Комбинация Function Modules в одной Subroutine. Help.
https://sapboard.ru/forum/viewtopic.php?f=13&t=96049
Страница 1 из 1

Автор:  Ubicco [ Вт, фев 13 2018, 11:20 ]
Заголовок сообщения:  Комбинация Function Modules в одной Subroutine. Help.

Здравствуйте, помогите пожалуйста решить проблему: есть table type на основе структуры, которая содержит все данные из главной таблицы+дескрипшн из текстовой таблицы + 1 поле из check таблицы + есть 3 функциональных модуля. FM1 возвращает internat table со всеми данными из главной таблицы. FM2 возвращает дескрипшн из текстовой таблицы по языку и id. FM3 возвращает поле check таблицы, которое соответствует полю главной таблицы. Необходимо создать Form которая используя эти 3 функциональных модуля вернет internal table, которая должна содержать данные основной таблицы+соответствующие дескрипшоны текстовой таблицы+ соответствующие поля check таблицы, без использования каких-либо допольнительных селектов. Может кто подсказать?

Автор:  Kuranov.Dmitry [ Вт, фев 13 2018, 11:34 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Code:
TYPES: BEGIN OF t_return_data,
            main_part TYPE ZMAIN_TAB, " Данные из главной таблицы
            descr TYPE ZDESR_TAB," дескрипшены
            check_data TYPE ZCHECK_FIELD, " 1 поле из check таблицы.

TYPES: t_return_data_tab TYPE TABLE OF t_return_data.

FORM get_data  CHANGING p_res TYPE t_return_data_tab.

  DATA: lt_data TYPE TABLE ZMAIN_TAB.
  data: ls_data LIKE LINE OF lt_data.
  data: ls ret type t_return_data.

  CALL FUNCTION 'FM1'     
       TABLES
             lt_data.

  LOOP AT lt_data INTO ls_data.
      clear ls_ret.
      ls_ret-main_part = ls_data.
     CALL FUNCTION 'FM2'
         EXPORTING
               id = ls_data-id
               lang = sy-langu
        importing
            descr =  ls_ret-descr.
     CALL  FUNCTION 'FM3'
         EXPORTING
             id = ls_data-id
        IMPORTING
             chk_field = ls_ret-check_data.
      APPEND ls_data to p_res.
  endloop.
ENDFORM.


Автор:  Ubicco [ Вт, фев 13 2018, 12:18 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Cпасибо, но у меня ошибка при APPEND "p_res is not an internal table"

Автор:  Ubicco [ Вт, фев 13 2018, 12:21 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Code:
REPORT znes_hw4.

DATA: lt_offices      TYPE znes_t_office.

PERFORM SELECT_DATA changing lt_offices.

FORM select_data  CHANGING p_lt_offices.

  DATA lt_offices1 TYPE znes_t_office.
  DATA ls_offices1 LIKE LINE OF lt_offices1.
  DATA ls_ret TYPE znes_s_office.

  CALL FUNCTION 'ZNES_FM1'
    IMPORTING
      et_offices = lt_offices1.

  LOOP AT lt_offices1 INTO ls_offices1.
    CLEAR ls_ret.
    ls_ret-office_id = ls_offices1-office_id.
    ls_ret-bsns_cntr_name = ls_offices1-bsns_cntr_name.
    ls_ret-bsns_cntr_class = ls_offices1-bsns_cntr_name.
    ls_ret-distnc_frm_cntr = ls_offices1-distnc_frm_cntr.
    ls_ret-uom = ls_offices1-uom.
    ls_ret-customer = ls_offices1-customer.
    CALL FUNCTION 'ZNES_FM2'
      EXPORTING
        iv_lang = 'E'
        iv_key  = ls_offices1-office_id
      IMPORTING
        ev_text = ls_ret-description.

    CALL FUNCTION 'ZNES_FM3'
      EXPORTING
        iv_id    = ls_offices1-customer
      IMPORTING
        ev_name1 = ls_ret-name1.
    Append ls_ret to p_lt_offices.

  ENDLOOP .

Автор:  Kuranov.Dmitry [ Вт, фев 13 2018, 12:26 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Извиняюсь написал какую-то чушь. вот исправленная версия, таблицы поменял на p0001 p0002 p0003 чтоб скомпилировалось у меня:


Code:
TYPES: BEGIN OF t_return_data,
            main_part TYPE p0001, " Данные из главной таблицы
            descr TYPE p0002," дескрипшены
            check_data TYPE p0003, " 1 поле из check таблицы.
       END OF t_return_data.

TYPES: t_return_data_tab TYPE TABLE OF t_return_data.

FORM get_data  CHANGING p_res TYPE t_return_data_tab.

  DATA: lt_data TYPE TABLE of p0001.
  data: ls_data LIKE LINE OF lt_data.
  data: ls_ret type t_return_data.

  CALL FUNCTION 'FM1'
       TABLES
             t_data = lt_data.

  LOOP AT lt_data INTO ls_data.
      clear ls_ret.
      ls_ret-main_part = ls_data.
     CALL FUNCTION 'FM2'
         EXPORTING
               id = ls_data-pernr
               lang = sy-langu
        importing
            descr =  ls_ret-descr.
     CALL  FUNCTION 'FM3'
         EXPORTING
             id = ls_data-pernr
        IMPORTING
             chk_field = ls_ret-check_data.
      APPEND ls_ret to p_res.
  endloop.
ENDFORM.


Автор:  Ubicco [ Вт, фев 13 2018, 12:35 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

При APPEND та же самая ошибка: not internal table. не понимаю почему...

Автор:  Bimit [ Вт, фев 13 2018, 12:40 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Как объявлена внутренняя таблица?

Автор:  Ubicco [ Вт, фев 13 2018, 12:43 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Code:
DATA: lt_offices TYPE znes_t_office.


znes_t_office - стандартный табличный тип на основе моей структуры.

Автор:  Kuranov.Dmitry [ Вт, фев 13 2018, 12:48 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Укажите тип параметру.
Сап не знает что это таблица

FORM select_data CHANGING p_lt_offices TYPE znes_t_office.

Автор:  Ubicco [ Вт, фев 13 2018, 12:51 ]
Заголовок сообщения:  Re: Комбинация Function Modules в одной Subroutine. Help.

Спасибо большое, мне аж стыдно)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/