Текущее время: Пт, июл 18 2025, 22:38

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Чт, фев 20 2014, 17:50 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Доброго всем дня!

Так уж получилось, что приходится создавать проформа-инвойсы из UPDATE TASK. Используется BAPI_INVOICE_CREATEMULTIPLE, который в свою очередь после создания инвойса запускает RV_INVOICE_REFRESH, в конце которого добрые руки немецких программистов разместили COMMIT WORK который с апдейт таском, как известно, не дружит. Занавес, вылет в дамп.

Несет ли какую-то смысловую нагрузку наличие коммита в данной функции и если вызывать ее из апдейт таска - можно ли убрать вызов коммита (там притаился энхансмент, через который можно выключить коммит)? Несколько боязно, так как наверняка была веская причина его туда поставить :D

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Чт, фев 20 2014, 17:55 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Тоже столкнулся с этим полгода назад.
Ковырялся, ковырялся, в итоге обернул вызов BAPI_INVOICE_CREATEMULTIPLE в Z-Фм, который вызывал асинхронно через CALL FUNCTION 'Z***' IN BACKGROUND TASK

_________________
Удача - результат нашего желания (© А. Нортон)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Чт, фев 20 2014, 23:41 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
То есть из функции А в UPDATE TASK-e вызывать функцию Б в BACKGROUND TASK-е? Желательно ли использовать нотацию AS SEPARATE UNIT?

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Пт, фев 21 2014, 08:22 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
У меня была задача сделать автофактрирование исходящей поставки при ОМ, вызов ФМ создания фактуры "IN BACKGROUND TASK" сделал еще до перехода потока управления по сохранению поставки в UPDATE TASK.
Поэтому тут вряд ли подскажу.

_________________
Удача - результат нашего желания (© А. Нортон)


Последний раз редактировалось LKU Пт, фев 21 2014, 09:28, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Пт, фев 21 2014, 09:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
dedzinatajs написал(а):
То есть из функции А в UPDATE TASK-e вызывать функцию Б в BACKGROUND TASK-е?

Так нельзя сделать, т.к. такой вызов - это неявный commit, который не допускается при обновлении.
Почему нельзя вызвать создание счета-проформы после вызова BAPI?

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Пт, фев 21 2014, 11:07 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Удав написал(а):
Так нельзя сделать, т.к. такой вызов - это неявный commit, который не допускается при обновлении.

Попробовал провести эксперимент - дампа нету, но и весь код, который оформлен как ФМ, вызываемая в бэкграунд таске - не отрабатывает.
Удав написал(а):
Почему нельзя вызвать создание счета-проформы после вызова BAPI?

Ну как бы сказать :) счет-проформу я как раз и создаю посредством BAPI_INVOICE_CREATEMULTIPLE.
Хронология такова - в апдейт таске стартует некий процесс, частью которого является в том числе и создание проформы. Проформа создается вызовом стандартной саповской БАПИ-функции BAPI_INVOICE_CREATEMULTIPLE, которая по окончании работы вызызвает стандартную саповскую функцию RV_INVOICE_REFRESH. В самом конце рефреш-функции прописан COMMIT WORK, но при этом его можно "задизэйблить" (там есть параметр WITH_POSTING, играя со значением которого можно убрать коммит - например, "H" свидетельствует о том что инвойс создается в симуляционных целях и коммит не делается). В данный момент так и сделал - временно ставлю WITH_POSTING "Z", после того как перепрыгивает через коммит, ставлю обратно старое значение. Вроде бы как работает, проформа создается - но не оставляет подспудное чувство легкой угрозы. Какие риски могут быть от таких трюков?

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH
СообщениеДобавлено: Пт, мар 07 2014, 18:07 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Выудил интересную дискуссию на схожую тему:
http://scn.sap.com/thread/1473168

Если обернуть вызов BAPI_BILLINGDOC_CREATEMULTIPLE в РФЦ-функцию и вызвать с параметром STARTING NEW TASK DESTINATION 'NONE' - будет нормально?

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: COMMIT внутри функции RV_INVOICE_REFRESH  Тема решена
СообщениеДобавлено: Пн, сен 01 2014, 17:41 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 15:54
Сообщения: 77
Таки идея была верна ;)

В общем, если надо вызвать код, содержащий COMMIT из UPDATE TASK - то его надо обернуть в Z-FM, продефинированный как Remote-enabled Function Call. Далее из UPDATE TASK можно вызывать Z-FM STARTING NEW TASK 'ZTEST' DESTINATION 'NONE' - и всё будет!

Надеюсь, кому-либо пригодится!

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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