Меню

Сортировать:

Новое Популярное
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Александр Грибов

  |  01 февраля 2017, 12:37

Олег Точенюк 01 февраля 2017, 12:22

Да ладно, не помню я чтобы SAP удалял такие ФМ, да и вот зашел в одну из систем:

Есть такой модуль как вы видите.
 
Хотя если совсем все сложно то вот его код, там его написать то и самому вроде как без проблем.
 
FUNCTION convert_bdcmsgcoll_to_bapiret2.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  TABLES
*"      IMT_BDCMSGCOLL STRUCTURE  BDCMSGCOLL OPTIONAL
*"      EXT_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
 
  DATA: lv_msgno LIKE sy-msgno,
        lv_msgv1 LIKE sy-msgv1,
        lv_msgv2 LIKE sy-msgv2,
        lv_msgv3 LIKE sy-msgv3,
        lv_msgv4 LIKE sy-msgv4.
  DATA: ls_bdcmsgcoll LIKE bdcmsgcoll.
 
  LOOP AT imt_bdcmsgcoll INTO ls_bdcmsgcoll.
    lv_msgno = ls_bdcmsgcoll-msgnr.
    lv_msgv1 = ls_bdcmsgcoll-msgv1(50).
    lv_msgv2 = ls_bdcmsgcoll-msgv2(50).
    lv_msgv3 = ls_bdcmsgcoll-msgv3(50).
    lv_msgv4 = ls_bdcmsgcoll-msgv4(50).
    PERFORM collect_message TABLES ext_return
                            USING  ls_bdcmsgcoll-msgid
                                   lv_msgno
                                   ls_bdcmsgcoll-msgtyp
                                   lv_msgv1
                                   lv_msgv2
                                   lv_msgv3
                                   lv_msgv4.
  ENDLOOP.
 
ENDFUNCTION.

Самое время написать статью о приведении разных механизмов обработки сообщений к единому, самому удобному :)
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Олег Точенюк

  |  01 февраля 2017, 12:22

Олег Точенюк 01 февраля 2017, 12:22

Да ладно, не помню я чтобы SAP удалял такие ФМ, да и вот зашел в одну из систем:

Есть такой модуль как вы видите.
 
Хотя если совсем все сложно то вот его код, там его написать то и самому вроде как без проблем.
 
FUNCTION convert_bdcmsgcoll_to_bapiret2.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  TABLES
*"      IMT_BDCMSGCOLL STRUCTURE  BDCMSGCOLL OPTIONAL
*"      EXT_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
 
  DATA: lv_msgno LIKE sy-msgno,
        lv_msgv1 LIKE sy-msgv1,
        lv_msgv2 LIKE sy-msgv2,
        lv_msgv3 LIKE sy-msgv3,
        lv_msgv4 LIKE sy-msgv4.
  DATA: ls_bdcmsgcoll LIKE bdcmsgcoll.
 
  LOOP AT imt_bdcmsgcoll INTO ls_bdcmsgcoll.
    lv_msgno = ls_bdcmsgcoll-msgnr.
    lv_msgv1 = ls_bdcmsgcoll-msgv1(50).
    lv_msgv2 = ls_bdcmsgcoll-msgv2(50).
    lv_msgv3 = ls_bdcmsgcoll-msgv3(50).
    lv_msgv4 = ls_bdcmsgcoll-msgv4(50).
    PERFORM collect_message TABLES ext_return
                            USING  ls_bdcmsgcoll-msgid
                                   lv_msgno
                                   ls_bdcmsgcoll-msgtyp
                                   lv_msgv1
                                   lv_msgv2
                                   lv_msgv3
                                   lv_msgv4.
  ENDLOOP.
 
ENDFUNCTION.

А да еще подпрограммка:
 
*----------------------------------------------------------------------*
***INCLUDE LMEAGF12 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  collect_message
*&---------------------------------------------------------------------*
FORM collect_message TABLES cht_return STRUCTURE bapiret2
                     USING  im_msgid   LIKE      sy-msgid
                            im_msgno   LIKE      sy-msgno
                            im_msgty   LIKE      sy-msgty
                            im_msgv1   LIKE      sy-msgv1
                            im_msgv2   LIKE      sy-msgv2
                            im_msgv3   LIKE      sy-msgv3
                            im_msgv4   LIKE      sy-msgv4.
 
  DATA: ls_return LIKE bapiret2.
 
  CALL FUNCTION 'BALW_BAPIRETURN_GET2'
       EXPORTING
            type             = im_msgty
            cl               = im_msgid
            number           = im_msgno
            par1             = im_msgv1
            par2             = im_msgv2
            par3             = im_msgv3
            par4             = im_msgv4
