#Область ОписаниеПеременных
&НаКлиенте
Перем КонтекстВыбора;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если ОбщегоНазначения.РазделениеВключено() Тогда
ВызватьИсключение НСтр("ru = 'Управление итогами и агрегатами недоступно в модели сервиса.'");
КонецЕсли;
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
ПрочитатьИнформациюПоРегистрам();
ОбновитьСписокИтоговНаСервере();
ОбновитьАгрегатыПоРегистрамНаСервере();
Если АгрегатыПоРегистрам.Количество() <> 0 Тогда
Элементы.СписокАгрегатов.Заголовок = Префикс() + " " + АгрегатыПоРегистрам[0].Наименование;
Иначе
Элементы.СписокАгрегатов.Заголовок = Префикс();
КонецЕсли;
Если СписокИтогов.Количество() = 0 Тогда
Элементы.ГруппаИтогов.Доступность = Ложь;
Элементы.УстановитьПериодРассчитанныхИтогов.Доступность = Ложь;
Элементы.ВключитьИспользованиеИтогов.Доступность = Ложь;
КонецЕсли;
Если АгрегатыПоРегистрам.Количество() = 0 Тогда
Элементы.ГруппаАгрегаты.Доступность = Ложь;
Элементы.ПерестроитьИЗаполнитьАгрегаты.Доступность = Ложь;
Элементы.ПолучитьОптимальныеАгрегаты.Доступность = Ложь;
КонецЕсли;
Элементы.Операции.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
УстановитьРасширенныйРежим();
РассчитатьИтогиНа = ТекущаяДатаСеанса();
Элементы.ОписаниеУстановкиПериода.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Элементы.ОписаниеУстановкиПериода.Заголовок,
Формат(ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)), "DLF=D"),
Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D"));
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
УстановитьРасширенныйРежим();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода") Тогда
Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Установка периода рассчитанных итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Установка периода рассчитанных итогов завершена'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ПериодИтогов");
ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ПериодДляРегистровНакопления);
ПараметрыИтогов.Вставить("Значение2", ВыбранноеЗначение.ПериодДляРегистровБухгалтерии);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось установить период рассчитанных итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения") Тогда
Если ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Если КонтекстВыбора = "ПерестроитьАгрегаты" Тогда
ОтносительныйРазмер = ВыбранноеЗначение.ОтносительныйРазмер;
МинимальныйЭффект = ВыбранноеЗначение.МинимальныйЭффект;
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Перестроение агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Перестроение агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "Наименование");
ПараметрыИтогов.Вставить("Значение1", ВыбранноеЗначение.ОтносительныйРазмер);
ПараметрыИтогов.Вставить("Значение2", ВыбранноеЗначение.МинимальныйЭффект);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось перестроить агрегаты.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
ИначеЕсли КонтекстВыбора = "АгрегатыОптимальные" Тогда
ОптимальныйОтносительныйРазмер = ВыбранноеЗначение.ОтносительныйРазмер;
ПолучитьОптимальныеАгрегатыКлиент();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ГиперссылкаСТекстомНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПолныеВозможности = Не ПолныеВозможности;
УстановитьРасширенныйРежим();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокИтогов
&НаКлиенте
Процедура СписокИтоговПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("СписокИтоговПриАктивизацииСтрокиОтложенно", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СписокИтоговПриАктивизацииСтрокиОтложенно()
СписокИтоговПриАктивизацииСтрокиНаСервере();
КонецПроцедуры
&НаСервере
Процедура СписокИтоговПриАктивизацииСтрокиНаСервере()
ВыделенныеСтроки = Элементы.СписокИтогов.ВыделенныеСтроки;
ВыделеныРегистрыСИтогами = Ложь;
ВыделеныРегистрыСИтогамиИОстатками = Ложь;
ВыделеныРегистрыСРазделениемИтогов = Ложь;
Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
СтрокаТаблицы = СписокИтогов.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаТаблицы = Неопределено Тогда
Продолжить;
КонецЕсли;
Если СтрокаТаблицы.АгрегатыИтоги = 0 Или СтрокаТаблицы.АгрегатыИтоги = 2 Тогда
ВыделеныРегистрыСИтогами = Истина;
Если СтрокаТаблицы.ОстаткиИОбороты Тогда
ВыделеныРегистрыСИтогамиИОстатками = Истина;
КонецЕсли;
КонецЕсли;
Если СтрокаТаблицы.РазрешитьРазделениеИтогов Тогда
ВыделеныРегистрыСРазделениемИтогов = Истина;
КонецЕсли;
КонецЦикла;
Элементы.ГруппаИтоги.Доступность = ВыделеныРегистрыСИтогами;
Элементы.ГруппаТекущиеИтоги.Доступность = ВыделеныРегистрыСИтогамиИОстатками;
Элементы.ГруппаРазделениеИтогов.Доступность = ВыделеныРегистрыСРазделениемИтогов;
Элементы.УстановитьПериодИтогов.Доступность = ВыделеныРегистрыСИтогамиИОстатками;
КонецПроцедуры
&НаКлиенте
Процедура СписокИтоговВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ИмяМетаданного = СписокИтогов.НайтиПоИдентификатору(ВыбраннаяСтрока).ИмяМетаданного;
Если Поле.Имя = "ИтогиАгрегатыИтоги" Тогда
СтандартнаяОбработка = Ложь;
МассивРезультата = АгрегатыПоРегистрам.НайтиСтроки(
Новый Структура("ИмяМетаданного", ИмяМетаданного));
Если МассивРезультата.Количество() > 0 Тогда
Индекс = АгрегатыПоРегистрам.Индекс(МассивРезультата[0]);
ТекущийЭлемент = Элементы.АгрегатыПоРегистрам;
Элементы.АгрегатыПоРегистрам.ТекущаяСтрока = Индекс;
Элементы.АгрегатыПоРегистрам.ТекущийЭлемент = Элементы.АгрегатыПоРегистрамНаименование;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ВключитьИспользованиеИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ИспользоватьИтоги");
ПараметрыИтогов.Вставить("Значение1", Истина);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьИспользованиеТекущихИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования текущих итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования текущих итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "ИспользоватьТекущиеИтоги");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ИспользоватьТекущиеИтоги");
ПараметрыИтогов.Вставить("Значение1", Истина);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование текущих итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьИспользованиеИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение использования итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение использования итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ИспользоватьИтоги");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить использование итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьИспользованиеТекущихИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение использования текущих итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение использования текущих итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "ИспользоватьТекущиеИтоги");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ИспользоватьТекущиеИтоги");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить использование текущих итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСостояниеИтогов(Команда)
ОбновитьСписокИтоговНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПериодИтогов(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РегНакопления", Ложь);
ПараметрыФормы.Вставить("РегБухгалтерии", Ложь);
Для Каждого Индекс Из Элементы.СписокИтогов.ВыделенныеСтроки Цикл
ИнформацияПоРегистру = СписокИтогов.НайтиПоИдентификатору(Индекс);
ПараметрыФормы.РегНакопления = ПараметрыФормы.РегНакопления Или ИнформацияПоРегистру.Тип = 0;
ПараметрыФормы.РегБухгалтерии = ПараметрыФормы.РегБухгалтерии Или ИнформацияПоРегистру.Тип = 1;
КонецЦикла;
ОткрытьФорму("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаВыбораПериода", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьРазделениеИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение разделения итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение разделения итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьРазделениеИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "РазделениеИтогов");
ПараметрыИтогов.Вставить("Значение1", Истина);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить разделение итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьРазделениеИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение разделения итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение разделения итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьРазделениеИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "РазделениеИтогов");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить разделение итогов.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИнформациюОбАгрегатах(Команда)
ОбновитьАгрегатыПоРегистрамНаСервере();
УстановитьФильтрСпискаАгрегатов();
КонецПроцедуры
&НаКлиенте
Процедура АгрегатыПоРегистрамПриАктивизацииСтроки(Элемент)
УстановитьФильтрСпискаАгрегатов();
Если Элемент.ТекущиеДанные = Неопределено Тогда
ДоступностьЭлементов = Ложь;
ИначеЕсли Элемент.РежимВыделения = РежимВыделенияТаблицы.Одиночный Тогда
ДоступностьЭлементов = Элемент.ТекущиеДанные.РежимАгрегатов;
Иначе
ДоступностьЭлементов = Истина;
КонецЕсли;
Элементы.АгрегатыКнопкаПерестроить.Доступность = ДоступностьЭлементов;
Элементы.АгрегатыКнопкаОчиститьАгрегатыПоРегистрам.Доступность = ДоступностьЭлементов;
Элементы.АгрегатыКнопкаЗаполнитьАгрегатыПоРегистрам.Доступность = ДоступностьЭлементов;
Элементы.АгрегатыКнопкаОптимальные.Доступность = ДоступностьЭлементов;
Элементы.АгрегатыКнопкаОтключитьИспользованиеАгрегатов.Доступность = ДоступностьЭлементов;
Элементы.АгрегатыКнопкаВключитьИспользованиеАгрегатов.Доступность = ДоступностьЭлементов;
КонецПроцедуры
&НаКлиенте
Процедура ВключитьРежимАгрегатов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение режима агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение режима агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьРежимАгрегатов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "РежимАгрегатов");
ПараметрыИтогов.Вставить("Значение1", Истина);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить режим агрегатов.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьРежимИтогов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение режима итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение режима итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьРежимАгрегатов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "РежимАгрегатов");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить режим итогов.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьИспользованиеАгрегатов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеАгрегатов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ИспользованиеАгрегатов");
ПараметрыИтогов.Вставить("Значение1", Истина);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование агрегатов.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьИспользованиеАгрегатов(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Выключение использования агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Выключение использования агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеАгрегатов");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "ИспользованиеАгрегатов");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось выключить использование агрегатов.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ПерестроитьАгрегаты(Команда)
КонтекстВыбора = "ПерестроитьАгрегаты";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОтносительныйРазмер", ОтносительныйРазмер);
ПараметрыФормы.Вставить("МинимальныйЭффект", МинимальныйЭффект);
ПараметрыФормы.Вставить("РежимПерестроения", Истина);
ОткрытьФорму("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьАгрегатыПоРегистрам(Команда)
ТекстВопроса = НСтр("ru = 'Очистка агрегатов может привести к существенному замедлению отчетов.'");
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Очистить агрегаты'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
Обработчик = Новый ОписаниеОповещения("ОчиститьАгрегатыПоРегистрамЗавершение", ЭтотОбъект);
ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, , КодВозвратаДиалога.Отмена);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьАгрегатыПоРегистрам(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Заполнение агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Заполнение агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "ЗаполнитьАгрегаты");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "Наименование");
ПараметрыИтогов.Вставить("Значение1", Неопределено);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось заполнить агрегаты.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура АгрегатыОптимальные(Команда)
КонтекстВыбора = "АгрегатыОптимальные";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОтносительныйРазмер", ОптимальныйОтносительныйРазмер);
ПараметрыФормы.Вставить("МинимальныйЭффект", 0);
ПараметрыФормы.Вставить("РежимПерестроения", Ложь);
ОткрытьФорму("Обработка.УправлениеИтогамиИАгрегатами.Форма.ФормаПараметровПерестроения", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПериодРассчитанныхИтогов(Команда)
ОчиститьСообщения();
МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ОстаткиИОбороты", Истина));
Если МассивДействий.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'"));
Возврат;
КонецЕсли;
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Установка периода рассчитанных итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Установка периода рассчитанных итогов завершена'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьПериодИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий);
ПараметрыИтогов.Вставить("Поле", "ПериодИтогов");
ПараметрыИтогов.Вставить("Значение1", ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)) );
ПараметрыИтогов.Вставить("Значение2", ОкончаниеПериода(РассчитатьИтогиНа) );
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось установить период рассчитанных итогов.'"));
ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина);
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьИспользованиеИтоговБыстрыйДоступ(Команда)
ОчиститьСообщения();
МассивДействий = СписокИтогов.НайтиСтроки(Новый Структура("ИспользоватьИтоги", Ложь));
Если МассивДействий.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'"));
Возврат;
КонецЕсли;
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Включение использования итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Включение использования итогов завершено'"));
ПараметрыИтогов.Вставить("Действие", "УстановитьИспользованиеИтогов");
ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий);
ПараметрыИтогов.Вставить("Поле", "");
ПараметрыИтогов.Вставить("Значение1", Истина);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось включить использование итогов.'"));
ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина);
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьАгрегатыИВыполнитьПерестроение(Команда)
ОчиститьСообщения();
МассивДействий = АгрегатыПоРегистрам.НайтиСтроки(Новый Структура("РежимАгрегатов,ИспользованиеАгрегатов", Истина, Истина));
Если МассивДействий.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить выбранное действие.'"));
Возврат;
КонецЕсли;
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Перестроение агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Перестроение агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "ПерестроитьАгрегаты");
ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий);
ПараметрыИтогов.Вставить("Поле", "");
ПараметрыИтогов.Вставить("Значение1", 0);
ПараметрыИтогов.Вставить("Значение2", 0);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось перестроить агрегаты.'"));
ПараметрыИтогов.Вставить("ГрупповаяОбработка", Истина);
ИзменитьАгрегатыКлиент(ПараметрыИтогов, Истина);
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Заполнение агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Заполнение агрегатов завершено'"));
ПараметрыИтогов.Вставить("Действие", "ЗаполнитьАгрегаты");
ПараметрыИтогов.Вставить("МассивСтрок", МассивДействий);
ПараметрыИтогов.Вставить("Поле", "");
ПараметрыИтогов.Вставить("Значение1", Неопределено);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось заполнить агрегаты.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьОптимальныеАгрегаты(Команда)
ПолучитьОптимальныеАгрегатыКлиент();
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьИтоги(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Пересчет итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Пересчет итогов завершен.'"));
ПараметрыИтогов.Вставить("Действие", "ПересчитатьИтоги");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "Наименование");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось пересчитать итоги.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьТекущиеИтоги(Команда)
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Пересчет текущих итогов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Пересчет текущих итогов завершен.'"));
ПараметрыИтогов.Вставить("Действие", "ПересчитатьТекущиеИтоги");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "Наименование");
ПараметрыИтогов.Вставить("Значение1", Ложь);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось пересчитать текущие итоги.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьИтогиЗаПериод(Команда)
Обработчик = Новый ОписаниеОповещения("ПересчитатьИтогиЗаПериодЗавершение", ЭтотОбъект);
Диалог = Новый ДиалогРедактированияСтандартногоПериода;
Диалог.Период = ПериодПерерасчетаРегистров;
Диалог.Показать(Обработчик);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Итоги'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Агрегаты'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 2;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Просто итоговый регистр'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиИспользоватьТекущиеИтоги.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиПериодИтогов.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиРазделениеИтогов.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.ОстаткиИОбороты");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиАгрегатыИтоги.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 2;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИтогиИспользоватьИтоги.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокИтогов.АгрегатыИтоги");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = 1;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
КонецПроцедуры
#Область ОбработчикиАсинхронныхДиалогов
&НаКлиенте
Процедура ОчиститьАгрегатыПоРегистрамЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Очистка агрегатов ...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Очистка агрегатов завершена'"));
ПараметрыИтогов.Вставить("Действие", "ОчиститьАгрегаты");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "Наименование");
ПараметрыИтогов.Вставить("Значение1", Неопределено);
ПараметрыИтогов.Вставить("Значение2", Неопределено);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось очистить агрегаты.'"));
ИзменитьАгрегатыКлиент(ПараметрыИтогов);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьИтогиЗаПериодЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
ПериодПерерасчетаРегистров = ВыбранноеЗначение;
ПараметрыИтогов = Новый Структура;
ПараметрыИтогов.Вставить("ОбрабатыватьЗаголовок", НСтр("ru = 'Пересчет итогов за период...'"));
ПараметрыИтогов.Вставить("ПослеПроцесса", НСтр("ru = 'Пересчет итогов за период завершен.'"));
ПараметрыИтогов.Вставить("Действие", "ПересчитатьИтогиЗаПериод");
ПараметрыИтогов.Вставить("МассивСтрок", Элементы.СписокИтогов.ВыделенныеСтроки);
ПараметрыИтогов.Вставить("Поле", "Наименование");
ПараметрыИтогов.Вставить("Значение1", ПериодПерерасчетаРегистров.ДатаНачала);
ПараметрыИтогов.Вставить("Значение2", ПериодПерерасчетаРегистров.ДатаОкончания);
ПараметрыИтогов.Вставить("ТекстСообщенияОбОшибке", НСтр("ru = 'Не удалось пересчитать итоги за период.'"));
УправлениеИтогами(ПараметрыИтогов);
КонецПроцедуры
#КонецОбласти
#Область Клиент
&НаКлиенте
Процедура УстановитьФильтрСпискаАгрегатов()
ТекущиеДанные = Элементы.АгрегатыПоРегистрам.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Фильтр = Новый ФиксированнаяСтруктура("ИмяМетаданного", ТекущиеДанные.ИмяМетаданного);
НовыйЗаголовок = Префикс() + " " + ТекущиеДанные.Наименование;
Иначе
Фильтр = Новый ФиксированнаяСтруктура("ИмяМетаданного", "");
НовыйЗаголовок = Префикс();
КонецЕсли;
Элементы.СписокАгрегатов.ОтборСтрок = Фильтр;
Если Элементы.СписокАгрегатов.Заголовок <> НовыйЗаголовок Тогда
Элементы.СписокАгрегатов.Заголовок = НовыйЗаголовок;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьАгрегатыКлиент(Знач ПараметрыИтогов, Знач ОчищатьСообщения = Истина)
Результат = Истина;
Если ОчищатьСообщения Тогда
ОчиститьСообщения();
КонецЕсли;
Выбранные = ПараметрыИтогов.МассивСтрок;
Если Выбранные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ШагПроцесса = 100/Выбранные.Количество();
Если ПараметрыИтогов.Свойство("ГрупповаяОбработка") Тогда
ТребуетсяПрерватьПослеОшибки = ?(ПараметрыИтогов.ГрупповаяОбработка, Ложь, ПрерыватьПриОшибке);
Иначе
ТребуетсяПрерватьПослеОшибки = ПрерыватьПриОшибке;
КонецЕсли;
Для Счетчик = 1 По Выбранные.Количество() Цикл
Если ТипЗнч(Выбранные[Счетчик - 1]) = Тип("Число") Тогда
ВыбраннаяСтрока = АгрегатыПоРегистрам.НайтиПоИдентификатору(Выбранные[Счетчик-1]);
Иначе
ВыбраннаяСтрока = Выбранные[Счетчик-1];
КонецЕсли;
ПолеСообщенияОбОшибке = "";
Если Не ПустаяСтрока(ПараметрыИтогов.Поле) Тогда
ПолеСообщенияОбОшибке = "АгрегатыПоРегистрам[" + Формат(Выбранные[Счетчик-1], "ЧГ=0") + "]." + ПараметрыИтогов.Поле;
КонецЕсли;
Если Не ВыбраннаяСтрока.РежимАгрегатов
И ВРег(ПараметрыИтогов.Действие) <> ВРег("УстановитьРежимАгрегатов") Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Операция невозможна в режиме итогов'"),
,
ПолеСообщенияОбОшибке);
Продолжить;
КонецЕсли;
Состояние(ПараметрыИтогов.ОбрабатыватьЗаголовок, Счетчик * ШагПроцесса, ВыбраннаяСтрока.Наименование);
ПараметрыСервера = Новый Структура;
ПараметрыСервера.Вставить("ИмяРегистра", ВыбраннаяСтрока.ИмяМетаданного);
ПараметрыСервера.Вставить("Действие", ПараметрыИтогов.Действие);
ПараметрыСервера.Вставить("ЗначениеДействия1", ПараметрыИтогов.Значение1);
ПараметрыСервера.Вставить("ЗначениеДействия2", ПараметрыИтогов.Значение2);
ПараметрыСервера.Вставить("СообщениеОбОшибке", ПараметрыИтогов.ТекстСообщенияОбОшибке);
ПараметрыСервера.Вставить("ПолеФормы", ПолеСообщенияОбОшибке);
ПараметрыСервера.Вставить("ИдентификаторФормы", УникальныйИдентификатор);
Результат = ИзменитьАгрегатыСервер(ПараметрыСервера);
ОбработкаПрерыванияПользователя();
Если Не Результат.Успешно И ТребуетсяПрерватьПослеОшибки Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ВРег(ПараметрыИтогов.Действие) = ВРег("УстановитьРежимАгрегатов")
Или ВРег(ПараметрыИтогов.Действие) = ВРег("УстановитьИспользованиеАгрегатов") Тогда
ОбновитьСписокИтоговНаСервере();
КонецЕсли;
ОбновитьАгрегатыПоРегистрамНаСервере();
Состояние(ПараметрыИтогов.ПослеПроцесса);
УстановитьФильтрСпискаАгрегатов();
КонецПроцедуры
&НаКлиенте
Процедура УправлениеИтогами(Знач ПараметрыИтогов)
Результат = Истина;
ОчиститьСообщения();
Выбранные = ПараметрыИтогов.МассивСтрок;
Если Выбранные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ШагПроцесса = 100/Выбранные.Количество();
Действие = НРег(ПараметрыИтогов.Действие);
Если ПараметрыИтогов.Свойство("ГрупповаяОбработка") Тогда
ТребуетсяПрерватьПослеОшибки = ?(ПараметрыИтогов.ГрупповаяОбработка, Ложь, ПрерыватьПриОшибке);
Иначе
ТребуетсяПрерватьПослеОшибки = ПрерыватьПриОшибке;
КонецЕсли;
КоличествоОбработанныхСтрок = 0;
ЕстьРегистрыДляОбработки = Ложь;
Для Счетчик = 1 По Выбранные.Количество() Цикл
Если ТипЗнч(Выбранные[Счетчик-1]) = Тип("Число") Тогда
ВыбраннаяСтрока = СписокИтогов.НайтиПоИдентификатору(Выбранные[Счетчик-1]);
Иначе
ВыбраннаяСтрока = Выбранные[Счетчик-1];
КонецЕсли;
Состояние(ПараметрыИтогов.ОбрабатыватьЗаголовок, Счетчик * ШагПроцесса, ВыбраннаяСтрока.Наименование);
Если ВРег(Действие) = ВРег("УстановитьИспользованиеИтогов") Тогда
Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ВРег(Действие) = ВРег("ИспользоватьТекущиеИтоги") Тогда
Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Или Не ВыбраннаяСтрока.ОстаткиИОбороты Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ВРег(Действие) = ВРег("УстановитьПериодИтогов") Тогда
Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Или Не ВыбраннаяСтрока.ОстаткиИОбороты Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ВРег(Действие) = ВРег("УстановитьРазделениеИтогов") Тогда
Если Не ВыбраннаяСтрока.РазрешитьРазделениеИтогов Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтоги") Тогда
Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтогиЗаПериод") Тогда
Если ВыбраннаяСтрока.АгрегатыИтоги = 1 Или Не ВыбраннаяСтрока.ОстаткиИОбороты Тогда
Продолжить;
КонецЕсли;
ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьТекущиеИтоги") Тогда
Если Не ВыбраннаяСтрока.ОстаткиИОбороты Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ПолеСообщенияОбОшибке = "";
Если Не ПустаяСтрока(ПараметрыИтогов.Поле) Тогда
ПолеСообщенияОбОшибке = "СписокИтогов[" + Формат(Выбранные[Счетчик-1], "ЧГ=0") + "]." + ПараметрыИтогов.Поле;
КонецЕсли;
ЕстьРегистрыДляОбработки = Истина;
Результат = УстановитьПараметрыРегистраНаСервере(
ВыбраннаяСтрока.Тип,
ВыбраннаяСтрока.ИмяМетаданного,
ПараметрыИтогов.Действие,
ПараметрыИтогов.Значение1,
ПараметрыИтогов.Значение2,
ПолеСообщенияОбОшибке,
ПараметрыИтогов.ТекстСообщенияОбОшибке);
ОбработкаПрерыванияПользователя();
Если Не Результат И ТребуетсяПрерватьПослеОшибки Тогда
Прервать;
КонецЕсли;
Если Результат Тогда
КоличествоОбработанныхСтрок = КоличествоОбработанныхСтрок + 1;
КонецЕсли;
КонецЦикла;
Если Не ЕстьРегистрыДляОбработки Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'"));
Возврат;
КонецЕсли;
ОбновитьСписокИтоговНаСервере();
ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Пересчитаны (%1 из %2)'"),
КоличествоОбработанныхСтрок,
Выбранные.Количество());
Состояние(ПараметрыИтогов.ПослеПроцесса + Символы.ПС + ТекстСостояния);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьОптимальныеАгрегатыКлиент()
Если ПолныеВозможности Тогда
Если Элементы.АгрегатыПоРегистрам.ВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Иначе
Если АгрегатыПоРегистрам.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Отсутствуют регистры, для которых можно выполнить данную операцию.'"));
Возврат;
КонецЕсли;
КонецЕсли;
Результат = ПолучитьОптимальныеАгрегатыСервер();
Обработчик = Новый ОписаниеОповещения("ПолучитьОптимальныеАгрегатыКлиентЗавершение", ЭтотОбъект, Результат);
Если Не Результат.МожноПолучить Тогда
Возврат;
КонецЕсли;
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранить оптимальные агрегаты в файл'");
Расширение = НРег(Сред(Результат.ИмяФайла, СтрНайти(Результат.ИмяФайла, ".") + 1));
Если Расширение = "zip" Тогда
Фильтр = НСтр("ru = 'Файлы настроек агрегатов (*.zip)|*.zip'");
ИначеЕсли Расширение = "xml" Тогда
Фильтр = НСтр("ru = 'Файлы настроек агрегатов (*.xml)|*.xml'");
Иначе
Фильтр = "";
КонецЕсли;
ПараметрыСохранения.Диалог.Фильтр = Фильтр;
ПараметрыСохранения.Диалог.ПолноеИмяФайла = Результат.ИмяФайла;
ФайловаяСистемаКлиент.СохранитьФайл(Обработчик, Результат.АдресФайла, Результат.ИмяФайла, ПараметрыСохранения);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьОптимальныеАгрегатыКлиентЗавершение(ПолученныеФайлы, РезультатВыполнения) Экспорт
Если ПолученныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
Если РезультатВыполнения.ЕстьОшибки Тогда
ВызватьИсключение РезультатВыполнения.ТекстСообщения;
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Агрегаты успешно получены.'"),,
РезультатВыполнения.ТекстСообщения, БиблиотекаКартинок.Успешно32);
КонецПроцедуры
#КонецОбласти
#Область КлиентСервер
&НаКлиентеНаСервереБезКонтекста
Функция ОкончаниеПериода(Знач Дата)
Возврат КонецДня(КонецМесяца(Дата));
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция Префикс()
Возврат НСтр("ru = 'Агрегаты регистра'");
КонецФункции
#КонецОбласти
#Область ВызовСервераСервер
&НаСервере
Функция ПолучитьОптимальныеАгрегатыСервер()
Результат = Новый Структура;
Результат.Вставить("МожноПолучить", Ложь);
Результат.Вставить("АдресФайла", "");
Результат.Вставить("ИмяФайла", "");
Результат.Вставить("ЕстьОшибки", Ложь);
Результат.Вставить("ТекстСообщения", "");
Если ПолныеВозможности Тогда
Коллекция = ВыделенныеСтроки("АгрегатыПоРегистрам");
МаксимальныйОтносительныйРазмер = ОптимальныйОтносительныйРазмер;
Иначе
Коллекция = АгрегатыПоРегистрам;
МаксимальныйОтносительныйРазмер = 0;
КонецЕсли;
Всего = Коллекция.Количество();
Успешно = 0;
ПодробныйТекстОшибок = "";
КаталогВременныхФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(
ПолучитьИмяВременногоФайла(".TAM"));
СоздатьКаталог(КаталогВременныхФайлов);
ФайлыДляАрхивации = Новый СписокЗначений;
Для НомерСтроки = 1 По Всего Цикл
ИмяРегистраНакопления = Коллекция[НомерСтроки - 1].ИмяМетаданного;
МенеджерРегистра = РегистрыНакопления[ИмяРегистраНакопления];
Попытка
ОптимальныеАгрегаты = МенеджерРегистра.ОпределитьОптимальныеАгрегаты(МаксимальныйОтносительныйРазмер);
Исключение
Результат.ЕстьОшибки = Истина;
ПодробныйТекстОшибок = ПодробныйТекстОшибок
+ ?(ПустаяСтрока(ПодробныйТекстОшибок), "", Символы.ПС + Символы.ПС)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1: %2'"), ИмяРегистраНакопления,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Продолжить;
КонецПопытки;
ПолноеИмяФайла = КаталогВременныхФайлов + ИмяРегистраНакопления + ".xml";
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(ПолноеИмяФайла);
ЗаписьXML.ЗаписатьОбъявлениеXML();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОптимальныеАгрегаты);
ЗаписьXML.Закрыть();
ФайлыДляАрхивации.Добавить(ПолноеИмяФайла, ИмяРегистраНакопления);
Успешно = Успешно + 1;
КонецЦикла;
Если Успешно > 0 Тогда
Если Успешно = 1 Тогда
ЭлементСписка = ФайлыДляАрхивации[0];
ПолноеИмяФайла = ЭлементСписка.Значение;
КраткоеИмяФайла = ЭлементСписка.Представление + ".xml";
Иначе
КраткоеИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Оптимальные агрегаты регистров накопления %1.zip'"),
Формат(ТекущаяДатаСеанса(), "ДФ=yyyy-MM-dd"));
ПолноеИмяФайла = КаталогВременныхФайлов + КраткоеИмяФайла;
РежимСохранения = РежимСохраненияПутейZIP.СохранятьОтносительныеПути;
РежимОбработки = РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно;
ЗаписьZipФайла = Новый ЗаписьZipФайла(ПолноеИмяФайла);
Для Каждого ЭлементСписка Из ФайлыДляАрхивации Цикл
ЗаписьZipФайла.Добавить(ЭлементСписка.Значение, РежимСохранения, РежимОбработки);
КонецЦикла;
ЗаписьZipФайла.Записать();
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла);
Результат.МожноПолучить = Истина;
Результат.ИмяФайла = КраткоеИмяФайла;
Результат.АдресФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецЕсли;
УдалитьФайлы(КаталогВременныхФайлов);
Если Всего = 1 Тогда
ЭлементСписка = Коллекция[0];
ИмяРегистра = ЭлементСписка.Наименование;
Если Результат.ЕстьОшибки Тогда
Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить оптимальные агрегаты регистра накопления ""%1"" по причине:
|%2'"), ИмяРегистра, ПодробныйТекстОшибок);
Иначе
Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (регистр накопления)'"), ИмяРегистра);
КонецЕсли;
ИначеЕсли Успешно = 0 Тогда
Результат.ЕстьОшибки = Истина;
Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить оптимальные агрегаты регистров накопления по причине:
|%1'"), ПодробныйТекстОшибок);
ИначеЕсли Результат.ЕстьОшибки Тогда
Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Агрегаты успешно получены для %1 из %2 регистров.
|Не получены для %3 по причине:
|%4'"),
Успешно,
Всего,
Всего - Успешно,
ПодробныйТекстОшибок);
Иначе
Результат.ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Регистры накопления (%1)'"), Успешно);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ОбновитьСписокИтоговНаСервере()
Менеджеры = Новый Массив;
Менеджеры.Добавить(РегистрыНакопления);
Менеджеры.Добавить(РегистрыБухгалтерии);
Для Каждого СтрокаТаблицы Из СписокИтогов Цикл
Регистр = Менеджеры[СтрокаТаблицы.Тип][СтрокаТаблицы.ИмяМетаданного];
СтрокаТаблицы.ИспользоватьИтоги = Регистр.ПолучитьИспользованиеИтогов();
СтрокаТаблицы.РазделениеИтогов = Регистр.ПолучитьРежимРазделенияИтогов();
Если СтрокаТаблицы.ОстаткиИОбороты Тогда
СтрокаТаблицы.ИспользоватьТекущиеИтоги = Регистр.ПолучитьИспользованиеТекущихИтогов();
СтрокаТаблицы.ПериодИтогов = Регистр.ПолучитьМаксимальныйПериодРассчитанныхИтогов();
СтрокаТаблицы.АгрегатыИтоги = 2;
Иначе
СтрокаТаблицы.ИспользоватьТекущиеИтоги = Ложь;
СтрокаТаблицы.ПериодИтогов = Неопределено;
СтрокаТаблицы.АгрегатыИтоги = Регистр.ПолучитьРежимАгрегатов();
Если СтрокаТаблицы.АгрегатыИтоги Тогда
СтрокаТаблицы.ИспользоватьИтоги = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ГруппаИтоговЗаголовок = НСтр("ru = 'Итоги'");
КоличествоИтогов = СписокИтогов.Количество();
Если КоличествоИтогов > 0 Тогда
ГруппаИтоговЗаголовок = ГруппаИтоговЗаголовок + " (" + Формат(КоличествоИтогов, "ЧГ=") + ")";
КонецЕсли;
Элементы.ГруппаИтогов.Заголовок = ГруппаИтоговЗаголовок;
КонецПроцедуры
&НаСервере
Процедура ОбновитьАгрегатыПоРегистрамНаСервере()
СписокАгрегатовРегистра.Очистить();
Для Каждого СтрокаТаблицы Из АгрегатыПоРегистрам Цикл
МенеджерРегистра = РегистрыНакопления[СтрокаТаблицы.ИмяМетаданного];
СтрокаТаблицы.РежимАгрегатов = МенеджерРегистра.ПолучитьРежимАгрегатов();
СтрокаТаблицы.ИспользованиеАгрегатов = МенеджерРегистра.ПолучитьИспользованиеАгрегатов();
Агрегаты = МенеджерРегистра.ПолучитьАгрегаты();
СтрокаТаблицы.ДатаПостроения = Агрегаты.ДатаПостроения;
СтрокаТаблицы.Размер = Агрегаты.Размер;
СтрокаТаблицы.ОграничениеРазмера = Агрегаты.ОграничениеРазмера;
СтрокаТаблицы.Эффект = Агрегаты.Эффект;
Для Каждого Агрегат Из Агрегаты.Агрегаты Цикл
СинонимыИзмерений = Новый Массив;
Для Каждого ИмяИзмерения Из Агрегат.Измерения Цикл
СинонимИзмерения = Метаданные.РегистрыНакопления[СтрокаТаблицы.ИмяМетаданного].Измерения[ИмяИзмерения].Синоним;
СинонимыИзмерений.Добавить(СинонимИзмерения);
КонецЦикла;
СтрокаАгрегатовРегистра = СписокАгрегатовРегистра.Добавить();
СтрокаАгрегатовРегистра.ИмяМетаданного = СтрокаТаблицы.ИмяМетаданного;
СтрокаАгрегатовРегистра.Периодичность = Строка(Агрегат.Периодичность);
СтрокаАгрегатовРегистра.Измерения = СтрСоединить(СинонимыИзмерений, ", ");
СтрокаАгрегатовРегистра.Использование = Агрегат.Использование;
СтрокаАгрегатовРегистра.НачалоПериода = Агрегат.НачалоПериода;
СтрокаАгрегатовРегистра.КонецПериода = Агрегат.КонецПериода;
СтрокаАгрегатовРегистра.Размер = Агрегат.Размер;
КонецЦикла;
КонецЦикла;
СписокАгрегатовРегистра.Сортировать("Использование Убыв");
ГруппаАгрегатыЗаголовок = НСтр("ru = 'Агрегаты'");
КоличествоАгрегатов = АгрегатыПоРегистрам.Количество();
Если КоличествоАгрегатов > 0 Тогда
ГруппаАгрегатыЗаголовок = ГруппаАгрегатыЗаголовок + " (" + Формат(КоличествоАгрегатов, "ЧГ=") + ")";
КонецЕсли;
Элементы.ГруппаАгрегаты.Заголовок = ГруппаАгрегатыЗаголовок;
КонецПроцедуры
&НаСервереБезКонтекста
Функция УстановитьПараметрыРегистраНаСервере(Знач ВидРегистра,
Знач ИмяРегистра,
Знач Действие,
Знач Значение1,
Знач Значение2,
Знач ПолеОшибки,
Знач СообщениеОбОшибке)
Менеджеры = Новый Массив;
Менеджеры.Добавить(РегистрыНакопления);
Менеджеры.Добавить(РегистрыБухгалтерии);
Менеджер = Менеджеры[ВидРегистра][ИмяРегистра];
Действие = НРег(Действие);
Попытка
Если ВРег(Действие) = ВРег("УстановитьИспользованиеИтогов") Тогда
Менеджер.УстановитьИспользованиеИтогов(Значение1);
ИначеЕсли ВРег(Действие) = ВРег("ИспользоватьТекущиеИтоги") Тогда
Менеджер.УстановитьИспользованиеТекущихИтогов(Значение1);
ИначеЕсли ВРег(Действие) = ВРег("УстановитьРазделениеИтогов") Тогда
Менеджер.УстановитьРежимРазделенияИтогов(Значение1);
ИначеЕсли ВРег(Действие) = ВРег("УстановитьПериодИтогов") Тогда
Если ВидРегистра = 0 Тогда
Дата = Значение1;
ИначеЕсли ВидРегистра = 1 Тогда
Дата = Значение2;
КонецЕсли;
Менеджер.УстановитьМаксимальныйПериодРассчитанныхИтогов(Дата);
ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтоги") Тогда
Менеджер.ПересчитатьИтоги();
ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьТекущиеИтоги") Тогда
Менеджер.ПересчитатьТекущиеИтоги();
ИначеЕсли ВРег(Действие) = ВРег("ПересчитатьИтогиЗаПериод") Тогда
Менеджер.ПересчитатьИтогиЗаПериод(Значение1, Значение2);
Иначе
ВызватьИсключение НСтр("ru = 'Неправильное имя параметра'") + "(1): " + Действие;
КонецЕсли;
Исключение
ОбщегоНазначения.СообщитьПользователю(
СообщениеОбОшибке
+ Символы.ПС
+ ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),
,
ПолеОшибки);
Возврат Ложь;
КонецПопытки;
Возврат Истина;
КонецФункции
&НаСервереБезКонтекста
Функция ИзменитьАгрегатыСервер(Знач ПараметрыСервера)
Результат = Новый Структура;
Результат.Вставить("Успешно", Истина);
Результат.Вставить("ЗначениеДействия1", ПараметрыСервера.ЗначениеДействия1);
Результат.Вставить("АдресФайлаВоВременномХранилище", "");
МенеджерРегистра = РегистрыНакопления[ПараметрыСервера.ИмяРегистра];
Попытка
Если ВРег(ПараметрыСервера.Действие) = ВРег("УстановитьРежимАгрегатов") Тогда
МенеджерРегистра.УстановитьРежимАгрегатов(ПараметрыСервера.ЗначениеДействия1);
ИначеЕсли ВРег(ПараметрыСервера.Действие) = ВРег("УстановитьИспользованиеАгрегатов") Тогда
МенеджерРегистра.УстановитьИспользованиеАгрегатов(ПараметрыСервера.ЗначениеДействия1);
ИначеЕсли ВРег(ПараметрыСервера.Действие) = ВРег("ЗаполнитьАгрегаты") Тогда
МенеджерРегистра.ОбновитьАгрегаты(Ложь);
ИначеЕсли ВРег(ПараметрыСервера.Действие) = ВРег("ПерестроитьАгрегаты") Тогда
МенеджерРегистра.ПерестроитьИспользованиеАгрегатов(ПараметрыСервера.ЗначениеДействия1, ПараметрыСервера.ЗначениеДействия2);
ИначеЕсли ВРег(ПараметрыСервера.Действие) = ВРег("ОчиститьАгрегаты") Тогда
МенеджерРегистра.ОчиститьАгрегаты();
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неправильное имя параметра: %1'"),
ПараметрыСервера.Действие);
КонецЕсли;
Исключение
СообщениеОбОшибке = ПараметрыСервера.СообщениеОбОшибке + " (" + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) + ")";
ОбщегоНазначения.СообщитьПользователю(СообщениеОбОшибке);
Результат.Успешно = Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
&НаСервере
Процедура УстановитьРасширенныйРежим()
Если ПолныеВозможности Тогда
Заголовок = НСтр("ru = 'Управление итогами - полные возможности'");
ТекстГиперссылки = НСтр("ru = 'Часто используемые возможности'");
Элементы.Операции.ТекущаяСтраница = Элементы.РасширенныеВозможности;
Иначе
Заголовок = НСтр("ru = 'Управление итогами - часто используемые возможности'");
ТекстГиперссылки = НСтр("ru = 'Полные возможности'");
Элементы.Операции.ТекущаяСтраница = Элементы.БыстрыйДоступ;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Сервер
&НаСервере
Функция ВыделенныеСтроки(ИмяТаблицы)
Результат = Новый Массив;
ВыделенныеСтроки = Элементы[ИмяТаблицы].ВыделенныеСтроки;
Таблица = ЭтотОбъект[ИмяТаблицы];
Для Каждого Идентификатор Из ВыделенныеСтроки Цикл
Результат.Добавить(Таблица.НайтиПоИдентификатору(Идентификатор));
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ПрочитатьИнформациюПоРегистрам()
СписокИтогов.Очистить();
АгрегатыПоРегистрам.Очистить();
СписокАгрегатовРегистра.Очистить();
Картинка = БиблиотекаКартинок.РегистрБухгалтерии;
Для Каждого Регистр Из Метаданные.РегистрыБухгалтерии Цикл
Если Не ПравоДоступа("УправлениеИтогами", Регистр) Тогда
Продолжить;
КонецЕсли;
Представление = Регистр.Представление() + " (" + НСтр("ru = 'регистр бухгалтерии'") + ")";
СтрокаТаблицы = СписокИтогов.Добавить();
СтрокаТаблицы.Тип = 1;
СтрокаТаблицы.ИмяМетаданного = Регистр.Имя;
СтрокаТаблицы.Картинка = Картинка;
СтрокаТаблицы.ОстаткиИОбороты = Истина;
СтрокаТаблицы.Наименование = Представление;
СтрокаТаблицы.РазрешитьРазделениеИтогов = Регистр.РазрешитьРазделениеИтогов;
КонецЦикла;
Картинка = БиблиотекаКартинок.РегистрНакопления;
Для Каждого Регистр Из Метаданные.РегистрыНакопления Цикл
Постфикс = "";
Если Регистр.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты Тогда
ОстаткиИОбороты = Ложь;
Постфикс = НСтр("ru = 'регистр накопления, только обороты'");
Иначе
ОстаткиИОбороты = Истина;
Постфикс = НСтр("ru = 'регистр накопления, остатки и обороты'");
КонецЕсли;
Если Не ПравоДоступа("УправлениеИтогами", Регистр) Тогда
Продолжить;
КонецЕсли;
Представление = Регистр.Представление() + " (" + Постфикс + ")";
СтрокаТаблицы = СписокИтогов.Добавить();
СтрокаТаблицы.Тип = 0;
СтрокаТаблицы.ИмяМетаданного = Регистр.Имя;
СтрокаТаблицы.Картинка = Картинка;
СтрокаТаблицы.ОстаткиИОбороты = ОстаткиИОбороты;
СтрокаТаблицы.Наименование = Представление;
СтрокаТаблицы.РазрешитьРазделениеИтогов = Регистр.РазрешитьРазделениеИтогов ;
КонецЦикла;
Картинка = БиблиотекаКартинок.РегистрНакопления;
Для Каждого Регистр Из Метаданные.РегистрыНакопления Цикл
Если Регистр.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Обороты Тогда
Продолжить;
КонецЕсли;
Если Не ПравоДоступа("УправлениеИтогами", Регистр) Тогда
Продолжить;
КонецЕсли;
Представление = Регистр.Представление();
Агрегаты = Регистр.Агрегаты;
Если Агрегаты.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = АгрегатыПоРегистрам.Добавить();
СтрокаТаблицы.ИмяМетаданного = Регистр.Имя;
СтрокаТаблицы.Картинка = Картинка;
СтрокаТаблицы.Наименование = Представление;
СтрокаТаблицы.ПостроениеОптимально = Истина;
КонецЦикла;
СписокИтогов.Сортировать("Наименование Возр");
АгрегатыПоРегистрам.Сортировать("Наименование Возр");
КонецПроцедуры
#КонецОбласти
#КонецОбласти