#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Проведение
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("Бюджетирование");
МеханизмыДокумента.Добавить("КонтрольЛимитовБюджетирования");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ЭкземплярБюджета") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
ТекстЗапросаТаблицаОборотыБюджетов(Запрос, ТекстыЗапроса, Регистры);
ТекстЗапросаТаблицаЛимитыПоДаннымБюджетирования(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
#КонецОбласти
#Область СозданиеНаОсновании
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
КомандаКорректировкиБюджета = Документы.ЭкземплярБюджета.ДобавитьКомандуСоздатьНаОсновании(
КомандыСозданияНаОсновании);
Если КомандаКорректировкиБюджета <> Неопределено Тогда
МассивСтатусов = Новый Массив;
МассивСтатусов.Добавить(Перечисления.СтатусыПланов.НаУтверждении);
МассивСтатусов.Добавить(Перечисления.СтатусыПланов.Утвержден);
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(
КомандаКорректировкиБюджета,
"Статус",
МассивСтатусов,
ВидСравненияКомпоновкиДанных.ВСписке);
КонецЕсли;
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ЭкземплярБюджета) Тогда
КомандаСоздатьНаОсновании = КомандыСозданияНаОсновании.Добавить();
КомандаСоздатьНаОсновании.Менеджер = Метаданные.Документы.ЭкземплярБюджета.ПолноеИмя();
КомандаСоздатьНаОсновании.Представление = НСтр("ru='Корректировка бюджета'");
КомандаСоздатьНаОсновании.РежимЗаписи = "Проводить";
Возврат КомандаСоздатьНаОсновании;
КонецЕсли;
Возврат Неопределено;
КонецФункции
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Функция СформироватьЗапросПроверкиПриСменеСтатуса(МассивДокументов, НовыйСтатус, ДополнительныеПараметры) Экспорт
ЗначениеНовогоСтатуса = Перечисления.СтатусыПланов[НовыйСтатус];
ТекстЗапроса =
"ВЫБРАТЬ
| ТаблицаДокументов.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Ссылка) КАК Представление,
| ПРЕДСТАВЛЕНИЕ(ТаблицаДокументов.Статус) КАК ПредставлениеТекущегоСтатуса,
| ПРЕДСТАВЛЕНИЕ(&Статус) КАК ПредставлениеНовогоСтатуса,
| ВЫБОР
| КОГДА ТаблицаДокументов.Статус = &Статус
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК СтатусСовпадает,
| ТаблицаДокументов.Проведен КАК Проведен,
| ТаблицаДокументов.ПометкаУдаления КАК ПометкаУдаления,
| ИСТИНА КАК ЗаписьПроведением
|ИЗ
| Документ.ЭкземплярБюджета КАК ТаблицаДокументов
|ГДЕ
| ТаблицаДокументов.Ссылка В(&МассивДокументов)";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Статус", ЗначениеНовогоСтатуса);
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Возврат Запрос;
КонецФункции
Функция ПроверкаПередСменойСтатуса(ВыборкаПроверки, НовыйСтатус, ДополнительныеПараметры) Экспорт
Возврат Истина;
КонецФункции
Процедура ЗаполнитьБюджетПоДаннымИнформационнойБазы(Объект) Экспорт
Перем Отказ, ТекстСообщения;
Объект.АналитикаСтатейБюджетов.Очистить();
Объект.ОборотыПоСтатьямБюджетов.Очистить();
РеквизитыСценария = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Сценарий,
"Валюта, ТребоватьУказанияКурсовДляКаждогоПериода");
ВалютаСценария = РеквизитыСценария.Валюта;
ТребоватьУказанияКурсовДляКаждогоПериода = РеквизитыСценария.ТребоватьУказанияКурсовДляКаждогоПериода;
ТаблицаАналитикШапки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидБюджета, "АналитикиШапки.ВидАналитики");
СписокАналитикШапки = Новый СписокЗначений;
СписокАналитикШапки.ЗагрузитьЗначения(ТаблицаАналитикШапки.Выгрузить().ВыгрузитьКолонку("ВидАналитики"));
ПараметрыВывода = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(Объект.ВидБюджета,
Перечисления.РежимыФормированияБюджетныхОтчетов.Заполнение);
ОбъектИПараметрыРасчета = БюджетнаяОтчетностьКлиентСервер.СтруктураОбъектаДляРасчетаЯчейки();
ОбъектИПараметрыРасчета.Объект = Объект;
ОбъектИПараметрыРасчета.ВалютаСценария = ВалютаСценария;
СтруктураПараметров = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(
Объект.ВидБюджета, Перечисления.РежимыФормированияБюджетныхОтчетов.Документ);
КэшПараметровСтатей = БюджетированиеСервер.ЗаполнитьКэшПараметровСтатей(СтруктураПараметров);
ОбъектИПараметрыРасчета.КэшПараметровСтатей = КэшПараметровСтатей;
ОбъектИПараметрыРасчета.ТребоватьУказанияКурсовДляКаждогоПериода = ТребоватьУказанияКурсовДляКаждогоПериода;
ОбъектИПараметрыРасчета.ПараметрыВыводаВидаБюджета = ПоместитьВоВременноеХранилище(ПараметрыВывода);
ТаблицаКурсов = БюджетнаяОтчетностьВызовСервера.ТаблицаКурсов(ОбъектИПараметрыРасчета,
ПараметрыВывода,
Неопределено,
Отказ,
ТекстСообщения);
АдресТаблицыКурсов = ПоместитьВоВременноеХранилище(ТаблицаКурсов);
ОбъектИПараметрыРасчета.АдресТаблицыКурсов = АдресТаблицыКурсов;
РежимФормирования = Перечисления.РежимыФормированияБюджетныхОтчетов.Заполнение;
ПараметрыОтчета = ПараметрыВыводаВидаБюджетаВТабличныйДокумент(Объект,
СписокАналитикШапки,
ВалютаСценария,
ПараметрыВывода,
РежимФормирования);
ДанныеЭкземпляраБюджета = БюджетнаяОтчетностьВыводСервер.ДанныеЭкземпляраБюджета(ПараметрыОтчета);
Если ПараметрыОтчета.Действие = Перечисления.ТипыДействийЭкземпляровБюджетов.ИсправлениеЭкземпляраБюджета Тогда
ОбъектИПараметрыРасчета.Объект.ОборотыПоСтатьямБюджетов.Загрузить(ДанныеЭкземпляраБюджета.ОборотыПоСтатьямБюджетов);
ОбъектИПараметрыРасчета.Объект.АналитикаСтатейБюджетов.Загрузить(ДанныеЭкземпляраБюджета.АналитикаСтатейБюджетов);
Возврат;
КонецЕсли;
ДанныеЯчеек = ДанныеЭкземпляраБюджета.ДанныеЯчеек;
СтрокиДанных = ДанныеЯчеек.НайтиСтроки(Новый Структура("ОсновнойЭлемент", Истина));
Периодичности = ПараметрыВывода.СтруктураКолонокТаблицыДанных.Периодичности;
ВидыАналитик = ПараметрыВывода.СтруктураКолонокТаблицыДанных.ВидыАналитик;
Измерения = ПараметрыВывода.СтруктураКолонокТаблицыДанных.Измерения;
ПараметрыЯчеек = ПараметрыВывода.СтруктураОписанияОтчета.ПараметрыЯчеек;
ПараметрыПериода = БюджетнаяОтчетностьВыводСервер.ПреобразоватьПараметрыДанныхВДанныеПериодов(
ПараметрыВывода.СтруктураКолонокТаблицыДанных, ПараметрыОтчета);
КэшРеквизитовСтатей = Новый Соответствие;
КэшРеквизитовЭлементовБюджета = БюджетнаяОтчетностьРасчетКэшаСервер.КэшРеквизитовЭлементовБюджета(Объект.ВидБюджета);
ПараметрыВывода.Вставить("КэшРеквизитовЭлементовБюджета", КэшРеквизитовЭлементовБюджета);
ПараметрыРасчетаЗначения = БюджетнаяОтчетностьВыводСервер.ШаблонПараметровРасчетаЗначенийЯчейки();
ПараметрыРасчетаЗначения.ДанныеЯчеек = ДанныеЯчеек;
ПараметрыРасчетаЗначения.ПараметрыЯчеек = ПараметрыЯчеек;
ПараметрыРасчетаЗначения.ПараметрыПериодов = ПараметрыПериода;
ПараметрыРасчетаЗначения.РасчетИзменений = Ложь;
ПараметрыРасчетаЗначения.КэшРеквизитовЭлементовБюджета = КэшРеквизитовЭлементовБюджета;
ОбъектИПараметрыРасчета.Вставить("ТекущийНомерПоПорядку", 0);
Для Каждого СтрокаДанных Из СтрокиДанных Цикл
ПараметрыЯчейки = ПараметрыЯчеек.Найти(СтрокаДанных.ИндексСтроки, "ИндексСтроки");
Если ПараметрыЯчейки.РасчетЗаполнение <> "заполнение"
И ПараметрыЯчейки.РасчетЗаполнение <> "расчет" Тогда
Продолжить;
КонецЕсли;
Расшифровка = Новый Структура;
Расшифровка.Вставить("СтатьяБюджетов", СтрокаДанных.СтатьяБюджетов);
Расшифровка.Вставить("Строка", СтрокаДанных.Строка);
Для Каждого Периодичность Из Периодичности Цикл
ИмяПоля = ФинансоваяОтчетностьКлиентСервер.СтрокиПериода(Периодичность).Период;
Если ЗначениеЗаполнено(СтрокаДанных[ИмяПоля]) Тогда
Расшифровка.Вставить(ИмяПоля, СтрокаДанных[ИмяПоля]);
КонецЕсли;
КонецЦикла;
Для Каждого Измерение Из Измерения Цикл
Если ЗначениеЗаполнено(СтрокаДанных[Измерение]) Тогда
Расшифровка.Вставить(Измерение, СтрокаДанных[Измерение]);
КонецЕсли;
КонецЦикла;
ЗначенияАналитик = Новый Соответствие;
Расшифровка.Вставить("ЗначенияАналитик", ЗначенияАналитик);
Для Каждого ВидАналитики Из ВидыАналитик Цикл
ИмяПоля = ФинансоваяОтчетностьПовтИсп.ИмяПоляБюджетногоОтчета(ВидАналитики);
ЗначенияАналитик.Вставить(ВидАналитики, СтрокаДанных[ИмяПоля]);
КонецЦикла;
ВалютаВывода = ВалютаВводаАналитики(Расшифровка, КэшРеквизитовСтатей);
Если ЗначениеЗаполнено(ВалютаВывода) Тогда
Расшифровка.Вставить("Валюта", ВалютаВывода);
КонецЕсли;
Если ПараметрыЯчейки.ФлагСумма Тогда
Расшифровка.Вставить("ИмяПоказателя", "Сумма");
ПараметрыРасчетаЗначения.СтрокаДанных = СтрокаДанных;
ПараметрыРасчетаЗначения.Префикс = "Сумма";
Значение = БюджетнаяОтчетностьВыводСервер.РассчитатьЗначениеЯчейки(ПараметрыРасчетаЗначения);
Если ТипЗнч(Значение) = Тип("Число") Тогда
Значение = Значение * ?(ПараметрыЯчейки.ОбратныйЗнак, -1, 1);
КонецЕсли;
РезультатОтражения = БюджетнаяОтчетностьКлиентСервер.ОтразитьИзменениеЯчейки(ОбъектИПараметрыРасчета, Расшифровка, Значение,,Истина);
РасшифровкаРасчета = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Расшифровка);
РасшифровкаРасчета.Удалить("ЗначенияАналитик");
РасшифровкаРасчета.Удалить("Валюта");
РезультатВыполнения = БюджетнаяОтчетностьВыводСервер.РассчитатьСвязанныеСтатьиБюджетов(ПараметрыВывода,
ДанныеЯчеек,
ПараметрыОтчета,
РасшифровкаРасчета,
РезультатОтражения);
Если РезультатВыполнения <> Неопределено Тогда
Для Каждого Изменение Из РезультатВыполнения.Результат Цикл
Значение = ?(ЗначениеЗаполнено(Изменение.Значение), Изменение.Значение, Неопределено);
БюджетнаяОтчетностьКлиентСервер.ОтразитьИзменениеЯчейки(ОбъектИПараметрыРасчета,
Изменение.Расшифровка,
Значение,,
Истина);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ПараметрыЯчейки.ФлагКоличество Тогда
Расшифровка.Вставить("ИмяПоказателя", "Количество");
ПараметрыРасчетаЗначения.СтрокаДанных = СтрокаДанных;
ПараметрыРасчетаЗначения.Префикс = "Количество";
Значение = БюджетнаяОтчетностьВыводСервер.РассчитатьЗначениеЯчейки(ПараметрыРасчетаЗначения);
Если ТипЗнч(Значение) = Тип("Число") Тогда
Значение = Значение * ?(ПараметрыЯчейки.ОбратныйЗнак, -1, 1);
КонецЕсли;
РезультатОтражения = БюджетнаяОтчетностьКлиентСервер.ОтразитьИзменениеЯчейки(ОбъектИПараметрыРасчета,
Расшифровка,
Значение,,
Истина);
РасшифровкаРасчета = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Расшифровка);
РасшифровкаРасчета.Удалить("ЗначенияАналитик");
РезультатВыполнения = БюджетнаяОтчетностьВыводСервер.РассчитатьСвязанныеСтатьиБюджетов(ПараметрыВывода,
ДанныеЯчеек,
ПараметрыОтчета,
РасшифровкаРасчета,
РезультатОтражения);
Если РезультатВыполнения <> Неопределено Тогда
Для Каждого Изменение Из РезультатВыполнения.Результат Цикл
Значение = ?(ЗначениеЗаполнено(Изменение.Значение), Изменение.Значение, Неопределено);
БюджетнаяОтчетностьКлиентСервер.ОтразитьИзменениеЯчейки(ОбъектИПараметрыРасчета,
Изменение.Расшифровка,
Значение,,
Истина);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбъектИПараметрыРасчета.Удалить("ТекущийНомерПоПорядку");
КонецПроцедуры
Процедура ПересчитатьСвязанныеЯчейкиЭкземпляраБюджета(Объект) Экспорт
РеквизитыСценария = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Сценарий,
"Валюта, ТребоватьУказанияКурсовДляКаждогоПериода");
ВалютаСценария = РеквизитыСценария.Валюта;
ТребоватьУказанияКурсовДляКаждогоПериода = РеквизитыСценария.ТребоватьУказанияКурсовДляКаждогоПериода;
ТаблицаАналитикШапки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидБюджета, "АналитикиШапки.ВидАналитики");
СписокАналитикШапки = Новый СписокЗначений;
СписокАналитикШапки.ЗагрузитьЗначения(ТаблицаАналитикШапки.Выгрузить().ВыгрузитьКолонку("ВидАналитики"));
ПараметрыВывода = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(Объект.ВидБюджета,
Перечисления.РежимыФормированияБюджетныхОтчетов.Документ);
ОбъектИПараметрыРасчета = БюджетнаяОтчетностьКлиентСервер.СтруктураОбъектаДляРасчетаЯчейки();
ОбъектИПараметрыРасчета.Объект = Объект;
ОбъектИПараметрыРасчета.ВалютаСценария = ВалютаСценария;
СтруктураПараметров = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(
Объект.ВидБюджета, Перечисления.РежимыФормированияБюджетныхОтчетов.Документ);
КэшПараметровСтатей = БюджетированиеСервер.ЗаполнитьКэшПараметровСтатей(СтруктураПараметров);
ОбъектИПараметрыРасчета.КэшПараметровСтатей = КэшПараметровСтатей;
ОбъектИПараметрыРасчета.ТребоватьУказанияКурсовДляКаждогоПериода = ТребоватьУказанияКурсовДляКаждогоПериода;
ОбъектИПараметрыРасчета.ПараметрыВыводаВидаБюджета = ПоместитьВоВременноеХранилище(ПараметрыВывода);
РежимФормирования = Перечисления.РежимыФормированияБюджетныхОтчетов.Документ;
ПараметрыОтчета = ПараметрыВыводаВидаБюджетаВТабличныйДокумент(Объект,
СписокАналитикШапки,
ВалютаСценария,
ПараметрыВывода,
РежимФормирования);
ПараметрыОтчета.Вставить("КэшПараметровСтатей", КэшПараметровСтатей);
ДанныеЭкземпляраБюджета = БюджетнаяОтчетностьВыводСервер.ДанныеЭкземпляраБюджета(ПараметрыОтчета);
ДанныеЯчеек = ДанныеЭкземпляраБюджета.ДанныеЯчеек;
Если НЕ ДанныеЯчеек = Неопределено Тогда
РезультатВыполнения = БюджетнаяОтчетностьВыводСервер.РассчитатьСвязанныеСтатьиБюджетов(
ПараметрыВывода,
ДанныеЯчеек,
ПараметрыОтчета,
Неопределено,
Неопределено,
Истина);
Если РезультатВыполнения <> Неопределено Тогда
Для Каждого Изменение Из РезультатВыполнения.Результат Цикл
Значение = ?(ЗначениеЗаполнено(Изменение.Значение), Изменение.Значение, Неопределено);
БюджетнаяОтчетностьКлиентСервер.ОтразитьИзменениеЯчейки(ОбъектИПараметрыРасчета, Изменение.Расшифровка, Значение);
КонецЦикла;
КонецЕсли;
ПараметрыОтчета.Вставить("ДанныеЯчеек", ДанныеЯчеек);
РезультатВыполнения = БюджетнаяОтчетностьВыводСервер.ИзмененияЭкземпляраБюджета(ПараметрыОтчета);
Если РезультатВыполнения <> Неопределено Тогда
Для Каждого Изменение Из РезультатВыполнения.Результат Цикл
Значение = ?(ЗначениеЗаполнено(Изменение.Значение), Изменение.Значение, Неопределено);
БюджетнаяОтчетностьКлиентСервер.ОтразитьИзменениеЯчейки(ОбъектИПараметрыРасчета, Изменение.Расшифровка, Значение);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПараметрыВыводаВидаБюджетаВТабличныйДокумент(Объект,
СписокАналитикШапки,
ВалютаСценария,
ПараметрыВыводаВидаБюджета,
РежимФормирования,
ДанныеЯчеек = Неопределено) Экспорт
ПараметрыДанных = Новый Структура;
Если ПолучитьФункциональнуюОпцию("ФормироватьБюджетыПоОрганизациям",
Новый Структура("МодельБюджетирования", Объект.МодельБюджетирования)) Тогда
ПараметрыДанных.Вставить("Организация", Объект.Организация);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ФормироватьБюджетыПоПодразделениям",
Новый Структура("МодельБюджетирования", Объект.МодельБюджетирования)) Тогда
ПараметрыДанных.Вставить("Подразделение", Объект.Подразделение);
КонецЕсли;
ПараметрыДанных.Вставить("Валюта", ВалютаСценария);
ПараметрыДанных.Вставить("Сценарий", Объект.Сценарий);
ПараметрыДанных.Вставить("Документ", Объект.Ссылка);
ПараметрыДанных.Вставить("Действие", Объект.Действие);
ПараметрыДанных.Вставить("АналитикаСтатейБюджетов", Объект.АналитикаСтатейБюджетов.Выгрузить());
ПараметрыДанных.Вставить("ОборотыПоСтатьямБюджетов", Объект.ОборотыПоСтатьямБюджетов.Выгрузить());
ПараметрыДанных.Вставить("АналитикаЗначений", Объект.АналитикаЗначений.Выгрузить());
ТекстыЗапросов = Новый Массив;
ТекстыЗапросов.Добавить(ОбщегоНазначенияУТ.ТекстЗапросаДанныеТЧОбъекта(Объект.Ссылка, "АналитикаСтатейБюджетов",
Ложь, "ИдентификаторСтроки"));
ТекстыЗапросов.Добавить(ОбщегоНазначенияУТ.ТекстЗапросаДанныеТЧОбъекта(Объект.Ссылка, "ОборотыПоСтатьямБюджетов",
Ложь, "ИдентификаторСтроки"));
ТекстыЗапросов.Добавить(ОбщегоНазначенияУТ.ТекстЗапросаДанныеТЧОбъекта(Объект.Ссылка, "АналитикаЗначений",
Ложь, "ИдентификаторСтроки"));
ПараметрыДанных.Вставить("ТекстЗапросаТаблицыДокумента", СтрСоединить(ТекстыЗапросов,
ОбщегоНазначения.РазделительПакетаЗапросов()));
Если ТипЗнч(Объект) = Тип("ВыборкаИзРезультатаЗапроса") Тогда
ПараметрыДанных.Вставить("ДатаАктуальности", КонецДня(Объект.ДатаДокумента));
Иначе
ПараметрыДанных.Вставить("ДатаАктуальности", КонецДня(?(ЗначениеЗаполнено(Объект.Ссылка), Объект.Дата,
ТекущаяДатаСеанса())));
КонецЕсли;
ПараметрыДанных.Вставить("ВалютаОтчета", ВалютаСценария);
ПараметрыДанных.Вставить("ВалютаСценария", ВалютаСценария);
МаксимальныйНомер = 0;
Для Каждого СтрокаОборотов Из ПараметрыДанных.ОборотыПоСтатьямБюджетов Цикл
МаксимальныйНомер = Макс(СтрокаОборотов.НомерПоПорядку, МаксимальныйНомер);
КонецЦикла;
ПараметрыДанных.Вставить("МаксимальныйНомерПоПорядку", МаксимальныйНомер);
СтатусыДанных = Новый СписокЗначений;
СтатусыДанных.Добавить(Перечисления.СтатусыПланов.Утвержден);
СтатусыДанных.Добавить(Перечисления.СтатусыПланов.НаУтверждении);
СтатусыДанных.Добавить(Перечисления.СтатусыПланов.ВПодготовке);
ПараметрыДанных.Вставить("Статус", СтатусыДанных);
ПараметрыДанных.Вставить("ВидБюджета", Объект.ВидБюджета);
ПараметрыДанных.Вставить("ПараметрыВыводаВидаБюджета", ПараметрыВыводаВидаБюджета);
ПараметрыДанных.Вставить("ДанныеЯчеек", ДанныеЯчеек);
БюджетнаяОтчетностьКлиентСервер.ПараметрыПериода(Объект, ПараметрыДанных);
ДополнительныеФильтрыПоАналитикам = Новый Структура;
Для Каждого ВидАналитики Из СписокАналитикШапки Цикл
ИмяПоля = ФинансоваяОтчетностьПовтИсп.ИмяПоляБюджетногоОтчета(ВидАналитики.Значение);
ДополнительныеФильтрыПоАналитикам.Вставить(ИмяПоля);
ПараметрыДанных.Вставить(ИмяПоля, Объект["Аналитика" + (СписокАналитикШапки.Индекс(ВидАналитики) + 1)]);
КонецЦикла;
ПараметрыДанных.Вставить("ДополнительныеФильтрыПоАналитикам", ДополнительныеФильтрыПоАналитикам);
ПараметрыДанных.Вставить("ИспользоватьДляВводаПлана", Истина);
ПараметрыДанных.Вставить("РежимФормирования", РежимФормирования);
ПараметрыДанных.Вставить("ВыводитьИерархиюЭлементов", Истина);
ПараметрыДанных.Вставить("УчитыватьДополнительныйОтборПоИерархии", Ложь);
Возврат ПараметрыДанных;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"ПрисоединитьДополнительныеТаблицы
|ЭтотСписок КАК Т
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыБюджетов.КэшСтатейИПоказателей КАК Т1
| ПО Т.ВидБюджета = Т1.Ссылка И Т1.ПривилегированныйРежим = Ложь
|;
|РазрешитьЧтениеИзменение
|ГДЕ
| ДляВсехСтрок( ЗначениеРазрешено(Т1.СтатьяПоказатель, NULL КАК ИСТИНА)
| ) И ЗначениеРазрешено(Т.Организация)
| И ЗначениеРазрешено(Т.Подразделение)
| И ЗначениеРазрешено(Т.Сценарий)
| И ЗначениеРазрешено(Т.ВидБюджета)";
КонецПроцедуры
#КонецОбласти
Функция ИзмеренияБюджетаПоУмолчанию(МодельБюджетирования, Ответственный) Экспорт
Измерения = Новый Структура;
Если Не ЗначениеЗаполнено(МодельБюджетирования) Тогда
Возврат Измерения;
КонецЕсли;
ДанныеМоделиБюджетирования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(МодельБюджетирования, "БюджетыПоОрганизациям, БюджетыПоПодразделениям");
ИменаРеквизитов = Новый Массив;
Если ДанныеМоделиБюджетирования.БюджетыПоОрганизациям Тогда
ИменаРеквизитов.Добавить("Организация");
КонецЕсли;
Если ДанныеМоделиБюджетирования.БюджетыПоПодразделениям Тогда
ИменаРеквизитов.Добавить("Подразделение");
КонецЕсли;
Если ИменаРеквизитов.Количество() > 0 Тогда
ОписаниеРеквизитов = Новый Структура;
Параметры = ЗаполнениеОбъектовПоСтатистике.ПараметрыЗаполняемыхРеквизитов();
Параметры.РазрезыСбораСтатистики.ИспользоватьТолькоЗаполненные = "МодельБюджетирования,Ответственный";
РеквизитыДляОтбора = Новый Структура("МодельБюджетирования,Ответственный", МодельБюджетирования, Ответственный);
ЗаполнениеОбъектовПоСтатистике.ДобавитьОписаниеЗаполняемыхРеквизитов(ОписаниеРеквизитов, "Организация, Подразделение", Параметры);
Измерения = ЗаполнениеОбъектовПоСтатистике.ПолучитьЗначенияРеквизитов(
Документы.ЭкземплярБюджета.ПустаяСсылка(), ОписаниеРеквизитов, РеквизитыДляОтбора);
КонецЕсли;
Возврат Измерения;
КонецФункции
Процедура ПолучитьДанныеПоКорректировкамИсправлениямБюджета(ПараметрыБюджета, АдресХранилища) Экспорт
ОписаниеЗамера = ОценкаПроизводительности.НачатьЗамерДлительнойОперации(
"Документ.ЭкземплярБюджета.МодульМенеджера.ПолучитьДанныеПоКорректировкамИсправлениямБюджета");
ДокументРезультат = Новый ТабличныйДокумент;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ПараметрыБюджета.СхемаКомпоновкиДанных,
ПараметрыБюджета.НастройкиКомпоновкиДанных, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ДанныеБюджета = Новый Структура("ДокументРезультат, ДанныеРасшифровки");
ДанныеБюджета.ДокументРезультат = ДокументРезультат;
ДанныеБюджета.ДанныеРасшифровки = ДанныеРасшифровки;
ПоместитьВоВременноеХранилище(ДанныеБюджета, АдресХранилища);
ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, Цел(ДокументРезультат.ВысотаТаблицы
/ 100));
КонецПроцедуры
#КонецОбласти
#Область Печать
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПечатьБюджета";
КомандаПечати.Представление = НСтр("ru = 'Печать бюджета'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПечатьБюджетаСписком";
КомандаПечати.Представление = НСтр("ru = 'Печать бюджета списком'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьБюджета") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуБюджета(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПечатьБюджета",
НСтр("ru='Печать бюджета'"),
ТабличныйДокумент);
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьБюджетаСписком") Тогда
ТабличныйДокумент = СформироватьПечатнуюФормуБюджетаСписком(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПечатьБюджетаСписком",
НСтр("ru='Печать бюджета списком'"),
ТабличныйДокумент);
КонецЕсли;
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры
Функция СформироватьПечатнуюФормуБюджета(МассивОбъектов, ОбъектыПечати)
Результат = Новый ТабличныйДокумент;
Результат.АвтоМасштаб = Истина;
Результат.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатьБюджета";
Запрос = ПолучитьЗапросДанныхВыводаОтчета(МассивОбъектов);
ВыборкаДокументов = Запрос.Выполнить().Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
СписокАналитикШапки = Новый СписокЗначений;
СписокАналитикШапки.ЗагрузитьЗначения(ВыборкаДокументов.АналитикиШапки.Выгрузить().ВыгрузитьКолонку("ВидАналитики"));
РежимФормирования = Перечисления.РежимыФормированияБюджетныхОтчетов.ПечатьБюджета;
ПараметрыВыводаВидаБюджета = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(
ВыборкаДокументов.ВидБюджета, РежимФормирования);
ПараметрыОтчета = ПараметрыВыводаВидаБюджетаВТабличныйДокумент(ВыборкаДокументов,
СписокАналитикШапки,
ВыборкаДокументов.ВалютаСценария,
ПараметрыВыводаВидаБюджета,
РежимФормирования);
БюджетныйОтчет = БюджетнаяОтчетностьВыводСервер.ДанныеЭкземпляраБюджета(ПараметрыОтчета);
Результат.Вывести(БюджетныйОтчет.Результат);
Результат.ВывестиГоризонтальныйРазделительСтраниц();
АналитическаяЗаписка = СформироватьПечатнуюФормуАналитическойЗаписки(ПараметрыОтчета,
ПараметрыВыводаВидаБюджета.СтруктураКолонокТаблицыДанных,
БюджетныйОтчет.Примечания);
Если АналитическаяЗаписка <> Неопределено Тогда
Результат.Вывести(АналитическаяЗаписка);
Результат.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СформироватьПечатнуюФормуАналитическойЗаписки(ПараметрыОтчета, СтруктураКолонокТаблицыДанных, Примечания)
Результат = Новый ТабличныйДокумент;
Если Примечания = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ТаблицаДанных = Примечания.ТаблицаДанных;
Если Не ТаблицаДанных.Количество() Тогда
Возврат Неопределено;
КонецЕсли;
ТаблицаДанных.Сортировать("НомерТаблицы, НомерПримечания");
СтатьиБюджетов = ТаблицаДанных.ВыгрузитьКолонку("СтатьяБюджетов");
СтатьиБюджетов = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СтатьиБюджетов);
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ
| СтатьиБюджетов.Ссылка КАК Ссылка,
| СтатьиБюджетов.Ссылка.Представление КАК Представление,
| СтатьиБюджетов.КоличествоИспользуемыхАналитик КАК КоличествоАналитик,
| &ТекстВидыАналитик,
| &ТекстПредставлениеВидовАналитик,
| СтатьиБюджетов.УчитыватьПоВалюте КАК УчитыватьПоВалюте,
| СтатьиБюджетов.УчитыватьПоКоличеству КАК УчитыватьПоКоличеству
|ИЗ
| Справочник.СтатьиБюджетов КАК СтатьиБюджетов
|ГДЕ
| СтатьиБюджетов.Ссылка В(&СтатьиБюджетов)
|
|УПОРЯДОЧИТЬ ПО
| Представление
|;
|
|
|ВЫБРАТЬ
| ЭкземплярБюджета.Ответственный.Представление КАК Представление
|ИЗ
| Документ.ЭкземплярБюджета КАК ЭкземплярБюджета
|ГДЕ
| ЭкземплярБюджета.Ссылка = &ЭкземплярБюджетаСсылка";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
ТекстВидыАналитик = "";
ТекстПредставлениеВидовАналитик = "";
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстВидыАналитик = ТекстВидыАналитик
+ ?(ТекстВидыАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СтатьиБюджетов.ВидАналитики%1 КАК ВидАналитики%1",
НомерАналитики);
ТекстПредставлениеВидовАналитик = ТекстПредставлениеВидовАналитик
+ ?(ТекстПредставлениеВидовАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"СтатьиБюджетов.ВидАналитики%1.Представление КАК ПредставлениеАналитики%1",
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВидыАналитик", ТекстВидыАналитик);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПредставлениеВидовАналитик", ТекстПредставлениеВидовАналитик);
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("СтатьиБюджетов", СтатьиБюджетов);
Запрос.УстановитьПараметр("ЭкземплярБюджетаСсылка", ПараметрыОтчета.Документ);
РезультатЗапроса = Запрос.ВыполнитьПакет();
РезультатЗапроса0 = РезультатЗапроса[0];
РезультатЗапроса1 = РезультатЗапроса[1];
ВыборкаСтатейБюджетов = РезультатЗапроса0.Выбрать();
ФинОтчеты = ФинансоваяОтчетностьСервер;
СКД = Документы.ЭкземплярБюджета.ПолучитьМакет("СхемаКомпоновкиДанныхАналитическойЗаписки");
Настройки = СКД.НастройкиПоУмолчанию;
ЗаголовокОтчета = НСтр("ru = 'Аналитическая записка к бюджету'") + Символы.ПС + """%1""%2";
ЗаголовокОтчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОтчета, ПараметрыОтчета.ВидБюджета,
ОтчетыУТКлиентСервер.ПолучитьПредставлениеПериода(ПараметрыОтчета.НачалоПериода, ПараметрыОтчета.КонецПериода));
ФинОтчеты.УстановитьПараметр(Настройки.ПараметрыВывода, "Заголовок", ЗаголовокОтчета);
Периодичности = СтруктураКолонокТаблицыДанных.Периодичности;
Если Периодичности.Количество() Тогда
УпорядоченныеПериодичности = Перечисления.Периодичность.УпорядоченныеПериодичности();
ВыражениеПоля = "ВЫБОР ";
Для Каждого СледующаяПериодичность Из УпорядоченныеПериодичности Цикл
Если Периодичности.Найти(СледующаяПериодичность) = Неопределено Тогда
Продолжить;
КонецЕсли;
ИмяПоляНабора = ФинансоваяОтчетностьКлиентСервер.СтрокиПериода(СледующаяПериодичность).Период;
ФинОтчеты.НовоеПолеНабора(СКД.НаборыДанных[0], ИмяПоляНабора);
ВыражениеПоля = ВыражениеПоля + "
| КОГДА ЗначениеЗаполнено(" + ИмяПоляНабора + ")
| ТОГДА " + ИмяПоляНабора + "
|";
КонецЦикла;
ВыражениеПоля = ВыражениеПоля + "
| ИНАЧЕ &НачалоПериода
|КОНЕЦ";
Иначе
ВыражениеПоля = "&НачалоПериода";
КонецЕсли;
ВычисляемоеПоле = ФинОтчеты.НовоеВычисляемоеПоле(СКД, "Период", ВыражениеПоля);
ВычисляемоеПоле.ТипЗначения = Новый ОписаниеТипов("Дата",,,,,Новый КвалификаторыДаты(ЧастиДаты.Дата));
ФинОтчеты.УстановитьПараметр(ВычисляемоеПоле.Оформление, "Формат","ДЛФ=D" );
ФинОтчеты.НовыйПорядок(Настройки, "Период");
ФинОтчеты.УстановитьПараметр(Настройки.ПараметрыДанных, "НачалоПериода", ПараметрыОтчета.НачалоПериода, Истина);
ВидыАналитик = СтруктураКолонокТаблицыДанных.ВидыАналитик;
Для Каждого ВидАналитики Из ВидыАналитик Цикл
ПолеНабора = ФинОтчеты.НовоеПолеНабора(СКД.НаборыДанных[0],
ФинансоваяОтчетностьПовтИсп.ИмяПоляБюджетногоОтчета(ВидАналитики));
ФинОтчеты.УстановитьПараметр(ПолеНабора.Оформление, "МинимальнаяШирина", 30);
ФинОтчеты.УстановитьПараметр(ПолеНабора.Оформление, "МаксимальнаяШирина", 30);
КонецЦикла;
СтатьиУчитыватьПоВалюте = Новый Массив;
Для Каждого СтатьяБюджетов Из СтатьиБюджетов Цикл
ВыборкаСтатейБюджетов.НайтиСледующий(СтатьяБюджетов, "Ссылка");
ГруппировкаПоСтатьеБюджета = ФинОтчеты.НоваяГруппировка(Настройки.Структура);
ГруппировкаПоСтатьеБюджета.Выбор.Элементы.Очистить();
ГруппировкаПоСтатьеБюджета.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
ФинОтчеты.НовыйОтбор(ГруппировкаПоСтатьеБюджета.Отбор, "СтатьяБюджетов", ВыборкаСтатейБюджетов.Ссылка);
Представление = НСтр("ru = 'Статья бюджета ""%1""'");
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Представление,
ВыборкаСтатейБюджетов.Представление);
ФинОтчеты.УстановитьПараметр(ГруппировкаПоСтатьеБюджета.ПараметрыВывода, "Заголовок", Представление);
ФинОтчеты.УстановитьПараметр(ГруппировкаПоСтатьеБюджета.ПараметрыВывода, "ВыводитьОтбор", ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
Представление = НСтр("ru = 'N'");
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, "Адрес", Представление);
Представление = НСтр("ru = 'Период'");
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, "Период", Представление);
Для НомерАналитики = 1 По ВыборкаСтатейБюджетов.КоличествоАналитик Цикл
ВидАналитики = ВыборкаСтатейБюджетов["ВидАналитики"+НомерАналитики];
ИмяАналитики = ФинансоваяОтчетностьПовтИсп.ИмяПоляБюджетногоОтчета(ВидАналитики);
Если ВидыАналитик.Найти(ВидАналитики) <> Неопределено Тогда
ПредставлениеАналитики = ВыборкаСтатейБюджетов["ПредставлениеАналитики"+НомерАналитики];
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, ИмяАналитики, ПредставлениеАналитики);
КонецЕсли;
КонецЦикла;
Если ВыборкаСтатейБюджетов.УчитыватьПоКоличеству Тогда
Представление = НСтр("ru = 'Количество'");
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, "Количество", Представление);
КонецЕсли;
Представление = НСтр("ru = 'Сумма'");
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, "СуммаОтчета", Представление);
Если ВыборкаСтатейБюджетов.УчитыватьПоВалюте Тогда
Представление = НСтр("ru = 'Валюта'");
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, "Валюта", Представление);
СтатьиУчитыватьПоВалюте.Добавить(СтатьяБюджетов);
КонецЕсли;
Представление = НСтр("ru = 'Примечание'");
ФинОтчеты.НовоеПолеВыбора(ГруппировкаПоСтатьеБюджета, "Примечание", Представление);
ВыборкаСтатейБюджетов.Сбросить();
КонецЦикла;
ФинОтчеты.УстановитьПараметр(Настройки.ПараметрыДанных, "СтатьиУчитыватьПоВалюте", СтатьиУчитыватьПоВалюте);
ВыборкаОтветственный = РезультатЗапроса1.Выбрать();
ОтветственныйПредставление = ?(ВыборкаОтветственный.Следующий(), ВыборкаОтветственный.Представление, "");
ФинОтчеты.УстановитьПараметр(Настройки.ПараметрыДанных, "ОтветственныйПредставление", ОтветственныйПредставление);
ГруппировкаПоСтатьеБюджета = ФинОтчеты.НоваяГруппировка(Настройки.Структура);
ГруппировкаПоСтатьеБюджета.Имя = "ОтветственныйПредставление";
ГруппировкаПоСтатьеБюджета.Выбор.Элементы.Очистить();
ВнешниеИсточники = Новый Структура("ТаблицаДанных", ТаблицаДанных);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ПараметрМакетОформления = Настройки.ПараметрыВывода.Элементы.Найти("МакетОформления");
ПараметрМакетОформления.Значение = "ОформлениеОтчетовБежевый";
ПараметрМакетОформления.Использование = Истина;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеИсточники);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Результат.АвтоМасштаб = Истина;
Возврат Результат;
КонецФункции
Функция СформироватьПечатнуюФормуБюджетаСписком(МассивОбъектов, ОбъектыПечати)
Результат = Новый ТабличныйДокумент;
Результат.АвтоМасштаб = Истина;
Результат.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПечатьБюджетаСписком";
Запрос = ПолучитьЗапросДанныхВыводаОтчета(МассивОбъектов);
ВыборкаДокументов = Запрос.Выполнить().Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
СписокАналитикШапки = Новый СписокЗначений;
СписокАналитикШапки.ЗагрузитьЗначения(ВыборкаДокументов.АналитикиШапки.Выгрузить().ВыгрузитьКолонку("ВидАналитики"));
ПараметрыВыводаВидаБюджета = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(
ВыборкаДокументов.ВидБюджета, Перечисления.РежимыФормированияБюджетныхОтчетов.Документ);
РежимФормирования = Перечисления.РежимыФормированияБюджетныхОтчетов.Документ;
ПараметрыОтчета = ПараметрыВыводаВидаБюджетаВТабличныйДокумент(ВыборкаДокументов,
СписокАналитикШапки,
ВыборкаДокументов.ВалютаСценария,
ПараметрыВыводаВидаБюджета,
РежимФормирования);
ПараметрыОтчета.ВыводитьИерархиюЭлементов = Ложь;
БюджетныйОтчет = БюджетнаяОтчетностьВыводСервер.ДанныеЭкземпляраБюджета(ПараметрыОтчета);
ЗаголовокОтчета = НСтр("ru = '%1 за период с %2 по %3'");
ЗаголовокОтчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОтчета,
ВыборкаДокументов.ВидБюджета,
Формат(ВыборкаДокументов.НачалоПериода, "ДЛФ=D"),
Формат(ВыборкаДокументов.ОкончаниеПериода, "ДЛФ=D"));
ЗаголовокОтветственный = НСтр("ru = 'Ответственный: %1'");
ЗаголовокОтветственный = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОтветственный,
ВыборкаДокументов.Ответственный);
БюджетныйОтчет.ПараметрыВыводаВидаБюджета.Вставить("ЗаголовокОтчета", ЗаголовокОтчета);
БюджетныйОтчет.ПараметрыВыводаВидаБюджета.Вставить("ЗаголовокОтветственный", ЗаголовокОтветственный);
ДеревоЭлементовБюджета = БюджетныйОтчет.ДеревоСтрокСпискаРедактирования;
Если ДеревоЭлементовБюджета <> Неопределено Тогда
Для каждого СтрокаДереваБюджета Из ДеревоЭлементовБюджета.Строки Цикл
СписокПараметров = БюджетныйОтчет.ПараметрыВыводаВидаБюджета.СтруктураОписанияСпискаВвода;
КолонкиПоИзмерениям = Неопределено;
Если НЕ СоставКолонокКорневогоЭлемента(СтрокаДереваБюджета, СписокПараметров, КолонкиПоИзмерениям) Тогда
Продолжить;
КонецЕсли;
ИДТаблицы = СтрокаДереваБюджета.ИДТаблицы;
ГлубинаДерева = Неопределено;
ПредставленияАналитикПрочее = ПолучитьПредставленияАналитикПрочее(КолонкиПоИзмерениям.СтрокиОснования);
СхемаКомпоновкиДанных = ПолучитьСКДПечатиДокументаБезГруппировок(ИДТаблицы,
КолонкиПоИзмерениям,
ГлубинаДерева,
БюджетныйОтчет.ПараметрыВыводаВидаБюджета,
ПредставленияАналитикПрочее,
Истина);
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ПараметрМакетОформления = Настройки.ПараметрыВывода.Элементы.Найти("МакетОформления");
ПараметрМакетОформления.Значение = "ОформлениеОтчетовБежевый";
ПараметрМакетОформления.Использование = Истина;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешниеДанные = Новый Структура("ДанныеЯчеек", БюджетныйОтчет.ДанныеЯчеек);
СтруктураОписанияОтчета = БюджетныйОтчет.ПараметрыВыводаВидаБюджета.СтруктураОписанияОтчета;
ВнешниеДанные.Вставить("ПараметрыЯчеек", СтруктураОписанияОтчета.ПараметрыЯчеек);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(
МакетКомпоновки, ВнешниеДанные, ДанныеРасшифровки);
ТабличныйДокумент = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Результат.Вывести(ТабличныйДокумент);
Если ТабличныйДокумент.ВысотаСтраницы Тогда
БюджетныйОтчет.ПараметрыВыводаВидаБюджета.ЗаголовокОтчета = "";
БюджетныйОтчет.ПараметрыВыводаВидаБюджета.ЗаголовокОтветственный = "";
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция СформироватьТабличныйДокументЭкземпляраБюджета(ДокументСсылка) Экспорт
Запрос = ПолучитьЗапросДанныхВыводаОтчета(ДокументСсылка);
ВыборкаДокументов = Запрос.Выполнить().Выбрать();
ВыборкаДокументов.Следующий();
Если Не ЗначениеЗаполнено(ВыборкаДокументов.ВидБюджета)
Или Не ЗначениеЗаполнено(ВыборкаДокументов.Сценарий)
Или Не ЗначениеЗаполнено(ВыборкаДокументов.НачалоПериода)
Или Не ЗначениеЗаполнено(ВыборкаДокументов.ОкончаниеПериода) Тогда
Возврат Новый ТабличныйДокумент;
КонецЕсли;
СписокАналитикШапки = Новый СписокЗначений;
СписокАналитикШапки.ЗагрузитьЗначения(ВыборкаДокументов.АналитикиШапки.Выгрузить().ВыгрузитьКолонку("ВидАналитики"));
ПараметрыВыводаВидаБюджета = БюджетнаяОтчетностьРасчетКэшаСервер.ПолучитьПараметрыВыводаВидаБюджета(
ВыборкаДокументов.ВидБюджета, Перечисления.РежимыФормированияБюджетныхОтчетов.Документ);
РежимФормирования = Перечисления.РежимыФормированияБюджетныхОтчетов.Документ;
ПараметрыОтчета = ПараметрыВыводаВидаБюджетаВТабличныйДокумент(ВыборкаДокументов,
СписокАналитикШапки,
ВыборкаДокументов.ВалютаСценария,
ПараметрыВыводаВидаБюджета,
РежимФормирования);
БюджетныйОтчет = БюджетнаяОтчетностьВыводСервер.ДанныеЭкземпляраБюджета(ПараметрыОтчета);
Возврат БюджетныйОтчет.Результат;
КонецФункции
#КонецОбласти
#КонецЕсли
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поля.Добавить("Действие");
Поля.Добавить("Номер");
Поля.Добавить("Дата");
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
Данные.Вставить("НаименованиеДокумента", СокрЛП(Данные.Действие));
Данные.Удалить("Действие");
СтандартнаяОбработка = Ложь;
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 %2 от %3'"), Данные.НаименованиеДокумента, Данные.Номер, Данные.Дата);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область Проведение
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Процедура ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка)
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| ЭкземплярБюджета.Ссылка КАК Ссылка,
| ЭкземплярБюджета.Дата КАК Дата,
| ЭкземплярБюджета.Статус КАК Статус,
| ЭкземплярБюджета.Организация КАК Организация,
| ЭкземплярБюджета.Подразделение КАК Подразделение,
| ЭкземплярБюджета.Сценарий КАК Сценарий,
| ЭкземплярБюджета.Сценарий.Валюта КАК ВалютаСценария,
| ЭкземплярБюджета.МодельБюджетирования КАК МодельБюджетирования,
| ЭкземплярБюджета.НачалоПериода КАК НачалоПериода,
| ЭкземплярБюджета.ОкончаниеПериода КАК ОкончаниеПериода,
| ЭкземплярБюджета.Действие КАК Действие
|ИЗ
| Документ.ЭкземплярБюджета КАК ЭкземплярБюджета
|ГДЕ
| ЭкземплярБюджета.Ссылка = &Ссылка";
Реквизиты = Запрос.Выполнить().Выбрать();
Реквизиты.Следующий();
СтруктураПараметров = Новый Структура("МодельБюджетирования", Реквизиты.МодельБюджетирования);
ФормироватьБюджетыПоОрганизациям = ПолучитьФункциональнуюОпцию("ФормироватьБюджетыПоОрганизациям", СтруктураПараметров);
ФормироватьБюджетыПоПодразделениям = ПолучитьФункциональнуюОпцию("ФормироватьБюджетыПоПодразделениям", СтруктураПараметров);
Запрос.УстановитьПараметр("Ссылка", Реквизиты.Ссылка);
Запрос.УстановитьПараметр("Дата", Реквизиты.Дата);
Запрос.УстановитьПараметр("Статус", Реквизиты.Статус);
Запрос.УстановитьПараметр("Сценарий", Реквизиты.Сценарий);
Запрос.УстановитьПараметр("МодельБюджетирования", Реквизиты.МодельБюджетирования);
Запрос.УстановитьПараметр("НачалоПериода", Реквизиты.НачалоПериода);
Запрос.УстановитьПараметр("ОкончаниеПериода", Реквизиты.ОкончаниеПериода);
Если Реквизиты.Действие = Перечисления.ТипыДействийЭкземпляровБюджетов.ИсправлениеЭкземпляраБюджета Тогда
Запрос.УстановитьПараметр("МоментВремени", Реквизиты.Дата-1);
КонецЕсли;
Запрос.УстановитьПараметр("Организация", ?(ФормироватьБюджетыПоОрганизациям, Реквизиты.Организация, Неопределено));
Запрос.УстановитьПараметр("Подразделение", ?(ФормироватьБюджетыПоПодразделениям, Реквизиты.Подразделение, Неопределено));
Запрос.УстановитьПараметр("ВалютаСценария", Реквизиты.ВалютаСценария);
Запрос.УстановитьПараметр("ВалютаУправленческогоУчета", Константы.ВалютаУправленческогоУчета.Получить());
Если ФормироватьБюджетыПоОрганизациям Тогда
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Реквизиты.Организация);
Иначе
ВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
КонецЕсли;
Запрос.УстановитьПараметр("ВалютаРегламентированногоУчета", ВалютаРегламентированногоУчета);
Запрос.УстановитьПараметр("ЗаполнятьСуммуРегл", ЗначениеЗаполнено(ВалютаРегламентированногоУчета));
Запрос.УстановитьПараметр("КонтрольЛимитовПоДаннымБюджетирования2_5", ПолучитьФункциональнуюОпцию(
"КонтрольЛимитовПоДаннымБюджетирования2_5"));
КонецПроцедуры
Функция ТекстЗапросаТаблицаОборотыБюджетов(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ОборотыБюджетов";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтСводнаяТаблицаДокумента", ТекстыЗапроса) Тогда
ТекстЗапросаВтСводнаяТаблицаДокумента(Запрос, ТекстыЗапроса);
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтОбщиеЗначенияАналитик", ТекстыЗапроса) Тогда
ТекстЗапросаВтОбщиеЗначенияАналитик(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Дата КАК Период,
| &МодельБюджетирования КАК МодельБюджетирования,
| &Статус КАК Статус,
| СводнаяТаблицаДокумента.ПериодПланирования КАК ПериодПланирования,
| СводнаяТаблицаДокумента.СтатьяБюджетов КАК СтатьяБюджетов,
| &Организация КАК Организация,
| &Подразделение КАК Подразделение,
| &Сценарий КАК Сценарий,
| СводнаяТаблицаДокумента.Валюта КАК Валюта,
| &ТекстАналитик,
| СводнаяТаблицаДокумента.Количество КАК Количество,
| СводнаяТаблицаДокумента.СуммаСценария КАК СуммаСценария,
| СводнаяТаблицаДокумента.СуммаУпр КАК СуммаУпр,
| СводнаяТаблицаДокумента.СуммаРегл КАК СуммаРегл,
| СводнаяТаблицаДокумента.СуммаВВалюте КАК СуммаВВалюте
|ИЗ
| ВтСводнаяТаблицаДокумента КАК СводнаяТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОбщиеЗначенияАналитик КАК ОбщиеЗначенияАналитик
| ПО СводнаяТаблицаДокумента.СтатьяБюджетов = ОбщиеЗначенияАналитик.СтатьяБюджетов
|ГДЕ
| (СводнаяТаблицаДокумента.Количество <> 0
| ИЛИ СводнаяТаблицаДокумента.СуммаСценария <> 0
| ИЛИ СводнаяТаблицаДокумента.СуммаУпр <> 0
| ИЛИ СводнаяТаблицаДокумента.СуммаРегл <> 0
| ИЛИ СводнаяТаблицаДокумента.СуммаВВалюте <> 0)";
ТекстАналитик = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ЕСТЬNULL(ОбщиеЗначенияАналитик.АналитикаШапки%1, СводнаяТаблицаДокумента.Аналитика%1) КАК Аналитика%1",
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтСводнаяТаблицаДокумента(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтСводнаяТаблицаДокумента";
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтКурсыВалюты", ТекстыЗапроса) Тогда
ТекстЗапросаВтКурсыВалюты(Запрос, ТекстыЗапроса);
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтАналитикаСтатейБюджетов", ТекстыЗапроса) Тогда
ТекстЗапросаВтАналитикаСтатейБюджетов(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ОборотыПоСтатьямБюджетов.ПериодПланирования КАК ПериодПланирования,
| ОборотыПоСтатьямБюджетов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ОборотыПоСтатьямБюджетов.Сумма КАК СуммаСценария,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА &ВалютаСценария = АналитикаСтатейБюджетов.Валюта
| ТОГДА ОборотыПоСтатьямБюджетов.Сумма
| ИНАЧЕ ОборотыПоСтатьямБюджетов.Сумма * ВЫРАЗИТЬ(ЕСТЬNULL(КурсыВалютыСценария.Курс, 1) КАК ЧИСЛО(10, 4)) / ВЫРАЗИТЬ(ЕСТЬNULL(КурсыВалютВалюты.Курс, 1) КАК ЧИСЛО(10, 4))
| КОНЕЦ КАК ЧИСЛО(31,2)) КАК СуммаВВалюте,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА НЕ &ЗаполнятьСуммуРегл
| ТОГДА 0
| КОГДА &ВалютаСценария = &ВалютаРегламентированногоУчета
| ТОГДА ОборотыПоСтатьямБюджетов.Сумма
| ИНАЧЕ ОборотыПоСтатьямБюджетов.Сумма * ВЫРАЗИТЬ(ЕСТЬNULL(КурсыВалютыСценария.Курс, 1) КАК ЧИСЛО(10, 4)) / ВЫРАЗИТЬ(ЕСТЬNULL(КурсыВалютыРегл.Курс, 1) КАК ЧИСЛО(10, 4))
| КОНЕЦ КАК ЧИСЛО(31,2)) КАК СуммаРегл,
| ВЫРАЗИТЬ(ВЫБОР
| КОГДА &ВалютаСценария = &ВалютаУправленческогоУчета
| ТОГДА ОборотыПоСтатьямБюджетов.Сумма
| ИНАЧЕ ОборотыПоСтатьямБюджетов.Сумма * ВЫРАЗИТЬ(ЕСТЬNULL(КурсыВалютыСценария.Курс, 1) КАК ЧИСЛО(10, 4)) / ВЫРАЗИТЬ(ЕСТЬNULL(КурсыВалютыУпр.Курс, 1) КАК ЧИСЛО(10, 4))
| КОНЕЦ КАК ЧИСЛО(31,2)) КАК СуммаУпр,
| ОборотыПоСтатьямБюджетов.Количество КАК Количество,
| АналитикаСтатейБюджетов.СтатьяБюджетов КАК СтатьяБюджетов,
| АналитикаСтатейБюджетов.Валюта КАК Валюта,
| &ТекстАналитик
|ПОМЕСТИТЬ ВтСводнаяТаблицаДокумента
|ИЗ
| Документ.ЭкземплярБюджета.ОборотыПоСтатьямБюджетов КАК ОборотыПоСтатьямБюджетов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтАналитикаСтатейБюджетов КАК АналитикаСтатейБюджетов
| ПО (АналитикаСтатейБюджетов.ИдентификаторСтроки = ОборотыПоСтатьямБюджетов.ИдентификаторСтроки)
| ЛЕВОЕ СОЕДИНЕНИЕ ВтКурсыВалюты КАК КурсыВалютВалюты
| ПО (КурсыВалютВалюты.Валюта = АналитикаСтатейБюджетов.Валюта)
| И (КурсыВалютВалюты.Период В
| (ВЫБРАТЬ
| МАКСИМУМ(КурсыФильтр.Период)
| ИЗ
| ВтКурсыВалюты КАК КурсыФильтр
| ГДЕ
| КурсыФильтр.Валюта = АналитикаСтатейБюджетов.Валюта
| И КурсыФильтр.Период <= ОборотыПоСтатьямБюджетов.ПериодПланирования))
| ЛЕВОЕ СОЕДИНЕНИЕ ВтКурсыВалюты КАК КурсыВалютыУпр
| ПО (КурсыВалютыУпр.Валюта = &ВалютаУправленческогоУчета)
| И (КурсыВалютыУпр.Период В
| (ВЫБРАТЬ
| МАКСИМУМ(КурсыФильтр.Период)
| ИЗ
| ВтКурсыВалюты КАК КурсыФильтр
| ГДЕ
| КурсыФильтр.Валюта = &ВалютаУправленческогоУчета
| И КурсыФильтр.Период <= ОборотыПоСтатьямБюджетов.ПериодПланирования))
| ЛЕВОЕ СОЕДИНЕНИЕ ВтКурсыВалюты КАК КурсыВалютыСценария
| ПО (КурсыВалютыСценария.Валюта = &ВалютаСценария)
| И (КурсыВалютыСценария.Период В
| (ВЫБРАТЬ
| МАКСИМУМ(КурсыФильтр.Период)
| ИЗ
| ВтКурсыВалюты КАК КурсыФильтр
| ГДЕ
| КурсыФильтр.Валюта = &ВалютаСценария
| И КурсыФильтр.Период <= ОборотыПоСтатьямБюджетов.ПериодПланирования))
| ЛЕВОЕ СОЕДИНЕНИЕ ВтКурсыВалюты КАК КурсыВалютыРегл
| ПО (КурсыВалютыРегл.Валюта = &ВалютаРегламентированногоУчета)
| И (КурсыВалютыРегл.Период В
| (ВЫБРАТЬ
| МАКСИМУМ(КурсыФильтр.Период)
| ИЗ
| ВтКурсыВалюты КАК КурсыФильтр
| ГДЕ
| КурсыФильтр.Валюта = &ВалютаРегламентированногоУчета
| И КурсыФильтр.Период <= ОборотыПоСтатьямБюджетов.ПериодПланирования))
|ГДЕ
| ОборотыПоСтатьямБюджетов.Ссылка = &Ссылка
| И &Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Отменен)";
ТекстАналитик = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"АналитикаСтатейБюджетов.Аналитика%1 КАК Аналитика%1",
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
Если Запрос.Параметры.Свойство("МоментВремени") Тогда
ТекстЗапроса = ТекстЗапроса + "
|
|ИНДЕКСИРОВАТЬ ПО
| ОборотыПоСтатьямБюджетов.ПериодПланирования,
| АналитикаСтатейБюджетов.СтатьяБюджетов,
| АналитикаСтатейБюджетов.Валюта,
| &ТекстАналитик";
ТекстАналитик = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"АналитикаСтатейБюджетов.Аналитика%1",
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
ТекстыПодзапросов = Новый Массив;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПОМЕСТИТЬ ВтСводнаяТаблицаДокумента", "ПОМЕСТИТЬ ВтСводнаяТаблицаДокументаПредварительная");
ТекстыПодзапросов.Добавить(ТекстЗапроса);
ТекстЗапроса = "
|ВЫБРАТЬ
| ОборотыБюджетовОбороты.ПериодПланирования КАК ПериодПланирования,
| ОборотыБюджетовОбороты.Валюта КАК Валюта,
| &ТекстАналитикСПсевдонимом,
| ОборотыБюджетовОбороты.СтатьяБюджетов КАК СтатьяБюджетов,
| ОборотыБюджетовОбороты.КоличествоОборот КАК Количество,
| ОборотыБюджетовОбороты.СуммаУпрОборот КАК СуммаУпр,
| ОборотыБюджетовОбороты.СуммаСценарияОборот КАК СуммаСценария,
| ОборотыБюджетовОбороты.СуммаРеглОборот КАК СуммаРегл,
| ОборотыБюджетовОбороты.СуммаВВалютеОборот КАК СуммаВВалюте
|ПОМЕСТИТЬ ВтИсходныеОборотыБюджетов
|ИЗ
| РегистрНакопления.ОборотыБюджетов.Обороты(
| ,
| &МоментВремени,
| ,
| Организация = &Организация
| И Подразделение = &Подразделение
| И Сценарий = &Сценарий
| И (ПериодПланирования, СтатьяБюджетов, Валюта, &ТекстПолейАналитик) В
| (ВЫБРАТЬ
| ВтСводнаяТаблица.ПериодПланирования,
| ВтСводнаяТаблица.СтатьяБюджетов,
| ВтСводнаяТаблица.Валюта,
| &ТекстАналитик
| ИЗ
| ВтСводнаяТаблицаДокументаПредварительная КАК ВтСводнаяТаблица)) КАК ОборотыБюджетовОбороты
|
|ИНДЕКСИРОВАТЬ ПО
| ПериодПланирования,
| СтатьяБюджетов,
| Валюта,
| &ТекстПолейАналитик";
ТекстПолейАналитик = "";
ТекстАналитикСПсевдонимом = "";
ТекстАналитик = "";
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстПолейАналитик = ТекстПолейАналитик + ?(ТекстПолейАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("Аналитика%1", НомерАналитики);
ТекстАналитикСПсевдонимом = ТекстАналитикСПсевдонимом + ?(ТекстАналитикСПсевдонимом = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ОборотыБюджетовОбороты.Аналитика%1 КАК Аналитика%1", НомерАналитики);
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВтСводнаяТаблица.Аналитика%1", НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолейАналитик", ТекстПолейАналитик);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитикСПсевдонимом", ТекстАналитикСПсевдонимом);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
Если Запрос.Параметры.Организация = Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Организация = &Организация", "ИСТИНА");
КонецЕсли;
Если Запрос.Параметры.Подразделение = Неопределено Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Подразделение = &Подразделение", "ИСТИНА");
КонецЕсли;
ТекстыПодзапросов.Добавить(ТекстЗапроса);
ТекстЗапроса =
"ВЫБРАТЬ
| ВтСводнаяТаблица.ПериодПланирования КАК ПериодПланирования,
| ВтСводнаяТаблица.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ВтСводнаяТаблица.СуммаСценария - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаСценария, 0) КАК СуммаСценария,
| ВтСводнаяТаблица.СуммаВВалюте - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаВВалюте, 0) КАК СуммаВВалюте,
| ВтСводнаяТаблица.СуммаРегл - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаРегл, 0) КАК СуммаРегл,
| ВтСводнаяТаблица.СуммаУпр - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаУпр, 0) КАК СуммаУпр,
| ВтСводнаяТаблица.Количество - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.Количество, 0) КАК Количество,
| ВтСводнаяТаблица.СтатьяБюджетов КАК СтатьяБюджетов,
| ВтСводнаяТаблица.Валюта КАК Валюта,
| &ТекстАналитик
|ПОМЕСТИТЬ ВтСводнаяТаблицаДокумента
|ИЗ
| ВтСводнаяТаблицаДокументаПредварительная КАК ВтСводнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ ВтИсходныеОборотыБюджетов КАК ВтИсходныеОборотыБюджетов
| ПО ВтСводнаяТаблица.ПериодПланирования = ВтИсходныеОборотыБюджетов.ПериодПланирования
| И ВтСводнаяТаблица.СтатьяБюджетов = ВтИсходныеОборотыБюджетов.СтатьяБюджетов
| И ВтСводнаяТаблица.Валюта = ВтИсходныеОборотыБюджетов.Валюта
| И (&ТекстСоединенияАналитик)
|ГДЕ
| (ВтСводнаяТаблица.СуммаСценария - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаСценария, 0) <> 0
| ИЛИ ВтСводнаяТаблица.СуммаВВалюте - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаВВалюте, 0) <> 0
| ИЛИ ВтСводнаяТаблица.СуммаРегл - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаРегл, 0) <> 0
| ИЛИ ВтСводнаяТаблица.СуммаУпр - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.СуммаУпр, 0) <> 0
| ИЛИ ВтСводнаяТаблица.Количество - ЕСТЬNULL(ВтИсходныеОборотыБюджетов.Количество, 0) <> 0)
|
|ИНДЕКСИРОВАТЬ ПО
| ВтСводнаяТаблица.ИдентификаторСтроки";
ТекстАналитик = "";
ТекстСоединенияАналитик = "";
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстСоединенияАналитик = ТекстСоединенияАналитик + ?(ТекстСоединенияАналитик = "", "", Символы.ПС + Символы.Таб + "И ")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВтСводнаяТаблица.Аналитика%1 = ВтИсходныеОборотыБюджетов.Аналитика%1", НомерАналитики);
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВтСводнаяТаблица.Аналитика%1 КАК Аналитика%1", НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстСоединенияАналитик", ТекстСоединенияАналитик);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
ТекстыПодзапросов.Добавить(ТекстЗапроса);
ФинансовыйУчетПоДаннымБалансовыхРегистров.ДобавитьЗапросУдаленияВременнойТаблицы(ТекстыПодзапросов, "ВтСводнаяТаблицаДокументаПредварительная");
ФинансовыйУчетПоДаннымБалансовыхРегистров.ДобавитьЗапросУдаленияВременнойТаблицы(ТекстыПодзапросов, "ВтИсходныеОборотыБюджетов");
ТекстЗапроса = СтрСоединить(ТекстыПодзапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
Иначе
ТекстЗапроса = ТекстЗапроса + "
|
|ИНДЕКСИРОВАТЬ ПО
| ОборотыПоСтатьямБюджетов.ИдентификаторСтроки";
КонецЕсли;
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтКурсыВалюты(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтКурсыВалюты";
УстановитьПараметрыЗапросаКурсыСценария(Запрос);
ТекстЗапроса =
"ВЫБРАТЬ
| Курсы.Период,
| Курсы.Валюта,
| Курсы.БазоваяВалюта,
| Курсы.Курс
|ПОМЕСТИТЬ ВтКурсыВалюты
|ИЗ
| &КурсыСценария КАК Курсы
|
|ИНДЕКСИРОВАТЬ ПО
| Курсы.Валюта,
| Курсы.Период";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Процедура УстановитьПараметрыЗапросаКурсыСценария(Запрос)
Если Запрос.Параметры.Свойство("КурсыСценария") Тогда
Возврат;
КонецЕсли;
КурсыСценария = Справочники.Сценарии.ТаблицаКурсовСценария(Запрос.Параметры.Сценарий,,
Запрос.Параметры.НачалоПериода,
Запрос.Параметры.ОкончаниеПериода);
Запрос.УстановитьПараметр("КурсыСценария", КурсыСценария);
КонецПроцедуры
Функция ТекстЗапросаВтАналитикаСтатейБюджетов(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтАналитикаСтатейБюджетов";
ТекстЗапроса =
"ВЫБРАТЬ
| ЭкземплярБюджетаАналитикаСтатейБюджетов.СтатьяБюджетов КАК СтатьяБюджетов,
| &ТекстАналитик,
| ЭкземплярБюджетаАналитикаСтатейБюджетов.Валюта КАК Валюта,
| ЭкземплярБюджетаАналитикаСтатейБюджетов.ИдентификаторСтроки КАК ИдентификаторСтроки
|ПОМЕСТИТЬ ВтАналитикаСтатейБюджетов
|ИЗ
| Документ.ЭкземплярБюджета.АналитикаСтатейБюджетов КАК ЭкземплярБюджетаАналитикаСтатейБюджетов
|ГДЕ
| ЭкземплярБюджетаАналитикаСтатейБюджетов.Ссылка = &Ссылка
| И &Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Отменен)
|
|ИНДЕКСИРОВАТЬ ПО
| ИдентификаторСтроки";
ТекстАналитик = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ЭкземплярБюджетаАналитикаСтатейБюджетов.Аналитика%1 КАК Аналитика%1",
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтОбщиеЗначенияАналитик(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтОбщиеЗначенияАналитик";
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтФлагиАналитикаИзШапки", ТекстыЗапроса) Тогда
ТекстЗапросаВтФлагиАналитикаИзШапки(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ФлагиАналитикаИзШапки.СтатьяБюджетов,
| &ТекстАналитикиШапки
|ПОМЕСТИТЬ ВтОбщиеЗначенияАналитик
|ИЗ
| Документ.ЭкземплярБюджета КАК ЭкземплярБюджета
| ЛЕВОЕ СОЕДИНЕНИЕ ВтФлагиАналитикаИзШапки КАК ФлагиАналитикаИзШапки
| ПО (ИСТИНА)
|ГДЕ
| ЭкземплярБюджета.Ссылка = &Ссылка";
ТекстАналитикиШапки = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
ШаблонУсловияВнутриПоля =
" КОГДА ФлагиАналитикаИзШапки.ИсточникАналитикаШапка%1 = %2
| ТОГДА ЭкземплярБюджета.Аналитика%2";
Для НомерПоля = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстПоля =
" ВЫБОР
|%1
| КОНЕЦ КАК АналитикаШапки%2";
ТекстУсловийВнутриПоля = "";
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
УсловиеВнутриПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонУсловияВнутриПоля,
НомерПоля,
НомерАналитики);
ТекстУсловийВнутриПоля = ТекстУсловийВнутриПоля + ?(ТекстУсловийВнутриПоля = "", "", Символы.ПС)
+ УсловиеВнутриПоля;
КонецЦикла;
ТекстПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстПоля,
ТекстУсловийВнутриПоля,
НомерПоля);
ТекстАналитикиШапки = ТекстАналитикиШапки + ?(ТекстАналитикиШапки = "", "", "," + Символы.ПС) + ТекстПоля;
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитикиШапки", ТекстАналитикиШапки);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтФлагиАналитикаИзШапки(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтФлагиАналитикаИзШапки";
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтАналитикиШапки", ТекстыЗапроса) Тогда
ТекстЗапросаВтАналитикиШапки(Запрос, ТекстыЗапроса);
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтСтатьиБюджета", ТекстыЗапроса) Тогда
ТекстЗапросаВтСтатьиБюджета(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| СтатьиБюджета.СтатьяБюджетов,
| &ТекстПолейИсточниковАналитик
|ПОМЕСТИТЬ ВтФлагиАналитикаИзШапки
|ИЗ
| ВтСтатьиБюджета КАК СтатьиБюджета";
ТекстПолейИсточниковАналитик = "";
ТекстСоединенияАналитикиШапки = "";
ШаблонОписанияПоляВыборки = "АналитикаШапки%1.НомерСтроки КАК ИсточникАналитикаШапка%1";
ШаблонСоединенияАналитикаШапки =
" ЛЕВОЕ СОЕДИНЕНИЕ ВтАналитикиШапки КАК АналитикаШапки%1
| ПО СтатьиБюджета.СтатьяБюджетов.ВидАналитики%1 = АналитикаШапки%1.ВидАналитики";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстПолейИсточниковАналитик = ТекстПолейИсточниковАналитик + ?(ТекстПолейИсточниковАналитик = "", "", ",
| ")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияПоляВыборки,
НомерАналитики);
ТекстСоединенияАналитикиШапки = ТекстСоединенияАналитикиШапки + ?(ТекстСоединенияАналитикиШапки = "", "", "
| ")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСоединенияАналитикаШапки,
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолейИсточниковАналитик", ТекстПолейИсточниковАналитик);
ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТекстСоединенияАналитикиШапки;
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтАналитикиШапки(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтАналитикиШапки";
ТекстЗапроса =
"ВЫБРАТЬ
| ВидыБюджетовАналитикиШапки.НомерСтроки,
| ВидыБюджетовАналитикиШапки.ВидАналитики
|ПОМЕСТИТЬ ВтАналитикиШапки
|ИЗ
| Документ.ЭкземплярБюджета КАК ЭкземплярБюджета
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыБюджетов.АналитикиШапки КАК ВидыБюджетовАналитикиШапки
| ПО (ВидыБюджетовАналитикиШапки.Ссылка = ЭкземплярБюджета.ВидБюджета)
|ГДЕ
| ЭкземплярБюджета.Ссылка = &Ссылка";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтСтатьиБюджета(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтСтатьиБюджета";
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтСводнаяТаблицаДокумента", ТекстыЗапроса) Тогда
ТекстЗапросаВтСводнаяТаблицаДокумента(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СводнаяТаблицаДокумента.СтатьяБюджетов
|ПОМЕСТИТЬ ВтСтатьиБюджета
|ИЗ
| ВтСводнаяТаблицаДокумента КАК СводнаяТаблицаДокумента";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаТаблицаЛимитыПоДаннымБюджетирования(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "ЛимитыПоДаннымБюджетирования";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтСводнаяТаблицаДокумента", ТекстыЗапроса) Тогда
ТекстЗапросаВтСводнаяТаблицаДокумента(Запрос, ТекстыЗапроса);
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтОбщиеЗначенияАналитик", ТекстыЗапроса) Тогда
ТекстЗапросаВтОбщиеЗначенияАналитик(Запрос, ТекстыЗапроса);
КонецЕсли;
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтПравилаЛимитов", ТекстыЗапроса) Тогда
ТекстЗапросаВтПравилаЛимитов(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| &Дата КАК Период,
| ВЫБОР ПравилаЛимитов.Периодичность
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Неделя)
| ТОГДА НАЧАЛОПЕРИОДА(СводнаяТаблицаДокумента.ПериодПланирования, НЕДЕЛЯ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Декада)
| ТОГДА НАЧАЛОПЕРИОДА(СводнаяТаблицаДокумента.ПериодПланирования, ДЕКАДА)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Месяц)
| ТОГДА НАЧАЛОПЕРИОДА(СводнаяТаблицаДокумента.ПериодПланирования, МЕСЯЦ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Квартал)
| ТОГДА НАЧАЛОПЕРИОДА(СводнаяТаблицаДокумента.ПериодПланирования, КВАРТАЛ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Полугодие)
| ТОГДА НАЧАЛОПЕРИОДА(СводнаяТаблицаДокумента.ПериодПланирования, ПОЛУГОДИЕ)
| КОГДА ЗНАЧЕНИЕ(Перечисление.Периодичность.Год)
| ТОГДА НАЧАЛОПЕРИОДА(СводнаяТаблицаДокумента.ПериодПланирования, ГОД)
| ИНАЧЕ СводнаяТаблицаДокумента.ПериодПланирования
| КОНЕЦ КАК ПериодЛимитирования,
| ПравилаЛимитов.ПравилоЛимитов КАК ПравилоЛимитов,
| ПравилаЛимитов.Организация КАК Организация,
| ПравилаЛимитов.Подразделение КАК Подразделение,
| СводнаяТаблицаДокумента.Валюта КАК Валюта,
| &ТекстАналитик,
| СводнаяТаблицаДокумента.СуммаВВалюте КАК Лимит
|ИЗ
| ВтСводнаяТаблицаДокумента КАК СводнаяТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОбщиеЗначенияАналитик КАК ОбщиеЗначенияАналитик
| ПО СводнаяТаблицаДокумента.СтатьяБюджетов = ОбщиеЗначенияАналитик.СтатьяБюджетов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтПравилаЛимитов КАК ПравилаЛимитов
| ПО СводнаяТаблицаДокумента.СтатьяБюджетов = ПравилаЛимитов.СтатьяБюджетов
|ГДЕ
| &КонтрольЛимитовПоДаннымБюджетирования2_5
| И &Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден)
| И СводнаяТаблицаДокумента.СуммаВВалюте <> 0";
ТекстАналитик = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ВЫБОР
| КОГДА ПравилаЛимитов.ВидАналитики%1 = НЕОПРЕДЕЛЕНО
| ТОГДА НЕОПРЕДЕЛЕНО
| ИНАЧЕ ЕСТЬNULL(ОбщиеЗначенияАналитик.АналитикаШапки%1, СводнаяТаблицаДокумента.Аналитика%1)
|КОНЕЦ КАК Аналитика%1",
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстАналитик", ТекстАналитик);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтВидыАналитикСтатейБюджета(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтВидыАналитикСтатейБюджета";
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтСтатьиБюджета", ТекстыЗапроса) Тогда
ТекстЗапросаВтСтатьиБюджета(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| СтатьиБюджета.СтатьяБюджетов,
| &ТекстПолейВидовАналитик
|ПОМЕСТИТЬ ВтВидыАналитикСтатейБюджета
|ИЗ
| ВтСтатьиБюджета КАК СтатьиБюджета
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтатьиБюджетов КАК СтатьиБюджетов
| ПО СтатьиБюджета.СтатьяБюджетов = СтатьиБюджетов.Ссылка";
ТекстПолейВидовАналитик = "";
ШаблонОписанияПоляВыборки = "СтатьиБюджетов.ВидАналитики%1 КАК ВидАналитики%1";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстПолейВидовАналитик = ТекстПолейВидовАналитик + ?(ТекстПолейВидовАналитик = "", "", ",
| ")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияПоляВыборки,
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолейВидовАналитик", ТекстПолейВидовАналитик);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
Функция ТекстЗапросаВтПравилаЛимитов(Запрос, ТекстыЗапроса)
ИмяРегистра = "ВтПравилаЛимитов";
Если Не ПроведениеДокументов.ЕстьТаблицаЗапроса("ВтВидыАналитикСтатейБюджета", ТекстыЗапроса) Тогда
ТекстЗапросаВтВидыАналитикСтатейБюджета(Запрос, ТекстыЗапроса);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ПравилаЛимитов.Ссылка КАК ПравилоЛимитов,
| ПравилаЛимитов.СтатьяБюджета КАК СтатьяБюджетов,
| ПравилаЛимитов.Периодичность КАК Периодичность,
| ВЫБОР
| КОГДА ПравилаЛимитовОрганизация.Ссылка ЕСТЬ NULL
| ТОГДА ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
| ИНАЧЕ &Организация
| КОНЕЦ КАК Организация,
| ВЫБОР
| КОГДА ПравилаЛимитовПодразделение.Ссылка ЕСТЬ NULL
| ТОГДА ЗНАЧЕНИЕ(Справочник.СтруктураПредприятия.ПустаяСсылка)
| ИНАЧЕ &Подразделение
| КОНЕЦ КАК Подразделение,
| &ТекстПолейВидыАналитикПравил
|ПОМЕСТИТЬ ВтПравилаЛимитов
|ИЗ
| Справочник.ПравилаЛимитовПоДаннымБюджетирования КАК ПравилаЛимитов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВтВидыАналитикСтатейБюджета КАК ВидыАналитикСтатейБюджета
| ПО ПравилаЛимитов.СтатьяБюджета = ВидыАналитикСтатейБюджета.СтатьяБюджетов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПравилаЛимитовПоДаннымБюджетирования.ИерархияАналитик КАК ПравилаЛимитовОрганизация
| ПО ПравилаЛимитов.Ссылка = ПравилаЛимитовОрганизация.Ссылка
| И (ПравилаЛимитовОрганизация.Используется)
| И ПравилаЛимитовОрганизация.ИмяИзмерения = ""Организация""
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПравилаЛимитовПоДаннымБюджетирования.ИерархияАналитик КАК ПравилаЛимитовПодразделение
| ПО ПравилаЛимитов.Ссылка = ПравилаЛимитовПодразделение.Ссылка
| И (ПравилаЛимитовПодразделение.Используется)
| И ПравилаЛимитовПодразделение.ИмяИзмерения = ""Подразделение""
| И &ТекстСоединенияВидовАналитикПравил
|
|ГДЕ
| &КонтрольЛимитовПоДаннымБюджетирования2_5
| И ПравилаЛимитов.Владелец = &МодельБюджетирования
| И (ПравилаЛимитов.Сценарий = &Сценарий
| ИЛИ ПравилаЛимитов.Сценарий = ЗНАЧЕНИЕ(Справочник.Сценарии.ПустаяСсылка))
| И НЕ ПравилаЛимитов.ПометкаУдаления";
ТекстПолейВидовАналитикПравил = "";
ТекстСоединенияВидовАналитикПравил = "";
ШаблонОписанияПоляВидаАналитикиПравил = "ЕСТЬNULL(ПравилаЛимитовВидыАналитик%1.ВидАналитики, НЕОПРЕДЕЛЕНО) КАК ВидАналитики%1";
ШаблонСоединенияВидовАналитикПравил =
" ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПравилаЛимитовПоДаннымБюджетирования.ИерархияАналитик КАК ПравилаЛимитовВидыАналитик%1
| ПО ПравилаЛимитов.Ссылка = ПравилаЛимитовВидыАналитик%1.Ссылка
| И (ПравилаЛимитовВидыАналитик%1.Используется)
| И ПравилаЛимитовВидыАналитик%1.ВидАналитики = ВидыАналитикСтатейБюджета.ВидАналитики%1
| И (ПравилаЛимитовВидыАналитик%1.ВидАналитики <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.АналитикиСтатейБюджетов.ПустаяСсылка))";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстПолейВидовАналитикПравил = ТекстПолейВидовАналитикПравил + ?(ТекстПолейВидовАналитикПравил = "", "", ",
| ")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписанияПоляВидаАналитикиПравил,
НомерАналитики);
ТекстСоединенияВидовАналитикПравил = ТекстСоединенияВидовАналитикПравил + ?(ТекстСоединенияВидовАналитикПравил = "", "", "
| ")
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонСоединенияВидовАналитикПравил,
НомерАналитики);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстПолейВидыАналитикПравил", ТекстПолейВидовАналитикПравил);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ТекстСоединенияВидовАналитикПравил", ТекстСоединенияВидовАналитикПравил);
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
Функция ПараметрыЭлементаВводаЗначенийНаЯзыкеПользователя(ПараметрыФормированияСпискаВвода) Экспорт
ПараметрыФормированияСпискаВвода = ПараметрыФормированияСпискаВвода;
Результат = Новый Структура("Заголовок, ПредставлениеПрочихЗначений, Формат");
Если ПараметрыФормированияСпискаВвода.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов Тогда
Результат.Заголовок = НСтр("ru = 'Статья/показатель бюджетов'");
Результат.ПредставлениеПрочихЗначений = НСтр("ru = '<прочие статьи/показатели бюджетов>'");
ИначеЕсли ПараметрыФормированияСпискаВвода.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.Измерение
И ПараметрыФормированияСпискаВвода.ТипИзмерения = Перечисления.ТипыИзмеренийФинансовогоОтчета.Валюта Тогда
Результат.Заголовок = БюджетнаяОтчетностьКлиентСервер.ПредставлениеИзмеренияБюджетирования("Валюта");
Результат.ПредставлениеПрочихЗначений = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
"Валюта", "Прочие");
ИначеЕсли ПараметрыФормированияСпискаВвода.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.Измерение
И ПараметрыФормированияСпискаВвода.ТипИзмерения = Перечисления.ТипыИзмеренийФинансовогоОтчета.Период Тогда
Результат.Заголовок = Строка(ПараметрыФормированияСпискаВвода.Периодичность);
Результат.ПредставлениеПрочихЗначений = "";
Периодичность = ПараметрыФормированияСпискаВвода.Периодичность;
Если Периодичность = Перечисления.Периодичность.Год Тогда
Формат = НСтр("ru = 'ДФ=гггг'");
ИначеЕсли Периодичность = Перечисления.Периодичность.Полугодие Тогда
Формат = НСтр("ru = 'ДФ=''""Полугодие с"" ММММ гггг'''");
ИначеЕсли Периодичность = Перечисления.Периодичность.Квартал Тогда
Формат = НСтр("ru = 'ДФ=''к ""квартал""'''")
ИначеЕсли Периодичность = Перечисления.Периодичность.Месяц Тогда
Формат = НСтр("ru = 'ДФ=''MMMM yyyy'''");
ИначеЕсли Периодичность = Перечисления.Периодичность.Декада Тогда
Формат = СтрШаблон(НСтр("ru = 'ДФ=''""Декада с"" %1'''"), "dd.MM.yy");
ИначеЕсли Периодичность = Перечисления.Периодичность.Неделя Тогда
Формат = СтрШаблон(НСтр("ru = 'ДФ=''""Неделя с"" %1'''"), "dd.MM.yy");
ИначеЕсли Периодичность = Перечисления.Периодичность.День Тогда
Формат = "ДЛФ=D";
КонецЕсли;
Результат.Формат = Формат;
Иначе
Результат.Заголовок = Строка(ПараметрыФормированияСпискаВвода.ВидАналитики);
Результат.ПредставлениеПрочихЗначений = БюджетнаяОтчетностьКлиентСервер.ПредставлениеПрочейАналитикиБюджетирования(
ПараметрыФормированияСпискаВвода.ВидАналитики, "Прочие");
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура РассчитатьЭлементыСпискаБюджетаКДобавлению(ДобавляемыеЭлементы, ДобавляемыеКолонки,
КолонкиПоИзмерениям, ФиксированныеЗначения = Неопределено) Экспорт
Для Каждого Измерение Из КолонкиПоИзмерениям.Измерения Цикл
ЭлементОтчета = КолонкиПоИзмерениям.НастройкиКолонок[Измерение];
ПараметрыЭлемента = ПараметрыЭлементаВводаЗначенийНаЯзыкеПользователя(
ЭлементОтчета.ПараметрыФормированияСпискаВвода);
ИмяРеквизита = Измерение;
НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита,
ЭлементОтчета.ТипЗначения,
"СписокРедактированияБюджета",
ПараметрыЭлемента.Заголовок);
ДобавляемыеЭлементы.Добавить(НовыйРеквизит);
НоваяКолонка = Новый Структура();
НоваяКолонка.Вставить("Имя", ИмяРеквизита);
НоваяКолонка.Вставить("Тип", "ПолеФормы");
НоваяКолонка.Вставить("Родитель", "СписокРедактированияБюджета");
НоваяКолонка.Вставить("Заголовок", ПараметрыЭлемента.Заголовок);
Если ЭлементОтчета.Свойство("СвязиПараметровВыбора") Тогда
НоваяКолонка.Вставить("СвязиПараметровВыбора", ЭлементОтчета.СвязиПараметровВыбора);
КонецЕсли;
Если ЭлементОтчета.Свойство("ПараметрыВыбора") Тогда
НоваяКолонка.Вставить("ПараметрыВыбора", ЭлементОтчета.ПараметрыВыбора);
КонецЕсли;
Если НЕ ПараметрыЭлемента.Формат = Неопределено Тогда
НоваяКолонка.Вставить("Формат", ПараметрыЭлемента.Формат);
КонецЕсли;
НастройкиВыбора = КолонкиПоИзмерениям.НастройкиВвода[Измерение];
Если НастройкиВыбора <> Неопределено Тогда
НоваяКолонка.Вставить("СписокВыбора", НастройкиВыбора);
Если ФиксированныеЗначения <> Неопределено Тогда
Если НастройкиВыбора.Количество() = 1 Тогда
ФиксированныеЗначения.Вставить(Измерение, НастройкиВыбора[0].Значение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не СтрНайти(Измерение, "Период") Тогда
НоваяКолонка.Вставить("ТребуютсяПрочие");
НоваяКолонка.Вставить("ПредставлениеПрочих", ПараметрыЭлемента.ПредставлениеПрочихЗначений);
КонецЕсли;
ДобавляемыеКолонки.Добавить(НоваяКолонка);
КонецЦикла;
КонецПроцедуры
Функция ШаблонПараметровДобавленияКолонокСпискаБюджетов() Экспорт
Параметры = Новый Структура;
Параметры.Вставить("ДобавляемыеЭлементы");
Параметры.Вставить("ДобавляемыеКолонки");
Параметры.Вставить("КолонкиПоИзмерениям");
Параметры.Вставить("СтруктураКолонок");
Параметры.Вставить("СтруктураАналогРасшифровки");
Возврат Параметры;
КонецФункции
Процедура ДобавитьКолонкиСпискаБюджетаПоТаблице(ПараметрыДобавленияКолонок, МассивУровней = Неопределено, РодительскаяКолонка = "") Экспорт
ДобавляемыеЭлементы = ПараметрыДобавленияКолонок.ДобавляемыеЭлементы;
ДобавляемыеКолонки = ПараметрыДобавленияКолонок.ДобавляемыеКолонки;
КолонкиПоИзмерениям = ПараметрыДобавленияКолонок.КолонкиПоИзмерениям;
СтруктураКолонок = ПараметрыДобавленияКолонок.СтруктураКолонок;
СтруктураАналогРасшифровки = ПараметрыДобавленияКолонок.СтруктураАналогРасшифровки;
Если МассивУровней = Неопределено Тогда
МассивУровней = Новый Структура;
КонецЕсли;
Для Каждого КолонкаБюджета Из СтруктураКолонок.Строки Цикл
Если ЗначениеЗаполнено(КолонкаБюджета.ФиксированноеЗначение) Тогда
МассивУровней.Вставить(КолонкаБюджета.ИмяИзмерения, КолонкаБюджета.ФиксированноеЗначение);
КонецЕсли;
ЛокальныйРодитель = РодительскаяКолонка;
ТолькоПросмотр = ?(ЗначениеЗаполнено(ЛокальныйРодитель), ЛокальныйРодитель.ТолькоПросмотр, Ложь);
НеВводимаяКолонка = ТолькоПросмотр
ИЛИ КолонкаБюджета.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ПроизводныйПоказатель
ИЛИ КолонкаБюджета.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.ФормулаПоГруппе
ИЛИ КолонкаБюджета.ВидЭлемента = Перечисления.ВидыЭлементовФинансовогоОтчета.НефинансовыйПоказатель;
ИмяРеквизита = "Колонка_" + Формат(ДобавляемыеКолонки.Количество(), "ЧГ=");
Если Не КолонкаБюджета.Строки.Количество() Тогда
ПутьККолонке = Новый Структура;
Для Каждого КлючИЗначение Из МассивУровней Цикл
ПутьККолонке.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
КолонкаЭлементОтчета = Неопределено;
Если ЗначениеЗаполнено(КолонкаБюджета.ЭлементОтчета) Тогда
ПутьККолонке.Вставить("Колонка", КолонкаБюджета.ЭлементОтчета);
КолонкаЭлементОтчета = КолонкаБюджета.ЭлементОтчета;
ИначеЕсли ЗначениеЗаполнено(РодительскаяКолонка) Тогда
ПутьККолонке.Вставить("Колонка", РодительскаяКолонка.ЭлементОтчета);
КолонкаЭлементОтчета = РодительскаяКолонка.ЭлементОтчета;
КонецЕсли;
Если СтрНайти(КолонкаБюджета.ИмяИзмерения, "#Показатель") Тогда
ПутьККолонке.Вставить("ИмяПоказателя", СтрЗаменить(КолонкаБюджета.ИмяИзмерения, "#Показатель_", ""));
Если ПутьККолонке.ИмяПоказателя = "Значение"
И Не ПутьККолонке.Свойство("РедактируемоеЗначение") Тогда
НеВводимаяКолонка = Истина;
КонецЕсли;
КонецЕсли;
ТипРедактируемогоЗначения = "Число";
ТипыЗначенийПоказателей = Новый Соответствие;
Если КолонкиПоИзмерениям.НастройкиКолонок.Свойство("ТипыЗначенийПоказателей", ТипыЗначенийПоказателей) Тогда
ТипРедактируемогоЗначения = ТипыЗначенийПоказателей[КолонкаЭлементОтчета];
КонецЕсли;
Если ТипРедактируемогоЗначения = "Строка" Тогда
ТипРедактируемойКолонки = Новый ОписаниеТипов("Строка");
ИначеЕсли ТипРедактируемогоЗначения = "Булево" Тогда
ТипРедактируемойКолонки = Новый ОписаниеТипов("Булево");
ИначеЕсли ТипРедактируемогоЗначения = "Дата" Тогда
ТипРедактируемойКолонки = Новый ОписаниеТипов("Дата");
ИначеЕсли ТипРедактируемогоЗначения = "СтавкаНДС" Тогда
ТипРедактируемойКолонки = Новый ОписаниеТипов("СправочникСсылка.СтавкиНДС");
Иначе
ТипРедактируемойКолонки = ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля();
КонецЕсли;
НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита,
ТипРедактируемойКолонки,
"СписокРедактированияБюджета",
КолонкаБюджета.НаименованиеДляПечати);
ДобавляемыеЭлементы.Добавить(НовыйРеквизит);
ТипКолонки = "ПолеФормы";
СтатьиБюджетов = Неопределено;
Если КолонкиПоИзмерениям.Свойство("СтатьиБюджетов", СтатьиБюджетов) Тогда
СтруктураОписания = СтатьиБюджетов[ПутьККолонке.Колонка];
Если СтруктураОписания = Неопределено Тогда
НеВводимаяКолонка = Истина;
Иначе
СтатьяБюджетов = СтруктураОписания.СтатьяБюджетов;
РедактируемоеЗначение = СтруктураОписания.РедактируемоеЗначение;
ИмяПоказателя = СтруктураОписания.ИмяПоказателя;
Если Не ЗначениеЗаполнено(СтатьяБюджетов)
И Не ЗначениеЗаполнено(РедактируемоеЗначение) Тогда
НеВводимаяКолонка = Истина;
ИначеЕсли ЗначениеЗаполнено(СтатьяБюджетов) Тогда
ПутьККолонке.Вставить("СтатьяБюджетов", СтатьяБюджетов);
ИначеЕсли ЗначениеЗаполнено(РедактируемоеЗначение) Тогда
ПутьККолонке.Вставить("РедактируемоеЗначение", РедактируемоеЗначение);
КонецЕсли;
ПутьККолонке.Вставить("ИмяПоказателя", ИмяПоказателя);
КонецЕсли;
КонецЕсли;
Если НеВводимаяКолонка Тогда
ПутьККолонке.Вставить("Расчетная", Истина);
КонецЕсли;
СтруктураАналогРасшифровки.Вставить(ИмяРеквизита, ПутьККолонке);
ТипСтрока = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1000));
НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита + "Примечание", ТипСтрока, "СписокРедактированияБюджета");
ДобавляемыеЭлементы.Добавить(НовыйРеквизит);
ТипКартинка = Новый ОписаниеТипов("Картинка");
НовыйРеквизит = Новый РеквизитФормы(ИмяРеквизита + "КартинкаПримечание",
ТипКартинка,
"СписокРедактированияБюджета");
ДобавляемыеЭлементы.Добавить(НовыйРеквизит);
Если Не НеВводимаяКолонка Тогда
ИмяРодителя = ?(ЗначениеЗаполнено(ЛокальныйРодитель), ЛокальныйРодитель.Имя, "СписокРедактированияБюджета");
ОписаниеКолонки = Новый Структура();
ОписаниеКолонки.Вставить("Имя", ИмяРеквизита + "ГруппаВвода");
ОписаниеКолонки.Вставить("Тип", "ГруппаФормы");
ОписаниеКолонки.Вставить("Родитель", ИмяРодителя);
ОписаниеКолонки.Вставить("ТолькоПросмотр", Ложь);
ОписаниеКолонки.Вставить("Заголовок", НСтр("ru = 'Ячейка ввода'"));
ОписаниеКолонки.Вставить("Группировка", ГруппировкаКолонок.ВЯчейке);
ДобавляемыеКолонки.Добавить(ОписаниеКолонки);
ЛокальныйРодитель = ОписаниеКолонки;
ИмяРодителя = ЛокальныйРодитель.Имя;
ЗаголовокКолонки = КолонкаБюджета.НаименованиеДляПечати + " (%1)";
ЗаголовокКолонки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ЗаголовокКолонки,
НСтр("ru = 'картинка комментария'"));
ОписаниеКолонки = Новый Структура();
ОписаниеКолонки.Вставить("Имя", ИмяРеквизита + "КартинкаПримечание");
ОписаниеКолонки.Вставить("Тип", "ПолеФормы");
ОписаниеКолонки.Вставить("Родитель", ИмяРодителя);
ОписаниеКолонки.Вставить("ТолькоПросмотр", Ложь);
ОписаниеКолонки.Вставить("Заголовок", ЗаголовокКолонки);
ОписаниеКолонки.Вставить("Вид", ВидПоляФормы.ПолеКартинки);
ДобавляемыеКолонки.Добавить(ОписаниеКолонки);
КонецЕсли;
Иначе
ТипКолонки = "ГруппаФормы";
КонецЕсли;
ИмяРодителя = ?(ЗначениеЗаполнено(ЛокальныйРодитель), ЛокальныйРодитель.Имя, "СписокРедактированияБюджета");
ОписаниеКолонки = Новый Структура();
ОписаниеКолонки.Вставить("Имя", ИмяРеквизита);
ОписаниеКолонки.Вставить("Тип", ТипКолонки);
ОписаниеКолонки.Вставить("Родитель", ИмяРодителя);
ОписаниеКолонки.Вставить("ТолькоПросмотр", НеВводимаяКолонка);
ОписаниеКолонки.Вставить("Заголовок", КолонкаБюджета.НаименованиеДляПечати);
ДобавляемыеКолонки.Добавить(ОписаниеКолонки);
Если НеВводимаяКолонка Тогда
ОписаниеКолонки.Вставить("ТолькоПросмотр", Истина);
КонецЕсли;
Если ТипКолонки = "ГруппаФормы" Тогда
ОписаниеКолонки.Вставить("Заголовок", КолонкаБюджета.НаименованиеДляПечати);
Иначе
ОписаниеКолонки.Вставить("Формат", "ЧДЦ=2");
КонецЕсли;
ОписаниеКолонки.Вставить("ЭлементОтчета", КолонкаБюджета.ЭлементОтчета);
ПараметрыДобавленияКолонок = ШаблонПараметровДобавленияКолонокСпискаБюджетов();
ПараметрыДобавленияКолонок.ДобавляемыеЭлементы = ДобавляемыеЭлементы;
ПараметрыДобавленияКолонок.ДобавляемыеКолонки = ДобавляемыеКолонки;
ПараметрыДобавленияКолонок.КолонкиПоИзмерениям = КолонкиПоИзмерениям;
ПараметрыДобавленияКолонок.СтруктураКолонок = КолонкаБюджета;
ПараметрыДобавленияКолонок.СтруктураАналогРасшифровки = СтруктураАналогРасшифровки;
ДобавитьКолонкиСпискаБюджетаПоТаблице(ПараметрыДобавленияКолонок,
МассивУровней,
ОписаниеКолонки);
Если ЗначениеЗаполнено(КолонкаБюджета.ФиксированноеЗначение) Тогда
МассивУровней.Удалить(КолонкаБюджета.ИмяИзмерения);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОтразитьИзмененияКолонокСпискаБюджетаНаФорме(Форма, ДобавляемыеЭлементы, ДобавляемыеКолонки, ФиксированныеЗначения = Неопределено) Экспорт
Элементы = Форма.Элементы;
УсловноеОформление = Форма.УсловноеОформление;
УдаляемыеЭлементы = Новый Массив;
Для Каждого УдаляемыйРеквизит Из Форма.ПолучитьРеквизиты("СписокРедактированияБюджета") Цикл
Если УдаляемыйРеквизит.Имя = "ИндексСтроки"
ИЛИ УдаляемыйРеквизит.Имя = "Загружать" Тогда
Продолжить;
КонецЕсли;
УдаляемыеЭлементы.Добавить(УдаляемыйРеквизит.Путь + "." + УдаляемыйРеквизит.Имя);
КонецЦикла;
Форма.ИзменитьРеквизиты(ДобавляемыеЭлементы, УдаляемыеЭлементы);
СписокЭлементов = Элементы.СписокРедактированияБюджета.ПодчиненныеЭлементы;
ЕстьЧтоУдалять = Истина;
Пока ЕстьЧтоУдалять Цикл
Для Каждого Элемент Из СписокЭлементов Цикл
Если Элемент.Имя = "СписокРедактированияБюджетаЗагружать" Тогда
Продолжить;
КонецЕсли;
Элементы.Удалить(Элемент);
КонецЦикла;
СписокЭлементов = Элементы.СписокРедактированияБюджета.ПодчиненныеЭлементы;
Если СписокЭлементов.Количество() = 1 Тогда
ПодчиненныйЭлементФормы = СписокЭлементов[0];
Если ПодчиненныйЭлементФормы.Имя = "СписокРедактированияБюджетаЗагружать" Тогда
ЕстьЧтоУдалять = Ложь;
КонецЕсли;
ИначеЕсли Не СписокЭлементов.Количество() Тогда
ЕстьЧтоУдалять = Ложь;
КонецЕсли;
КонецЦикла;
УсловноеОформлениеКУдалению = Новый Массив;
Для Каждого ЭлементУО Из УсловноеОформление.Элементы Цикл
Если СтрНайти(ЭлементУО.Представление, "ДобавленноеУсловноеОформление_") Тогда
УсловноеОформлениеКУдалению.Добавить(ЭлементУО);
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементУО Из УсловноеОформлениеКУдалению Цикл
УсловноеОформление.Элементы.Удалить(ЭлементУО);
КонецЦикла;
Для Каждого Реквизит Из ДобавляемыеКолонки Цикл
Элемент = Элементы.Добавить(Реквизит.Имя, Тип(Реквизит.Тип), Элементы[Реквизит.Родитель]);
Если Реквизит.Тип = "ПолеФормы" Тогда
Элемент.ПутьКДанным = "СписокРедактированияБюджета." + Реквизит.Имя;
Если Реквизит.Свойство("Вид") Тогда
Элемент.Вид = Реквизит.Вид;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
УстановитьДоступностьСписокВыбораКолонки(Элемент, Реквизит, ФиксированныеЗначения);
Элемент.Заголовок = Реквизит.Заголовок;
КонецЕсли;
Если Реквизит.Свойство("СвязиПараметровВыбора") Тогда
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор." + Реквизит.СвязиПараметровВыбора.Отбор,
Реквизит.СвязиПараметровВыбора.ПутьКДанным);
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(НоваяСвязь);
НовыеСвязи = Новый ФиксированныйМассив(НовыйМассив);
Элемент.СвязиПараметровВыбора = НовыеСвязи;
КонецЕсли;
Если Реквизит.Свойство("ПараметрыВыбора") Тогда
НоваяСвязь = Новый ПараметрВыбора("Отбор." + Реквизит.ПараметрыВыбора.Отбор,
Реквизит.ПараметрыВыбора.Значение);
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(НоваяСвязь);
НовыеСвязи = Новый ФиксированныйМассив(НовыйМассив);
Элемент.ПараметрыВыбора = НовыеСвязи;
КонецЕсли;
Если Реквизит.Свойство("Формат") Тогда
Элемент.Формат = Реквизит.Формат;
Элемент.ФорматРедактирования = "ДЛФ=D";
КонецЕсли;
Если Реквизит.Свойство("ТребуютсяПрочие") Тогда
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Элемент.ПутьКДанным);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Поле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
Поле.Поле = Новый ПолеКомпоновкиДанных(Элемент.Имя);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", Реквизит.ПредставлениеПрочих);
ЭлементУсловногоОформления.Представление = "ДобавленноеУсловноеОформление_Текст" + Элемент.Имя;
КонецЕсли;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_СписокРедактированияБюджетаОсновнаяКолонкаПриИзменении");
Если Элемент.ТолькоПросмотр Тогда
Продолжить;
КонецЕсли;
Если Реквизит.Свойство("ТолькоПросмотр") И Реквизит.ТолькоПросмотр Тогда
Элемент.ТолькоПросмотр = Истина;
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
Поле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
Поле.Поле = Новый ПолеКомпоновкиДанных(Элемент.Имя);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(237, 237, 237));
ЭлементУсловногоОформления.Представление = "ДобавленноеУсловноеОформление_Фон" + Элемент.Имя;
КонецЕсли;
Иначе
Если Реквизит.Свойство("Группировка") Тогда
Элемент.Группировка = Реквизит.Группировка;
Иначе
Элемент.Заголовок = Реквизит.Заголовок;
Элемент.ОтображатьВШапке = Истина;
Элемент.Группировка = ГруппировкаКолонок.Горизонтальная;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура УстановитьДоступностьСписокВыбораКолонки(Элемент, Реквизит, ФиксированныеЗначения) Экспорт
Элемент.ТолькоПросмотр = Ложь;
Элемент.КнопкаВыбора = Ложь;
Элемент.РежимВыбораИзСписка = Ложь;
Элемент.СписокВыбора.Очистить();
Если Реквизит.Свойство("СписокВыбора") Тогда
Для Каждого ЭлементСписка Из Реквизит.СписокВыбора Цикл
Элемент.СписокВыбора.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
КонецЦикла;
КонецЕсли;
Если ФиксированныеЗначения <> Неопределено Тогда
Если ФиксированныеЗначения.Свойство(Реквизит.Имя) Тогда
Элемент.ТолькоПросмотр = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
Элемент.КнопкаВыбора = Истина;
Если Реквизит.Свойство("СписокВыбора") Тогда
Элемент.КнопкаВыбора = Ложь;
Элемент.РежимВыбораИзСписка = Истина;
КонецЕсли;
КонецПроцедуры
Функция ВалютаВводаАналитики(Расшифровка, КэшРеквизитовСтатей) Экспорт
ОбъектВалютногоУчета = Неопределено;
Если Не Расшифровка.Свойство("СтатьяБюджетов", ОбъектВалютногоУчета)
ИЛИ Не ЗначениеЗаполнено(ОбъектВалютногоУчета) Тогда
Возврат Неопределено;
КонецЕсли;
РеквизитыВалютногоУчета = КэшРеквизитовСтатей[ОбъектВалютногоУчета];
Если РеквизитыВалютногоУчета = Неопределено ИЛИ Не РеквизитыВалютногоУчета.УчитыватьПоВалюте Тогда
Возврат Неопределено;
КонецЕсли;
Если РеквизитыВалютногоУчета = Неопределено ИЛИ Не РеквизитыВалютногоУчета.ВалютаОпределяетсяАналитикой Тогда
Возврат Неопределено;
КонецЕсли;
ЗначениеАналитикиВалюты = Расшифровка.ЗначенияАналитик[РеквизитыВалютногоУчета.ВидАналитикиВалюта];
Если Не ЗначениеЗаполнено(ЗначениеАналитикиВалюты) Тогда
Возврат Неопределено;
КонецЕсли;
ЗначениеПоля = КэшРеквизитовСтатей[ЗначениеАналитикиВалюты];
Валюта = Неопределено;
Если ЗначениеПоля = Неопределено Тогда
ЗначениеПоля = Новый Структура;
Валюта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеАналитикиВалюты, РеквизитыВалютногоУчета.ПутьКАналитикеВалюта);
ЗначениеПоля.Вставить(РеквизитыВалютногоУчета.ПутьКАналитикеВалюта, Валюта);
КэшРеквизитовСтатей.Вставить(ЗначениеАналитикиВалюты, ЗначениеПоля);
Иначе
Если Не ЗначениеПоля.Свойство(РеквизитыВалютногоУчета.ПутьКАналитикеВалюта, Валюта) Тогда
Валюта = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеАналитикиВалюты, РеквизитыВалютногоУчета.ПутьКАналитикеВалюта);
ЗначениеПоля.Вставить(РеквизитыВалютногоУчета.ПутьКАналитикеВалюта, Валюта);
КонецЕсли;
КонецЕсли;
Возврат Валюта;
КонецФункции
Функция ПолучитьПредставленияАналитикПрочее(СтрокиОснования)
Результат = Новый Соответствие;
Запрос = Новый Запрос("ВЫБРАТЬ
| ЭлементыФинансовыхОтчетов.Ссылка КАК Ссылка,
| ЭлементыФинансовыхОтчетов.НаименованиеДляПечати КАК НаименованиеДляПечати,
| ЭлементыФинансовыхОтчетов.РеквизитыВидаЭлемента.(
| Реквизит,
| Значение
| ) КАК РеквизитыВидаЭлемента
|ИЗ
| Справочник.ЭлементыФинансовыхОтчетов КАК ЭлементыФинансовыхОтчетов
|ГДЕ
| ЭлементыФинансовыхОтчетов.Ссылка В(&СтрокиОснования)
| И ЭлементыФинансовыхОтчетов.ЗначениеАналитики = НЕОПРЕДЕЛЕНО");
Запрос.УстановитьПараметр("СтрокиОснования", СтрокиОснования);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ФиксированнаяАналитика = Ложь;
ЭтоАналитикаПрочее = Ложь;
ВидАналитики = Неопределено;
РезультатРеквизитыВидаЭлемента = Выборка.РеквизитыВидаЭлемента;
ВыборкаРеквизитов = РезультатРеквизитыВидаЭлемента.Выбрать();
Пока ВыборкаРеквизитов.Следующий() Цикл
Если ВыборкаРеквизитов.Реквизит = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов.ТипИзмерения
И ВыборкаРеквизитов.Значение = Перечисления.ТипыИзмеренийФинансовогоОтчета.ФиксированнаяАналитика Тогда
ФиксированнаяАналитика = Истина;
КонецЕсли;
Если ВыборкаРеквизитов.Реквизит = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов.ЭтоАналитикаПрочее Тогда
ЭтоАналитикаПрочее = ВыборкаРеквизитов.Значение;
КонецЕсли;
Если ВыборкаРеквизитов.Реквизит = ПланыВидовХарактеристик.РеквизитыЭлементовФинансовыхОтчетов.ВидАналитики Тогда
ВидАналитики = ВыборкаРеквизитов.Значение;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ВидАналитики) И ФиксированнаяАналитика И ЭтоАналитикаПрочее Тогда
ЭлементРезультата = Результат.Получить(ВидАналитики);
Если ЭлементРезультата = Неопределено Тогда
Результат.Вставить(ВидАналитики,
НовыйСтруктураПредставленияАналитикиПрочее(Выборка.НаименованиеДляПечати));
ЭлементРезультата = Результат.Получить(ВидАналитики);
КонецЕсли;
ЭлементРезультата.МассивСтрокОснования.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция НовыйСтруктураПредставленияАналитикиПрочее(НаименованиеДляПечати = "")
Результат = Новый Структура;
Результат.Вставить("МассивСтрокОснования", Новый Массив);
Результат.Вставить("НаименованиеДляПечати", НаименованиеДляПечати);
Возврат Результат;
КонецФункции
Функция ПолучитьСКДПечатиДокументаБезГруппировок(ИДТаблицы, КолонкиПоИзмерениям, ГлубинаДерева,
ПараметрыВыводаВидаБюджета, ПредставленияАналитикПрочее = Неопределено, ДляВыводаНаПечать=Ложь) Экспорт
ФинОтчеты = ФинансоваяОтчетностьСервер;
СКД = ФинОтчеты.НоваяСхема();
Набор = КомпоновкаДанныхСервер.ДобавитьПустойНаборДанных(СКД,
Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"),
"ДанныеЯчеек");
Набор.ИмяОбъекта = "ДанныеЯчеек";
ПараметрыЭкземпляраБюджета = ПараметрыВыводаВидаБюджета;
КолонкиТаблиц = ПараметрыЭкземпляраБюджета.КолонкиТаблиц;
ДеревоКолонок = КолонкиТаблиц[ИДТаблицы];
СтруктураОписанияКолонок = ПараметрыЭкземпляраБюджета.СтруктураКолонокТаблицыДанных;
Представление = НСтр("ru='Статья бюджетов'");
ФинОтчеты.НовоеПолеНабора(Набор, "СтатьяБюджетов",,Представление);
Представление = НСтр("ru='Показатель бюджетов'");
ФинОтчеты.НовоеПолеНабора(Набор, "ПоказательБюджетов",,Представление);
Представление = НСтр("ru='Нефинансовый показатель'");
ФинОтчеты.НовоеПолеНабора(Набор, "НефинансовыйПоказатель",,Представление);
Представление = НСтр("ru='Редактируемое значение'");
ФинОтчеты.НовоеПолеНабора(Набор, "РедактируемоеЗначение",,Представление);
ФинОтчеты.НовоеПолеНабора(Набор, "ОсновнойЭлемент");
ФинОтчеты.НовоеПолеНабора(Набор, "ВидЭлемента");
ФинОтчеты.НовоеПолеНабора(Набор, "Строка");
ФинОтчеты.НовоеПолеНабора(Набор, "МинимумНомерПоПорядку");
ФинОтчеты.НовоеПолеНабора(Набор, "Колонка");
ФинОтчеты.НовоеПолеНабора(Набор, "ИндексСтроки");
НаборВспомогательный = КомпоновкаДанныхСервер.ДобавитьПустойНаборДанных(СКД,
Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"),
"ПараметрыЯчеек");
НаборВспомогательный.ИмяОбъекта = "ПараметрыЯчеек";
ФинОтчеты.НовоеПолеНабора(НаборВспомогательный, "ИндексСтроки");
ФинОтчеты.НовоеПолеНабора(НаборВспомогательный, "ОбратныйЗнак");
ФинОтчеты.НоваяСвязьНаборов(СКД, "ДанныеЯчеек", "ПараметрыЯчеек", "ИндексСтроки");
ТекстВыражения = "МИНИМУМ(ВЫБОР КОГДА ВидЭлемента = Значение(Перечисление.ВидыЭлементовФинансовогоОтчета.СтатьяБюджетов)
|ТОГДА МинимумНомерПоПорядку ИНАЧЕ 99999999999 КОНЕЦ)";
ФинОтчеты.НовыйРесурс(СКД, "МинимумНомерПоПорядку", , ТекстВыражения);
Для Каждого Измерение Из СтруктураОписанияКолонок.Измерения Цикл
ФинОтчеты.НовоеПолеНабора(Набор, Измерение,, Измерение);
КонецЦикла;
Для Каждого Измерение Из СтруктураОписанияКолонок.ВидыАналитик Цикл
ИмяПоля = ФинансоваяОтчетностьПовтИсп.ИмяПоляБюджетногоОтчета(Измерение);
ПолеНабора = ФинОтчеты.НовоеПолеНабора(Набор, ИмяПоля,, Строка(Измерение));
Если ПредставленияАналитикПрочее <> Неопределено Тогда
Представление = ПредставленияАналитикПрочее.Получить(Измерение);
Если Представление <> Неопределено Тогда
ИмяПараметра = "МассивСтрокОснования_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "_");
Параметр = СКД.Параметры.Добавить();
Параметр.Имя = ИмяПараметра;
Параметр.Значение = Представление.МассивСтрокОснования;
Параметр.ОграничениеИспользования = Истина;
ПолеНабора.ВыражениеПредставления =
"ВЫБОР
| КОГДА Строка В (&" + ИмяПараметра + ")
| И НЕ ЗначениеЗаполнено(" + ИмяПоля + ")
| ТОГДА """ + Представление.НаименованиеДляПечати + """
| ИНАЧЕ " + ИмяПоля + "
| КОНЕЦ ";
ПолеУпорядочивания = ПолеНабора.ВыраженияУпорядочивания.Добавить();
ПолеУпорядочивания.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
ПолеУпорядочивания.Выражение =
"ВЫБОР
| КОГДА Строка В (&" + ИмяПараметра + ")
| И Не ЗначениеЗаполнено(" + ИмяПоля + ")
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ ";
ПолеУпорядочивания = ПолеНабора.ВыраженияУпорядочивания.Добавить();
ПолеУпорядочивания.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
ПолеУпорядочивания.Выражение = ИмяПоля;
ПолеУпорядочивания.Автоупорядочивание = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого Периодичность Из СтруктураОписанияКолонок.Периодичности Цикл
ИмяПериода = ФинансоваяОтчетностьКлиентСервер.СтрокиПериода(Периодичность).Период;
ЗаголовокПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Период (%1)'"),
Периодичность);
ФинОтчеты.НовоеПолеНабора(Набор, ИмяПериода, , ЗаголовокПоля);
КонецЦикла;
ФинОтчеты.НовоеПолеНабора(Набор, "Сумма");
ФинОтчеты.НовоеПолеНабора(Набор, "СуммаВал");
ФинОтчеты.НовоеПолеНабора(Набор, "Количество");
ФинОтчеты.НовоеПолеНабора(Набор, "Значение");
ГруппировкаПечатнойФормы = Неопределено;
Для Каждого Измерение Из КолонкиПоИзмерениям.Измерения Цикл
Если ГруппировкаПечатнойФормы = Неопределено Тогда
ГруппировкаПечатнойФормы = ФинОтчеты.НоваяГруппировка(СКД.НастройкиПоУмолчанию.Структура, Измерение);
Иначе
ФинОтчеты.НовоеПолеГруппировки(ГруппировкаПечатнойФормы, Измерение);
КонецЕсли;
Если ДляВыводаНаПечать <> Неопределено Тогда
ФинОтчеты.НовыйПорядок(СКД.НастройкиПоУмолчанию, Измерение);
КонецЕсли;
КонецЦикла;
Если ГруппировкаПечатнойФормы = Неопределено Тогда
ФинОтчеты.НоваяГруппировка(СКД.НастройкиПоУмолчанию.Структура);
ИначеЕсли ДляВыводаНаПечать Тогда
ГруппировкаПечатнойФормы = ФинОтчеты.НоваяГруппировка(СКД.НастройкиПоУмолчанию.Структура);
ГруппировкаПечатнойФормы.Выбор.Элементы.Очистить();
КонецЕсли;
Если ДляВыводаНаПечать И Не ПустаяСтрока(ПараметрыВыводаВидаБюджета.ЗаголовокОтветственный) Тогда
ФинОтчеты.УстановитьПараметр(СКД.НастройкиПоУмолчанию.Структура[0].ПараметрыВывода,
"Заголовок", ПараметрыВыводаВидаБюджета.ЗаголовокОтветственный);
КонецЕсли;
ФинОтчеты.НовыйОтбор(СКД.НастройкиПоУмолчанию.Отбор, "ОсновнойЭлемент", Истина);
Отбор = ФинОтчеты.НовыйОтбор(СКД.НастройкиПоУмолчанию.Отбор, "Строка", КолонкиПоИзмерениям.СтрокиОснования);
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ПараметрыСозданияПолей = ШаблонПараметровСозданияПолейПоДеревуКолонок();
ПараметрыСозданияПолей.ДеревоКолонок = ДеревоКолонок;
ПараметрыСозданияПолей.КолонкиПоИзмерениям = КолонкиПоИзмерениям;
ПараметрыСозданияПолей.ЭлементыДобавления = СКД.НастройкиПоУмолчанию.Выбор.Элементы;
ГлубинаДерева = СоздатьПоляВыбораПоДеревуКолонок(СКД, ПараметрыСозданияПолей);
ФинОтчеты.УстановитьПараметрВывода(СКД.НастройкиПоУмолчанию,
"ГоризонтальноеРасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Нет);
ФинОтчеты.УстановитьПараметрВывода(СКД.НастройкиПоУмолчанию,
"ВертикальноеРасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Нет);
ФинОтчеты.УстановитьПараметрВывода(СКД.НастройкиПоУмолчанию,
"ВыводитьОтбор", ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
ФинОтчеты.УстановитьПараметрВывода(СКД.НастройкиПоУмолчанию,
"ВыводитьПараметры", ТипВыводаТекстаКомпоновкиДанных.НеВыводить);
ПараметрСКД = СКД.Параметры.Добавить();
ПараметрСКД.Имя = "ДляВыводаНаПечать";
ПараметрСКД.ТипЗначения = Новый ОписаниеТипов("Булево");
ПараметрСКД.Значение = ДляВыводаНаПечать;
ПараметрСКД.ОграничениеИспользования = Истина;
ФинОтчеты.НовыйПорядок(СКД.НастройкиПоУмолчанию, "МинимумНомерПоПорядку");
Если ДляВыводаНаПечать И Не ПустаяСтрока(ПараметрыВыводаВидаБюджета.ЗаголовокОтчета) Тогда
ФинОтчеты.УстановитьПараметр(СКД.НастройкиПоУмолчанию.ПараметрыВывода,
"Заголовок", ПараметрыВыводаВидаБюджета.ЗаголовокОтчета);
КонецЕсли;
Возврат СКД;
КонецФункции
Функция ПолучитьЗапросДанныхВыводаОтчета(МассивОбъектов)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЭкземплярБюджета.Ссылка КАК Ссылка,
| ЭкземплярБюджета.Номер КАК НомерДокумента,
| ЭкземплярБюджета.Дата КАК ДатаДокумента,
| ЭкземплярБюджета.МодельБюджетирования КАК МодельБюджетирования,
| ЭкземплярБюджета.МодельБюджетирования.БюджетыПоОрганизациям КАК БюджетыПоОрганизациям,
| ЭкземплярБюджета.МодельБюджетирования.БюджетыПоПодразделениям КАК БюджетыПоПодразделениям,
| ЭкземплярБюджета.Организация КАК Организация,
| ЭкземплярБюджета.Подразделение КАК Подразделение,
| ЭкземплярБюджета.Ответственный.Представление КАК Ответственный,
| ЭкземплярБюджета.Сценарий КАК Сценарий,
| ЭкземплярБюджета.Сценарий.Валюта КАК ВалютаСценария,
| ЭкземплярБюджета.ВидБюджета КАК ВидБюджета,
| ЭкземплярБюджета.ВидБюджета.Представление КАК ВидБюджетаПредставление,
| ЭкземплярБюджета.Действие КАК Действие,
| ЭкземплярБюджета.НачалоПериода КАК НачалоПериода,
| ЭкземплярБюджета.ОкончаниеПериода КАК ОкончаниеПериода,
| ЭкземплярБюджета.ГраницаФактДанных КАК ГраницаФактДанных,
| &ТекстАналитик,
| ЭкземплярБюджета.ВидБюджета.АналитикиШапки КАК АналитикиШапки,
| ЭкземплярБюджета.АналитикаСтатейБюджетов КАК АналитикаСтатейБюджетов,
| ЭкземплярБюджета.ОборотыПоСтатьямБюджетов КАК ОборотыПоСтатьямБюджетов,
| ЭкземплярБюджета.АналитикаЗначений КАК АналитикаЗначений
|ИЗ
| Документ.ЭкземплярБюджета КАК ЭкземплярБюджета
|ГДЕ
| ЭкземплярБюджета.Ссылка В(&МассивОбъектов)";
ТекстАналитик = "";
МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
Для НомерАналитики = 1 По МаксимальноеКоличествоАналитик Цикл
ТекстАналитик = ТекстАналитик + ?(ТекстАналитик = "", "", "," + Символы.ПС + Символы.Таб)
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"ЭкземплярБюджета.Аналитика%1 КАК Аналитика%1",
НомерАналитики);
КонецЦикла;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстАналитик", ТекстАналитик);
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Возврат Запрос;
КонецФункции
Функция ШаблонПараметровСозданияПолейПоДеревуКолонок()
ПараметрыСозданияПолей = Новый Структура;
ПараметрыСозданияПолей.Вставить("ДеревоКолонок");
ПараметрыСозданияПолей.Вставить("КолонкиПоИзмерениям");
ПараметрыСозданияПолей.Вставить("ЭлементыДобавления");
ПараметрыСозданияПолей.Вставить("ЗначенияГруппировок", Неопределено);
ПараметрыСозданияПолей.Вставить("ДляВыводаНаПечать", Ложь);
Возврат ПараметрыСозданияПолей;
КонецФункции
Функция СоздатьПоляВыбораПоДеревуКолонок(СКД, ПараметрыСозданияПолей, ТекущаяГлубина = 1)
ДеревоКолонок = ПараметрыСозданияПолей.ДеревоКолонок;
КолонкиПоИзмерениям = ПараметрыСозданияПолей.КолонкиПоИзмерениям;
ЭлементыДобавления = ПараметрыСозданияПолей.ЭлементыДобавления;
ЗначенияГруппировок = ПараметрыСозданияПолей.ЗначенияГруппировок;
ФинОтчеты = ФинансоваяОтчетностьСервер;
Если ЗначенияГруппировок = Неопределено Тогда
ЗначенияГруппировок = Новый Структура;
КонецЕсли;
ГлубинаУровня = ТекущаяГлубина;
Для Каждого СтрокаДерева Из ДеревоКолонок.Строки Цикл
ВставленныйКлюч = "";
Если ЗначениеЗаполнено(СтрокаДерева.ФиксированноеЗначение) Тогда
ЗначенияГруппировок.Вставить(СтрокаДерева.ИмяИзмерения, СтрокаДерева.ФиксированноеЗначение);
ВставленныйКлюч = СтрокаДерева.ИмяИзмерения;
КонецЕсли;
ЗначениеКолонки = СтрокаДерева.ЭлементОтчета;
Если СтрНайти(СтрокаДерева.ИмяИзмерения, "#Показатель_") Тогда
ИмяПоказателя = СтрЗаменить(СтрокаДерева.ИмяИзмерения, "#Показатель_", "");
ЗначенияГруппировок.Вставить("ИмяПоказателя", ИмяПоказателя);
ВставленныйКлюч = ИмяПоказателя;
Если ЗначениеЗаполнено(СтрокаДерева.Родитель) Тогда
ЗначениеКолонки = СтрокаДерева.Родитель.ЭлементОтчета;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ЗначениеКолонки) Тогда
ЗначениеКолонки = Справочники.ЭлементыФинансовыхОтчетов.ПустаяСсылка();
КонецЕсли;
Если СтрокаДерева.Строки.Количество() Тогда
Элемент = ЭлементыДобавления.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
Элемент.Заголовок = СтрокаДерева.НаименованиеДляПечати;
Элемент.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально;
ПараметрыСозданияПолей = ШаблонПараметровСозданияПолейПоДеревуКолонок();
ПараметрыСозданияПолей.ДеревоКолонок = СтрокаДерева;
ПараметрыСозданияПолей.КолонкиПоИзмерениям = КолонкиПоИзмерениям;
ПараметрыСозданияПолей.ЭлементыДобавления = Элемент.Элементы;
ПараметрыСозданияПолей.ЗначенияГруппировок = ЗначенияГруппировок;
НоваяГлубина = СоздатьПоляВыбораПоДеревуКолонок(СКД,
ПараметрыСозданияПолей,
ТекущаяГлубина + 1);
ГлубинаУровня = Макс(ГлубинаУровня, НоваяГлубина);
Иначе
СтатьиБюджетов = Неопределено;
Если КолонкиПоИзмерениям.Свойство("СтатьиБюджетов", СтатьиБюджетов) Тогда
СтруктураОписания = СтатьиБюджетов[СтрокаДерева.ЭлементОтчета];
Если СтруктураОписания <> Неопределено Тогда
ИмяПоказателя = СтруктураОписания.ИмяПоказателя;
ЗначенияГруппировок.Вставить("ИмяПоказателя", ИмяПоказателя);
КонецЕсли;
КонецЕсли;
ПолеРесурса = "";
ИмяПоказателя = "Сумма";
ИмяПараметра = "Колонка_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "_");
ПолеРесурса = "Колонка = &" + ИмяПараметра;
Параметр = СКД.Параметры.Найти(ИмяПараметра);
Если Параметр = Неопределено Тогда
Параметр = СКД.Параметры.Добавить();
Параметр.Имя = ИмяПараметра;
Параметр.Значение = ЗначениеКолонки;
Параметр.ОграничениеИспользования = Истина;
КонецЕсли;
Для Каждого КлючИЗначение Из ЗначенияГруппировок Цикл
Если КлючИЗначение.Ключ = "ИмяПоказателя" Тогда
ИмяПоказателя = КлючИЗначение.Значение;
Продолжить;
КонецЕсли;
ИмяПараметра = КлючИЗначение.Ключ + "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "_");
ПолеРесурса = ПолеРесурса + " И " + КлючИЗначение.Ключ + " = &" + ИмяПараметра;
Параметр = СКД.Параметры.Найти(ИмяПараметра);
Если Параметр = Неопределено Тогда
Параметр = СКД.Параметры.Добавить();
Параметр.Имя = ИмяПараметра;
Параметр.Значение = КлючИЗначение.Значение;
Параметр.ОграничениеИспользования = Истина;
КонецЕсли;
КонецЦикла;
ВыражениеПоказателя = ИмяПоказателя;
Если ИмяПоказателя = "Сумма" Тогда
ВыражениеПоказателя = "ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Сумма) = Тип(""Число"") ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ";
Если СКД.НаборыДанных.ДанныеЯчеек.Поля.Найти("Валюта") <> Неопределено Тогда
ВыражениеПоказателя = "ВЫБОР
| КОГДА ЗначениеЗаполнено(Валюта)
| ТОГДА ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(СуммаВал) = Тип(""Число"") ТОГДА СуммаВал ИНАЧЕ 0 КОНЕЦ
| ИНАЧЕ ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Сумма) = Тип(""Число"") ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ
|КОНЕЦ";
КонецЕсли;
ВыражениеПоказателя = "ВЫБОР
| КОГДА &ДляВыводаНаПечать = ЛОЖЬ И ЕстьNull(ОбратныйЗнак, Ложь) = Истина
| ТОГДА -1
| ИНАЧЕ 1
|КОНЕЦ * " + ВыражениеПоказателя;
КонецЕсли;
Если ИмяПоказателя = "Значение" Тогда
ПолеРесурса = "МИНИМУМ(ВЫБОР КОГДА " + ПолеРесурса + " ТОГДА " + ВыражениеПоказателя + " КОНЕЦ)";
Иначе
ПолеРесурса = "СУММА(ВЫБОР КОГДА " + ПолеРесурса + " ТОГДА " + ВыражениеПоказателя + " КОНЕЦ)";
КонецЕсли;
ИмяПоля = "Ресурс_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "_");
ФинОтчеты.НовыйВычисляемыйРесурс(СКД,
ИмяПоля,,,
ПолеРесурса);
Элемент = ЭлементыДобавления.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Элемент.Заголовок = СтрокаДерева.НаименованиеДляПечати;
Элемент.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
КонецЕсли;
Если Не ПустаяСтрока(ВставленныйКлюч) Тогда
ЗначенияГруппировок.Удалить(ВставленныйКлюч);
КонецЕсли;
КонецЦикла;
Возврат ГлубинаУровня;
КонецФункции
Функция СоставКолонокКорневогоЭлемента(ТекущаяСтрока, СписокПараметров, КолонкиПоИзмерениям) Экспорт
МассивЭлементов = ПолучитьПараметрыПодчиненныхСтрок(ТекущаяСтрока, СписокПараметров, КолонкиПоИзмерениям);
Для Сч = 1 По МассивЭлементов.ВГраница() Цикл
Если МассивЭлементов[Сч] = Неопределено
ИЛИ МассивЭлементов[Сч-1] = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Значение1 = СтрСоединить(МассивЭлементов[Сч].Измерения, ",");
Значение2 = СтрСоединить(МассивЭлементов[Сч-1].Измерения, ",");
Если Значение1 <> Значение2 Тогда
Возврат Ложь;
КонецЕсли;
Если МассивЭлементов[Сч].Свойство("СтатьиБюджетов") Тогда
Для Каждого КлючИЗначение Из МассивЭлементов[Сч].СтатьиБюджетов Цикл
Если МассивЭлементов[Сч-1].СтатьиБюджетов[КлючИЗначение.Ключ].СтатьяБюджетов <> КлючИЗначение.Значение.СтатьяБюджетов
ИЛИ МассивЭлементов[Сч-1].СтатьиБюджетов[КлючИЗначение.Ключ].ИмяПоказателя <> КлючИЗначение.Значение.ИмяПоказателя Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если КолонкиПоИзмерениям = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
СтатьиБюджетов = Неопределено;
КолонкиПоИзмерениям.Свойство("СтатьиБюджетов", СтатьиБюджетов);
КопияКолонкиПоИзмерениям = Новый Структура();
КопияКолонкиПоИзмерениям.Вставить("Измерения", КолонкиПоИзмерениям.Измерения);
КопияКолонкиПоИзмерениям.Вставить("НастройкиКолонок", КолонкиПоИзмерениям.НастройкиКолонок);
КопияКолонкиПоИзмерениям.Вставить("НастройкиВвода", Новый Структура);
КопияКолонкиПоИзмерениям.Вставить("СтрокиОснования", Новый Массив);
КолонкиПоИзмерениям = КопияКолонкиПоИзмерениям;
Если СтатьиБюджетов <> Неопределено Тогда
КолонкиПоИзмерениям.Вставить("СтатьиБюджетов", СтатьиБюджетов);
КонецЕсли;
Для Каждого ЭлементНастройки Из КолонкиПоИзмерениям.Измерения Цикл
РезультирующийСписок = Новый СписокЗначений;
Для Каждого ЭлементМассива Из МассивЭлементов Цикл
Значения = ЭлементМассива.НастройкиВвода[ЭлементНастройки];
Если Значения = Неопределено Тогда
РезультирующийСписок = Неопределено;
Прервать;
Иначе
Для Каждого ЭлементСписка Из Значения Цикл
Если РезультирующийСписок.НайтиПоЗначению(ЭлементСписка.Значение) = Неопределено Тогда
РезультирующийСписок.Добавить(ЭлементСписка.Значение, ЭлементСписка.Представление);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КолонкиПоИзмерениям.НастройкиВвода.Вставить(ЭлементНастройки, РезультирующийСписок);
КонецЦикла;
Для Каждого ЭлементМассива Из МассивЭлементов Цикл
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(КолонкиПоИзмерениям.СтрокиОснования,
ЭлементМассива.СтрокиОснования,
Истина);
КонецЦикла;
Возврат Истина;
КонецФункции
Функция ПолучитьПараметрыПодчиненныхСтрок(ТекущаяСтрока, СписокПараметров, КолонкиПоИзмерениям)
МассивЭлементов = Новый Массив();
Если ТипЗнч(ТекущаяСтрока) = Тип("ДанныеФормыЭлементДерева") Тогда
ПодчиненныеСтроки = ТекущаяСтрока.ПолучитьЭлементы();
Иначе
ПодчиненныеСтроки = ТекущаяСтрока.Строки;
КонецЕсли;
Для Каждого ПодчиненнаяСтрока Из ПодчиненныеСтроки Цикл
КолонкиПоИзмерениямТекущейСтроки = СписокПараметров[ПодчиненнаяСтрока.Строка];
Если Не КолонкиПоИзмерениямТекущейСтроки = Неопределено Тогда
КолонкиПоИзмерениям = КолонкиПоИзмерениямТекущейСтроки;
МассивЭлементов.Добавить(КолонкиПоИзмерениям);
КонецЕсли;
ДополнительныйМассивЭлементов = ПолучитьПараметрыПодчиненныхСтрок(ПодчиненнаяСтрока,
СписокПараметров,
КолонкиПоИзмерениям);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивЭлементов, ДополнительныйМассивЭлементов);
КонецЦикла;
Возврат МассивЭлементов;
КонецФункции
#КонецОбласти
#Область Отчеты
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КомандаОтчет = КомандыОтчетов.Добавить();
КомандаОтчет.ИмяФормы = "Документ.ЭкземплярБюджета.Форма.КорректировкиИсправленияБюджета";
КомандаОтчет.Представление = НСтр("ru = 'Корректировки и исправления бюджета'");
КомандаОтчет.МножественныйВыбор = Ложь;
КомандаОтчет.Важность = "Обычное";
КомандаОтчет.КлючВарианта = "КорректировкиИсправленияБюджета";
КомандаОтчет.Неконтекстный = Ложь;
КомандаОтчет.РежимЗаписи = "Проводить";
КонецПроцедуры
#КонецОбласти
#КонецЕсли