*           LOG_NO           = ' '
*           LOG_MSG_NO       = ' '
*           PARAMETER        = ' '
*           ROW              = 0
*           FIELD            = ' '
       IMPORTING
            return           = ls_return.
 
  APPEND ls_return TO cht_return.
 
ENDFORM.                               " collect_message
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Олег Точенюк

  |  01 февраля 2017, 12:22

Александр Грибов 31 января 2017, 08:11

Спасибо за ответ, но в ERP 6.0 EHP7 нет такого ФМ - 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'.

Да ладно, не помню я чтобы SAP удалял такие ФМ, да и вот зашел в одну из систем:

Есть такой модуль как вы видите.
 
Хотя если совсем все сложно то вот его код, там его написать то и самому вроде как без проблем.
 
FUNCTION convert_bdcmsgcoll_to_bapiret2.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  TABLES
*"      IMT_BDCMSGCOLL STRUCTURE  BDCMSGCOLL OPTIONAL
*"      EXT_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
 
  DATA: lv_msgno LIKE sy-msgno,
        lv_msgv1 LIKE sy-msgv1,
        lv_msgv2 LIKE sy-msgv2,
        lv_msgv3 LIKE sy-msgv3,
        lv_msgv4 LIKE sy-msgv4.
  DATA: ls_bdcmsgcoll LIKE bdcmsgcoll.
 
  LOOP AT imt_bdcmsgcoll INTO ls_bdcmsgcoll.
    lv_msgno = ls_bdcmsgcoll-msgnr.
    lv_msgv1 = ls_bdcmsgcoll-msgv1(50).
    lv_msgv2 = ls_bdcmsgcoll-msgv2(50).
    lv_msgv3 = ls_bdcmsgcoll-msgv3(50).
    lv_msgv4 = ls_bdcmsgcoll-msgv4(50).
    PERFORM collect_message TABLES ext_return
                            USING  ls_bdcmsgcoll-msgid
                                   lv_msgno
                                   ls_bdcmsgcoll-msgtyp
                                   lv_msgv1
                                   lv_msgv2
                                   lv_msgv3
                                   lv_msgv4.
  ENDLOOP.
 
ENDFUNCTION.
Настройки для ЭДО исходящих Торг-12 в SAP ERP (5)

Комментарий от  

Екатерина Васина

  |  01 февраля 2017, 10:06

Вадим Сорха 31 января 2017, 07:38

Здравствуйте, Екатерина. Ну может быть вы что-нибудь разъясните по УКД? Используете ли вы в ЭДО УКД (корректировочный УПД)? Меня интересует больше всего применение УКД для режима ДИС (документа об изменении стоимости) в случае с ММВ-7-15189@. В ММВ-20-15/86@ был в свою очередь режим 2 - соглашение об изменении стоимости. Для УКД мне не понятно:
1) как ДИС отражается в системе
2) в какие журналы ложится и т.п.

Добрый день, Вадим! С данным функционалом еще не приходилось работать к сожалению, поэтому ответить на Ваши вопросы в данный момент не могу.
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Александр Грибов

  |  31 января 2017, 08:11

Олег Точенюк 31 января 2017, 00:52

Да таких ФМ в SAP хоть пруд пруди, так как каждый абапящий индус похоже считал своим долгом написать вывод структуры BAPIRET2_TAB в диалоговом экране, чисто по быстрому 'FINB_BAPIRET2_DISPLAY' или  'RSCRMBW_DISPLAY_BAPIRET2' или 'CBIH_IAALD_BAPIRET2_SHOW' и короче есть их там еще.
 
Что касается вашего второго вопроса, то:
 
CONVERT_BDCMSGCOLL_TO_BAPIRET2 - Данный модуль позволяет выполнить преобразование таблицы сообщений получаемой после вызова пакетного ввода типа CALL TRANSACTION в таблицу сообщений типа BAPIRET2.
 
DATA:   messtab TYPE STANDARD TABLE OF bdcmsgcoll,
             bapiret2 TYPE STANDARD TABLE OF bapiret2.
 
* Например какой-нить вызов пакетника.
CALL TRANSACTION 'FB05' USING bdcdata
    OPTIONS FROM ct_params
    MESSAGES INTO messtab.
 
* Конвертируем результаты выполнения
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
  TABLES
    imt_bdcmsgcoll = messtab[]
    ext_return     = bapiret2.
 
* Вывод сообщений в диалоговом окне
IF NOT gt_return[] IS INITIAL.
  CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
    EXPORTING
      it_message = bapiret2.
ENDIF.

Спасибо за ответ, но в ERP 6.0 EHP7 нет такого ФМ - 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'.
Настройки для ЭДО исходящих Торг-12 в SAP ERP (5)

Комментарий от  

Вадим Сорха

  |  31 января 2017, 07:38

Здравствуйте, Екатерина. Ну может быть вы что-нибудь разъясните по УКД? Используете ли вы в ЭДО УКД (корректировочный УПД)? Меня интересует больше всего применение УКД для режима ДИС (документа об изменении стоимости) в случае с ММВ-7-15189@. В ММВ-20-15/86@ был в свою очередь режим 2 - соглашение об изменении стоимости. Для УКД мне не понятно:
1) как ДИС отражается в системе
2) в какие журналы ложится и т.п.
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Олег Точенюк

  |  31 января 2017, 00:52

Александр Грибов 30 января 2017, 15:15

Спасибо за статью!
 
Для быстрого отображения BAPI-сообщений можно использовать ФМ C14ALD_BAPIRET2_SHOW, это тоже очень удобно.
 
Не подскажет ли кто-то, как быстро и удобно сообщения, полученные после CALL TRANSACTION '...' MESSAGES INTO <...>?

Да таких ФМ в SAP хоть пруд пруди, так как каждый абапящий индус похоже считал своим долгом написать вывод структуры BAPIRET2_TAB в диалоговом экране, чисто по быстрому 'FINB_BAPIRET2_DISPLAY' или  'RSCRMBW_DISPLAY_BAPIRET2' или 'CBIH_IAALD_BAPIRET2_SHOW' и короче есть их там еще.
 
Что касается вашего второго вопроса, то:
 
CONVERT_BDCMSGCOLL_TO_BAPIRET2 - Данный модуль позволяет выполнить преобразование таблицы сообщений получаемой после вызова пакетного ввода типа CALL TRANSACTION в таблицу сообщений типа BAPIRET2.
 
DATA:   messtab TYPE STANDARD TABLE OF bdcmsgcoll,
             bapiret2 TYPE STANDARD TABLE OF bapiret2.
 
* Например какой-нить вызов пакетника.
CALL TRANSACTION 'FB05' USING bdcdata
    OPTIONS FROM ct_params
    MESSAGES INTO messtab.
 
* Конвертируем результаты выполнения
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
  TABLES
    imt_bdcmsgcoll = messtab[]
    ext_return     = bapiret2.
 
* Вывод сообщений в диалоговом окне
IF NOT gt_return[] IS INITIAL.
  CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
    EXPORTING
      it_message = bapiret2.
ENDIF.
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Александр Грибов

  |  30 января 2017, 15:15

Спасибо за статью!
 
Для быстрого отображения BAPI-сообщений можно использовать ФМ C14ALD_BAPIRET2_SHOW, это тоже очень удобно.
 
Не подскажет ли кто-то, как быстро и удобно сообщения, полученные после CALL TRANSACTION '...' MESSAGES INTO <...>?
УПД - Универсальный передаточный документ (UTD - Unified Transfer Document print form). Методика настройки и выпуска в модуле SD. Часть 1 (11)

Комментарий от  

Вадим Сорха

  |  27 января 2017, 11:22

Я знаю, что даже на конец января 2017 у SAPа ничего нет по УКД для новых форматов, которые указаны в приказе ММВ-7-15189@. А что для УКД из ММВ-20-15/86@ тоже ничего не разработано? И меня интересует больше всего применение этих УКД для режима ДИС (документа об изменении стоимости) в случае с ММВ-7-15189@. В ММВ-20-15/86@ был в свою очередь режим 2 - соглашение об изменении стоимости. Для них не понятно как это отражается в системе, на основе каких документов строится, в какие журналы ложится и т.п.
Формирование коллектора сообщений и методика работы с ним (8)

Комментарий от  

Николай Кронский

  |  24 января 2017, 16:45

