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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Провести второй док материала на основе первого проведённого из MIGO
СообщениеДобавлено: Ср, авг 13 2008, 09:03 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Воапрос: как провести второй док материала на основе первого проведённого из MIGO.

Тема эта уже несколько раз обсуждалась, но вот нормального решения я так и не увидел.

Варианты
1) "IF_EX_MB_MIGO_BADI~POST_DOCUMENT вызываешь ФМ BAPI_GOODSMVT_CREATE в режиме IN BACKGROUND TASK или IN NEW TASK"

Но на это момент первый документ ещё не сохранен - он только отправляется на сохранение, соответственно если так делать то надо в новом процессе ждать когда появится документ в БД.

2) вызываешь ФМ BAPI_GOODSMVT_CREATE в режиме IN BACKGROUND TASK или IN NEW TASK из модуля обновления который выполняется IN UPDATE TASK

Однако вызов таких штук приводит к неявному database commit что в итоге может перевести к не консистентности БД

3) Вызвать из модуля обновления ФМ BP_EVENT_RAISE оно вроде commit не вызывает, ну и обработать событие

Событие обрабатывается в фоновом задании под тем пользователем под которым оно запланировано (а не инициировано)


По всей видимости надо развивать вариант 1 но уж больно както ...


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
1.Верный способ дождаться создания документа материала - в цикле проверять блокировку на запись (например блокировку запаса материала на заводе или блокировку партии).
2.
Цитата:
Однако вызов таких штук приводит к неявному database commit что в итоге может перевести к не консистентности БД

Где происходит вызов неявного commit при call funcion .. in background task? :?

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


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

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Удав написал(а):
2.
Цитата:
Однако вызов таких штук приводит к неявному database commit что в итоге может перевести к не консистентности БД

Где происходит вызов неявного commit при call funcion .. in background task? :?


Согласен тут я ошибся. ФМ запускается при Commit work в вызывающей программе.

а STARTING NEW TASK однозначно вызывает commit

проверил всё это эксперементально.
-----------
Так что наверно можно сделать вызов ФМ in background task из модуля обновления


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, авг 14 2008, 08:54 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Сдается мне, какая-то у Вас путаница.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 12:15 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Всем привет.
Хочу поднять эту тему - как наиболее грамотно создавать второй документ материала при проводке в migo?
Задача - сохранить консистентность БД и чтобы либо оба документа материала создавались, либо - оба нет.
Сейчас в голове крутится запускать бапи BAPI_GOODSMVT_CREATE в программе обработки выходного документа к первому материалу. Вопрос - что делать, если на выходе бапишики есть сообщения с ошибками, чтобы не допустить сохранения первого документа материала. Выдать message e?
Что скажете?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 12:35 
Модератор
Модератор
Аватара пользователя

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 12:42 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Ну, сторнировать 1-й, если не провелся второй - это запасной вариант. Но как-то не хочется плодить в системе лишние документы.

Поэтому вопрос формулирую именно так - есть ли реальный способ создать два документа материала в единой транзакции?
Слово "транзакция" я здесь использую в обычном программистском смысле, а не в саповском: либо оба документа создаются, либа оба - нет

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 13:20 
Модератор
Модератор
Аватара пользователя

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 13:23 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Может быть попробовать воспользоваться BADI MB_MIGO_BADI и методом POST_DOCUMENT. Позвать в нем update task бапишку и там, если ошибка сделать ROLLBACK.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 13:40 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Lars написал:
Может быть попробовать воспользоваться BADI MB_MIGO_BADI и методом POST_DOCUMENT. Позвать в нем update task бапишку и там, если ошибка сделать ROLLBACK.

Так первый документ все одно останется в системе. Его, понятное дело, можно и нужно сторнировать. Но LKU хочет транзакцию и отсутсвие мусора...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 13:49 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
А точно ли он останется? Если это будет update v1, то должен будет откатиться и главный документ, тем более, что в очереди апдейтов, как мне кажется, первым будет второй документ (хотя это не должно иметь значения для v1, вроде бы).

Попробовал сейчас. Вродебы получилось то что надо. Или мне просто этого очень хотелось :)

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 14:12 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Документы по запасу не связаны. Я хочу реализовать списание материалов при выдаче в эксплуатацию. Первый документ материала - списание. Второй - поступление этого же материала и в этом же количестве на забалансовый завод.

to lars: Я потому и подумал про выходные документы, что они, насколько я знаю, запускаются in update task. Во всяком случае, если в выходных документах есть ошибка, то пользователю приходит сообщение об оштибке обновления и документ материала не сохраняется, это я точно знаю.

В общем, буду эксперементировать.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 14:45 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Вы правы, можно, просто сделать mesaage типа E.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 18:43 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Написал тестовую программу. Использовал свою первоначальные идеи:
- вызов бапи в программе обработке выходных документов
- message e в случае проблем.
Update task при вызове бапи не использовал, так как выходные документы уже вызываются в апдейт таске.

Вроде на первый взгляд все красиво:
- если все в порядке, то журнал сообщений выходных документов для 1-го документа материала пишется номер второго документа материала, чтобы потом легче было искать.
- если при создании вторго документа материала есть проблемы, то и первый не сохраняется и пользователю приходит ошибка обновления.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Провести второй док материала на основе первого проведённого
СообщениеДобавлено: Пт, янв 16 2009, 19:09 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
А мне с энханметном все равно больше нравится.
Бо ошибки сразу в лог создания документа материала сыпятся. В MIGO, например, очень user friendly получается :)

Про то, что первый останется - это я, конечно, неправ был. Перестраховался.


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

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


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

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


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

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