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