В общем-то бывает что есть поле, есть стандартная транзакция и есть большое желание это поле открыть на изменение, скажем так или через настройки полей экрана, если можно, или небольшим хаком кода (ну про этот метод только для мазохистов, а тут я не советчик). Так вот задача состоит в том как определить то, а можно ли открывать данное поле на изменения. В общем-то тема создана по мотивам следующего топика: You are not allowed to view links.
Register or
LoginПошагово это будет приблизительно так:
1. Ничего не меня заходим в транзакцию и на нужном экране смотрим код поля, для примера была выбрана транзакция ME22 - Заказы на закупку и там поле дата документа, рисунок ME22-1. На нужном поле F1, и дальше техническая информация, Получаем имя поля экрана которое выводится в данном случае, рисунок ME22-2.
2. Дальше в этом поле в строке команд /h, переходим в отладчик и там меняем значение поля даты на любое которое нам нужно. Рисунок ME22-3. После этого жмем F8. Видим что поле на экране изменилось и дальше сохраняем заказ.
3. Заходим в просмотр. Ну значение поля поменялось, значит менять можно. Теперь самое главное, как определить а можно ли действительно делать такое изменение. Тут все сложнее. Для начала определяем как это поле лежит в базе. Ну тут все просто это поле EKKO-BEDAT, значит ищем все ссылки по тексту BEDAT в транзакции. Для этого в любом месте транзакции ME22 нажимаем по меню Система- Статус и в блоке данные репозитория на имени программы делаем двойной клик. Попадаем в просмотр кода и там жмем кнопку (это для удобства) Просмотр списка объектом Ctrl-Shift+F5 кажется. В общем попадем в SE80 и там жмем кнопку поиска, только вверху экрана. В окне поиска вводим BEDAT и ставим галку искать глобально в главной программе. Ну и получаем кучу ссылок где встречается это поле в данной транзакции. Дальше ставим точки останова везде и заходим в другом режиме в эту транзакцию. Ну а дальше снова /h, в отладчике меняем значение на экране, F8 и пытаемся сохранить документ. Попадаем в точки останова и смотрим что там у нас происходит. А данном случае происходит то, что изменение значения на экране к сожалению не ведет к изменению значений во внутренних структурах, а это значит что программа отрабатывает как будто ничего не изменилось, но в конечном итоге все таки обновляет дату в базе, а это ведет к плачевным последствиям, что данные другие данные рассчитаны из неверной предпосылки. Нет конечно можно зайти снова и сохранить заказ еще раз и типа там все обновится, но во-первых, это тоже не факт, что все... а во-вторых, поле закрыли от изменений не зря, т.е. скорее всего есть блоки кода которые отрабатывают только при создании.
В общем дальше дело только за вами, менять или не менять