20.04.2009, 14:22 | #1 |
Участник
|
Возможность выбирать только из lookup
Как сделать, чтобы на форме в поле можно было выбирать значение только из lookup и нельзя было вводить в ручную?
Пример поле имеет тип CustAccount. В lookup отображаются клинеты с определенной Клиентской групой. Пользователь может сейчас в ручную прописать в поле формы клиента, которого нет в lookup. Как это закрыть? |
|
20.04.2009, 14:33 | #2 |
Участник
|
Цитата:
Сообщение от KpecT
Как сделать, чтобы на форме в поле можно было выбирать значение только из lookup и нельзя было вводить в ручную?
Пример поле имеет тип CustAccount. В lookup отображаются клинеты с определенной Клиентской групой. Пользователь может сейчас в ручную прописать в поле формы клиента, которого нет в lookup. Как это закрыть? вам нужно сделать так, чтобы пользователь мог ввести только разрешенные (валидные) значения. проверка на валидность поля находится в метода validateField. Т.е. вам нужно согласованно изменить lookup и validateField. И не нужно запрещать вводить руками. |
|
20.04.2009, 14:34 | #3 |
Ищущий знания...
|
Поле в таблице должно быть унаследовано от ExtendedDataType под названием CustAccount, тогда похожие проблемы сами собой решатся
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.04.2009, 14:35 | #4 |
Участник
|
Можно попробовать сделать проверку на validateField.
Либо сделать релейшн на это поле (если это возможно) и поставить свойство Validate = Yes А запрещать вводить руками как-то жестоко, плюс лучше все же делать проверки на таблице/датасорсе, а не контролах
__________________
Ты лучше голодай, чем что попало есть, И лучше будь один, чем вместе с кем попало.
|
|
20.04.2009, 14:38 | #5 |
Ищущий знания...
|
Ещё добавлю, для примера посмотрите таблицу SalesTable поле CustAccount.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.04.2009, 14:42 | #6 |
Ищущий знания...
|
Стоп, у Вас создан свой lookup?
тогда свой совет оставлю только для информативности в вашем случае нужно следовать совету mazzy.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.04.2009, 14:43 | #7 |
Участник
|
Переформулирую:
Есть расширенный тип унаследованный от CustAccount, имеет свойство FormHelp блаблаLookup. В блаблаLookup отображаются только Клиенты, у которых Группа клиенты = ПРОЧ. На форме я могу в поле выбрать значение только, которые отображаются в lookup, но некоторые умные пользуки вводят клиента в ручную. |
|
20.04.2009, 15:13 | #8 |
Участник
|
Цитата:
Сообщение от KpecT
Переформулирую:
Есть расширенный тип унаследованный от CustAccount, имеет свойство FormHelp блаблаLookup. В блаблаLookup отображаются только Клиенты, у которых Группа клиенты = ПРОЧ. На форме я могу в поле выбрать значение только, которые отображаются в lookup, но некоторые умные пользуки вводят клиента в ручную. если руками, то прописывайте и validateField тоже. каждый раз в каждой форме, где руками задаете тип контрола. Если же вы создали свою таблицу, в которой поле вашего типа, то измените у этой таблицы метод validateField. |
|
20.04.2009, 15:13 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: alex55 (1), KpecT (1). |
20.04.2009, 15:15 | #10 |
Участник
|
на validateField Сделайте проверку с теми же условиями как у Вас сделано в lookup, если проверка не прошла то возвращайте false с ошибкой. Пользователь не сможет сохранить данные, введенные вручную и не проходящие по Вашему фильтру.
|
|
20.04.2009, 15:41 | #11 |
Участник
|
На самом деле полностью задача звучит так:
Расчет с клиентами/Запросы/Акт сверки При выборе клиента на форме Акт сверки в зависимости от прав, которые даны пользователю отображать в выпадающем списке (lookup) только клиентов с определенной Группой клиентов. |
|
20.04.2009, 15:57 | #12 |
Участник
|
Настройте доступ на уровне записи на таблицу клиентов.
|
|
20.04.2009, 16:00 | #13 |
Участник
|
Акт сверки видел?
|
|
20.04.2009, 16:02 | #14 |
Участник
|
Больше всех помог Kashperuk. Но в той теме так и не нашел готового решения
|
|
21.04.2009, 11:21 | #15 |
Участник
|
Когда-то мне помогло следующее:Чтобы запретить ввод каких-либо посторонних значений в lookup-поле, ограничившись только значениями из выпадающего списка, нужно перекрыть метод validate() на контроле, чтобы он возвращал всегда false. При вводе через выпадающий список это метод не вызывается, а сразу срабатывает modified().Чтобы разрешить ввод каких-либо посторонних значений в lookup-поле, не ограничиваясь только значениями из выпадающего списка, нужно перекрыть метод validate() на поле соответствующего датасурса формы, чтобы он возвращал всегда true.
|
|
|
За это сообщение автора поблагодарили: KpecT (1). |
21.04.2009, 19:03 | #16 |
Участник
|
Еще (немножко оффтоп, но все же), если признак "правильности" клиента - флаг или enum - добавьте условие по фиксированному полю таблицы.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
22.04.2009, 10:36 | #17 |
Moderator
|
Встряну со своим "пятаком". Пришлось делать нечто подобное для поля диалога(!), где, как известно, ни датасорсов, ни релэйшенов. Использовал подход с controlMethodOverload. Поступил радикально - запер пользователя в контроле после ввода "плохого" значения методом leave, который срабатывает всегда:
X++: public boolean MyDialogField1_leave() { boolean ret; FormStringControl me = dialog.formRun().controlCallingMethod(); MyTable table; ; ret = me.leave(); // как super // далее наш функционал, который должен отрабатывать на событие select table where table.Field1 == me.text(); // если указано непустое значение, отсутствующее в списке, // то не выпускаем из поля if (! table && me.text()) { box::stop('Значение отсутствует в списке!'); ret = ret && false; } return ret; } Ну, а в методе, формирующем собственно диалог, перед вызовом run расположился такой блок операторов: X++: dialog.doInit(); dialog.formRun().controlMethodOverload( true ); dialog.formRun().controlMethodOverloadObject( new MyEventHandlerForThisDialog( dialog )); dialog.run(); |
|
22.04.2009, 10:52 | #18 |
Злыдни
|
|
|
|
За это сообщение автора поблагодарили: AlexArh (1), KpecT (1). |
Теги |
lookup, validate, validatefield, запрет |
|
Похожие темы | ||||
Тема | Ответов | |||
Как убрать автопоиск по "*" для Lookup? | 14 | |||
Проблема со своим lookup-ом | 9 | |||
Lookup, Company, FeatureKey | 7 | |||
Создание Lookup формы | 9 | |||
Динамические Lookup формы. | 0 |
|