0. lemz 80 30.05.18 15:34 Сейчас в теме

Бодаемся с отображением отборов на управляемых формах

Рассмотрим в статье, как настроить отображение пользовательских отборов на форме по своему желанию.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
2. Fragster 858 31.05.18 16:06 Сейчас в теме
Либо отказаться от указания группы пользовательских настроек в свойствах формы и создать их в две колонки в нужной группе одной строкой кода указав третий параметр процедуры
Расширение таблицы формы для динамического списка (Form table extension for dynamic list)
СоздатьЭлементыФормыПользовательскихНастроек (CreateUserSettingsFormItems)
Синтаксис:

СоздатьЭлементыФормыПользовательскихНастроек(<ГруппаПользовательскихНастроек>, <Режим>, <КоличествоКолонок>)
Параметры:

<ГруппаПользовательскихНастроек> (необязательный)

Тип: ГруппаФормы.
Группа, внутри которой требуется создать элементы для редактирования пользовательских настроек динамического списка.
Значение по умолчанию: Неопределено.
<Режим> (необязательный)

Тип: РежимОтображенияНастроекКомпоновкиДанных.
Указывает, нужно ли в группе создавать элементы для всех пользовательских настроек динамического списка или только для быстрых.
Значение по умолчанию: Неопределено.
<КоличествоКолонок> (необязательный)

Тип: Число.
Задает количество колонок, в которых размещаются элементы формы в группе редактирования пользовательских настроек.
Если параметр не задан, то элементы группы размещаются в двух колонках.
Описание:

Создает элементы формы для редактирования пользовательских настроек динамического списка.
Показать
ЧерныйКот; +1 Ответить
3. lemz 80 31.05.18 16:23 Сейчас в теме
(2)
Либо отказаться от указания группы пользовательских настроек в свойствах формы и создать их в две колонки в нужной группе одной строкой кода указав третий параметр процедуры


Да, про этот вариант я упомянул, но после него для решения поставленной задачи (всегда отображать вид сравнения) вам нужно обходить эти созданные элементы чтобы проставить видимость. Огород начинается в тот момент, когда вам необходимо определить уровень вложенности элемента (если отбор только один, то колонки не создаются). Но в целом рабочий вариант с этим методом слепить можно.
4. Fragster 858 31.05.18 16:48 Сейчас в теме
(3) ну, простейшая рекурсивная функция справится с обходом, получается в разы меньше кода. Единственный нюанс - у группы для настроек нужно убрать флажок "Разрешить пользовательское изменение состава группы, РазрешитьИзменениеСостава, EnableContentChange"

Примерный код такой:
&НаСервере
Процедура Реквизит1ПриОбновленииСоставаПользовательскихНастроекНаСерве­ре(СтандартнаяОбработка)
	Элементы.Реквизит1.СоздатьЭлементыФормыПользовательскихНастроек(Элементы.Настройки, , 2);
	УстановитьВидимостьНастроек(Элементы.Настройки);
КонецПроцедуры


&НаСервере
Процедура УстановитьВидимостьНастроек(ГруппаНастроек)
	Для каждого ПодчиненныйЭлемент Из ГруппаНастроек.ПодчиненныеЭлементы Цикл
		Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") Тогда
			УстановитьВидимостьНастроек(ПодчиненныйЭлемент);
		Иначе
			ПодчиненныйЭлемент.Видимость = Истина;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
Danil.Potapov; Il; lemz; +3 Ответить
5. Fragster 858 31.05.18 17:33 Сейчас в теме
(4) Нашел у себя косяк - поскольку видмость устанавливается пользовательскими настройками формы, а мы к ним не имеем прямого доступа, нужно не устанавливать видимость, а все-таки клонировать элементы. Вот рабочий вариант (кода также не очень много):
&НаСервере
Процедура УстановитьВидимостьНастроек(ГруппаНастроек)
	МассивКлонируемыхЭлементов = Новый Массив;
	Для каждого ПодчиненныйЭлемент Из ГруппаНастроек.ПодчиненныеЭлементы Цикл
		Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") Тогда
			УстановитьВидимостьНастроек(ПодчиненныйЭлемент);
		Иначе
			Если СтрНайти(ПодчиненныйЭлемент.Имя, "ВидСравнения") <> 0 Тогда
				МассивКлонируемыхЭлементов.Добавить(ПодчиненныйЭлемент);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Для каждого КлонируемыйЭлемент Из МассивКлонируемыхЭлементов Цикл
		Клон = ЭтаФорма.Элементы.Вставить(КлонируемыйЭлемент.Имя + "Клон", ТипЗнч(КлонируемыйЭлемент), КлонируемыйЭлемент.Родитель, КлонируемыйЭлемент);
		ЗаполнитьЗначенияСвойств(Клон, КлонируемыйЭлемент, "Вид, ПоложениеЗаголовка, РастягиватьПоГоризонтали, ПутьКДанным");
		КлонируемыйЭлемент.Видимость = Ложь;
	КонецЦикла;
КонецПроцедуры
Показать
7OH; Danil.Potapov; Il; Поручик; +4 Ответить
6. allgorhythm 01.06.18 03:48 Сейчас в теме
Кручу верчу сравнить хочу!
7. Поручик 4273 01.06.18 10:07 Сейчас в теме
Плохо, что для исправления косяка от 1С, приходится добавлять форму для отчёта на СКД.
10. MorningStalker 11.02.19 09:31 Сейчас в теме
Автору спасибо большое за идею!

Реализовал у себя, буду теперь использовать.

Нашел в коде ошибку (видимо осталось от реализации предыдущих вариантов), облегчу реализацию тем, кто воспользуется этим способом:

ПолеЗначение.ПутьКДанным = "Список.КомпоновщикНастроек.ПользовательскиеНастройки[0]["+НомерЭлемента+"].Значение";

это работать не будет, так как в результате получится конструкция Список.КомпоновщикНастроек.ПользовательскиеНастройки[0][0].Значение

правильно так:

ПолеЗначение.ПутьКДанным = "Список.КомпоновщикНастроек.ПользовательскиеНастройки[" + НомерЭлемента + "].Значение";

Соответственно это справедливо для Использование и ВидСравнения
11. lemz 80 11.02.19 17:21 Сейчас в теме
(10) Странно что у вас сработал именно такой вариант, так как в моём случае жёстко прописать первый массив пришлось из-за того, что в нём лежит информация по всем отборам, а уже внутри него проходя по номерам мы получаем конкретные значения этих отборов
12. anig99 2682 01.03.19 15:59 Сейчас в теме
Спасибо за указание направления. Написал свой более сложный и универсальный вариант.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Хабаровск
зарплата от 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Ижевск
зарплата от 70 000 руб. до 94 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата до 120 000 руб.
Полный день

Программист 1С
Санкт-Петербург
Полный день