Текущее время: Пт, апр 19 2024, 06:32

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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