8318 lines
574 KiB
Plaintext
8318 lines
574 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// Copyright (c) 2025, ООО 1С-Софт
|
||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||
// Текст лицензии доступен по ссылке:
|
||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
#Область ОписаниеПеременных
|
||
|
||
&НаКлиенте
|
||
Перем ИсточникПеретаскиванияНаКлиенте;
|
||
&НаКлиенте
|
||
Перем ПриемникПеретаскиванияНаКлиенте;
|
||
&НаКлиенте
|
||
Перем Список_ПередНачаломИзменения;
|
||
&НаСервере
|
||
Перем НесуществующиеПоля;
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработчикиСобытийФормы
|
||
|
||
&НаСервере
|
||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
|
||
УстановитьУсловноеОформление();
|
||
|
||
ОпределитьПоведениеВМобильномКлиенте();
|
||
|
||
ФормаПараметры = ВариантыОтчетов.СохраняемыеПараметрыФормыОтчета(Параметры);
|
||
НастройкиОтчета = Параметры.НастройкиОтчета;
|
||
ВариантНаименование = Параметры.ВариантНаименование;
|
||
|
||
ОписаниеНастроекОтчета = ОписаниеНастроекОтчета(НастройкиОтчета);
|
||
|
||
КлючСохраненияПоложенияОкна = ОписаниеНастроекОтчета.ПолноеИмя;
|
||
Если ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда
|
||
КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "." + КлючТекущегоВарианта;
|
||
КонецЕсли;
|
||
|
||
НастройкиКД = Параметры.Вариант;
|
||
Если НастройкиКД = Неопределено Тогда
|
||
НастройкиКД = Отчет.КомпоновщикНастроек.Настройки;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторЭлементаСтруктурыНастроек = Параметры.ИдентификаторЭлементаСтруктурыНастроек;
|
||
Если ТипЗнч(ИдентификаторЭлементаСтруктурыНастроек) = Тип("ИдентификаторКомпоновкиДанных") Тогда
|
||
РежимИзмененияЭлементаСтруктурыНастроек = Истина;
|
||
Высота = 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 Тогда
|
||
Если ТипЗнч(Результат) <> Тип("ЭлементСпискаЗначений") Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
СтрокаТаблицыВверх = СтруктураВарианта.НайтиПоИдентификатору(Результат.Значение);
|
||
Иначе
|
||
СтрокаТаблицыВверх = ПараметрыВыполнения.СтрокаТаблицыВверх;
|
||
КонецЕсли;
|
||
СтрокаТаблицыВниз = ПараметрыВыполнения.СтрокаТаблицыВниз;
|
||
|
||
// 0. Запомнить перед каким элементом вставлять верхнюю строку.
|
||
СтрокиВниз = СтрокаТаблицыВниз.ПолучитьЭлементы();
|
||
Индекс = СтрокиВниз.Индекс(СтрокаТаблицыВверх);
|
||
МассивИдентификаторовСтрокВниз = Новый Массив;
|
||
Для Каждого СтрокаТаблицы Из СтрокиВниз Цикл
|
||
Если СтрокаТаблицы = СтрокаТаблицыВверх Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
МассивИдентификаторовСтрокВниз.Добавить(СтрокаТаблицы.ПолучитьИдентификатор());
|
||
КонецЦикла;
|
||
|
||
// 1. Переместить нижнюю строку на уровень с верхней.
|
||
ДополнительныеПараметры = ДополнительныеПараметрыПеремещенияЭлементовСтруктурыВарианта();
|
||
ДополнительныеПараметры.ПередЧемВставить = СтрокаТаблицыВниз;
|
||
Результат = ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), ДополнительныеПараметры);
|
||
СтрокаТаблицыВверх = Результат.Строка;
|
||
|
||
// 2. Запомнить какие строки нужно переместить.
|
||
СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы();
|
||
|
||
// 3. Обмен строками.
|
||
Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл
|
||
ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицы, СтрокаТаблицыВниз);
|
||
КонецЦикла;
|
||
Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл
|
||
СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор);
|
||
ПереместитьЭлементыСтруктурыВарианта(СтрокаТаблицы, СтрокаТаблицыВверх);
|
||
КонецЦикла;
|
||
|
||
// 4. Переместить верхнюю строку в нижнюю.
|
||
СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы();
|
||
Если СтрокиВверх.Количество() - 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 - Структура:
|
||
// ** Объект - ЗначениеПараметраКомпоновкиДанных
|
||
// ** Идентификатор - ИдентификаторКомпоновкиДанных
|
||
//
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ПредопределенныеПараметрыВывода(Настройки)
|
||
ПредопределенныеПараметры = Новый Структура("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;
|
||
КонецЦикла;
|
||
Иначе // ГруппировкаТаблицыКомпоновкиДанных или ГруппировкаДиаграммыКомпоновкиДанных.
|
||
РодительЭлементаСтруктуры = ПолучитьРодителяЭлементаНастройки(СвойствоЭлементаСтруктуры, ЭлементСтруктуры);
|
||
ИмяКоллекции = ИмяКоллекцииНастроекПоИдентификатору(Запись.ИдентификаторЭлементаСтруктуры);
|
||
ЭлементыСтруктуры = ЭлементыНастроек(СвойствоЭлементаСтруктуры, РодительЭлементаСтруктуры, ИмяКоллекции);
|
||
ЭлементыСтруктуры.Удалить(ЭлементСтруктуры);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
УстановитьМодифицированность();
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
// АПК:568-выкл выполняет задачу адаптации кода (исправление проблем типизации).
|
||
|
||
// Параметры:
|
||
// Коллекция - ДанныеФормыДерево
|
||
//
|
||
// Возвращаемое значение:
|
||
// ДанныеФормыЭлементДерева:
|
||
// * Идентификатор - ИдентификаторКомпоновкиДанных
|
||
// * Использование - Булево
|
||
// * ОтображатьИспользование - Булево
|
||
// * ПредставлениеПользовательскойНастройки - Строка
|
||
// * ВидСравнения - ВидСравненияКомпоновкиДанных
|
||
// * Значение - Неопределено
|
||
// * ПредставлениеЗначения - Строка
|
||
// * ТипЗначения - ОписаниеТипов
|
||
// * ДоступныеЗначения - СписокЗначений
|
||
// * ДоступенСписокЗначений - Булево
|
||
// * КартинкаРежимаОтображения - Число
|
||
// * Заголовок - Строка
|
||
// * ЭтоПредопределенныйЗаголовок - Булево
|
||
// * ЭтоРаздел - Булево
|
||
// * ЭтоГруппа - Булево
|
||
// * ЭтоПараметр - Булево
|
||
// * ЭтоПериод - Булево
|
||
// * Картинка - Число
|
||
// * ФормаВыбора - Строка
|
||
// * ВыборГруппИЭлементов - ИспользованиеГруппИЭлементов
|
||
// * ДоступныеВидыСравнения - СписокЗначений
|
||
// * Параметр - ПараметрКомпоновкиДанных
|
||
// * ЛевоеЗначение - ПолеКомпоновкиДанных
|
||
// * ПравоеЗначение - Неопределено
|
||
// * ПометкаУдаления - Булево
|
||
// * ЭтоУникальныйИдентификатор - Булево
|
||
//
|
||
&НаКлиентеНаСервереБезКонтекста
|
||
Функция ЭлементКоллекцииФормыНастроек(Коллекция)
|
||
|
||
Если Коллекция.ПолучитьЭлементы().Количество() = 0 Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
Возврат Коллекция.ПолучитьЭлементы()[0];
|
||
|
||
КонецФункции
|
||
|
||
// АПК:568-вкл
|
||
|
||
#Область ОпределениеДанныхВыбораЭлементаОтбора
|
||
|
||
&НаКлиенте
|
||
Процедура ОпределитьДанныеВыбораЭлементаОтбораПоЗапросу(ИсходныйЗапрос, ДанныеВыбора, ДоступныеПоля, Запрос = Неопределено, Родитель = Неопределено, Индекс = 0)
|
||
|
||
Если ДанныеВыбора = Неопределено Тогда
|
||
ДанныеВыбора = Новый СписокЗначений;
|
||
КонецЕсли;
|
||
|
||
Если Запрос = Неопределено Тогда
|
||
Запрос = ИсходныйЗапрос;
|
||
КонецЕсли;
|
||
|
||
ОписаниеЗапроса = СтрРазделить(Запрос, ".", Ложь);
|
||
|
||
Если СтрЗаканчиваетсяНа(Запрос, ".") Тогда
|
||
ОписаниеЗапроса.Добавить(". ");
|
||
КонецЕсли;
|
||
|
||
Пока Индекс <= ОписаниеЗапроса.ВГраница() Цикл
|
||
|
||
ФрагментЗапроса = СокрЛП(ОписаниеЗапроса[Индекс]);
|
||
ДочерниеЭлементы = ?(Родитель = Неопределено, ДоступныеПоля.Элементы, Родитель.Элементы);
|
||
|
||
Если Индекс = ОписаниеЗапроса.ВГраница() Тогда
|
||
|
||
ЗаполнитьДанныеВыбораЭлементаОтбора(ИсходныйЗапрос, ДочерниеЭлементы, ДанныеВыбора);
|
||
|
||
ИначеЕсли ДанныеВыбора.Количество() = 0 Тогда
|
||
|
||
ПутьКДанным = ФрагментЗапроса;
|
||
|
||
Если Родитель <> Неопределено Тогда
|
||
ПутьКДанным = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||
"%1.%2", Родитель.Поле, ФрагментЗапроса);
|
||
КонецЕсли;
|
||
|
||
Поле = Новый ПолеКомпоновкиДанных(ПутьКДанным);
|
||
НайденноеПоле = ДоступныеПоля.НайтиПоле(Поле);
|
||
|
||
Если НайденноеПоле = Неопределено Тогда
|
||
НайденноеПоле = ДоступноеПолеОтбораПоЗаголовку(ФрагментЗапроса, ДочерниеЭлементы);
|
||
КонецЕсли;
|
||
|
||
ОписаниеЗапроса.Удалить(Индекс);
|
||
НовыйЗапрос = СтрСоединить(ОписаниеЗапроса, ".");
|
||
ОпределитьДанныеВыбораЭлементаОтбораПоЗапросу(
|
||
ИсходныйЗапрос, ДанныеВыбора, ДоступныеПоля, НовыйЗапрос, НайденноеПоле, Индекс);
|
||
|
||
КонецЕсли;
|
||
|
||
Индекс = Индекс + 1;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ЗаполнитьДанныеВыбораЭлементаОтбора(ИсходныйЗапрос, ДочерниеЭлементы, ДанныеВыбора)
|
||
|
||
Для Каждого Элемент Из ДочерниеЭлементы Цикл
|
||
|
||
Если Не Элемент.Папка
|
||
И Не Элемент.Таблица
|
||
И СтрНачинаетсяС(ВРег(Элемент.Заголовок), ВРег(ИсходныйЗапрос)) Тогда
|
||
|
||
ПредставлениеЭлемента = ПредставлениеЭлементаОтбора(Элемент, ИсходныйЗапрос);
|
||
ДанныеВыбора.Добавить(Элемент.Поле, ПредставлениеЭлемента);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Функция ПредставлениеЭлементаОтбора(ЭлементОтбора, ИсходныйЗапрос)
|
||
|
||
НачалоЗапроса = СтрНайти(ВРег(ЭлементОтбора.Заголовок), ВРег(ИсходныйЗапрос));
|
||
КонецЗапроса = НачалоЗапроса + СтрДлина(ИсходныйЗапрос);
|
||
ДлинаНайденногоФрагмента = ?(НачалоЗапроса = 0, 0, СтрДлина(ИсходныйЗапрос));
|
||
|
||
ФрагментДоЗапроса = Лев(ЭлементОтбора.Заголовок, НачалоЗапроса - 1);
|
||
ФрагментЗапроса = ФрагментЗапросаЭлементаОтбора(Сред(ЭлементОтбора.Заголовок, НачалоЗапроса, ДлинаНайденногоФрагмента));
|
||
ФрагментПослеЗапроса = Сред(ЭлементОтбора.Заголовок, КонецЗапроса);
|
||
|
||
Возврат Новый ФорматированнаяСтрока(
|
||
ФрагментДоЗапроса,
|
||
ФрагментЗапроса,
|
||
ФрагментПослеЗапроса);
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Функция ФрагментЗапросаЭлементаОтбора(Запрос)
|
||
|
||
ШаблонФрагментаЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
|
||
"<span style=""color: %1; font: %2"">%3</span>",
|
||
"МоиВариантыОтчетовЦвет",
|
||
"ВажнаяНадписьШрифт",
|
||
Запрос);
|
||
|
||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||
ФрагментЗапроса = СтроковыеФункции.ФорматированнаяСтрока(ШаблонФрагментаЗапроса);
|
||
#Иначе
|
||
ФрагментЗапроса = СтроковыеФункцииКлиент.ФорматированнаяСтрока(ШаблонФрагментаЗапроса);
|
||
#КонецЕсли
|
||
|
||
Возврат ФрагментЗапроса;
|
||
|
||
КонецФункции
|
||
|
||
&НаКлиенте
|
||
Функция ДоступноеПолеОтбораПоЗаголовку(ЗаголовокПоля, ДочерниеЭлементы)
|
||
|
||
Для Каждого Элемент Из ДочерниеЭлементы Цикл
|
||
|
||
Если Не Элемент.Папка
|
||
И Не Элемент.Таблица
|
||
И ВРег(Элемент.Заголовок) = ВРег(ЗаголовокПоля) Тогда
|
||
|
||
Возврат Элемент;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
&НаКлиенте
|
||
Процедура ОткрытьФормуНастроекДляТехническогоСпециалиста(ИмяСтраницы, ОбработчикЗавершения = Неопределено)
|
||
|
||
ПараметрыФормы = Новый Структура;
|
||
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина);
|
||
ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта));
|
||
ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
|
||
ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки);
|
||
ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета);
|
||
ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование);
|
||
ПараметрыФормы.Вставить("ИдентификаторЭлементаСтруктурыНастроек", ИдентификаторЭлементаСтруктурыНастроек);
|
||
ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы);
|
||
ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование);
|
||
ПараметрыФормы.Вставить("ВариантМодифицирован", ВариантИзменен);
|
||
ПараметрыФормы.Вставить("ПользовательскиеНастройкиМодифицированы",
|
||
ВариантИзменен Или ПользовательскиеНастройкиМодифицированы);
|
||
|
||
Если ОбработчикЗавершения <> Неопределено Тогда
|
||
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ВладелецФормы, , , ,
|
||
ОбработчикЗавершения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
|
||
Иначе
|
||
ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ВладелецФормы);
|
||
Если ОбработчикЗавершения = Неопределено Тогда
|
||
РезультатВыбораСформирован = Истина;
|
||
Закрыть();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
&НаКлиенте
|
||
Процедура ПриЗакрытииФормыНастроекДляТехническогоСпециалиста(Результат, ДополнительныеПараметры) Экспорт
|
||
|
||
Если ТипЗнч(Результат) = Тип("Структура") Тогда
|
||
ОбновитьФорму(Результат);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти |