Текущее время: Пт, мар 29 2024, 18:38

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Пн, янв 19 2009, 17:40 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, окт 27 2008, 16:21
Сообщения: 33
Откуда: Москва
Пол: Мужской
Здравствуйте Коллеги!
У меня есть таблица. к некоторым полям таблицы привязаны средства поиска, когда я всё это заталкиваю в ALV всё работает хорошо кроме одного маленького неудобства. Те ячейки в которых я выбрал значения через средство поиска можно попортить введя что нибудь с клавиатуры. Пытался сделать так чтобы вводить можно было только то что пришло из средства поиска но не вышло: если запретить редактирование ячейки, то перестает работать средство поиска. Вопрос таков: можно ли вообще сделать так чтобы ввод в некоторых ячейках был принимался только из средства поиска? Есть конечно мысли отлавливать событие data_changed чтобы понять когда вызывается средство поиска до вызова делать ячейку редактируемой, а после вызова, когда значение подставится опять переводить её в режим только для чтения, но хотелось бы простого решения этой проблемы.

P.S.
Нашел в структуре layout два поля edit и edit_mode. Как я понял первое отвечает за состояние ALV как редактируемое / не редактируемое, а вот назвачение edit_mode мне понять не удалось в sdn.sap.com тоже ничего не нашел. Все примеры найденые мной в интернете используют это поле со значениями SPACE / 'X'. Кто нибудь знает зачем же это поле нужно?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Пн, янв 19 2009, 18:09 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
_Sipo_ написал:
Здравствуйте Коллеги!
У меня есть таблица. к некоторым полям таблицы привязаны средства поиска, когда я всё это заталкиваю в ALV всё работает хорошо кроме одного маленького неудобства. Те ячейки в которых я выбрал значения через средство поиска можно попортить введя что нибудь с клавиатуры. Пытался сделать так чтобы вводить можно было только то что пришло из средства поиска но не вышло: если запретить редактирование ячейки, то перестает работать средство поиска. Вопрос таков: можно ли вообще сделать так чтобы ввод в некоторых ячейках был принимался только из средства поиска? Есть конечно мысли отлавливать событие data_changed чтобы понять когда вызывается средство поиска до вызова делать ячейку редактируемой, а после вызова, когда значение подставится опять переводить её в режим только для чтения, но хотелось бы простого решения этой проблемы.
Ваша идея совершенно бредовая, хотя бы потому что событие data_changed не предназанчено для вызова средства поиска.
data_changed предназначено для проверки введённых значений. Вот и проверяйте Ваши ячейки и в случае не корректных данных красте их в красный цвет.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Пн, янв 19 2009, 18:56 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, окт 27 2008, 16:21
Сообщения: 33
Откуда: Москва
Пол: Мужской
То что идея бредовая не исключено. Я могу отловить событие до появление средства поиска и сообщение после того как в средстве поиска уже что то было выбрано. Но нигде не могу найти как в событии data_changed поменять свойство редактирования ячейки. Если такое изменение вообще возможно, то идея приобретает смысл.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Пн, янв 19 2009, 19:23 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Не ясен смысл менять редактируемость. Почему нельзя на data_changed выводить стандартную проверку по таблице значений?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Пн, янв 19 2009, 19:38 
Начинающий
Начинающий

Зарегистрирован:
Пн, янв 19 2009, 19:33
Сообщения: 6
Пол: Мужской
Посмотрите пример BCALV_EDIT_03


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 11:10 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, окт 27 2008, 16:21
Сообщения: 33
Откуда: Москва
Пол: Мужской
vakito написал(а):
Не ясен смысл менять редактируемость. Почему нельзя на data_changed выводить стандартную проверку по таблице значений?

Я не совсем точно объяснил что я хочу сделать. Моя идея заключается в том чтобы исключить порчу содержимого ячейки пользователем, а не отловить факт ввода некорректных данных и сообщение об этом пользователю. Мне кажется первое гораздо предпочтительнее. В ячейки должен появляться строго определенный набор данных, ввод хорошо осуществляется через средство поиска. Поэтому я хотел изначально закрыть для редактирования все ячейки, у не редактируемой ячейки средство поиска доступно но значение выбрать нельзя. Поэтому мне хотелось отловить в событии data_changed момент до появления средства поиска ( E_ONF4_BEFORE EQ 'X' ) и сделать ячейку редактируемой, после этого появится средство поиска и будет возможность выбрать значение. После того как значение выбрано, сработает data_changed с параметром E_ONF4_AFTER EQ 'X' в этот момент я хочу сделать ячейку опять не редактируемой. Проблема в том что я не знаю как ( и возможно ли это вообще?) изменить редактируемость ячейки в data_change,

denyanS написал:
Посмотрите пример BCALV_EDIT_03

К сожалению этот пример не очень помог. Для меня в нем может быть только полезна работа с "протоколом" для отображения ошибок. Если как хочется сделать не выйдет, буду красить ячейки и ругаться на пользователя.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 11:16 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Я взял себе за правило никогда не делать гриды(alv) редактируемым.
Если надо отредактировать, загружаются данные в диалоговое окно и там редактируются.
И все контролируется и проверяется перед сохранением....

Так уже работаю 9 лет. начиная с DELPHI, C#, сейчас ABAP.


