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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Доработка Заказа клиента
СообщениеДобавлено: Вт, мар 11 2008, 13:51 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Вопрос такой: необходимо сделать доработку для заказа клиента - транзакция VA01, VA02.
Требуется сделать специальную операция после сохранения документа. Пожскажите, как это сделать. Я нашел в программе SAPMV45A User_exit для сохранения документа, и для Prepare_save.
А вот чтобы было после сохранения документа.
Собственно проблема такая. Для Заказа под закупку необходимо добавить условие поиска партий в транзакцию VCH1. Проблема в том, что это можно сделать когда уже есть заказ клиента, так как система проверяет есть ли ввереддным данным заказ клиента...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 11 2008, 15:36 
Начинающий
Начинающий

Зарегистрирован:
Вс, июл 24 2005, 12:32
Сообщения: 12
Êàê âàðèàíò:
ïðè ñîõðàíåíèè çàáðàñûâàåì â ïàìÿòü íîìåð äîêóìåíòà
ïîäïðîãðàììà USEREXIT_REFRESH_DOCUMENT(SAPMV45A) - ñðàáàòûâàåò ïîñëå commit work - ñ÷èòûâàåì èç ïàìÿòè íîìåð è ïðîèçâîäèì íåîáõîäèìûå ìàíèïóëÿöèè, ÷èñòèì ïàìÿòü.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 11 2008, 15:44 
Гуру-модератор
Гуру-модератор
Аватара пользователя

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 12 2008, 08:55 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Приветствую.
1:
Как вариант:
при сохранении забрасываем в память номер документа
подпрограмма USEREXIT_REFRESH_DOCUMENT(SAPMV45A) - срабатывает после commit work - считываем из памяти номер и производим необходимые манипуляции, чистим память.
--------------------------
Не понял до конца. А если документ новый, то номер появляется только при сохранении документа. Как быть в этом случае?


2:
Обычно все действия, которые надо сделать после commit work при сохранении документа, вешают на программу обработки выходных документов.
---------------------
Здесь тоже не совсем понял! А если в документе нет выходных документов? И если их не будут печатать. Как быть в этом случае?
И подскажите какая это программа?


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

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
hub2002 написал(а):
Обычно все действия, которые надо сделать после commit work при сохранении документа, вешают на программу обработки выходных документов.
---------------------
Здесь тоже не совсем понял! А если в документе нет выходных документов? И если их не будут печатать. Как быть в этом случае?
И подскажите какая это программа?


Я имел в виду, что создается свой вид выходного документа, настраивается, чтобы этот вид выходного документа попадал в выходные документы вашего заказа.
Ну и к этому виду выходного документа пишете свою программу обработки, в которой делаете что вам нужно. Просто выходные документы - удобная технология, так как
1. запускается в фоне после сохранения основного документа
2. мы добиваемся выхозова программы обработки при помощи стандартных настроек выходных документов - это достаточно прозрачно для консультантов, которые придут на ваше место после вас
3. на вход программы обработки как раз подается номер сохраненного документа

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 12 2008, 10:43 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
в каком-нибудь экзите (отрабатывающем при сохранении заказа) запустить ФМ (функц.модуль обновления) в update task, в котором и реализовать нужные действия.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 12 2008, 11:35 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Приветствую.
1:
в каком-нибудь экзите (отрабатывающем при сохранении заказа) запустить ФМ (функц.модуль обновления) в update task, в котором и реализовать нужные действия.
--- Не очень понял. А если новый документ, как мне получить его номер? И какой функциональный модуль использовать?

2:
Идея с выходными документами мне нравится. Но:
- Моя программа обработки запуститься сразу же при сохранении документа, или при выводе на печать настроенного выходного документа? Для меня это важно... Так как, сразу же при сохранении документа, необходимо создать запись условия...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 12 2008, 12:44 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan
hub2002 написал(а):
Приветствую.
1:
в каком-нибудь экзите (отрабатывающем при сохранении заказа) запустить ФМ (функц.модуль обновления) в update task, в котором и реализовать нужные действия.
--- Не очень понял. А если новый документ, как мне получить его номер? И какой функциональный модуль использовать?
..


И что если новый? Есть же экзиты в которых номер вновь создаваемого документа уже известен - student вам его подсказал: USEREXIT_REFRESH_DOCUMENT (MV45AFZA). Например, для подобных целей использовал как-то событие OPEN-FI 00501014, в котором в UPDATE TASK вызывал функциональный модуль (который сам же и создал, указав что это модуль обновления), где (в этом ФМ обновления) и реализовал пост-обновление нужных мне таблиц).

Кстати, суде по описанию, USEREXIT_REFRESH_DOCUMENT вызывается в тот момент когда заказ уже сохранен.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 14 2008, 16:52 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Спасибо огромное...
Все получилось...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, мар 14 2008, 17:19 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
hub2002 написал(а):
Приветствую.
1:
в каком-нибудь экзите (отрабатывающем при сохранении заказа) запустить ФМ (функц.модуль обновления) в update task, в котором и реализовать нужные действия.
--- Не очень понял. А если новый документ, как мне получить его номер? И какой функциональный модуль использовать?
..

