#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.События.ПриСозданииНаСервере = Истина;
Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина;
КонецПроцедуры
Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
Параметры = ЭтаФорма.Параметры;
Если Параметры.Свойство("ПараметрКоманды") Тогда
ЭтаФорма.ФормаПараметры.Отбор.Вставить("Документ", Параметры.ПараметрКоманды);
КонецЕсли;
КонецПроцедуры
Процедура ПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт
Отчет = ЭтаФорма.Отчет;
КомпоновщикНастроекФормы = Отчет.КомпоновщикНастроек;
КомпоновщикНастроекФормы.Настройки.ДополнительныеСвойства.Вставить("КлючТекущегоВарианта", ЭтаФорма.КлючТекущегоВарианта);
НовыеНастройкиКД = КомпоновщикНастроекФормы.Настройки;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрДокумент = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.Настройки, "Документ");
Если ЗначениеЗаполнено(ПараметрДокумент.Значение) Тогда
ПериодЛимита = Неопределено;
ХозяйственнаяОперация = Неопределено;
Если ТипЗнч(ПараметрДокумент.Значение) = Тип("ДокументСсылка.ЗаявкаНаРасходованиеДенежныхСредств") Тогда
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрДокумент.Значение,
"Дата, ДатаПлатежа, ЖелательнаяДатаПлатежа, Организация, Подразделение, ХозяйственнаяОперация");
Если ЗначениеЗаполнено(РеквизитыДокумента.ДатаПлатежа) Тогда
ПериодЛимита = РеквизитыДокумента.ДатаПлатежа;
ИначеЕсли ЗначениеЗаполнено(РеквизитыДокумента.ЖелательнаяДатаПлатежа) Тогда
ПериодЛимита = РеквизитыДокумента.ЖелательнаяДатаПлатежа;
Иначе
ПериодЛимита = РеквизитыДокумента.Дата;
КонецЕсли;
ХозяйственнаяОперация = РеквизитыДокумента.ХозяйственнаяОперация;
ИначеЕсли ТипЗнч(ПараметрДокумент.Значение) = Тип("ДокументСсылка.ЗаявкаНаКомандировку") Тогда
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрДокумент.Значение,
"Дата, ЖелательнаяДатаПлатежа, Организация, Подразделение");
Если ЗначениеЗаполнено(РеквизитыДокумента.ЖелательнаяДатаПлатежа) Тогда
ПериодЛимита = РеквизитыДокумента.ЖелательнаяДатаПлатежа;
Иначе
ПериодЛимита = РеквизитыДокумента.Дата;
КонецЕсли;
ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВыдачаДенежныхСредствПодотчетнику;
КонецЕсли;
ПараметрПериод = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.Настройки, "Период");
ПараметрПериод.Значение = Новый СтандартныйПериод(НачалоМесяца(ПериодЛимита), КонецМесяца(ПериодЛимита));
ПараметрПериод.Использование = Истина;
ПараметрХозяйственнаяОперация = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.Настройки, "ХозяйственнаяОперация");
ПараметрХозяйственнаяОперация.Значение = ХозяйственнаяОперация;
ПараметрХозяйственнаяОперация.Использование = Истина;
СтатьиДвиженияДенежныхСредств = СтатьиДвиженияДенежныхСредствДокумента(ПараметрДокумент.Значение);
Для каждого ГруппировкаСтатьяДвиженияДенежныхСредств Из КомпоновщикНастроек.Настройки.Структура Цикл
УстановитьОтборКомпоновщикаНастроек(
ГруппировкаСтатьяДвиженияДенежныхСредств.Отбор, "СтатьяДвиженияДенежныхСредств", СтатьиДвиженияДенежныхСредств);
КонецЦикла;
Если ПолучитьФункциональнуюОпцию("ИспользоватьЛимитыРасходаДенежныхСредствПоОрганизациям") Тогда
УстановитьОтборКомпоновщикаНастроек(
КомпоновщикНастроек.Настройки.Отбор, "Организация", РеквизитыДокумента.Организация);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьЛимитыРасходаДенежныхСредствПоПодразделениям") Тогда
УстановитьОтборКомпоновщикаНастроек(
КомпоновщикНастроек.Настройки.Отбор, "Подразделение", РеквизитыДокумента.Подразделение);
КонецЕсли;
Иначе
ПараметрХозяйственнаяОперация = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.Настройки, "ХозяйственнаяОперация");
ПараметрХозяйственнаяОперация.Значение = Перечисления.ХозяйственныеОперации.ПустаяСсылка();
ПараметрХозяйственнаяОперация.Использование = Истина;
КонецЕсли;
Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Валюта"));
Если Параметр <> Неопределено Тогда
Параметр.Значение = Константы.ВалютаУправленческогоУчета.Получить();
Параметр.Использование = Истина;
КонецЕсли;
КомпоновкаДанныхСервер.НастроитьДинамическийПериод(СхемаКомпоновкиДанных, КомпоновщикНастроек);
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КомпоновкаДанныхСервер.СкрытьВспомогательныеПараметрыОтчета(СхемаКомпоновкиДанных, КомпоновщикНастроек, ДокументРезультат, ВспомогательныеПараметрыОтчета());
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УстановитьОтборКомпоновщикаНастроек(Отбор, ИмяПоля, Значение)
ЭлементыОтбора = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(Отбор, ИмяПоля);
Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл
ЭлементОтбора.ПравоеЗначение = Значение;
ЭлементОтбора.Использование = Истина;
КонецЦикла;
КонецПроцедуры
Функция ВспомогательныеПараметрыОтчета()
ВспомогательныеПараметры = Новый Массив;
КлючТекущегоВарианта = "";
Если КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("КлючТекущегоВарианта", КлючТекущегоВарианта) Тогда
Если КлючТекущегоВарианта = "ЛимитыРасходаДенежныхСредствКонтекст" Тогда
ВспомогательныеПараметры.Добавить("Периодичность");
ВспомогательныеПараметры.Добавить("Период");
КонецЕсли;
КонецЕсли;
Возврат ВспомогательныеПараметры;
КонецФункции
Функция СтатьиДвиженияДенежныхСредствДокумента(ДокументСсылка)
СтатьиДвиженияДенежныхСредств = Новый Массив;
ЧастиЗапроса = Новый Массив;
Если ПравоДоступа("Чтение", Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств) Тогда
ЧастиЗапроса.Добавить(
"ВЫБРАТЬ
| ЗаявкаНаРасходованиеДенежныхСредств.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств
|ИЗ
| Документ.ЗаявкаНаРасходованиеДенежныхСредств КАК ЗаявкаНаРасходованиеДенежныхСредств
|ГДЕ
| ЗаявкаНаРасходованиеДенежныхСредств.Ссылка = &ДокументСсылка
| И ЗаявкаНаРасходованиеДенежныхСредств.ХозяйственнаяОперация В (
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КонвертацияВалюты),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВнутренняяПередачаДенежныхСредств)
| )
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств
|ИЗ
| Документ.ЗаявкаНаРасходованиеДенежныхСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа
|ГДЕ
| ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.Ссылка = &ДокументСсылка
| И ЗаявкаНаРасходованиеДенежныхСредствРасшифровкаПлатежа.Ссылка.ХозяйственнаяОперация НЕ В (
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КонвертацияВалюты),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВнутренняяПередачаДенежныхСредств))
|");
КонецЕсли;
Если ПравоДоступа("Чтение", Метаданные.Документы.ЗаявкаНаКомандировку) Тогда
ЧастиЗапроса.Добавить("
|ВЫБРАТЬ
| ВыдачаПодОтчет.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств
|ИЗ
| Документ.ЗаявкаНаКомандировку.ВыдачаПодОтчет КАК ВыдачаПодОтчет
|ГДЕ
| ВыдачаПодОтчет.Ссылка = &ДокументСсылка
|");
КонецЕсли;
Если ЧастиЗапроса.Количество() Тогда
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(ЧастиЗапроса, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
СтатьиДвиженияДенежныхСредств = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СтатьяДвиженияДенежныхСредств");
КонецЕсли;
Возврат СтатьиДвиженияДенежныхСредств;
КонецФункции
#КонецОбласти
#КонецЕсли