Чистка пользовательских настроек динамического списка после удаления полей

20.02.23

Разработка - Работа с интерфейсом

После программной модификации, а именно удаления полей динамического списка, в пользовательском режиме, если у пользователя по этим полям были свои настройки списка (отборы, сортировки и т.д.) получаем ошибку о недоступности Полей: Параметры отбора, сортировки, группировки или список отображаемых полей заданы неверно.

Динамический список, в случае автозаполнения доступных полей, прекрасно обновляет их список, например в случае модификации запроса, но игнорирует пользовательские настройки, в результате чего список может нагнуться:

После модификации динамического списка проходим по пользовательским настройкам Отбор, Сортировка, Условное оформление, Группировка и ищем выбранные пользователем поля среди соответствующих коллекций доступных полей. В случае их отсутствия - удаляем:

&НаСервере
Процедура МодификацияДинамическогоСписка()
	//
	//Модификация списка
	//
	ДСписок = "СписокНоменклатура";
	КоллекцияДляПроверки = ЭтотОбъект[ДСписок].КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
	УдалитьНедоступныеПоля(КоллекцияДляПроверки);
КонецПроцедуры

&НаСервере
Функция УдалитьНедоступныеПоля(КоллекцияДляПроверки, ДоступныеЭлементы = Неопределено, Родитель = Неопределено)
	ЕстьНедоступный = Ложь;
	Для Сч = -(КоллекцияДляПроверки.Количество() - 1) ПО 0 Цикл
		Элемент = КоллекцияДляПроверки[-Сч];
		//отборы, по отборам не удаляю группы, в случае наличия в них недоступных полей, удаляю только сами поля, не проверяю
		//группу на пустоту, возможно в некоторых случаях необходимо - расскоментить ниже
		Если ТипЗнч(Элемент) = Тип("ОтборКомпоновкиДанных") Тогда       
			ЕстьНедоступный = УдалитьНедоступныеПоля(Элемент.Элементы, Элемент.ДоступныеПоляОтбора, Элемент);
		ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда	
			ЕстьНедоступный = УдалитьНедоступныеПоля(Элемент.Элементы, ДоступныеЭлементы, Элемент);
			//Если ЕстьНедоступный Тогда            //если нужно удалить группу в случае присутствия в ней недоступных
			//	Родитель.Элементы.Удалить(Элемент);	
			//КонецЕсли;
		ИначеЕсли ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных")       
							И ДоступныеЭлементы.НайтиПоле(Элемент.ЛевоеЗначение) = Неопределено Тогда
			Родитель.Элементы.Удалить(Элемент);
			ЕстьНедоступный = Истина;
			
		//Сортировка	
		ИначеЕсли ТипЗнч(Элемент) = Тип("ПорядокКомпоновкиДанных") Тогда
			УдалитьНедоступныеПоля(Элемент.Элементы, Элемент.ДоступныеПоляПорядка, Элемент);
		ИначеЕсли ТипЗнч(Элемент) = Тип("ЭлементПорядкаКомпоновкиДанных") 
							И ДоступныеЭлементы.НайтиПоле(Элемент.Поле) = Неопределено Тогда
			Родитель.Элементы.Удалить(Элемент); 
			
		//условное оформление, удаляем элемент условного оформления в случае недоступных полей в полях и в отборах
		ИначеЕсли ТипЗнч(Элемент) = Тип("УсловноеОформлениеКомпоновкиДанных") Тогда
			УдалитьНедоступныеПоля(Элемент.Элементы,,Элемент);
		ИначеЕсли ТипЗнч(Элемент) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда
			ЕстьНедоступныйОтбор 	= УдалитьНедоступныеПоля(Элемент.Отбор.Элементы, Элемент.Отбор.ДоступныеПоляОтбора, Элемент.Отбор);		
			ЕстьНедоступныйПоля 	= УдалитьНедоступныеПоля(Элемент.Поля.Элементы, Элемент.Поля.ДоступныеПоляОформляемыхПолей, Элемент.Поля);		
			Если ЕстьНедоступныйПоля ИЛИ ЕстьНедоступныйОтбор Тогда
				Родитель.Элементы.Удалить(Элемент);	
			КонецЕсли;
		ИначеЕсли ТипЗнч(Элемент) = Тип("ОформляемоеПолеКомпоновкиДанных") 
			                И ДоступныеЭлементы.НайтиПоле(Элемент.Поле) = Неопределено Тогда
			Родитель.Элементы.Удалить(Элемент);
			ЕстьНедоступный = Истина;			
			
		//Группировки
		ИначеЕсли ТипЗнч(Элемент) = Тип("СтруктураНастроекКомпоновкиДанных") Тогда
			УдалитьНедоступныеПоля(Элемент.Структура,,Элемент);	
		ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппировкаКомпоновкиДанных") Тогда
			УдалитьНедоступныеПоля(Элемент.УсловноеОформление.Элементы);
			УдалитьНедоступныеПоля(Элемент.Порядок.Элементы, Элемент.Порядок.ДоступныеПоляПорядка, Элемент.Порядок);
			ЕстьНедоступныйОтборы 		= УдалитьНедоступныеПоля(Элемент.Отбор.Элементы, Элемент.Отбор.ДоступныеПоляОтбора, Элемент.Отбор);
			ЕстьНедоступныйГруппировки 	= УдалитьНедоступныеПоля(Элемент.ПоляГруппировки.Элементы, Элемент.ПоляГруппировки.ДоступныеПоляПолейГруппировок, Элемент.ПоляГруппировки);
			Если ЕстьНедоступныйГруппировки ИЛИ ЕстьНедоступныйОтборы Тогда
				Родитель.Структура.Удалить(Элемент);
				ЕстьНедоступный = Истина;
			КонецЕсли;			
		ИначеЕсли ТипЗнч(Элемент) = Тип("ПолеГруппировкиКомпоновкиДанных") 
							И ДоступныеЭлементы.НайтиПоле(Элемент.Поле) = Неопределено Тогда
			Родитель.Элементы.Удалить(Элемент);
			ЕстьНедоступный = Истина;
		КонецЕсли;          
	КонецЦикла;
	Возврат ЕстьНедоступный;
КонецФункции

Функция может использоваться и для других коллекций с настройками компоновщика настроек

Динамический список Параметры отображаемых полей заданы неверно Не найдено поле отбора ДинамическийСписок Конвертация данных СКД

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55306    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63701    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19552    27    6    

42

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10769    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    20843    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10329    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17746    1223    elcoan    53    

125
Оставьте свое сообщение