Правила распределения расходов / Форма списка вручную / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	Если Параметры.Свойство("Период") Тогда
		Период = Параметры.Период;
	Иначе
		Период = НачалоМесяца(ТекущаяДатаСеанса());
	КонецЕсли;
	
	Если Параметры.Свойство("ТолькоНезаполненные") Тогда
		
		ТолькоНезаполненныеПоказатели = Параметры.ТолькоНезаполненные;
		ВывестиТолькоПоказателиКЗаполнению();
		
	КонецЕсли;
	
	Показатель = Справочники.ПравилаРаспределенияРасходов.ПустаяСсылка();
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнению, "Показатель", Показатель);
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнениюНаОВЗ, "Показатель", Показатель);
	
	Если Параметры.Свойство("Показатель") И ЗначениеЗаполнено(Параметры.Показатель) Тогда
	
		Показатель = Параметры.Показатель;
		НазначениеПоказателей = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Показатель, "НазначениеПравила");
		ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(?(НазначениеПоказателей = Перечисления.НазначениеПравилРаспределенияРасходов.РаспределениеРасходовНаОВЗ, ЗначенияКЗаполнениюНаОВЗ, ЗначенияКЗаполнению), "Показатель", Показатель);

		Если Параметры.Свойство("ТолькоЗначения") Тогда
			Элементы.ГруппаПоказатели.Видимость = Ложь;
			Заголовок = СтрШаблон("Ввод значений показателя %1", Строка(Показатель));
		КонецЕсли;
	
	ИначеЕсли Параметры.Свойство("НазначениеПравила") Тогда
		НазначениеПоказателей = Параметры.НазначениеПравила;
	Иначе
		НазначениеПоказателей = Перечисления.НазначениеПравилРаспределенияРасходов.РаспределениеСтатейРасходовПоПодразделениям;
	КонецЕсли;
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПоказателиКЗаполнению, "НазначениеПравила", НазначениеПоказателей);
	
	Если Параметры.Свойство("Подразделения")Тогда
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
			ЗначенияКЗаполнению,
			"Подразделение",
			Параметры.Подразделения,
			ВидСравненияКомпоновкиДанных.ВСписке);
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнению, "НачалоМесяца", НачалоМесяца(Период));
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнениюНаОВЗ, "НачалоМесяца", НачалоМесяца(Период));

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	МесяцСтрока = ОбщегоНазначенияУТКлиент.ПолучитьПредставлениеПериодаРегистрации(Период);
	Если ЗначениеЗаполнено(Показатель) Тогда
		Элементы.ПоказателиКЗаполнению.ТекущаяСтрока = Показатель;
	КонецЕсли;
	ОтобразитьЗначенияПоказателя();

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовФормы

&НаКлиенте
Процедура ПоказателиКЗаполнениюПриАктивизацииСтроки(Элемент)
	
	ПодключитьОбработчикОжидания("ПоказателиКЗаполнениюПриАктивизацииСтрокиЗавершение", 0.2, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказателиКЗаполнениюПриАктивизацииСтрокиЗавершение()
	
	Если (Показатель <> Элементы.ПоказателиКЗаполнению.ТекущаяСтрока) Тогда
		Показатель = Элементы.ПоказателиКЗаполнению.ТекущаяСтрока;
		ОтобразитьЗначенияПоказателя();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОтобразитьЗначенияПоказателя()
	
	ВыбранПоказатель = ТипЗнч(Показатель) = Тип("СправочникСсылка.ПравилаРаспределенияРасходов");
	
	Элементы.ЗначенияКЗаполнению.Доступность = ВыбранПоказатель;
	Элементы.ЗначенияКЗаполнениюНаОВЗ.Доступность = ВыбранПоказатель;
	Элементы.ГруппаЗначенияКЗаполнениюКП.Доступность = ВыбранПоказатель;
	Элементы.ГруппаЗначенияКЗаполнениюОВЗКП.Доступность = ВыбранПоказатель;
	Если НЕ ВыбранПоказатель Тогда
		Возврат;
	КонецЕсли;
	
	РеквизитыПоказателя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Показатель, "НазначениеПравила,БазаРаспределения");
	
	НаОВЗ = РеквизитыПоказателя.НазначениеПравила = ПредопределенноеЗначение("Перечисление.НазначениеПравилРаспределенияРасходов.РаспределениеРасходовНаОВЗ");
	Периодический = НЕ РеквизитыПоказателя.БазаРаспределения = ПредопределенноеЗначение("Перечисление.ТипыБазыРаспределенияРасходов.ВводитсяПриИзменении");
	
	Элементы.ГруппаЗначенияКЗаполнениюКП.Видимость = НЕ НаОВЗ;
	Элементы.ЗначенияКЗаполнению.Видимость = НЕ НаОВЗ;

	Элементы.ГруппаЗначенияКЗаполнениюОВЗКП.Видимость = НаОВЗ;
	Элементы.ЗначенияКЗаполнениюНаОВЗ.Видимость = НаОВЗ;
	
	Если НаОВЗ Тогда
		Элементы.ЗначенияКЗаполнениюНаОВЗПериод.Видимость = НЕ Периодический;
	Иначе
		Элементы.ЗначенияКЗаполнениюПериод.Видимость = НЕ Периодический;
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(?(НаОВЗ, ЗначенияКЗаполнениюНаОВЗ, ЗначенияКЗаполнению), "Показатель", Показатель);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗначенияКЗаполнениюПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	Отказ = Истина;
	Если Элементы.ПоказателиКЗаполнению.ТекущиеДанные <> Неопределено Тогда
		ПараметрыФормы = Новый Структура("Показатель, Период", Элементы.ПоказателиКЗаполнению.ТекущиеДанные.Ссылка, Период);
		ОткрытьФорму("РегистрСведений.ЗначенияПоказателейДляРаспределенияРасходов.Форма.ФормаЗаписи", ПараметрыФормы, ЭтаФорма);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЗначенияКЗаполнениюНаОВЗПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
	Отказ = Истина;
	Если Элементы.ПоказателиКЗаполнению.ТекущиеДанные <> Неопределено Тогда
		ПараметрыФормы = Новый Структура("Показатель, Период", Элементы.ПоказателиКЗаполнению.ТекущиеДанные.Ссылка, Период);
		ОткрытьФорму("РегистрСведений.ЗначенияПоказателейДляРаспределенияРасходовНаОВЗ.Форма.ФормаЗаписи", ПараметрыФормы, ЭтаФорма);
	КонецЕсли;
КонецПроцедуры


&НаКлиенте
Процедура ПериодРегулирование(Элемент, Направление, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Период = ДобавитьМесяц(Период, Направление);
	МесяцСтрока = ОбщегоНазначенияУТКлиент.ПолучитьПредставлениеПериодаРегистрации(Период);
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнению, "НачалоМесяца", НачалоМесяца(Период));
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнениюНаОВЗ, "НачалоМесяца", НачалоМесяца(Период));
КонецПроцедуры

&НаКлиенте
Процедура ЗначенияКЗаполнениюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Данные = Элемент.ТекущиеДанные;
	
	ПараметрыОткрываемойФормы = Новый Структура();
	ПараметрыОткрываемойФормы.Вставить("Показатель",			Показатель);
	ПараметрыОткрываемойФормы.Вставить("Период",				Период);
	ПараметрыОткрываемойФормы.Вставить("Подразделение",			Данные.Подразделение);
	ПараметрыОткрываемойФормы.Вставить("ЗначениеПоказателя",	Данные.Показатель);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ОбновитьСписокПоказателей", ЭтаФорма);
	
	ОткрытьФорму("РегистрСведений.ЗначенияПоказателейДляРаспределенияРасходов.Форма.ФормаЗаписи", ПараметрыОткрываемойФормы, ЭтаФорма,,,,ОписаниеОповещения);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗначенияКЗаполнениюНаОВЗВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	Данные = Элемент.ТекущиеДанные;
	
	ПараметрыОткрываемойФормы = Новый Структура();
	ПараметрыОткрываемойФормы.Вставить("Показатель",			Показатель);
	ПараметрыОткрываемойФормы.Вставить("Период",				Период);
	ПараметрыОткрываемойФормы.Вставить("ОВЗ",					Данные.ОВЗ);
	ПараметрыОткрываемойФормы.Вставить("ЗначениеПоказателя",	Данные.Показатель);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ОбновитьСписокПоказателейОВЗ", ЭтаФорма);
	
	ОткрытьФорму("РегистрСведений.ЗначенияПоказателейДляРаспределенияРасходовНаОВЗ.Форма.ФормаЗаписи", ПараметрыОткрываемойФормы, ЭтаФорма,,,,ОписаниеОповещения);
	
КонецПроцедуры