Тогда уж лучше использовать USEREXIT_SAVE_DOCUMENT, т.к. USEREXIT_REFRESH_DOCUMENT немного не для этой цели предназначен...
Только запускать дальнейшую обработку нужно в режиме ..IN BACKGROUND TASK, чтобы быть уверенным, что заказ сохранился в БД.
Code:
*---------------------------------------------------------------------*
*       FORM USEREXIT_REFRESH_DOCUMENT                                *
*---------------------------------------------------------------------*
*       It is always necessary to refresh user-specific data before   *
*       the next document will be processed.                          *
*       This can be done in this userexit.                            *
*       This userexit can be used to refresh user-specific data       *
*       when the processing of a sales document is finished           *
*       - after the document is saved                                 *
*       - when you leave the document processing with F3 or F15       *
*       It may be necessary to refresh user-specific data before      *
*       the next document will be processed.                          *
*                                                                     *
*      This form is called in dialog at the end of form               *
*      BELEG_INITIALISIEREN                                           *
*                                                                     *

Code:
*---------------------------------------------------------------------*
*       FORM USEREXIT_SAVE_DOCUMENT                                   *
*---------------------------------------------------------------------*
*       This userexit can be used to save data in additional tables   *
*       when a document is saved.                                     *
*                                                                     *
*       If field T180-TRTYP contents 'H', the document will be        *
*       created, else it will be changed.                             *
*                                                                     *
*       This form is called at from form BELEG_SICHERN, before COMMIT *
*                                                                     *
*---------------------------------------------------------------------*

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 17 2008, 09:21 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
----------------------------------------------------------------------------------------
Тогда уж лучше использовать USEREXIT_SAVE_DOCUMENT, т.к. USEREXIT_REFRESH_DOCUMENT немного не для этой цели предназначен...
Только запускать дальнейшую обработку нужно в режиме ..IN BACKGROUND TASK, чтобы быть уверенным, что заказ сохранился в БД.
----------------------------------------------------------------------------------------

Тогда можно пояснить разницу. В настоящий момент обработка висит на USEREXIT_REFRESH_DOCUMENT - все работает...
Я так понимаю, что если делать на USEREXIT_SAVE_DOCUMENT, то необходимо создать свой функциональный модуль и вызывает его ..IN BACKGROUND TASK. Я правильно понимаю.
Если я правильно понял. Вопрос. Запуск данного дополнения произойдет в фоновом режиме, и соответственно не сразу после сохранения заказа. Я правильно все понимаю или нет ?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 17 2008, 09:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
hub2002 написал(а):
Я так понимаю, что если делать на USEREXIT_SAVE_DOCUMENT, то необходимо создать свой функциональный модуль и вызывает его ..IN BACKGROUND TASK. Я правильно понимаю.
Правильно.

hub2002 написал(а):
Запуск данного дополнения произойдет в фоновом режиме, и соответственно не сразу после сохранения заказа. Я правильно все понимаю или нет ?
Неправильно.

Нет такого понятия "сразу после", но есть понятие SAP LUW.
Так вот, если не ошибаюсь, USEREXIT_REFRESH_DOCUMENT может отработать как до, так и после завершения записи заказа в БД.

А в ф.м. зарегистрированным в SAP LUW в USEREXIT_SAVE_DOCUMENT можно делать изменения транзакционно, т.е. одновременно с заказом.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 18 2008, 08:59 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Хорошо спасибо...
Попробую переделать на save....
Спасибо еще раз...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 18 2008, 11:24 
Директор
Директор

Зарегистрирован:
Пт, окт 07 2005, 09:10
Сообщения: 752
Откуда: 4.6C
Пол: Мужской
Сорри, за небольшой оффтоп.
После прочтения большинства топиков на похожие темы у меня не сложилось твердого представления о преимуществах вызова ФМ IN BACKGROUND TASK перед IN UPDATE TASK (ФМ V2).
Оба вызываются в отдельном LUW, после завершения основного. В случае ошибки система будет пытаться оба выполнить еще раз.
У нас всего пару задач реализовано и обе с ФМ V2. Одна из них вызывается после создания любого финансового документа, даже если он родом из модуля. Накладок с невыполнением не было.


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

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Aval написал:
не сложилось твердого представления о преимуществах вызова ФМ IN BACKGROUND TASK перед IN UPDATE TASK (ФМ V2).
Отличия в порядке выполнения и в обработке ошибок. Как правило это не принципиально. Но есть безотносительное преимущество IN BACKGROUND TASK: он выполняется в отдельном процессе, поэтому не мешают глобальные данные в группах функций, которые могли использоваться в предшествующих V2-модулях.
В общем, qRFC даёт дополнительные возможности группировки и сериализации.

Вот интересно, когда мы проталкиваем в SM13 "зависшие" на ошибке V2-модули, то что происходит с qRFC очередью?


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

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


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

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


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

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