Изменить свойства поля заголовка MIGO при условиях

Автор tmp20052006, Жовтень 12, 2010, 05:31:05 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

tmp20052006

Возникла необходимость изменить свойства поля заголовка в MIGO (GOHEAD-LFSNR сделать недоступным для редактирования) при выполнении определённых условий (для поступления 101 ВДв по исходящей поставке). Может быть кто-то подскажет как правильнее всего (badi, exit-ы) будет решить такую проблему?

Спасибо.

Uukrul

Недоступным потому что вы туда свою информацию хотите занести, а пользователи это изменяют или что? А сделать свой вид движения на основании 101 и там закрыть поле?

tmp20052006

По сути да - надо чтобы пользователи не меняли данные (номер исходящей поставки в этом поле). Потому что при сторно поступления, если при поступлении был указан не тот номер поставки, документ материала сторно не попадает в поток документов по исходящей поставке. А вид движения свой уже нельзя :(

Uukrul

#3
Ну что можно сказать.. вообще-то можно и даже будет по факту в рамках стандарта  ::), сначала читаем тут: 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, так вот если у вас там будет стоять типа обязательность ввода, но поле будет закрыто от ввода, то само собой будут проблемы, поэтому смотрим чтобы поле небыло обязательным для ввода. По крайней мере я вот такой код вставил и поле стало при любых обстоятельствах доступным только для просмотра.

tmp20052006

Спасибо!

По идее как раз именно то, что нужно.. проверить самому нет полномочий, но похоже должно помочь..

tmp20052006

#5
Всё получилось. В результате было сделано:

[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-..)