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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

Вакансии

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

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

Программист 1С УТ 11
Омск
зарплата от 60 000 руб.
Полный день

Бизнес-аналитик 1С УТ 11
Омск
зарплата от 60 000 руб.
Полный день

Программист 1С
Воронеж
Полный день