Как проверить выбранное значение до вставки его в поле LookupDataControl
Подскажите, как проверить выбранное значение до вставки его в поле LookupDataControl?
У меня есть справочное поле "Личный склад". При выборе значения склада из окна выбора мне необходимо проверить есть ли у этого склада владелец. Если есть, то я показываю сообщение типа "Склад занят" и не даю выбрать данный склад. Я использую элемент LookupDataControl.
Нравится
Может лучше отфильтровать занятые склады. Так юзеру удобнее будет. А проверить можно на DataChange. Если занят - сбрасываем поле в null и выдаем предупреждение. Но так кривовато, как по мне.
"Underscore a.k.a. _" написал:Если занят - сбрасываем поле в null и выдаем предупреждение.
Если мне не изменяет память, то нельзя на событие изменения поля менять его же значение, то есть оно сбросится в null, но в карточке Вы будете видеть старое значение все равно.
Я тоже за фильтрацию складов на OnPrepareSelectWindow.
Дело в том, что я бы хотел, чтобы пользователь при выборе склада видел какие склады на какого менеджера назначены, чтобы потом мог найти этого менеджера и снять с него нужный склад.
А когда возникает событие OnDatasetChangeDataField в датасете? Может это поможет.
Ладно, решил сделать как вы советуете. Просто наложу фильтр. Тогда и проверку не нужно будет делать.
Попробуйте делать проверку на событие потери фокуса Вашего элемента управления, только тогда на момент перехода на него нужно запоминать старое значение и нет гарантии, что пользователь не сохранит запись не выходя из данного контрола путем нажатия Enter.
"Раловец Ольга" написал:Попробуйте делать проверку на событие потери фокуса Вашего элемента управления
эм.. а как это вы так лихо собираетесь это сделать?
у меня вот, к примеру, событие OnFocusedControl формы не работает.
Как вариант перекрыть OnEnter каждого контрола? но на OnEnter не видно контрола, который был в фокусе до события.
я решил не усложнять, а делать как можно проще, поэтому просто буду накладывать фильтр на событие OnPrepareSelectWindow.
Особенно, когда есть большая вероятность, что функциональность измениться.
Фильтрация :twisted:
А с очисткой, мы обошли это только на нажатие Ок.
На событие BeforePost проверяем, очищаем значение и выводим сообщение!
Дальше - DoPost.Value = false
"Доленко Юрий" написал:эм.. а как это вы так лихо собираетесь это сделать?
у меня вот, к примеру, событие OnFocusedControl формы не работает.
Как вариант перекрыть OnEnter каждого контрола? но на OnEnter не видно контрола, который был в фокусе до события.
Я имела ввиду на OnEnter элемента управления, изменение которого мы хотим проследить, запоминать значение, а на OnExit, если значение изменилось, делать проверку, можно ли выбрать данный склад. Но в таком случае, если закрыть карточку не с помощью нажатия мышкой на кнопку "ОК", а с помощью клавиши "Enter", то событие OnExit не произойдет.
Раловец Ольга, простите сначала не понял, что имелось ввиду.
Кстати, вот еще вариант решения. Если нужно видеть все склады, то можно слегка поломать функционал базового wnd_SelectData. Можно занятые склады красить, скажем в красный и если Ок нажимается при выбранном занятом складе вместо базовой отработки выводить сообщение, проверяя, к примеру USI текущего датасета ...
"Доленко Юрий" написал:Раловец Ольга, простите сначала не понял, что имелось ввиду.
Похоже, я просто неясно выразила свою мысль.
Насчет Вашего варианта, думаю, не обязательно менять базовое окно, можно создать наследника и модифицировать его. Для вызова именно Вашего окна нужно будет прописать его код в SelectWindowUSI контрола.