НайтиВариантыОтчетов (БСП)

Автор: 1С
ОбщийМодуль.ВариантыОтчетов
БСП

Найти варианты отчетов. Возвращает список вариантов отчетов согласно заданным параметрам.

// Возвращает список вариантов отчетов согласно заданным параметрам.
// При поиске по подстроке СтрокаПоиска также подсвечивает найденные места в названиях и описаниях отчетов.
//
// Параметры:
//   ПараметрыПоиска - Структура - со свойствами:
//     * СтрокаПоиска  - Строка - Необязательный. Одно или несколько слов, которые содержатся в названиях и описаниях 
//                                искомых вариантов отчетов.
//     * Подсистемы    - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Необязательный.
//                       Искать только среди вариантов отчетов, относящихся к указанным подсистемам.
//     * ЖесткийОтборПоПодсистемам - Булево - Необязательный. Если Истина, выдавать результаты только из указанных подсистем.
//                       Иначе предлагать также релевантные результаты поиска из других подсистем.
//     * Отчеты        - Массив из СправочникСсылка.ВариантыОтчетов - Необязательный. Искать только среди указанных отчетов.
//     * ТипыОтчетов   - Массив из ПеречислениеСсылка.ТипыОтчетов - Необязательный. Искать только среди указанных 
//                       типов отчетов.
//     * ПометкаУдаления - Булево - Необязательный. Если Ложь, то возвращаются все варианты отчетов. 
//                       Если Истина или не задано, то возвращаются только варианты отчетов, не помеченные на удаление.
//     * ТолькоЛичные  - Булево - Необязательный. Если Ложь или не задано, то администратору возвращаются все варианты отчетов,
//                       а пользователю только доступные ему варианты отчетов.
//                       Если Истина, то администратору также возвращаются только личные варианты отчетов как и для
//                       неполноправного пользователя.
//   ПолучатьИтоговуюТаблицу - Булево - Необязательный. Если Истина, то в возвращаемом значении заполняется свойство ТаблицаЗначений. 
//   ПолучатьПодсветку - Булево - Необязательный. Если Истина, то в возвращаемом значении заполняются свойства 
//                       ПодсветкаВариантов, Подсистемы, ПодсветкаПодсистем, ВариантыСвязанныеСПодсистемами, РодителиСвязанныеСВариантами. 
//
// Возвращаемое значение: 
//   Структура - со свойствами:
//       * Ссылки - Массив из СправочникСсылка.ВариантыОтчетов -
//           Вариантами отчетов, в названиях и описаниях которых, найдены все искомые слова.
//       * ПодсветкаВариантов - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска).
//           ** Ключ - СправочникСсылка.ВариантыОтчетов.
//           ** Значение - Структура - со свойствами:
//               *** Ссылка - СправочникСсылка.ВариантыОтчетов.
//               *** НаименованияПолей                    - Строка.
//               *** НаименованияПараметровИОтборов       - Строка.
//               *** КлючевыеСлова                        - Строка.
//               *** Описание                             - Строка.
//               *** НаименованияПользовательскихНастроек - Строка.
//               *** ГдеНайдены                           - Структура:
//                   **** НаименованияПолей                    - Число.
//                   **** НаименованияПараметровИОтборов       - Число.
//                   **** КлючевыеСлова                        - Число.
//                   **** Описание                             - Число.
//                   **** НаименованияПользовательскихНастроек - Число.
//       * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - 
//           Заполняется подсистемами, в наименованиях которых найдены все искомые слова.
//           Для таких подсистем должны выводиться все вложенные варианты отчетов.
//       * ПодсветкаПодсистем - Соответствие - Подсветка найденных слов (если задана СтрокаПоиска).
//           ** Ключ - СправочникСсылка.ВариантыОтчетов.
//           ** Значение - Структура - со свойствами:
//               *** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных.
//               *** НаименованиеПодсистемы - Строка.
//       * ВариантыСвязанныеСПодсистемами - Соответствие - Варианты отчетов и их подсистемы.
//           Заполняется когда часть слов найдена в данных варианта, а другая часть - в наименованиях его подсистем.
//           В этом случае вариант должен выводиться только в найденных подсистемах (а в других - не должен выводиться).
//           Применяется в панели отчетов.
//           ** Ключ - СправочникСсылка.ВариантыОтчетов - Вариант.
//           ** Значение - Массив Из СправочникСсылка.ИдентификаторыОбъектовМетаданных - Подсистемы.
//       * ТаблицаЗначений - ТаблицаЗначений - заполняется, если задан ПараметрыПоиска.ПолучатьИтоговуюТаблицу:
//           ** Ссылка - СправочникСсылка.ВариантыОтчетов
//           ** Родитель - СправочникСсылка.ВариантыОтчетов
//           ** Наименование - Строка
//           ** ТолькоДляАвтора - Булево
//           ** Автор - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи
//           ** АвторПредставление - Строка
//           ** Отчет - СправочникСсылка.ИдентификаторыОбъектовМетаданных, СправочникСсылка.ИдентификаторыОбъектовРасширений, 
//                      Строка, СправочникСсылка.ДополнительныеОтчетыИОбработки
//           ** ИмяОтчета - Строка
//           ** КлючВарианта - Строка
//           ** ТипОтчета - ПеречислениеСсылка.ТипыОтчетов
//           ** Пользовательский - Булево
//           ** ПредопределенныйВариант - СправочникСсылка.ПредопределенныеВариантыОтчетов, СправочникСсылка.ПредопределенныеВариантыОтчетовРасширений
//           ** НаименованияПараметровИОтборов - Строка
//           ** НаименованияПолей - Строка
//           ** КлючевыеСлова - Строка
//           ** Описание - Строка
//           ** Подсистема
//           ** НаименованиеПодсистемы - Строка
//           ** КлючПользовательскойНастройки - Строка
//           ** ПредставлениеПользовательскойНастройки - Строка
//           ** ПометкаУдаления - Булево
//
Функция НайтиВариантыОтчетов(Знач ПараметрыПоиска, Знач ПолучатьИтоговуюТаблицу = Ложь, Знач ПолучатьПодсветку = Ложь) Экспорт
	
	Если ПредставленияЗаполнены() = "НеЗаполнены" Тогда
		Настройки = ПараметрыОбновленияНастроек();
		Настройки.Отложенное = Истина;
		Обновить(Настройки);
	КонецЕсли;	
	
	ЕстьСтрокаПоиска = ПараметрыПоиска.Свойство("СтрокаПоиска") И ЗначениеЗаполнено(ПараметрыПоиска.СтрокаПоиска);
	ЕстьОтборПоОтчетам = ПараметрыПоиска.Свойство("Отчеты") И ЗначениеЗаполнено(ПараметрыПоиска.Отчеты);
	ЕстьОтборПоПодсистемам = ПараметрыПоиска.Свойство("Подсистемы") И ЗначениеЗаполнено(ПараметрыПоиска.Подсистемы);
	ЖесткийОтборПоПодсистемам = ЕстьОтборПоПодсистемам
		И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "ЖесткийОтборПоПодсистемам", Истина);
	ЕстьОтборПоТипамОтчетов = ПараметрыПоиска.Свойство("ТипыОтчетов") И ЗначениеЗаполнено(ПараметрыПоиска.ТипыОтчетов);
	
	Результат = Новый Структура;
	Результат.Вставить("Ссылки", Новый Массив);
	Результат.Вставить("ПодсветкаВариантов", Новый Соответствие);
	Результат.Вставить("Подсистемы", Новый Массив);
	Результат.Вставить("ПодсветкаПодсистем", Новый Соответствие);
	Результат.Вставить("ВариантыСвязанныеСПодсистемами", Новый Соответствие);
	Результат.Вставить("РодителиСвязанныеСВариантами", Новый Массив);
	Если ПолучатьИтоговуюТаблицу Тогда
		Результат.Вставить("ТаблицаЗначений", Новый ТаблицаЗначений);
	КонецЕсли;
	Если Не ЕстьОтборПоПодсистемам И Не ЕстьСтрокаПоиска И Не ЕстьОтборПоТипамОтчетов И Не ЕстьОтборПоОтчетам Тогда
		Возврат Результат;
	КонецЕсли;
	
	ЕстьОтборПоВидимости = ЕстьОтборПоПодсистемам И ПараметрыПоиска.Свойство("ТолькоВидимыеВПанелиОтчетов") 
		И ПараметрыПоиска.ТолькоВидимыеВПанелиОтчетов = Истина;
	ТолькоНепомеченныеДляУдаления = ?(ПараметрыПоиска.Свойство("ПометкаУдаления"), ПараметрыПоиска.ПометкаУдаления, Истина);
	Если ЕстьОтборПоОтчетам Тогда
		ОтборПоОтчетам = ПараметрыПоиска.Отчеты;
		ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ОтключенныеВариантыОтчетов(ОтборПоОтчетам));
	Иначе
		ПараметрыПоиска.Вставить("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы());
		ПараметрыПоиска.Вставить("ОтчетыПользователя", ОтчетыТекущегоПользователя());
		ОтборПоОтчетам = ПараметрыПоиска.ОтчетыПользователя;
	КонецЕсли;
	
	ЕстьПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи);
	ТекущийПользователь = Пользователи.АвторизованныйПользователь();
	ПоказыватьЛичныеВариантыОтчетовДругихАвторов = Пользователи.ЭтоПолноправныйПользователь();
	Если ПараметрыПоиска.Свойство("ТолькоЛичные") Тогда
		ПоказыватьЛичныеВариантыОтчетовДругихАвторов = ПоказыватьЛичныеВариантыОтчетовДругихАвторов И ПараметрыПоиска.ТолькоЛичные;
	КонецЕсли;	
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ТекущийПользователь",          ТекущийПользователь);
	Запрос.УстановитьПараметр("ОтчетыПользователя",           ОтборПоОтчетам);
	Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы);
	Запрос.УстановитьПараметр("ВерсияРасширений",             ПараметрыСеанса.ВерсияРасширений);
	Запрос.УстановитьПараметр("НетОтбораПоПометкеУдаления",   НЕ ТолькоНепомеченныеДляУдаления);
	Запрос.УстановитьПараметр("ЕстьПравоЧтенияАвторов",       ЕстьПравоЧтенияАвторов);
	Запрос.УстановитьПараметр("ЕстьОтборПоТипамОтчетов",      ЕстьОтборПоТипамОтчетов);
	Запрос.УстановитьПараметр("ЕстьОтборПоПодсистемам",       ЕстьОтборПоПодсистемам);
	Запрос.УстановитьПараметр("ТипыОтчетов",                  ?(ЕстьОтборПоТипамОтчетов, ПараметрыПоиска.ТипыОтчетов, Новый Массив));
	Запрос.УстановитьПараметр("НеПолучатьОписания",           Не ЕстьСтрокаПоиска И Не ПолучатьИтоговуюТаблицу);
	Запрос.УстановитьПараметр("ПолучатьИтоговуюТаблицу",      ПолучатьИтоговуюТаблицу);
	Запрос.УстановитьПараметр("НаименованиеРабочегоСтола",    НСтр("ru = 'Начальная страница'"));
	Запрос.УстановитьПараметр("ПоказыватьЛичныеВариантыОтчетовДругихАвторов", ПоказыватьЛичныеВариантыОтчетовДругихАвторов);
	Запрос.УстановитьПараметр("ЭтоОсновнойЯзык",              ТекущийЯзык() = Метаданные.ОсновнойЯзык);
	Запрос.УстановитьПараметр("КодЯзыка",                     ТекущийЯзык().КодЯзыка);
	
	Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда
		ТекстЗапроса =
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ВариантыОтчетов.Ссылка КАК Ссылка,
		|	ВариантыОтчетов.Родитель КАК Родитель,
		|	ВЫБОР
		|		КОГДА &ЕстьПравоЧтенияАвторов
		|				И &ПолучатьИтоговуюТаблицу
		|			ТОГДА ВариантыОтчетов.Автор
		|		ИНАЧЕ НЕОПРЕДЕЛЕНО
		|	КОНЕЦ КАК Автор,
		|	ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора,
		|	ВариантыОтчетов.Отчет КАК Отчет,
		|	ВариантыОтчетов.КлючВарианта КАК КлючВарианта,
		|	ВариантыОтчетов.ТипОтчета КАК ТипОтчета,
		|	ВариантыОтчетов.Пользовательский КАК Пользовательский,
		|	ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант,
		|	ВЫБОР
		|		КОГДА ВариантыОтчетов.Пользовательский
		|			ТОГДА ВариантыОтчетов.ИнтерактивнаяПометкаУдаления
		|		КОГДА ВариантыОтчетов.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Расширение)
		|			ТОГДА ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL
		|		ИНАЧЕ ЕСТЬNULL(ВариантыКонфигурации.ПометкаУдаления, ВариантыОтчетов.ПометкаУдаления)
		|	КОНЕЦ КАК ПометкаУдаления,
		|	ВариантыОтчетов.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА ВариантыОтчетов.Пользовательский
		|				ИЛИ ВариантыОтчетов.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка))
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Наименование, ВариантыОтчетов.Наименование) КАК СТРОКА(1000))
		|		КОГДА &ЭтоОсновнойЯзык
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурации.Наименование, ВариантыРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000))
		|		ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование), ВариантыОтчетов.Наименование) КАК СТРОКА(1000))
		|	КОНЕЦ КАК НаименованиеВарианта,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПолей, ВариантыРасширений.НаименованияПолей) КАК СТРОКА(1000))
		|		КОГДА НЕ &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.НаименованияПолей, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.НаименованияПолей, ПредставленияИзРасширений.НаименованияПолей) КАК СТРОКА(1000))
		|		ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПолей КАК СТРОКА(1000))
		|	КОНЕЦ КАК НаименованияПолей,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.НаименованияПараметровИОтборов, ВариантыРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000))
		|		КОГДА НЕ &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.НаименованияПараметровИОтборов, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.НаименованияПараметровИОтборов, ПредставленияИзРасширений.НаименованияПараметровИОтборов) КАК СТРОКА(1000))
		|		ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000))
		|	КОНЕЦ КАК НаименованияПараметровИОтборов,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.КлючевыеСлова, ВариантыРасширений.КлючевыеСлова) КАК СТРОКА(1000))
		|		КОГДА НЕ &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияИзКонфигурации.КлючевыеСлова, ПредставленияИзРасширений.КлючевыеСлова) КАК СТРОКА(1000))
		|		ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.КлючевыеСлова КАК СТРОКА(1000))
		|	КОНЕЦ КАК КлючевыеСлова,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА ВариантыОтчетов.Пользовательский
		|				ИЛИ ВариантыОтчетов.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка))
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000))
		|		КОГДА &ЭтоОсновнойЯзык
		|				И ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """"
		|			ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000))
		|		ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Описание, ВариантыОтчетов.Описание) КАК СТРОКА(1000))
		|	КОНЕЦ КАК Описание
		|ПОМЕСТИТЬ Варианты
		|ИЗ
		|	Справочник.ВариантыОтчетов КАК ВариантыОтчетов
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредопределенныеВариантыОтчетовВерсийРасширений КАК ДоступныеВариантыРасширений
		|		ПО ВариантыОтчетов.ПредопределенныйВариант = ДоступныеВариантыРасширений.Вариант
		|			И (ДоступныеВариантыРасширений.ВерсияРасширений = &ВерсияРасширений)
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации
		|		ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыКонфигурации.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширений
		|		ПО ВариантыОтчетов.ПредопределенныйВариант = ВариантыРасширений.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов
		|		ПО ВариантыОтчетов.Ссылка = ПредставленияВариантов.Ссылка
		|			И (ПредставленияВариантов.КодЯзыка = &КодЯзыка)
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации
		|		ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка
		|			И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка)
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений
		|		ПО ВариантыОтчетов.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка
		|			И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка)
		|ГДЕ
		|	(НЕ &ЕстьОтборПоТипамОтчетов
		|			ИЛИ ВариантыОтчетов.ТипОтчета В (&ТипыОтчетов))
		|	И ВариантыОтчетов.Отчет В(&ОтчетыПользователя)
		|	И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)
		|	И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов
		|			ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ
		|			ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь)
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Ссылка
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ВариантыОтчетов.Ссылка КАК Ссылка,
		|	РазмещениеКонфигурации.Подсистема КАК Подсистема,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы""
		|			ТОГДА &НаименованиеРабочегоСтола
		|		ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним
		|	КОНЕЦ КАК НаименованиеПодсистемы
		|ПОМЕСТИТЬ РазмещениеПредопределенных
		|ИЗ
		|	Варианты КАК ВариантыОтчетов
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации
		|		ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ)
		|			И (&ПоказыватьЛичныеВариантыОтчетовДругихАвторов
		|				ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ
		|				ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь)
		|			И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ
		|				ИЛИ &НетОтбораПоПометкеУдаления)
		|			И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка
		|			И (НЕ &ЕстьОтборПоПодсистемам
		|				ИЛИ РазмещениеКонфигурации.Подсистема В (&ПодсистемыОтчетов))
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ВариантыОтчетов.Ссылка,
		|	РазмещениеРасширений.Подсистема,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы""
		|			ТОГДА &НаименованиеРабочегоСтола
		|		ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним
		|	КОНЕЦ
		|ИЗ
		|	Варианты КАК ВариантыОтчетов
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений
		|		ПО (ВариантыОтчетов.Пользовательский = ЛОЖЬ)
		|			И ВариантыОтчетов.ПредопределенныйВариант = РазмещениеРасширений.Ссылка
		|			И (НЕ &ЕстьОтборПоПодсистемам
		|				ИЛИ РазмещениеРасширений.Подсистема В (&ПодсистемыОтчетов))
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Ссылка
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ВариантыОтчетов.Ссылка КАК Ссылка,
		|	ВариантыРазмещение.Использование КАК Использование,
		|	ВариантыРазмещение.Подсистема КАК Подсистема,
		|	ВЫБОР
		|		КОГДА &НеПолучатьОписания
		|			ТОГДА НЕОПРЕДЕЛЕНО
		|		КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы""
		|			ТОГДА &НаименованиеРабочегоСтола
		|		ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним
		|	КОНЕЦ КАК НаименованиеПодсистемы
		|ПОМЕСТИТЬ РазмещениеВариантов
		|ИЗ
		|	Варианты КАК ВариантыОтчетов
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение
		|		ПО (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ
		|				ИЛИ &НетОтбораПоПометкеУдаления)
		|			И ВариантыОтчетов.Ссылка = ВариантыРазмещение.Ссылка
		|			И (НЕ &ЕстьОтборПоПодсистемам
		|				ИЛИ ВариантыРазмещение.Подсистема В (&ПодсистемыОтчетов))
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Ссылка
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ЕСТЬNULL(РазмещениеВариантов.Ссылка, РазмещениеПредопределенных.Ссылка) КАК Ссылка,
		|	ЕСТЬNULL(РазмещениеВариантов.Подсистема, РазмещениеПредопределенных.Подсистема) КАК Подсистема,
		|	ЕСТЬNULL(РазмещениеВариантов.НаименованиеПодсистемы, РазмещениеПредопределенных.НаименованиеПодсистемы) КАК НаименованиеПодсистемы,
		|	ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА) КАК Использование,
		|	ВЫБОР
		|		КОГДА РазмещениеВариантов.Ссылка ЕСТЬ NULL
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоНастройкаРазработчика
		|ПОМЕСТИТЬ РазмещениеВсех
		|ИЗ
		|	РазмещениеПредопределенных КАК РазмещениеПредопределенных
		|		ПОЛНОЕ СОЕДИНЕНИЕ РазмещениеВариантов КАК РазмещениеВариантов
		|		ПО (РазмещениеВариантов.Ссылка = РазмещениеПредопределенных.Ссылка)
		|			И (РазмещениеВариантов.Подсистема = РазмещениеПредопределенных.Подсистема)
		|ГДЕ
		|	ЕСТЬNULL(РазмещениеВариантов.Использование, ИСТИНА)
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Ссылка
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	РазмещениеВсех.Ссылка КАК Ссылка,
		|	РазмещениеВсех.Подсистема КАК Подсистема,
		|	РазмещениеВсех.НаименованиеПодсистемы КАК НаименованиеПодсистемы
		|ПОМЕСТИТЬ РазмещениеВидимых
		|ИЗ
		|	РазмещениеВсех КАК РазмещениеВсех
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК ЛичныеНастройки
		|		ПО РазмещениеВсех.Подсистема = ЛичныеНастройки.Подсистема
		|			И РазмещениеВсех.Ссылка = ЛичныеНастройки.Вариант
		|			И (ЛичныеНастройки.Пользователь = &ТекущийПользователь)
		|		ЛЕВОЕ СОЕДИНЕНИЕ Варианты КАК Варианты
		|		ПО РазмещениеВсех.Ссылка = Варианты.Ссылка
		|ГДЕ
		|	ЕСТЬNULL(ЛичныеНастройки.Видимость, Варианты.ВидимостьПоУмолчанию)
		|	И (Варианты.ПометкаУдаления = ЛОЖЬ
		|			ИЛИ &НетОтбораПоПометкеУдаления)
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Ссылка
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ВариантыОтчетов.Ссылка КАК Ссылка,
		|	ВариантыОтчетов.Родитель КАК Родитель,
		|	ВариантыОтчетов.НаименованиеВарианта КАК НаименованиеВарианта,
		|	ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора,
		|	ВЫБОР
		|		КОГДА &ЕстьПравоЧтенияАвторов
		|				И &ПолучатьИтоговуюТаблицу
		|			ТОГДА ВариантыОтчетов.Автор
		|		ИНАЧЕ НЕОПРЕДЕЛЕНО
		|	КОНЕЦ КАК Автор,
		|	ВЫБОР
		|		КОГДА &ЕстьПравоЧтенияАвторов
		|				И &ПолучатьИтоговуюТаблицу
		|			ТОГДА ЕСТЬNULL(ВариантыОтчетов.Автор.Наименование, """")
		|		ИНАЧЕ """"
		|	КОНЕЦ КАК АвторПредставление,
		|	ВариантыОтчетов.Отчет КАК Отчет,
		|	ВЫБОР
		|		КОГДА &ПолучатьИтоговуюТаблицу
		|			ТОГДА ВариантыОтчетов.Отчет.Имя
		|		ИНАЧЕ НЕОПРЕДЕЛЕНО
		|	КОНЕЦ КАК ИмяОтчета,
		|	ВариантыОтчетов.КлючВарианта КАК КлючВарианта,
		|	ВариантыОтчетов.ТипОтчета КАК ТипОтчета,
		|	ВариантыОтчетов.Пользовательский КАК Пользовательский,
		|	ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант,
		|	ВариантыОтчетов.НаименованияПараметровИОтборов КАК НаименованияПараметровИОтборов,
		|	ВариантыОтчетов.НаименованияПолей КАК НаименованияПолей,
		|	ВариантыОтчетов.КлючевыеСлова КАК КлючевыеСлова,
		|	ВариантыОтчетов.Описание КАК Описание,
		|	Размещение.Подсистема КАК Подсистема,
		|	Размещение.НаименованиеПодсистемы КАК НаименованиеПодсистемы,
		|	НЕОПРЕДЕЛЕНО КАК КлючПользовательскойНастройки,
		|	НЕОПРЕДЕЛЕНО КАК ПредставлениеПользовательскойНастройки,
		|	ВариантыОтчетов.ПометкаУдаления КАК ПометкаУдаления
		|ИЗ
		|	Варианты КАК ВариантыОтчетов
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение
		|		ПО ВариантыОтчетов.Ссылка = Размещение.Ссылка
		|ГДЕ
		|	(ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ
		|			ИЛИ &НетОтбораПоПометкеУдаления)
		|	И &ВариантыИПодсистемыПоСтрокеПоиска
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	Пользовательские.Вариант,
		|	Варианты.Родитель,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	НЕОПРЕДЕЛЕНО,
		|	Пользовательские.КлючПользовательскойНастройки,
		|	Пользовательские.Наименование,
		|	НЕОПРЕДЕЛЕНО
		|ИЗ
		|	Варианты КАК Варианты
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПользовательскиеНастройкиОтчетов КАК Пользовательские
		|		ПО Варианты.Ссылка = Пользовательские.Вариант
		|ГДЕ
		|	Пользовательские.Пользователь = &ТекущийПользователь
		|	И &ПользовательскиеНастройкиПоСтрокеПоиска
		|	И (Пользовательские.ПометкаУдаления = ЛОЖЬ
		|			ИЛИ &НетОтбораПоПометкеУдаления)
		|	И (Варианты.ПометкаУдаления = ЛОЖЬ
		|			ИЛИ &НетОтбораПоПометкеУдаления)";
		
		Если Не ЕстьОтборПоВидимости Тогда
			// Удаление временной таблицы для фильтра по видимости.
			УдалитьВременнуюТаблицу(ТекстЗапроса, "РазмещениеВидимых");
			// Подмена имени временной таблицы, из которой нужно делать выборку.
			ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "РазмещениеВидимых", "РазмещениеВсех");
		КонецЕсли;
		
		Если ЕстьОтборПоПодсистемам Тогда
			Если ТипЗнч(ПараметрыПоиска.Подсистемы) = Тип("Массив") Тогда
				ПодсистемыОтчетов = ПараметрыПоиска.Подсистемы;
			Иначе
				ПодсистемыОтчетов = Новый Массив;
				ПодсистемыОтчетов.Добавить(ПараметрыПоиска.Подсистемы);
			КонецЕсли;
		Иначе
			ПодсистемыОтчетов = Новый Массив;
		КонецЕсли;
		Запрос.УстановитьПараметр("ПодсистемыОтчетов", ПодсистемыОтчетов);
		
		Если ЕстьСтрокаПоиска И Не ЖесткийОтборПоПодсистемам Тогда
			// Для поиска информация о размещении является дополнительной, а не ключевой.
			Если ЕстьОтборПоВидимости Тогда
				ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
					"ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение",
					"ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВидимых КАК Размещение");
			Иначе
				ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
					"ВНУТРЕННЕЕ СОЕДИНЕНИЕ РазмещениеВсех КАК Размещение",
					"ЛЕВОЕ СОЕДИНЕНИЕ РазмещениеВсех КАК Размещение");
			КонецЕсли;	
		КонецЕсли;
		
		СловаПоиска = ПодготовитьУсловиеПоискаПоСтроке(Запрос, ТекстЗапроса, ЕстьСтрокаПоиска, ПараметрыПоиска, 
			ЕстьПравоЧтенияАвторов);
	Иначе
		ПодготовитьЗапросОтчетовСПростымиОтборами(Запрос, ТекстЗапроса, ЕстьОтборПоТипамОтчетов, ПараметрыПоиска);
	КонецЕсли;
	
	Запрос.Текст = ТекстЗапроса;
	ИсходнаяТаблица = Запрос.Выполнить().Выгрузить();
	
	Если ПолучатьИтоговуюТаблицу Тогда
		Результат.ТаблицаЗначений = ИсходнаяТаблица;
	КонецЕсли;
	Если ИсходнаяТаблица.Количество() = 0 Тогда
		Возврат Результат;
	КонецЕсли;
	
	Если ЕстьСтрокаПоиска И ПолучатьПодсветку Тогда
		СформироватьРезультатыПоиска(СловаПоиска, ИсходнаяТаблица, Результат);
	Иначе	
		СформироватьСписокСсылок(ИсходнаяТаблица, Результат.Ссылки);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

НайтиВариантыОтчетовДляВывода (БСП)

УдалитьВариантОтчета (БСП)

УдалитьПользовательскийВариантОтчета (БСП)

ПриУдаленииПользовательскихВариантовОтчета (БСП)

ТаблицаВариантовОтчетов (БСП)

ОтключенныеВариантыОтчетов (БСП)

ПредопределенныеВариантыОтчетов (БСП)

ВариантОтчета (БСП)

ПользовательскиеВариантыОтчетов (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом