|
Помогите решить проблему с пересечением фиксированных настроек | ☑ | ||
---|---|---|---|---|
0
Fragster
гуру
14.06.17
✎
14:12
|
Есть форма с динамическим списком. При открытии устанавливается отбор, который пользователь не должен иметь возможность снять. Сейчас это делается через фиксированные настройки (очень удобно, что они не сохраняются).
Отбор не на фиксированное значение, а на диапазон. Когда пользователь добавляет свой отбор через "найти", всё хорошо. Когда пользователь добавляет свой отбор через "настроить список", то у него закономерно вылетает ошибка про пересечение настроек. Как правильно обойти ошибку (и при этом не дать пользователю установить "неправильный отбор")? Саму форму менять нежелательно. |
|||
1
aleks_default
14.06.17
✎
15:03
|
ИМХО никак, только сбрасывать фиксированный отбор и все фильтры из него добавлять в пользовательские настройки. По крайней мере я не нашел как подружить фиксированные настройки с пользовательскими.
У себя сделал визуализацию фиксированных настроек в форме с возможностью их сброса. |
|||
2
Fragster
гуру
14.06.17
✎
16:01
|
(1) так в том то и дело, что у пользователя не должно быть возможности сбросить фикс. настройки.
Например фикс. настройки на сумму больше 1000, пользователь хочет отобрать сумму меньше 10000... |
|||
3
aleks_default
14.06.17
✎
16:30
|
Да я понял что нужно. Я тоже не нашел, как это можно сделать красиво, поэтому мне подошел такой выход из ситуации.
|
|||
4
Fragster
гуру
14.06.17
✎
16:34
|
можно программно поменять запрос, добавив параметр и установив его вместо отбора, но как-то страшно:
Список = Форма.Список; Схема = Новый СхемаЗапроса(); Список.ПроизвольныйЗапрос = Истина; Схема.УстановитьТекстЗапроса(Список.ТекстЗапроса); Пакет = Схема.ПакетЗапросов.Получить(0); Оператор = Пакет.Операторы.Получить(0); ИмяТаблицы = Оператор.Источники.Получить(0).Источник.Псевдоним; Оператор.Отбор.Добавить(ИмяТаблицы + ".Поле В (&Отбор)"); Список.ТекстЗапроса = Схема.ПолучитьТекстЗапроса(); Список.Параметры.УстановитьЗначениеПараметра("Отбор", Отбор); |
|||
5
Fragster
гуру
07.07.17
✎
13:57
|
решение из (4) не работает для 8.3.9 и 8.3.10 - там слетают привязки элементов управления
|
|||
6
Вафель
07.07.17
✎
14:02
|
на 8.3.9 не слетают
|
|||
7
Вафель
07.07.17
✎
14:33
|
Скорее всего это проявление особенности устройства динамического списка в совокупности с улучшением конструктора запросов в 8.3.9 (см. downloads.v8.1c.ru/conte... »» )
Особенность такая - если у поля есть 2 имени (т.е. это стандартное поле без псевдонима, например Наименование) - то при задействовании такого поля, форма запоминает английский вариант имени (Description для наименования). Если после этого такому полю добавить стандартный псевдоним на русском языке (Наименование) - то форма его больше не найдет (потому что у поля с псевдонимом нет второго варианта, а основной вариант Наименование не равен запомненному формой Description). Условия для появления проблемы: конфигурация должна быть в режиме совместимости 8.3.9 (не использовать на 8.3.9) или выше у динамического списка используется произвольный запрос и в нем не установлены псевдонимы полей (именно в таком виде запрос генерируется платформой при установке флага "Произвольный запрос") Если текст запроса такого списка отредактировать конструктором запросов (достаточно просто открыть конструктор и нажать "ОК") то все стандартные поля потеряют связь с формой Аналогичная проблема будет в режиме Предприятие если текст запроса такого списка изменить с помощью схемы запроса. |
|||
8
Fragster
гуру
07.07.17
✎
14:37
|
(7) я знаю, читай первоисточник дальше...
|
|||
9
apokrit
07.07.17
✎
14:40
|
"Обычный" элемент отбора с РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный не подходит?
|
|||
10
Fragster
гуру
07.07.17
✎
14:43
|
(9) он может сохраниться и наложиться при следующем открытии формы выбора, например из другого элемента управления
|
|||
11
Fragster
гуру
07.07.17
✎
14:44
|
когда он не нужен. да и пользователю не всегда нужно знать о том, что есть какой-то отбор
|
|||
12
apokrit
07.07.17
✎
14:45
|
(0) Недоступные элементы отбора не используются для формирования пользовательских настроек, а сохраняются только пользовательские настройки. Т.е. нет, не может.
|
|||
13
Вафель
07.07.17
✎
14:45
|
Можно кстати английских синонимов вручную добавить
|
|||
14
apokrit
07.07.17
✎
14:45
|
Недоступные элементы отбора не видно.
|
|||
15
Fragster
гуру
07.07.17
✎
14:46
|
(13) ага, чтобы сломать все на 8.3.8 и ниже :) или в зависимости от релиза добавлять или нет синонимы...
|
|||
16
apokrit
07.07.17
✎
14:47
|
(13) Можно. Еще можно вариант встроенного языка на английский поменять - тогда конструктор (схема) сам их на английском сделает...
Только после этого они перестанут на русском находиться, например в данных строки. |
|||
17
Вафель
07.07.17
✎
14:47
|
(15) так ты универсальную надстройку пишешь или что?
|
|||
18
Вафель
07.07.17
✎
14:48
|
(15) у тебя кстати режим совместимости какой?
|
|||
19
Fragster
гуру
07.07.17
✎
14:57
|
(18) сейчас 8.3.5 :) ну и 8.3.8
|
|||
20
Fragster
гуру
07.07.17
✎
15:01
|
(9) а как это сделать не дергая сервер и форму?
так не прокатывает: &НаКлиенте Процедура Договор1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыОткрываемойФормы = Новый Структура; ПараметрыОткрываемойФормы.Вставить("ПользовательскиеНастройки", ПолучитьПользовательскиеНастройки()); ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора", ПараметрыОткрываемойФормы, Элемент,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Функция ПолучитьПользовательскиеНастройки() Настройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; ЭлементОтбора = Настройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидДоговора"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ВидыДоговора = Новый СписокЗначений; ВидыДоговора.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем")); ВидыДоговора.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.Прочее")); ЭлементОтбора.ПравоеЗначение = ВидыДоговора; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Возврат Настройки; КонецФункции |
|||
21
Вафель
07.07.17
✎
15:01
|
(19) Откуда тогда проблемы с псевдонимами?
|
|||
22
Fragster
гуру
07.07.17
✎
15:01
|
открывается без отбора. хотя то же самое с фиксированными настройками работает
|
|||
23
Fragster
гуру
07.07.17
✎
15:01
|
(21) ну вот переведут типовые на новый режим совместимости и всё сломается.
|
|||
24
Вафель
07.07.17
✎
15:03
|
(23) к тому времени уже 8.3.15 выпустят уже наверно
|
|||
25
Fragster
гуру
07.07.17
✎
15:04
|
(24) говорят, УХ и ДО уже скоро будет 8.3.10
|
|||
26
Fragster
гуру
07.07.17
✎
15:04
|
и ЗУП
|
|||
27
Вафель
07.07.17
✎
15:05
|
(25) Откуда тогда 8.3.5?
|
|||
28
Fragster
гуру
07.07.17
✎
15:06
|
(27) управленческий гомункул, с неснимаемым режимом совместимости из-за несериализуемых значений в хранилищах значений и кучей мин замедленного действия
|
|||
29
apokrit
07.07.17
✎
15:10
|
(20) Обычные настройки нельзя через параметры передать (если только конечно в открываемой форме нет соответствующего кода).
Если больше совсем ни как - можно попробовать поменять настройки в форме уже после открытия (но это, мягко говоря, уродство, конечно и замедление от этого будет) |
|||
30
apokrit
07.07.17
✎
15:13
|
+(29) А что код из (4) работает "не дергая сервер и форму"?
|
|||
31
Fragster
гуру
07.07.17
✎
15:20
|
(29) фиксированные прекрасно передаются, такой код работает: &НаКлиенте
Процедура Договор2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыОткрываемойФормы = Новый Структура; ПараметрыОткрываемойФормы.Вставить("ФиксированныеНастройки", ПолучитьФиксированныеНастройки()); ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора", ПараметрыОткрываемойФормы, Элемент,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Функция ПолучитьФиксированныеНастройки() Настройки = Новый НастройкиКомпоновкиДанных; ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидДоговора"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ВидыДоговора = Новый СписокЗначений; ВидыДоговора.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.СПокупателем")); ВидыДоговора.Добавить(ПредопределенноеЗначение("Перечисление.ВидыДоговоровКонтрагентов.Прочее")); ЭлементОтбора.ПравоеЗначение = ВидыДоговора; // ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Возврат Настройки; КонецФункции |
|||
32
Fragster
гуру
07.07.17
✎
15:21
|
собственно, и пользовательские можно, но там больше букв
|
|||
33
apokrit
07.07.17
✎
15:25
|
(31) Это к чему?
Я уже написал что "просто" настройки передать в список через параметр открытия формы нельзя (не предусмотрено). Но ведь, вариант со схемой запроса явно не на клиенте реализован. В чем проблема в этом же месте изменить обычные настройки? |
|||
34
Fragster
гуру
07.07.17
✎
15:26
|
(33) там есть вариант передачи пользовательских настроек списка. как туда добавить мой отбор, да еще и чтобы он не отображался?
|
|||
35
Fragster
гуру
07.07.17
✎
15:27
|
(33) вариант со схемой запроса мне не нравится. он от безысходности.
|
|||
36
Fragster
гуру
07.07.17
✎
15:28
|
изначально был вариант передачи фиксированных настроек
|
|||
37
Fragster
гуру
07.07.17
✎
15:28
|
например он не привязывался к названию элемента формы
|
|||
38
Cyberhawk
07.07.17
✎
15:31
|
"Например фикс. настройки на сумму больше 1000, пользователь хочет отобрать сумму меньше 10000..." // Ну ведь очень простая ситуация: либо отказаться от пользовательского отбора, либо от фиксированной настройки (в один момент времени - в одном контексте). Чего тут думать?
|
|||
39
Fragster
гуру
07.07.17
✎
15:36
|
(38) альтернатива?
|
|||
40
Cyberhawk
07.07.17
✎
16:09
|
(39) Отсюда не видно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |