20.11.2006, 16:54 | #1 |
Участник
|
QueryRun - управление полями наборов критериев
Есть на динамической формочке (RunBaseBatch) кнопочка "Выбор" (SysQueryRun).
При нажатии на эту самую кнопочку открывается окошечко "Запрос" во вкладочке "Условия" есть выбор из подключаемых таблиц и полей для проставления критериев в запросе. Надо сделать так, чтобы в этом самом гриде (том, что во вкладочке "Условия") ограничить выбор поля "Таблица" и "Поле" только одним значением. Т.е. чтобы можно было выбрать только одно значение, при этом поле "Критерий" трогать не надо. Т.е. кликаем на лукап поля "Таблица" и в лукапе только указанная мной табличка, нажимаем на лукап поля "Поле" и в ней выпадает только указанное мной поле. Проблема в том, что я не могу получить доступ к этим самым полям. Возможно ли вообще получить доступ к управлению этими полями ? А если да, то как ? |
|
20.11.2006, 17:20 | #2 |
Участник
|
Цитата:
Тогда пользователь не сможет убрать заданный программистом range. Цитата:
Может кто другой подскажет. А точно надо? Сделать так, чтобы пользователь не убирал критерий - это я понимаю. А зачем запрещать добавление критериев? |
|
20.11.2006, 17:30 | #3 |
Участник
|
Быстрый поиск дал следующие результаты:
1. разберитесь с классом SysQueryForm и формой SysQueryForm 2. метод класса SysQueryForm.dataSourceEdit является самым перспективным. В частности очень заманчивым выглядит условие X++: if (clientSysQueryEdit.query().userUpdate() &&
this.allowAddRange() == QueryAllowAdd::AllFields &&
queryBuildDataSource.allowAdd() == QueryAllowAdd::AllFields) У датасорса Формы это свойство доступно только из кода. |
|
20.11.2006, 17:30 | #4 |
Developer
|
Цитата:
Думаю, что в вашем случае будет проще кнопочку "выбор" спрятать, а в методе "dialog" добавить необходимый(ые) dialogfield(s) и перед запуском процесса програмно модифицировать query. Последний раз редактировалось vallys; 20.11.2006 в 17:36. |
|
20.11.2006, 18:01 | #5 |
Участник
|
Смысл этого хитрого действа таков:
Надо выбрать диапазон складов, с которым надо что-нибудь сделать, ну например грохнуть их. А в лукапе выбрать несколько складов одновременно будет несколько проблематично, ну хотя бы потому, что длинна поля будет обусловлена EDTшкой и через запятую вписать их много не получится. А если добавлять всё это безобразие через стандартную форму SysQueryForm, то можно будет собрать целый набор складов. В общем, с моей точки зрения этот приём наимение трудоёмкий, удобный и к тому же эта стандартная формочка хорошо знакома пользователю. Итак, чтобы загнуть этот инструмент под свои корыстные цели, мне надо ограничить выбор пользователя только по одному полю, ну а критериев пусть вставляет сколько его душенька пожелает. А так же надо это сделать, чтобы не дать пользователю напартачить. |
|
20.11.2006, 18:09 | #6 |
Участник
|
Цитата:
Сообщение от Eland
Надо выбрать диапазон складов, с которым надо что-нибудь сделать, ну например грохнуть их. А в лукапе выбрать несколько складов одновременно будет несколько проблематично, ну хотя бы потому, что длинна поля будет обусловлена EDTшкой и через запятую вписать их много не получится. А если добавлять всё это безобразие через стандартную форму SysQueryForm, то можно будет собрать целый набор складов. В общем, с моей точки зрения этот приём наимение трудоёмкий, удобный и к тому же эта стандартная формочка хорошо знакома пользователю.
Стоит порыться в методах класса SysQueryForm.buildAllFields SysQueryForm.fieldInsertRange SysQueryForm::findFields Причем подозреваю, что, скорее всего, в последнем методе |
|
20.11.2006, 18:27 | #7 |
Developer
|
Цитата:
Сообщение от Eland
Смысл этого хитрого действа таков:
Надо выбрать диапазон складов, с которым надо что-нибудь сделать, ну например грохнуть их. А в лукапе выбрать несколько складов одновременно будет несколько проблематично, ну хотя бы потому, что длинна поля будет обусловлена EDTшкой и через запятую вписать их много не получится. А если добавлять всё это безобразие через стандартную форму SysQueryForm, то можно будет собрать целый набор складов. В общем, с моей точки зрения этот приём наимение трудоёмкий, удобный и к тому же эта стандартная формочка хорошо знакома пользователю. Итак, чтобы загнуть этот инструмент под свои корыстные цели, мне надо ограничить выбор пользователя только по одному полю, ну а критериев пусть вставляет сколько его душенька пожелает. А так же надо это сделать, чтобы не дать пользователю напартачить. Вообщем, Mazzy как всегда прав Последний раз редактировалось vallys; 20.11.2006 в 18:45. |
|
20.11.2006, 18:34 | #8 |
Участник
|
Eland
Что касается выбора полей, то посмотрите в классе SysQueryForm метод performLookupField (есть аналогичный и для таблиц, если вы захотите выбор таблиц на запросе ограничить) - именно этот метод срабатывает, когда вы вызываете lookup с доступными полями. Так же вам необходимо обратить внимание на метод validateField, чтобы сказать пользователю, что он не прав если он попытается ввести название поля не из lookup, а ручками. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
20.11.2006, 19:40 | #9 |
Злыдни
|
Я в свое время пошел по пути наименьшего сопротивления:
1. Сделал EDT InventLocationIdRange, унаследовав от Range 2. Сделал на этом EDT Relation = InventLocation.InventLocationId |
|
|
|