и Вам рекомендую. Чуть больше кода, зато нормальный контроль.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 11:45 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
_Sipo_ написал:
vakito написал(а):
Не ясен смысл менять редактируемость. Почему нельзя на data_changed выводить стандартную проверку по таблице значений?

Я не совсем точно объяснил что я хочу сделать. Моя идея заключается в том чтобы исключить порчу содержимого ячейки пользователем, а не отловить факт ввода некорректных данных и сообщение об этом пользователю. Мне кажется первое гораздо предпочтительнее. В ячейки должен появляться строго определенный набор данных, ввод хорошо осуществляется через средство поиска. Поэтому я хотел изначально закрыть для редактирования все ячейки, у не редактируемой ячейки средство поиска доступно но значение выбрать нельзя. Поэтому мне хотелось отловить в событии data_changed момент до появления средства поиска ( E_ONF4_BEFORE EQ 'X' ) и сделать ячейку редактируемой, после этого появится средство поиска и будет возможность выбрать значение. После того как значение выбрано, сработает data_changed с параметром E_ONF4_AFTER EQ 'X' в этот момент я хочу сделать ячейку опять не редактируемой. Проблема в том что я не знаю как ( и возможно ли это вообще?) изменить редактируемость ячейки в data_change,

denyanS написал:
Посмотрите пример BCALV_EDIT_03

К сожалению этот пример не очень помог. Для меня в нем может быть только полезна работа с "протоколом" для отображения ошибок. Если как хочется сделать не выйдет, буду красить ячейки и ругаться на пользователя.


если это строго определенные значения зачем использовать search help, может стоит попробовать сделть поле типа listbox?

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 11:51 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Как вариант можно сделать поле нередактируемым и hotspot = 'X'. По нажатию выводить средство поиска и записывать результат выбора в это поле.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 12:03 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, окт 27 2008, 16:21
Сообщения: 33
Откуда: Москва
Пол: Мужской
К сожалению не помогут ни диалоговые окна ( ALV в ТЗ ) ни лист боксы, потому что значения зависят от предыдущих и их порой довольно много.

vakito написал(а):
Как вариант можно сделать поле нередактируемым и hotspot = 'X'. По нажатию выводить средство поиска и записывать результат выбора в это поле.

Попробую сделать как Вы советуете


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 12:07 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
vakito написал(а):
Как вариант можно сделать поле нередактируемым и hotspot = 'X'. По нажатию выводить средство поиска и записывать результат выбора в это поле.
А почему hotspot не просто соственная обработка F4?

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 12:11 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Цитата:
А почему hotspot не просто соственная обработка F4?

Как раз хотел про это дописать.
Первое было "как вариант" ;)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 13:46 
Начинающий
Начинающий

Зарегистрирован:
Пн, янв 19 2009, 19:33
Сообщения: 6
Пол: Мужской
Только обработку для этого нужно делать для события ONF4.
И никаких свойств редактирования можно не менять.
Просто в методе ONF4 для вашего не редактируемого поля вызвать средство поиска.
А затем сохранить значение в таблицу.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 15:35 
Начинающий
Начинающий

Зарегистрирован:
Пн, янв 19 2009, 19:33
Сообщения: 6
Пол: Мужской
Появилось несколько свободных минут – написал такой пример.
Code:
 
  METHOD on_f4.

    FIELD-SYMBOLS <itab> TYPE lvc_t_modi.

    DATA: ls_modi    TYPE lvc_s_modi,
          ls_return  TYPE ddshretval,
          lt_return  TYPE TABLE OF ddshretval.
    IF e_fieldname = 'Имя поля'.

      CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
        EXPORTING
          tabname                   = ''"или это
          fieldname                 = ''" с этим
          searchhelp                = ''"или это заполнить
       TABLES
          return_tab                = lt_return
                .
      READ TABLE lt_return INTO ls_return INDEX 1.

      ASSIGN er_event_data->m_data->* TO <itab>.
      ls_modi-row_id = es_row_no-row_id.
      ls_modi-fieldname = e_fieldname.

      ls_modi-value = ls_return-fieldval.
      APPEND ls_modi TO <itab>.

      er_event_data->m_event_handled = 'X'.

    ENDIF.

  ENDMETHOD.                                                "on_f4

У меня работает, как было нужно в постановке.
Может пригодиться…


Последний раз редактировалось denyanS Вт, янв 20 2009, 19:27, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запрет на редактирование ячеек в ALV
СообщениеДобавлено: Вт, янв 20 2009, 16:37 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, окт 27 2008, 16:21
Сообщения: 33
Откуда: Москва
Пол: Мужской
denyanS написал:
Появилось несколько свободных минут – написал такой пример.
....................


Спасибо, denyanS!!! похоже это как раз то что решит мою проблему. Только у меня два вопроса:
1) f4_itab_type и f4_itab - это соответсвенно тип тиблицы и сама таблица отображаемая в ALV Grid. Правильно?
2) Никак не могу найти как передавать входные параметры в средство поиска. у меня почти средства поиска с входными параметрами, позволяющими отфильтровать данные. Как вариант можно выгрузить то что мне нужно во внутреннюю таблицу и вызвать F4IF_INT_TABLE_VALUE_REQUEST, но наверное как то можно вызвать стандартное средвто поиска с входными параметрами


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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