#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
ОпределитьПоведениеВМобильномКлиенте();
ПараметрыКлиента = ВариантыОтчетов.ПараметрыКлиента();
ВключаяПодчиненные = Истина;
ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя().Дерево.Скопировать();
ДеревоПодсистемЗаполнитьПолноеПредставление(ДеревоЗначений.Строки);
СтрокаДерева = ДеревоЗначений.Строки.Добавить();
СтрокаДерева.Имя = "НеВключенныеВРазделы";
СтрокаДерева.ПолноеИмя = "НеВключенныеВРазделы";
СтрокаДерева.Представление = НСтр("ru = 'Не включенные в разделы'");
СтрокаДерева.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка();
ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем");
ДеревоПодсистемТекущаяСтрока = -1;
Элементы.ДеревоПодсистем.ТекущаяСтрока = 0;
Если Параметры.РежимВыбора = Истина Тогда
РежимРаботыФормы = "Выбор";
РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
Элементы.Список.Отображение = ОтображениеТаблицы.Список;
ИначеЕсли Параметры.РазделСсылка <> Неопределено Тогда
РежимРаботыФормы = "ВсеОтчетыРаздела";
РодительскиеЭлементы = Новый Массив;
РодительскиеЭлементы.Добавить(ДеревоПодсистем.ПолучитьЭлементы()[0]);
Пока РодительскиеЭлементы.Количество() > 0 Цикл
РодительскийЭлемент = ЭлементДереваПодсистем(РодительскиеЭлементы);
ДочерниеЭлементы = РодительскийЭлемент.ПолучитьЭлементы();
РодительскиеЭлементы.Удалить(0);
Для Каждого ДочернийЭлемент Из ДочерниеЭлементы Цикл
Если ДочернийЭлемент.Ссылка = Параметры.РазделСсылка Тогда
Элементы.ДеревоПодсистем.ТекущаяСтрока = ДочернийЭлемент.ПолучитьИдентификатор();
РодительскиеЭлементы.Очистить();
Прервать;
КонецЕсли;
РодительскиеЭлементы.Добавить(ДочернийЭлемент);
КонецЦикла;
КонецЦикла;
Иначе
РежимРаботыФормы = "Список";
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Изменить", "Отображение",
ОтображениеКнопки.КартинкаИТекст);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РазместитьВРазделах",
"ТолькоВоВсехДействиях", Ложь);
КонецЕсли;
ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки();
Элементы.СтрокаПоиска.ПодсказкаВвода = ГлобальныеНастройки.Поиск.ПодсказкаВвода;
КлючСохраненияПоложенияОкна = РежимРаботыФормы;
КлючНазначенияИспользования = РежимРаботыФормы;
УстановитьСвойствоСпискаПоПараметруФормы("РежимВыбора");
УстановитьСвойствоСпискаПоПараметруФормы("ВыборГруппИЭлементов");
УстановитьСвойствоСпискаПоПараметруФормы("МножественныйВыбор");
УстановитьСвойствоСпискаПоПараметруФормы("ТекущаяСтрока");
Элементы.Выбрать.КнопкаПоУмолчанию = Параметры.РежимВыбора;
Элементы.Выбрать.Видимость = Параметры.РежимВыбора;
Элементы.ОтборТипОтчета.Видимость = ВариантыОтчетов.ПолныеПраваНаВарианты();
СписокВыбора = Элементы.ОтборТипОтчета.СписокВыбора;
СписокВыбора.Добавить(1, НСтр("ru = 'Все, кроме внешних'"));
СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внутренний, НСтр("ru = 'Внутренние'"));
СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Расширение, НСтр("ru = 'Расширения'"));
СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Дополнительный, НСтр("ru = 'Дополнительные'"));
СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'"));
СтрокаПоиска = Параметры.СтрокаПоиска;
Если Параметры.Отбор.Свойство("ТипОтчета", ОтборТипОтчета) Тогда
Параметры.Отбор.Удалить("ТипОтчета");
КонецЕсли;
Если Параметры.ТолькоВарианты Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "КлючВарианта", "",
ВидСравненияКомпоновкиДанных.НеРавно,,, РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный);
КонецЕсли;
ПерсональныеНастройкиСписка = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "Справочник.ВариантыОтчетов.ФормаСписка");
Если ПерсональныеНастройкиСписка <> Неопределено Тогда
Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора);
КонецЕсли;
СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
СуффиксТекущегоЯзыка = ОбщегоНазначения.СуффиксЯзыкаТекущегоПользователя();
Если СуффиксТекущегоЯзыка <> Неопределено Тогда
Если ЗначениеЗаполнено(СуффиксТекущегоЯзыка) Тогда
СвойстваСписка.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "ВариантыОтчетовПереопределяемый.Наименование",
"ВариантыОтчетовПереопределяемый.Наименование" + СуффиксТекущегоЯзыка);
СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "ВариантыОтчетовПереопределяемый.Описание",
"ВариантыОтчетовПереопределяемый.Описание" + СуффиксТекущегоЯзыка);
СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "ВариантыКонфигурацииПереопределяемый.Наименование",
"ВариантыКонфигурацииПереопределяемый.Наименование" + СуффиксТекущегоЯзыка);
СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "ВариантыКонфигурацииПереопределяемый.Описание",
"ВариантыКонфигурацииПереопределяемый.Описание" + СуффиксТекущегоЯзыка);
КонецЕсли;
Иначе
СвойстваСписка.ТекстЗапроса = ТекстЗапросаПредставленияНаДругихЯзыкахВТабличнойЧасти();
КонецЕсли;
ОписаниеПоляИмяОтчета =
"ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетовПереопределяемый.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных)
| ТОГДА ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя
| КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетовПереопределяемый.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений)
| ТОГДА ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя
| ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК СТРОКА(150)), 14, 137)
|КОНЕЦ";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
ИмяТаблицыДополнительныеОтчеты = МодульДополнительныеОтчетыИОбработки.ИмяТаблицыДополнительныеОтчеты();
ОписаниеПоляИмяОтчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетовПереопределяемый.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных)
| ТОГДА ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК Справочник.ИдентификаторыОбъектовМетаданных).Имя
| КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетовПереопределяемый.Отчет) = ТИП(Справочник.ИдентификаторыОбъектовРасширений)
| ТОГДА ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК Справочник.ИдентификаторыОбъектовРасширений).Имя
| КОГДА ТИПЗНАЧЕНИЯ(ВариантыОтчетовПереопределяемый.Отчет) = ТИП(%1)
| ТОГДА ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК %1).ИмяОбъекта
| ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Отчет КАК СТРОКА(150)), 14, 137)
|КОНЕЦ", ИмяТаблицыДополнительныеОтчеты);
КонецЕсли;
Если Не ЗначениеЗаполнено(СвойстваСписка.ТекстЗапроса) Тогда
СвойстваСписка.ТекстЗапроса = Список.ТекстЗапроса;
КонецЕсли;
СвойстваСписка.ТекстЗапроса = СтрЗаменить(СвойстваСписка.ТекстЗапроса, "&ИмяОтчета", ОписаниеПоляИмяОтчета);
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);
Если СуффиксТекущегоЯзыка = Неопределено Тогда
Список.Параметры.УстановитьЗначениеПараметра("КодЯзыка", ТекущийЯзык().КодЯзыка);
КонецЕсли;
Список.Параметры.УстановитьЗначениеПараметра("ДоступныеОтчеты", ВариантыОтчетов.ОтчетыТекущегоПользователя());
Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы",
Новый Массив(ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()));
Список.Параметры.УстановитьЗначениеПараметра("ЭтоОсновнойЯзык", ОбщегоНазначения.ЭтоОсновнойЯзык());
Список.Параметры.УстановитьЗначениеПараметра("ВерсияРасширений", ПараметрыСеанса.ВерсияРасширений);
ТекущийЭлемент = Элементы.Список;
ВариантыОтчетов.ДополнитьОтборыИзСтруктуры(Список.КомпоновщикНастроек.Настройки.Отбор, Параметры.Отбор);
Параметры.Отбор.Очистить();
ОбновитьСодержимоеСписка("ПриСозданииНаСервере");
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если РежимРаботыФормы = "ВсеОтчетыРаздела" Или РежимРаботыФормы = "Выбор" Тогда
Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистемТекущаяСтрока, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант"
Или ИмяСобытия = "Запись_ВариантыОтчетов" Тогда
ДеревоПодсистемТекущаяСтрока = -1;
ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина);
ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияОбновленияВариантовОтчетовИзФайлов() Тогда
УстановитьОтборПоОбновленнымИзФайловОтчетов(Параметр);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОтборТипОтчетаПриИзменении(Элемент)
ОбновитьСодержимоеСписка();
КонецПроцедуры
&НаКлиенте
Процедура ОтборТипОтчетаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтборТипОтчета = Неопределено;
ОбновитьСодержимоеСписка();
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаПриИзменении(Элемент)
ОбновитьСодержимоеСпискаКлиент("СтрокаПоискаПриИзменении");
КонецПроцедуры
&НаКлиенте
Процедура ВключаяПодчиненныеПриИзменении(Элемент)
ДеревоПодсистемТекущаяСтрока = -1;
ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем
&НаКлиенте
Процедура ДеревоПодсистемПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПодсистемПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПодсистемПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина);
#Если МобильныйКлиент Тогда
ПодключитьОбработчикОжидания("УстановитьЗаголовокДереваПодсистем", 0.1, Истина);
ТекущийЭлемент = Элементы.Список;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПодсистемПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыРазмещения = ПараметрыРазмещения(ПараметрыПеретаскивания, Строка);
Если ПараметрыРазмещения = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПараметрыРазмещения.Варианты.Всего = 1 Тогда
Если ПараметрыРазмещения.Действие = "Копирование" Тогда
ШаблонВопроса = НСтр("ru = 'Разместить ""%1"" в ""%4""?'");
Иначе
ШаблонВопроса = НСтр("ru = 'Переместить ""%1"" из ""%3"" в ""%4""?'");
КонецЕсли;
Иначе
Если ПараметрыРазмещения.Действие = "Копирование" Тогда
ШаблонВопроса = НСтр("ru = 'Разместить варианты отчетов ""%1"" (%2 шт.) в ""%4""?'");
Иначе
ШаблонВопроса = НСтр("ru = 'Переместить варианты отчетов ""%1"" (%2 шт.) из ""%3"" в ""%4""?'");
КонецЕсли;
КонецЕсли;
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВопроса,
ПараметрыРазмещения.Варианты.Представление, Формат(ПараметрыРазмещения.Варианты.Всего, "ЧГ=0"),
ПараметрыРазмещения.Источник.ПолноеПредставление, ПараметрыРазмещения.Приемник.ПолноеПредставление);
Обработчик = Новый ОписаниеОповещения("ДеревоПодсистемПеретаскиваниеЗавершение", ЭтотОбъект, ПараметрыРазмещения);
ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
&НаКлиенте
Процедура СписокПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Элементы.Список.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если РежимРаботыФормы = "ВсеОтчетыРаздела" Тогда
СтандартнаяОбработка = Ложь;
ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, Элементы.Список.ТекущиеДанные);
ИначеЕсли РежимРаботыФормы = "Список" Тогда
СтандартнаяОбработка = Ложь;
ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(ВыбраннаяСтрока);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ВыполнитьПоиск(Команда)
ОбновитьСодержимоеСпискаКлиент("ВыполнитьПоиск");
КонецПроцедуры
&НаКлиенте
Процедура Изменить(Команда)
ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Элементы.Список.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьВариантОтчетаВФайл(Команда)
ВыбранныеВариантыОтчетов = Элементы.Список.ВыделенныеСтроки;
Если ВыбранныеВариантыОтчетов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.СохранениеВариантаОтчетаВФайл",
Новый Структура("ВыбранныеВариантыОтчетов", ВыбранныеВариантыОтчетов), ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьВариантОтчетаИзФайла(Команда)
ВыбранныеВариантыОтчетов = Элементы.Список.ВыделенныеСтроки;
Если ВыбранныеВариантыОтчетов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойстваВариантаОтчета = ВариантыОтчетовКлиент.СвойстваВариантаОтчетаОснования();
СвойстваВариантаОтчета.Ссылка = ВыбранныеВариантыОтчетов[0];
СвойстваВариантаОтчета.ПредставлениеВарианта = Строка(ВыбранныеВариантыОтчетов[0]);
ВариантыОтчетовКлиент.ОбновитьВариантОтчетаИзФайлов(СвойстваВариантаОтчета, УникальныйИдентификатор);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОпределитьПоведениеВМобильномКлиенте()
Если Не ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Возврат;
КонецЕсли;
Элементы.СтрокаПоиска.Ширина = 0;
Элементы.СтрокаПоиска.РастягиватьПоГоризонтали = Неопределено;
Элементы.СтрокаПоиска.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Элементы.СтрокаПоиска.КнопкаВыпадающегоСписка = Ложь;
Элементы.ВыполнитьПоиск.Отображение = ОтображениеКнопки.Картинка;
КонецПроцедуры
&НаСервере
Процедура ДеревоПодсистемЗаполнитьПолноеПредставление(НаборСтрок, ПредставлениеРодителя = "")
Для Каждого СтрокаДерева Из НаборСтрок Цикл
Если ПустаяСтрока(СтрокаДерева.Имя) Тогда
СтрокаДерева.ПолноеПредставление = "";
ИначеЕсли ПустаяСтрока(ПредставлениеРодителя) Тогда
СтрокаДерева.ПолноеПредставление = СтрокаДерева.Представление;
Иначе
СтрокаДерева.ПолноеПредставление = ПредставлениеРодителя + "." + СтрокаДерева.Представление;
КонецЕсли;
ДеревоПодсистемЗаполнитьПолноеПредставление(СтрокаДерева.Строки, СтрокаДерева.ПолноеПредставление);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Описание.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Описание");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЦветПоясняющегоТекста = Метаданные.ЭлементыСтиля.ПоясняющийТекст;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветПоясняющегоТекста.Значение);
КонецПроцедуры
&НаКлиенте
Функция ПараметрыРазмещения(ПараметрыПеретаскивания, Строка)
КоличествоСтрок = ПараметрыПеретаскивания.Значение.Количество();
Если КоличествоСтрок = 0 Тогда
Возврат Неопределено;
КонецЕсли;
СтрокаПриемник = ДеревоПодсистем.НайтиПоИдентификатору(Строка);
Если СтрокаПриемник = Неопределено Или СтрокаПриемник.Приоритет = "" Тогда
Возврат Неопределено;
КонецЕсли;
ПараметрыРазмещения = Новый Структура("Варианты, Действие, Приемник, Источник");
ПараметрыРазмещения.Варианты = Новый Структура("Массив, Всего, Представление");
ПараметрыРазмещения.Варианты.Массив = ПараметрыПеретаскивания.Значение;
ПараметрыРазмещения.Варианты.Всего = КоличествоСтрок;
Приемник = СвойстваДанныхСтроки();
ЗаполнитьЗначенияСвойств(Приемник, СтрокаПриемник);
Приемник.Идентификатор = СтрокаПриемник.ПолучитьИдентификатор();
ПараметрыРазмещения.Приемник = Приемник;
СтрокаИсточник = Элементы.ДеревоПодсистем.ТекущиеДанные;
Источник = СвойстваДанныхСтроки();
Если СтрокаИсточник = Неопределено Или СтрокаИсточник.Приоритет = "" Тогда
ПараметрыРазмещения.Действие = "Копирование";
Иначе
ЗаполнитьЗначенияСвойств(Источник, СтрокаИсточник);
Источник.Идентификатор = СтрокаИсточник.ПолучитьИдентификатор();
Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование Тогда
ПараметрыРазмещения.Действие = "Копирование";
Иначе
ПараметрыРазмещения.Действие = "Перемещение";
КонецЕсли;
КонецЕсли;
ПараметрыРазмещения.Источник = Источник;
Если Источник.Ссылка = Приемник.Ссылка Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выбранные варианты отчетов уже в данном разделе.'"));
Возврат Неопределено;
КонецЕсли;
Если ПараметрыРазмещения.Варианты.Всего = 1 Тогда
ПараметрыРазмещения.Варианты.Представление = Строка(ПараметрыРазмещения.Варианты.Массив[0]);
Иначе
ПараметрыРазмещения.Варианты.Представление = "";
Для Каждого ВариантСсылка Из ПараметрыРазмещения.Варианты.Массив Цикл
ПараметрыРазмещения.Варианты.Представление = ПараметрыРазмещения.Варианты.Представление
+ ?(ПараметрыРазмещения.Варианты.Представление = "", "", ", ") + Строка(ВариантСсылка);
Если СтрДлина(ПараметрыРазмещения.Варианты.Представление) > 23 Тогда
ПараметрыРазмещения.Варианты.Представление = Лев(ПараметрыРазмещения.Варианты.Представление, 20) + "...";
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ПараметрыРазмещения;
КонецФункции
&НаКлиенте
Функция СвойстваДанныхСтроки()
Свойства = Новый Структура;
Свойства.Вставить("Ссылка", Неопределено);
Свойства.Вставить("ПолноеПредставление", "");
Свойства.Вставить("Идентификатор", 0);
Возврат Свойства;
КонецФункции
&НаКлиенте
Процедура ДеревоПодсистемПеретаскиваниеЗавершение(Ответ, ПараметрыРазмещения) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
РезультатВыполнения = РазместитьВариантыВПодсистеме(ПараметрыРазмещения);
ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы();
Если ПараметрыРазмещения.Варианты.Всего = РезультатВыполнения.Размещено Тогда
Если ПараметрыРазмещения.Варианты.Всего = 1 Тогда
Если ПараметрыРазмещения.Действие = "Перемещение" Тогда
Шаблон = НСтр("ru = 'Успешно перемещен в ""%1"".'");
Иначе
Шаблон = НСтр("ru = 'Успешно размещен в ""%1"".'");
КонецЕсли;
Текст = ПараметрыРазмещения.Варианты.Представление;
Ссылка = ПолучитьНавигационнуюСсылку(ПараметрыРазмещения.Варианты.Массив[0]);
Иначе
Если ПараметрыРазмещения.Действие = "Перемещение" Тогда
Шаблон = НСтр("ru = 'Успешно перемещены в ""%1"".'");
Иначе
Шаблон = НСтр("ru = 'Успешно размещены в ""%1"".'");
КонецЕсли;
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Варианты отчетов (%1).'"),
Формат(ПараметрыРазмещения.Варианты.Всего, "ЧН=0; ЧГ=0"));
Ссылка = Неопределено;
КонецЕсли;
Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон,
ПараметрыРазмещения.Приемник.ПолноеПредставление);
ПоказатьОповещениеПользователя(Шаблон, Ссылка, Текст);
Иначе
ТекстОшибок = "";
Если Не ПустаяСтрока(РезультатВыполнения.НеМогутРазмещаться) Тогда
ТекстОшибок = ?(ТекстОшибок = "", "", ТекстОшибок + Символы.ПС + Символы.ПС)
+ НСтр("ru = 'Не могут размещаться в командном интерфейсе:'") + Символы.ПС
+ РезультатВыполнения.НеМогутРазмещаться;
КонецЕсли;
Если Не ПустаяСтрока(РезультатВыполнения.УжеРазмещены) Тогда
ТекстОшибок = ?(ТекстОшибок = "", "", ТекстОшибок + Символы.ПС + Символы.ПС)
+ НСтр("ru = 'Уже размещены в этом разделе:'") + Символы.ПС + РезультатВыполнения.УжеРазмещены;
КонецЕсли;
Если ПараметрыРазмещения.Действие = "Перемещение" Тогда
Шаблон = НСтр("ru = 'Перемещено вариантов отчетов: %1 из %2.
|Подробности:
|%3'");
Иначе
Шаблон = НСтр("ru = 'Размещено вариантов отчетов: %1 из %2.
|Подробности:
|%3'");
КонецЕсли;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, РезультатВыполнения.Размещено,
ПараметрыРазмещения.Варианты.Всего, ТекстОшибок), РежимДиалогаВопрос.ОК);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойствоСпискаПоПараметруФормы(Ключ)
Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда
Элементы.Список[Ключ] = Параметры[Ключ];
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСодержимоеСписка(Знач Событие = "")
ИзменилисьПерсональныеНастройки = Ложь;
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора;
ЭлементСписка = СписокВыбора.НайтиПоЗначению(СтрокаПоиска);
Если ЭлементСписка = Неопределено Тогда
СписокВыбора.Вставить(0, СтрокаПоиска);
ИзменилисьПерсональныеНастройки = Истина;
Если СписокВыбора.Количество() > 10 Тогда
СписокВыбора.Удалить(10);
КонецЕсли;
Иначе
Индекс = СписокВыбора.Индекс(ЭлементСписка);
Если Индекс <> 0 Тогда
СписокВыбора.Сдвинуть(Индекс, -Индекс);
ИзменилисьПерсональныеНастройки = Истина;
КонецЕсли;
КонецЕсли;
ТекущийЭлемент = Элементы.СтрокаПоиска;
КонецЕсли;
Если Событие = "СтрокаПоискаПриИзменении" И ИзменилисьПерсональныеНастройки Тогда
ПерсональныеНастройкиСписка = Новый Структура("СтрокаПоискаСписокВыбора");
ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора = Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения();
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(
ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "Справочник.ВариантыОтчетов.ФормаСписка",
ПерсональныеНастройкиСписка);
КонецЕсли;
ДеревоПодсистемТекущаяСтрока = Элементы.ДеревоПодсистем.ТекущаяСтрока;
СтрокаДерева = ДеревоПодсистем.НайтиПоИдентификатору(ДеревоПодсистемТекущаяСтрока);
Если СтрокаДерева = Неопределено Тогда
Возврат;
КонецЕсли;
ВсеПодсистемы = Не ЗначениеЗаполнено(СтрокаДерева.ПолноеИмя);
ПараметрыПоиска = Новый Структура;
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска);
Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Иначе
Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
КонецЕсли;
Если Не ВсеПодсистемы Или ЗначениеЗаполнено(СтрокаПоиска) Тогда
ПодсистемыОтчетов = Новый Массив;
Если Не ВсеПодсистемы Тогда
ПодсистемыОтчетов.Добавить(СтрокаДерева.Ссылка);
КонецЕсли;
Если ВсеПодсистемы Или ВключаяПодчиненные Тогда
ДобавитьРекурсивно(ПодсистемыОтчетов, СтрокаДерева.ПолучитьЭлементы());
КонецЕсли;
ПараметрыПоиска.Вставить("Подсистемы", ПодсистемыОтчетов);
КонецЕсли;
Если ЗначениеЗаполнено(ОтборТипОтчета) Тогда
ТипыОтчетов = Новый Массив;
Если ОтборТипОтчета = 1 Тогда
ТипыОтчетов.Добавить(Перечисления.ТипыОтчетов.Внутренний);
ТипыОтчетов.Добавить(Перечисления.ТипыОтчетов.Расширение);
ТипыОтчетов.Добавить(Перечисления.ТипыОтчетов.Дополнительный);
Иначе
ТипыОтчетов.Добавить(ОтборТипОтчета);
КонецЕсли;
ПараметрыПоиска.Вставить("ТипыОтчетов", ТипыОтчетов);
КонецЕсли;
ЕстьОтборПоВариантам = ПараметрыПоиска.Количество() > 0;
ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь);
ПараметрыПоиска.Вставить("ЖесткийОтборПоПодсистемам", Не ВсеПодсистемы);
РезультатПоиска = ВариантыОтчетов.НайтиВариантыОтчетов(ПараметрыПоиска);
Список.Параметры.УстановитьЗначениеПараметра("ЕстьОтборПоВариантам", ЕстьОтборПоВариантам);
Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", РезультатПоиска.Ссылки);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПодсистемОбработчикАктивизацииСтроки()
Если ДеревоПодсистемТекущаяСтрока <> Элементы.ДеревоПодсистем.ТекущаяСтрока Тогда
ОбновитьСодержимоеСписка();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЗаголовокДереваПодсистем()
Элементы.ГруппаРазделы.Заголовок = ?(Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено,
НСтр("ru = 'Все разделы'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
Элементы.ДеревоПодсистем.ТекущиеДанные.Представление);
КонецПроцедуры
&НаСервере
Процедура ДобавитьРекурсивно(МассивПодсистем, КоллекцияСтрокДерева)
Для Каждого СтрокаДерева Из КоллекцияСтрокДерева Цикл
МассивПодсистем.Добавить(СтрокаДерева.Ссылка);
ДобавитьРекурсивно(МассивПодсистем, СтрокаДерева.ПолучитьЭлементы());
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДеревоПодсистемЗаписатьСвойствоВМассив(МассивСтрокДерева, ИмяСвойства, МассивСсылок)
Для Каждого СтрокаДерева Из МассивСтрокДерева Цикл
МассивСсылок.Добавить(СтрокаДерева[ИмяСвойства]);
ДеревоПодсистемЗаписатьСвойствоВМассив(СтрокаДерева.ПолучитьЭлементы(), ИмяСвойства, МассивСсылок);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция РазместитьВариантыВПодсистеме(ПараметрыРазмещения)
ИсключаемыеПодсистемы = Новый Массив;
Если ПараметрыРазмещения.Действие = "Перемещение" Тогда
Источник = ПараметрыРазмещения.Источник;
СтрокаИсточник = ДеревоПодсистем.НайтиПоИдентификатору(Источник.Идентификатор);
ИсключаемыеПодсистемы.Добавить(СтрокаИсточник.Ссылка);
ДеревоПодсистемЗаписатьСвойствоВМассив(СтрокаИсточник.ПолучитьЭлементы(), "Ссылка", ИсключаемыеПодсистемы);
КонецЕсли;
Размещено = 0;
УжеРазмещены = "";
НеМогутРазмещаться = "";
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЗаблокироватьВариантыОтчетовПередРазмещением(Блокировка, ПараметрыРазмещения.Варианты.Массив);
Блокировка.Заблокировать();
Для Каждого ВариантСсылка Из ПараметрыРазмещения.Варианты.Массив Цикл
Если ВариантСсылка.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда
НеМогутРазмещаться = ?(НеМогутРазмещаться = "", "", НеМогутРазмещаться + Символы.ПС) + " "
+ Строка(ВариантСсылка) + " (" + НСтр("ru = 'внешний'") + ")";
Продолжить;
ИначеЕсли ВариантСсылка.ПометкаУдаления Тогда
НеМогутРазмещаться = ?(НеМогутРазмещаться = "", "", НеМогутРазмещаться + Символы.ПС) + " "
+ Строка(ВариантСсылка) + " (" + НСтр("ru = 'помечен на удаление'") + ")";
Продолжить;
КонецЕсли;
ЕстьИзменения = Ложь;
ВариантОбъект = ВариантСсылка.ПолучитьОбъект();
Приемник = ПараметрыРазмещения.Приемник;
СтрокаПриемник = ВариантОбъект.Размещение.Найти(Приемник.Ссылка, "Подсистема");
Если СтрокаПриемник = Неопределено Тогда
СтрокаПриемник = ВариантОбъект.Размещение.Добавить();
СтрокаПриемник.Подсистема = Приемник.Ссылка;
КонецЕсли;
Если ПараметрыРазмещения.Действие = "Перемещение" Тогда
Для Каждого ИсключаемаяПодсистема Из ИсключаемыеПодсистемы Цикл
СтрокаИсточник = ВариантОбъект.Размещение.Найти(ИсключаемаяПодсистема, "Подсистема");
Если СтрокаИсточник <> Неопределено Тогда
Если СтрокаИсточник.Использование Тогда
СтрокаИсточник.Использование = Ложь;
Если Не ЕстьИзменения Тогда
ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник, "Важный, СмТакже");
ЕстьИзменения = Истина;
КонецЕсли;
КонецЕсли;
СтрокаИсточник.Важный = Ложь;
СтрокаИсточник.СмТакже = Ложь;
ИначеЕсли Не ВариантОбъект.Пользовательский Тогда
СтрокаИсточник = ВариантОбъект.Размещение.Добавить();
СтрокаИсточник.Подсистема = ИсключаемаяПодсистема;
ЕстьИзменения = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не СтрокаПриемник.Использование Тогда
ЕстьИзменения = Истина;
СтрокаПриемник.Использование = Истина;
КонецЕсли;
Если ЕстьИзменения Тогда
Размещено = Размещено + 1;
ВариантОбъект.Записать();
Иначе
УжеРазмещены = ?(УжеРазмещены = "", "", УжеРазмещены + Символы.ПС) + " " + Строка(ВариантСсылка);
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Если ПараметрыРазмещения.Действие = "Перемещение" И Размещено > 0 Тогда
Элементы.ДеревоПодсистем.ТекущаяСтрока = Приемник.Идентификатор;
ОбновитьСодержимоеСписка();
КонецЕсли;
Возврат Новый Структура("Размещено, УжеРазмещены, НеМогутРазмещаться", Размещено, УжеРазмещены, НеМогутРазмещаться);
КонецФункции
&НаСервере
Процедура ЗаблокироватьВариантыОтчетовПередРазмещением(Блокировка, ВариантыОтчетов)
ИсточникДанных = Новый ТаблицаЗначений;
ИсточникДанных.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ВариантыОтчетов"));
Для Каждого ВариантОтчета Из ВариантыОтчетов Цикл
Строка = ИсточникДанных.Добавить();
Строка.Ссылка = ВариантОтчета;
КонецЦикла;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВариантыОтчетов");
ЭлементБлокировки.ИсточникДанных = ИсточникДанных;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка");
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСодержимоеСпискаКлиент(Событие)
Замер = НачатьЗамер(Событие);
ОбновитьСодержимоеСписка(Событие);
ЗакончитьЗамер(Замер);
КонецПроцедуры
&НаКлиенте
Функция НачатьЗамер(Событие)
Если Не ПараметрыКлиента.ВыполнятьЗамеры Тогда
Возврат Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаПоиска) И (Событие = "СтрокаПоискаПриИзменении" Или Событие = "ВыполнитьПоиск") Тогда
Имя = "СписокОтчетов.Поиск";
Иначе
Возврат Неопределено;
КонецЕсли;
Комментарий = Новый Соответствие;
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
Комментарий.Вставить("Поиск", Истина);
Комментарий.Вставить("СтрокаПоиска", Строка(СтрокаПоиска));
Комментарий.Вставить("ВключаяПодчиненные", ВключаяПодчиненные);
Иначе
Комментарий.Вставить("Поиск", Ложь);
КонецЕсли;
Замер = Новый Структура("МодульОценкаПроизводительностиКлиент, Идентификатор");
Замер.МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент");
Замер.Идентификатор = Замер.МодульОценкаПроизводительностиКлиент.ЗамерВремени(Имя, Ложь, Ложь);
Замер.МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(Замер.Идентификатор, Комментарий);
Возврат Замер;
КонецФункции
&НаКлиенте
Процедура ЗакончитьЗамер(Замер)
Если Замер <> Неопределено Тогда
Замер.МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(Замер.Идентификатор);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЭлементДереваПодсистем(ЭлементыДерева)
Возврат ЭлементыДерева[0];
КонецФункции
&НаКлиенте
Процедура УстановитьОтборПоОбновленнымИзФайловОтчетов(ОписаниеВариантовОтчетов)
ОбновленныеВариантыОтчетов = Новый СписокЗначений;
Для Каждого ОписаниеВариантаОтчета Из ОписаниеВариантовОтчетов Цикл
ОбновленныеВариантыОтчетов.Добавить(ОписаниеВариантаОтчета.Ссылка);
КонецЦикла;
ДочерниеПодсистемы = ДеревоПодсистем.ПолучитьЭлементы();
Если ДочерниеПодсистемы.Количество() > 0 Тогда
Элементы.ДеревоПодсистем.ТекущаяСтрока = ДочерниеПодсистемы[0].ПолучитьИдентификатор();
КонецЕсли;
ОбновитьСодержимоеСписка();
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка",
ОбновленныеВариантыОтчетов, ВидСравненияКомпоновкиДанных.ВСписке,,,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный);
КонецПроцедуры
&НаСервере
Функция ТекстЗапросаПредставленияНаДругихЯзыкахВТабличнойЧасти()
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВариантыОтчетовПереопределяемый.Ссылка,
| ВариантыОтчетовПереопределяемый.ПометкаУдаления,
| ЕСТЬNULL(ВариантыКонфигурацииПереопределяемый.КлючЗамеров, ВариантыРасширенийПереопределяемый.КлючЗамеров) КАК
| КлючЗамеров,
| ВариантыОтчетовПереопределяемый.Пользовательский,
| НЕ ВариантыОтчетовПереопределяемый.Пользовательский КАК Предопределенный,
| ВЫБОР
| КОГДА &ЭтоОсновнойЯзык
| И (ВариантыОтчетовПереопределяемый.Пользовательский
| ИЛИ ВариантыОтчетовПереопределяемый.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка),
| ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)))
| ТОГДА ВариантыОтчетовПереопределяемый.Наименование
| КОГДА НЕ &ЭтоОсновнойЯзык
| И (ВариантыОтчетовПереопределяемый.Пользовательский
| ИЛИ ВариантыОтчетовПереопределяемый.ПредопределенныйВариант В (НЕОПРЕДЕЛЕНО,
| ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетов.ПустаяСсылка),
| ЗНАЧЕНИЕ(Справочник.ПредопределенныеВариантыОтчетовРасширений.ПустаяСсылка)))
| ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ПредставленияВариантов.Наименование, ВариантыОтчетовПереопределяемый.Наименование) КАК
| СТРОКА(150))
| КОГДА &ЭтоОсновнойЯзык
| ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ВариантыКонфигурацииПереопределяемый.Наименование,
| ВариантыРасширенийПереопределяемый.Наименование), ВариантыОтчетовПереопределяемый.Наименование) КАК СТРОКА(150))
| ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Наименование, ПредставленияИзРасширений.Наименование),
| ВариантыОтчетовПереопределяемый.Наименование) КАК СТРОКА(150))
| КОНЕЦ КАК Наименование,
| НЕ ВариантыОтчетовПереопределяемый.ТолькоДляАвтора КАК ДоступенВсемПользователям,
| ВариантыОтчетовПереопределяемый.Отчет,
| ВариантыОтчетовПереопределяемый.КлючВарианта,
| ВариантыОтчетовПереопределяемый.ТипОтчета,
| ВариантыОтчетовПереопределяемый.Автор,
| ВЫБОР
| КОГДА &ЭтоОсновнойЯзык
| И ПОДСТРОКА(ВариантыОтчетовПереопределяемый.Описание, 1, 1) <> """"
| ТОГДА ВЫРАЗИТЬ(ВариантыОтчетовПереопределяемый.Описание КАК СТРОКА(1000))
| КОГДА &ЭтоОсновнойЯзык
| И ПОДСТРОКА(ВариантыОтчетовПереопределяемый.Описание, 1, 1) = """"
| ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурацииПереопределяемый.Описание, ВариантыРасширенийПереопределяемый.Описание)
| КАК СТРОКА(1000))
| КОГДА НЕ &ЭтоОсновнойЯзык
| И ПОДСТРОКА(ПредставленияВариантов.Описание, 1, 1) <> """"
| ТОГДА ВЫРАЗИТЬ(ПредставленияВариантов.Описание КАК СТРОКА(1000))
| ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(ЕСТЬNULL(ПредставленияИзКонфигурации.Описание, ПредставленияИзРасширений.Описание),
| ВариантыОтчетовПереопределяемый.Описание) КАК СТРОКА(1000))
| КОНЕЦ КАК Описание,
| &ИмяОтчета КАК ИмяОтчета,
| СведенияОРасширениях.ПолноеИмяОбъекта КАК ПолноеИмяОтчета,
| ВЫБОР
| КОГДА ВариантыОтчетовПереопределяемый.ПометкаУдаления = ИСТИНА
| ТОГДА 4
| КОГДА ВариантыОтчетовПереопределяемый.Пользовательский = ЛОЖЬ
| ТОГДА 5
| ИНАЧЕ 3
| КОНЕЦ КАК ИндексКартинки
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетовПереопределяемый
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурацииПереопределяемый
| ПО ВариантыОтчетовПереопределяемый.ПредопределенныйВариант = ВариантыКонфигурацииПереопределяемый.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений КАК ВариантыРасширенийПереопределяемый
| ПО ВариантыОтчетовПереопределяемый.ПредопределенныйВариант = ВариантыРасширенийПереопределяемый.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Представления КАК ПредставленияВариантов
| ПО ВариантыОтчетовПереопределяемый.Ссылка = ПредставленияВариантов.Ссылка
| И (ПредставленияВариантов.КодЯзыка = &КодЯзыка)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Представления КАК ПредставленияИзКонфигурации
| ПО ВариантыОтчетовПереопределяемый.ПредопределенныйВариант = ПредставленияИзКонфигурации.Ссылка
| И (ПредставленияИзКонфигурации.КодЯзыка = &КодЯзыка)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Представления КАК ПредставленияИзРасширений
| ПО ВариантыОтчетовПереопределяемый.ПредопределенныйВариант = ПредставленияИзРасширений.Ссылка
| И (ПредставленияИзРасширений.КодЯзыка = &КодЯзыка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК СведенияОРасширениях
| ПО СведенияОРасширениях.ВерсияРасширений = &ВерсияРасширений
| И СведенияОРасширениях.Идентификатор = ВариантыОтчетовПереопределяемый.Отчет
|ГДЕ
| ВариантыОтчетовПереопределяемый.Отчет В (&ДоступныеОтчеты)
| И ВЫБОР
| КОГДА &ЕстьОтборПоВариантам
| ТОГДА ВариантыОтчетовПереопределяемый.Ссылка В (&ВариантыПользователя)
| КОГДА НЕ ВариантыОтчетовПереопределяемый.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)
| ТОГДА ИСТИНА
| ИНАЧЕ ВариантыОтчетовПереопределяемый.Ссылка В
| (ВЫБРАТЬ
| РодителиПереопределяемый.Родитель
| ИЗ
| Справочник.ВариантыОтчетов КАК РодителиПереопределяемый
| ГДЕ
| РодителиПереопределяемый.Отчет В (&ДоступныеОтчеты)
| И НЕ РодителиПереопределяемый.Ссылка В (&ВариантыПользователя))
| КОНЕЦ";
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти