Автор Тема: Открытие на изменение не редактируемых изначально в стандарте полей.  (Прочитано 7824 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем-то бывает что есть поле, есть стандартная транзакция и есть большое желание это поле открыть на изменение, скажем так или через настройки полей экрана, если можно, или небольшим хаком кода (ну про этот метод только для мазохистов, а тут я не советчик). Так вот задача состоит в том как определить то, а можно ли открывать данное поле на изменения.  В общем-то тема создана по мотивам следующего топика: 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 и пытаемся сохранить документ. Попадаем в точки останова и смотрим что там у нас происходит. А данном случае происходит то, что изменение значения на экране к сожалению не ведет к изменению значений во внутренних структурах, а это значит что программа отрабатывает как будто ничего не изменилось, но в конечном итоге все таки обновляет дату в базе, а это ведет к плачевным последствиям, что данные другие данные рассчитаны из неверной предпосылки. Нет конечно можно зайти снова и сохранить заказ еще раз и типа там все обновится, но во-первых, это тоже не факт, что все... а во-вторых, поле закрыли от изменений не зря, т.е. скорее всего есть блоки кода которые отрабатывают только при создании.

В общем дальше дело только за вами, менять или не менять  ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Тема старая, но получила тут неожиданное продолжение. В общем в заявках есть такое поле как "Индикатор фиксации" рисунок ME52N.png, в двух словах нужен для заявок созданных в результате ППМ, если его установить, то повторный прогон ППМ такую заявку же не будет изменять. В старой транзакции ME52 этот индикатор можно изменять столько раз сколько хочется, а вот в новой ME52N его можно изменить только раз, после чего поле становится только для просмотра и снять его не представляется возможным, при этом что самое интересное этот индикатор устанавливается сам, если вы  например измените в заявке количество или еще что-то и сохраните заявку то индикатор установится автоматически и убрать эту галку не получится. Хотя конечно есть старая транзакция которая это даст сделать, но вот новая... в общем при анализе кода оказалось что старая и новая транзакции работают несколько по разному. В новой транзакции после любого изменения заявки проставляется признак релевантности для облиго, а далее в дебрях кода была найден код который для группы полей куда входит и поле индикатор фиксации, в случае если это заявка созданная при ППМ (EBAN-estkz = 'B' при создании заявкки) и при этом она релевантна для облиго (EBAN-xoblr = 'X', пишется автоматом при любом изменении заявки в ME52N и активном FM), то для этой группы полей забить на настройку и принудительно установить признак только для просмотра. В старой транзакции такого нет.
Код: You are not allowed to view links. Register or Login
  TABLE KEY metafield = con_fixkz .
  IF sy-subrc IS INITIAL.
* fieldstatus: '-' switch off
*              '*' display
*              '.' optional
*              '+' required ( views interpret this as optional )

*-Get the data for the requisition
    l_reqitem = im_item->get_data( ).

*-If the PR is generated by an MRP run & has been updated to FM
*-the firming indicator should be a display-only field.
    IF l_reqitem-estkz = 'B' AND
       l_reqitem-xoblr = 'X'.
      <fs>-fieldstatus = '*'.
    ENDIF.
  ENDIF.
Теперь возникло два вопроса, можно ли это отключить и на что это повлияет. Ну отключить можно, вставив в этот код свой     
Enhancement Spot (You are not allowed to view links. Register or Login) и для этого поля (внутренний код 413) вернуть назад статус редактирования. А вот на что влияет, ну в общем виде в тесте проделав такие операции, надо глядеть в модуль бюджета, не будет ли там зависших или не отразившихся облиго. В общем варианты есть и похоже, что это поле можно открыть на изменение, в отличии от поля описанного в первом посте темы.