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

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


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

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


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

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