Текущее время: Сб, авг 02 2025, 01:35

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: как делать User Exit?
СообщениеДобавлено: Вт, дек 04 2007, 12:32 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 10:29
Сообщения: 32
Не пинайте сильно - я в ABAP и SAP только начинаю, до этого долго на C++ программировал. Может поэтому мне сама система програмирования в SAP пока не совсем ясна.

У меня такое задание. Заранее извиняюсь, если буду сумбурно изъясняться - у меня в голове сейчас такой же сумбур...

Есть программа SAPMV45A, в ней есть INCLUDE MV45AFZZ. Это то, что мне показали... От меня хотят, чтобы я сделал программу-дополнение, которая бы при вводе новых заказов (transaction VA01) проверяла есть ли такой заказ в таблице MVKE.

Что мне непонятно? С чего начинать, какой порядок действий? Как вообще сделать этот User Exit? Я почитал всякие форумы, полистал книжки, но так и не нашел как это пошагово делать на практике.

Помогите, пожалуйста!


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Необходимо просто воспользоваться поиском по слову "MV45AFZZ"

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как делать User Exit?
СообщениеДобавлено: Вт, дек 04 2007, 15:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1006
Откуда: 37 МИКРОРАЙОН
Пол: Мужской
cbw07 написал(а):
Не пинайте сильно - я в ABAP и SAP только начинаю, до этого долго на C++ программировал. Может поэтому мне сама система програмирования в SAP пока не совсем ясна.

У меня такое задание. Заранее извиняюсь, если буду сумбурно изъясняться - у меня в голове сейчас такой же сумбур...

Есть программа SAPMV45A, в ней есть INCLUDE MV45AFZZ. Это то, что мне показали... От меня хотят, чтобы я сделал программу-дополнение, которая бы при вводе новых заказов (transaction VA01) проверяла есть ли такой заказ в таблице MVKE.

Что мне непонятно? С чего начинать, какой порядок действий? Как вообще сделать этот User Exit? Я почитал всякие форумы, полистал книжки, но так и не нашел как это пошагово делать на практике.

Помогите, пожалуйста!

Наверное вот так:
Code:
FORM USEREXIT_SAVE_DOCUMENT_PREPARE.

    SELECT SINGLE *
    INTO wa_mvke
    FROM mvke
    WHERE matnr = p_matnr AND
          vkorg = p_vkorg AND
          vtweg = p_vtweg.

      IF sy-subrc <> 0.
      MESSAGE e000(zmm00). "Заказ в MVKE не найден. 
      ENDIF.

ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 04 2007, 16:03 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 10:29
Сообщения: 32
ROKO

спасибо. Буду дальше мучать ABAP :P


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как делать User Exit?
СообщениеДобавлено: Вт, дек 04 2007, 20:35 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
cbw07 написал(а):
От меня хотят, чтобы я сделал программу-дополнение, которая бы при вводе новых заказов (transaction VA01) проверяла есть ли такой заказ в таблице MVKE.


Может я чего-то не понимаю, но содержит MVKE материалы (materials), а не заказы (orders). Наличие записи для материала проверяется стандартом, зачем тут user exit? :?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 05 2007, 10:12 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 10:29
Сообщения: 32
Это скорее я пока не все понимаю :D
Неправильно написал.
Действительно, нужна проверка есть ли уже материал с VKORG=0002.
Если его нет, то нужно сделать автоматически VBAK-FAKSK


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 05 2007, 20:59 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
А, ну тогда примерно как ROKO написал. Только у нас принято код писать в отдельном инклюде. Примерно такая композиция:

Code:
***INCLUDE MV45AFZZ .

include zsd_order_save.

<...>

FORM USEREXIT_SAVE_DOCUMENT_PREPARE.

   perform apply_billing_block.

ENDFORM.


И в INCLUDE ZSD_ORDER_SAVE:

Code:
FORM apply_billing_block.
  <вставить проверку сюда>
ENDFORM.


Естественно, к FORM можно добавить USING / CHANGING и т.д. по мере надобности. В коде ROKO вместо сообщения об ошибке присваиваете значение vbak-faksk. Можно информационное сообщение добавить, если надо.

Только помните, что user exits в SD немного отличаются тем, что они просто влеплены в инклюды. В других модулях встречается немного другая технология. Очень советую почитать курс BC425 на эту тему.

