Как проверить выбранное значение до вставки его в поле LookupDataControl

Подскажите, как проверить выбранное значение до вставки его в поле LookupDataControl?

У меня есть справочное поле "Личный склад". При выборе значения склада из окна выбора мне необходимо проверить есть ли у этого склада владелец. Если есть, то я показываю сообщение типа "Склад занят" и не даю выбрать данный склад. Я использую элемент LookupDataControl.

Нравится

12 комментариев

Может лучше отфильтровать занятые склады. Так юзеру удобнее будет. А проверить можно на DataChange. Если занят - сбрасываем поле в null и выдаем предупреждение. Но так кривовато, как по мне.

"Underscore a.k.a. _" написал:Если занят - сбрасываем поле в null и выдаем предупреждение.

Если мне не изменяет память, то нельзя на событие изменения поля менять его же значение, то есть оно сбросится в null, но в карточке Вы будете видеть старое значение все равно.
Я тоже за фильтрацию складов на OnPrepareSelectWindow.

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

А когда возникает событие OnDatasetChangeDataField в датасете? Может это поможет.

Ладно, решил сделать как вы советуете. Просто наложу фильтр. Тогда и проверку не нужно будет делать.

Попробуйте делать проверку на событие потери фокуса Вашего элемента управления, только тогда на момент перехода на него нужно запоминать старое значение и нет гарантии, что пользователь не сохранит запись не выходя из данного контрола путем нажатия Enter.

"Раловец Ольга" написал:Попробуйте делать проверку на событие потери фокуса Вашего элемента управления

эм.. а как это вы так лихо собираетесь это сделать?
у меня вот, к примеру, событие OnFocusedControl формы не работает.
Как вариант перекрыть OnEnter каждого контрола? но на OnEnter не видно контрола, который был в фокусе до события.

я решил не усложнять, а делать как можно проще, поэтому просто буду накладывать фильтр на событие OnPrepareSelectWindow.
Особенно, когда есть большая вероятность, что функциональность измениться.

Фильтрация :twisted:
А с очисткой, мы обошли это только на нажатие Ок.
На событие BeforePost проверяем, очищаем значение и выводим сообщение!
Дальше - DoPost.Value = false

--
www.it-sfera.com.ua

"Доленко Юрий" написал:эм.. а как это вы так лихо собираетесь это сделать?
у меня вот, к примеру, событие OnFocusedControl формы не работает.
Как вариант перекрыть OnEnter каждого контрола? но на OnEnter не видно контрола, который был в фокусе до события.

Я имела ввиду на OnEnter элемента управления, изменение которого мы хотим проследить, запоминать значение, а на OnExit, если значение изменилось, делать проверку, можно ли выбрать данный склад. Но в таком случае, если закрыть карточку не с помощью нажатия мышкой на кнопку "ОК", а с помощью клавиши "Enter", то событие OnExit не произойдет.

Можно в OnCloseQuery продублировать.

Раловец Ольга, простите сначала не понял, что имелось ввиду.
Кстати, вот еще вариант решения. Если нужно видеть все склады, то можно слегка поломать функционал базового wnd_SelectData. Можно занятые склады красить, скажем в красный и если Ок нажимается при выбранном занятом складе вместо базовой отработки выводить сообщение, проверяя, к примеру USI текущего датасета ...

"Доленко Юрий" написал:Раловец Ольга, простите сначала не понял, что имелось ввиду.

Похоже, я просто неясно выразила свою мысль.
Насчет Вашего варианта, думаю, не обязательно менять базовое окно, можно создать наследника и модифицировать его. Для вызова именно Вашего окна нужно будет прописать его код в SelectWindowUSI контрола.

Показать все комментарии