#Область ОписаниеПеременных
&НаКлиенте
Перем ИсточникПеретаскиванияНаКлиенте;
&НаКлиенте
Перем ПриемникПеретаскиванияНаКлиенте;
&НаКлиенте
Перем Список_ПередНачаломИзменения;
&НаСервере
Перем НесуществующиеПоля;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
ОпределитьПоведениеВМобильномКлиенте();
ФормаПараметры = ВариантыОтчетов.СохраняемыеПараметрыФормыОтчета(Параметры);
НастройкиОтчета = Параметры.НастройкиОтчета;
ВариантНаименование = Параметры.ВариантНаименование;
ОписаниеНастроекОтчета = ОписаниеНастроекОтчета(НастройкиОтчета);
КлючСохраненияПоложенияОкна = ОписаниеНастроекОтчета.ПолноеИмя;
Если ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда
КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "." + КлючТекущегоВарианта;
КонецЕсли;
НастройкиКД = Параметры.Вариант;
Если НастройкиКД = Неопределено Тогда
НастройкиКД = Отчет.КомпоновщикНастроек.Настройки;
КонецЕсли;
ИдентификаторЭлементаСтруктурыНастроек = Параметры.ИдентификаторЭлементаСтруктурыНастроек;
Если ТипЗнч(ИдентификаторЭлементаСтруктурыНастроек) = Тип("ИдентификаторКомпоновкиДанных") Тогда
РежимИзмененияЭлементаСтруктурыНастроек = Истина;
Высота = 0;
КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + ".Узел";
ПутьКЭлементуСтруктурыНастроек = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
Параметры, "ПутьКЭлементуСтруктурыНастроек");
ЭлементСтруктуры = ОтчетыСервер.ЭлементНастроекПоПолномуПути(НастройкиКД, ПутьКЭлементуСтруктурыНастроек);
Если ЭлементСтруктуры <> Неопределено Тогда
ИдентификаторЭлементаСтруктурыНастроек = НастройкиКД.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
КонецЕсли;
Заголовок = Параметры.Заголовок;
ТипЭлементаСтруктурыНастроек = Параметры.ТипЭлементаСтруктурыНастроек;
Иначе
Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда
ВариантНаименование = ОписаниеНастроекОтчета.Наименование;
КонецЕсли;
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Настройки отчета ""%1""'"), ВариантНаименование);
КонецЕсли;
ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки();
Элементы.ОформлениеНастроитьКолонтитулы.Видимость =
ГлобальныеНастройки.ВыводитьИндивидуальныеНастройкиКолонтитулов
И Не РежимИзмененияЭлементаСтруктурыНастроек
И (Не ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных());
Если РежимИзмененияЭлементаСтруктурыНастроек Тогда
ИмяСтраницы = ?(ПустаяСтрока(Параметры.ИмяСтраницы), "СтраницаСоставГруппировки", Параметры.ИмяСтраницы);
РасширенныйРежим = 1;
Иначе
РасширенныйРежим = ОписаниеНастроекОтчета.ФормаНастроекРасширенныйРежим;
ИмяСтраницы = ОписаниеНастроекОтчета.ФормаНастроекИмяСтраницы;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
ТекущиеРежим = Элементы.РасширенныйРежим.СписокВыбора.НайтиПоЗначению(РасширенныйРежим);
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 режим'"), ТекущиеРежим.Представление);
МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга");
МодульЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ОбщаяФорма.ФормаНастроекОтчета", 1, Комментарий);
КонецЕсли;
Страница = Элементы.Найти(ИмяСтраницы);
Если Страница <> Неопределено Тогда
Элементы.СтраницыНастроек.ТекущаяСтраница = Страница;
КонецЕсли;
Если ОписаниеНастроекОтчета.СхемаМодифицирована Тогда
Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОписаниеНастроекОтчета.АдресСхемы));
КонецЕсли;
ШрифтВажнойНадписи = Метаданные.ЭлементыСтиля.ВажнаяНадписьШрифт;
Элементы.СтруктураВариантаЗаголовок.Шрифт = ШрифтВажнойНадписи.Значение;
НаборРеквизитов = ПолучитьРеквизиты();
Для Каждого Реквизит Из НаборРеквизитов Цикл
ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита(Реквизит));
КонецЦикла;
Для Каждого Команда Из Команды Цикл
ПостоянныеКоманды.Добавить(Команда.Имя);
КонецЦикла;
НеобходимоОбновитьНастройки = Истина;
СистемнаяИнформация = Новый СистемнаяИнформация;
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.23.1688") >= 0 Тогда
Элементы.ОтборыЗначение.РасширенноеРедактированиеМножественныхЗначений = Истина;
Элементы.ОтборыПравоеЗначение.РасширенноеРедактированиеМножественныхЗначений = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД)
Если ВариантыОтчетов.ДопустимоУстановитьКонтекст(ЭтотОбъект)
И ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда
ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета);
КонецЕсли;
НеобходимоОбновитьНастройки = Истина;
Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда
Попытка
НовыеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеНастройкиКД);
Исключение
НовыеНастройкиXML = Неопределено;
КонецПопытки;
НастройкиОтчета.НовыеНастройкиXML = НовыеНастройкиXML;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД)
НеобходимоОбновитьНастройки = Истина;
Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда
Попытка
НовыеПользовательскиеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеПользовательскиеНастройкиКД);
Исключение
НовыеПользовательскиеНастройкиXML = Неопределено;
КонецПопытки;
НастройкиОтчета.НовыеПользовательскиеНастройкиXML = НовыеПользовательскиеНастройкиXML;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВариантМодифицирован = Ложь;
Если НеобходимоОбновитьНастройки Тогда
НеобходимоОбновитьНастройки = Ложь;
ПараметрыЗаполнения = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета("ПриСозданииНаСервере");
ПараметрыЗаполнения.ОбновитьНастройкиВарианта = Не РежимИзмененияЭлементаСтруктурыНастроек И РасширенныйРежим = 1;
ОбновитьФорму(ПараметрыЗаполнения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не РезультатВыбораСформирован Тогда
Оповещение = Новый ОписаниеОповещения("ПодтвердитьИЗакрыть", ЭтотОбъект);
Модифицированность = Модифицированность Или ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы;
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ, ЗавершениеРаботы,
НСтр("ru = 'Настройки изменены. Сохранить изменения?'"));
КонецЕсли;
ПользовательскиеНастройкиМодифицированы = Ложь;
ВариантМодифицирован = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, РезультатВыбора(Ложь));
КонецЕсли;
Закрыть();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РасширенныйРежимПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
МодульЦентрМониторингаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦентрМониторингаКлиент");
МодульЦентрМониторингаКлиент.ЗаписатьОперациюБизнесСтатистики("ОбщаяФорма.ФормаНастроекОтчета.РасширенныйРежим.ПриИзменении", 1);
КонецЕсли;
ПараметрыОбновления = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета("РасширенныйРежимПриИзменении");
ПараметрыОбновления.КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек;
ПараметрыОбновления.ОбновитьНастройкиВарианта = (РасширенныйРежим = 1);
ПараметрыОбновления.СброситьПользовательскиеНастройки = (РасширенныйРежим <> 1);
ОбновитьФорму(ПараметрыОбновления);
КонецПроцедуры
&НаКлиенте
Процедура ПредупрежденияОбОтсутствииПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
РасширенныйРежим = 1;
РасширенныйРежимПриИзменении(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ТекущийТипДиаграммыПриИзменении(Элемент)
ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлементаСтруктурыНастроек);
Если ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
ЭлементСтруктуры = ЭлементСтруктуры.Настройки;
КонецЕсли;
УстановитьПараметрВывода(ЭлементСтруктуры, "ТипДиаграммы", ТекущийТипДиаграммы);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Строка = Элементы.СтруктураВарианта.ТекущиеДанные;
ИзменитьЭлементСтруктуры(Строка,, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыводитьЗаголовокПриИзменении(Элемент)
ПредопределенныеПараметры = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы;
ЭлементНастройки = ПредопределенныеПараметры.Найти("TITLE");
ЭлементНастройки.Использование = ВыводитьЗаголовок;
СинхронизироватьПредопределенныеПараметрыВывода(ВыводитьЗаголовок, ЭлементНастройки);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ВыводитьФильтрыПриИзменении(Элемент)
ПредопределенныеПараметры = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы;
ЭлементНастройки = ПредопределенныеПараметры.Найти("DATAPARAMETERSOUTPUT");
ЭлементНастройки.Использование = Истина;
Если ВыводитьФильтры Тогда
ЭлементНастройки.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто;
Иначе
ЭлементНастройки.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
КонецЕсли;
СинхронизироватьПредопределенныеПараметрыВывода(ВыводитьФильтры, ЭлементНастройки);
УстановитьМодифицированность();
КонецПроцедуры
#Область Подключаемые
&НаКлиенте
Процедура Подключаемый_Период_ПриИзменении(Элемент)
ОтчетыКлиент.УстановитьПериод(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЭлементНастройки_ПриИзменении(Элемент)
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя];
Если Индекс = Неопределено Тогда
Индекс = ОтчетыКлиентСервер.ИндексЭлементаНастройкиПоПути(Элемент.Имя);
КонецЕсли;
ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс];
ЭтоФлажок = СтрНачинаетсяС(Элемент.Имя, "Флажок") Или СтрЗаканчиваетсяНа(Элемент.Имя, "Флажок");
Если ЭтоФлажок Тогда
ЭлементНастройки.Значение = ЭтотОбъект[Элемент.Имя];
КонецЕсли;
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
И НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда
ПараметрыОбновления = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета();
ПараметрыОбновления.КомпоновщикНастроекКД = КомпоновщикНастроек;
ОбновитьФорму(ПараметрыОбновления);
Иначе
ОформитьСписок(Элемент, ЭлементНастройки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Список_ПриИзменении(Элемент)
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя];
ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс];
Список = ЭтотОбъект[Элемент.Имя];
ВыбранныеЗначения = Новый СписокЗначений;
Для Каждого ЭлементСписка Из Список Цикл
Если ЭлементСписка.Пометка Тогда
ЗаполнитьЗначенияСвойств(ВыбранныеЗначения.Добавить(), ЭлементСписка);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ЭлементНастройки.Значение = ВыбранныеЗначения;
ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЭлементНастройки.ПравоеЗначение = ВыбранныеЗначения;
КонецЕсли;
ЭлементНастройки.Использование = Истина;
ОтчетыКлиент.КэшироватьЗначениеОтбора(КомпоновщикНастроек, ЭлементНастройки, Список);
ОформитьСписок(Элемент, ЭлементНастройки);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Список_ПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
ПутьКСписку = Элемент.Имя;
ЭлементСписка = Элементы[Элемент.Имя + "Значение"];
ПараметрыЗаполнения = ПараметрыЗаполненияСписка(Истина, Ложь);
ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку;
ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
ВыборПереопределен = Ложь;
НачатьЗаполнениеСписка(ЭлементСписка, ПараметрыЗаполнения, ВыборПереопределен);
Если ВыборПереопределен Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Список_ПередНачаломИзменения(Элемент, Отказ)
Список_ПередНачаломИзменения = Элемент;
ЭлементСписка = Элементы[Элемент.Имя + "Значение"];
ЭлементСписка.РедактированиеТекста = Ложь;
ПодключитьОбработчикОжидания("Список_ПриНачалеИзменения", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Список_ОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Список = ЭтотОбъект[Элемент.Имя];
Выбранные = ОтчетыКлиентСервер.ЗначенияСписком(РезультатВыбора);
Выбранные.ЗаполнитьПометки(Истина);
Дополнение = ОбщегоНазначенияКлиентСервер.ДополнитьСписок(Список, Выбранные, Ложь, Истина);
ЗначениеЭлементаНастройки = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Список);
Индекс = ЗначениеЭлементаНастройки.Количество() - 1;
Пока Индекс >= 0 Цикл
ТекущееЗначение = ЗначениеЭлементаНастройки[Индекс];
Если Не ТекущееЗначение.Пометка Тогда
ЗначениеЭлементаНастройки.Удалить(ТекущееЗначение);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Индекс = ПутьКДаннымЭлементов.ПоИмени[Элемент.Имя];
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс];
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ЭлементНастройки.Значение = ЗначениеЭлементаНастройки;
Иначе
ЭлементНастройки.ПравоеЗначение = ЗначениеЭлементаНастройки;
КонецЕсли;
ЭлементНастройки.Использование = Истина;
ОформитьСписок(Элемент, ЭлементНастройки);
Если Дополнение.Всего > 0 Тогда
Если Дополнение.Всего = 1 Тогда
ЗаголовокОповещения = НСтр("ru = 'Элемент добавлен в список'");
Иначе
ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'");
КонецЕсли;
ПоказатьОповещениеПользователя(
ЗаголовокОповещения,,
Строка(Выбранные),
БиблиотекаКартинок.ВыполнитьЗадачу);
КонецЕсли;
ОтчетыКлиент.КэшироватьЗначениеОтбора(КомпоновщикНастроек, ЭлементНастройки, Список);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПометкаЭлементаСписка_ПриИзменении(Элемент)
ОтключитьОбработчикОжидания("Список_ПриНачалеИзменения");
Список_ПередНачаломИзменения.ЗакончитьРедактированиеСтроки(Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЭлементСписка_ПриИзменении(Элемент)
ПутьКСписку = СтрЗаменить(Элемент.Имя, "Значение", "");
Строка = Элементы[ПутьКСписку].ТекущиеДанные;
ЭлементСписка = ЭтотОбъект[ПутьКСписку].НайтиПоЗначению(Строка.Значение);
ЭлементСписка.Пометка = Истина;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЭлементСписка_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПутьКСписку = СтрЗаменить(Элемент.Имя, "Значение", "");
ПараметрыЗаполнения = ПараметрыЗаполненияСписка(Истина, Ложь, Ложь);
ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку;
ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
ПараметрыЗаполнения.Владелец = Элемент;
ТекущееЗначение = Элементы[ПутьКСписку].ТекущиеДанные.Значение;
Если ТекущееЗначение <> Неопределено Тогда
Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, ПараметрыЗаполнения.Индекс);
ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент);
ПараметрыЗаполнения.Вставить("ПараметрыВыбора", ПараметрыВыбора);
ПараметрыЗаполнения.Вставить("ТекущаяСтрока", ТекущееЗначение);
СписокТипов = Новый СписокЗначений;
СписокТипов.Добавить(ТипЗнч(ТекущееЗначение));
ПродолжитьЗаполнениеСписка(СписокТипов[0], ПараметрыЗаполнения);
Возврат;
КонецЕсли;
НачатьЗаполнениеСписка(Элемент, ПараметрыЗаполнения);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСортировка
&НаКлиенте
Процедура СортировкаВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Строка = Элементы.Сортировка.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Строка.Поле) = Тип("ПолеКомпоновкиДанных") Тогда
Если Поле = Элементы.СортировкаПоле Тогда
#Если Не МобильныйКлиент Тогда
СортировкаВыбратьПоле(ИдентификаторСтроки, Строка);
#КонецЕсли
ИначеЕсли Поле = Элементы.СортировкаТипУпорядочивания Тогда
ИзменитьТипУпорядочивания(Строка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СортировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Копирование Тогда
СкопироватьНастройки(Элемент);
Возврат;
КонецЕсли;
ВыбратьПоле("Сортировка", Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура СортировкаПередУдалением(Элемент, Отказ)
УдалитьСтроки(Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура СортировкаИспользованиеПриИзменении(Элемент)
ИзменитьИспользованиеЭлементаНастройки("Сортировка");
КонецПроцедуры
&НаКлиенте
Процедура Сортировка_ПоУбыванию(Команда)
ИзменитьТипУпорядочиванияСтрок(НаправлениеСортировкиКомпоновкиДанных.Убыв);
КонецПроцедуры
&НаКлиенте
Процедура Сортировка_ПоВозрастанию(Команда)
ИзменитьТипУпорядочиванияСтрок(НаправлениеСортировкиКомпоновкиДанных.Возр);
КонецПроцедуры
&НаКлиенте
Процедура Сортировка_ПереместитьВверх(Команда)
СдвинутьСортировку();
КонецПроцедуры
&НаКлиенте
Процедура Сортировка_ПереместитьВниз(Команда)
СдвинутьСортировку(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура Сортировка_УстановитьФлажки(Команда)
ИзменитьИспользование("Сортировка");
КонецПроцедуры
&НаКлиенте
Процедура Сортировка_СнятьФлажки(Команда)
ИзменитьИспользование("Сортировка", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СортировкаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание)
ИсточникПеретаскиванияНаКлиенте = Элемент.Имя;
КонецПроцедуры
&НаКлиенте
Процедура СортировкаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле)
ПриемникПеретаскиванияНаКлиенте = Элемент.Имя;
Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СортировкаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле)
СтандартнаяОбработка = Ложь;
Если ИсточникПеретаскиванияНаКлиенте = Элемент.Имя Тогда
ПеретащитьСортировкуВнутриКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока);
ИначеЕсли ИсточникПеретаскиванияНаКлиенте = Элементы.ВыбранныеПоля.Имя Тогда
ПеретащитьВыбранныеПоляВСортировку(ПараметрыПеретаскивания.Значение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СортировкаОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_Сортировка_Вправо(Команда)
ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки;
Если ИдентификаторыСтрок = Неопределено Тогда
Возврат;
КонецЕсли;
Строки = Новый Массив;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ТипЗнч(Строка.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
Строки.Добавить(Строка);
КонецЕсли;
КонецЦикла;
ПеретащитьВыбранныеПоляВСортировку(Строки);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_Сортировка_Влево(Команда)
ИдентификаторыСтрок = Элементы.Сортировка.ВыделенныеСтроки;
Если ИдентификаторыСтрок = Неопределено Тогда
Возврат;
КонецЕсли;
Строки = Новый Массив;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = Сортировка.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ТипЗнч(Строка.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
Строки.Добавить(Строка);
КонецЕсли;
КонецЦикла;
ПеретащитьПоляСортировкиВВыбранныеПоля(Строки);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_Сортировка_ВлевоВсе(Команда)
ПеретащитьПоляСортировкиВВыбранныеПоля(Сортировка.ПолучитьЭлементы()[0].ПолучитьЭлементы());
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_ГруппаИ(Команда)
ИдентификаторСтроки = Элементы.Отборы.ТекущаяСтрока;
Если ИдентификаторСтроки <> Неопределено Тогда
ОтборыПослеВыбораГруппы(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ, ИдентификаторСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_ГруппаИли(Команда)
ИдентификаторСтроки = Элементы.Отборы.ТекущаяСтрока;
Если ИдентификаторСтроки <> Неопределено Тогда
ОтборыПослеВыбораГруппы(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли, ИдентификаторСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_ГруппаНе(Команда)
ИдентификаторСтроки = Элементы.Отборы.ТекущаяСтрока;
Если ИдентификаторСтроки <> Неопределено Тогда
ОтборыПослеВыбораГруппы(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе, ИдентификаторСтроки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеПоля
&НаКлиенте
Процедура ВыбранныеПоляВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
#Если МобильныйКлиент Тогда
Возврат;
#КонецЕсли
Строка = Элементы.ВыбранныеПоля.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
Если Поле = Элементы.ВыбранныеПоляПоле Тогда
Если Строка.ЭтоГруппа Тогда
ВыбранныеПоляВыбратьГруппу(ИдентификаторСтроки, Строка);
ИначеЕсли ТипЗнч(Строка.Поле) = Тип("ПолеКомпоновкиДанных") Тогда
ВыбранныеПоляВыбратьПоле(ИдентификаторСтроки, Строка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ПослеАктивизацииВыбранныхПолей", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПередУдалением(Элемент, Отказ)
Если РасширенныйРежим = 0 Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
УдалитьСтроки(Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляИспользованиеПриИзменении(Элемент)
ИзменитьИспользованиеЭлементаНастройки("ВыбранныеПоля");
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_ПереместитьВверх(Команда)
СдвинутьВыбранныеПоля();
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_ПереместитьВниз(Команда)
СдвинутьВыбранныеПоля(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_Сгруппировать(Команда)
ПараметрыГруппировки = ПараметрыГруппировкиВыбранныхПолей();
Если ПараметрыГруппировки = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура("Расположение", РасположениеПоляКомпоновкиДанных.Авто);
Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПередГруппировкойПолей", ЭтотОбъект, ПараметрыГруппировки);
ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы,
ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_Разгруппировать(Команда)
ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки;
Если ИдентификаторыСтрок.Количество() <> 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'"));
Возврат;
КонецЕсли;
РодительСтрокиИсточника = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторыСтрок[0]);
Если ТипЗнч(РодительСтрокиИсточника.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'"));
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
РодительЭлементаНастройкиИсточника = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(РодительСтрокиИсточника.Идентификатор);
Если ТипЗнч(РодительЭлементаНастройкиИсточника) <> Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'"));
Возврат;
КонецЕсли;
РодительЭлементаНастройкиПриемника = РодительЭлементаНастройкиИсточника.Родитель;
Если РодительЭлементаНастройкиИсточника.Родитель = Неопределено Тогда
РодительЭлементаНастройкиПриемника = СвойствоЭлементаСтруктуры;
КонецЕсли;
НаследникиЭлементовНастроек = Новый Соответствие;
НаследникиЭлементовНастроек.Вставить(РодительЭлементаНастройкиИсточника, РодительЭлементаНастройкиПриемника);
РодительСтрокиПриемника = РодительСтрокиИсточника.ПолучитьРодителя();
НаследникиСтрок = Новый Соответствие;
НаследникиСтрок.Вставить(РодительСтрокиИсточника, РодительСтрокиПриемника);
ИзменитьГруппировкуВыбранныхПолей(СвойствоЭлементаСтруктуры, РодительСтрокиИсточника.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок);
РодительСтрокиПриемника.ПолучитьЭлементы().Удалить(РодительСтрокиИсточника);
РодительЭлементаНастройкиПриемника.Элементы.Удалить(РодительЭлементаНастройкиИсточника);
Раздел = ВыбранныеПоля.ПолучитьЭлементы()[0];
Элементы.ВыбранныеПоля.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
Элементы.ВыбранныеПоля.ТекущаяСтрока = РодительСтрокиПриемника.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_УстановитьФлажки(Команда)
ИзменитьИспользование("ВыбранныеПоля");
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоля_СнятьФлажки(Команда)
ИзменитьИспользование("ВыбранныеПоля", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание)
ИсточникПеретаскиванияНаКлиенте = Элемент.Имя;
ПроверитьПеретаскиваемыеСтрокиИзВыбранныхПолей(ПараметрыПеретаскивания.Значение);
Если ПараметрыПеретаскивания.Значение.Количество() = 0 Тогда
РазрешитьПеретаскивание = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле)
Если ИсточникПеретаскиванияНаКлиенте <> Элемент.Имя Или ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ВыбранныеПоля.НайтиПоИдентификатору(ТекущаяСтрока);
Если ТекущиеДанные.ЭтоРаздел Или ТекущиеДанные.ЭтоГруппа Тогда
СтрокаПриемник = ТекущиеДанные;
Иначе
СтрокаПриемник = ТекущиеДанные.ПолучитьРодителя();
КонецЕсли;
Для Каждого ИдентификаторСтроки Из ПараметрыПеретаскивания.Значение Цикл
СтрокаПеретаскивание = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ЭтоПодчиненныеЭлементы(СтрокаПеретаскивание, СтрокаПриемник) Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
КонецЦикла;
ПриемникПеретаскиванияНаКлиенте = Элемент.Имя;
Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле)
Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если ИсточникПеретаскиванияНаКлиенте = Элемент.Имя Тогда
ПеретащитьВыбранныеПоляВПределахКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока);
Иначе
ПеретащитьПоляСортировкиВВыбранныеПоля(ПараметрыПеретаскивания.Значение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена Тогда
Возврат;
КонецЕсли;
Если ПриемникПеретаскиванияНаКлиенте <> Элемент.Имя Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Строки = ПараметрыПеретаскивания.Значение;
Родитель = Строки[0].ПолучитьРодителя();
Индекс = Строки.ВГраница();
Пока Индекс >= 0 Цикл
Строка = Строки[Индекс];
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры;
Если ЭлементНастройки.Родитель <> Неопределено Тогда
РодительЭлементаНастройки = ЭлементНастройки.Родитель;
КонецЕсли;
РодительЭлементаНастройки.Элементы.Удалить(ЭлементНастройки);
Родитель.ПолучитьЭлементы().Удалить(Строка);
Индекс = Индекс - 1;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОтборы
&НаКлиенте
Процедура Отборы_Сгруппировать(Команда)
ПараметрыГруппировки = ПараметрыГруппировкиОтборов();
Если ПараметрыГруппировки = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры;
Если ТипЗнч(ПараметрыГруппировки.Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(ПараметрыГруппировки.Родитель.Идентификатор);
КонецЕсли;
ЭлементНастройкиПриемник = ЭлементНастройкиИсточник.Элементы.Вставить(ПараметрыГруппировки.Индекс, Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ЭлементНастройкиПриемник.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
ЭлементНастройкиПриемник.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
НаследникиЭлементовНастроек = Новый Соответствие;
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
СтрокаИсточник = ПараметрыГруппировки.Родитель;
ЭлементыИсточника = СтрокаИсточник.ПолучитьЭлементы();
СтрокаПриемник = ЭлементКоллекцииФормыНастроек(СтрокаИсточник);
СтрокаПриемник = ЭлементыИсточника.Вставить(ПараметрыГруппировки.Индекс);
УстановитьДанныеСтрокиОтборов(СтрокаПриемник, СвойствоЭлементаСтруктуры, ЭлементНастройкиПриемник);
СтрокаПриемник.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
НаследникиСтрок = Новый Соответствие;
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
ИзменитьГруппировкуОтборов(СвойствоЭлементаСтруктуры, ПараметрыГруппировки.Строки, НаследникиЭлементовНастроек, НаследникиСтрок);
УдалитьБазовыеЭлементыГруппировкиОтборов(СвойствоЭлементаСтруктуры, ПараметрыГруппировки);
Раздел = КорневаяСтрокаПоУмолчанию("Отборы");
Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
Элементы.Отборы.ТекущаяСтрока = СтрокаПриемник.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура Отборы_Разгруппировать(Команда)
ИдентификаторыСтрок = Элементы.Отборы.ВыделенныеСтроки;
Если ИдентификаторыСтрок.Количество() <> 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'"));
Возврат;
КонецЕсли;
РодительСтрокиИсточника = Отборы.НайтиПоИдентификатору(ИдентификаторыСтрок[0]);
Если ТипЗнч(РодительСтрокиИсточника.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'"));
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
РодительЭлементаНастройкиИсточника = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(РодительСтрокиИсточника.Идентификатор);
Если ТипЗнч(РодительЭлементаНастройкиИсточника) <> Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'"));
Возврат;
КонецЕсли;
РодительЭлементаНастройкиПриемника = РодительЭлементаНастройкиИсточника.Родитель;
Если РодительЭлементаНастройкиИсточника.Родитель = Неопределено Тогда
РодительЭлементаНастройкиПриемника = СвойствоЭлементаСтруктуры;
КонецЕсли;
НаследникиЭлементовНастроек = Новый Соответствие;
НаследникиЭлементовНастроек.Вставить(РодительЭлементаНастройкиИсточника, РодительЭлементаНастройкиПриемника);
РодительСтрокиПриемника = РодительСтрокиИсточника.ПолучитьРодителя();
НаследникиСтрок = Новый Соответствие;
НаследникиСтрок.Вставить(РодительСтрокиИсточника, РодительСтрокиПриемника);
ИзменитьГруппировкуОтборов(СвойствоЭлементаСтруктуры, РодительСтрокиИсточника.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок);
РодительСтрокиПриемника.ПолучитьЭлементы().Удалить(РодительСтрокиИсточника);
РодительЭлементаНастройкиПриемника.Элементы.Удалить(РодительЭлементаНастройкиИсточника);
Раздел = КорневаяСтрокаПоУмолчанию("Отборы");
Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
Элементы.Отборы.ТекущаяСтрока = РодительСтрокиПриемника.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура Отборы_ПереместитьВверх(Команда)
СдвинутьОтборы();
КонецПроцедуры
&НаКлиенте
Процедура Отборы_ПереместитьВниз(Команда)
СдвинутьОтборы(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура Отборы_УстановитьФлажки(Команда)
ИзменитьИспользование("Параметры");
ИзменитьИспользование("Отборы");
КонецПроцедуры
&НаКлиенте
Процедура Отборы_СнятьФлажки(Команда)
ИзменитьИспользование("Параметры", Ложь);
ИзменитьИспользование("Отборы", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура Отборы_ПоказыватьВШапкеОтчета(Команда)
ОтборыУстановитьРежимОтображения("ПоказыватьВШапкеОтчета");
КонецПроцедуры
&НаКлиенте
Процедура Отборы_ПоказыватьВНастройкахОтчета(Команда)
ОтборыУстановитьРежимОтображения("ПоказыватьВНастройкахОтчета");
КонецПроцедуры
&НаКлиенте
Процедура Отборы_ПоказыватьТолькоФлажокВШапкеОтчета(Команда)
ОтборыУстановитьРежимОтображения("ПоказыватьТолькоФлажокВШапкеОтчета");
КонецПроцедуры
&НаКлиенте
Процедура Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета(Команда)
ОтборыУстановитьРежимОтображения("ПоказыватьТолькоФлажокВНастройкахОтчета");
КонецПроцедуры
&НаКлиенте
Процедура Отборы_НеПоказывать(Команда)
ОтборыУстановитьРежимОтображения("НеПоказывать");
КонецПроцедуры
&НаКлиенте
Процедура ОтборыВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка)
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено Или Строка.ЭтоРаздел Тогда
Возврат;
КонецЕсли;
Если Поле = Элементы.ОтборыПоле Или Поле = Элементы.ОтборыПараметр Или Поле = Элементы.ОтборыТипГруппы Тогда
СтандартнаяОбработка = Ложь;
Если Строка.ЭтоПараметр Тогда
Возврат;
КонецЕсли;
Если Строка.ЭтоГруппа Тогда
ОтборыВыбратьГруппу(ИдентификаторСтроки);
КонецЕсли;
ИначеЕсли Поле = Элементы.ОтборыКартинкаРежимаОтображения Тогда
СтандартнаяОбработка = Ложь;
Если Строка.ЭтоПараметр Тогда
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных");
Иначе
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
КонецЕсли;
ВыбратьРежимОтображенияДляСтроки(СвойствоЭлементаСтруктуры, "Отборы", ИдентификаторСтроки, Истина, Не Строка.ЭтоПараметр);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПриАктивизацииСтроки(Элемент)
УстановитьПараметрыРедактированияЭлементаОтбора();
ПодключитьОбработчикОжидания("ОтборыПриИзмененииТекущейСтроки", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПриАктивизацииЯчейки(Элемент)
Строка = Элемент.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
ЭтоПолеСписка = Строка.ДоступенСписокЗначений Или ОтчетыКлиентСервер.ЭтоВидСравненияСписка(Строка.ВидСравнения);
ПолеЗначения = ?(Строка.ЭтоПараметр, Элементы.ОтборыЗначение, Элементы.ОтборыПравоеЗначение);
ПолеЗначения.ОграничениеТипа = ?(ЭтоПолеСписка, Новый ОписаниеТипов("СписокЗначений"), Строка.ТипЗначения);
ПолеЗначения.РежимВыбораИзСписка = Не ЭтоПолеСписка И (Строка.ДоступныеЗначения <> Неопределено);
ПривестиЗначениеКВидуСравнения(Строка);
УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Копирование Тогда
СкопироватьНастройки(Элемент);
Возврат;
КонецЕсли;
ОтборыПередВыборомПоля();
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПолеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОтборыПередВыборомПоля(Элементы.Отборы.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПолеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора.НайтиПоле(ВыбранноеЗначение);
ИдентификаторСтроки = Элементы.Отборы.ТекущаяСтрока;
ОтборыПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПолеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Запрос = СокрЛП(Текст);
Если Не ЗначениеЗаполнено(Запрос) Тогда
Возврат;
КонецЕсли;
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено
Или Строка.ЭтоРаздел
Или Строка.ЭтоГруппа
Или Строка.ЭтоПараметр Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора;
ОпределитьДанныеВыбораЭлементаОтбораПоЗапросу(Запрос, ДанныеВыбора, ДоступныеПоля);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПередУдалением(Элемент, Отказ)
УдалитьСтроки(Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыИспользованиеПриИзменении(Элемент)
ИзменитьИспользованиеЭлементаНастройки("Отборы");
КонецПроцедуры
&НаКлиенте
Процедура ОтборыВидСравненияПриИзменении(Элемент)
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек("Отборы", Строка);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.ВидСравнения = Строка.ВидСравнения;
Если Строка.ЭтоПараметр Тогда
Условие = ВидСравненияКомпоновкиДанных.Равно;
Если Строка.ДоступенСписокЗначений Тогда
Условие = ВидСравненияКомпоновкиДанных.ВСписке;
КонецЕсли;
Иначе
Условие = Строка.ВидСравнения;
КонецЕсли;
ПолеЗначения = ?(Строка.ЭтоПараметр, Элементы.ОтборыЗначение, Элементы.ОтборыПравоеЗначение);
ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы(Строка.ВыборГруппИЭлементов, Условие);
ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ОтборыЗначениеПриИзменении(Элемент)
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных");
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.Значение = Строка.Значение;
УстановитьМодифицированность();
УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
Если НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда
ВариантБылМодифицирован = ВариантМодифицирован;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь);
ВариантМодифицирован = ВариантБылМодифицирован;
ПараметрыОбновления = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета();
ПараметрыОбновления.КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек;
ПараметрыОбновленияВариантМодифицирован = ВариантМодифицирован;
ПараметрыОбновления.ПользовательскиеНастройкиМодифицированы = ПользовательскиеНастройкиМодифицированы;
ПараметрыОбновления.СброситьПользовательскиеНастройки = Истина;
ОбновитьФорму(ПараметрыОбновления);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Строка = Элементы.Отборы.ТекущиеДанные;
УстановитьПараметрыРедактирования(Строка);
Если ВыборПереопределен(Строка, СтандартнаяОбработка) Тогда
Возврат;
КонецЕсли;
Если Строка.ДоступенСписокЗначений Тогда
ПоказатьСписокВыбора(Строка, СтандартнаяОбработка, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПравоеЗначениеПриИзменении(Элемент)
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
Строка.Использование = Истина;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, ПравоеЗначение");
УстановитьМодифицированность();
УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПравоеЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Строка = Элементы.Отборы.ТекущиеДанные;
УстановитьПараметрыРедактирования(Строка);
Если ВыборПереопределен(Строка, СтандартнаяОбработка) Тогда
Возврат;
КонецЕсли;
Если ОтчетыКлиентСервер.ЭтоВидСравненияСписка(Строка.ВидСравнения) Тогда
ПоказатьСписокВыбора(Строка, СтандартнаяОбработка, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПредставлениеПользовательскойНастройкиПриИзменении(Элемент)
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПустаяСтрока(Строка.ПредставлениеПользовательскойНастройки) Тогда
Строка.ПредставлениеПользовательскойНастройки = Строка.Заголовок;
КонецЕсли;
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки);
Если Строка.ЭтоПараметр Тогда
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных");
Иначе
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
КонецЕсли;
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Если Строка.ЭтоПредопределенныйЗаголовок Тогда
ЭлементНастройки.ПредставлениеПользовательскойНастройки = "";
Иначе
ЭлементНастройки.ПредставлениеПользовательскойНастройки = Строка.ПредставлениеПользовательскойНастройки;
КонецЕсли;
Если Не Строка.ЭтоПараметр Тогда
Если Строка.КартинкаРежимаОтображения = 1 Или Строка.КартинкаРежимаОтображения = 3 Тогда
ЭлементНастройки.Представление = Строка.ПредставлениеПользовательскойНастройки;
Иначе
ЭлементНастройки.Представление = "";
КонецЕсли;
КонецЕсли;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ОтборыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание)
ИсточникПеретаскиванияНаКлиенте = Элемент.Имя;
ПроверитьПеретаскиваемыеСтрокиИзОтборов(ПараметрыПеретаскивания.Значение);
Если ПараметрыПеретаскивания.Значение.Количество() = 0 Тогда
РазрешитьПеретаскивание = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле)
Если ТекущаяСтрока = Неопределено Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
Строка = Отборы.НайтиПоИдентификатору(ТекущаяСтрока);
Родитель = Строка.ПолучитьРодителя();
Если (Родитель <> Неопределено И Родитель.Идентификатор = "ПараметрыДанных")
ИЛИ Строка.Идентификатор = "ПараметрыДанных" Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
ТекущиеДанные = Отборы.НайтиПоИдентификатору(ТекущаяСтрока);
Если ТекущиеДанные.ЭтоРаздел Или ТекущиеДанные.ЭтоГруппа Тогда
СтрокаПриемник = ТекущиеДанные;
Иначе
СтрокаПриемник = ТекущиеДанные.ПолучитьРодителя();
КонецЕсли;
Для Каждого ИдентификаторСтроки Из ПараметрыПеретаскивания.Значение Цикл
СтрокаПеретаскивание = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ЭтоПодчиненныеЭлементы(СтрокаПеретаскивание, СтрокаПриемник) Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
КонецЦикла;
ПриемникПеретаскиванияНаКлиенте = Элемент.Имя;
Если ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ТекущаяСтрока, Поле)
Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если ИсточникПеретаскиванияНаКлиенте = Элемент.Имя Тогда
ПеретащитьОтборыВПределахКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена Тогда
Возврат;
КонецЕсли;
Если ПриемникПеретаскиванияНаКлиенте <> Элемент.Имя Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Строки = ПараметрыПеретаскивания.Значение;
Родитель = Строки[0].ПолучитьРодителя();
Индекс = Строки.ВГраница();
Пока Индекс >= 0 Цикл
Строка = Строки[Индекс];
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры;
Если ЭлементНастройки.Родитель <> Неопределено Тогда
РодительЭлементаНастройки = ЭлементНастройки.Родитель;
КонецЕсли;
РодительЭлементаНастройки.Элементы.Удалить(ЭлементНастройки);
Родитель.ПолучитьЭлементы().Удалить(Строка);
Индекс = Индекс - 1;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеПоля
&НаКлиенте
Процедура ИзменитьФормулу(Команда)
Строка = Элементы.ВыбранныеПоля.ТекущиеДанные;
Если Строка = Неопределено Или Не Строка.ЭтоФормула Тогда
Возврат;
КонецЕсли;
Формула = ВариантыОтчетовСлужебныйКлиентСервер.ФормулаПоПутиКДанным(Отчет.КомпоновщикНастроек.Настройки, Строка(Строка.Поле));
Если ТипЗнч(Формула) <> Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗакрытииФормыНастроекДляТехническогоСпециалиста", ЭтотОбъект);
ОткрытьФормуНастроекДляТехническогоСпециалиста("СтраницаПользовательскихПолей", ОписаниеОповещения);
Возврат;
КонецЕсли;
ВариантыОтчетовСлужебныйКлиент.ИзменитьФормулу(
ЭтотОбъект, Отчет.КомпоновщикНастроек.Настройки, Строка(Строка.Поле));
КонецПроцедуры
&НаКлиенте
Процедура ПослеИзмененияФормулы(ОписаниеФормулы, Формула) Экспорт
Если ТипЗнч(ОписаниеФормулы) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ВариантыОтчетовСлужебныйКлиент.ПослеИзмененияФормулы(ОписаниеФормулы, Формула);
Строка = Элементы.ВыбранныеПоля.ТекущиеДанные;
Если Строка <> Неопределено Тогда
Строка.Заголовок = ОписаниеФормулы.Заголовок;
КонецЕсли;
УстановитьМодифицированность();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСтруктураВарианта
&НаКлиенте
Процедура СтруктураВариантаПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("СтруктураВариантаПриИзмененииТекущейСтроки", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка)
Если РасширенныйРежим = 0 Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Строка = Элемент.ТекущиеДанные;
Если Строка = Неопределено Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Если Строка.Тип = "НастройкиКомпоновкиДанных"
Или Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
Или Строка.Тип = "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных" Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Если Поле = Элементы.СтруктураВариантаПредставление
Или Поле = Элементы.СтруктураВариантаСодержитОтборы
Или Поле = Элементы.СтруктураВариантаСодержитПоляИлиСортировки
Или Поле = Элементы.СтруктураВариантаСодержитУсловноеОформление Тогда
СтандартнаяОбработка = Ложь;
ИмяСтраницы = Неопределено;
Если Поле = Элементы.СтруктураВариантаСодержитОтборы Тогда
ИмяСтраницы = "СтраницаОтборы";
ИначеЕсли Поле = Элементы.СтруктураВариантаСодержитПоляИлиСортировки Тогда
ИмяСтраницы = "СтраницаВыбранныеПоляИСортировки";
ИначеЕсли Поле = Элементы.СтруктураВариантаСодержитУсловноеОформление Тогда
ИмяСтраницы = "СтраницаОформление";
КонецЕсли;
ИзменитьЭлементСтруктуры(Строка, ИмяСтраницы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Не Элементы.СтруктураВарианта_Добавить.Доступность Тогда
Возврат;
КонецЕсли;
Если Копирование Тогда
СкопироватьНастройки(Элемент);
Возврат;
КонецЕсли;
ДобавитьГруппировкуСтруктурыВарианта();
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_Сгруппировать(Команда)
Если Элементы.СтруктураВарианта_Сгруппировать.Доступность Тогда
ДобавитьГруппировкуСтруктурыВарианта(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ДобавитьТаблицу(Команда)
Если Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность Тогда
ДобавитьЭлементСтруктурыНастроек(Тип("ТаблицаКомпоновкиДанных"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ДобавитьДиаграмму(Команда)
Если Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность Тогда
ДобавитьЭлементСтруктурыНастроек(Тип("ДиаграммаКомпоновкиДанных"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_УстановитьФлажки(Команда)
ИзменитьИспользование("СтруктураВарианта");
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_СнятьФлажки(Команда)
ИзменитьИспользование("СтруктураВарианта", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
Если РасширенныйРежим = 0 Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Строка = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если Строка = Неопределено Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Если Строка.Тип = "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных"
Или Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
Или Строка.Тип = "НастройкиКомпоновкиДанных" Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле)
Если ИдентификаторЦели = Неопределено Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
Строка = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если Строка = Неопределено Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели);
Если НовыйРодитель = Неопределено Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
Если НовыйРодитель.Тип = "ТаблицаКомпоновкиДанных"
Или НовыйРодитель.Тип = "ДиаграммаКомпоновкиДанных" Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
ДопустимоТолькоНаличиеГруппировок = Ложь;
Если НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыТаблицы"
Или НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыДиаграммы"
Или НовыйРодитель.Тип = "ГруппировкаТаблицы"
Или НовыйРодитель.Тип = "ГруппировкаДиаграммы" Тогда
ДопустимоТолькоНаличиеГруппировок = Истина;
КонецЕсли;
Если ДопустимоТолькоНаличиеГруппировок
И Строка.Тип <> "Группировка"
И Строка.Тип <> "ГруппировкаТаблицы"
И Строка.Тип <> "ГруппировкаДиаграммы" Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
КоллекцииКоллекций = Новый Массив;
КоллекцииКоллекций.Добавить(Строка.ПолучитьЭлементы());
Количество = 1;
Пока Количество > 0 Цикл
Коллекция = КоллекцииКоллекций[0];
Количество = Количество - 1;
КоллекцииКоллекций.Удалить(0);
Для Каждого ВложеннаяСтрока Из Коллекция Цикл
Если ВложеннаяСтрока = НовыйРодитель Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
Если ДопустимоТолькоНаличиеГруппировок
И ВложеннаяСтрока.Тип <> "Группировка"
И ВложеннаяСтрока.Тип <> "ГруппировкаТаблицы"
И ВложеннаяСтрока.Тип <> "ГруппировкаДиаграммы" Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
КоллекцииКоллекций.Добавить(ВложеннаяСтрока.ПолучитьЭлементы());
Количество = Количество + 1;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле)
СтандартнаяОбработка = Ложь;
Строка = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели);
Результат = ПереместитьЭлементыСтруктурыВарианта(Строка, НовыйРодитель);
Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина);
Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.Строка.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаИспользованиеПриИзменении(Элемент)
ИзменитьИспользованиеЭлементаНастройки("СтруктураВарианта");
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаЗаголовокПриИзменении(Элемент)
Строка = Элементы.СтруктураВарианта.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
ОбновитьЗаголовокЭлементаСтруктурыВарианта(Строка);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ПереместитьВверх(Команда)
Контекст = НовыйКонтекст("СтруктураВарианта", "Переместить");
Контекст.Вставить("Направление", -1);
ОпределитьВыделенныеСтроки(Контекст);
Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда
ПоказатьПредупреждение(, Контекст.ПричинаОтказа);
Возврат;
КонецЕсли;
СдвинутьСтроки(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ПереместитьВниз(Команда)
Контекст = НовыйКонтекст("СтруктураВарианта", "Переместить");
Контекст.Вставить("Направление", 1);
ОпределитьВыделенныеСтроки(Контекст);
Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда
ПоказатьПредупреждение(, Контекст.ПричинаОтказа);
Возврат;
КонецЕсли;
СдвинутьСтроки(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ПереместитьНаУровеньВыше(Команда)
Контекст = НовыйКонтекст("СтруктураВарианта", "ПереместитьВИерархии");
Контекст.Вставить("Направление", -1);
ОпределитьВыделенныеСтроки(Контекст);
Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда
ПоказатьПредупреждение(, Контекст.ПричинаОтказа);
Возврат;
КонецЕсли;
ПереместитьВИерархии(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ПереместитьНаУровеньНиже(Команда)
Контекст = НовыйКонтекст("СтруктураВарианта", "ПереместитьВИерархии");
Контекст.Вставить("Направление", 1);
ОпределитьВыделенныеСтроки(Контекст);
Если ЗначениеЗаполнено(Контекст.ПричинаОтказа) Тогда
ПоказатьПредупреждение(, Контекст.ПричинаОтказа);
Возврат;
КонецЕсли;
ПереместитьВИерархии(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_Изменить(Команда)
ТаблицаЭлемент = Элементы.СтруктураВарианта;
Поле = ТаблицаЭлемент.ТекущийЭлемент;
СтандартнаяОбработка = Истина;
СтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока;
СтруктураВариантаВыбор(ТаблицаЭлемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаПередУдалением(Элемент, Отказ)
УдалитьСтроки(Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ПереместитьВышеИЛевее(Команда)
Если Не Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность Тогда
Возврат;
КонецЕсли;
СтрокаТаблицыВверх = Элементы.СтруктураВарианта.ТекущиеДанные;
Если СтрокаТаблицыВверх = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаТаблицыВниз = СтрокаТаблицыВверх.ПолучитьРодителя();
Если СтрокаТаблицыВниз = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("Режим", "ВверхИВлево");
ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", СтрокаТаблицыВверх);
ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз);
СтруктураВарианта_Переместить(-1, ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_ПереместитьНижеИПравее(Команда)
Если Не Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность Тогда
Возврат;
КонецЕсли;
СтрокаТаблицыВниз = Элементы.СтруктураВарианта.ТекущиеДанные;
Если СтрокаТаблицыВниз = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("Режим", "ВнизИВправо");
ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", Неопределено);
ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз);
ПодчиненныеСтроки = СтрокаТаблицыВниз.ПолучитьЭлементы();
Количество = ПодчиненныеСтроки.Количество();
Если Количество = 0 Тогда
Возврат;
ИначеЕсли Количество = 1 Тогда
ПараметрыВыполнения.СтрокаТаблицыВверх = ПодчиненныеСтроки[0];
СтруктураВарианта_Переместить(-1, ПараметрыВыполнения);
Иначе
Список = Новый СписокЗначений;
Для НомерСтроки = 1 По Количество Цикл
ПодчиненнаяСтрока = ПодчиненныеСтроки[НомерСтроки-1];
Список.Добавить(ПодчиненнаяСтрока.ПолучитьИдентификатор(), ПодчиненнаяСтрока.Представление);
КонецЦикла;
Обработчик = Новый ОписаниеОповещения("СтруктураВарианта_Переместить", ЭтотОбъект, ПараметрыВыполнения);
ПоказатьВыборИзМеню(Обработчик, Список);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_Переместить(Результат, ПараметрыВыполнения) Экспорт
Если Результат <> -1 Тогда
Если ТипЗнч(Результат) <> Тип("ЭлементСпискаЗначений") Тогда
Возврат;
КонецЕсли;
СтрокаТаблицыВверх = СтруктураВарианта.НайтиПоИдентификатору(Результат.Значение);
Иначе
СтрокаТаблицыВверх = ПараметрыВыполнения.СтрокаТаблицыВверх;
КонецЕсли;
СтрокаТаблицыВниз = ПараметрыВыполнения.СтрокаТаблицыВниз;
СтрокиВниз = СтрокаТаблицыВниз.ПолучитьЭлементы();
Индекс = СтрокиВниз.Индекс(СтрокаТаблицыВверх);
МассивИдентификаторовСтрокВниз = Новый Массив;
Для Каждого СтрокаТаблицы Из СтрокиВниз Цикл
Если СтрокаТаблицы = СтрокаТаблицыВверх Тогда
Продолжить;
КонецЕсли;
МассивИдентификаторовСтрокВниз.Добавить(СтрокаТаблицы.ПолучитьИдентификатор());
КонецЦикла;
Результат = ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз);
СтрокаТаблицыВверх = Результат.Строка;
СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы();
Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл
ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицы, СтрокаТаблицыВниз);
КонецЦикла;
Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл
СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор);
ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицы, СтрокаТаблицыВверх);
КонецЦикла;
СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы();
Если СтрокиВверх.Количество() - 1 < Индекс Тогда
ПередЧемВставить = Неопределено;
Иначе
ПередЧемВставить = СтрокиВверх[Индекс];
КонецЕсли;
Результат = ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить);
СтрокаТаблицыВниз = Результат.Строка;
Если ПараметрыВыполнения.Режим = "ВнизИВправо" Тогда
ТекущаяСтрока = СтрокаТаблицыВниз;
Иначе
ТекущаяСтрока = СтрокаТаблицыВверх;
КонецЕсли;
ТекущаяСтрокаИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор();
Элементы.СтруктураВарианта.Развернуть(ТекущаяСтрокаИдентификатор, Истина);
Элементы.СтруктураВарианта.ТекущаяСтрока = ТекущаяСтрокаИдентификатор;
ПользовательскиеНастройкиМодифицированы = Истина;
Если РасширенныйРежим = 1 Тогда
ВариантИзменен = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВарианта_СохранитьВФайл(Команда)
Адрес = АдресНастроекВСтрокеXML();
ИмяФайла = НСтр("ru = 'Настройки.xml'");
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения настроек отчета'");
ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Настройки отчета (*.xml)|*.xml'");
ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, Адрес, ИмяФайла, ПараметрыСохранения);
КонецПроцедуры
&НаСервере
Функция АдресНастроекВСтрокеXML()
Возврат ПоместитьВоВременноеХранилище(
ОбщегоНазначения.ЗначениеВСтрокуXML(Отчет.КомпоновщикНастроек.Настройки),
УникальныйИдентификатор);
КонецФункции
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСоставГруппировки
&НаКлиенте
Процедура СоставГруппировкиИспользованиеПриИзменении(Элемент)
ИзменитьИспользованиеЭлементаНастройки("СоставГруппировки");
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка)
Строка = Элементы.СоставГруппировки.ТекущиеДанные;
Если Строка = Неопределено Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Если Поле = Элементы.СоставГруппировкиПоле Тогда
СтандартнаяОбработка = Ложь;
Если ТипЗнч(Строка.Поле) = Тип("ПолеКомпоновкиДанных") Тогда
СоставГруппировкиВыбратьПоле(ИдентификаторСтроки, Строка);
КонецЕсли;
ИначеЕсли Поле <> Элементы.СоставГруппировкиТипГруппировки
И Поле <> Элементы.СоставГруппировкиТипДополнения Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Копирование Тогда
СкопироватьНастройки(Элемент);
Возврат;
КонецЕсли;
ВыбратьПоле("СоставГруппировки", Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиПередУдалением(Элемент, Отказ)
УдалитьСтроки(Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиТипГруппировкиПриИзменении(Элемент)
Строка = Элементы.СоставГруппировки.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.ТипГруппировки = Строка.ТипГруппировки;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиТипДополненияПриИзменении(Элемент)
Строка = Элементы.СоставГруппировки.ТекущиеДанные;
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.ТипДополнения = Строка.ТипДополнения;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировки_ПереместитьВверх(Команда)
СдвинутьПолеГруппировки();
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировки_ПереместитьВниз(Команда)
СдвинутьПолеГруппировки(Ложь);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОформление
&НаКлиенте
Процедура ОформлениеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Копирование Тогда
СкопироватьНастройки(Элемент);
Возврат;
КонецЕсли;
ОформлениеИзменитьЭлемент();
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеВыбор(Элемент, ИдентификаторСтроки, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Строка = Элементы.Оформление.ТекущиеДанные;
Если Строка = Неопределено Или Строка.ЭтоРаздел Тогда
Возврат;
КонецЕсли;
Если Строка.ЭтоПараметрВывода Тогда
Если Строка(Строка.Идентификатор) = "TITLE"
И Поле = Элементы.ОформлениеЗаголовок Тогда
Обработчик = Новый ОписаниеОповещения("ОформлениеВводЗаголовкаЗавершение", ЭтотОбъект, ИдентификаторСтроки);
ПоказатьВводСтроки(Обработчик, Строка.Значение, НСтр("ru = 'Заголовок для печати'"),, Истина);
КонецЕсли;
ИначеЕсли Поле = Элементы.ОформлениеЗаголовок Тогда
ОформлениеИзменитьЭлемент(ИдентификаторСтроки, Строка);
ИначеЕсли Поле = Элементы.ОформлениеИндексКартинкиДоступа Тогда
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек);
ВыбратьРежимОтображенияДляСтроки(СвойствоЭлементаСтруктуры, "Оформление", ИдентификаторСтроки, Истина, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеПередУдалением(Элемент, Отказ)
УдалитьСтроки(Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеИспользованиеПриИзменении(Элемент)
ИзменитьИспользованиеЭлементаНастройки("Оформление");
КонецПроцедуры
&НаКлиенте
Процедура Оформление_ПереместитьВверх(Команда)
СдвинутьОформление();
КонецПроцедуры
&НаКлиенте
Процедура Оформление_ПереместитьВниз(Команда)
СдвинутьОформление(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура Оформление_УстановитьФлажки(Команда)
ИзменитьИспользованиеПредопределенныхПараметровВывода();
ИзменитьИспользование("Оформление");
КонецПроцедуры
&НаКлиенте
Процедура Оформление_СнятьФлажки(Команда)
ИзменитьИспользованиеПредопределенныхПараметровВывода(Ложь);
ИзменитьИспользование("Оформление", Ложь);
КонецПроцедуры
&НаКлиенте
Процедура НастроитьКолонтитулы(Команда)
Перем НастройкиКолонтитулов;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", НастройкиКолонтитулов);
ОткрытьФорму("ОбщаяФорма.НастройкаКолонтитулов", Новый Структура("Настройки, ЭтоИндивидуальныеНастройки", НастройкиКолонтитулов, Истина),
ЭтотОбъект, УникальныйИдентификатор,,,
Новый ОписаниеОповещения("ЗапомнитьНастройкиКолонтитулов", ЭтотОбъект),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ЗакрытьИСформировать(Команда)
ЗаписатьИЗакрыть(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьБезФормирования(Команда)
ЗаписатьИЗакрыть(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьУсловияОтборов(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТипФормыВладельца", ТипФормыОтчета);
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек);
Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект);
ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина,,, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьУсловияОтборовЗавершение(УсловияОтборов, Контекст) Экспорт
Если УсловияОтборов = Неопределено
Или УсловияОтборов = КодВозвратаДиалога.Отмена
Или УсловияОтборов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПараметрыОбновления = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета("ИзменитьУсловияОтборов");
ПараметрыОбновления.КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек;
ПараметрыОбновления.ПользовательскиеНастройкиМодифицированы = Истина;
ПараметрыОбновления.УсловияОтборов =УсловияОтборов;
ОбновитьФорму(ПараметрыОбновления);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьНастройкиОтНесуществующихПолей(Команда)
УдалитьПомеченныеНаУдалениеПоля();
ПараметрыОбновления = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета();
ПараметрыОбновления.КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек;
ОбновитьФорму(ПараметрыОбновления);
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКНастройкамДляТехническогоСпециалиста(Команда)
ОткрытьФормуНастроекДляТехническогоСпециалиста(Элементы.СтраницыНастроек.ТекущаяСтраница.Имя);
КонецПроцедуры
#Область ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыбратьПериод(Команда)
ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СдвинутьПериодНазад(Команда)
ОтчетыКлиент.СдвинутьПериод(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СдвинутьПериодВперед(Команда)
ОтчетыКлиент.СдвинутьПериод(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Список_Подбор(Команда)
ПутьКСписку = СтрЗаменить(Команда.Имя, "Подбор", "");
ПараметрыЗаполнения = ПараметрыЗаполненияСписка();
ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку;
ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
ПараметрыЗаполнения.Владелец = Элементы[ПутьКСписку];
ПараметрыЗаполнения.Вставить("ЭтоПодбор", Истина);
НачатьЗаполнениеСписка(Элементы[Команда.Имя], ПараметрыЗаполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Список_ВставитьИзБуфера(Команда)
ПутьКСписку = СтрЗаменить(Команда.Имя, ОтчетыКлиентСервер.ИмяКомандыВставитьИзБуфера(), "");
Список = ЭтотОбъект[ПутьКСписку];
ПолеСписка = Элементы[ПутьКСписку];
Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, Индекс);
ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент);
Список.ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу(
Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание);
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("ОписаниеТипов", ОписаниеТиповБезПримитивных(Список.ТипЗначения));
ПараметрыПоиска.Вставить("ПредставлениеПоля", ПолеСписка.Заголовок);
ПараметрыПоиска.Вставить("Сценарий", "ВставкаИзБуфераОбмена");
ПараметрыПоиска.Вставить("ПараметрыВыбора", ПараметрыВыбора);
Обработчик = Новый ОписаниеОповещения("ВставитьИзБуфераЗавершение", ЭтотОбъект, ПутьКСписку);
МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент");
МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеНастроекОтчета(Описание)
Возврат Описание;
КонецФункции
#Область ПоляГруппировки
&НаСервере
Процедура ОбновитьПоляГруппировки()
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл
Строка = СоставГруппировки.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Если ТипЗнч(ЭлементНастройки) = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Тогда
Строка.Заголовок = НСтр("ru = 'Авто (по всем полям)'");
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент", "Предопределенный");
Продолжить;
КонецЕсли;
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляПолейГруппировок.НайтиПоле(ЭлементНастройки.Поле);
Если ОписаниеНастройки = Неопределено Тогда
УстановитьПометкуУдаления("СоставГруппировки", Строка);
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
Строка.ПоказыватьТипДополнения = ОписаниеНастройки.ТипЗначения.СодержитТип(Тип("Дата"));
Если ОписаниеНастройки.Ресурс Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Ресурс");
ИначеЕсли ОписаниеНастройки.Таблица Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Таблица");
ИначеЕсли ОписаниеНастройки.Папка Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа");
Иначе
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиВыбратьПоле(ИдентификаторСтроки, Строка)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Обработчик = Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки);
ВыбратьПоле("СоставГруппировки", Обработчик, ЭлементНастройки.Поле);
КонецПроцедуры
&НаКлиенте
Процедура СоставГруппировкиПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки) Экспорт
Если ОписаниеНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ВариантыОтчетовСлужебныйКлиент.ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляГруппировок, ОписаниеНастройки);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек);
Если ИдентификаторСтроки = Неопределено Тогда
Строка = СоставГруппировки.ПолучитьЭлементы().Добавить();
ЭлементНастройки = СвойствоЭлементаСтруктуры.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
Иначе
Строка = СоставГруппировки.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
КонецЕсли;
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.Поле = ОписаниеНастройки.Поле;
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
Строка.ПоказыватьТипДополнения = ОписаниеНастройки.ТипЗначения.СодержитТип(Тип("Дата"));
Если ОписаниеНастройки.Ресурс Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Ресурс");
ИначеЕсли ОписаниеНастройки.Таблица Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Таблица");
ИначеЕсли ОписаниеНастройки.Папка Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа");
Иначе
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент");
КонецЕсли;
ИзменитьИспользованиеСвязанныхЭлементовНастроек("СоставГруппировки", Строка, ЭлементНастройки);
Элементы.СоставГруппировки.ТекущаяСтрока = Строка.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьПолеГруппировки(ВНачало = Истина)
ИдентификаторыСтрок = Элементы.СоставГруппировки.ВыделенныеСтроки;
Если ИдентификаторыСтрок.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПоляГруппировки", ИдентификаторЭлементаСтруктурыНастроек);
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = СоставГруппировки.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
Строки = СоставГруппировки.ПолучитьЭлементы();
Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки);
Граница = ЭлементыНастроек.Количество() - 1;
Если ВНачало Тогда
Если Индекс = 0 Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница);
Строки.Сдвинуть(Индекс, Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1);
Строки.Сдвинуть(Индекс, -1);
КонецЕсли;
Иначе
Если Индекс = Граница Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница);
Строки.Сдвинуть(Индекс, -Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1);
Строки.Сдвинуть(Индекс, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
#КонецОбласти
#Область ПараметрыДанныхИОтборы
&НаСервере
Процедура ОбновитьПараметрыДанных()
Если РасширенныйРежим = 0
Или РежимИзмененияЭлементаСтруктурыНастроек Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "ПараметрыДанных", ИдентификаторЭлементаСтруктурыНастроек);
Раздел = Отборы.ПолучитьЭлементы().Добавить();
Раздел.ЭтоРаздел = Истина;
Раздел.Заголовок = НСтр("ru = 'Параметры'");
Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("ПараметрыДанных");
Раздел.Идентификатор = "ПараметрыДанных";
ЭлементыРаздела = Раздел.ПолучитьЭлементы();
Если СвойствоЭлементаСтруктуры = Неопределено
Или СвойствоЭлементаСтруктуры.Элементы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Схема = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы);
Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл
НайденныйПараметр = Схема.Параметры.Найти(ЭлементНастройки.Параметр);
Если НайденныйПараметр <> Неопределено И НайденныйПараметр.ОграничениеИспользования Тогда
Продолжить;
КонецЕсли;
Строка = ЭлементыРаздела.Добавить();
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки);
Строка.Картинка = -1;
Строка.ЭтоПараметр = Истина;
Строка.ЭтоПериод = (ТипЗнч(Строка.Значение) = Тип("СтандартныйПериод"));
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПараметры.НайтиПараметр(ЭлементНастройки.Параметр);
Если ОписаниеНастройки <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки,, "Использование");
Строка.ОтображатьИспользование = (ОписаниеНастройки.Использование <> ИспользованиеПараметраКомпоновкиДанных.Всегда);
Если ОписаниеНастройки.ДоступныеЗначения <> Неопределено Тогда
ЭлементСписка = ОписаниеНастройки.ДоступныеЗначения.НайтиПоЗначению(ЭлементНастройки.Значение);
Если ЭлементСписка <> Неопределено Тогда
Строка.ПредставлениеЗначения = ЭлементСписка.Представление;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка.ПредставлениеПользовательскойНастройки) Тогда
Строка.ПредставлениеПользовательскойНастройки = Строка.Заголовок;
КонецЕсли;
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьОтборы(Строки = Неопределено, ЭлементыНастроек = Неопределено)
Если РасширенныйРежим = 0 Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Возврат;
КонецЕсли;
Если Строки = Неопределено Тогда
Раздел = Отборы.ПолучитьЭлементы().Добавить();
Раздел.ЭтоРаздел = Истина;
Раздел.Заголовок = НСтр("ru = 'Отборы'");
Раздел.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Отборы");
Раздел.Идентификатор = "Отборы";
Строки = Раздел.ПолучитьЭлементы();
КонецЕсли;
Если ЭлементыНастроек = Неопределено Тогда
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
КонецЕсли;
Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл
Строка = Строки.Добавить();
Если Не УстановитьДанныеСтрокиОтборов(Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки) Тогда
УстановитьПометкуУдаления("Отборы", Строка);
КонецЕсли;
Если ТипЗнч(ЭлементНастройки) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
ОбновитьОтборы(Строка.ПолучитьЭлементы(), ЭлементНастройки.Элементы);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция УстановитьДанныеСтрокиОтборов(Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки, ОписаниеНастройки = Неопределено)
УстановленыУспешно = Истина;
ЭтоГруппа = (ТипЗнч(ЭлементНастройки) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Если ОписаниеНастройки = Неопределено Тогда
Если Не ЭтоГруппа Тогда
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора.НайтиПоле(ЭлементНастройки.ЛевоеЗначение);
УстановленыУспешно = (ОписаниеНастройки <> Неопределено);
КонецЕсли;
Если ОписаниеНастройки = Неопределено Тогда
ОписаниеНастройки = Новый Структура("ДоступныеЗначения, ДоступныеВидыСравнения");
ОписаниеНастройки.Вставить("ТипЗначения", Новый ОписаниеТипов("Неопределено"));
КонецЕсли;
КонецЕсли;
ДоступныеВидыСравнения = ОписаниеНастройки.ДоступныеВидыСравнения;
Если ДоступныеВидыСравнения <> Неопределено
И ДоступныеВидыСравнения.Количество() > 0
И ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементНастройки.ВидСравнения) = Неопределено Тогда
ЭлементНастройки.ВидСравнения = ДоступныеВидыСравнения[0].Значение;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Строка.Поле = Строка.Заголовок;
Строка.ОтображатьИспользование = Истина;
Строка.ЭтоПериод = (ТипЗнч(Строка.ПравоеЗначение) = Тип("СтандартныйПериод"));
Строка.ЭтоУникальныйИдентификатор = (ТипЗнч(Строка.ПравоеЗначение) = Тип("УникальныйИдентификатор"));
Если Строка.ТипЗначения = Новый ОписаниеТипов("Дата") И Не ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементНастройки.ВидСравнения) Тогда
Строка.ТипЗначения = Новый ОписаниеТипов("СтандартнаяДатаНачала");
КонецЕсли;
Строка.ЭтоГруппа = ЭтоГруппа;
Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки);
Строка.Картинка = -1;
Если ЭтоГруппа Тогда
Строка.Заголовок = Строка.ТипГруппы;
Иначе
ОтчетыКлиентСервер.ПривестиЗначениеКТипу(ЭлементНастройки.ПравоеЗначение, ОписаниеНастройки.ТипЗначения);
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка.ПредставлениеПользовательскойНастройки) Тогда
Если ЗначениеЗаполнено(ЭлементНастройки.Представление) Тогда
Строка.ПредставлениеПользовательскойНастройки = ЭлементНастройки.Представление;
Иначе
Строка.ПредставлениеПользовательскойНастройки = Строка.Заголовок;
КонецЕсли;
КонецЕсли;
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки);
ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки);
УстановитьПредставлениеЗначения(Строка, СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора);
Возврат УстановленыУспешно;
КонецФункции
&НаКлиенте
Процедура ОтборыВыбратьГруппу(ИдентификаторСтроки)
Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораГруппы", ЭтотОбъект, ИдентификаторСтроки);
Список = Новый СписокЗначений;
Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе);
ПоказатьВыборИзМеню(Обработчик, Список);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПослеВыбораГруппы(ТипГруппы, ИдентификаторСтроки) Экспорт
Если ТипГруппы = Неопределено Тогда
Возврат;
КонецЕсли;
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не Строка.ЭтоГруппа Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'"));
Возврат;
КонецЕсли;
Строка.ТипГруппы = ?(ТипЗнч(ТипГруппы) = Тип("ТипГруппыЭлементовОтбораКомпоновкиДанных"), ТипГруппы, ТипГруппы.Значение);
Строка.Заголовок = Строка.ТипГруппы;
Строка.ПредставлениеПользовательскойНастройки = Строка.ТипГруппы;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.ТипГруппы = Строка.ТипГруппы;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПередВыборомПоля(ИдентификаторСтроки = Неопределено)
Если Не РежимИзмененияЭлементаСтруктурыНастроек Тогда
Строка = Элементы.Отборы.ТекущиеДанные;
Если (Строка = Неопределено)
Или (Строка.ЭтоПараметр)
Или (Строка.ЭтоРаздел И Строка.Идентификатор = "ПараметрыДанных") Тогда
Строка = Отборы.ПолучитьЭлементы()[1];
Элементы.Отборы.ТекущаяСтрока = Строка.ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки);
ВыбратьПоле("Отборы", Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки) Экспорт
Если ОписаниеНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ВариантыОтчетовСлужебныйКлиент.ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляОтбора, ОписаниеНастройки);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
Если ИдентификаторСтроки = Неопределено Тогда
Родитель = Элементы.Отборы.ТекущиеДанные;
Если Родитель = Неопределено Тогда
Родитель = КорневаяСтрокаПоУмолчанию("Отборы");
КонецЕсли;
Если Не Родитель.ЭтоРаздел И Не Родитель.ЭтоГруппа Тогда
Родитель = Родитель.ПолучитьРодителя();
КонецЕсли;
Строка = Родитель.ПолучитьЭлементы().Добавить();
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры;
Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор);
КонецЕсли;
ЭлементНастройки = РодительЭлементаНастройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Иначе
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
КонецЕсли;
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.ЛевоеЗначение = ОписаниеНастройки.Поле;
ЭлементНастройки.ПравоеЗначение = ОписаниеНастройки.Тип.ПривестиЗначение();
ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
ЭлементНастройки.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
ЭлементНастройки.ПредставлениеПользовательскойНастройки = "";
ДоступныеВидыСравнения = ОписаниеНастройки.ДоступныеВидыСравнения;
Если ДоступныеВидыСравнения <> Неопределено
И ДоступныеВидыСравнения.Количество() > 0
И ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементНастройки.ВидСравнения) = Неопределено Тогда
ЭлементНастройки.ВидСравнения = ДоступныеВидыСравнения[0].Значение;
КонецЕсли;
УстановитьДанныеСтрокиОтборов(Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки, ОписаниеНастройки);
Раздел = КорневаяСтрокаПоУмолчанию("Отборы");
Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПараметрыРедактированияЭлементаОтбора()
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено
Или Строка.ЭтоРаздел
Или Строка.ЭтоГруппа Тогда
Возврат;
КонецЕсли;
#Область ПараметрыРедактированияУсловия
ПолеУсловия = Элементы.ОтборыВидСравнения;
ПолеУсловия.РежимВыбораИзСписка = (Строка.ДоступныеВидыСравнения <> Неопределено);
Если Строка.ДоступныеВидыСравнения <> Неопределено Тогда
Список = ПолеУсловия.СписокВыбора;
Список.Очистить();
Для Каждого ВидыСравнения Из Строка.ДоступныеВидыСравнения Цикл
ЗаполнитьЗначенияСвойств(Список.Добавить(), ВидыСравнения);
КонецЦикла;
КонецЕсли;
Если Строка.ЭтоПараметр Тогда
Условие = ВидСравненияКомпоновкиДанных.Равно;
Если Строка.ДоступенСписокЗначений Тогда
Условие = ВидСравненияКомпоновкиДанных.ВСписке;
КонецЕсли;
Иначе
Условие = Строка.ВидСравнения;
КонецЕсли;
#КонецОбласти
#Область ПараметрыРедактированияЗначения
ПолеЗначения = ?(Строка.ЭтоПараметр, Элементы.ОтборыЗначение, Элементы.ОтборыПравоеЗначение);
ПолеЗначения.ДоступныеТипы = Строка.ТипЗначения;
ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы(Строка.ВыборГруппИЭлементов, Условие);
Список = ПолеЗначения.СписокВыбора;
Список.Очистить();
Если Строка.ДоступныеЗначения <> Неопределено Тогда
Для Каждого ДоступноеЗначение Из Строка.ДоступныеЗначения Цикл
ЗаполнитьЗначенияСвойств(Список.Добавить(), ДоступноеЗначение);
КонецЦикла;
КонецЕсли;
#КонецОбласти
КонецПроцедуры
&НаКлиенте
Процедура ОтборыПриИзмененииТекущейСтроки()
Строка = Элементы.Отборы.ТекущиеДанные;
Если Строка = Неопределено Тогда
УстановитьДоступностьКомандОтборов();
Иначе
УстановитьДоступностьКомандОтборов(Не Строка.ЭтоПараметр И Не Строка.ЭтоРаздел, Строка.ЭтоРаздел);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКомандОтборов(ЭтоОтбор = Ложь, ЭтоРаздел = Ложь)
Элементы.Отборы_Удалить.Доступность = ЭтоОтбор;
Элементы.Отборы_Удалить1.Доступность = ЭтоОтбор;
Элементы.Отборы_Сгруппировать.Доступность = ЭтоОтбор;
Элементы.Отборы_Сгруппировать1.Доступность = ЭтоОтбор;
Элементы.Отборы_Разгруппировать.Доступность = ЭтоОтбор;
Элементы.Отборы_Разгруппировать1.Доступность = ЭтоОтбор;
Элементы.Отборы_ПереместитьВверх.Доступность = ЭтоОтбор;
Элементы.Отборы_ПереместитьВверх1.Доступность = ЭтоОтбор;
Элементы.Отборы_ПереместитьВниз.Доступность = ЭтоОтбор;
Элементы.Отборы_ПереместитьВниз1.Доступность = ЭтоОтбор;
Элементы.КомандыОтборов_Показывать.Доступность = Не ЭтоРаздел;
Элементы.КомандыОтборов_Показывать1.Доступность = Не ЭтоРаздел;
Элементы.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета.Доступность = ЭтоОтбор;
Элементы.Отборы_ПоказыватьТолькоФлажокВШапкеОтчета1.Доступность = ЭтоОтбор;
Элементы.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета.Доступность = ЭтоОтбор;
Элементы.Отборы_ПоказыватьТолькоФлажокВНастройкахОтчета1.Доступность = ЭтоОтбор;
КонецПроцедуры
&НаКлиенте
Процедура ОтборыУстановитьРежимОтображения(РежимОтображения)
ИдентификаторСтрок = Элементы.Отборы.ВыделенныеСтроки;
Если ИдентификаторСтрок.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойстваЭлементовНастроек = Новый Массив;
КоличествоПараметров = 0;
Для Каждого ИдентификаторСтроки Из ИдентификаторСтрок Цикл
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если Строка.ЭтоРаздел Тогда
Продолжить;
КонецЕсли;
Если Строка.ЭтоПараметр Тогда
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "ПараметрыДанных");
КоличествоПараметров = КоличествоПараметров + 1;
Иначе
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
КонецЕсли;
ЭлементНастроек = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор);
СвойстваЭлементаНастроек = Новый Структура;
СвойстваЭлементаНастроек.Вставить("ИдентификаторСтроки", ИдентификаторСтроки);
СвойстваЭлементаНастроек.Вставить("ИдентификаторЭлементаНастроек", Строка.Идентификатор);
СвойстваЭлементаНастроек.Вставить("ЭлементНастроек", ЭлементНастроек);
СвойстваЭлементовНастроек.Добавить(СвойстваЭлементаНастроек);
КонецЦикла;
ПоказыватьРежимыФлажков = (КоличествоПараметров = СвойстваЭлементовНастроек.Количество());
ВыбратьРежимОтображенияДляСтрок(СвойстваЭлементовНастроек, "Отборы", ПоказыватьРежимыФлажков, РежимОтображения);
КонецПроцедуры
&НаКлиенте
Процедура Список_ПриНачалеИзменения()
ПутьКСписку = Список_ПередНачаломИзменения.Имя;
ЭлементСписка = Элементы[Список_ПередНачаломИзменения.Имя + "Значение"];
ПараметрыЗаполнения = ПараметрыЗаполненияСписка(Истина, Ложь, Ложь);
ПараметрыЗаполнения.ПутьКСписку = ПутьКСписку;
ПараметрыЗаполнения.Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
ВыборПереопределен = Ложь;
НачатьЗаполнениеСписка(ЭлементСписка, ПараметрыЗаполнения, ВыборПереопределен);
Если ВыборПереопределен Тогда
Список_ПередНачаломИзменения.ЗакончитьРедактированиеСтроки(Ложь);
Возврат;
КонецЕсли;
ЭлементСписка.РедактированиеТекста = Истина;
КонецПроцедуры
&НаКлиенте
Функция ПараметрыГруппировкиОтборов()
Строки = Новый Массив;
Родители = Новый Массив;
ИдентификаторыСтрок = Элементы.Отборы.ВыделенныеСтроки;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Строки.Добавить(Строка);
Родители.Добавить(Родитель);
КонецЦикла;
Если Строки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'"));
Возврат Неопределено;
КонецЕсли;
Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители);
Если Родители.Количество() > 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'"));
Возврат Неопределено;
КонецЕсли;
Строки = МассивСортировать(Строки);
Родитель = Родители[0];
ДочерниеЭлементы = Родитель.ПолучитьЭлементы();
Индекс = ДочерниеЭлементы.Индекс(Строки[0]);
Возврат Новый Структура("Строки, Родитель, Индекс", Строки, Родитель, Индекс);
КонецФункции
&НаКлиенте
Процедура ИзменитьГруппировкуОтборов(ОтборыУзлаНастроек, Строки, НаследникиЭлементовНастроек, НаследникиСтрок)
Для Каждого СтрокаИсточник Из Строки Цикл
ЭлементНастройкиИсточник = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
Если ЭлементНастройкиИсточник.Родитель = Неопределено Тогда
РодительЭлементаНастройкиИсточника = ОтборыУзлаНастроек;
Иначе
РодительЭлементаНастройкиИсточника = ЭлементНастройкиИсточник.Родитель;
КонецЕсли;
РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника);
РодительСтрокиИсточника = СтрокаИсточник.ПолучитьРодителя();
РодительСтрокиПриемника = НаследникиСтрок.Получить(РодительСтрокиИсточника);
Индекс = РодительЭлементаНастройкиПриемника.Элементы.Индекс(РодительЭлементаНастройкиИсточника);
Если Индекс < 0 Тогда
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Добавить();
Иначе
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Вставить(Индекс);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник);
СтрокаПриемник.Идентификатор = ОтборыУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
ИзменитьГруппировкуОтборов(ОтборыУзлаНастроек, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьБазовыеЭлементыГруппировкиОтборов(ОтборыУзлаНастроек, ПараметрыГруппировки)
Родитель = ПараметрыГруппировки.Родитель;
Строки = Родитель.ПолучитьЭлементы();
ЭлементыНастроек = ОтборыУзлаНастроек.Элементы;
Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементыНастроек = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор).Элементы;
КонецЕсли;
Индекс = ПараметрыГруппировки.Строки.ВГраница();
Пока Индекс >= 0 Цикл
Строка = ПараметрыГруппировки.Строки[Индекс];
ЭлементНастройки = ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор);
Строки.Удалить(Строка);
ЭлементыНастроек.Удалить(ЭлементНастройки);
Индекс = Индекс - 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПеретаскиваемыеСтрокиИзОтборов(ИдентификаторыСтрок)
Родители = Новый Массив;
Индекс = ИдентификаторыСтрок.ВГраница();
Пока Индекс >= 0 Цикл
ИдентификаторСтроки = ИдентификаторыСтрок[Индекс];
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено
Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных")
Или Родитель.Идентификатор = "ПараметрыДанных" Тогда
ИдентификаторыСтрок.Удалить(Индекс);
Иначе
Родители.Добавить(Родитель);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители);
Если Родители.Количество() > 1 Тогда
ИдентификаторыСтрок.Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПеретащитьОтборыВПределахКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока)
ТекущиеДанные = Отборы.НайтиПоИдентификатору(ТекущаяСтрока);
Строки = Новый Массив;
Для Каждого ИдентификаторСтроки Из ПараметрыПеретаскивания.Значение Цикл
Строки.Добавить(Отборы.НайтиПоИдентификатору(ИдентификаторСтроки));
КонецЦикла;
СтрокаИсточник = Строки[0].ПолучитьРодителя();
Если ТекущиеДанные.ЭтоРаздел Или ТекущиеДанные.ЭтоГруппа Тогда
СтрокаПриемник = ТекущиеДанные;
Иначе
СтрокаПриемник = ТекущиеДанные.ПолучитьРодителя();
КонецЕсли;
Индекс = СтрокаПриемник.ПолучитьЭлементы().Индекс(ТекущиеДанные);
Если Индекс < 0 Тогда
Индекс = 0;
КонецЕсли;
НаследникиСтрок = Новый Соответствие;
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры;
Если ТипЗнч(СтрокаИсточник.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
КонецЕсли;
ЭлементНастройкиПриемник = СвойствоЭлементаСтруктуры;
Если ТипЗнч(СтрокаПриемник.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементНастройкиПриемник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаПриемник.Идентификатор);
КонецЕсли;
НаследникиЭлементовНастроек = Новый Соответствие;
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
ПеретащитьОтборы(СвойствоЭлементаСтруктуры, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок);
Раздел = КорневаяСтрокаПоУмолчанию("Отборы");
Элементы.Отборы.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ПеретащитьОтборы(ВыбранныеПоляУзлаНастроек, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок)
Для Каждого СтрокаИсточник Из Строки Цикл
ЭлементНастройкиИсточник = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
РодительЭлементаНастройкиИсточник = ВыбранныеПоляУзлаНастроек;
Если ЭлементНастройкиИсточник.Родитель <> Неопределено Тогда
РодительЭлементаНастройкиИсточник = ЭлементНастройкиИсточник.Родитель;
КонецЕсли;
РодительЭлементаНастройкиПриемник = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточник);
РодительСтрокиПриемник = НаследникиСтрок.Получить(СтрокаИсточник.ПолучитьРодителя());
Если Индекс > РодительЭлементаНастройкиПриемник.Элементы.Количество() - 1 Тогда
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемник.ПолучитьЭлементы().Добавить();
Иначе
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемник.ПолучитьЭлементы().Вставить(Индекс);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник);
СтрокаПриемник.Идентификатор = ВыбранныеПоляУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.ЭтоГруппа = (ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
Если ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
ПеретащитьОтборы(ВыбранныеПоляУзлаНастроек, Индекс, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок)
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьОтборы(ВНачало = Истина)
ПараметрыСдвига = ПараметрыСдвигаОтборов();
Если ПараметрыСдвига = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
Для Каждого СтрокаСписка Из ПараметрыСдвига.Строки Цикл
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, СтрокаСписка);
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
Если ЭлементНастройки.Родитель <> Неопределено Тогда
ЭлементыНастроек = ЭлементНастройки.Родитель.Элементы;
КонецЕсли;
Строки = ПараметрыСдвига.Родитель.ПолучитьЭлементы();
Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки);
Граница = ЭлементыНастроек.Количество() - 1;
Если ВНачало Тогда
Если Индекс = 0 Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница);
Строки.Сдвинуть(Индекс, Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1);
Строки.Сдвинуть(Индекс, -1);
КонецЕсли;
Иначе
Если Индекс = Граница Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница);
Строки.Сдвинуть(Индекс, -Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1);
Строки.Сдвинуть(Индекс, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Функция ПараметрыСдвигаОтборов()
Строки = Новый Массив;
Родители = Новый Массив;
ИдентификаторыСтрок = Элементы.Отборы.ВыделенныеСтроки;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Строки.Добавить(Строка);
Родители.Добавить(Родитель);
КонецЦикла;
Если Строки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'"));
Возврат Неопределено;
КонецЕсли;
Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители);
Если Родители.Количество() > 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'"));
Возврат Неопределено;
КонецЕсли;
Возврат Новый Структура("Строки, Родитель", МассивСортировать(Строки), Родители[0]);
КонецФункции
#КонецОбласти
#Область ВыбранныеПоля
&НаСервере
Процедура ОбновитьВыбранныеПоля(Строки = Неопределено, ЭлементыНастроек = Неопределено)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Возврат;
КонецЕсли;
Если Строки = Неопределено Тогда
Раздел = ВыбранныеПоля.ПолучитьЭлементы().Добавить();
Раздел.ЭтоРаздел = Истина;
Раздел.Заголовок = НСтр("ru = 'Поля'");
Раздел.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(Неопределено);
Раздел.Идентификатор = "ВыбранныеПоля";
Строки = Раздел.ПолучитьЭлементы();
КонецЕсли;
Если ЭлементыНастроек = Неопределено Тогда
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
КонецЕсли;
Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл
Строка = Строки.Добавить();
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Если ТипЗнч(ЭлементНастройки) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда
Строка.Заголовок = НСтр("ru = 'Авто (поля родителя)'");
Строка.Картинка = 18;
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементНастройки) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
Строка.ЭтоГруппа = Истина;
Строка.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(Неопределено, Истина);
Строка.Заголовок = ЗаголовокГруппыВыбранныхПолей(ЭлементНастройки, СвойствоЭлементаСтруктуры);
ОбновитьВыбранныеПоля(Строка.ПолучитьЭлементы(), ЭлементНастройки.Элементы);
Иначе
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляВыбора.НайтиПоле(ЭлементНастройки.Поле);
Если ОписаниеНастройки = Неопределено Тогда
УстановитьПометкуУдаления("ВыбранныеПоля", Строка);
Иначе
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
Строка.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(ОписаниеНастройки.ТипЗначения);
УстановитьИндикаторФормулы(Отчет.КомпоновщикНастроек.Настройки, ОписаниеНастройки, Строка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляВыбратьГруппу(ИдентификаторСтроки, Строка)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗаголовокГруппы", Строка.Заголовок);
ПараметрыФормы.Вставить("Расположение", ЭлементНастройки.Расположение);
Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораГруппы", ЭтотОбъект, ИдентификаторСтроки);
ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей",
ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПослеВыбораГруппы(СвойстваГруппы, ИдентификаторСтроки) Экспорт
Если ТипЗнч(СвойстваГруппы) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.Заголовок = СвойстваГруппы.ЗаголовокГруппы;
ЭлементНастройки.Расположение = СвойстваГруппы.Расположение;
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Если ЭлементНастройки.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда
Строка.Заголовок = Строка.Заголовок + " (" + Строка(ЭлементНастройки.Расположение) + ")";
КонецЕсли;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляВыбратьПоле(ИдентификаторСтроки, Строка)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки);
ВыбратьПоле("ВыбранныеПоля", Обработчик, ЭлементНастройки.Поле);
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки = Неопределено) Экспорт
Если ОписаниеНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ВариантыОтчетовСлужебныйКлиент.ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляВыбора, ОписаниеНастройки);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Если ИдентификаторСтроки = Неопределено Тогда
Родитель = Элементы.ВыбранныеПоля.ТекущиеДанные;
Если Родитель = Неопределено Тогда
Родитель = КорневаяСтрокаПоУмолчанию("ВыбранныеПоля");
КонецЕсли;
Если Не Родитель.ЭтоРаздел И Не Родитель.ЭтоГруппа Тогда
Родитель = Родитель.ПолучитьРодителя();
КонецЕсли;
Строка = Родитель.ПолучитьЭлементы().Добавить();
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры;
Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор);
КонецЕсли;
ЭлементНастройки = РодительЭлементаНастройки.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Иначе
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
КонецЕсли;
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.Поле = ОписаниеНастройки.Поле;
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Строка.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(ОписаниеНастройки.ТипЗначения);
УстановитьИндикаторФормулы(Настройки, ОписаниеНастройки, Строка);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьИндикаторФормулы(Настройки, ОписаниеНастройки, Строка)
Формула = ВариантыОтчетовСлужебныйКлиентСервер.ФормулаПоПутиКДанным(Настройки, Строка(ОписаниеНастройки.Поле));
Строка.ЭтоФормула = (Формула <> Неопределено);
Если Строка.ЭтоФормула Тогда
Строка.ИндикаторФормулы = БиблиотекаКартинок.ТипФункция;
Иначе
Строка.ИндикаторФормулы = БиблиотекаКартинок.Пустая;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеАктивизацииВыбранныхПолей()
Строка = Элементы.ВыбранныеПоля.ТекущиеДанные;
Элементы.ВыбранныеПоляИзменитьФормулу.Доступность = Строка <> Неопределено
И Строка.ЭтоФормула;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПоляПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Копирование Тогда
СкопироватьНастройки(Элемент);
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект);
ВыбратьПоле("ВыбранныеПоля", Обработчик);
КонецПроцедуры
&НаКлиенте
Функция ПараметрыГруппировкиВыбранныхПолей()
Строки = Новый Массив;
Родители = Новый Массив;
ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Строки.Добавить(Строка);
Родители.Добавить(Родитель);
КонецЦикла;
Если Строки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'"));
Возврат Неопределено;
КонецЕсли;
Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители);
Если Родители.Количество() > 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'"));
Возврат Неопределено;
КонецЕсли;
Строки = МассивСортировать(Строки);
Родитель = Родители[0];
Индекс = Родитель.ПолучитьЭлементы().Индекс(Строки[0]);
Возврат Новый Структура("Строки, Родитель, Индекс", Строки, Родитель, Индекс);
КонецФункции
&НаКлиенте
Процедура ВыбранныеПоляПередГруппировкойПолей(СвойстваГруппы, ПараметрыГруппировки) Экспорт
Если ТипЗнч(СвойстваГруппы) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры;
Если ТипЗнч(ПараметрыГруппировки.Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(ПараметрыГруппировки.Родитель.Идентификатор);
КонецЕсли;
ЭлементНастройкиПриемник = ЭлементНастройкиИсточник.Элементы.Вставить(ПараметрыГруппировки.Индекс, Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
ЭлементНастройкиПриемник.Заголовок = СвойстваГруппы.ЗаголовокГруппы;
ЭлементНастройкиПриемник.Расположение = СвойстваГруппы.Расположение;
НаследникиЭлементовНастроек = Новый Соответствие;
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
СтрокаИсточник = ПараметрыГруппировки.Родитель;
СтрокаПриемник = СтрокаИсточник.ПолучитьЭлементы().Вставить(ПараметрыГруппировки.Индекс);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник);
СтрокаПриемник.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.ЭтоГруппа = Истина;
СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа");
СтрокаПриемник.Заголовок = ЗаголовокГруппыВыбранныхПолей(ЭлементНастройкиПриемник);
НаследникиСтрок = Новый Соответствие;
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
ИзменитьГруппировкуВыбранныхПолей(СвойствоЭлементаСтруктуры, ПараметрыГруппировки.Строки, НаследникиЭлементовНастроек, НаследникиСтрок);
УдалитьБазовыеЭлементыГруппировкиВыбранныхПолей(СвойствоЭлементаСтруктуры, ПараметрыГруппировки);
Раздел = ВыбранныеПоля.ПолучитьЭлементы()[0];
Элементы.ВыбранныеПоля.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
Элементы.ВыбранныеПоля.ТекущаяСтрока = СтрокаПриемник.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьГруппировкуВыбранныхПолей(ВыбранныеПоляУзлаНастроек, Строки, НаследникиЭлементовНастроек, НаследникиСтрок)
Для Каждого СтрокаИсточник Из Строки Цикл
ЭлементНастройкиИсточник = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
Если ЭлементНастройкиИсточник.Родитель = Неопределено Тогда
РодительЭлементаНастройкиИсточника = ВыбранныеПоляУзлаНастроек;
Иначе
РодительЭлементаНастройкиИсточника = ЭлементНастройкиИсточник.Родитель;
КонецЕсли;
РодительЭлементаНастройкиПриемника = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточника);
РодительСтрокиИсточника = СтрокаИсточник.ПолучитьРодителя();
РодительСтрокиПриемника = НаследникиСтрок.Получить(РодительСтрокиИсточника);
Индекс = РодительЭлементаНастройкиПриемника.Элементы.Индекс(РодительЭлементаНастройкиИсточника);
Если Индекс < 0 Тогда
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Добавить();
Иначе
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемника.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемника.ПолучитьЭлементы().Вставить(Индекс);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник);
СтрокаПриемник.Идентификатор = ВыбранныеПоляУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.ЭтоГруппа = (ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
ИзменитьГруппировкуВыбранныхПолей(ВыбранныеПоляУзлаНастроек, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьБазовыеЭлементыГруппировкиВыбранныхПолей(ВыбранныеПоляУзлаНастроек, ПараметрыГруппировки)
Строки = ПараметрыГруппировки.Родитель.ПолучитьЭлементы();
ЭлементыНастроек = ВыбранныеПоляУзлаНастроек.Элементы;
Родитель = ПараметрыГруппировки.Родитель;
Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементыНастроек = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор).Элементы;
КонецЕсли;
Индекс = ПараметрыГруппировки.Строки.ВГраница();
Пока Индекс >= 0 Цикл
Строка = ПараметрыГруппировки.Строки[Индекс];
ЭлементНастройки = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор);
Строки.Удалить(Строка);
ЭлементыНастроек.Удалить(ЭлементНастройки);
Индекс = Индекс - 1;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЗаголовокГруппыВыбранныхПолей(ЭлементНастройки, СвойствоЭлементаСтруктуры = Неопределено)
ЗаголовокГруппы = ЭлементНастройки.Заголовок;
Если Не ЗначениеЗаполнено(ЗаголовокГруппы) И СвойствоЭлементаСтруктуры <> Неопределено
И ЭлементНастройки.Поле <> Неопределено Тогда
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляВыбора.НайтиПоле(ЭлементНастройки.Поле);
Если ОписаниеНастройки <> Неопределено Тогда
ЗаголовокГруппы = ОписаниеНастройки.Заголовок;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ЗаголовокГруппы) Тогда
ЗаголовокГруппы = "(" + ЭлементНастройки.Расположение + ")";
ИначеЕсли ЭлементНастройки.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда
ЗаголовокГруппы = ЗаголовокГруппы + " (" + ЭлементНастройки.Расположение + ")";
КонецЕсли;
Возврат ЗаголовокГруппы;
КонецФункции
&НаКлиенте
Процедура ПроверитьПеретаскиваемыеСтрокиИзВыбранныхПолей(ИдентификаторыСтрок)
Родители = Новый Массив;
Индекс = ИдентификаторыСтрок.ВГраница();
Пока Индекс >= 0 Цикл
ИдентификаторСтроки = ИдентификаторыСтрок[Индекс];
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено
Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
ИдентификаторыСтрок.Удалить(Индекс);
Иначе
Родители.Добавить(Родитель);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители);
Если Родители.Количество() > 1 Тогда
ИдентификаторыСтрок.Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПеретащитьВыбранныеПоляВПределахКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока)
ТекущиеДанные = ВыбранныеПоля.НайтиПоИдентификатору(ТекущаяСтрока);
Строки = Новый Массив;
Для Каждого ИдентификаторСтроки Из ПараметрыПеретаскивания.Значение Цикл
Строки.Добавить(ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки));
КонецЦикла;
СтрокаИсточник = Строки[0].ПолучитьРодителя();
Если ТекущиеДанные.ЭтоРаздел Или ТекущиеДанные.ЭтоГруппа Тогда
СтрокаПриемник = ТекущиеДанные;
Иначе
СтрокаПриемник = ТекущиеДанные.ПолучитьРодителя();
КонецЕсли;
Индекс = СтрокаПриемник.ПолучитьЭлементы().Индекс(ТекущиеДанные);
Если Индекс < 0 Тогда
Индекс = 0;
КонецЕсли;
НаследникиСтрок = Новый Соответствие;
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры;
Если ТипЗнч(СтрокаИсточник.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементНастройкиИсточник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
КонецЕсли;
ЭлементНастройкиПриемник = СвойствоЭлементаСтруктуры;
Если ТипЗнч(СтрокаПриемник.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементНастройкиПриемник = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаПриемник.Идентификатор);
КонецЕсли;
НаследникиЭлементовНастроек = Новый Соответствие;
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
ПеретащитьВыбранныеПоля(СвойствоЭлементаСтруктуры, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок);
Элементы.ВыбранныеПоля.Развернуть(ВыбранныеПоля.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ПеретащитьВыбранныеПоля(ВыбранныеПоляУзлаНастроек, Индекс, Строки, НаследникиЭлементовНастроек, НаследникиСтрок)
Для Каждого СтрокаИсточник Из Строки Цикл
ЭлементНастройкиИсточник = ВыбранныеПоляУзлаНастроек.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
РодительЭлементаНастройкиИсточник = ВыбранныеПоляУзлаНастроек;
Если ЭлементНастройкиИсточник.Родитель <> Неопределено Тогда
РодительЭлементаНастройкиИсточник = ЭлементНастройкиИсточник.Родитель;
КонецЕсли;
РодительЭлементаНастройкиПриемник = НаследникиЭлементовНастроек.Получить(РодительЭлементаНастройкиИсточник);
РодительСтрокиПриемник = НаследникиСтрок.Получить(СтрокаИсточник.ПолучитьРодителя());
Если Индекс > РодительЭлементаНастройкиПриемник.Элементы.Количество() - 1 Тогда
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Добавить(ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемник.ПолучитьЭлементы().Добавить();
Иначе
ЭлементНастройкиПриемник = РодительЭлементаНастройкиПриемник.Элементы.Вставить(Индекс, ТипЗнч(ЭлементНастройкиИсточник));
СтрокаПриемник = РодительСтрокиПриемник.ПолучитьЭлементы().Вставить(Индекс);
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник);
СтрокаПриемник.Идентификатор = ВыбранныеПоляУзлаНастроек.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент");
СтрокаПриемник.ЭтоГруппа = (ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
НаследникиЭлементовНастроек.Вставить(ЭлементНастройкиИсточник, ЭлементНастройкиПриемник);
НаследникиСтрок.Вставить(СтрокаИсточник, СтрокаПриемник);
Если ТипЗнч(ЭлементНастройкиПриемник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Группа");
ПеретащитьВыбранныеПоля(ВыбранныеПоляУзлаНастроек, Индекс, СтрокаИсточник.ПолучитьЭлементы(), НаследникиЭлементовНастроек, НаследникиСтрок)
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьВыбранныеПоля(ВНачало = Истина)
ПараметрыСдвига = ПараметрыСдвигаВыбранныхПолей();
Если ПараметрыСдвига = Неопределено Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Для Каждого СтрокаСписка Из ПараметрыСдвига.Строки Цикл
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, СтрокаСписка);
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
Если ЭлементНастройки.Родитель <> Неопределено Тогда
ЭлементыНастроек = ЭлементНастройки.Родитель.Элементы;
КонецЕсли;
Строки = ПараметрыСдвига.Родитель.ПолучитьЭлементы();
Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки);
Граница = ЭлементыНастроек.Количество() - 1;
Если ВНачало Тогда
Если Индекс = 0 Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница);
Строки.Сдвинуть(Индекс, Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1);
Строки.Сдвинуть(Индекс, -1);
КонецЕсли;
Иначе
Если Индекс = Граница Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница);
Строки.Сдвинуть(Индекс, -Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1);
Строки.Сдвинуть(Индекс, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Функция ПараметрыСдвигаВыбранныхПолей()
Строки = Новый Массив;
Родители = Новый Массив;
ИдентификаторыСтрок = Элементы.ВыбранныеПоля.ВыделенныеСтроки;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Строки.Добавить(Строка);
Родители.Добавить(Родитель);
КонецЦикла;
Если Строки.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите элементы.'"));
Возврат Неопределено;
КонецЕсли;
Родители = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Родители);
Если Родители.Количество() > 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'"));
Возврат Неопределено;
КонецЕсли;
Возврат Новый Структура("Строки, Родитель", МассивСортировать(Строки), Родители[0]);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки = Неопределено)
ИмяПоляЗначения = ?(Строка.ЭтоПараметр, "Значение", "ПравоеЗначение");
ТекущееЗначение = Строка[ИмяПоляЗначения];
Если Строка.ДоступенСписокЗначений
Или ОтчетыКлиентСервер.ЭтоВидСравненияСписка(Строка.ВидСравнения) Тогда
Если ТипЗнч(ТекущееЗначение) = Тип("СтандартнаяДатаНачала") Тогда
ТекущееЗначение = ТекущееЗначение.Дата;
КонецЕсли;
Значение = ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение);
Значение.ЗаполнитьПометки(Истина);
Если Строка.ДоступныеЗначения <> Неопределено Тогда
Для Каждого ЭлементСписка Из Значение Цикл
НайденныйЭлемент = Строка.ДоступныеЗначения.НайтиПоЗначению(ЭлементСписка.Значение);
Если НайденныйЭлемент <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ЭлементСписка, НайденныйЭлемент,, "Пометка");
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
Значение = Неопределено;
Если ТипЗнч(ТекущееЗначение) <> Тип("СписокЗначений") Тогда
Значение = ТекущееЗначение;
ИначеЕсли ТекущееЗначение.Количество() > 0 Тогда
Значение = ТекущееЗначение[0].Значение;
КонецЕсли;
КонецЕсли;
Строка[ИмяПоляЗначения] = Значение;
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
Или ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЭлементНастройки[ИмяПоляЗначения] = Значение;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредставлениеЗначения(Строка, ДоступныеПоляОтбора)
Строка.ПредставлениеЗначения = "";
ДоступныеЗначения = Строка.ДоступныеЗначения;
Значение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение);
Если ДоступныеЗначения = Неопределено Тогда
Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда
ДоступноеПоле = ДоступныеПоляОтбора.НайтиПоле(Значение);
Если ДоступноеПоле <> Неопределено Тогда
Строка.ПредставлениеЗначения = ДоступноеПоле.Заголовок;
КонецЕсли;
КонецЕсли;
Возврат;
КонецЕсли;
НайденныйЭлемент = ДоступныеЗначения.НайтиПоЗначению(Значение);
Если НайденныйЭлемент <> Неопределено Тогда
Строка.ПредставлениеЗначения = НайденныйЭлемент.Представление;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПараметрыРедактирования(Строка)
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
Если Строка.ЭтоПараметр Тогда
ПолеЗначения = Элементы.ОтборыЗначение;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(КомпоновщикНастроек, "ПараметрыДанных");
Иначе
ПолеЗначения = Элементы.ОтборыПравоеЗначение;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
КомпоновщикНастроек, "Отбор", ИдентификаторЭлементаСтруктурыНастроек);
КонецЕсли;
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ТекущиеНастройки = ЭлементСтруктурыНастроек(КомпоновщикНастроек.Настройки, ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ОписаниеЭлементаНастройки = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(ТекущиеНастройки, ЭлементНастройки);
ПолеЗначения.ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(ТекущиеНастройки, ПользовательскиеНастройки, ЭлементНастройки, РасширенныйРежим = 1);
Строка.ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу(
ТекущиеНастройки, ПользовательскиеНастройки, ЭлементНастройки, ОписаниеЭлементаНастройки);
ПолеЗначения.ДоступныеТипы = Строка.ТипЗначения;
КонецПроцедуры
&НаКлиенте
Функция ВыборПереопределен(Строка, СтандартнаяОбработка)
Если Строка.ЭтоПараметр Тогда
ПолеЗначения = Элементы.ОтборыЗначение;
ТекущееЗначение = Строка.Значение;
Иначе
ПолеЗначения = Элементы.ОтборыПравоеЗначение;
ТекущееЗначение = Строка.ПравоеЗначение;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, Строка.ПолучитьИдентификатор());
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек("Отборы", Строка);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Описание = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(Отчет.КомпоновщикНастроек.Настройки, ЭлементНастройки);
Если ОтчетыКлиент.ВыборПереопределен(ЭтотОбъект, Обработчик, Описание, Строка.ТипЗначения,
ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение), ПолеЗначения.ПараметрыВыбора) Тогда
СтандартнаяОбработка = Ложь;
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура ПоказатьСписокВыбора(Строка, СтандартнаяОбработка, Элемент)
СтандартнаяОбработка = Ложь;
Если Строка.ЭтоПараметр Тогда
ПолеЗначения = Элементы.ОтборыЗначение;
ТекущееЗначение = Строка.Значение;
Иначе
ПолеЗначения = Элементы.ОтборыПравоеЗначение;
ТекущееЗначение = Строка.ПравоеЗначение;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ЗавершитьВыборИзСписка", ЭтотОбъект, Строка.ПолучитьИдентификатор());
ДоступныеТипы = ДоступныеТипыДляВыбора(Строка.ТипЗначения);
Если ОтчетыКлиент.ЭтоВыборОбъектовМетаданных(ДоступныеТипы, ТекущееЗначение, Обработчик) Тогда
Возврат;
КонецЕсли;
ЗначенияДляВыбора = ЗначенияДляВыбора(Строка);
ОграничиватьВыборУказаннымиЗначениями = Строка.ДоступныеЗначения <> Неопределено;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение));
ПараметрыОткрытия.Вставить("ОписаниеТипов", Строка.ТипЗначения);
ПараметрыОткрытия.Вставить("ЗначенияДляВыбора", ЗначенияДляВыбора);
ПараметрыОткрытия.Вставить("ЗначенияДляВыбораЗаполнены", ЗначенияДляВыбора.Количество() > 0);
ПараметрыОткрытия.Вставить("ОграничиватьВыборУказаннымиЗначениями", ОграничиватьВыборУказаннымиЗначениями);
ПараметрыОткрытия.Вставить("Представление", Строка.ПредставлениеПользовательскойНастройки);
ПараметрыОткрытия.Вставить("ПараметрыВыбора", Новый Массив(ПолеЗначения.ПараметрыВыбора));
ПараметрыОткрытия.Вставить("ВыборГруппИЭлементов", ПолеЗначения.ВыборГруппИЭлементов);
Контекст = Новый Структура;
Контекст.Вставить("ПараметрыОткрытия", ПараметрыОткрытия);
Контекст.Вставить("Обработчик", Обработчик);
Если ОграничиватьВыборУказаннымиЗначениями Тогда
ПоказатьСписокВыбораПродолжение(Неопределено, Контекст);
Иначе
ОтчетыКлиент.НачатьВыборПользователей(ЭтотОбъект,
Элемент, ДоступныеТипы, ТекущееЗначение, ПолеЗначения.ПараметрыВыбора, Обработчик,
Новый ОписаниеОповещения("ПоказатьСписокВыбораПродолжение", ЭтотОбъект, Контекст));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСписокВыбораПродолжение(Результат, Контекст) Экспорт
ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками",
Контекст.ПараметрыОткрытия, ЭтотОбъект,,,, Контекст.Обработчик);
КонецПроцедуры
&НаКлиенте
Функция ЗначенияДляВыбора(Строка)
ЗначенияДляВыбора = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(Строка.ДоступныеЗначения);
Если ЗначенияДляВыбора = Неопределено Тогда
ЗначенияДляВыбора = Новый СписокЗначений;
КонецЕсли;
ЗначенияДляВыбора.ТипЗначения = Строка.ТипЗначения;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, ?(Строка.ЭтоПараметр, "ПараметрыДанных", "Отбор"));
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Если ЭлементНастройки = Неопределено Тогда
Возврат ЗначенияДляВыбора;
КонецЕсли;
ЗначениеОтбора = ОтчетыКлиент.КэшЗначенияОтбора(Отчет.КомпоновщикНастроек, ЭлементНастройки);
Если ЗначениеОтбора <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьСписок(ЗначенияДляВыбора, ЗначениеОтбора);
КонецЕсли;
ОтчетыКлиент.ОбновитьПредставленияСписка(ЗначенияДляВыбора, Строка.ДоступныеЗначения);
Возврат ЗначенияДляВыбора;
КонецФункции
&НаСервереБезКонтекста
Функция ДоступныеТипыДляВыбора(Знач ТипЗначения)
Возврат ОтчетыСервер.РасширенноеОписаниеТипов(ТипЗначения, Истина).ОписаниеТиповДляФормы;
КонецФункции
&НаКлиенте
Процедура ЗавершитьВыборИзСписка(Список, ИдентификаторСтроки) Экспорт
Если ТипЗнч(Список) = Тип("Массив") Тогда
ВыбранныеЗначения = Список;
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(ВыбранныеЗначения);
Список.ЗаполнитьПометки(Истина);
ИначеЕсли ТипЗнч(Список) <> Тип("СписокЗначений") Тогда
Возврат;
КонецЕсли;
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
ВыбранныеЗначения = Новый СписокЗначений;
Для Каждого ЭлементСписка Из Список Цикл
Если ЭлементСписка.Пометка Тогда
ЗаполнитьЗначенияСвойств(ВыбранныеЗначения.Добавить(), ЭлементСписка);
КонецЕсли;
КонецЦикла;
ИмяПоляЗначения = ?(Строка.ЭтоПараметр, "Значение", "ПравоеЗначение");
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек("Отборы", Строка);
Строка[ИмяПоляЗначения] = ВыбранныеЗначения;
Строка.Использование = Истина;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, " + ИмяПоляЗначения);
ОтчетыКлиент.КэшироватьЗначениеОтбора(КомпоновщикНастроек, ЭлементНастройки, Список);
УстановитьМодифицированность();
КонецПроцедуры
#КонецОбласти
#Область Порядок
&НаСервере
Процедура ОбновитьСортировку()
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Возврат;
КонецЕсли;
Раздел = Сортировка.ПолучитьЭлементы().Добавить();
Раздел.ЭтоРаздел = Истина;
Раздел.Заголовок = НСтр("ru = 'Сортировки'");
Раздел.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(Неопределено);
Строки = Раздел.ПолучитьЭлементы();
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл
Строка = Строки.Добавить();
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Если ТипЗнч(ЭлементНастройки) = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда
Строка.Заголовок = НСтр("ru = 'Авто (сортировки родителя)'");
Строка.ЭтоАвтоПоле = Истина;
Строка.Картинка = 18;
Продолжить;
КонецЕсли;
ОписаниеНастройки = СвойствоЭлементаСтруктуры.ДоступныеПоляПорядка.НайтиПоле(ЭлементНастройки.Поле);
Если ОписаниеНастройки = Неопределено Тогда
УстановитьПометкуУдаления("Сортировка", Строка);
Иначе
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
Строка.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(ОписаниеНастройки.ТипЗначения);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СортировкаВыбратьПоле(ИдентификаторСтроки, Строка)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Обработчик = Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект, ИдентификаторСтроки);
ВыбратьПоле("Сортировка", Обработчик, ЭлементНастройки.Поле);
КонецПроцедуры
&НаКлиенте
Процедура СортировкаПослеВыбораПоля(ОписаниеНастройки, ИдентификаторСтроки = Неопределено) Экспорт
Если ОписаниеНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ВариантыОтчетовСлужебныйКлиент.ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляПорядка, ОписаниеНастройки);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Если ИдентификаторСтроки = Неопределено Тогда
Родитель = Элементы.Сортировка.ТекущиеДанные;
Если Родитель = Неопределено Тогда
Родитель = КорневаяСтрокаПоУмолчанию("Сортировка");
КонецЕсли;
Если Не Родитель.ЭтоРаздел Тогда
Родитель = Родитель.ПолучитьРодителя();
КонецЕсли;
Строка = Родитель.ПолучитьЭлементы().Добавить();
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры;
Если ТипЗнч(Родитель.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
РодительЭлементаНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Родитель.Идентификатор);
КонецЕсли;
ЭлементНастройки = РодительЭлементаНастройки.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
Иначе
Строка = Сортировка.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
КонецЕсли;
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.Поле = ОписаниеНастройки.Поле;
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
ЗаполнитьЗначенияСвойств(Строка, ОписаниеНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент");
Элементы.Сортировка.Развернуть(Сортировка.ПолучитьЭлементы()[0].ПолучитьИдентификатор());
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьТипУпорядочиванияСтрок(ТипУпорядочивания)
ЭлементыКоллекции = Сортировка.ПолучитьЭлементы()[0].ПолучитьЭлементы();
Если ЭлементыКоллекции.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Для Каждого Элемент Из ЭлементыКоллекции Цикл
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Элемент);
ЭлементНастройки.ТипУпорядочивания = ТипУпорядочивания;
Элемент.ТипУпорядочивания = ЭлементНастройки.ТипУпорядочивания;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьТипУпорядочивания(Строка)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Если ЭлементНастройки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда
ЭлементНастройки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
Иначе
ЭлементНастройки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
КонецЕсли;
Строка.ТипУпорядочивания = ЭлементНастройки.ТипУпорядочивания;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ПеретащитьВыбранныеПоляВСортировку(Строки)
ВыбранныеПоляЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
СортировкаЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Раздел = Сортировка.ПолучитьЭлементы()[0];
Для Каждого СтрокаИсточник Из Строки Цикл
ЭлементНастройкиИсточник = ВыбранныеПоляЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
Если ТипЗнч(ЭлементНастройкиИсточник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
ПеретащитьВыбранныеПоляВСортировку(СтрокаИсточник.ПолучитьЭлементы());
ИначеЕсли ТипЗнч(ЭлементНастройкиИсточник) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда
Найден = Ложь;
Для Каждого ЭлементНастройкиПриемник Из СортировкаЭлементаСтруктуры.Элементы Цикл
Если ТипЗнч(ЭлементНастройкиПриемник) = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда
Найден = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не Найден Тогда
ЭлементНастройкиПриемник = СортировкаЭлементаСтруктуры.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
ЭлементНастройкиПриемник.Использование = Истина;
СтрокаПриемник = Раздел.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник);
СтрокаПриемник.Идентификатор = СортировкаЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.Картинка = 18;
СтрокаПриемник.Заголовок = НСтр("ru = 'Авто (сортировки родителя)'");
СтрокаПриемник.ЭтоАвтоПоле = Истина;
КонецЕсли;
Иначе
Если НайтиПолеПорядка(СортировкаЭлементаСтруктуры, ЭлементНастройкиИсточник.Поле) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОписаниеНастройки = СортировкаЭлементаСтруктуры.ДоступныеПоляПорядка.НайтиПоле(ЭлементНастройкиИсточник.Поле);
Если ОписаниеНастройки = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементНастройкиПриемник = СортировкаЭлементаСтруктуры.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ЭлементНастройкиПриемник.Использование = Истина;
СтрокаПриемник = Раздел.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ОписаниеНастройки);
СтрокаПриемник.Идентификатор = СортировкаЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.Картинка = ВариантыОтчетовСлужебныйКлиентСервер.ИндексКартинкиПоля(ОписаниеНастройки.ТипЗначения);
КонецЕсли;
КонецЦикла;
Элементы.Сортировка.Развернуть(Раздел.ПолучитьИдентификатор());
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ПеретащитьСортировкуВнутриКоллекции(ПараметрыПеретаскивания, ТекущаяСтрока)
КонецПроцедуры
&НаКлиенте
Функция НайтиПолеПорядка(СортировкаУзлаНастроек, Поле)
Для Каждого ЭлементНастройки Из СортировкаУзлаНастроек.Элементы Цикл
Если ТипЗнч(ЭлементНастройки) <> Тип("АвтоЭлементПорядкаКомпоновкиДанных")
И ЭлементНастройки.Поле = Поле Тогда
Возврат Поле;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаКлиенте
Процедура ПеретащитьПоляСортировкиВВыбранныеПоля(Строки)
ВыбранныеПоляЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
СортировкаЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
РазделВыбранныхПолей = ВыбранныеПоля.ПолучитьЭлементы()[0];
РазделПолейСортировки = Сортировка.ПолучитьЭлементы()[0];
Индекс = Строки.Количество() - 1;
Пока Индекс >= 0 Цикл
СтрокаИсточник = Строки[Индекс];
ЭлементНастройкиИсточник = СортировкаЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(СтрокаИсточник.Идентификатор);
Если ТипЗнч(ЭлементНастройкиИсточник) = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда
Найден = Ложь;
Для Каждого ЭлементНастройкиПриемник Из ВыбранныеПоляЭлементаСтруктуры.Элементы Цикл
Если ТипЗнч(ЭлементНастройкиПриемник) = Тип("АвтоВыбранноеПолеКомпоновкиДанных") Тогда
Найден = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не Найден Тогда
ЭлементНастройкиПриемник = ВыбранныеПоляЭлементаСтруктуры.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
СтрокаПриемник = РазделВыбранныхПолей.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник);
СтрокаПриемник.Идентификатор = ВыбранныеПоляЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.Картинка = 18;
СтрокаПриемник.Заголовок = НСтр("ru = 'Авто (поля родителя)'");
КонецЕсли;
ИначеЕсли НайтиВыбранноеПоле(ВыбранныеПоляЭлементаСтруктуры, ЭлементНастройкиИсточник.Поле) = Неопределено Тогда
ЭлементНастройкиПриемник = ВыбранныеПоляЭлементаСтруктуры.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ОписаниеНастройки = ВыбранныеПоляЭлементаСтруктуры.ДоступныеПоляВыбора.НайтиПоле(ЭлементНастройкиИсточник.Поле);
СтрокаПриемник = РазделВыбранныхПолей.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ОписаниеНастройки);
СтрокаПриемник.Идентификатор = ВыбранныеПоляЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройкиПриемник);
СтрокаПриемник.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент");
КонецЕсли;
СортировкаЭлементаСтруктуры.Элементы.Удалить(ЭлементНастройкиИсточник);
РазделПолейСортировки.ПолучитьЭлементы().Удалить(СтрокаИсточник);
Индекс = Индекс - 1;
КонецЦикла;
Элементы.ВыбранныеПоля.Развернуть(РазделВыбранныхПолей.ПолучитьИдентификатор(), Истина);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Функция НайтиВыбранноеПоле(ВыбранныеПоляУзлаНастроек, Поле)
НайденноеПоле = Неопределено;
Для Каждого ЭлементНастройки Из ВыбранныеПоляУзлаНастроек.Элементы Цикл
Если ТипЗнч(ЭлементНастройки) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
НайденноеПоле = НайтиВыбранноеПоле(ЭлементНастройки, Поле);
ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ВыбранноеПолеКомпоновкиДанных")
И ЭлементНастройки.Поле = Поле Тогда
НайденноеПоле = Поле;
КонецЕсли;
КонецЦикла;
Возврат НайденноеПоле;
КонецФункции
&НаКлиенте
Процедура СдвинутьСортировку(ВНачало = Истина)
ИдентификаторыСтрок = Элементы.Сортировка.ВыделенныеСтроки;
ИдентификаторРаздела = Сортировка.ПолучитьЭлементы()[0].ПолучитьИдентификатор();
ИндексРаздела = ИдентификаторыСтрок.Найти(ИдентификаторРаздела);
Если ИндексРаздела <> Неопределено Тогда
ИдентификаторыСтрок.Удалить(ИндексРаздела);
КонецЕсли;
Если ИдентификаторыСтрок.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = Сортировка.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
Строки = Строка.ПолучитьРодителя().ПолучитьЭлементы();
Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки);
Граница = ЭлементыНастроек.Количество() - 1;
Если ВНачало Тогда
Если Индекс = 0 Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница);
Строки.Сдвинуть(Индекс, Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1);
Строки.Сдвинуть(Индекс, -1);
КонецЕсли;
Иначе
Если Индекс = Граница Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница);
Строки.Сдвинуть(Индекс, -Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1);
Строки.Сдвинуть(Индекс, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
#КонецОбласти
#Область Оформление
&НаСервере
Процедура ОбновитьОформление()
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Возврат;
КонецЕсли;
ПрочитатьПредопределенныеПараметрыОформления();
Строки = Оформление.ПолучитьЭлементы();
Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл
Строка = Строки.Добавить();
ЗаполнитьЗначенияСвойств(Строка, ЭлементНастройки);
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Строка.Картинка = -1;
Если ЭлементОформленияПомеченНаУдаление(ЭлементНастройки.Поля) Тогда
УстановитьПометкуУдаления("Оформление", Строка);
КонецЕсли;
Строка.Представление = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления(
ЭлементНастройки, ЭлементНастройки, ?(Строка.ПометкаУдаления, "ПометкаУдаления", ""));
Если ЗначениеЗаполнено(Строка.ПредставлениеПользовательскойНастройки) Тогда
Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки;
Иначе
Строка.Заголовок = Строка.Представление;
КонецЕсли;
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки);
Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЭлементОформленияПомеченНаУдаление(Поля)
ДоступныеПоля = Поля.ДоступныеПоляОформляемыхПолей;
Для Каждого Элемент Из Поля.Элементы Цикл
Если ДоступныеПоля.НайтиПоле(Элемент.Поле) = Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаСервере
Процедура ПрочитатьПредопределенныеПараметрыОформления()
Если РежимИзмененияЭлементаСтруктурыНастроек Тогда
Возврат;
КонецЕсли;
ПредопределенныеПараметры = ПредопределенныеПараметрыВывода(Отчет.КомпоновщикНастроек.Настройки);
Объект = ПредопределенныеПараметры.TITLE.Объект;
Строка = Оформление.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(Строка, Объект, "Использование, Значение");
Строка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выводить заголовок для печати: %1'"),
?(ЗначениеЗаполнено(Объект.Значение), Объект.Значение, НСтр("ru = '<Отсутствует>'")));
Строка.Представление = НСтр("ru = 'Выводить заголовок для печати'");
Строка.Идентификатор = ПредопределенныеПараметры.TITLE.Идентификатор;
Строка.Картинка = -1;
Строка.КартинкаРежимаОтображения = 4;
Строка.ЭтоПараметрВывода = Истина;
Объект = ПредопределенныеПараметры.DATAPARAMETERSOUTPUT.Объект;
СвязанныйОбъект = ПредопределенныеПараметры.FILTEROUTPUT.Объект;
Строка = Оформление.ПолучитьЭлементы().Добавить();
Строка.Использование = (Объект.Значение <> ТипВыводаТекстаКомпоновкиДанных.НеВыводить
Или СвязанныйОбъект.Значение <> ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
Строка.Заголовок = НСтр("ru = 'Выводить фильтры'");
Строка.Представление = НСтр("ru = 'Выводить фильтры'");
Строка.Идентификатор = ПредопределенныеПараметры.DATAPARAMETERSOUTPUT.Идентификатор;
Строка.Картинка = -1;
Строка.КартинкаРежимаОтображения = 4;
Строка.ЭтоПараметрВывода = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеИзменитьЭлемент(ИдентификаторСтроки = Неопределено, Строка = Неопределено)
Обработчик = Новый ОписаниеОповещения("ОформлениеИзменитьЭлементЗавершение", ЭтотОбъект, ИдентификаторСтроки);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек);
ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек);
Если Строка = Неопределено Тогда
ПараметрыФормы.Вставить("ИдентификаторКД", Неопределено);
ПараметрыФормы.Вставить("Наименование", "");
Иначе
ПараметрыФормы.Вставить("ИдентификаторКД", Строка.Идентификатор);
ПараметрыФормы.Вставить("Наименование", Строка.Заголовок);
КонецЕсли;
ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Элемент условного оформления отчета ""%1""'"), ВариантНаименование));
ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ЭлементУсловногоОформленияОтчета",
ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеИзменитьЭлементЗавершение(Результат, ИдентификаторСтроки) Экспорт
Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Если Результат.Свойство("ОписаниеФормул") Тогда
ВариантыОтчетовСлужебныйКлиент.ДобавитьФормулы(Настройки, Настройки.ДоступныеПоляВыбора, Результат.ОписаниеФормул);
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек);
Раздел = КорневаяСтрокаПоУмолчанию("Оформление");
Если ИдентификаторСтроки = Неопределено Тогда
Если Раздел = Неопределено Тогда
Строка = Оформление.ПолучитьЭлементы().Добавить();
Иначе
Строка = Раздел.ПолучитьЭлементы().Добавить();
КонецЕсли;
ЭлементНастройки = СвойствоЭлементаСтруктуры.Элементы.Добавить();
Иначе
Строка = Оформление.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ЭлементНастройки.Отбор.Элементы.Очистить();
ЭлементНастройки.Поля.Элементы.Очистить();
КонецЕсли;
ОтчетыКлиентСервер.ЗаполнитьСвойстваРекурсивно(СвойствоЭлементаСтруктуры, ЭлементНастройки, Результат.ЭлементКД);
ЭлементНастройки.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
Если Не ЗначениеЗаполнено(ЭлементНастройки.ПредставлениеПользовательскойНастройки) Тогда
ЭлементНастройки.Представление = Результат.Наименование;
КонецЕсли;
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Строка.Использование = ЭлементНастройки.Использование;
Строка.Заголовок = Результат.Наименование;
Если Не ЗначениеЗаполнено(ЭлементНастройки.ПредставлениеПользовательскойНастройки) Тогда
Строка.Представление = Результат.Наименование;
КонецЕсли;
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.Представление);
Если Строка.ЭтоПредопределенныйЗаголовок Тогда
ЭлементНастройки.ПредставлениеПользовательскойНастройки = "";
Иначе
ЭлементНастройки.ПредставлениеПользовательскойНастройки = Строка.Заголовок;
КонецЕсли;
Строка.Картинка = -1;
Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки);
Элементы.Оформление.ТекущаяСтрока = Строка.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СинхронизироватьПредопределенныеПараметрыВывода(Использование, ЭлементНастройки)
ПараметрыВывода = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы;
Значение = ?(Использование, ТипВыводаТекстаКомпоновкиДанных.Авто, ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
Если ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("Заголовок") Тогда
СвязанныйЭлементНастройки = ПараметрыВывода.Найти("TITLEOUTPUT");
СвязанныйЭлементНастройки.Использование = Истина;
СвязанныйЭлементНастройки.Значение = Значение;
ИначеЕсли ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("ВыводитьПараметрыДанных") Тогда
СвязанныйЭлементНастройки = ПараметрыВывода.Найти("FILTEROUTPUT");
ЗаполнитьЗначенияСвойств(СвязанныйЭлементНастройки, ЭлементНастройки, "Использование, Значение");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОформлениеВводЗаголовкаЗавершение(Значение, Идентификатор) Экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
Строка = Оформление.НайтиПоИдентификатору(Идентификатор);
Строка.Использование = Истина;
Строка.Значение = Значение;
Строка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выводить заголовок для печати: %1'"),
?(ЗначениеЗаполнено(Значение), Значение, "<Отсутствует>"));
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ПараметрыВывода = Настройки.ПараметрыВывода;
ЭлементНастройки = ПараметрыВывода.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор);
ЭлементНастройки.Значение = Значение;
ЭлементНастройки.Использование = Истина;
Настройки.ДополнительныеСвойства.Вставить("ЗаголовокУстановленИнтерактивно", ЗначениеЗаполнено(Значение));
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьОформление(ВНачало = Истина)
ИдентификаторыСтрок = Элементы.Оформление.ВыделенныеСтроки;
Строки = Оформление.ПолучитьЭлементы();
ГраницаНачалаЭлементовОформления = 2;
ГраницаИдентификаторовСтрок = ИдентификаторыСтрок.ВГраница();
Пока ГраницаИдентификаторовСтрок >= 0 Цикл
Строка = Оформление.НайтиПоИдентификатору(ИдентификаторыСтрок[ГраницаИдентификаторовСтрок]);
Если Строки.Индекс(Строка) < ГраницаНачалаЭлементовОформления Тогда
ИдентификаторыСтрок.Удалить(ГраницаИдентификаторовСтрок);
КонецЕсли;
ГраницаИдентификаторовСтрок = ГраницаИдентификаторовСтрок - 1;
КонецЦикла;
Если ИдентификаторыСтрок.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, "УсловноеОформление", ИдентификаторЭлементаСтруктурыНастроек);
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
Строка = Оформление.НайтиПоИдентификатору(ИдентификаторСтроки);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Если ТипЗнч(ЭлементНастройки) <> Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
ЭлементыНастроек = СвойствоЭлементаСтруктуры.Элементы;
Индекс = ЭлементыНастроек.Индекс(ЭлементНастройки);
Граница = ЭлементыНастроек.Количество() - 1;
Если ВНачало Тогда
Если Индекс = 0 Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, Граница);
Строки.Сдвинуть(Индекс + ГраницаНачалаЭлементовОформления, Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -1);
Строки.Сдвинуть(Индекс + ГраницаНачалаЭлементовОформления, -1);
КонецЕсли;
Иначе
Если Индекс = Граница Тогда
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, -Граница);
Строки.Сдвинуть(Индекс + ГраницаНачалаЭлементовОформления, -Граница);
Иначе
ЭлементыНастроек.Сдвинуть(ЭлементНастройки, 1);
Строки.Сдвинуть(Индекс + ГраницаНачалаЭлементовОформления, 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьИспользованиеПредопределенныхПараметровВывода(Использование = Истина)
Если РежимИзмененияЭлементаСтруктурыНастроек Тогда
Возврат;
КонецЕсли;
ЭлементыОформления = Оформление.ПолучитьЭлементы();
СвойствоЭлементаСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода;
Для Каждого ЭлементОформления Из ЭлементыОформления Цикл
Если ТипЗнч(ЭлементОформления.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
ЭлементОформления.Использование = Использование;
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, ЭлементОформления);
ЭлементНастройки.Использование = Использование;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗапомнитьНастройкиКолонтитулов(Настройки, ДополнительныеПараметры) Экспорт
ПредыдущиеНастройки = Неопределено;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("НастройкиКолонтитулов", ПредыдущиеНастройки);
Если Настройки <> ПредыдущиеНастройки Тогда
УстановитьМодифицированность();
КонецЕсли;
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("НастройкиКолонтитулов", Настройки);
КонецПроцедуры
#КонецОбласти
#Область Структура
&НаСервере
Процедура ОбновитьСтруктуру()
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Возврат;
КонецЕсли;
Раздел = СтруктураВарианта.ПолучитьЭлементы().Добавить();
Раздел.Представление = НСтр("ru = 'Отчет'");
Раздел.ЭтоРаздел = Истина;
Раздел.Картинка = -1;
Раздел.Тип = СвойствоЭлементаСтруктуры;
Строки = Раздел.ПолучитьЭлементы();
ОбновитьКоллекциюСтруктуры(СвойствоЭлементаСтруктуры, "Структура", Строки);
КонецПроцедуры
&НаСервере
Процедура ОбновитьКоллекциюСтруктуры(Знач Узел, Знач ИмяКоллекции, Строки)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
Коллекция = Узел[ИмяКоллекции];
ТипКоллекции = ТипЗнч(Коллекция);
ИменаКоллекций = ИменаКоллекцийЭлементаСтруктуры(Коллекция);
Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда
Если ЗначениеЗаполнено(Коллекция.ИдентификаторПользовательскойНастройки) Тогда
СодержитПользовательскиеЭлементыСтруктуры = Истина;
КонецЕсли;
ИначеЕсли ИменаКоллекций.Найти(ИмяКоллекции) <> Неопределено
И (ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных")
Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных")) Тогда
Строка = Строки.Добавить();
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(Коллекция);
Строка.Представление = ПредставлениеКоллекцииЭлементаСтруктуры(ИмяКоллекции);
Если ЗначениеЗаполнено(Коллекция.ПредставлениеПользовательскойНастройки) Тогда
Строка.Представление = Коллекция.ПредставлениеПользовательскойНастройки;
КонецЕсли;
Строка.Картинка = -1;
Строка.Тип = Коллекция;
Строка.Подтип = ?(СтрНайти("Серии, Точки", ИмяКоллекции) > 0, "Диаграмма", "Таблица") + ИмяКоллекции;
Строки = Строка.ПолучитьЭлементы();
КонецЕсли;
Для Каждого Элемент Из Коллекция Цикл
Если ЗначениеЗаполнено(Элемент.ИдентификаторПользовательскойНастройки) Тогда
СодержитПользовательскиеЭлементыСтруктуры = Истина;
КонецЕсли;
ЭлементПользовательскойНастройки = ПользовательскиеНастройки.Найти(Элемент.ИдентификаторПользовательскойНастройки);
Строка = Строки.Добавить();
Если ЭлементПользовательскойНастройки = Неопределено Тогда
Строка.Использование = Элемент.Использование;
Иначе
Строка.Использование = ЭлементПользовательскойНастройки.Использование;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
Узел = Элемент.Настройки;
СодержитВложенныеОтчеты = Истина;
Иначе
Узел = Элемент;
ЗаполнитьЗначенияСвойств(Строка, Элемент);
Если РасширенныйРежим = 0 И ЭлементПользовательскойНастройки <> Неопределено Тогда
Строка.Использование = ЭлементПользовательскойНастройки.Использование;
КонецЕсли;
КонецЕсли;
Строка.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(Узел);
Строка.ФлажокДоступен = (РасширенныйРежим = 1 Или ЭлементПользовательскойНастройки <> Неопределено);
СвойстваЭлемента = СвойстваЭлементаКоллекцииСтруктуры(Элемент);
ЗаполнитьЗначенияСвойств(Строка, СвойстваЭлемента);
Строка.Подтип = Строка.ПолучитьРодителя().Подтип;
Если СвойстваЭлемента.ПометкаУдаления Тогда
УстановитьПометкуУдаления("СтруктураВарианта", Строка);
КонецЕсли;
Для Каждого ИмяКоллекции Из СвойстваЭлемента.ИменаКоллекций Цикл
ОбновитьКоллекциюСтруктуры(Узел, ИмяКоллекции, Строка.ПолучитьЭлементы());
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция СвойстваЭлементаКоллекцииСтруктуры(Элемент)
СвойстваЭлемента = ПалитраСвойствЭлементаКоллекцииСтруктуры();
ТипЭлемента = ТипЗнч(Элемент);
Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных")
Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных")
Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
СвойстваЭлемента.Представление = ВариантыОтчетовСлужебный.ПредставлениеПолейГруппировки(
Элемент, СвойстваЭлемента.ПометкаУдаления);
ИначеЕсли ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
Объекты = ДоступныеОбъектыНастройки(Элемент);
ОписаниеОбъекта = Объекты.Найти(Элемент.ИдентификаторОбъекта);
СвойстваЭлемента.Представление = ОписаниеОбъекта.Заголовок;
Если ЗначениеЗаполнено(Элемент.ПредставлениеПользовательскойНастройки) Тогда
СвойстваЭлемента.Представление = Элемент.ПредставлениеПользовательскойНастройки;
КонецЕсли;
Если Не ЗначениеЗаполнено(СвойстваЭлемента.Представление) Тогда
СвойстваЭлемента.Представление = НСтр("ru = 'Вложенная группировка'");
КонецЕсли;
ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") Тогда
СвойстваЭлемента.Представление = НСтр("ru = 'Таблица'");
Если ЗначениеЗаполнено(Элемент.ПредставлениеПользовательскойНастройки) Тогда
СвойстваЭлемента.Представление = Элемент.ПредставлениеПользовательскойНастройки;
КонецЕсли;
ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда
СвойстваЭлемента.Представление = НСтр("ru = 'Диаграмма'");
Если ЗначениеЗаполнено(Элемент.ПредставлениеПользовательскойНастройки) Тогда
СвойстваЭлемента.Представление = Элемент.ПредставлениеПользовательскойНастройки;
КонецЕсли;
Иначе
СвойстваЭлемента.Представление = Строка(ТипЭлемента);
КонецЕсли;
Если ТипЭлемента <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
ПараметрыВывода = Элемент.ПараметрыВывода;
ЗаголовокЭлемента = ПараметрыВывода.Элементы.Найти("Заголовок");
Если ЗаголовокЭлемента <> Неопределено Тогда
СвойстваЭлемента.Заголовок = ЗаголовокЭлемента.Значение;
КонецЕсли;
КонецЕсли;
СвойстваЭлемента.ИменаКоллекций = ИменаКоллекцийЭлементаСтруктуры(Элемент);
ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента);
СостояниеЭлемента = ?(СвойстваЭлемента.ПометкаУдаления, "ПометкаУдаления", Неопределено);
СвойстваЭлемента.Картинка = ОтчетыКлиентСервер.ИндексКартинки(ПредставлениеТипаЭлемента, СостояниеЭлемента);
СвойстваЭлемента.Тип = Элемент;
УстановитьПризнакиВложенныхЭлементовНастроек(Элемент, СвойстваЭлемента);
Возврат СвойстваЭлемента;
КонецФункции
&НаСервере
Функция ПалитраСвойствЭлементаКоллекцииСтруктуры()
СвойстваЭлемента = Новый Структура;
СвойстваЭлемента.Вставить("Представление", "");
СвойстваЭлемента.Вставить("Заголовок", "");
СвойстваЭлемента.Вставить("ИменаКоллекций", Новый Массив);
СвойстваЭлемента.Вставить("ПометкаУдаления", Ложь);
СвойстваЭлемента.Вставить("Картинка", -1);
СвойстваЭлемента.Вставить("Тип", "");
СвойстваЭлемента.Вставить("СодержитОтборы", Ложь);
СвойстваЭлемента.Вставить("СодержитПоляИлиСортировки", Ложь);
СвойстваЭлемента.Вставить("СодержитУсловноеОформление", Ложь);
Возврат СвойстваЭлемента;
КонецФункции
&НаСервере
Функция ДоступныеОбъектыНастройки(НастройкиВложенногоОбъекта)
Если ТипЗнч(НастройкиВложенногоОбъекта.Родитель) = Тип("НастройкиКомпоновкиДанных") Тогда
Возврат НастройкиВложенногоОбъекта.Родитель.ДоступныеОбъекты.Элементы;
Иначе
Возврат ДоступныеОбъектыНастройки(НастройкиВложенногоОбъекта.Родитель);
КонецЕсли;
КонецФункции
&НаСервере
Процедура УстановитьПризнакиВложенныхЭлементовНастроек(ЭлементСтруктуры, СвойстваЭлементаСтруктуры)
ТипЭлемента = ТипЗнч(ЭлементСтруктуры);
Если ТипЭлемента = Тип("ТаблицаКомпоновкиДанных")
Или ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда
Возврат;
КонецЕсли;
Элемент = ЭлементСтруктуры;
Если ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
Элемент = ЭлементСтруктуры.Настройки;
КонецЕсли;
СвойстваЭлементаСтруктуры.СодержитОтборы = Элемент.Отбор.Элементы.Количество();
СвойстваЭлементаСтруктуры.СодержитУсловноеОформление = Элемент.УсловноеОформление.Элементы.Количество();
ВложенныеЭлементы = Элемент.Выбор.Элементы;
СодержитПоля = ВложенныеЭлементы.Количество() > 0
И Не (ВложенныеЭлементы.Количество() = 1
И ТипЗнч(ВложенныеЭлементы[0]) = Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
ВложенныеЭлементы = Элемент.Порядок.Элементы;
СодержитСортировки = ВложенныеЭлементы.Количество() > 0
И Не (ВложенныеЭлементы.Количество() = 1
И ТипЗнч(ВложенныеЭлементы[0]) = Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
СвойстваЭлементаСтруктуры.СодержитПоляИлиСортировки = СодержитПоля Или СодержитСортировки;
Если СвойстваЭлементаСтруктуры.СодержитОтборы Тогда
СодержитВложенныеОтборы = Истина;
КонецЕсли;
Если СвойстваЭлементаСтруктуры.СодержитПоляИлиСортировки Тогда
СодержитВложенныеПоляИлиСортировки = Истина;
КонецЕсли;
Если СвойстваЭлементаСтруктуры.СодержитУсловноеОформление Тогда
СодержитВложенноеУсловноеОформление = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьГруппировкуСтруктурыВарианта(СледующийУровень = Истина)
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("СледующийУровень", СледующийУровень);
ПараметрыВыполнения.Вставить("Оборачивать", Истина);
ИдентификаторЭлементаСтруктуры = Неопределено;
Строка = Элементы.СтруктураВарианта.ТекущиеДанные;
Если Строка = Неопределено Тогда
Строка = КорневаяСтрокаПоУмолчанию("СтруктураВарианта");
КонецЕсли;
Если Строка <> Неопределено Тогда
Если Не СледующийУровень Тогда
Строка = Строка.ПолучитьРодителя();
КонецЕсли;
Если СледующийУровень Тогда
Если (Строка.Тип = "НастройкиКомпоновкиДанных" И Не Строка.ФлажокДоступен)
Или Строка.ПолучитьЭлементы().Количество() > 1
Или (Строка.Тип = "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Подтип = "ТаблицаКолонки") Тогда
ПараметрыВыполнения.Оборачивать = Ложь;
КонецЕсли;
КонецЕсли;
Пока Строка <> Неопределено Цикл
Если Строка.Тип = "НастройкиКомпоновкиДанных"
Или Строка.Тип = "НастройкиВложенногоОбъектаКомпоновкиДанных"
Или Строка.Тип = "ГруппировкаКомпоновкиДанных"
Или Строка.Тип = "ГруппировкаТаблицыКомпоновкиДанных"
Или Строка.Тип = "ГруппировкаДиаграммыКомпоновкиДанных" Тогда
ИдентификаторЭлементаСтруктуры = Строка.Идентификатор;
Прервать;
КонецЕсли;
Строка = Строка.ПолучитьРодителя();
КонецЦикла;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("СтруктураВариантаПослеВыбораПоля", ЭтотОбъект, ПараметрыВыполнения);
ВыбратьПоле("СтруктураВарианта", Обработчик, Неопределено, ИдентификаторЭлементаСтруктуры);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьЭлементСтруктурыНастроек(ТипЭлемента)
ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные;
Результат = ВставитьЭлементСтруктурыНастроек(ТипЭлемента, ТекущаяСтрока, Истина);
ЭлементНастройки = Результат.ЭлементНастройки;
Строка = Результат.Строка;
Строка.Тип = ЭлементНастройки;
Строка.Заголовок = Строка.Представление;
Строка.ФлажокДоступен = Истина;
Строка.Использование = ЭлементНастройки.Использование;
ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементНастройки));
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки(ПредставлениеТипаЭлемента);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
ПодчиненныеСтроки = Строка.ПолучитьЭлементы();
Если Строка.Тип = "ДиаграммаКомпоновкиДанных" Тогда
ЭлементНастройки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.СоединениеЗначенийПоСериям", ТипСоединенияЗначенийПоСериямДиаграммы.СоединениеКраев);
УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.ЛинииСоединенияЗначенийПоСериям");
УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.ЦветСоединенияЗначенийПоСериям", WebЦвета.СеребристоСерый);
УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.РежимСглаживания", РежимСглаживанияДиаграммы.ГладкаяКривая);
УстановитьПараметрВывода(ЭлементНастройки, "ТипДиаграммы.РежимПолупрозрачности", РежимПолупрозрачностиДиаграммы.Использовать);
Строка.Представление = НСтр("ru = 'Диаграмма'");
ПодчиненныйЭлементНастройки = ЭлементНастройки.Точки;
ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить();
ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки;
ПодчиненнаяСтрока.Подтип = "ДиаграммаТочки";
ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки);
ПодчиненнаяСтрока.Картинка = -1;
ПодчиненнаяСтрока.Представление = НСтр("ru = 'Точки'");
ПодчиненныйЭлементНастройки = ЭлементНастройки.Серии;
ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить();
ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки;
ПодчиненнаяСтрока.Подтип = "ДиаграммаСерии";
ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки);
ПодчиненнаяСтрока.Картинка = -1;
ПодчиненнаяСтрока.Представление = НСтр("ru = 'Серии'");
ИначеЕсли Строка.Тип = "ТаблицаКомпоновкиДанных" Тогда
Строка.Представление = НСтр("ru = 'Таблица'");
ПодчиненныйЭлементНастройки = ЭлементНастройки.Строки;
ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить();
ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки;
ПодчиненнаяСтрока.Подтип = "ТаблицаСтроки";
ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки);
ПодчиненнаяСтрока.Картинка = -1;
ПодчиненнаяСтрока.Представление = НСтр("ru = 'Строки'");
ПодчиненныйЭлементНастройки = ЭлементНастройки.Колонки;
ПодчиненнаяСтрока = ПодчиненныеСтроки.Добавить();
ПодчиненнаяСтрока.Тип = ПодчиненныйЭлементНастройки;
ПодчиненнаяСтрока.Подтип = "ТаблицаКолонки";
ПодчиненнаяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ПодчиненныйЭлементНастройки);
ПодчиненнаяСтрока.Картинка = -1;
ПодчиненнаяСтрока.Представление = НСтр("ru = 'Колонки'");
КонецЕсли;
Элементы.СтруктураВарианта.Развернуть(Строка.ПолучитьИдентификатор(), Истина);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СтруктураВариантаПослеВыбораПоля(ОписаниеНастройки, ПараметрыВыполнения) Экспорт
Если ОписаниеНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ВариантыОтчетовСлужебныйКлиент.ДобавитьФормулу(Настройки, Настройки.ДоступныеПоляГруппировок, ОписаниеНастройки);
ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные;
СтрокиПеремещаемыеВНовуюГруппировку = Новый Массив;
Если ПараметрыВыполнения.Оборачивать Тогда
Если ПараметрыВыполнения.СледующийУровень Тогда
Найденные = ТекущаяСтрока.ПолучитьЭлементы();
Для Каждого ПеремещаемаяСтрока Из Найденные Цикл
СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ПеремещаемаяСтрока);
КонецЦикла;
Иначе
СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ТекущаяСтрока);
КонецЕсли;
КонецЕсли;
Результат = ВставитьЭлементСтруктурыНастроек(Тип("ГруппировкаКомпоновкиДанных"), ТекущаяСтрока, ПараметрыВыполнения.СледующийУровень);
ЭлементНастройки = Результат.ЭлементНастройки;
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
ЭлементНастройки.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
Если ОписаниеНастройки = "<>" Тогда
Представление = НСтр("ru = '<Детальные записи>'");
Иначе
ПолеГруппировки = ЭлементНастройки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Использование = Истина;
ПолеГруппировки.Поле = ОписаниеНастройки.Поле;
Представление = ОписаниеНастройки.Заголовок;
КонецЕсли;
Строка = Результат.Строка;
Строка.Использование = ЭлементНастройки.Использование;
Строка.Представление = Представление;
Строка.ФлажокДоступен = Истина;
Строка.Тип = ЭлементНастройки;
ТипЭлемента = Тип(Строка.Тип);
ПредставлениеТипаЭлемента = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЭлемента);
СостояниеЭлемента = ?(Строка.ПометкаУдаления, "ПометкаУдаления", Неопределено);
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки(ПредставлениеТипаЭлемента, СостояниеЭлемента);
Если Не ПараметрыВыполнения.СледующийУровень Тогда
Строка.Заголовок = ТекущаяСтрока.Заголовок;
ОбновитьЗаголовокЭлементаСтруктурыВарианта(Строка);
ТекущаяСтрока.Заголовок = "";
ОбновитьЗаголовокЭлементаСтруктурыВарианта(ТекущаяСтрока);
КонецЕсли;
Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл
Результат = ПереместитьЭлементыСтруктурыВарианта(ПеремещаемаяСтрока, Строка);
КонецЦикла;
Элементы.СтруктураВарианта.Развернуть(Строка.ПолучитьИдентификатор(), Истина);
Элементы.СтруктураВарианта.ТекущаяСтрока = Строка.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Функция ВставитьЭлементСтруктурыНастроек(ТипЭлемента, Строка, СледующийУровень)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
Если Строка = Неопределено Тогда
Строка = КорневаяСтрокаПоУмолчанию("СтруктураВарианта");
КонецЕсли;
Родитель = ПолучитьРодителя("СтруктураВарианта", Строка);
Если Не ЗначениеЗаполнено(Строка.Подтип) Тогда
Строка.Подтип = Родитель.Подтип;
КонецЕсли;
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ИмяКоллекции = ?(ЗначениеЗаполнено(Строка.Подтип), Строка.Подтип, Неопределено);
Если СледующийУровень Тогда
Строки = Строка.ПолучитьЭлементы();
Индекс = Неопределено;
ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, ЭлементНастройки, ИмяКоллекции);
ИндексЭлементаНастройки = Неопределено
Иначе
Родитель = ПолучитьРодителя("СтруктураВарианта", Строка);
Строки = Родитель.ПолучитьЭлементы();
Индекс = Строки.Индекс(Строка) + 1;
РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки);
ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки, ИмяКоллекции);
ИндексЭлементаНастройки = ЭлементыНастроек.Индекс(ЭлементНастройки) + 1;
КонецЕсли;
Если Индекс = Неопределено Тогда
НоваяСтрока = Строки.Добавить();
Иначе
НоваяСтрока = Строки.Вставить(Индекс);
КонецЕсли;
Если ОтчетыКлиент.ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипЗнч(ЭлементыНастроек)) Тогда
Если ИндексЭлементаНастройки = Неопределено Тогда
НовыйЭлементНастройки = ЭлементыНастроек.Добавить(ТипЭлемента);
Иначе
НовыйЭлементНастройки = ЭлементыНастроек.Вставить(ИндексЭлементаНастройки, ТипЭлемента);
КонецЕсли;
Иначе
Если ИндексЭлементаНастройки = Неопределено Тогда
НовыйЭлементНастройки = ЭлементыНастроек.Добавить();
Иначе
НовыйЭлементНастройки = ЭлементыНастроек.Вставить(ИндексЭлементаНастройки);
КонецЕсли;
КонецЕсли;
Элементы.СтруктураВарианта.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
НоваяСтрока.Идентификатор = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(НовыйЭлементНастройки);
Результат = Новый Структура("Строка, СвойствоЭлементаСтруктуры, ЭлементНастройки");
Результат.Строка = НоваяСтрока;
Результат.СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктуры;
Результат.ЭлементНастройки = НовыйЭлементНастройки;
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ПереместитьЭлементыСтруктурыВарианта(Знач Строка, Знач НовыйРодитель,
Знач ПередЧемВставить = Неопределено, Знач Индекс = Неопределено, Знач ИндексЭлементаНастройки = Неопределено)
Результат = Новый Структура("Строка, ЭлементНастройки, Индекс, ИндексЭлементаНастройки");
ДобавлятьВКонец = (НовыйРодитель = Неопределено);
КудаВставить = ПолучитьЭлементы(СтруктураВарианта, НовыйРодитель);
УзелКД = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
ЭлементКД = ЭлементНастройки(УзелКД, Строка);
НовыйРодительКД = ЭлементНастройки(УзелКД, НовыйРодитель);
КудаВставитьКД = ЭлементыНастроек(УзелКД, НовыйРодительКД);
ПередЧемВставитьКД = ЭлементНастройки(УзелКД, ПередЧемВставить);
СтарыйРодитель = ПолучитьРодителя("СтруктураВарианта", Строка);
ОткудаПереместить = ПолучитьЭлементы(СтруктураВарианта, СтарыйРодитель);
СтарыйРодительКД = ЭлементНастройки(УзелКД, СтарыйРодитель);
ОткудаПереместитьКД = ЭлементыНастроек(УзелКД, СтарыйРодительКД);
Если ЭлементКД = ПередЧемВставитьКД Тогда
Результат.ЭлементНастройки = ЭлементКД;
Результат.Строка = Строка;
Иначе
Если Индекс = Неопределено Или ИндексЭлементаНастройки = Неопределено Тогда
Если ПередЧемВставитьКД = Неопределено Тогда
Если ДобавлятьВКонец Тогда
Индекс = КудаВставить.Количество();
ИндексЭлементаНастройки = КудаВставитьКД.Количество();
Иначе
Индекс = 0;
ИндексЭлементаНастройки = 0;
КонецЕсли;
Иначе
Индекс = КудаВставить.Индекс(ПередЧемВставить);
ИндексЭлементаНастройки = КудаВставитьКД.Индекс(ПередЧемВставитьКД);
Если СтарыйРодитель = НовыйРодитель Тогда
СтарыйИндекс = ОткудаПереместить.Индекс(Строка);
Если СтарыйИндекс <= Индекс Тогда
Индекс = Индекс + 1;
ИндексЭлементаНастройки = ИндексЭлементаНастройки + 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПоискЭлементовКД = Новый Соответствие;
Результат.ЭлементНастройки = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексЭлементаНастройки, ПоискЭлементовКД);
ПоискСтрокТаблицы = Новый Соответствие;
Результат.Строка = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, Строка, КудаВставить, Индекс, ПоискСтрокТаблицы);
Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл
СтараяСтрока = КлючИЗначение.Ключ;
НоваяСтрока = КлючИЗначение.Значение;
НоваяСтрока.Идентификатор = ПоискЭлементовКД.Получить(СтараяСтрока.Идентификатор);
КонецЦикла;
ОткудаПереместить.Удалить(Строка);
ОткудаПереместитьКД.Удалить(ЭлементКД);
КонецЕсли;
Результат.Индекс = КудаВставить.Индекс(Результат.Строка);
Результат.ИндексЭлементаНастройки = КудаВставитьКД.Индекс(Результат.ЭлементНастройки);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура СтруктураВариантаПриИзмененииТекущейСтроки()
Строка = Элементы.СтруктураВарианта.ТекущиеДанные;
Элементы.КомандыСтруктурыВарианта_Добавление.Доступность = Строка <> Неопределено;
Элементы.КомандыСтруктурыВарианта_Добавление1.Доступность = Элементы.КомандыСтруктурыВарианта_Добавление.Доступность;
Если Строка <> Неопределено Тогда
УстановитьДоступностьКомандСтруктурыВарианта(Строка.ПолучитьИдентификатор());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКомандСтруктурыВарианта(ИдентификаторСтроки)
Строка = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
ЕстьРодитель = (Родитель <> Неопределено);
ЕстьПотенциальныеРодители = ЕстьРодитель И ПолучитьЭлементы(СтруктураВарианта, Родитель).Индекс(Строка) > 0;
ЕстьПодчиненные = (Строка.ПолучитьЭлементы().Количество() > 0);
ЕстьСоседние = ПолучитьЭлементы(СтруктураВарианта, Родитель).Количество() > 1;
МожноДобавлятьВложенные = (Строка.Тип <> "ТаблицаКомпоновкиДанных"
И Строка.Тип <> "ДиаграммаКомпоновкиДанных");
МожноГруппировать = (Строка.Тип <> "НастройкиКомпоновкиДанных"
И Строка.Тип <> "НастройкиВложенногоОбъектаКомпоновкиДанных"
И Строка.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных");
МожноОткрывать = (Строка.Тип <> "НастройкиКомпоновкиДанных"
И Строка.Тип <> "НастройкиВложенногоОбъектаКомпоновкиДанных"
И Строка.Тип <> "ТаблицаКомпоновкиДанных"
И Строка.Тип <> "ДиаграммаКомпоновкиДанных"
И Строка.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных");
МожноУдалятьИПеремещать = (Строка.Тип <> "НастройкиКомпоновкиДанных"
И Строка.Тип <> "НастройкиВложенногоОбъектаКомпоновкиДанных"
И Строка.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Строка.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных");
МожноДобавлятьТаблицыИДиаграммы = (Строка.Тип = "НастройкиКомпоновкиДанных"
Или Строка.Тип = "НастройкиВложенногоОбъектаКомпоновкиДанных"
Или Строка.Тип = "ГруппировкаКомпоновкиДанных");
РодителяМожноПеремещать = (ЕстьРодитель
И Родитель.Тип <> "НастройкиКомпоновкиДанных"
И Родитель.Тип <> "КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных"
И Родитель.Тип <> "КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных");
Элементы.СтруктураВарианта_Добавить.Доступность = МожноДобавлятьВложенные;
Элементы.СтруктураВарианта_Добавить1.Доступность = МожноДобавлятьВложенные;
Элементы.СтруктураВарианта_Изменить.Доступность = МожноОткрывать;
Элементы.СтруктураВарианта_Изменить1.Доступность = МожноОткрывать;
Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность = МожноДобавлятьТаблицыИДиаграммы;
Элементы.СтруктураВарианта_ДобавитьТаблицу1.Доступность = МожноДобавлятьТаблицыИДиаграммы;
Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность = МожноДобавлятьТаблицыИДиаграммы;
Элементы.СтруктураВарианта_ДобавитьДиаграмму1.Доступность = МожноДобавлятьТаблицыИДиаграммы;
Элементы.СтруктураВарианта_Удалить.Доступность = МожноУдалятьИПеремещать;
Элементы.СтруктураВарианта_Удалить1.Доступность = МожноУдалятьИПеремещать;
Элементы.СтруктураВарианта_Сгруппировать.Доступность = МожноГруппировать;
Элементы.СтруктураВарианта_Сгруппировать1.Доступность = МожноГруппировать;
Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать;
Элементы.СтруктураВарианта_ПереместитьВышеИЛевее1.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать;
Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать;
Элементы.СтруктураВарианта_ПереместитьНижеИПравее1.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать;
Элементы.СтруктураВарианта_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние;
Элементы.СтруктураВарианта_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние;
Элементы.СтруктураВарианта_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние;
Элементы.СтруктураВарианта_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние;
Элементы.СтруктураВарианта_ПереместитьНаУровеньВыше.Доступность = МожноУдалятьИПеремещать И ЕстьРодитель И РодителяМожноПеремещать;
Элементы.СтруктураВарианта_ПереместитьНаУровеньВыше1.Доступность = МожноУдалятьИПеремещать И ЕстьРодитель И РодителяМожноПеремещать;
Элементы.СтруктураВарианта_ПереместитьНаУровеньНиже.Доступность = МожноУдалятьИПеремещать И ЕстьПотенциальныеРодители;
Элементы.СтруктураВарианта_ПереместитьНаУровеньНиже1.Доступность = МожноУдалятьИПеремещать И ЕстьПотенциальныеРодители;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЭлементСтруктуры(Строка, ИмяСтраницы = Неопределено, ИспользоватьФормуВарианта = Неопределено)
Если Строка = Неопределено Тогда
Строки = СтруктураВарианта.ПолучитьЭлементы();
Если Строки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Строка = Строки[0];
КонецЕсли;
Если ИспользоватьФормуВарианта = Неопределено Тогда
ИспользоватьФормуВарианта = (Строка.Тип = "ТаблицаКомпоновкиДанных"
Или Строка.Тип = "НастройкиВложенногоОбъектаКомпоновкиДанных");
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ИзменитьЭлементСтруктурыЗавершение", ЭтотОбъект);
ШаблонЗаголовка = НСтр("ru = 'Настройка %1 отчета ""%2""'");
Если Строка.Тип = "ДиаграммаКомпоновкиДанных" Тогда
ПредставлениеЭлемента = НСтр("ru = 'диаграммы'");
Иначе
ПредставлениеЭлемента = НСтр("ru = 'группировки'");
КонецЕсли;
Если ЗначениеЗаполнено(Строка.Заголовок) Тогда
ПредставлениеЭлемента = ПредставлениеЭлемента + " """ + Строка.Заголовок + """";
ИначеЕсли ЗначениеЗаполнено(Строка.Представление) Тогда
ПредставлениеЭлемента = ПредставлениеЭлемента + " """ + Строка.Представление + """";
КонецЕсли;
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
ПутьКЭлементуСтруктурыНастроек = ОтчетыКлиент.ПолныйПутьКЭлементуНастроек(
Отчет.КомпоновщикНастроек.Настройки, ЭлементНастройки);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта));
ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование);
ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", Строка.Идентификатор);
ПараметрыФормы.Вставить("ПутьКЭлементуСтруктурыНастроек", ПутьКЭлементуСтруктурыНастроек);
ПараметрыФормы.Вставить("ТипЭлементаСтруктурыНастроек", Строка.Тип);
ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗаголовка, ПредставлениеЭлемента, ВариантНаименование));
Если ИмяСтраницы <> Неопределено Тогда
ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы);
КонецЕсли;
ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров);
Если ВыполнятьЗамеры Тогда
МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент");
МодульОценкаПроизводительностиКлиент.ЗамерВремени(
НастройкиОтчета.КлючЗамеров + ".Настройки", Ложь, Ложь);
КонецЕсли;
ИмяОткрываемойФормы = НастройкиОтчета.ПолноеИмя + ?(ИспользоватьФормуВарианта, ".ФормаВарианта", ".ФормаНастроек");
ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект,,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЭлементСтруктурыЗавершение(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) <> Тип("Структура")
Или Результат = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Результат.ВариантМодифицирован Тогда
ОбновитьФорму(Результат);
Раздел = КорневаяСтрокаПоУмолчанию("СтруктураВарианта");
Элементы.СтруктураВарианта.Развернуть(Раздел.ПолучитьИдентификатор(), Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Общее
#Область ОбработчикиОповещений
&НаКлиенте
Функция ПараметрыЗаполненияСписка(ЗакрыватьПриВыборе = Ложь, МножественныйВыбор = Истина, ДобавлятьСтроку = Истина)
ПараметрыЗаполнения = Новый Структура("ПутьКСписку, Индекс, Владелец, ВыбранныйТип, ВыборГруппИЭлементов");
ПараметрыЗаполнения.Вставить("ДобавлятьСтроку", ДобавлятьСтроку);
ПараметрыЗаполнения.Вставить("ЗакрыватьПриВыборе", ЗакрыватьПриВыборе);
ПараметрыЗаполнения.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина);
ПараметрыЗаполнения.Вставить("Отбор", Новый Структура);
ПараметрыЗаполнения.Вставить("МножественныйВыбор", МножественныйВыбор);
ПараметрыЗаполнения.Вставить("РежимВыбора", Истина);
ПараметрыЗаполнения.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ПараметрыЗаполнения.Вставить("РазрешитьНачалоПеретаскивания", Ложь);
Возврат ПараметрыЗаполнения;
КонецФункции
&НаКлиенте
Процедура НачатьЗаполнениеСписка(Элемент, ПараметрыЗаполнения, ВыборПереопределен = Неопределено, ЭтоПодбор = Ложь)
ТипЗначения = ЭтотОбъект[ПараметрыЗаполнения.ПутьКСписку].ТипЗначения;
ПолеСписка = Элементы[ПараметрыЗаполнения.ПутьКСписку];
ПолеЗначения = Элементы[ПараметрыЗаполнения.ПутьКСписку + "Значение"];
Сведения = ОтчетыКлиент.СведенияОЭлементеНастройки(Отчет.КомпоновщикНастроек, ПараметрыЗаполнения.Индекс);
ВыборГруппИЭлементов = Неопределено;
Если Сведения.Описание <> Неопределено Тогда
ВыборГруппИЭлементов = Сведения.Описание.ВыборГруппИЭлементов;
КонецЕсли;
ЭлементПользовательскойНастройки = Сведения.ЭлементПользовательскойНастройки;
Условие = ОтчетыКлиентСервер.УсловиеЭлементаНастройки(ЭлементПользовательскойНастройки, Сведения.Описание);
ПолеЗначения.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ЗначениеТипаГруппыИЭлементы(
ВыборГруппИЭлементов, Условие);
ПараметрыЗаполнения.ВыборГруппИЭлементов = ОтчетыКлиент.ЗначениеТипаИспользованиеГруппИЭлементов(
ВыборГруппИЭлементов, Условие);
РасширенноеОписаниеТипов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, "РасширенноеОписаниеТипов", Новый Соответствие);
РасширенноеОписаниеТипа = РасширенноеОписаниеТипов[ПараметрыЗаполнения.Индекс];
Если РасширенноеОписаниеТипа <> Неопределено Тогда
ТипЗначения = РасширенноеОписаниеТипа.ОписаниеТиповДляФормы;
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ЭтоПодбор", Ложь) Тогда
ТипЗначения = ОписаниеТиповБезПримитивных(ТипЗначения);
КонецЕсли;
ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
ПараметрыВыбора = ОтчетыКлиентСервер.ПараметрыВыбора(Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент);
ПараметрыЗаполнения.Вставить("ПараметрыВыбора", ПараметрыВыбора);
ТипЗначения = ОтчетыКлиент.ТипЗначенияОграниченныйСвязьюПоТипу(
Сведения.Настройки, ПользовательскиеНастройки, Сведения.Элемент, Сведения.Описание, ТипЗначения);
Если ТипЗнч(ЭлементПользовательскойНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ТекущееЗначение = ЭлементПользовательскойНастройки.ПравоеЗначение;
Иначе
ТекущееЗначение = ЭлементПользовательскойНастройки.Значение;
КонецЕсли;
ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(ТекущееЗначение);
Если ОтмеченныеЗначения.Количество() > 0 Тогда
ПараметрыЗаполнения.Вставить("ТекущаяСтрока", ОтмеченныеЗначения[0].Значение);
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ЗавершитьЗаполнениеСписка", ЭтотОбъект, ПараметрыЗаполнения);
Если ОтчетыКлиент.ВыборПереопределен(ЭтотОбъект, Обработчик, Сведения.Описание,
ТипЗначения, ОтмеченныеЗначения, ПараметрыВыбора) Тогда
ВыборПереопределен = Истина;
Возврат;
КонецЕсли;
Если ВыборПереопределен <> Неопределено Тогда
Возврат;
КонецЕсли;
Типы = ТипЗначения.Типы();
Если Типы.Количество() = 0 Тогда
Если ПараметрыЗаполнения.ДобавлятьСтроку Тогда
ПолеСписка.ДобавитьСтроку();
КонецЕсли;
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ЭтоПодбор", Ложь)
И ОтчетыКлиент.ЭтоВыборОбъектовМетаданных(ТипЗначения, ОтмеченныеЗначения, Обработчик) Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("Типы", Типы);
Контекст.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения);
Контекст.Вставить("Элемент", Элемент);
Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ЭтоПодбор", Ложь) Тогда
ОтчетыКлиент.НачатьВыборПользователей(ЭтотОбъект,
Элемент, ТипЗначения, ОтмеченныеЗначения, ПараметрыВыбора, Обработчик,
Новый ОписаниеОповещения("НачатьЗаполнениеСпискаПродолжение", ЭтотОбъект, Контекст));
Иначе
НачатьЗаполнениеСпискаПродолжение(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьЗаполнениеСпискаПродолжение(ВыбранныйЭлемент, Контекст) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
ПродолжитьЗаполнениеСписка(ВыбранныйЭлемент, Контекст.ПараметрыЗаполнения);
Возврат;
КонецЕсли;
Если Контекст.Типы.Количество() = 1 Тогда
Контекст.ПараметрыЗаполнения.ВыбранныйТип = Контекст.Типы[0];
ПродолжитьЗаполнениеСписка(-1, Контекст.ПараметрыЗаполнения);
Возврат;
КонецЕсли;
ДоступныеТипы = Новый СписокЗначений;
ДоступныеТипы.ЗагрузитьЗначения(Контекст.Типы);
Обработчик = Новый ОписаниеОповещения("ПродолжитьЗаполнениеСписка", ЭтотОбъект, Контекст.ПараметрыЗаполнения);
ПоказатьВыборИзМеню(Обработчик, ДоступныеТипы, Контекст.Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьЗаполнениеСписка(ВыбранныйЭлемент, ПараметрыЗаполнения) Экспорт
Если ВыбранныйЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Если ВыбранныйЭлемент <> -1 Тогда
ПараметрыЗаполнения.ВыбранныйТип = ВыбранныйЭлемент.Значение;
КонецЕсли;
ПараметрыПодбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства, "ПараметрыПодбора", Новый Соответствие);
ПутьКФорме = ПараметрыПодбора[ПараметрыЗаполнения.Индекс];
Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда
ПутьКФорме = ПараметрыПодбора[ПараметрыЗаполнения.ВыбранныйТип];
КонецЕсли;
Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда
Список = ЭтотОбъект[ПараметрыЗаполнения.ПутьКСписку];
Если ТипЗнч(Список) = Тип("СписокЗначений")
И ЗначениеЗаполнено(Список) Тогда
ПоследнийЭлемент = Список[Список.Количество()-1];
Если ПоследнийЭлемент.Значение = Неопределено Тогда
ОписаниеТипа = Новый ОписаниеТипов(
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВыбранныйЭлемент.Значение));
ПоследнийЭлемент.Значение = ОписаниеТипа.ПривестиЗначение(Неопределено);
КонецЕсли;
КонецЕсли;
Возврат;
КонецЕсли;
Для Каждого Параметр Из ПараметрыЗаполнения.ПараметрыВыбора Цикл
Если Не ЗначениеЗаполнено(Параметр.Имя) Тогда
Продолжить;
КонецЕсли;
Если СтрНачинаетсяС(ВРег(Параметр.Имя), "ОТБОР.") Тогда
ПараметрыЗаполнения.Отбор.Вставить(СтрРазделить(Параметр.Имя, ".")[1], Параметр.Значение);
Иначе
ПараметрыЗаполнения.Вставить(Параметр.Имя, Параметр.Значение);
КонецЕсли;
КонецЦикла;
Владелец = ПараметрыЗаполнения.Владелец;
ПараметрыЗаполнения.Удалить("Владелец");
ОткрытьФорму(ПутьКФорме, ПараметрыЗаполнения, Владелец);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьЗаполнениеСписка(ВыбранныеЗначения, ПараметрыЗаполнения) Экспорт
Если ТипЗнч(ВыбранныеЗначения) = Тип("Массив") Тогда
Значения = ВыбранныеЗначения;
ВыбранныеЗначения = Новый СписокЗначений;
ВыбранныеЗначения.ЗагрузитьЗначения(Значения);
ВыбранныеЗначения.ЗаполнитьПометки(Истина);
ИначеЕсли ТипЗнч(ВыбранныеЗначения) <> Тип("СписокЗначений") Тогда
Возврат;
КонецЕсли;
ПутьКСписку = ПараметрыЗаполнения.ПутьКСписку;
Список = ЭтотОбъект[ПутьКСписку];
Индекс = Список.Количество() - 1;
Пока Индекс >= 0 Цикл
Элемент = Список[Индекс];
Индекс = Индекс - 1;
Если Элемент.Пометка
И ВыбранныеЗначения.НайтиПоЗначению(Элемент.Значение) = Неопределено Тогда
Список.Удалить(Элемент);
КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из ВыбранныеЗначения Цикл
ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Элемент.Значение, Элемент.Представление, Истина);
КонецЦикла;
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс];
ЭлементНастройки.Использование = Истина;
Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЭлементНастройки.ПравоеЗначение = ВыбранныеЗначения;
Иначе
ЭлементНастройки.Значение = ВыбранныеЗначения;
КонецЕсли;
ОформитьСписок(Элементы[ПутьКСписку], ЭлементНастройки);
КонецПроцедуры
&НаКлиенте
Процедура ВставитьИзБуфераЗавершение(НайденныеОбъекты, ПутьКСписку) Экспорт
Если НайденныеОбъекты = Неопределено Тогда
Возврат;
КонецЕсли;
Список = ЭтотОбъект[ПутьКСписку];
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
Индекс = ПутьКДаннымЭлементов.ПоИмени[ПутьКСписку];
ЭлементНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[Индекс];
Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Если ЭлементНастройки.ПравоеЗначение = Неопределено Тогда
ЭлементНастройки.ПравоеЗначение = Новый СписокЗначений;
КонецЕсли;
Отмеченные = ЭлементНастройки.ПравоеЗначение;
Иначе
Если ЭлементНастройки.Значение = Неопределено Тогда
ЭлементНастройки.Значение = Новый СписокЗначений;
КонецЕсли;
Отмеченные = ЭлементНастройки.Значение;
КонецЕсли;
Для Каждого Значение Из НайденныеОбъекты Цикл
ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина);
ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Отмеченные, Значение, Неопределено, Истина);
КонецЦикла;
ЭлементНастройки.Использование = Истина;
ОформитьСписок(Элементы[ПутьКСписку], ЭлементНастройки);
КонецПроцедуры
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Функция СвойствоЭлементаСтруктурыНастроек(КомпоновщикНастроек, Ключ, ИдентификаторЭлемента = Неопределено, Режим = Неопределено)
Настройки = КомпоновщикНастроек.Настройки;
Если Ключ = "Структура" Тогда
Возврат Настройки;
КонецЕсли;
ЭлементСтруктуры = ЭлементСтруктурыНастроек(Настройки, ИдентификаторЭлемента);
ТипЭлементаСтруктуры = ТипЗнч(ЭлементСтруктуры);
Если ЭлементСтруктуры = Неопределено
Или (ТипЭлементаСтруктуры = Тип("ТаблицаКомпоновкиДанных") И Ключ <> "Выбор" И Ключ <> "УсловноеОформление")
Или (ТипЭлементаСтруктуры = Тип("ДиаграммаКомпоновкиДанных") И Ключ <> "Выбор" И Ключ <> "УсловноеОформление")
Или (ТипЭлементаСтруктуры = Тип("НастройкиКомпоновкиДанных") И Ключ = "ПоляГруппировки")
Или (ТипЭлементаСтруктуры = Тип("ГруппировкаКомпоновкиДанных") И Ключ = "ПараметрыДанных")
Или (ТипЭлементаСтруктуры = Тип("ГруппировкаТаблицыКомпоновкиДанных") И Ключ = "ПараметрыДанных")
Или (ТипЭлементаСтруктуры = Тип("ГруппировкаДиаграммыКомпоновкиДанных") И Ключ = "ПараметрыДанных") Тогда
Возврат Неопределено;
КонецЕсли;
СвойствоЭлементаСтруктуры = ЭлементСтруктуры[Ключ];
Если Режим = 0
И (ТипЗнч(СвойствоЭлементаСтруктуры) = Тип("ВыбранныеПоляКомпоновкиДанных")
Или ТипЗнч(СвойствоЭлементаСтруктуры) = Тип("ПорядокКомпоновкиДанных"))
И ЗначениеЗаполнено(СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки) Тогда
СвойствоЭлементаСтруктуры = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки);
КонецЕсли;
Возврат СвойствоЭлементаСтруктуры;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЭлементСтруктурыНастроек(Настройки, ИдентификаторЭлемента)
Если ТипЗнч(ИдентификаторЭлемента) = Тип("ИдентификаторКомпоновкиДанных") Тогда
ЭлементСтруктуры = Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлемента);
Иначе
ЭлементСтруктуры = Настройки;
КонецЕсли;
Возврат ЭлементСтруктуры;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Строка)
Ключ = Неопределено;
Если ИмяКоллекции = "СоставГруппировки" Тогда
Ключ = "ПоляГруппировки";
ИначеЕсли ИмяКоллекции = "Параметры" Или ИмяКоллекции = "Отборы" Тогда
Ключ = ?(Строка.ЭтоПараметр, "ПараметрыДанных", "Отбор");
ИначеЕсли ИмяКоллекции = "ВыбранныеПоля" Тогда
Ключ = "Выбор";
ИначеЕсли ИмяКоллекции = "Сортировка" Тогда
Ключ = "Порядок";
ИначеЕсли ИмяКоллекции = "Оформление" Тогда
Ключ = ?(Строка.ЭтоПараметрВывода, "ПараметрыВывода", "УсловноеОформление");
ИначеЕсли ИмяКоллекции = "СтруктураВарианта" Тогда
Ключ = "Структура";
КонецЕсли;
Возврат Ключ;
КонецФункции
&НаКлиенте
Процедура УдалитьСтроки(Элемент, Отказ)
Отказ = Истина;
ИдентификаторыСтрок = Элемент.ВыделенныеСтроки;
Индекс = ИдентификаторыСтрок.ВГраница();
Пока Индекс >= 0 Цикл
Строка = ЭтотОбъект[Элемент.Имя].НайтиПоИдентификатору(ИдентификаторыСтрок[Индекс]);
Индекс = Индекс - 1;
Если ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных")
Или (Элемент.Имя = "Отборы" И (Строка.ЭтоРаздел Или Строка.ЭтоПараметр))
Или (Элемент.Имя = "Оформление" И Строка.ЭтоПараметрВывода) Тогда
Продолжить;
КонецЕсли;
Строки = ПолучитьРодителя(Элемент.Имя, Строка).ПолучитьЭлементы();
Если Строки.Индекс(Строка) < 0 Тогда
Продолжить;
КонецЕсли;
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(Элемент.Имя, Строка);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Если ТипЗнч(ЭлементНастройки) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных")
Или ТипЗнч(ЭлементНастройки) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки);
ИмяКоллекции = ИмяКоллекцииНастроекПоИдентификатору(Строка.Идентификатор);
ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки, ИмяКоллекции);
Строка.Использование = Ложь;
ИзменитьИспользованиеСвязанныхЭлементовНастроек(Элемент.Имя, Строка, ЭлементНастройки);
ЭлементыНастроек.Удалить(ЭлементНастройки);
Строки.Удалить(Строка);
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьНастройки(Элемент)
СтрокаКопирования = Элемент.ТекущиеДанные;
Если ТипЗнч(СтрокаКопирования.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных")
Или (СтрокаКопирования.Свойство("ЭтоРаздел") И СтрокаКопирования.ЭтоРаздел)
Или (СтрокаКопирования.Свойство("ЭтоПараметр") И СтрокаКопирования.ЭтоПараметр)
Или (СтрокаКопирования.Свойство("ЭтоПараметрВывода") И СтрокаКопирования.ЭтоПараметрВывода) Тогда
Возврат;
КонецЕсли;
Родитель = СтрокаКопирования.ПолучитьРодителя();
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(Элемент.Имя, СтрокаКопирования);
УзелКД = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
КудаВставить = ПолучитьЭлементы(ЭтотОбъект[Элемент.Имя], Родитель);
ЭлементКД = ЭлементНастройки(УзелКД, СтрокаКопирования);
РодительКД = ЭлементНастройки(УзелКД, Родитель);
КудаВставитьКД = ЭлементыНастроек(УзелКД, РодительКД);
Индекс = КудаВставить.Количество();
ИндексЭлементаНастройки = КудаВставитьКД.Количество();
ПоискЭлементовКД = Новый Соответствие;
ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексЭлементаНастройки, ПоискЭлементовКД);
ПоискСтрокТаблицы = Новый Соответствие;
ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаКопирования, КудаВставить, Индекс, ПоискСтрокТаблицы);
Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл
СтараяСтрока = КлючИЗначение.Ключ;
НоваяСтрока = КлючИЗначение.Значение;
НоваяСтрока.Идентификатор = ПоискЭлементовКД.Получить(СтараяСтрока.Идентификатор);
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьИспользование(ИмяКоллекции, Использование = Истина, ЭлементыКоллекции = Неопределено)
Если ЭлементыКоллекции = Неопределено Тогда
КорневаяСтрока = КорневаяСтрокаПоУмолчанию(ИмяКоллекции);
Если КорневаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ЭлементыКоллекции = КорневаяСтрока.ПолучитьЭлементы();
КонецЕсли;
Для Каждого Элемент Из ЭлементыКоллекции Цикл
Элемент.Использование = Использование;
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Элемент);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Элемент);
Если ТипЗнч(ЭлементНастройки) <> Тип("НастройкиКомпоновкиДанных")
И ТипЗнч(ЭлементНастройки) <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных")
И ТипЗнч(ЭлементНастройки) <> Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда
ЭлементНастройки.Использование = Использование;
КонецЕсли;
ИзменитьИспользование(ИмяКоллекции, Использование, Элемент.ПолучитьЭлементы());
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьИспользованиеЭлементаНастройки(ИмяКоллекции)
Строка = Элементы[ИмяКоллекции].ТекущиеДанные;
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, Строка);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки);
Если ТипЗнч(РодительЭлементаНастройки) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
ЭлементНастройки = РодительЭлементаНастройки;
КонецЕсли;
ЭлементНастройки.Использование = Строка.Использование;
Если ИмяКоллекции = "Оформление" И Строка.ЭтоПараметрВывода
И Строка(Строка.Идентификатор) = "DATAPARAMETERSOUTPUT" Тогда
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.Значение = ?(Строка.Использование,
ТипВыводаТекстаКомпоновкиДанных.Авто, ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
КонецЕсли;
Если РасширенныйРежим = 0 И ИмяКоллекции = "СтруктураВарианта" Тогда
ЭлементПользовательскойНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
ЭлементНастройки.ИдентификаторПользовательскойНастройки);
Если ЭлементПользовательскойНастройки <> Неопределено Тогда
ЭлементПользовательскойНастройки.Использование = ЭлементНастройки.Использование;
КонецЕсли;
КонецЕсли;
ИзменитьИспользованиеСвязанныхЭлементовНастроек(ИмяКоллекции, Строка, ЭлементНастройки);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьИспользованиеСвязанныхЭлементовНастроек(ИмяКоллекции, Строка, ЭлементНастройки)
Если ИмяКоллекции = "Оформление" Тогда
Если Строка.ЭтоПараметрВывода Тогда
СинхронизироватьПредопределенныеПараметрыВывода(Строка.Использование, ЭлементНастройки);
КонецЕсли;
Возврат;
КонецЕсли;
СвязанныеКоллекции = Новый Массив;
Если ИмяКоллекции = "СоставГруппировки" Тогда
СвязанныеКоллекции = СтрРазделить("ВыбранныеПоля,Сортировка", ",");
ИначеЕсли ИмяКоллекции = "ВыбранныеПоля" Тогда
СвязанныеКоллекции = СтрРазделить("СоставГруппировки,Сортировка", ",");
КонецЕсли;
Для Каждого СвязаннаяКоллекция Из СвязанныеКоллекции Цикл
ИзменитьИспользованиеПоля(СвязаннаяКоллекция, Строка.Поле, Строка.Использование);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьИспользованиеПоля(ИмяКоллекции, Поле, Использование)
Если Не ЗначениеЗаполнено(Поле) Тогда
Возврат;
КонецЕсли;
Условие = Новый Структура("Поле", Поле);
СтрокиТаблицы = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(ЭтотОбъект[ИмяКоллекции], Условие);
СвойствоЭлементаСтруктуры = Неопределено;
Для Каждого СтрокаТаблицы Из СтрокиТаблицы Цикл
Если СтрокаТаблицы.Использование = Использование Тогда
Продолжить;
КонецЕсли;
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
КлючСвойства = КлючСвойстваЭлементаСтруктурыНастроек(ИмяКоллекции, СтрокаТаблицы);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
Отчет.КомпоновщикНастроек, КлючСвойства, ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
КонецЕсли;
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, СтрокаТаблицы);
Если ЭлементНастройки <> Неопределено Тогда
СтрокаТаблицы.Использование = Использование;
ЭлементНастройки.Использование = Использование;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьПометкуУдаления(ИмяКоллекции, Строка)
Строка.ПометкаУдаления = Истина;
Если ИмяКоллекции = "Оформление" Тогда
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Ошибка");
Иначе
Строка.Картинка = ОтчетыКлиентСервер.ИндексКартинки("Элемент", "ПометкаУдаления");
КонецЕсли;
КонецПроцедуры
#Область Клиент
&НаКлиенте
Процедура ЗаписатьИЗакрыть(Переформировать)
ОповеститьОВыборе(РезультатВыбора(Переформировать));
КонецПроцедуры
&НаКлиенте
Функция РезультатВыбора(Переформировать)
РезультатВыбораСформирован = Истина;
Если РежимИзмененияЭлементаСтруктурыНастроек И Не Переформировать Тогда
Возврат Неопределено;
КонецЕсли;
РезультатВыбора = ОтчетыКлиентСервер.ПараметрыОбновленияФормыОтчета(ВариантыОтчетовСлужебныйКлиентСервер.ИмяСобытияФормыНастроек());
РезультатВыбора.Переформировать = Переформировать;
РезультатВыбора.СброситьПользовательскиеНастройки = (РасширенныйРежим = 1);
РезультатВыбора.ФормаНастроекРасширенныйРежим = РасширенныйРежим;
РезультатВыбора.ФормаНастроекИмяСтраницы = Элементы.СтраницыНастроек.ТекущаяСтраница.Имя;
РезультатВыбора.КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек;
РезультатВыбора.ВариантМодифицирован = ВариантИзменен;
РезультатВыбора.ПользовательскиеНастройкиМодифицированы =
ВариантИзменен Или ПользовательскиеНастройкиМодифицированы;
Возврат РезультатВыбора;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПредопределенныеПараметрыВывода(Настройки)
ПредопределенныеПараметры = Новый Структура("TITLE, TITLEOUTPUT, DATAPARAMETERSOUTPUT, FILTEROUTPUT");
ПараметрыВывода = Настройки.ПараметрыВывода;
Для Каждого Параметр Из ПредопределенныеПараметры Цикл
СвойстваПараметра = Новый Структура("Объект, Идентификатор");
СвойстваПараметра.Объект = ПараметрыВывода.Элементы.Найти(Параметр.Ключ);
СвойстваПараметра.Идентификатор = ПараметрыВывода.ПолучитьИдентификаторПоОбъекту(СвойстваПараметра.Объект);
ПредопределенныеПараметры[Параметр.Ключ] = СвойстваПараметра;
КонецЦикла;
Возврат ПредопределенныеПараметры;
КонецФункции
&НаКлиенте
Процедура УстановитьПараметрВывода(ЭлементСтруктуры, ИмяПараметра, Значение = Неопределено, Использование = Истина)
ЗначениеПараметра = ЭлементСтруктуры.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра));
Если ЗначениеПараметра = Неопределено Тогда
Возврат;
КонецЕсли;
Если Значение <> Неопределено Тогда
ЗначениеПараметра.Значение = Значение;
КонецЕсли;
Если Использование <> Неопределено Тогда
ЗначениеПараметра.Использование = Использование;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция НовыйКонтекст(Знач ТаблицаИмя, Знач Действие)
Результат = Новый Структура;
Результат.Вставить("ПричинаОтказа", "");
Результат.Вставить("ТаблицаИмя", ТаблицаИмя);
Результат.Вставить("Действие", Действие);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОпределитьВыделенныеСтроки(Контекст)
Контекст.Вставить("СтрокиДерева", Новый Массив);
Контекст.Вставить("ТекущаяСтрока", Неопределено);
ТаблицаЭлемент = Элементы[Контекст.ТаблицаИмя];
ТаблицаРеквизит = ЭтотОбъект[Контекст.ТаблицаИмя];
ТекущаяСтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока;
Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры,
|МогутБытьПараметрыВывода, МогутБытьГруппы, ТребоватьОдногоРодителя");
Особенности.МогутБытьРазделы = (Контекст.ТаблицаИмя = "Отборы"
Или Контекст.ТаблицаИмя = "ВыбранныеПоля"
Или Контекст.ТаблицаИмя = "Сортировка"
Или Контекст.ТаблицаИмя = "Оформление");
Особенности.МогутБытьПараметры = (Контекст.ТаблицаИмя = "Отборы");
Особенности.МогутБытьПараметрыВывода = (Контекст.ТаблицаИмя = "Оформление");
Особенности.ТребоватьОдногоРодителя = (Контекст.Действие = "Переместить"
Или Контекст.Действие = "ПереместитьВИерархии"
Или Контекст.Действие = "Сгруппировать");
Особенности.МогутБытьГруппы = (Контекст.ТаблицаИмя = "Отборы" Или Контекст.ТаблицаИмя = "ВыбранныеПоля");
Если Особенности.ТребоватьОдногоРодителя Тогда
Контекст.Вставить("ТекущийРодитель", -1);
КонецЕсли;
Если Особенности.МогутБытьГруппы Тогда
БылиГруппы = Ложь;
КонецЕсли;
ВыделенныеСтроки = МассивСортировать(ТаблицаЭлемент.ВыделенныеСтроки, НаправлениеСортировки.Возр);
Для Каждого СтрокаИдентификатор Из ВыделенныеСтроки Цикл
СтрокаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(СтрокаИдентификатор);
Если Не СтрокаДобавлена(Контекст, СтрокаДерева, Особенности) Тогда
Возврат;
КонецЕсли;
Если Особенности.МогутБытьГруппы И СтрокаДерева.ЭтоГруппа Тогда
БылиГруппы = Истина;
КонецЕсли;
Если СтрокаИдентификатор = ТекущаяСтрокаИдентификатор Тогда
Контекст.ТекущаяСтрока = СтрокаДерева;
КонецЕсли;
КонецЦикла;
Если Контекст.СтрокиДерева.Количество() = 0 Тогда
Контекст.ПричинаОтказа = НСтр("ru = 'Выберите элементы.'");
Возврат;
КонецЕсли;
Если Контекст.ТекущаяСтрока = Неопределено Тогда
Если Контекст.Действие = "ИзменитьГруппу" Тогда
Контекст.ПричинаОтказа = НСтр("ru = 'Выберите группу.'");
Возврат;
КонецЕсли;
КонецЕсли;
Если Контекст.Действие = "Удалить" И Особенности.МогутБытьГруппы И БылиГруппы Тогда
Количество = Контекст.СтрокиДерева.Количество();
Для Номер = 1 По Количество Цикл
ОбратныйИндекс = Количество - Номер;
Родитель = Контекст.СтрокиДерева[ОбратныйИндекс];
Пока Родитель <> Неопределено Цикл
Родитель = Родитель.ПолучитьРодителя();
Если Контекст.СтрокиДерева.Найти(Родитель) <> Неопределено Тогда
Контекст.СтрокиДерева.Удалить(ОбратныйИндекс);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция СтрокаДобавлена(Строки, СтрокаДерева, Особенности)
Если Строки.СтрокиДерева.Найти(СтрокаДерева) <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
Если Особенности.МогутБытьРазделы И СтрокаДерева.ЭтоРаздел Тогда
Возврат Истина;
КонецЕсли;
Если (Особенности.МогутБытьПараметры И СтрокаДерева.ЭтоПараметр)
Или (Особенности.МогутБытьПараметрыВывода И СтрокаДерева.ЭтоПараметрВывода) Тогда
Если Строки.Действие = "Переместить" Тогда
Строки.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть перемещены.'");
ИначеЕсли Строки.Действие = "Сгруппировать" Тогда
Строки.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть участниками групп.'");
ИначеЕсли Строки.Действие = "Удалить" Тогда
Строки.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть удалены.'");
КонецЕсли;
Возврат Ложь;
КонецЕсли;
Если Особенности.ТребоватьОдногоРодителя Тогда
Родитель = СтрокаДерева.ПолучитьРодителя();
Если Строки.ТекущийРодитель = -1 Тогда
Строки.ТекущийРодитель = Родитель;
ИначеЕсли Строки.ТекущийРодитель <> Родитель Тогда
Если Строки.Действие = "Переместить" Тогда
Строки.ПричинаОтказа = НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'");
ИначеЕсли Строки.Действие = "Сгруппировать" Тогда
Строки.ПричинаОтказа = НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'");
КонецЕсли;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Строки.СтрокиДерева.Добавить(СтрокаДерева);
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура СдвинутьСтроки(Контекст)
ТекущийРодитель = Контекст.ТекущийРодитель;
УзелКД = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
Если Контекст.ТекущийРодитель = Неопределено Тогда
ТаблицаРеквизит = ЭтотОбъект[Контекст.ТаблицаИмя];
Если Контекст.ТаблицаИмя = "Отборы" И Не РежимИзмененияЭлементаСтруктурыНастроек Тогда
ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1];
Иначе
ТекущийРодитель = ТаблицаРеквизит;
КонецЕсли;
ТекущийРодительКД = УзелКД;
ИначеЕсли ТипЗнч(ТекущийРодитель.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
ТекущийРодительКД = УзелКД;
Иначе
ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.Идентификатор);
КонецЕсли;
СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы();
СтрокиРодителяКД = ЭлементыНастроек(УзелКД, ТекущийРодительКД);
ВерхняяГраницаСтрок = СтрокиРодителя.Количество() - 1;
ВыделеноСтрок = Контекст.СтрокиДерева.Количество();
ДвигаемсяПоВозрастанию = (Контекст.Направление < 0);
Для Номер = 1 По ВыделеноСтрок Цикл
Если ДвигаемсяПоВозрастанию Тогда
ИндексВМассиве = Номер - 1;
Иначе
ИндексВМассиве = ВыделеноСтрок - Номер;
КонецЕсли;
СтрокаДерева = Контекст.СтрокиДерева[ИндексВМассиве];
ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.Идентификатор);
ИндексВДереве = СтрокиРодителя.Индекс(СтрокаДерева);
ГдеОкажетсяСтрока = ИндексВДереве + Контекст.Направление;
Если ГдеОкажетсяСтрока < 0 Тогда
СтрокиРодителя.Сдвинуть(ИндексВДереве, ВерхняяГраницаСтрок - ИндексВДереве);
СтрокиРодителяКД.Сдвинуть(ЭлементКД, ВерхняяГраницаСтрок - ИндексВДереве);
ИначеЕсли ГдеОкажетсяСтрока > ВерхняяГраницаСтрок Тогда
СтрокиРодителя.Сдвинуть(ИндексВДереве, -ИндексВДереве);
СтрокиРодителяКД.Сдвинуть(ЭлементКД, -ИндексВДереве);
Иначе
СтрокиРодителя.Сдвинуть(ИндексВДереве, Контекст.Направление);
СтрокиРодителяКД.Сдвинуть(ЭлементКД, Контекст.Направление);
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ПереместитьВИерархии(Контекст)
Если Контекст.ТекущийРодитель = Неопределено Тогда
Возврат;
КонецЕсли;
Если Контекст.Направление > 0 Тогда
Строки = Контекст.ТекущийРодитель.ПолучитьЭлементы();
Индекс = Строки.Индекс(Контекст.ТекущаяСтрока) - 1;
НовыйРодитель = ?(Индекс < 0, Неопределено, Строки.Получить(Индекс));
Иначе
НовыйРодитель = ПолучитьРодителя(Контекст.ТаблицаИмя, Контекст.ТекущийРодитель);
КонецЕсли;
Если НовыйРодитель = Неопределено
Или НовыйРодитель.Тип = "ТаблицаКомпоновкиДанных"
Или НовыйРодитель.Тип = "ДиаграммаКомпоновкиДанных" Тогда
Возврат;
КонецЕсли;
Если Контекст.Направление > 0 Тогда
Индекс = НовыйРодитель.ПолучитьЭлементы().Количество();
Иначе
Индекс = НовыйРодитель.ПолучитьЭлементы().Индекс(Контекст.ТекущийРодитель) + 1;
КонецЕсли;
Если Индекс < 0 Тогда
Индекс = 0;
КонецЕсли;
Результат = ПереместитьЭлементыСтруктурыВарианта(Контекст.ТекущаяСтрока, НовыйРодитель,, Индекс, Индекс);
Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина);
Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.Строка.ПолучитьИдентификатор();
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Функция ЭтоПодчиненныеЭлементы(РодительскийЭлементДерева, ЭлементДерева)
РодительскийЭлемент = ЭлементДерева;
Пока РодительскийЭлемент <> Неопределено Цикл
Если РодительскийЭлементДерева = РодительскийЭлемент Тогда
Возврат Истина;
КонецЕсли;
РодительскийЭлемент = РодительскийЭлемент.ПолучитьРодителя();
КонецЦикла;
Возврат Ложь;
КонецФункции
#КонецОбласти
#Область КлиентТаблицыПолейУниверсальныеТочкиВхода
&НаКлиенте
Процедура ВыбратьРежимОтображенияДляСтрок(СвойстваЭлементовНастроек, ИмяКоллекции, ПоказыватьРежимыФлажков = Ложь, ТекущийРежимОтображения = Неопределено)
ДоступныеРежимыОтображения = ДоступныеРежимыОтображения(ПоказыватьРежимыФлажков);
РежимОтображения = ДоступныеРежимыОтображения.НайтиПоЗначению(ТекущийРежимОтображения);
Если РежимОтображения = Неопределено Тогда
Возврат;
КонецЕсли;
ДоступныеКартинки = ДоступныеКартинкиРежимовОтображения();
КартинкаРежимаОтображения = ДоступныеКартинки[РежимОтображения.Значение];
Для Каждого СвойстваЭлементаНастроек Из СвойстваЭлементовНастроек Цикл
Строка = ЭтотОбъект[ИмяКоллекции].НайтиПоИдентификатору(СвойстваЭлементаНастроек.ИдентификаторСтроки);
ЭлементНастроек = СвойстваЭлементаНастроек.ЭлементНастроек;
Если Строка <> Неопределено И ЭлементНастроек <> Неопределено Тогда
УстановитьРежимОтображения(ИмяКоллекции, Строка, ЭлементНастроек, КартинкаРежимаОтображения);
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьРежимОтображенияДляСтроки(ОтборыУзлаНастроек, ИмяКоллекции, ИдентификаторСтроки, ПоказыватьРежимыВвода, ПоказыватьРежимыФлажков, ТекущийРежимОтображения = Неопределено)
Контекст = Новый Структура("ОтборыУзлаНастроек, ИмяКоллекции, ИдентификаторСтроки", ОтборыУзлаНастроек, ИмяКоллекции, ИдентификаторСтроки);
Обработчик = Новый ОписаниеОповещения("ПослеВыбораРежимаОтображенияСтроки", ЭтотОбъект, Контекст);
ДоступныеРежимыОтображения = ДоступныеРежимыОтображения(ПоказыватьРежимыФлажков);
Если ТекущийРежимОтображения = Неопределено Тогда
ПоказатьВыборИзМеню(Обработчик, ДоступныеРежимыОтображения);
Иначе
РежимОтображения = ДоступныеРежимыОтображения.НайтиПоЗначению(ТекущийРежимОтображения);
ВыполнитьОбработкуОповещения(Обработчик, РежимОтображения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораРежимаОтображенияСтроки(РежимОтображения, Контекст) Экспорт
Если РежимОтображения = Неопределено Тогда
Возврат;
КонецЕсли;
Строка = ЭтотОбъект[Контекст.ИмяКоллекции].НайтиПоИдентификатору(Контекст.ИдентификаторСтроки);
Если Строка = Неопределено Тогда
Возврат;
КонецЕсли;
ЭлементНастройки = Контекст.ОтборыУзлаНастроек.ПолучитьОбъектПоИдентификатору(Строка.Идентификатор);
Если ЭлементНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
ДоступныеКартинки = ДоступныеКартинкиРежимовОтображения();
КартинкаРежимаОтображения = ДоступныеКартинки[РежимОтображения.Значение];
УстановитьРежимОтображения(Контекст.ИмяКоллекции, Строка, ЭлементНастройки, КартинкаРежимаОтображения);
УстановитьМодифицированность();
КонецПроцедуры
&НаКлиенте
Функция ДоступныеРежимыОтображения(ПоказыватьРежимыФлажков)
ДоступныеРежимыОтображения = Новый СписокЗначений;
ДоступныеРежимыОтображения.Добавить("ПоказыватьВШапкеОтчета", НСтр("ru = 'В шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступ);
Если ПоказыватьРежимыФлажков Тогда
ДоступныеРежимыОтображения.Добавить("ПоказыватьТолькоФлажокВШапкеОтчета", НСтр("ru = 'Только флажок в шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступСФлажком);
КонецЕсли;
ДоступныеРежимыОтображения.Добавить("ПоказыватьВНастройкахОтчета", НСтр("ru = 'В настройках отчета'"), , БиблиотекаКартинок.Реквизит);
Если ПоказыватьРежимыФлажков Тогда
ДоступныеРежимыОтображения.Добавить("ПоказыватьТолькоФлажокВНастройкахОтчета", НСтр("ru = 'Только флажок в настройках отчета'"), , БиблиотекаКартинок.ОбычныйДоступСФлажком);
КонецЕсли;
ДоступныеРежимыОтображения.Добавить("НеПоказывать", НСтр("ru = 'Не показывать'"), , БиблиотекаКартинок.СерыйКрест);
Возврат ДоступныеРежимыОтображения;
КонецФункции
&НаКлиенте
Функция ДоступныеКартинкиРежимовОтображения()
ДоступныеКартинки = Новый Соответствие;
ДоступныеКартинки.Вставить("ПоказыватьТолькоФлажокВШапкеОтчета", 1);
ДоступныеКартинки.Вставить("ПоказыватьВШапкеОтчета", 2);
ДоступныеКартинки.Вставить("ПоказыватьТолькоФлажокВНастройкахОтчета", 3);
ДоступныеКартинки.Вставить("ПоказыватьВНастройкахОтчета", 4);
ДоступныеКартинки.Вставить("НеПоказывать", 5);
Возврат ДоступныеКартинки;
КонецФункции
&НаКлиенте
Процедура УстановитьРежимОтображения(ИмяКоллекции, Строка, ЭлементНастройки, КартинкаРежимаОтображения = Неопределено)
Если КартинкаРежимаОтображения = Неопределено Тогда
КартинкаРежимаОтображения = Строка.КартинкаРежимаОтображения;
Иначе
Строка.КартинкаРежимаОтображения = КартинкаРежимаОтображения;
КонецЕсли;
Если КартинкаРежимаОтображения = 1 Или КартинкаРежимаОтображения = 2 Тогда
ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
ИначеЕсли КартинкаРежимаОтображения = 3 Или КартинкаРежимаОтображения = 4 Тогда
ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
Иначе
ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
Если ИмяКоллекции = "Отборы" И Не Строка.ЭтоПараметр Тогда
Если КартинкаРежимаОтображения = 1 Или КартинкаРежимаОтображения = 3 Тогда
ЭлементНастройки.Представление = Строка.Заголовок;
Иначе
ЭлементНастройки.Представление = "";
КонецЕсли;
Если Не Строка.ЭтоПредопределенныйЗаголовок Тогда
ЭлементНастройки.ПредставлениеПользовательскойНастройки = Строка.Заголовок;
КонецЕсли;
ИначеЕсли ИмяКоллекции = "Оформление" Тогда
Если Строка.ЭтоПредопределенныйЗаголовок Тогда
Если КартинкаРежимаОтображения = 1 Или КартинкаРежимаОтображения = 3 Тогда
ЭлементНастройки.Представление = Строка.Заголовок;
Иначе
ЭлементНастройки.Представление = "";
КонецЕсли;
Иначе
ЭлементНастройки.Представление = Строка.Заголовок;
КонецЕсли;
КонецЕсли;
Если ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
ЭлементНастройки.ИдентификаторПользовательскойНастройки = "";
ИначеЕсли Не ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда
ЭлементНастройки.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция КартинкаРежимаОтображенияЭлементаНастройки(ЭлементНастройки)
КартинкаРежимаОтображения = 5;
Если ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда
Если ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
Или ТипЗнч(ЭлементНастройки) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда
КартинкаРежимаОтображения = 2;
Иначе
КартинкаРежимаОтображения = ?(ЗначениеЗаполнено(ЭлементНастройки.Представление), 1, 2);
КонецЕсли;
ИначеЕсли ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
Или ТипЗнч(ЭлементНастройки) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда
КартинкаРежимаОтображения = 4;
Иначе
КартинкаРежимаОтображения = ?(ЗначениеЗаполнено(ЭлементНастройки.Представление), 3, 4);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат КартинкаРежимаОтображения;
КонецФункции
#КонецОбласти
#Область КлиентТаблицыПолейФункциональнаяЧасть
&НаКлиентеНаСервереБезКонтекста
Функция ЭлементНастройки(Знач УзелНастроек, Знач ЭлементНастройки)
Результат = Неопределено;
Если ЭлементНастройки <> Неопределено
И ТипЗнч(ЭлементНастройки.Идентификатор) = Тип("ИдентификаторКомпоновкиДанных") Тогда
Результат = УзелНастроек.ПолучитьОбъектПоИдентификатору(ЭлементНастройки.Идентификатор);
КонецЕсли;
Если ТипЗнч(Результат) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
Результат = ЭлементНастройки.Настройки;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЭлементыНастроек(Знач СвойствоЭлементаСтруктуры, Знач ЭлементНастройки = Неопределено, Знач ИмяКоллекции = Неопределено)
Если ЭлементНастройки = Неопределено Тогда
ЭлементНастройки = СвойствоЭлементаСтруктуры;
КонецЕсли;
ТипОбъекта = ТипЗнч(ЭлементНастройки);
Если ИмяКоллекции <> Неопределено Тогда
ИмяКоллекции = СтрЗаменить(ИмяКоллекции, "Таблица", "");
ИмяКоллекции = СтрЗаменить(ИмяКоллекции, "Диаграмма", "");
Если ТипОбъекта = Тип("ТаблицаКомпоновкиДанных")
И (ИмяКоллекции = "Строки" Или ИмяКоллекции = "Колонки")
Или ТипОбъекта = Тип("ДиаграммаКомпоновкиДанных")
И (ИмяКоллекции = "Серии" Или ИмяКоллекции = "Точки") Тогда
Возврат ЭлементНастройки[ИмяКоллекции];
КонецЕсли;
КонецЕсли;
Если ТипОбъекта = Тип("НастройкиКомпоновкиДанных")
Или ТипОбъекта = Тип("ГруппировкаКомпоновкиДанных")
Или ТипОбъекта = Тип("ГруппировкаТаблицыКомпоновкиДанных")
Или ТипОбъекта = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
Возврат ЭлементНастройки.Структура;
ИначеЕсли ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных")
Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных")
Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда
Возврат ЭлементНастройки;
ИначеЕсли ТипОбъекта = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
Возврат ЭлементНастройки.Настройки.Структура;
КонецЕсли;
Возврат ЭлементНастройки.Элементы;
КонецФункции
&НаКлиенте
Функция ИмяКоллекцииНастроекПоИдентификатору(Идентификатор)
ИмяКоллекции = Неопределено;
Путь = ВРег(Идентификатор);
Если СтрНайти(Путь, "SERIES") > 0 Тогда
ИмяКоллекции = "Серии";
ИначеЕсли СтрНайти(Путь, "POINT") > 0 Тогда
ИмяКоллекции = "Точки";
ИначеЕсли СтрНайти(Путь, "ROW") > 0 Тогда
ИмяКоллекции = "Строки";
ИначеЕсли СтрНайти(Путь, "COLUMN") > 0 Тогда
ИмяКоллекции = "Колонки";
КонецЕсли;
Возврат ИмяКоллекции;
КонецФункции
&НаКлиенте
Функция ПолучитьРодителяЭлементаНастройки(Знач СвойствоЭлементаСтруктуры, Знач ЭлементНастройки)
Родитель = Неопределено;
ТипЭлемента = ТипЗнч(ЭлементНастройки);
Если ЭлементНастройки <> Неопределено
И ТипЭлемента <> Тип("ПолеГруппировкиКомпоновкиДанных")
И ТипЭлемента <> Тип("АвтоПолеГруппировкиКомпоновкиДанных")
И ТипЭлемента <> Тип("АвтоЭлементПорядкаКомпоновкиДанных")
И ТипЭлемента <> Тип("ЭлементПорядкаКомпоновкиДанных")
И ТипЭлемента <> Тип("ЭлементУсловногоОформленияКомпоновкиДанных")
И ТипЭлемента <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда
Родитель = ЭлементНастройки.Родитель;
КонецЕсли;
Если Родитель = Неопределено Тогда
Родитель = СвойствоЭлементаСтруктуры;
КонецЕсли;
Возврат Родитель;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьЭлементы(Знач Дерево, Знач Строка)
Если Строка = Неопределено Тогда
Строка = Дерево;
КонецЕсли;
Возврат Строка.ПолучитьЭлементы();
КонецФункции
&НаКлиенте
Функция ПолучитьРодителя(Знач ИмяКоллекции, Знач Строка = Неопределено)
Родитель = Неопределено;
Если Строка <> Неопределено Тогда
Родитель = Строка.ПолучитьРодителя();
КонецЕсли;
Если Родитель = Неопределено Тогда
Родитель = КорневаяСтрокаПоУмолчанию(ИмяКоллекции);
КонецЕсли;
Если Родитель = Неопределено Тогда
Родитель = ЭтотОбъект[ИмяКоллекции];
КонецЕсли;
Возврат Родитель;
КонецФункции
&НаКлиенте
Функция КорневаяСтрокаПоУмолчанию(Знач ИмяКоллекции)
КорневаяСтрока = Неопределено;
Если ИмяКоллекции = "ВыбранныеПоля" Тогда
КорневаяСтрока = ВыбранныеПоля.ПолучитьЭлементы()[0];
ИначеЕсли ИмяКоллекции = "Сортировка" Тогда
КорневаяСтрока = Сортировка.ПолучитьЭлементы()[0];
ИначеЕсли ИмяКоллекции = "СтруктураВарианта" Тогда
КорневаяСтрока = СтруктураВарианта.ПолучитьЭлементы()[0];
ИначеЕсли ИмяКоллекции = "Параметры" Тогда
Если Не РежимИзмененияЭлементаСтруктурыНастроек Тогда
КорневаяСтрока = Отборы.ПолучитьЭлементы()[0];
КонецЕсли;
ИначеЕсли ИмяКоллекции = "Отборы" Тогда
Если РежимИзмененияЭлементаСтруктурыНастроек Тогда
КорневаяСтрока = Отборы.ПолучитьЭлементы()[0];
Иначе
КорневаяСтрока = Отборы.ПолучитьЭлементы()[1];
КонецЕсли;
ИначеЕсли ИмяКоллекции = "Оформление" Тогда
Если Не РежимИзмененияЭлементаСтруктурыНастроек Тогда
КорневаяСтрока = Оформление;
КонецЕсли;
КонецЕсли;
Возврат КорневаяСтрока;
КонецФункции
&НаКлиенте
Процедура ВыбратьПоле(ИмяКоллекции, Обработчик, Поле = Неопределено, ИдентификаторУзлаНастроек = Неопределено)
ПараметрыВыбора = Новый Структура;
ПараметрыВыбора.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыВыбора.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек);
ПараметрыВыбора.Вставить("Режим", ИмяКоллекции);
ПараметрыВыбора.Вставить("ПолеКД", Поле);
ПараметрыВыбора.Вставить("ИдентификаторЭлементаСтруктурыНастроек",
?(ИдентификаторУзлаНастроек = Неопределено, ИдентификаторЭлементаСтруктурыНастроек, ИдентификаторУзлаНастроек));
ОткрытьФорму(
"ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ВыборПоляОтчета",
ПараметрыВыбора, ЭтотОбъект, УникальныйИдентификатор,,, Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗаголовокЭлементаСтруктурыВарианта(Строка)
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(Отчет.КомпоновщикНастроек, "Структура");
ЭлементНастройки = ЭлементНастройки(СвойствоЭлементаСтруктуры, Строка);
Если ЭлементНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
ЗначениеПараметра = ЭлементНастройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок"));
Если ЗначениеПараметра <> Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
Если ЗначениеЗаполнено(Строка.Заголовок) Тогда
ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить;
Иначе
ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
КонецЕсли;
КонецЕсли;
ЗначениеПараметра = ЭлементНастройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок"));
Если ЗначениеПараметра <> Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = Строка.Заголовок;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область КлиентИлиСервер
&НаКлиентеНаСервереБезКонтекста
Функция МассивСортировать(ИсходныйМассив, Направление = Неопределено)
Если Направление = Неопределено Тогда
Направление = НаправлениеСортировки.Возр;
КонецЕсли;
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(ИсходныйМассив);
Список.СортироватьПоЗначению(Направление);
Возврат Список.ВыгрузитьЗначения();
КонецФункции
#КонецОбласти
#Область ВызовСервера
&НаСервере
Процедура ОбновитьФорму(ПараметрыОбновления)
СодержитВложенныеОтчеты = Ложь;
СодержитВложенныеОтборы = Ложь;
СодержитВложенныеПоляИлиСортировки = Ложь;
СодержитВложенноеУсловноеОформление = Ложь;
СодержитПользовательскиеЭлементыСтруктуры = Ложь;
ЗагрузитьНастройкиВКомпоновщик(ПараметрыОбновления);
Если РасширенныйРежим = 0 Тогда
ОтчетыСервер.ОбновитьЭлементыФормыНастроек(ЭтотОбъект, Элементы.Основное, ПараметрыОбновления);
КонецЕсли;
ОбновитьКоллекцииФормыНастроек();
УстановитьТипДиаграммы();
ОбновитьСвойстваЭлементовФормы();
КонецПроцедуры
&НаСервере
Процедура ОбновитьКоллекцииФормыНастроек()
СоставГруппировки.ПолучитьЭлементы().Очистить();
Отборы.ПолучитьЭлементы().Очистить();
ВыбранныеПоля.ПолучитьЭлементы().Очистить();
Сортировка.ПолучитьЭлементы().Очистить();
Оформление.ПолучитьЭлементы().Очистить();
СтруктураВарианта.ПолучитьЭлементы().Очистить();
УстановитьТипДиаграммы();
ОбновитьПоляГруппировки();
ОбновитьПараметрыДанных();
ОбновитьОтборы();
ОбновитьВыбранныеПоля();
ОбновитьСортировку();
ОбновитьОформление();
ОбновитьСтруктуру();
ПомеченныеНаУдаление.Очистить();
НесуществующиеПоля = Новый Соответствие;
НайтиПомеченныеНаУдалениеПоля();
УстановитьПодсказкуНесуществующихПолей(НесуществующиеПоля);
КонецПроцедуры
&НаСервере
Процедура УстановитьТипДиаграммы()
Элементы.ТекущийТипДиаграммы.Видимость = Ложь;
Если ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных" Тогда
Возврат;
КонецЕсли;
Элементы.ТекущийТипДиаграммы.ОграничениеТипа = Новый ОписаниеТипов("ТипДиаграммы");
ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторЭлементаСтруктурыНастроек);
Если ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
ЭлементСтруктуры = ЭлементСтруктуры.Настройки;
КонецЕсли;
ЭлементНастройки = ЭлементСтруктуры.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ТипДиаграммы"));
Если ЭлементНастройки <> Неопределено Тогда
ТекущийТипДиаграммы = ЭлементНастройки.Значение;
КонецЕсли;
Элементы.ТекущийТипДиаграммы.Видимость = (ЭлементНастройки <> Неопределено);
КонецПроцедуры
&НаСервере
Процедура ОбновитьСвойстваЭлементовФормы()
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
#Область ОбщиеПризнакиСвойствЭлементов
ЭтоРасширенныйРежим = Булево(РасширенныйРежим);
ОтображатьИнформацию = ЭтоРасширенныйРежим И Не РежимИзмененияЭлементаСтруктурыНастроек;
#КонецОбласти
#Область СвойстваЭлементовПростогоРежимаРедактирования
Элементы.Основное.Видимость = Не ЭтоРасширенныйРежим;
Элементы.Дополнительно.Видимость = Не ЭтоРасширенныйРежим И Не ЭтоМобильныйКлиент;
Элементы.ВыводитьЗаголовок.Видимость = Не ЭтоРасширенныйРежим;
Элементы.ВыводитьФильтры.Видимость = Не ЭтоРасширенныйРежим;
#КонецОбласти
#Область СвойстваЭлементовСтраницыСоставГруппировки
ОтображатьСоставГруппировки = (ЭтоРасширенныйРежим
И РежимИзмененияЭлементаСтруктурыНастроек
И ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных");
Элементы.СтраницаСоставГруппировки.Видимость = ОтображатьСоставГруппировки;
Элементы.КомандыСоставаГруппировки.Видимость = ОтображатьСоставГруппировки;
Элементы.СоставГруппировки.Видимость = ОтображатьСоставГруппировки;
#КонецОбласти
#Область СвойстваЭлементовСтраницыОтборы
ОтображатьОтборы = (ЭтоРасширенныйРежим
И ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных");
Если ЭтоРасширенныйРежим Тогда
Элементы.СтраницаОтборы.Заголовок = НСтр("ru = 'Фильтры'");
Иначе
Элементы.СтраницаОтборы.Заголовок = НСтр("ru = 'Основное'");
Если ЭтоМобильныйКлиент Тогда
ГруппаПользовательскиеНастройкиОсновные = Элементы.Основное.ПодчиненныеЭлементы.Найти("КомпоновщикНастроекПользовательскиеНастройкиОсновные");
Если ГруппаПользовательскиеНастройкиОсновные <> Неопределено Тогда
Если Элементы.Основное.ПодчиненныеЭлементы.Количество() = 1
И Элементы.Основное.Вид = ВидГруппыФормы.Страницы Тогда
Элементы.Основное.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
Иначе
Для Каждого ПодчиненныйЭлемент Из Элементы.Основное.ПодчиненныеЭлементы Цикл
Если ПодчиненныйЭлемент = ГруппаПользовательскиеНастройкиОсновные Тогда
Продолжить;
КонецЕсли;
Для Каждого ПодчиненныйЭлемент1 Из ПодчиненныйЭлемент.ПодчиненныеЭлементы Цикл
Если ТипЗнч(ПодчиненныйЭлемент1) = Тип("ТаблицаФормы") Тогда
ПодчиненныйЭлемент1.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
ПодчиненныйЭлемент1.Шапка = Ложь;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если ГруппаПользовательскиеНастройкиОсновные.ПодчиненныеЭлементы.Найти(ГруппаПользовательскиеНастройкиОсновные.Имя+"1") = Неопределено Тогда
ГруппаПользовательскиеНастройкиОсновные1 = Элементы.Добавить(ГруппаПользовательскиеНастройкиОсновные.Имя+"1", Тип("ГруппаФормы"), ГруппаПользовательскиеНастройкиОсновные);
ГруппаПользовательскиеНастройкиОсновные1.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаПользовательскиеНастройкиОсновные1.ОтображатьЗаголовок = Ложь;
ГруппаПользовательскиеНастройкиОсновные1.ГоризонтальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;
ГруппаПользовательскиеНастройкиОсновные1.ВертикальныйИнтервал = ИнтервалМеждуЭлементамиФормы.Нет;
Счетчик = 0;
Пока Счетчик < ГруппаПользовательскиеНастройкиОсновные.ПодчиненныеЭлементы.Количество() Цикл
ПодчиненныйЭлемент = ГруппаПользовательскиеНастройкиОсновные.ПодчиненныеЭлементы[Счетчик];
Если ПодчиненныйЭлемент = ГруппаПользовательскиеНастройкиОсновные1 Тогда
Счетчик = Счетчик + 1;
Иначе
Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") Тогда
ПодчиненныйЭлемент.Объединенная = Ложь;
КонецЕсли;
Элементы.Переместить(ПодчиненныйЭлемент, ГруппаПользовательскиеНастройкиОсновные1);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Элементы.Отборы.Видимость = ОтображатьОтборы;
Элементы.ГруппаЕстьВложенныеОтборы.Видимость = ОтображатьОтборы
И СодержитВложенныеОтборы
И ОтображатьИнформацию;
Элементы.ОтборыПерейтиКНастройкамДляТехническогоСпециалиста.Видимость = ЭтоРасширенныйРежим
И Не РежимИзмененияЭлементаСтруктурыНастроек;
#КонецОбласти
#Область СвойстваЭлементовСтраницыПоляИСортировки
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
КомпоновщикНастроек, "Выбор", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ОтображатьВыбранныеПоля =
СвойствоЭлементаСтруктуры <> Неопределено
И (ЗначениеЗаполнено(СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки) Или ЭтоРасширенныйРежим);
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
КомпоновщикНастроек, "Порядок", ИдентификаторЭлементаСтруктурыНастроек, РасширенныйРежим);
ОтображатьСортировки =
ТипЭлементаСтруктурыНастроек <> "ДиаграммаКомпоновкиДанных"
И СвойствоЭлементаСтруктуры <> Неопределено
И (ЗначениеЗаполнено(СвойствоЭлементаСтруктуры.ИдентификаторПользовательскойНастройки) Или ЭтоРасширенныйРежим);
Если ОтображатьВыбранныеПоля И ОтображатьСортировки Тогда
Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля и сортировки'");
ИначеЕсли ОтображатьВыбранныеПоля Тогда
Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Поля'");
ИначеЕсли ОтображатьСортировки Тогда
Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = НСтр("ru = 'Сортировки'");
КонецЕсли;
Элементы.ВыбранныеПоля.Видимость = ОтображатьВыбранныеПоля;
Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим;
Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление1.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим;
Элементы.КомандыВыбранныхПолей_Группы.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим;
Элементы.КомандыВыбранныхПолей_Группы1.Видимость = ОтображатьВыбранныеПоля И ЭтоРасширенныйРежим;
Элементы.КомандыПолейИСортировок.Видимость = ОтображатьВыбранныеПоля И ОтображатьСортировки;
Элементы.Сортировка.Видимость = ОтображатьСортировки;
Элементы.КомандыСортировки_ДобавлениеУдаление.Видимость = ОтображатьСортировки И ЭтоРасширенныйРежим;
Элементы.КомандыСортировки_ДобавлениеУдаление1.Видимость = ОтображатьСортировки И ЭтоРасширенныйРежим;
Элементы.ГруппаЕстьВложенныеПоляИлиСортировки.Видимость = СодержитВложенныеПоляИлиСортировки И ОтображатьИнформацию;
Элементы.ВыбранныеПоляПерейтиКНастройкамДляТехническогоСпециалиста.Видимость = ЭтоРасширенныйРежим
И Не РежимИзмененияЭлементаСтруктурыНастроек;
#КонецОбласти
#Область СвойстваЭлементовСтраницыОформление
ОтображатьОформление = ЭтоРасширенныйРежим;
Элементы.Оформление.Видимость = ОтображатьОформление;
Элементы.ГруппаЕстьВложенноеОформление.Видимость = ОтображатьОформление
И СодержитВложенноеУсловноеОформление
И ОтображатьИнформацию;
Элементы.ОформлениеПерейтиКНастройкамДляТехническогоСпециалиста.Видимость = ЭтоРасширенныйРежим
И Не РежимИзмененияЭлементаСтруктурыНастроек;
#КонецОбласти
#Область СвойстваЭлементовСтраницыСтруктураВарианта
ОтображатьСтруктуруВарианта =
НастройкиОтчета.РазрешеноИзменятьСтруктуру
И Не РежимИзмененияЭлементаСтруктурыНастроек
И (СодержитПользовательскиеЭлементыСтруктуры Или ЭтоРасширенныйРежим);
Элементы.СтраницаСтруктураВарианта.Видимость = ОтображатьСтруктуруВарианта;
Элементы.КомандыСтруктурыВарианта_Добавление.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_Добавление1.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_Изменение.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_Изменение1.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии1.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_ДвижениеВИерархии.Видимость = ЭтоРасширенныйРежим;
Элементы.КомандыСтруктурыВарианта_ДвижениеВИерархии1.Видимость = ЭтоРасширенныйРежим;
Элементы.СтруктураВарианта.ИзменятьСоставСтрок = ЭтоРасширенныйРежим;
Элементы.СтруктураВарианта.ИзменятьПорядокСтрок = ЭтоРасширенныйРежим;
Элементы.СтруктураВарианта.РазрешитьНачалоПеретаскивания = ЭтоРасширенныйРежим;
Элементы.СтруктураВарианта.РазрешитьПеретаскивание = ЭтоРасширенныйРежим;
Элементы.СтруктураВарианта.Шапка = ЭтоРасширенныйРежим;
Элементы.СтруктураВариантаЗаголовок.Видимость = ЭтоРасширенныйРежим;
Элементы.СтруктураВариантаСодержитОтборы.Видимость = ЭтоРасширенныйРежим;
Элементы.СтруктураВариантаСодержитПоляИлиСортировки.Видимость = ЭтоРасширенныйРежим;
Элементы.СтруктураВариантаСодержитУсловноеОформление.Видимость = ЭтоРасширенныйРежим;
Элементы.СтруктураВариантаПерейтиКНастройкамДляТехническогоСпециалиста.Видимость = ЭтоРасширенныйРежим
И Не РежимИзмененияЭлементаСтруктурыНастроек;
#КонецОбласти
#Область ОбщиеСвойстваЭлементов
Если ТипЗнч(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ОтображатьСтраницы", Неопределено)) = Тип("Булево") Тогда
ОтображатьСтраницы = (Параметры.ОтображатьСтраницы <> Ложь);
ИначеЕсли Не ЭтоРасширенныйРежим Тогда
ОтображатьСтраницы = Ложь;
Иначе
ОтображатьСтраницы =
ОтображатьСоставГруппировки
Или ОтображатьОтборы
Или ОтображатьВыбранныеПоля
Или ОтображатьСортировки
Или ОтображатьОформление
Или ОтображатьСтруктуруВарианта;
КонецЕсли;
Если ОтображатьСтраницы Тогда
Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
Иначе
Элементы.СтраницыНастроек.ТекущаяСтраница = Элементы.СтраницаОтборы;
Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
КонецЕсли;
Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = СодержитВложенныеОтчеты И ОтображатьИнформацию;
Элементы.ГруппаЕстьНесуществующиеПоля.Видимость = ПомеченныеНаУдаление.Количество() > 0 И ОтображатьИнформацию;
Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноИзменятьВарианты И Не РежимИзмененияЭлементаСтруктурыНастроек;
Элементы.ИзменитьУсловияОтборов.Видимость = РазрешитьИзменятьУсловияОтборов();
Если РежимИзмененияЭлементаСтруктурыНастроек Тогда
Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Завершить редактирование'");
Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'");
Иначе
Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Закрыть и сформировать'");
Элементы.Закрыть.Заголовок = НСтр("ru = 'Закрыть'");
КонецЕсли;
КоличествоДоступныхНастроек = ОтчетыСервер.КоличествоДоступныхНастроек(Отчет.КомпоновщикНастроек);
Элементы.ЗакрытьИСформировать.Видимость = КоличествоДоступныхНастроек.Итог > 0 Или ОтображатьСтраницы;
Если ЭтоМобильныйКлиент Тогда
Элементы.РасширенныйРежим.Видимость = Ложь;
Элементы.ГруппаНастройка.Видимость = Ложь;
Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = Истина;
Элементы.ПодсказкаЕстьВложенныеОтчеты.Заголовок = НСтр(
"ru='Расширенный режим настройки недоступен в мобильном клиенте'");
Элементы.ЗакрытьИСформировать.Отображение = ОтображениеКнопки.КартинкаИТекст;
Элементы.Закрыть.Видимость = Ложь;
Элементы.Справка.Видимость = Ложь;
КонецЕсли;
#КонецОбласти
КонецПроцедуры
#КонецОбласти
#Область Сервер
&НаСервере
Процедура ОпределитьПоведениеВМобильномКлиенте()
ЭтоМобильныйКлиент = ОбщегоНазначения.ЭтоМобильныйКлиент();
Если Не ЭтоМобильныйКлиент Тогда
Возврат;
КонецЕсли;
ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто;
Элементы.ЗакрытьИСформировать.Отображение = ОтображениеКнопки.Картинка;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
#Область УсловноеОформлениеТаблицыФормыСоставГруппировки
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.ПоказыватьТипДополнения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипГруппировки.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.ПоказыватьТипДополнения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипДополнения.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.Поле");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Неопределено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиТипГруппировки.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СоставГруппировки.Заголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("СоставГруппировки.Заголовок"));
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставГруппировкиПоле.Имя);
#КонецОбласти
#Область УсловноеОформлениеТаблицыФормыОтборы
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИспользование.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПериод");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ОтображатьИспользование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыИспользование.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПараметр");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыКартинкаРежимаОтображения.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыВидСравнения.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.Заголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Отборы.ТипГруппы"));
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоУникальныйИдентификатор");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.Заголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Отборы.Заголовок"));
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПараметр.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыТипГруппы.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПоле.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ПредставлениеЗначения");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Отборы.ПредставлениеЗначения"));
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыЗначение.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПравоеЗначение.Имя);
ЦветТекстаЗапрещеннойЯчейки = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет;
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Отборы.ЭтоПредопределенныйЗаголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки.Значение);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтборыПредставлениеПользовательскойНастройки.Имя);
#КонецОбласти
#Область УсловноеОформлениеТаблицыФормыВыбранныеПоля
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеПоля.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеПоляИспользование.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВыбранныеПоля.Заголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("ВыбранныеПоля.Заголовок"));
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ВыбранныеПоляПоле.Имя);
#КонецОбласти
#Область УсловноеОформлениеТаблицыФормыСортировка
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаИспользование.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаТипУпорядочивания.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.ЭтоАвтоПоле");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаТипУпорядочивания.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сортировка.Заголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Сортировка.Заголовок"));
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СортировкаПоле.Имя);
#КонецОбласти
#Область УсловноеОформлениеТаблицыФормыОформление
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеЗаголовок.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оформление.ЭтоПараметрВывода");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеИндексКартинкиДоступа.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оформление.ЭтоПараметрВывода");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеИспользование.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеЗаголовок.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформлениеИндексКартинкиДоступа.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оформление.ЭтоРаздел");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
#Область УсловноеОформлениеТаблицыФормыСтруктураВарианта
ШрифтВажнойНадписи = Метаданные.ЭлементыСтиля.ВажнаяНадписьШрифт.Значение;
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтВажнойНадписи);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.Заголовок");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РасширенныйРежим");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("СтруктураВарианта.Заголовок"));
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтВажнойНадписи);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаПредставление.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтруктураВарианта.ФлажокДоступен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтруктураВариантаИспользование.Имя);
#КонецОбласти
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройкиВКомпоновщик(ПараметрыЗагрузки)
Если Не ПараметрыЗагрузки.ВариантМодифицирован Тогда
ПараметрыЗагрузки.ВариантМодифицирован = ВариантМодифицирован;
КонецЕсли;
Если Не ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы Тогда
ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы = ПользовательскиеНастройкиМодифицированы;
КонецЕсли;
ПараметрыЗагрузки.ОтчетОбъектИлиПолноеИмя = НастройкиОтчета.ПолноеИмя;
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда
ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗагрузки);
КонецЕсли;
ДоступныеНастройки = ОтчетыСервер.ДоступныеНастройки(ПараметрыЗагрузки, НастройкиОтчета);
ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗагрузки, "ОбновитьНастройкиВарианта", Ложь);
Если ОбновитьНастройкиВарианта Тогда
ДоступныеНастройки.Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных);
ДоступныеНастройки.ФиксированныеНастройки = Отчет.КомпоновщикНастроек.ФиксированныеНастройки;
КонецЕсли;
ОтчетыСервер.СброситьПользовательскиеНастройки(ДоступныеНастройки, ПараметрыЗагрузки);
ОтчетыСервер.ЗаполнитьДополнительныеСвойства(ОтчетОбъект,
ДоступныеНастройки.Настройки,
КлючТекущегоВарианта,
НастройкиОтчета.КлючПредопределенногоВарианта);
Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда
ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик(
ЭтотОбъект,
НастройкиОтчета.КлючСхемы,
КлючТекущегоВарианта,
ДоступныеНастройки.Настройки,
ДоступныеНастройки.ПользовательскиеНастройки);
КонецЕсли;
НастройкиЗагружены = ОтчетыКлиентСервер.ЗагрузитьНастройки(
Отчет.КомпоновщикНастроек,
ДоступныеНастройки.Настройки,
ДоступныеНастройки.ПользовательскиеНастройки,
ДоступныеНастройки.ФиксированныеНастройки);
Если НастройкиЗагружены
И ВариантыОтчетов.ДопустимоУстановитьКонтекст(ЭтотОбъект)
И ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда
ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек.Настройки, НастройкиОтчета);
КонецЕсли;
Если ФормаПараметры.Свойство("ФиксированныеНастройки") Тогда
ФормаПараметры.ФиксированныеНастройки = Отчет.КомпоновщикНастроек.ФиксированныеНастройки;
КонецЕсли;
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
Если НастройкиОтчета.События.ПослеЗагрузкиНастроекВКомпоновщик Тогда
ОтчетОбъект.ПослеЗагрузкиНастроекВКомпоновщик(Новый Структура);
КонецЕсли;
ОтчетыСервер.УстановитьДоступныеЗначения(ОтчетОбъект, ЭтотОбъект);
ОтчетыСервер.ИнициализироватьПредопределенныеПараметрыВывода(НастройкиОтчета, ДоступныеНастройки.Настройки);
Если ПараметрыЗагрузки.УсловияОтборов <> Неопределено Тогда
ПользовательскиеНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки;
Для Каждого Условие Из ПараметрыЗагрузки.УсловияОтборов Цикл
ЭлементПользовательскойНастройки = ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(Условие.Ключ);
Если ЭлементПользовательскойНастройки <> Неопределено Тогда
ЭлементПользовательскойНастройки.ВидСравнения = Условие.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИнициализироватьРеквизитыПредопределенныхПараметровВывода();
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
ОтчетыСервер.УстановитьУсловияОтборов(ПараметрыЗагрузки, КомпоновщикНастроек);
Если ПараметрыЗагрузки.ВариантМодифицирован Тогда
ВариантИзменен = Истина;
КонецЕсли;
Если ПараметрыЗагрузки.ПользовательскиеНастройкиМодифицированы Тогда
ПользовательскиеНастройкиМодифицированы = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИнициализироватьРеквизитыПредопределенныхПараметровВывода()
ПредопределенныеПараметры = Отчет.КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы;
Объект = ПредопределенныеПараметры.Найти("TITLE");
ВыводитьЗаголовок = Объект.Использование;
ПолеВыводаЗаголовка = Элементы.Найти("ВыводитьЗаголовок");
Если ПолеВыводаЗаголовка <> Неопределено Тогда
ПолеВыводаЗаголовка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выводить заголовок для печати: %1'"),
?(ЗначениеЗаполнено(Объект.Значение), Объект.Значение, НСтр("ru = '<Отсутствует>'")));
КонецЕсли;
Объект = ПредопределенныеПараметры.Найти("DATAPARAMETERSOUTPUT");
СвязанныйОбъект = ПредопределенныеПараметры.Найти("FILTEROUTPUT");
ВыводитьФильтры = (Объект.Значение <> ТипВыводаТекстаКомпоновкиДанных.НеВыводить
Или СвязанныйОбъект.Значение <> ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
КонецПроцедуры
&НаСервере
Функция ПолноеИмяРеквизита(Реквизит)
Возврат ?(ПустаяСтрока(Реквизит.Путь), "", Реквизит.Путь + ".") + Реквизит.Имя;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТиповБезПримитивных(ИсходноеОписаниеТипов)
ВычитаемыеТипы = Новый Массив;
Если ИсходноеОписаниеТипов.СодержитТип(Тип("Строка")) Тогда
ВычитаемыеТипы.Добавить(Тип("Строка"));
КонецЕсли;
Если ИсходноеОписаниеТипов.СодержитТип(Тип("Дата")) Тогда
ВычитаемыеТипы.Добавить(Тип("Дата"));
КонецЕсли;
Если ИсходноеОписаниеТипов.СодержитТип(Тип("Число")) Тогда
ВычитаемыеТипы.Добавить(Тип("Число"));
КонецЕсли;
Если ВычитаемыеТипы.Количество() = 0 Тогда
Возврат ИсходноеОписаниеТипов;
КонецЕсли;
Возврат Новый ОписаниеТипов(ИсходноеОписаниеТипов, , ВычитаемыеТипы);
КонецФункции
&НаКлиенте
Процедура ОформитьСписок(Элемент, ЭлементНастройки)
Значение = Неопределено;
Если ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Значение = ЭлементНастройки.Значение;
ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Значение = ЭлементНастройки.ПравоеЗначение;
КонецЕсли;
Если ТипЗнч(Значение) <> Тип("СписокЗначений") Тогда
Возврат;
КонецЕсли;
Индекс = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Индекс(ЭлементНастройки);
ПутьКСписку = ПутьКДаннымЭлементов.ПоИндексу[Индекс];
Если ПутьКСписку = Неопределено Тогда
Возврат;
КонецЕсли;
Список = Элементы.Найти(ПутьКСписку);
Если ЭлементНастройки.Использование Тогда
Список.ЦветТекста = Новый Цвет;
Иначе
ПараметрКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента();
Список.ЦветТекста = ПараметрКлиента.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция РазрешитьИзменятьУсловияОтборов()
Если Булево(РасширенныйРежим) Тогда
Возврат Ложь;
КонецЕсли;
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл
ЭлементНастройки = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(
КомпоновщикНастроек.Настройки,
ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки,,
ПользовательскиеНастройки);
Если ТипЗнч(ЭлементНастройки) <> Тип("ЭлементОтбораКомпоновкиДанных")
Или ТипЗнч(ЭлементНастройки.ПравоеЗначение) = Тип("СтандартныйПериод")
Или ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
Продолжить;
КонецЕсли;
Возврат Истина;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура УстановитьМодифицированность()
ПользовательскиеНастройкиМодифицированы = Истина;
Если РасширенныйРежим = 1 Тогда
ВариантИзменен = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработкаПомеченныхНаУдалениеПолей
&НаСервере
Процедура НайтиПомеченныеНаУдалениеПоля(Знач ЭлементыСтруктуры = Неопределено)
Если РежимИзмененияЭлементаСтруктурыНастроек Тогда
Возврат;
КонецЕсли;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Если ЭлементыСтруктуры = Неопределено Тогда
ЭлементыСтруктуры = Настройки.Структура;
НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки);
НайтиПомеченныеНаУдалениеПоляОтбора(Настройки);
НайтиПомеченныеНаУдалениеПоляПорядка(Настройки);
НайтиПомеченныеНаУдалениеЭлементыУсловногоОформления(Настройки);
КонецЕсли;
Для Каждого ЭлементСтруктуры Из ЭлементыСтруктуры Цикл
ТипЭлемента = ТипЗнч(ЭлементСтруктуры);
Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных")
Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных")
Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки, ЭлементСтруктуры);
НайтиПомеченныеНаУдалениеПоляОтбора(Настройки, ЭлементСтруктуры);
НайтиПомеченныеНаУдалениеПоляПорядка(Настройки, ЭлементСтруктуры);
НайтиПомеченныеНаУдалениеЭлементыУсловногоОформления(Настройки, ЭлементСтруктуры);
НайтиПомеченныеНаУдалениеПоляГруппировки(Настройки, ЭлементСтруктуры);
КонецЕсли;
ИменаКоллекций = ИменаКоллекцийЭлементаСтруктуры(ЭлементСтруктуры);
Для Каждого ИмяКоллекции Из ИменаКоллекций Цикл
КоллекцияЭлементаСтруктуры = ЭлементыНастроек(ЭлементСтруктуры,, ИмяКоллекции);
НайтиПомеченныеНаУдалениеПоля(КоллекцияЭлементаСтруктуры);
КонецЦикла;
КонецЦикла;
Обработанные = ПомеченныеНаУдаление.Выгрузить();
Обработанные.Свернуть("ИдентификаторЭлементаСтруктуры, ИдентификаторЭлемента, КлючСвойстваЭлементаСтруктуры");
Обработанные.Сортировать("ИдентификаторЭлементаСтруктуры Убыв, КлючСвойстваЭлементаСтруктуры, ИдентификаторЭлемента");
ПомеченныеНаУдаление.Загрузить(Обработанные);
КонецПроцедуры
&НаСервере
Процедура НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки, Знач ЭлементСтруктуры = Неопределено, Группа = Неопределено)
Если ЭлементСтруктуры = Неопределено Тогда
ЭлементСтруктуры = Настройки;
КонецЕсли;
СвойствоЭлементаСтруктуры = ЭлементСтруктуры.Выбор;
ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляВыбора;
ТипАвтоПоля = Тип("АвтоВыбранноеПолеКомпоновкиДанных");
ТипГруппы = Тип("ГруппаВыбранныхПолейКомпоновкиДанных");
ЭлементыНастроек = ?(Группа = Неопределено, СвойствоЭлементаСтруктуры.Элементы, Группа.Элементы);
Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл
Если ТипЗнч(ЭлементНастройки) = ТипГруппы Тогда
НайтиПомеченныеНаУдалениеВыбранныеПоля(Настройки, ЭлементСтруктуры, ЭлементНастройки);
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементНастройки) = ТипАвтоПоля
Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.Поле) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Запись = ПомеченныеНаУдаление.Добавить();
Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Запись.КлючСвойстваЭлементаСтруктуры = "Выбор";
ДобавитьНесуществующееПоле(ЭлементНастройки.Поле, НСтр("ru = 'Выбор'"));
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НайтиПомеченныеНаУдалениеПоляОтбора(Настройки, Знач ЭлементСтруктуры = Неопределено, Группа = Неопределено)
Если ЭлементСтруктуры = Неопределено Тогда
ЭлементСтруктуры = Настройки;
КонецЕсли;
СвойствоЭлементаСтруктуры = ЭлементСтруктуры.Отбор;
ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора;
ТипГруппы = Тип("ГруппаЭлементовОтбораКомпоновкиДанных");
ЭлементыНастроек = ?(Группа = Неопределено, СвойствоЭлементаСтруктуры.Элементы, Группа.Элементы);
Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл
Если ТипЗнч(ЭлементНастройки) = ТипГруппы Тогда
НайтиПомеченныеНаУдалениеПоляОтбора(Настройки, ЭлементСтруктуры, ЭлементНастройки);
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементНастройки.ЛевоеЗначение) <> Тип("ПолеКомпоновкиДанных")
Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.ЛевоеЗначение) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Запись = ПомеченныеНаУдаление.Добавить();
Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Запись.КлючСвойстваЭлементаСтруктуры = "Отбор";
ДобавитьНесуществующееПоле(ЭлементНастройки.ЛевоеЗначение, НСтр("ru = 'Отбор'"));
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НайтиПомеченныеНаУдалениеПоляПорядка(Настройки, Знач ЭлементСтруктуры = Неопределено)
Если ЭлементСтруктуры = Неопределено Тогда
ЭлементСтруктуры = Настройки;
КонецЕсли;
СвойствоЭлементаСтруктуры = ЭлементСтруктуры.Порядок;
ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляПорядка;
ТипАвтоПоля = Тип("АвтоЭлементПорядкаКомпоновкиДанных");
Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл
Если ТипЗнч(ЭлементНастройки) = ТипАвтоПоля
Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.Поле) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Запись = ПомеченныеНаУдаление.Добавить();
Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Запись.КлючСвойстваЭлементаСтруктуры = "Порядок";
ДобавитьНесуществующееПоле(ЭлементНастройки.Поле, НСтр("ru = 'Порядок'"));
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НайтиПомеченныеНаУдалениеЭлементыУсловногоОформления(Настройки, Знач ЭлементСтруктуры = Неопределено)
Если ЭлементСтруктуры = Неопределено Тогда
ЭлементСтруктуры = Настройки;
КонецЕсли;
СвойствоЭлементаСтруктуры = ЭлементСтруктуры.УсловноеОформление;
Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл
ДоступныеПоля = ЭлементНастройки.Поля.ДоступныеПоляОформляемыхПолей;
Для Каждого Элемент Из ЭлементНастройки.Поля.Элементы Цикл
Если ДоступныеПоля.НайтиПоле(Элемент.Поле) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Запись = ПомеченныеНаУдаление.Добавить();
Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Запись.КлючСвойстваЭлементаСтруктуры = "УсловноеОформление";
ДобавитьНесуществующееПоле(Элемент.Поле, НСтр("ru = 'Условное оформление'"));
КонецЦикла;
НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления(Настройки, ЭлементСтруктуры, ЭлементНастройки);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления(Настройки, ЭлементСтруктуры, ЭлементОформления, Группа = Неопределено)
СвойствоЭлементаСтруктуры = ЭлементСтруктуры.УсловноеОформление;
ДоступныеПоля = ЭлементОформления.Отбор.ДоступныеПоляОтбора;
ТипГруппы = Тип("ГруппаЭлементовОтбораКомпоновкиДанных");
ЭлементыНастроек = ?(Группа = Неопределено, ЭлементОформления.Отбор.Элементы, Группа.Элементы);
Для Каждого ЭлементНастройки Из ЭлементыНастроек Цикл
Если ТипЗнч(ЭлементНастройки) = ТипГруппы Тогда
НайтиПомеченныеНаУдалениеЭлементыОтбораУсловногоОформления(
Настройки, ЭлементСтруктуры, ЭлементОформления, ЭлементНастройки);
Продолжить;
КонецЕсли;
Если ДоступныеПоля.НайтиПоле(ЭлементНастройки.ЛевоеЗначение) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Запись = ПомеченныеНаУдаление.Добавить();
Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементОформления);
Запись.КлючСвойстваЭлементаСтруктуры = "УсловноеОформление";
ДобавитьНесуществующееПоле(ЭлементНастройки.ЛевоеЗначение, НСтр("ru = 'Условное оформление'"));
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НайтиПомеченныеНаУдалениеПоляГруппировки(Настройки, ЭлементСтруктуры)
СвойствоЭлементаСтруктуры = ЭлементСтруктуры.ПоляГруппировки;
ДоступныеПоля = СвойствоЭлементаСтруктуры.ДоступныеПоляПолейГруппировок;
ТипАвтоПоля = Тип("АвтоПолеГруппировкиКомпоновкиДанных");
Для Каждого ЭлементНастройки Из СвойствоЭлементаСтруктуры.Элементы Цикл
Если ТипЗнч(ЭлементНастройки) = ТипАвтоПоля
Или ДоступныеПоля.НайтиПоле(ЭлементНастройки.Поле) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Запись = ПомеченныеНаУдаление.Добавить();
Запись.ИдентификаторЭлементаСтруктуры = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементСтруктуры);
Запись.ИдентификаторЭлемента = СвойствоЭлементаСтруктуры.ПолучитьИдентификаторПоОбъекту(ЭлементНастройки);
Запись.КлючСвойстваЭлементаСтруктуры = "ПоляГруппировки";
ДобавитьНесуществующееПоле(ЭлементНастройки.Поле, НСтр("ru = 'Поля группировки'"));
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ИменаКоллекцийЭлементаСтруктуры(Элемент)
ИменаКоллекций = "";
ТипЭлемента = ТипЗнч(Элемент);
Если ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных")
Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных")
Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных")
Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных")
Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") Тогда
ИменаКоллекций = "Структура";
ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных")
Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда
ИменаКоллекций = "Строки,Колонки";
ИначеЕсли ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных")
Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда
ИменаКоллекций = "Точки,Серии";
КонецЕсли;
Возврат СтрРазделить(ИменаКоллекций, ",");
КонецФункции
&НаСервере
Функция ПредставлениеКоллекцииЭлементаСтруктуры(ИмяКоллекции)
ПредставлениеКоллекций = Новый Соответствие;
ПредставлениеКоллекций.Вставить("Структура", НСтр("ru = 'Структура'"));
ПредставлениеКоллекций.Вставить("Строки", НСтр("ru = 'Строки'"));
ПредставлениеКоллекций.Вставить("Колонки", НСтр("ru = 'Колонки'"));
ПредставлениеКоллекций.Вставить("Точки", НСтр("ru = 'Точки'"));
ПредставлениеКоллекций.Вставить("Серии", НСтр("ru = 'Серии'"));
Возврат ПредставлениеКоллекций[ИмяКоллекции];
КонецФункции
&НаСервере
Процедура ДобавитьНесуществующееПоле(Знач ИмяПоля, Знач ИмяКоллекции)
ИмяПоля = Строка(ИмяПоля);
ИмяКоллекции = Строка(ИмяКоллекции);
Свойства = НесуществующиеПоля.Получить(ИмяПоля);
Если Свойства = Неопределено Тогда
Свойства = Новый Массив;
НесуществующиеПоля.Вставить(ИмяПоля, Свойства);
КонецЕсли;
Если Свойства.Найти(ИмяКоллекции) = Неопределено Тогда
Свойства.Добавить(ИмяКоллекции);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПодсказкуНесуществующихПолей(НесуществующиеПоля)
ТекстПодсказки =
НСтр("ru = 'Несуществующие поля могут появиться, если разработчик отчета удалил поле или запретил его вывод.
|Использование таких полей может привести к ошибкам при формировании отчета.
|Рекомендуется удалить несуществующие поля из настроек отчета или заменить их на существующие.'");
Строки = Новый Массив;
Для Каждого КлючИЗначение Из НесуществующиеПоля Цикл
Строки.Добавить("- " + КлючИЗначение.Ключ + " (" + СтрСоединить(КлючИЗначение.Значение, ", ") + ")");
КонецЦикла;
Элементы.ГруппаЕстьНесуществующиеПоля.РасширеннаяПодсказка.Заголовок = ТекстПодсказки
+ Символы.ПС + Символы.ПС
+ НСтр("ru = 'Несуществующие поля:'")
+ Символы.ПС + СтрСоединить(Строки, Символы.ПС);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьПомеченныеНаУдалениеПоля()
КомпоновщикНастроек = Отчет.КомпоновщикНастроек;
Для Каждого Запись Из ПомеченныеНаУдаление Цикл
СвойствоЭлементаСтруктуры = СвойствоЭлементаСтруктурыНастроек(
КомпоновщикНастроек, Запись.КлючСвойстваЭлементаСтруктуры, Запись.ИдентификаторЭлементаСтруктуры, РасширенныйРежим);
Если СвойствоЭлементаСтруктуры = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементНастройки = СвойствоЭлементаСтруктуры.ПолучитьОбъектПоИдентификатору(Запись.ИдентификаторЭлемента);
Если ЭлементНастройки = Неопределено Тогда
Продолжить;
КонецЕсли;
РодительЭлементаНастройки = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементНастройки);
ЭлементыНастроек = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаНастройки);
ЭлементыНастроек.Удалить(ЭлементНастройки);
Если ЭлементыНастроек.Количество() = 0
И ТипЗнч(РодительЭлементаНастройки) = Тип("ПоляГруппировкиКомпоновкиДанных") Тогда
ЭлементСтруктуры = КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Запись.ИдентификаторЭлементаСтруктуры);
Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") Тогда
ЭлементыСтруктуры = ЭлементСтруктуры.Структура;
Если ЭлементыСтруктуры.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Индекс = ЭлементыСтруктуры.Количество() - 1;
Пока Индекс >= 0 Цикл
ЭлементыСтруктуры.Удалить(ЭлементыСтруктуры[Индекс]);
Индекс = Индекс - 1;
КонецЦикла;
Иначе
РодительЭлементаСтруктуры = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементСтруктуры);
ИмяКоллекции = ИмяКоллекцииНастроекПоИдентификатору(Запись.ИдентификаторЭлементаСтруктуры);
ЭлементыСтруктуры = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаСтруктуры, ИмяКоллекции);
ЭлементыСтруктуры.Удалить(ЭлементСтруктуры);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УстановитьМодифицированность();
КонецПроцедуры
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Функция ЭлементКоллекцииФормыНастроек(Коллекция)
Если Коллекция.ПолучитьЭлементы().Количество() = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Коллекция.ПолучитьЭлементы()[0];
КонецФункции
#Область ОпределениеДанныхВыбораЭлементаОтбора
&НаКлиенте
Процедура ОпределитьДанныеВыбораЭлементаОтбораПоЗапросу(ИсходныйЗапрос, ДанныеВыбора, ДоступныеПоля, Запрос = Неопределено, Родитель = Неопределено, Индекс = 0)
Если ДанныеВыбора = Неопределено Тогда
ДанныеВыбора = Новый СписокЗначений;
КонецЕсли;
Если Запрос = Неопределено Тогда
Запрос = ИсходныйЗапрос;
КонецЕсли;
ОписаниеЗапроса = СтрРазделить(Запрос, ".", Ложь);
Если СтрЗаканчиваетсяНа(Запрос, ".") Тогда
ОписаниеЗапроса.Добавить(". ");
КонецЕсли;
Пока Индекс <= ОписаниеЗапроса.ВГраница() Цикл
ФрагментЗапроса = СокрЛП(ОписаниеЗапроса[Индекс]);
ДочерниеЭлементы = ?(Родитель = Неопределено, ДоступныеПоля.Элементы, Родитель.Элементы);
Если Индекс = ОписаниеЗапроса.ВГраница() Тогда
ЗаполнитьДанныеВыбораЭлементаОтбора(ИсходныйЗапрос, ДочерниеЭлементы, ДанныеВыбора);
ИначеЕсли ДанныеВыбора.Количество() = 0 Тогда
ПутьКДанным = ФрагментЗапроса;
Если Родитель <> Неопределено Тогда
ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1.%2", Родитель.Поле, ФрагментЗапроса);
КонецЕсли;
Поле = Новый ПолеКомпоновкиДанных(ПутьКДанным);
НайденноеПоле = ДоступныеПоля.НайтиПоле(Поле);
Если НайденноеПоле = Неопределено Тогда
НайденноеПоле = ДоступноеПолеОтбораПоЗаголовку(ФрагментЗапроса, ДочерниеЭлементы);
КонецЕсли;
ОписаниеЗапроса.Удалить(Индекс);
НовыйЗапрос = СтрСоединить(ОписаниеЗапроса, ".");
ОпределитьДанныеВыбораЭлементаОтбораПоЗапросу(
ИсходныйЗапрос, ДанныеВыбора, ДоступныеПоля, НовыйЗапрос, НайденноеПоле, Индекс);
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДанныеВыбораЭлементаОтбора(ИсходныйЗапрос, ДочерниеЭлементы, ДанныеВыбора)
Для Каждого Элемент Из ДочерниеЭлементы Цикл
Если Не Элемент.Папка
И Не Элемент.Таблица
И СтрНачинаетсяС(ВРег(Элемент.Заголовок), ВРег(ИсходныйЗапрос)) Тогда
ПредставлениеЭлемента = ПредставлениеЭлементаОтбора(Элемент, ИсходныйЗапрос);
ДанныеВыбора.Добавить(Элемент.Поле, ПредставлениеЭлемента);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ПредставлениеЭлементаОтбора(ЭлементОтбора, ИсходныйЗапрос)
НачалоЗапроса = СтрНайти(ВРег(ЭлементОтбора.Заголовок), ВРег(ИсходныйЗапрос));
КонецЗапроса = НачалоЗапроса + СтрДлина(ИсходныйЗапрос);
ДлинаНайденногоФрагмента = ?(НачалоЗапроса = 0, 0, СтрДлина(ИсходныйЗапрос));
ФрагментДоЗапроса = Лев(ЭлементОтбора.Заголовок, НачалоЗапроса - 1);
ФрагментЗапроса = ФрагментЗапросаЭлементаОтбора(Сред(ЭлементОтбора.Заголовок, НачалоЗапроса, ДлинаНайденногоФрагмента));
ФрагментПослеЗапроса = Сред(ЭлементОтбора.Заголовок, КонецЗапроса);
Возврат Новый ФорматированнаяСтрока(
ФрагментДоЗапроса,
ФрагментЗапроса,
ФрагментПослеЗапроса);
КонецФункции
&НаКлиенте
Функция ФрагментЗапросаЭлементаОтбора(Запрос)
ШаблонФрагментаЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"<span style=""color: %1; font: %2"">%3</span>",
"МоиВариантыОтчетовЦвет",
"ВажнаяНадписьШрифт",
Запрос);
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
ФрагментЗапроса = СтроковыеФункции.ФорматированнаяСтрока(ШаблонФрагментаЗапроса);
#Иначе
ФрагментЗапроса = СтроковыеФункцииКлиент.ФорматированнаяСтрока(ШаблонФрагментаЗапроса);
#КонецЕсли
Возврат ФрагментЗапроса;
КонецФункции
&НаКлиенте
Функция ДоступноеПолеОтбораПоЗаголовку(ЗаголовокПоля, ДочерниеЭлементы)
Для Каждого Элемент Из ДочерниеЭлементы Цикл
Если Не Элемент.Папка
И Не Элемент.Таблица
И ВРег(Элемент.Заголовок) = ВРег(ЗаголовокПоля) Тогда
Возврат Элемент;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
#КонецОбласти
&НаКлиенте
Процедура ОткрытьФормуНастроекДляТехническогоСпециалиста(ИмяСтраницы, ОбработчикЗавершения = Неопределено)
ПараметрыФормы = Новый Структура;
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина);
ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта));
ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование);
ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек);
ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы);
ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование);
ПараметрыФормы.Вставить("ВариантМодифицирован", ВариантИзменен);
ПараметрыФормы.Вставить("ПользовательскиеНастройкиМодифицированы",
ВариантИзменен Или ПользовательскиеНастройкиМодифицированы);
Если ОбработчикЗавершения <> Неопределено Тогда
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ВладелецФормы, , , ,
ОбработчикЗавершения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ВладелецФормы);
Если ОбработчикЗавершения = Неопределено Тогда
РезультатВыбораСформирован = Истина;
Закрыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыНастроекДляТехническогоСпециалиста(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
ОбновитьФорму(Результат);
КонецЕсли;
КонецПроцедуры
#КонецОбласти