&НаКлиенте
Процедура ОбновитьСписокПоказателей(Результат, ПараметрКоманды) Экспорт
	Элементы.ЗначенияКЗаполнению.Обновить();
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСписокПоказателейОВЗ(Результат, ПараметрКоманды) Экспорт
	Элементы.ЗначенияКЗаполнениюНаОВЗ.Обновить();
КонецПроцедуры

&НаКлиенте
Процедура ПериодНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Оповещение = Новый ОписаниеОповещения("МесяцСтрокаНачалоВыбораЗавершение", ЭтотОбъект);
	ОбщегоНазначенияУТКлиент.НачалоВыбораПредставленияПериодаРегистрации(Элемент, СтандартнаяОбработка, Период, ЭтаФорма, Оповещение);
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыФункции 

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

	Результат = Запрос.Выполнить();
	Если Не Результат.Пустой() Тогда
		НезаполненныеПоказатели = Результат.Выгрузить().ВыгрузитьКолонку("Показатель");
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПоказателиКЗаполнению, "Ссылка", НезаполненныеПоказатели, ВидСравненияКомпоновкиДанных.ВСписке, ,Истина);
	Иначе
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПоказателиКЗаполнению, "Ссылка", Справочники.ПравилаРаспределенияРасходов.ПустаяСсылка(), ВидСравненияКомпоновкиДанных.Равно, ,Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцСтрокаНачалоВыбораЗавершение(ВыбранныйПериод, ДополнительныеПараметры) Экспорт 
	Если ВыбранныйПериод <> Неопределено Тогда
		Период = ВыбранныйПериод;
		МесяцСтрока = ОбщегоНазначенияУТКлиент.ПолучитьПредставлениеПериодаРегистрации(ВыбранныйПериод);
	КонецЕсли;
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнению, "НачалоМесяца", НачалоМесяца(Период));
	ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ЗначенияКЗаполнениюНаОВЗ, "НачалоМесяца", НачалоМесяца(Период));
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформление()

	ПолужирныйШрифт = Новый Шрифт(, , Истина, , , , );
	
	#Область ОформлениеЗначенияКЗаполнению
	
	УсловноеОформление.Элементы.Очистить();
	
	// ЗначенияКЗаполнению.Показатель
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗначенияКЗаполнениюПоказатель.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗначенияКЗаполнению.Показатель");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	
	// ЗначенияКЗаполнению.Период
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗначенияКЗаполнениюПериод.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗначенияКЗаполнению.Показатель");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не задано>'"));
	
	// ЗначенияКЗаполнению.Подразделение
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗначенияКЗаполнениюПодразделение.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗначенияКЗаполнению.Показатель");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ПолужирныйШрифт);
	
	#КонецОбласти

	#Область ОформлениеЗначенияКЗаполнениюНаОВЗ
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетПоОбъектамВозникновенияЗатрат") Тогда
		
		// ЗначенияКЗаполнениюНаОВЗ.Показатель
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗначенияКЗаполнениюНаОВЗПоказатель.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗначенияКЗаполнениюНаОВЗПоказатель.Показатель");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
		
		// ЗначенияКЗаполнениюНаОВЗ.Период
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗначенияКЗаполнениюНаОВЗПериод.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗначенияКЗаполнениюНаОВЗ.Показатель");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
		Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не задано>'"));
		
		// ЗначенияКЗаполнению.ОВЗ
		Элемент = УсловноеОформление.Элементы.Добавить();
		
		ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЗначенияКЗаполнениюНаОВЗОВЗ.Имя);
		
		ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗначенияКЗаполнениюНаОВЗ.Показатель");
		ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
		
		Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ПолужирныйШрифт);
		
	КонецЕсли;
	
	#КонецОбласти
	
КонецПроцедуры

&НаКлиенте
Процедура ТолькоНезаполненныеПриИзменении(Элемент)
	
	Если ТолькоНезаполненныеПоказатели Тогда
		ВывестиТолькоПоказателиКЗаполнению();
	Иначе
		ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(ПоказателиКЗаполнению, "Ссылка");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказателиКЗаполнениюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОткрытьФорму("Справочник.ПравилаРаспределенияРасходов.Форма.ФормаПоказателя", Новый Структура("Ключ", ВыбраннаяСтрока));
КонецПроцедуры

&НаКлиенте
Процедура НазначениеПоказателейПриИзменении(Элемент)
	НазначениеПоказателейПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура НазначениеПоказателейПриИзмененииНаСервере()
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(ПоказателиКЗаполнению, "НазначениеПравила", НазначениеПоказателей);
КонецПроцедуры

#КонецОбласти

Связанные материалы