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