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

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


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

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


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

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