Текущее время: Пн, авг 04 2025, 07:17

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 14:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Пономарев Артем написал:
В общем случае - да.
В методе POST_DOCUMENT - индифферентно.
Все проверки выполнены, ошибок нет.

Так не бывает, что нет ошибок.
Любой из ф.м. в update-процессе может свалиться с ошибкой.
В этом случае все V1-модули должны быть откачены назад. Это очень важный принцип.
Если сделать CALL FUNCTION ... STARTING NEW TASK, то всё, что было да, закоммитится в БД. Результат — неконсистентность.

Поэтому всё нужно запускать непосредственно перед update-процессом. Как правило, такие экзиты парами ходят.

А вот если, например, захотите сделать прямой апдейт ANLA, тогда добро пожаловать в update-процесс.

Пономарев Артем написал:
Если вызывать свой ФМ как апдейт таск, то вовсе не факт, что изменения, выполненные в нем, попадут в БД.

Вот интересно, как это может быть? Если свой update-модуль прицепить к SAPовскому LUWу, то он может не сработать? Или имеется в виду, что последующие модули могут перезаписать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 14:13 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Цитата:
Вот интересно, как это может быть? Если свой update-модуль прицепить к SAPовскому LUWу, то он может не сработать? Или имеется в виду, что последующие модули могут перезаписать?


В моем случае к примеру если просто вызвать БАПИ и потом commit work то все-таки изменение ОС происходит, но потом затирается САПом...
А если вставить БАПИ (без какого-либо коммита) в ФМ обновления то обновление прерывается...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 14:16 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Для MB_MIGO_BADI имеется нейкий пример внедрения CL_EXM_IM_MB_MIGO_BADI "Example Implementation for BADI Definition MB_MIGO_BADI". Там в примере для POST_DOCUMENT:

Code:
* The data from external detail screen can be saved now:
  CHECK gt_extdata IS NOT INITIAL.
  CALL FUNCTION 'MIGO_BADI_EXAMPLE_UPATE_DATA' IN UPDATE TASK
    TABLES
      it_migo_badi_example = lt_migo_badi_example.
* The data from external header screen can be saved now:
  MOVE-CORRESPONDING is_mkpf TO gs_exdata_header.
  CALL FUNCTION 'MIGO_BADI_EXAMPLE_UPDATE_HEAD' IN UPDATE TASK
    EXPORTING
      is_migo_badi_header_fields = gs_exdata_header.

ENDMETHOD.                    "IF_EX_MB_MIGO_BADI~POST_DOCUMENT


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 14:17 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Ну если подробно то так:
Предыстория: есть такой заказ на поставку, в котором один материал списывается, а другой принимается "на его место".
При проведении приемки необходимо скопировать классификацию из списываемой партии в принимаемую.

В процессе вызывается метод MB_DOCUMENT_BEFORE_UPDATE.

Изначально выполнял копирование классификации в апдейт таске, запущенном в этом методе. В БД ничего не попадало. Потом прочитал описание метода, подумал и посмотрел код со стеком вызовов :). Пришлось делать через нью таск. Так что может, еще как может.

Кстати, если быть формалистом, то CALL FUNCTION ... STARTING NEW TASK не всегда приводит к неявному коммиту.

To bossjohn: А какая ошибка то? Что в письме приходит?

UPD: Про коммит я погорячился. САПовская старая справка пишет may. Но серия экспериментов и help.sap.com показали always.


Последний раз редактировалось Пономарев Артем Пт, ноя 30 2007, 14:53, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 14:30 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Цитата:
Обновление прервано

Ид. системы.. DEV
Мандант...... 400
Пользователь USER_1
Транзакция... MIGO
Ключ обновления 474E8F45F6B60AE8E10000000A30042B
Создано...... 30.11.2007, 14:22:36
Выполнено.... 30.11.2007, 14:22:37
ИнформПоОшибке 00 671: ABAP-процессор: POSTING_ILLEGAL_STATEMENT

