Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SMOD/CMOD - Расширения => Тема начата: tmp20052006 от Октябрь 12, 2010, 05:31:05 pm
-
Возникла необходимость изменить свойства поля заголовка в MIGO (GOHEAD-LFSNR сделать недоступным для редактирования) при выполнении определённых условий (для поступления 101 ВДв по исходящей поставке). Может быть кто-то подскажет как правильнее всего (badi, exit-ы) будет решить такую проблему?
Спасибо.
-
Недоступным потому что вы туда свою информацию хотите занести, а пользователи это изменяют или что? А сделать свой вид движения на основании 101 и там закрыть поле?
-
По сути да - надо чтобы пользователи не меняли данные (номер исходящей поставки в этом поле). Потому что при сторно поступления, если при поступлении был указан не тот номер поставки, документ материала сторно не попадает в поток документов по исходящей поставке. А вид движения свой уже нельзя :(
-
Ну что можно сказать.. вообще-то можно и даже будет по факту в рамках стандарта ::), сначала читаем тут: http://sapforum.biz/index.php/topic,546.0.html, что такое энхансменты и как их можно использовать, лучше скачайте файл "Enhancement Spot 2.pdf" в этом же сообщении, там чуть подробнее расписано чем на форуме сейчас. Далее есть такой модуль: LMIGOSMC, в нем со строки 268 есть точка расширения: ENHANCEMENT-POINT FIELDSELECTION_01 SPOTS ES_SAPLMIGO, она находится внутри цикла LOOP AT SCREEN. <>. ENDLOOP. Этот цикл как раз идет по обновлению полей экрана заголовка и не только. Вставляем свой код в данную точку, что-то типа:
ENHANCEMENT 237 YTIV_MIGO_FLS_SELECTION. "inactive version
* Тест проверки возможности отключения ввода в поля
IF LS_FS-NAME = 'GOHEAD-LFSNR'.
LS_FS-WORK = '2'.
ENDIF.
ENDENHANCEMENT.
т.е. когда обрабатывается наше поле, то в переменой ставим признак 2, это значит поле для просмотра, если поставить 0, то вообще поле будет скрыто с экрана. Ну само собой вам надо проверить вид движения и что проводка идет к поставке, для этого смотрите переменные GOHEAD и GOITEM ну и вообще ставьте там точку останова и смотрите доступные переменные и что в них, думаю найдете при каких условиях надо отключать ввод в этом поле. Да кстати, в этой структуре LS_FS есть еще поля *_REQUIRED, так вот если у вас там будет стоять типа обязательность ввода, но поле будет закрыто от ввода, то само собой будут проблемы, поэтому смотрим чтобы поле небыло обязательным для ввода. По крайней мере я вот такой код вставил и поле стало при любых обстоятельствах доступным только для просмотра.
-
Спасибо!
По идее как раз именно то, что нужно.. проверить самому нет полномочий, но похоже должно помочь..
-
Всё получилось. В результате было сделано:
[b][size=8pt]ENHANCEMENT 235 Z_PTPCON_MM_ODEL_FIELDS. "active version
DATA:
l_bukrs TYPE bukrs.
IF ls_fs-name = 'GOHEAD-LFSNR' AND
godynpro-action = 'A01' AND
godynpro-refdoc = 'R05'.
IF gohead IS NOT INITIAL.
SELECT SINGLE bukrs FROM t001k INTO l_bukrs
WHERE bwkey = gohead-reswk.
CHECK l_bukrs IS NOT INITIAL.
IF l_bukrs = 'наша БЕ'.
ls_fs-work = '2'.
ENDIF.
ENDIF.
ENDIF.
ENDENHANCEMENT.[/size][/b]
Выяснился один момент:
Когда таблица <ls_fst>-table, по которой идёт луп, содержит поля заголовка (GOHEAD-..), то структура GOITEM ещё пустая, т.е. для ведения проверки на основании орг. данных получилось воспользоваться только данными GOHEAD. Когда же заполнена GOITEM, то лупа по полям заголовка не происходит (<ls_fst>-table не содержит поля GOHEAD-..)