Текущее время: Пт, авг 08 2025, 01:57

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


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

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


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

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