Текущее время: Чт, авг 07 2025, 20:55

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Пн, июн 15 2015, 09:49 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
Всем доброго дня.

Стоит передо мною следующая задача: при сохранении заказа в VA01/VA02 внести кое-какие изменения в конфигурацию позиций (имеющихся и добавляемых). Использовать для этих целей предполагается USEREXIT_SAVE_DOCUMENT_PREPARE в SAPMV45A.

Изначально консультантом было предложено использовать BAPI_SALESORDER_CHANGE, но, судя по всему, этот ФМ сам дергает программу SAPMV45A, что приводит либо к утыканию в блокировки, либо бесконечной рекурсии. Соответственно, сейчас стоит проблема в том, чтобы найти альтернативное решение.

Мне удалось найти пару вроде бы подходящих ФМ: CUCB_GET_CONFIGURATION и CUCB_SET_CONFIGURATION, которые я использую примерно следующим образом:

Code:
" Получаем текущую конфигурацию для позиции
CALL FUNCTION 'CUCB_GET_CONFIGURATION'
  EXPORTING
    instance = xvbap-cuobj
  IMPORTING
    configuration = lt_conf.

READ TABLE lt_conf INTO ls_conf INDEX 1.
... " Тут вношу какие-то изменения: добавляю записи, правлю существующие и т.п.

" У новых позиций OWNER не тот, что нужен. Подглядел, каким он должен быть у существующих.
ls_conf-owner-object_type = 'VBPS'.
ls_conf-owner-object_key = xvbap-vbeln && xvbap-posnr.

CLEAR lt_conf.
APPEND ls_conf TO lt_conf.

" Обновляем конфигурацию
CALL FUNCTION 'CUCB_SET_CONFIGURATION'
  EXPORTING
    root_instance = ls_conf-root
  IMPORTING
    configuration = lt_conf.


Для существующих позиций оно вроде работает, а вот для новых нет: никаких ошибок не выдается, но изменений не происходит. Видимо, это из-за того, что позиция еще не сохранена в БД. Пробовал завернуть указанный код в ФМ и вызывать его в UPDATE TASK (и V1, и V2) - не помогло.

Помогите, пожалуйста, довести этот подход до ума или найти более правильное решение. Буду премного благодарен :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Пн, июн 15 2015, 10:51 
Ассистент
Ассистент

Зарегистрирован:
Пн, ноя 24 2008, 13:53
Сообщения: 43
Откуда: Никополь
У меня была другая задача. Необходимо было при создании сбытового заказа (VA01) со ссылкой на другой сбытовой заказ переносить некоторые признаки конфигурации в копируемую позицию. Использовал userexit_cust_material_read в SAPMV45A. Читал из копируемой позиции CUCB_GET_CONFIGURATION, не нужное удалял, в новой позиции cuobj еще не был виден, методом тыка:) вызвал CUCB_CHANGE_CONFIGURATION во входной параметр передал cuobj из копируемой позиции и система сама разобралась и в новую позицию прописала нужную мне конфигурацию


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Пн, июн 15 2015, 11:58 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
Как-то это странно. CUCB_GET_CONFIGURATION ведь возвращает всего лишь копию значений - как он узнает, что что-то поменялось? Принцип работы CUCB_CHANGE_CONFIGURATION в этой ситуации и вовсе загадочен. Так или иначе, сейчас пытаюсь адаптировать сей подход под свои нужды, спасибо. Уже вижу, что действительно у новой позиции CUOBJ меняется - на момент сохранения он один (не знаю, откуда берется); после сохранения - уже другой.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Пн, июн 15 2015, 20:50 
Ассистент
Ассистент

Зарегистрирован:
Пн, ноя 24 2008, 13:53
Сообщения: 43
Откуда: Никополь
Ну люди ж делали:) По всей видимости модуль обновления сначала видит конфигурацию(набор признаков) что ему подсунули в память, а уже при апдейте гененерит cuobj со ссылками.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Вт, июн 16 2015, 09:45 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
Факир был пьян, факинг не удался.

Мои игрища с конфигурацией завязаны на позицию заказа на поставку, поэтому вместо USEREXIT_CUST_MATERIAL_READ пытаюсь использовать что-нибудь вроде USEREXIT_MOVE_FIELD_TO_VBAP (он вызывается после редактирования данных позиции). Увы, описанный фокус с вызовом CUCB_GET_CONFIGURATION/CUCB_CHANGE_CONFIGURATION никакого эффекта не дает.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Вт, июн 16 2015, 11:45 
Ассистент
Ассистент

Зарегистрирован:
Пн, ноя 24 2008, 13:53
Сообщения: 43
Откуда: Никополь
Вообще наверное все это не очень хорошо...:), ну так влазить в обработку конфигурации. Но если очень нужно, то в твоем случае можно поискать возможность уже после сохранения заказа выполнить следующую цепочку:
CUCB_GET_CONFIGURATION по уже сгенерированным CUOBJ затем в CUCB_CHANGE_CONFIGURATION передать нужную конфигурацию в CHANGING параметр, после вызвать CUCB_CONFIGURATION_HAS_OBJECT , CUCB_CONFIGURATION_TO_DB и C14Z_COMMIT_WORK. У меня так в z-тр-ции изменяется конфигурация при определенных условиях.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Вт, июн 16 2015, 12:46 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
Цитата:
Вообще наверное все это не очень хорошо...

Согласен, но бизнес есть бизнес: хотят и все тут.

Цитата:
можно поискать возможность уже после сохранения заказа выполнить следующую цепочку

В этом направлении тоже думаю, но пока не придумал, как привязаться именно к сохранению заказа.

Была мысль дернуть мою ФМ-ку со STARTING NEW TASK 'aaa' и там уже дожидаться, когда будут отпущены все блокировки на заказ. Однако тут две проблемы предвижу:
1. Если у пользователя уже открыто максимальное количество сессий, то этот вызов не отработает - нехорошо;
2. STARTING NEW TASK, как я понимаю, делается через RFC, что подразумевает неявный коммит - совсем нехорошо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Сб, июн 20 2015, 22:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
Code:
  userexit_move_field_to_vbap|userexit_save_document[_prepare]
    call method cl_cbase=>get_current_cbase_by_instance (iv_check_only_buffer=X, iv_instance=vbap-cuobj)
    call method cbase1->get_configuration
    call method cbase1->set_configuration
    call method cbase1->set_mark_for_saving
    сохранится при commit work в beleg_sichern(sapmv45a)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Изменение конфигурации позиции при сохранении в VA01/VA02
СообщениеДобавлено: Пн, июн 22 2015, 09:11 
Начинающий
Начинающий

Зарегистрирован:
Пн, июн 15 2015, 09:18
Сообщения: 17
trop, мега-спасибо, оно работает!
Вот оно как бывает: ищешь-ищешь, а решение все это время почти под носом лежало...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


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

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


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

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