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