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

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"!

29280 руб.

27.03.2025    71732    42    29    

57

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

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

36600 руб.

28.08.2025    5893    2    2    

5

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

Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.

6088 руб.

17.10.2025    1495    3    0    

2

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

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

6100 руб.

14.01.2016    59420    21    25    

46

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

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

5246 руб.

29.06.2020    23784    33    6    

52

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

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

20.08.2024    46822    mrXoxot    44    

138

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

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

27.05.2024    25764    smielka    38    

113

Инструментарий разработчика Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    17081    180    acces969    31    

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