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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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