Текущее время: Сб, июл 26 2025, 04:21

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Пт, июл 29 2011, 11:23 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, апр 10 2006, 13:31
Сообщения: 51
Удав написал(а):
Тогда запускайте свой ФМ в IN BACKGROUND TASK и перед вызовом submit проверяйте отсутствие блокировки на материал.
В ФМ с IN BACKGROUND TASK, SUBMIT не отрабатывает.
Решил вызовом CALL TRANSACTION ... BDC .. MODE = 'N'.

Поясните пожалуйста(я с MM "дружу" недавно), необходимость проверки блокировки материала,
и если можно пример.

Удав написал(а):
Но имхо надежней это делать с помощью фоновой задачи, которая по расписанию будет собирать все созданные/измененные материалы и формировать для них IDOC.
Такой вариант тоже рассматривается, но пока работаю над тем что есть.

_________________
Даже если тебя съели, у тебя есть два выхода...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Пт, июл 29 2011, 12:53 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, июл 28 2011, 20:21
Сообщения: 88
Откуда: Кибертрон
Пол: Мужской
SVT написал(а):
Задача инициировать создание Idoc-а, с обновлёнными данными по сохранению ОЗМ (т.е. после COMMIT-а)
с помощью:
Удав написал(а):
Если вам нужно сохранить свои данные, используйте расширение MGA00001 и вызывайте там свой ФМ в режиме IN UPDATE TASK.
Пробовал, не вариант т.к. в этот момент таблицы БД не обновлены и Idoc фрмируется со старыми данными .


SVT, я бы все-таки использовал вариант Удава: пишем свою функцию путем копирования из EXIT_SAPLMGMU_001, чтобы интерфейс был одинаковый, не забываем поставить признак 'Update module'. Можно еще поставить ей атрибут 'Start delayed', чтобы она в процессе обновления вызывалась во второй очереди. В расширении вызываем свою функцию, передавая ей все поля с новыми данными и с дополнением IN UPDATE TASK. Так никаких селектов делать не надо, все данные будут переданы интерфейсом функц модуля. Вполне возможно, что на момент реального вызова своей функции таблицы будут уже обновлены - только эксперимент покажет.

Добавка 'IN BACKGROUND TASK' - это RFC вызов, срабатывающий по COMMIT WORK. Если не указываешь DESTINATION, то используется 'NONE'. Еcли 'NONE' не существует, то записи будут висеть в SM58, а система 30 раз через каждые 15 минут (это параметры по умолчанию) будет пытаться это сделать. Потом они повиснут в SM58 в красном цвете и через 8 дней (по стандарту) самоликвидируются.

Если в момент вызова новой функции данные уже обновлены, то можно вызвать еще одну функцию с добавкой 'STARTING NEW TASK', внутри которой попробовать вызвать SUBMIT. Работает почти также, как и IN BACKGROUND TASK, только не требует COMMIT WORK и в SM58 не попадает. Делает ли оно само COMMIT WORK - не знаю - эксперимент покажет.

Проверь destinataion NONE в SM59 и очередь SM58 (твои вызовы IN BACKGROUND TASK скорее всего там).

Максим.

_________________
Порхаю как пчела, жалю как бабочка.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Пт, июл 29 2011, 13:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
SVT написал(а):
Поясните пожалуйста(я с MM "дружу" недавно), необходимость проверки блокировки материала,
и если можно пример.

Вот здесь на последней картинке показано, зачем нужно проверять блокировки ;)
SVT написал(а):
Такой вариант тоже рассматривается, но пока работаю над тем что есть.

Дело в том, что при каждом сохранении материала будет вызываться отправка ФМ в отдельном диалоговом процессе.
Если будет происходить массовая загрузка ОЗМ(например, через LSMW), то существует вероятность, что все диалоговые процессы окажутся заняты.
В случае с отправкой IDOC по расписанию будет гарантированно занят лишь один процесс (в зависимости от настроек, конечно).

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Пт, июл 29 2011, 13:51 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 11 2008, 17:36
Сообщения: 84
Откуда: Moscow
Пол: Мужской
ALE-распределение использовать не вариант?

http://help.sap.com/saphelp_nw04/helpda ... ameset.htm

_________________
CONTINUE OBSERVATION OF... INTERRUPTION!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Пт, июл 29 2011, 14:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
niemda написал:
ALE-распределение использовать не вариант?

Вроде вариант :)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Пт, июл 29 2011, 15:05 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, апр 10 2006, 13:31
Сообщения: 51
mzernov написал:
SVT, я бы все-таки использовал вариант Удава: пишем свою функцию путем копирования из EXIT_SAPLMGMU_001, чтобы интерфейс был одинаковый, не забываем поставить признак 'Update module'. Можно еще поставить ей атрибут 'Start delayed', чтобы она в процессе обновления вызывалась во второй очереди. В расширении вызываем свою функцию, передавая ей все поля с новыми данными и с дополнением IN UPDATE TASK. Так никаких селектов делать не надо, все данные будут переданы интерфейсом функц модуля. Вполне возможно, что на момент реального вызова своей функции таблицы будут уже обновлены - только эксперимент покажет.
Максим.
Максим спасибо. Эксперимент показал что:
Code:
* Try call FM as 'Update Module' with 'Start delayed'
* This test call send error message into sap-mail
  call function 'ZTESTSUBMIT' IN UPDATE TASK
        EXPORTING matnr = WMARA-MATNR .
- Не подходит.
А прямой вызов в инклуде 'ZXMG0U02' (как уже писал) тянет в формируемый Idoc старые(не изменённые) данные (краткий текст матрериала например).

Что получилось - в тр. MM02(после COMMIT-a) вызвать в 'Дистанционный' модуль с SUBMITOM с 'IN BACKGROUND TASK'.

Смотрел MB58 - "оседают" все мои вызовы ФМ - 'ZTESTSUBMIT'. Гоже ли это? :?


Удав, niemda, спасибо за наводки, по-свободе буду посмотреть,
но пока - срочно "рубим лес отплёвываясь щепой". :x

_________________
Даже если тебя съели, у тебя есть два выхода...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 14:15 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, июл 28 2011, 20:21
Сообщения: 88
Откуда: Кибертрон
Пол: Мужской
А ты пробовал своей функции, кот ты с IN UPDATE TASK вызываешь, ставить атрибут "Start delayed"? Есть вероятность, что в этом случае он будет вызван уже после того, как таблицы обновлены. Нужен еще один эксперимент, если не пробовал.
Цитата:
Что получилось - в тр. MM02(после COMMIT-a) вызвать в 'Дистанционный' модуль с SUBMITOM с 'IN BACKGROUND TASK'.

Модуль с IN BACKGROUND TASK надо вызвать в расширении MGA00001, а выполнится он на самом деле после COMMITа, но, скорее всего, это не поможет, так как таблицы не будут обновлены. Можно в модуле с IN BACKGROUND TASK заблокировать материал с ожиданием - материал заблокируется, когда все апдейты выполнятся, ты сможешь запостить IDoc с новыми данными.
Цитата:
Смотрел MB58 - "оседают" все мои вызовы ФМ - 'ZTESTSUBMIT'. Гоже ли это?

Это не гоже. У тебя проблемы с destination 'NONE'. Иди в SM59 и проверяй. По умолчанию NONE должен быть локальным сервером.

_________________
Порхаю как пчела, жалю как бабочка.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 14:45 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
mzernov написал:
А ты пробовал своей функции, кот ты с IN UPDATE TASK вызываешь, ставить атрибут "Start delayed"? Есть вероятность, что в этом случае он будет вызван уже после того, как таблицы обновлены. Нужен еще один эксперимент, если не пробовал.

Так ведь не получится так, потому что человек упорно пытается в процессе обновления вызвать SUBMIT который инициирует коммит что не допустимо конечно. С атрибутом "Start delayed" ФМ выполнится в том же процессе обновления только в другом LUW. Да, он будет вызван когда данные закоммитятся в таблицах, когда то я делал такое. Это есть процесс V2.

mzernov написал:
Модуль с IN BACKGROUND TASK надо вызвать в расширении MGA00001, а выполнится он на самом деле после COMMITа, но, скорее всего, это не поможет, так как таблицы не будут обновлены. Можно в модуле с IN BACKGROUND TASK заблокировать материал с ожиданием - материал заблокируется, когда все апдейты выполнятся, ты сможешь запостить IDoc с новыми данными.

Блокировать с ожиданием. Я бы не советовал так делать, потому что будет только определённое кол-во попыток блокировать и ждать он тоже может определенное кол-во времени. Лучше использовать цикл и проверять пока блокировка не снимется тр mm01. Не суть важно, в общем подход, проверять блокировку материала, когда она снимется, значит данные закоммитились, это то о чем Удав писал, там есть подводные камни.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 14:53 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, апр 10 2006, 13:31
Сообщения: 51
mzernov написал:
Это не гоже. У тебя проблемы с destination 'NONE'. Иди в SM59 и проверяй. По умолчанию NONE должен быть локальным сервером.
Зашел в SM59. RFC Destination -'NONE', Connection Type - 'I' (Internal Connection.).
Всё, вроде, верно...
Какого плана должны быть проблемы? Чего не хватает?
Во что выльется накопление сообщений в SM58?

_________________
Даже если тебя съели, у тебя есть два выхода...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 15:17 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, июл 28 2011, 20:21
Сообщения: 88
Откуда: Кибертрон
Пол: Мужской
SVT написал(а):
Во что выльется накопление сообщений в SM58?

