Текущее время: Пт, июл 25 2025, 06:06

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


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

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


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

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