Успехов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 10 2007, 16:25 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 10:29
Сообщения: 32
не могу получить правильный номер материала при заполнении таблицы, чтобы использовать в SELECT...

Сделал для теста внутри
FORM USEREXIT_MOVE_FIELD_TO_VBAK
вывод сообщения с VBAP-MATNR.

Потом запускаю на тестирование, ввожу в таблицу номер, но в сообщении стоит вообще какой-то совсем другой номер.

Пробовал и в FORM USEREXIT_SAVE_DOCUMENT_PREPARE - тот же результат.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, дек 10 2007, 17:31 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
cbw07 написал(а):
не могу получить правильный номер материала при заполнении таблицы, чтобы использовать в SELECT...

Сделал для теста внутри
FORM USEREXIT_MOVE_FIELD_TO_VBAK
вывод сообщения с VBAP-MATNR.

Может стоит попробовать FORM USEREXIT_MOVE_FIELD_TO_VBAP?

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 11 2007, 11:52 
Ассистент
Ассистент

Зарегистрирован:
Пт, ноя 30 2007, 10:29
Сообщения: 32
спасибо за совет, так вроде номер правильно выдает в форме USEREXIT_MOVE_FIELD_TO_VBAP.

А могу я теперь написать внутри этой формы в своей проверке написать:
vbak-faksk = '01' ? Это сработает?
Или все, что касается изменения VBAK нужно делать в форме USEREXIT_MOVE_FIELD_TO_VBAK ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 11 2007, 19:58 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
cbw07 написал(а):
А могу я теперь написать внутри этой формы в своей проверке написать:
vbak-faksk = '01' ? Это сработает?
Или все, что касается изменения VBAK нужно делать в форме USEREXIT_MOVE_FIELD_TO_VBAK ?

Лучше делать в USEREXIT_MOVE_FIELD_TO_VBAK, т.к. эта процедура вызывается при любом изменении заголовка заказа.
USEREXIT_MOVE_FIELD_TO_VBAP соответственно вызывается при любом изменении позиции заказа, поэтому пользователь может поставить в заголовке vbak-faksk = '01', затем зайти в позицию, что-нибудь поменять, затем пойти в заголовок заказа и с читой совестью поменять vbak-faksk = '02', к примеру ;).

Вообще, проверки, которые касаются и заголовка, и позиций заказа, нужно проводить в процедуре USEREXIT_SAVE_DOCUMENT_PREPARE.
При этом данные заколовка будут в структуре XVBAK, данные позиций в таблице XVBAP.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 11 2007, 20:08 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Уважаемый cbw07, вам с самого начала уже умные люди советовали использовать USEREXIT_SAVE_DOCUMENT_PREPARE.

Возможно надо будет программировать и что-то на случай изменений блокировки (соответственно, обратите внимание на YVBAK и YVBAP, в дополнение к упомянутому выше), а то мы тут один раз так допрограммировались, что потом блокировку вообще никто снять не мог. :oops:

А вообще залезьте в Debugger да посмотрите, что там да как, поэкспериментируйте.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, дек 11 2007, 22:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Jelena написала:
Возможно надо будет программировать и что-то на случай изменений блокировки

А зачем там вообще блокировки трогать? :shock:

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


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

Зарегистрирован:
Пт, ноя 30 2007, 10:29
Сообщения: 32
Спасибо всем. В принципе работает.
Есть еще вопрос: как получить список всех материалов, внесенных в таблицу, чтобы на основе этого для каждого материала проверить надо ли менять vbak-faksk?

Проблема в следующем: уже есть заказ, его надо дополнить. В заказе есть материал, из-за которого надо поменять vbak-faksk.

Я сейчас дополняю заказ новым материалом, сохраняю. Потом при открытии смотрю - а vbak-faksk в заголовке не изменился. Т.е., как я понимаю, не все позиции просматриваются, а только последние внесенные, а с ними проблем нет - вот и не меняется vbak-faksk.


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

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Удав написал(а):
Вообще, проверки, которые касаются и заголовка, и позиций заказа, нужно проводить в процедуре USEREXIT_SAVE_DOCUMENT_PREPARE.
При этом данные заколовка будут в структуре XVBAK, данные позиций в таблице XVBAP.

Для изменения заголовка необходимо изменить данные в структуре XVBAK:
XVBAK-VAKSK = <Нужное значение>.
XVBAK-UPDKZ = 'U'. "Индикатор изменения заголовка заказа

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


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

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


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

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


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

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