Самое лучшее - самоликвидируются. Самое худшее - выполнятся все сразу в самый ненужный момент.
А в каком статусе зависли? Может, написано, почему висят?

Кстати, 'ZTESTSUBMIT' должна быть RFC enabled.

Еще можно попробовать вариант: Сделать ehnancement на выходе из функции MATERIAL_UPDATE_DB (там уже точно таблицы обновлены). В этом ehnancement вызвать свою функцию с STARTING NEW TASK (IN UPDATE TASK, IN BACKGROUND TASK не подойдут). В своей функции вызвать SUBMIT. Своя функция должна быть RFC enabled.

_________________
Порхаю как пчела, жалю как бабочка.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 16:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
mzernov написал:
(..IN BACKGROUND TASK не подойдут).

А почему не подойдут? :o
Про блокировки и "подводные камни" я писал, но с их учетом отрабатывать будет. :wink:

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


Последний раз редактировалось Удав Вт, авг 02 2011, 16:08, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 16:06 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, апр 10 2006, 13:31
Сообщения: 51
mzernov написал:
Самое лучшее - самоликвидируются. Самое худшее - выполнятся все сразу в самый ненужный момент.
А в каком статусе зависли? Может, написано, почему висят?

Висит в замечательном статусе "1 ÓÛÐÒÝëå IDOC's ÔÛï âØßÐ ÔÞÚ-âÐ MATMAS áÞ×ÔÐÝÞ." По поводу сообщений пока никакой информации.
Попробовал "Выполнить LUW F6" - статус сменился на "ThISend: bad tm type / connection closed (no data)".


'ZTESTSUBMIT' - RFC enabled (Дистанционный модуль ).
Вызов -
Code:
  call function 'ZTESTSUBMIT' in background task destination 'NONE' exporting matnr = MARA-MATNR.


mzernov написал:
Еще можно попробовать вариант: Сделать ehnancement на выходе из функции MATERIAL_UPDATE_DB (там уже точно таблицы обновлены). В этом ehnancement вызвать свою функцию с STARTING NEW TASK (IN UPDATE TASK, IN BACKGROUND TASK не подойдут). В своей функции вызвать SUBMIT. Своя функция должна быть RFC enabled.
Сначала использовал 'MATERIAL_UPDATE_DB', но констультант посоветовал ФМ - 'MATERIAL_WRITE_DOCUMENT' т.к. вызывается позже.

_________________
Даже если тебя съели, у тебя есть два выхода...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 16:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
SVT написал(а):
Вызов -
Code:
  call function 'ZTESTSUBMIT' in background task destination 'NONE' exporting matnr = MARA-MATNR.

А без DESTINATION ФМ пробовали вызывать?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 16:22 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, июл 28 2011, 20:21
Сообщения: 88
Откуда: Кибертрон
Пол: Мужской
Удав написал(а):
mzernov написал:
(..IN BACKGROUND TASK не подойдут).

А почему не подойдут? :o

Не подойдут, потому что я предлагал вызов в конце MATERIAL_UPDATE_DB, которая сама в UPDATE TASK вызывается, то есть после COMMIT, а для IN BACKGROUND TASK тоже COMMIT нужен, чтобы выполниться.
Цитата:
Висит в замечательном статусе "1 ÓÛÐÒÝëå IDOC's ÔÛï âØßÐ ÔÞÚ-âÐ MATMAS áÞ×ÔÐÝÞ."

Похоже, что функция все-таки вызывается и submit выполняется (так как слова IDoc и MATMAS вполне разборчиво написаны) - проверь в дебагере, может, там разборчивее? Может, и IDoc создается? Может, если в англ яз залогониться разборчивее будет?

_________________
Порхаю как пчела, жалю как бабочка.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Расширение при подтверждении тр.заказа
СообщениеДобавлено: Вт, авг 02 2011, 16:44 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, апр 10 2006, 13:31
Сообщения: 51
Удав написал(а):
А без DESTINATION ФМ пробовали вызывать?
Пробовал - работает.
Разница в сообщениях в SM58:
c DESTINATION написал(а):
ZMM_TEST_IDOC_CREATE sap-ides-testsys_00 02.08.2011 16:25:12 1 ÓÛÐÒÝëå IDOC's ÔÛï âØßÐ ÔÞÚ-âÐ MATMAS

без DESTINATION написал(а):
ZMM_TEST_IDOC_CREATE NONE 02.08.2011 16:25:37 1 master IDocs set up for message type MATMAS

- последний тест на 'EN'.

Правка. После прогона в SM58 в отладчике запись ликвидируется.

Правка2 и только конструкция:
Code:
call function 'ZCALLTRANSACTION' DESTINATION 'NONE' exporting matnr = N_MARA-MATNR .
- отрабатывает и не оставляет "следов" в SM58.

_________________
Даже если тебя съели, у тебя есть два выхода...


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

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


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

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


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

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