это если ФМ обновления с отлож запуском. вызван in update task
в случаем ФМ дистанционный модуль вызванного STARTING NEW TASK по прежнему никаких изменений


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 15:21 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
bossjohn написал(а):
это если ФМ обновления с отлож запуском. вызван in update task

Документация к POST_DOCUMENT написал(а):
The external application can also be transferred for posting at the time of its own update function modules (CALL FUNCTION IN UPDATE TASK).

Может быть обёртка для BAPI_FIXEDASSET_CHANGE должна быть типа "Немедл. запуск обновления не может быть обновлен дополн-но.", а не "Немедленный запуск обновления"?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 15:34 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Цитата:
Может быть обёртка для BAPI_FIXEDASSET_CHANGE должна быть типа "Немедл. запуск обновления не может быть обновлен дополн-но.", а не "Немедленный запуск обновления"?

Так вся идея была чтобы применить изменения после того как применит их САП.
Порылся в коде и вышел на такую вещь:
Code:
    IF NOT lcl_migo_globals=>if_badi IS INITIAL.
      CALL METHOD lcl_migo_globals=>if_badi->post_document
        EXPORTING
          it_mseg = lt_xmseg
          is_mkpf = ls_xmkpf.
    ENDIF.
    CALL METHOD goods_movement_post
      IMPORTING
        es_emkpf_old = ls_emkpf.
    EXIT.   


т.е. в бади я изменил значит ОС, а потом в методе goods_movement_post
САП его изменил по новой и применил коммит - вот мои изменения и пропали....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 17:00 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
И еще одно наблюдение - при вызове ФМ starting new task
BAPI пишет что основное средство уже находится в моей обработке.
и соотв. изменения тоже не применяются


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 17:11 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
starting new task'ом можно решить любую проблему.

Но и минусов хватает.
Лично я использую только как крайнее средство или при остром дефиците времени. Приведенный пример про использование в MIGO - относится ко второму.

Теперь по теме. Т.к. starting new task не накладывает никаких ограничений, то поступаем просто:
1. Пишем формочку, которая проверяет, залочен ли ассет или нет.
2. Если да - ждем пару секунд. Вызываем саму себя.
3. Если нет - устанавливаем флаг выхода из формы.
4. Правим ассет.
5. Если флаг выхода установлен - выходим из обаботки.

Флаг выхода, естественно, должен быть глобальным на уровне группы функций.
Рекурсия рулит :)

Еще вариант решения вашей проблемы:
Создаете синглтон (класс, которые может иметь только один инстанс).
В вашем расширении создаете объект. Передаете в него нужную инфу.
Находите экзит или расширение, которые отрабатывают при изменении ОСа. В найденном расширении получаете ссылку инстанс класса. И заполняете нужные данные, вытягивая их из своего объекта.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 17:15 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Спасибо буду обдумывать варианты


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 18:21 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
А если написать в POST_DOCUMENT?
Code:
  CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE' IN BACKGROUND TASK


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 30 2007, 22:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Alex80 написал:
А если написать в POST_DOCUMENT?
Code:
  CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE' IN BACKGROUND TASK

В данном случае, что STARTING NEW TASK, что IN BACKGROUND TASK, разницы большой нету. Разве что последнее к ресурсам бережнее относится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 05 2007, 16:15 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Возникла трудность:
если запускать BAPI из ФМ вызванного как starting new task,
то он не изменяет ОС и пишет:
Цитата:
Записи в справочнике МОЛ не существует

но если его вызывать непосредственно то все нормально...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 05 2007, 16:19 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Ну конечно, надо ждать, пока параллельный процесс закончит работу.
Например, добавочкой PERFORMING ... ON END OF TASK.


Последний раз редактировалось sibrin Ср, дек 05 2007, 16:33, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 05 2007, 16:22 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Помоему bossjohn невнимательно читал мой последний пост :)

sibrin, не везде это возможно. Версии, будь они неладны.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB