1С 8.3 Удалить недоступные отборы СКД
Данные > Примеры кода 1С > 1С 8.3 Схема компоновки данных (СКД)
Перейти в раздел примеры кода 1С 8.3:
Удалить недоступные отборы в 1С 8.3:
// Рекурсивно удаляет недоступные элементы из коллекции отборов
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/15
//
// Написан для статьи Как ограничить поля отбора в динамическом списке и ничего не сломать:
// https://infostart.ru/public/1226445/?ref=1159
//
// Параметры:
// Коллекция - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных, КоллекцияЭлементовОтбораКомпоновкиДанных - Коллекция элементов отбора.
// ДоступныеПоляОтбора - Неопределено, ДоступныеПоляКомпоновкиДанных - Список доступных полей отбора. При первоначальном вызове не передаётся.
//
// Пример:
// Список.УстановитьОграниченияИспользованияВОтборе(ЗапрещенныеВОтбореПоля);
// УдалитьНедоступныеОтборы(Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы);
//
Процедура УдалитьНедоступныеОтборы(Знач Коллекция, Знач ДоступныеПоляОтбора = Неопределено) Экспорт
УдаляемыеЭлементы = Новый Массив; // Массив из ЭлементОтбораКомпоновкиДанных
Для Каждого ТекущиеДанные Из Коллекция Цикл
Если ТипЗнч(ТекущиеДанные) = Тип("ОтборКомпоновкиДанных") Тогда
УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ТекущиеДанные.ДоступныеПоляОтбора);
ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ДоступныеПоляОтбора);
ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Если НЕ ТекущиеДанные.Использование Тогда
Продолжить;
КонецЕсли;
Для Каждого ИмяСвойства Из СтрРазделить("ЛевоеЗначение,ПравоеЗначение",",") Цикл
ТекущееПоле = ТекущиеДанные[ИмяСвойства]; // ПолеКомпоновкиДанных
Если ТипЗнч(ТекущееПоле) = Тип("ПолеКомпоновкиДанных")
И ДоступныеПоляОтбора.НайтиПоле(ТекущееПоле) = Неопределено Тогда
УдаляемыеЭлементы.Добавить(ТекущиеДанные);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл
Коллекция.Удалить(УдаляемыйЭлемент);
КонецЦикла;
КонецПроцедуры
// MIT License
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/15
//
// Написан для статьи Как ограничить поля отбора в динамическом списке и ничего не сломать:
// https://infostart.ru/public/1226445/?ref=1159
//
// Параметры:
// Коллекция - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных, КоллекцияЭлементовОтбораКомпоновкиДанных - Коллекция элементов отбора.
// ДоступныеПоляОтбора - Неопределено, ДоступныеПоляКомпоновкиДанных - Список доступных полей отбора. При первоначальном вызове не передаётся.
//
// Пример:
// Список.УстановитьОграниченияИспользованияВОтборе(ЗапрещенныеВОтбореПоля);
// УдалитьНедоступныеОтборы(Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы);
//
Процедура УдалитьНедоступныеОтборы(Знач Коллекция, Знач ДоступныеПоляОтбора = Неопределено) Экспорт
УдаляемыеЭлементы = Новый Массив; // Массив из ЭлементОтбораКомпоновкиДанных
Для Каждого ТекущиеДанные Из Коллекция Цикл
Если ТипЗнч(ТекущиеДанные) = Тип("ОтборКомпоновкиДанных") Тогда
УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ТекущиеДанные.ДоступныеПоляОтбора);
ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ДоступныеПоляОтбора);
ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Если НЕ ТекущиеДанные.Использование Тогда
Продолжить;
КонецЕсли;
Для Каждого ИмяСвойства Из СтрРазделить("ЛевоеЗначение,ПравоеЗначение",",") Цикл
ТекущееПоле = ТекущиеДанные[ИмяСвойства]; // ПолеКомпоновкиДанных
Если ТипЗнч(ТекущееПоле) = Тип("ПолеКомпоновкиДанных")
И ДоступныеПоляОтбора.НайтиПоле(ТекущееПоле) = Неопределено Тогда
УдаляемыеЭлементы.Добавить(ТекущиеДанные);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл
Коллекция.Удалить(УдаляемыйЭлемент);
КонецЦикла;
КонецПроцедуры
// MIT License
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник