Тип значения ограниченный связью по типу. Методы работы с СКД из формы отчета.
////////////////////////////////////////////////////////////////////////////////
// Методы работы с СКД из формы отчета.
Функция ТипЗначенияОграниченныйСвязьюПоТипу(Настройки, ПользовательскиеНастройки, ЭлементНастройки, ОписаниеЭлементаНастройки, ТипЗначения = Неопределено) Экспорт
Если ОписаниеЭлементаНастройки = Неопределено Тогда
Возврат ?(ТипЗначения = Неопределено, Новый ОписаниеТипов("Неопределено"), ТипЗначения);
КонецЕсли;
Если ТипЗначения = Неопределено Тогда
ТипЗначения = ОписаниеЭлементаНастройки.ТипЗначения;
КонецЕсли;
СвязьПоТипу = ОписаниеЭлементаНастройки.СвязьПоТипу;
СвязанныйЭлементНастройки = ЭлементНастройкиПоПолю(Настройки, ПользовательскиеНастройки, СвязьПоТипу.Поле);
Если СвязанныйЭлементНастройки = Неопределено Тогда
Возврат ТипЗначения;
КонецЕсли;
ДопустимыеВидыСравнения = Новый Массив;
ДопустимыеВидыСравнения.Добавить(ВидСравненияКомпоновкиДанных.Равно);
ДопустимыеВидыСравнения.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии);
Если ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных")
И (Не СвязанныйЭлементНастройки.Использование
Или ДопустимыеВидыСравнения.Найти(СвязанныйЭлементНастройки.ВидСравнения) = Неопределено) Тогда
Возврат ТипЗначения;
КонецЕсли;
ОписаниеСвязанногоЭлементаНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(Настройки, СвязанныйЭлементНастройки);
Если ОписаниеСвязанногоЭлементаНастройки = Неопределено Тогда
Возврат ТипЗначения;
КонецЕсли;
Если ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
И (ОписаниеСвязанногоЭлементаНастройки.Использование <> ИспользованиеПараметраКомпоновкиДанных.Всегда
Или Не СвязанныйЭлементНастройки.Использование) Тогда
Возврат ТипЗначения;
КонецЕсли;
Если ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ЗначениеСвязанногоЭлементаНастройки = СвязанныйЭлементНастройки.Значение;
ИначеЕсли ТипЗнч(СвязанныйЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЗначениеСвязанногоЭлементаНастройки = СвязанныйЭлементНастройки.ПравоеЗначение;
КонецЕсли;
ТипСубконто = ВариантыОтчетовВызовСервера.ТипСубконто(ЗначениеСвязанногоЭлементаНастройки, СвязьПоТипу.ЭлементСвязи);
Если ТипЗнч(ТипСубконто) = Тип("ОписаниеТипов") Тогда
СвязанныеТипы = ТипСубконто.Типы();
Иначе
СвязанныеТипы = ОписаниеСвязанногоЭлементаНастройки.ТипЗначения.Типы();
КонецЕсли;
ВычитаемыеТипы = ТипЗначения.Типы();
Индекс = ВычитаемыеТипы.ВГраница();
Пока Индекс >= 0 Цикл
Если СвязанныеТипы.Найти(ВычитаемыеТипы[Индекс]) <> Неопределено Тогда
ВычитаемыеТипы.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Возврат Новый ОписаниеТипов(ТипЗначения,, ВычитаемыеТипы);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПереопределитьТаблицуТиповПолучателей (БСП)
Интерактивный отбор дерева значений
ПостоянныеВидыОграниченийПравОбъектовМетаданных (БСП)
ПриЗаполненииНаборовЗначенийДоступа (БСП)
ЗначениеИзФиксированногоТипа (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)