Алексей, если честно - не уловил, в чем заключается "авторское решение"?
Описанный подход является стандартным в разработках модуля RE-FX.
Расширения системы (Enhancement Framework). Часть 2 (1)

Комментарий от  

Дмитрий Шулейко

  |  20 января 2017, 14:58

Спасибо!
Очень доступно описано.
Не совсем к теме статьи, но возможно кому-то будет полезно(возможно тем, у кого версия системы не позволяет использовать ENH):
 
По пункту "Пример 1. Возврат результата выполнения стандартного отчета в «свою» программу".
Есть стандартный класс, который позволяет получить данные стандартного отчета и использовать их в своей разработке -  класс CL_SALV_BS_RUNTIME_INFO.
Технология используется в этотм классе такая же -  данные итоговой таблицы отчета записываются в память, и затем вычитываются из памяти.
если использовать этот класс, не придется делать ENH.
Запись каталога объекта: изменение системы оригинала (6)

Комментарий от  

Олег Точенюк

  |  04 января 2017, 16:42

Руслан Бурхонов 29 декабря 2016, 09:05

Для массового изменения системы оригинала скажем для всего пакета необходимо выделить выделить узел пакета (выделяться все объекты пакета) и набрать в поле для транзакций функциональный код MASS.

Если честно ничего не понял, где нужно выделить узел пакета с содержимым. Можно экран примера?
Подход к реализации больших форматированных отчетов в SAP BW (2)

Комментарий от  

Виталий Глущенко

  |  29 декабря 2016, 13:59

И еще вопрос про пункт
"3.3.5. Подготовка пользовательской транзакции, которая готовится на основе разработки из предыдущего пункта."
Не совсем понял, как предлагается работать пользователям.
Я правильно понял, что небольшие отчеты они по прежнему могут формировать напрямую из Excel через BW-BEx Analyzer или SBOP Analysis for Office, а для ресурсоемких отчетов он должен открыть SAP Logon, войти в систему и запустить отдельную транзакцию, которая выгрузит данные в Excel?
Подход к реализации больших форматированных отчетов в SAP BW (2)

Комментарий от  

Виталий Глущенко

  |  29 декабря 2016, 13:54

Познавательно, а какие рекомендации будут если нужно выгружать 10 000 000 ячеек? Это отчеты со 100 000 строк и более.
Запись каталога объекта: изменение системы оригинала (6)

Комментарий от  

Руслан Бурхонов

  |  29 декабря 2016, 09:05

Олег Точенюк 06 декабря 2016, 12:58

Ну оно ручками как-то, если вам надо сменить систему оригинала для сотни, другой объектов, короче не кошерно будет. Да и устанете. Поэтому есть такой вот отчетик: RSWBO_OBJCAT. Читаем документацию по его использованию и работаем.
 
======================================================================
Short text
Change Object Directory Entries
 
Purpose
This program enables you to change local and global object directory entries.
 
It is aimed particularly at cleaning up inconsistencies between local and global object directory entries.
 
Caution
This program can cause inconsistencies if used incorrectly.
The changes are not recorded. Include the changed objects manually in a request, and then transport the request.
Description
Select objects on the selection screen by entering a request or specifying the attributes of the object directory.
 
You then see a list of objects with the local original system, the global original system, the person responsible, and the package. You now have the option of selecting the objects, and copying the local original system to the global object directory, or copying the global object directory to the local original system.
 
Note the following:
Objects with the generation flag are not selected.
If the global original system is not filled, then there is no entry in the global object directory, and no entry can be included in the global object directory.
Objects from $ or T packages, or objects with generation flags are not included in the global object directory.
Prerequisites
You need administration authorization in the Transport Organizer area.
======================================================================

Для массового изменения системы оригинала скажем для всего пакета необходимо выделить выделить узел пакета (выделяться все объекты пакета) и набрать в поле для транзакций функциональный код MASS.
Запись каталога объекта: изменение системы оригинала (6)

Комментарий от  

Вячеслав Шиболов

  |  06 декабря 2016, 19:16

Олег Точенюк 06 декабря 2016, 12:58

Ну оно ручками как-то, если вам надо сменить систему оригинала для сотни, другой объектов, короче не кошерно будет. Да и устанете. Поэтому есть такой вот отчетик: RSWBO_OBJCAT. Читаем документацию по его использованию и работаем.
 
======================================================================
Short text
Change Object Directory Entries
 
Purpose
This program enables you to change local and global object directory entries.
 
It is aimed particularly at cleaning up inconsistencies between local and global object directory entries.
 
Caution
This program can cause inconsistencies if used incorrectly.
The changes are not recorded. Include the changed objects manually in a request, and then transport the request.
Description
Select objects on the selection screen by entering a request or specifying the attributes of the object directory.
 
You then see a list of objects with the local original system, the global original system, the person responsible, and the package. You now have the option of selecting the objects, and copying the local original system to the global object directory, or copying the global object directory to the local original system.
 
Note the following:
Objects with the generation flag are not selected.
If the global original system is not filled, then there is no entry in the global object directory, and no entry can be included in the global object directory.
Objects from $ or T packages, or objects with generation flags are not included in the global object directory.
Prerequisites
You need administration authorization in the Transport Organizer area.
======================================================================

Олег, для сотни да. Труднова-то.
Спасибо за комментарий
Запись каталога объекта: изменение системы оригинала (6)

Комментарий от  

Олег Точенюк

  |  06 декабря 2016, 12:58

Ну оно ручками как-то, если вам надо сменить систему оригинала для сотни, другой объектов, короче не кошерно будет. Да и устанете. Поэтому есть такой вот отчетик: RSWBO_OBJCAT. Читаем документацию по его использованию и работаем.
 
======================================================================
Short text
Change Object Directory Entries
 
Purpose
This program enables you to change local and global object directory entries.
 
It is aimed particularly at cleaning up inconsistencies between local and global object directory entries.
 
Caution
This program can cause inconsistencies if used incorrectly.
The changes are not recorded. Include the changed objects manually in a request, and then transport the request.
Description
Select objects on the selection screen by entering a request or specifying the attributes of the object directory.
 
You then see a list of objects with the local original system, the global original system, the person responsible, and the package. You now have the option of selecting the objects, and copying the local original system to the global object directory, or copying the global object directory to the local original system.
 
Note the following:
Objects with the generation flag are not selected.
If the global original system is not filled, then there is no entry in the global object directory, and no entry can be included in the global object directory.
Objects from $ or T packages, or objects with generation flags are not included in the global object directory.
Prerequisites
You need administration authorization in the Transport Organizer area.
======================================================================
Расширения системы (Enhancement Framework). Часть 1 (4)

Комментарий от  

Олег Точенюк

  |  01 декабря 2016, 13:20

Александр Неловкин 01 декабря 2016, 10:46

Олег, по поводу: "...Так как обычно внутри метода вызывается код работающий с внутренними переменными, доступа к которым мы внутри своей реализации класса не имеем..." (это касаемо Pre, Post или Overwrite)
 
Мы имеем доступ ко всем атрибутам и методам класса (и приватным в том числе). Обращаться к ним можно CORE_OBJECT-><имя атрибута/метода>

Не нравится мне такой доступ, это как по мне аналогично доступам через ASSIGN, можно, но потом проблем можно отгрести :-(
Расширения системы (Enhancement Framework). Часть 1 (4)

Комментарий от  

Олег Точенюк

  |  01 декабря 2016, 13:18

Юрий Слободчиков 01 декабря 2016, 04:55

> так как последняя переменная в структуре содержит объявление, заканчивающееся запятой, а объявление расширения вклинивается в эту структуру, то мы получаем проблему, которую в принципе решить невозможно
 
На самом деле можно поставить DATA: или TYPE: перед добавлением нового поля и всё должно работать.
 
Например:
data:    begin of bvttab occurs 20,
           bvtyp(50) type c,
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Структ. BVTTAB, Выход                                                                                                                             S
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  ZZZZZ.    "active version
DATA:           zz_bvtyp_ext(10) TYPE c.
ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*
         end of bvttab.

Хороший вариант, спасибо.
Расширения системы (Enhancement Framework). Часть 1 (4)

Комментарий от  

Александр Неловкин

  |  01 декабря 2016, 10:46

Олег, по поводу: "...Так как обычно внутри метода вызывается код работающий с внутренними переменными, доступа к которым мы внутри своей реализации класса не имеем..." (это касаемо Pre, Post или Overwrite)
 
Мы имеем доступ ко всем атрибутам и методам класса (и приватным в том числе). Обращаться к ним можно CORE_OBJECT-><имя атрибута/метода>