Автор Тема: MMIM_CALL_TRANSACTION - Вызовы транзакций (в основном отчеты)  (Прочитано 25029 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
MMIM_CALL_TRANSACTION - Вызов транзакций (в основном отчетных), из своих программ. Позволяет делать вызов транзакции как в текущем окне там и путем создания новой сессии/режима. В принципе, если надо сделать красивую интеграцию из своих программ, то можно использовать вместо CALL TRANSACTION.

Пример сделан для вызова транзакции MMBE - Обзор запасов: БЕ/завод/склад/партия. При этом первый экран ввода параметров для селекционного экрана пропускается и вызов делается в том же окне, без открытия новой сессии. Кстати, по поводу новой сессии не плохо бы проверить а есть ли свободные еще режимы...
Код: You are not allowed to view links. Register or Login
DATA: lt_parameters LIKE usr05 OCCURS 1 WITH HEADER LINE.

lt_parameters-parid = 'MAT'
LT_PARAMETERS-PARVA = '<Код материала>'.
APPEND lt_parameters.

lt_parameters-parid = 'WRK'
LT_PARAMETERS-PARVA = '<Код завода>'.
APPEND lt_parameters.

CALL FUNCTION 'MMIM_CALL_TRANSACTION'
  EXPORTING
    i_transaction       = 'MMBE'
    i_skip_first_screen = 'X'
    i_new_mode          = ' '
  TABLES
    it_parameters       = lt_parameters
  EXCEPTIONS
    not_authorized      = 1
    OTHERS              = 2.
Вызов в принципе не сложный:
i_transaction - Код транзакции
i_skip_first_screen - Если задано "X", то выполняется пропуск первого экрана выбора
i_new_mode - Если задано "Х", то будет открыт новый режим, иначе вызов транзакции будет в текущем окне.
it_parameters - Параметры селекционного экрана... откуда их брать, ну жмете F1 в поле селекционного экрана, а там техническая информация и из картинки все как бы ясно, а пример заполнения внутренней таблицы из текста.

Кстати, аналогичный вызов можно сделать используя CALL TRANSACTION, типа так:
Код: You are not allowed to view links. Register or Login
SET PARAMETER ID 'MAT' FIELD '<Код материала>'.
SET PARAMETER ID 'WRK' FIELD '<Код завода>'.
CALL TRANSACTION 'MMBE' and skip firs screen.

Что использовать, выбирать вам... я бы использовал функцию, так как ее вызов проверяет полномочия на вызываемую транзакцию и соответсвенно вы это можете обработать, а не вывалить пользователю стандартное окно с сообщением внизу, типа а у вас нет полномочий на транзакцию XXXX. Во-вторых, вызов SET PARAMETER ID 'MAT' FIELD '<Код материала>', само собой затирает значение параметра в памяти, так вот вызов ФМ, это дело обходит и путем запоминания параметров внутри себя перед вызовом транзакции и их востановления при выходе.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Так, картнику забыл прицепить...

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Т.е. преимущества только в том что функция возрвращет прошла/не прошла проверка полномочий,
и не затирает параметры в памяти ?
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Т.е. преимущества только в том что функция возрвращет прошла/не прошла проверка полномочий,
и не затирает параметры в памяти ?
Ну я весь код не разбирал, но как по мне получить параметр возврата и его обработать будет более правильно чем валить экран с текстом что нет полномочий, ну и затирание параметров тоже не маловажная штука... короче как по мне то этот вариант более кошерный в использовании.

Оффлайн Паганель

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • MacPlus Software
Ну как вариант, можна при вызове  CALL TRANSACTION передавать табличку для ошибок и саму транзакцию запускать с параметром MODE = 'N'

Код: You are not allowed to view links. Register or Login
" Для записи ошибок пакетного ввода.
DATA:
      ls_message TYPE bdcmsgcoll,
      gt_message TYPE tab_bdcmsgcoll.
DATA: amode TYPE c.                  " Режим выполнения

MOVE 'N' TO amode.

CALL TRANSACTION 'XD01' USING bdc_tab MODE amode
          UPDATE 'S' MESSAGES INTO gt_message.

CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
  TABLES
    imt_bdcmsgcoll = gt_message
    ext_return     = rs_return.

LOOP AT ii_return_t INTO ii_return_l
        WHERE type = 'E' OR type = 'A'.
      RAISE er_dt.
NDLOOP.
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Ну как вариант, можна при вызове  CALL TRANSACTION передавать табличку для ошибок и саму транзакцию запускать с параметром
Ну на самом деле это уже немного не то.. это если нужно что-то выполнить... а рисовать такую вещь на транзакцию просмотра документа + анализ таблицы результата?! Как по мне это уже лишнее программирование.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Еще один из вариантов выполнения стандартных отчетов из своих программ  это использование оператора SUBMIT. Как в примере ниже:
Код: You are not allowed to view links. Register or Login
TYPE-POOLS: syldb.
DATA: l_progname TYPE raldb_repo,
      l_sp TYPE syldb_sp,
      lt_seltab LIKE rsparams OCCURS 1 WITH HEADER LINE.

l_progname = 'RMMMBESTN'.
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
  EXPORTING
    curr_report     = l_progname
  IMPORTING
    sp              = l_sp
  TABLES
    selection_table = lt_seltab
  EXCEPTIONS
    not_found       = 1
    no_report       = 2
    OTHERS          = 3.

IF sy-subrc <> 0. ENDIF.

DELETE lt_seltab WHERE selname <> 'MS_MATNR'.

LOOP AT lt_seltab.
* Код материала
  IF lt_seltab-selname = 'MS_MATNR'.
    lt_seltab-sign = 'I'.
    lt_seltab-option  = 'EQ'.
    lt_seltab-low = '<Код материала>'.
  ENDIF.
  MODIFY lt_seltab.
ENDLOOP.

SUBMIT (l_progname) WITH SELECTION-TABLE lt_seltab
  AND RETURN.

В данном примере для получения списка параметров отчета, используется функция RS_REFRESH_FROM_SELECTOPTIONS, которая позволяет получить список всех критериев находящихся на селекционном экране, затем заполнить требуемые критерии своими значениями и передать такую таблицу команде SUBMIT. Структура передачи параметров следующая:
Код: You are not allowed to view links. Register or Login
SELNAME RSSCR_NAME CHAR 8 0 АВАР: имя опции выбора/параметра
KIND RSSCR_KIND CHAR 1 0 АВАР: вид выборки
SIGN TVARV_SIGN CHAR 1 0 АВАР: индикатор: В/И (значения включить/исключить)
OPTION TVARV_OPTI CHAR 2 0 АВАР: опция выбора (EQ/BT/CP/...)
LOW TVARV_VAL CHAR 45 0 АВАР: значение выбора (LOW или HIGH, внешний формат)
HIGH TVARV_VAL CHAR 45 0 АВАР: значение выбора (LOW или HIGH, внешний формат)
В данном примере, результат будет следующим:
Код: You are not allowed to view links. Register or Login
SELNAME  K S OP LOW                                           HIGH

KZBUK    P
KZCHA    P
KZLGO    P
KZLON    P
KZLSO    P
KZNGC    P
KZNUL    P
KZSON    P
KZWER    P
MEINH    P
MS_CHARG S
MS_DISPO S
MS_LGORT S
MS_MATNR S
MS_WERKS S
P_MCALL  P
SOBKZ    S
P - Критерий типа PARAMETERS.
S - Критерий типа SELECT-OPTIONS.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
CALL_TRANSACTION_ERP - Еще одна вариация на тему вызовов транзакций из собственных программ. Аналогично предыдущему вызову:
Код: You are not allowed to view links. Register or Login
      CALL FUNCTION 'CALL_TRANSACTION_ERP'
        EXPORTING
          iv_tcode  = dtcodp-tcode
          iv_anfbd  = dtcodp-anfbd
          iv_matnr  = mdps-mdmat
          iv_werks  = mdps-mdwrk
          iv_berid  = mdps-mdber
          iv_plscn  = rm61r-plscn
          iv_dispo  = mdkp-dispo
        TABLES
          it_params = lt_spagpa.
Передаем код транзакции и   iv_anfbd  = dtcodp-anfbd, если = Х, тогда вызов идет с пропуском первого экрана. Транзакция ориентирована больше на вызовы ММ, так как основные параметры как видим материал, завод и т.д. Хотя в таблице it_params, можно передать и другие переменные. ФМ выполняет стандартную проверку на полномочия и сохраняет передаваемые параметры.

Sapforum.Biz