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

20.02.23

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    56399    31    25    

45

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36000 руб.

28.08.2025    2701    1    2    

4

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

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

6000 руб.

14.01.2016    58239    20    25    

46

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

5160 руб.

29.06.2020    22865    32    6    

51

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

5040 руб.

06.10.2020    12852    8    8    

14

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

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

20.08.2024    43395    mrXoxot    44    

138

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

27.05.2024    24834    smielka    38    

111
Для отправки сообщения требуется регистрация/авторизация