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