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

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

Оффлайн Uukrul

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

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

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

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

  • Я НЕ ЗАНИМАЮСЬ SAP
  • Administrator
  • Full Member
  • *****
  • Сообщений: 1 367
  • Репутация: +20/-0
  • Пол: Мужской
  • https://noteifyapp.com
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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
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 780
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
You are not allowed to view links. Register or Login
Ну как вариант, можна при вызове  CALL TRANSACTION передавать табличку для ошибок и саму транзакцию запускать с параметром
Ну на самом деле это уже немного не то.. это если нужно что-то выполнить... а рисовать такую вещь на транзакцию просмотра документа + анализ таблицы результата?! Как по мне это уже лишнее программирование.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 780
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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 780
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • 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, можно передать и другие переменные. ФМ выполняет стандартную проверку на полномочия и сохраняет передаваемые параметры.