Распределение расходов / Форма настроек на ОВЗ / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

&НаКлиенте
Перем КэшРеквизитов;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();

	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

	//++ НЕ УТ
	ИнициализироватьДинамическийСписокЗначенияПоказателей();
	//-- НЕ УТ

	ДоходыИРасходыСервер.ПриСозданииНаСервере(ЭтотОбъект,
		Документы.РаспределениеПрочихЗатрат.ПараметрыВыбораСтатейИАналитик());
	//++ НЕ УТ
	НастройкаСчетовУчетаСервер.ПриСозданииНаСервере(ЭтотОбъект,
		Документы.РаспределениеПрочихЗатрат.ПараметрыНастройкиСчетовУчета());
	//-- НЕ УТ

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

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	// СтандартныеПодсистемы.Свойства
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
	УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
	// Конец СтандартныеПодсистемы.Свойства

	//++ НЕ УТ

	//++ Локализация
	УправлениеЭлементамиФормы();
	//-- Локализация

	//-- НЕ УТ
	
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	ПриЧтенииСозданииНаСервере();

	СобытияФорм.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	ЗаполнитьСлужебныеРеквизитыФормы();

	ДоходыИРасходыСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
	//++ НЕ УТ
	НастройкаСчетовУчетаСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
	//-- НЕ УТ
	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);

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

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
	
	// СтандартныеПодсистемы.Свойства
	УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.Свойства

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

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

	ОбновитьНадписьПериод();

	КэшРеквизитов = Новый Структура;
	КэшРеквизитов.Вставить("РегламентированныйУчет", Объект.РегламентированныйУчет);
	КэшРеквизитов.Вставить("УправленческийУчет", Объект.УправленческийУчет);
	//++ НЕ УТ

	//++ Локализация
	КэшРеквизитов.Вставить("НалоговыйУчет", Объект.НалоговыйУчет);
	//-- Локализация

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

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

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

	СобытияФормКлиент.ПередЗаписью(ЭтотОбъект, Отказ, ПараметрыЗаписи);

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)

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

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

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

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)

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

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

	ПараметрыПередачи = Новый Структура;
	ПараметрыПередачи.Вставить("Организация", Объект.Организация);
	ПараметрыПередачи.Вставить("Подразделение", Объект.Подразделение);
	ПараметрыПередачи.Вставить("СтатьяРасходов", Объект.СтатьяРасходов);
	ПараметрыПередачи.Вставить("АналитикаРасходов", Объект.АналитикаРасходов);
	ПараметрыПередачи.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);

	Если Объект.Проведен Тогда

		ДокументПередачи = Объект.Ссылка;
		Состояние = ПредопределенноеЗначение(
				"Перечисление.СостоянияРаспределенияРасходов.ГотовоКРаспределениюПоБазе");

	Иначе

		ДокументПередачи = Неопределено;
		Состояние = ПредопределенноеЗначение(
				"Перечисление.СостоянияРаспределенияРасходов.ТребуетсяСформироватьДокумент");

	КонецЕсли;

	Если Объект.УправленческийУчет Или КэшРеквизитов.УправленческийУчет Тогда

		Если Не Объект.УправленческийУчет И КэшРеквизитов.УправленческийУчет Тогда

			ПараметрыПередачи.Вставить("ДокументУпр", Неопределено);
			ПараметрыПередачи.Вставить("СостояниеУпр", ПредопределенноеЗначение(
					"Перечисление.СостоянияРаспределенияРасходов.ТребуетсяСформироватьДокумент"));

		Иначе

			ПараметрыПередачи.Вставить("ДокументУпр", ДокументПередачи);
			ПараметрыПередачи.Вставить("СостояниеУпр", Состояние);

		КонецЕсли;

	КонецЕсли;

	Если Объект.РегламентированныйУчет Или КэшРеквизитов.РегламентированныйУчет Тогда

		Если Не Объект.РегламентированныйУчет И КэшРеквизитов.РегламентированныйУчет Тогда

			ПараметрыПередачи.Вставить("ДокументРегл", Неопределено);
			ПараметрыПередачи.Вставить("СостояниеРегл", ПредопределенноеЗначение(
					"Перечисление.СостоянияРаспределенияРасходов.ТребуетсяСформироватьДокумент"));

		Иначе

			ПараметрыПередачи.Вставить("ДокументРегл", ДокументПередачи);
			ПараметрыПередачи.Вставить("СостояниеРегл", Состояние);

		КонецЕсли;

	КонецЕсли;
		
	//++ НЕ УТ

	//++ Локализация
	Если Объект.НалоговыйУчет Или КэшРеквизитов.НалоговыйУчет Тогда

		Если Не Объект.НалоговыйУчет И КэшРеквизитов.НалоговыйУчет Тогда

			ПараметрыПередачи.Вставить("ДокументНал", Неопределено);
			ПараметрыПередачи.Вставить("СостояниеНал", ПредопределенноеЗначение(
				"Перечисление.СостоянияРаспределенияРасходов.ТребуетсяСформироватьДокумент"));

		Иначе

			ПараметрыПередачи.Вставить("ДокументНал", ДокументПередачи);
			ПараметрыПередачи.Вставить("СостояниеНал", Состояние);

		КонецЕсли;

	КонецЕсли;
	//-- Локализация

	//-- НЕ УТ

	Оповестить("Запись_РаспределениеПрочихЗатрат", ПараметрыПередачи);

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

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

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

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

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)

	НедоступныеЭлементыПоФО(Объект.Дата);
	УстановитьВидимостьЭлементовПоФО("ГруппаОставитьВНЗП");
	ОбновитьНадписьПериод();
	УстановитьПараметрыСпискаЗначенийПоказателей();

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

&НаКлиенте
Процедура ДекорацияСохранитьНастройкуРаспределенияНажатие(Элемент)

	//++ НЕ УТ
	Если Не Объект.Проведен Тогда

		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			НСтр("ru = 'Перед сохранением настройки документ требуется провести.'"));
		Возврат;

	КонецЕсли;

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

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

&НаКлиенте
Процедура ВидУчетаПриИзменении(Элемент)
	УстановитьДоступностьВидовУчета();
	СинхронизироватьВидыУчетаБУиНУ(Элемент.Имя);
КонецПроцедуры

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

#Область ОбработчикиСобытийПравилаРаспределения

&НаКлиенте
Процедура ДекорацияОткрытьФормуВводаЗначенийПоказателяНажатие(Элемент)

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

	ОткрытьФорму("Справочник.ПравилаРаспределенияРасходов.Форма.ФормаСпискаВручную", ПараметрыФормы, ЭтаФорма);

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

&НаКлиенте
Процедура РаспределятьНаОВЗПриИзменении(Элемент)

	Если Не Объект.РаспределятьНаОВЗ Тогда
		УточнитьИзменениеРеквизита("РаспределятьНаОВЗ");
	Иначе
		ОбработатьИзменениеРаспределятьНаОВЗ();
	КонецЕсли;

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

&НаКлиенте
Процедура РаспределятьНаСтатьиПриИзменении(Элемент)

	Если Не Объект.РаспределятьНаСтатьи Тогда
		УточнитьИзменениеРеквизита("РаспределятьНаСтатьи");
	Иначе
		ОбработатьИзменениеРаспределятьНаСтатьи();
	КонецЕсли;

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

&НаКлиенте
Процедура ОставитьВНЗППриИзменении(Элемент)

	Если Не Объект.ОставитьВНЗП Тогда
		Объект.ДоляСтоимостиНаНЗП = 0;
	КонецЕсли;

	УстановитьДоступностьЭлементов(ЭтаФорма, "ОставитьВНЗП");
	НастроитьОформлениеПолей(ЭтаФорма);

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

&НаКлиенте
Процедура ДоляСтоимостиНаОВЗПриИзменении(Элемент)

	НастроитьОформлениеПолей(ЭтаФорма);

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

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

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

&НаКлиенте
Процедура СписаниеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	//++ НЕ УТ
	НастройкаСчетовУчетаКлиент.ПриНажатии(ЭтотОбъект, Поле, СтандартнаяОбработка);
	//-- НЕ УТ
	Возврат; // В УТ обработчик пустой.

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

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

	ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура СписаниеСтатьяРасходовПриИзменении(Элемент)

	ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элемент);

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

&НаКлиенте
Процедура СписаниеАналитикаРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

	ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура СписаниеАналитикаРасходовАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание,
	СтандартнаяОбработка)

	ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора,
		ПараметрыПолученияДанных, СтандартнаяОбработка);

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

&НаКлиенте
Процедура СписаниеАналитикаРасходовОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных,
	СтандартнаяОбработка)

	ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора,
		ПараметрыПолученияДанных, СтандартнаяОбработка);

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

&НаКлиенте
Процедура СписаниеПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

	ТекущиеДанные = Элементы.Списание.ТекущиеДанные;
	ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, ТекущиеДанные, "Объект.Списание");

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

&НаКлиенте
Процедура СписаниеПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

	Если Не ОтменаРедактирования Тогда
		ОбновитьДолиСтоимости(ЭтаФорма);
	КонецЕсли;

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

&НаКлиенте
Процедура СписаниеПослеУдаления(Элемент)

	ОбновитьДолиСтоимости(ЭтаФорма);

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

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

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

&НаКлиенте
Процедура ПровестиДокумент(Команда)

	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);

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

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)

	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);

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

&НаКлиенте
Процедура УстановитьПометкуУдаленияДокумента(Команда)
	
	ОбщегоНазначенияУТКлиент.УстановитьПометкуУдаленияДокумента(ЭтотОбъект);
	
КонецПроцедуры

#Область БСП

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
	// Конец ИнтеграцияС1СДокументооборотом

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработчикиИзмененийРеквизитов

&НаКлиенте
Процедура ОбработатьИзменениеРаспределятьНаОВЗ()

	Если Не Объект.РаспределятьНаОВЗ Тогда
		ОчиститьЗависимыеРеквизиты("РаспределятьНаОВЗ");
	Иначе
		НастроитьОформлениеПолей(ЭтаФорма);
	КонецЕсли;

	УстановитьДоступностьЭлементов(ЭтаФорма, "РаспределятьНаОВЗ");

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

&НаКлиенте
Процедура ОбработатьИзменениеРаспределятьНаСтатьи()

	Если Не Объект.РаспределятьНаСтатьи Тогда
		ОчиститьЗависимыеРеквизиты("РаспределятьНаСтатьи");
	КонецЕсли;

	УстановитьДоступностьЭлементов(ЭтаФорма, "РаспределятьНаСтатьи");
	НастроитьОформлениеПолей(ЭтаФорма);

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

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

#Область БСП

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

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

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

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

#Область УправлениеФормой

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

	УсловноеОформление.Элементы.Очистить();

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписаниеНаправлениеДеятельности.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НаправлениеДеятельности");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьЭлементов(Форма, ИмяРеквизита = Неопределено)

	Элементы = Форма.Элементы;
	Объект = Форма.Объект;

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьЭлементов(Форма, ИмяРеквизита = Неопределено)

	Элементы = Форма.Элементы;
	Объект = Форма.Объект;

	Если ИмяРеквизита = Неопределено Или ИмяРеквизита = "РаспределятьНаОВЗ" Тогда

		Элементы.ОписаниеПравилаНаПроизводственныеЗатраты.Доступность = Объект.РаспределятьНаОВЗ;

	КонецЕсли;

	Если ИмяРеквизита = Неопределено Или ИмяРеквизита = "РаспределятьНаСтатьи" Тогда
		Элементы.НаДругиеСтатьи.Доступность = Объект.РаспределятьНаСтатьи;
	КонецЕсли;

	Если ИмяРеквизита = Неопределено Или ИмяРеквизита = "ОставитьВНЗП" Тогда
		Элементы.ДоляСтоимостиНаНЗП.Доступность = Объект.ОставитьВНЗП;
	КонецЕсли;

	УстановитьДоступностьДолиСтоимостиНаОВЗ(Форма);

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьДолиСтоимостиНаОВЗ(Форма)

	Элементы = Форма.Элементы;
	Объект = Форма.Объект;

	Если Объект.РаспределятьНаОВЗ И (Объект.РаспределятьНаСтатьи Или Объект.ОставитьВНЗП) Тогда
		Элементы.ДоляСтоимостиНаОВЗ.ТолькоПросмотр = Ложь;
	Иначе
		Элементы.ДоляСтоимостиНаОВЗ.ТолькоПросмотр = Истина;
	КонецЕсли;

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

&НаСервере
Процедура УстановитьДоступностьВидовУчета()
	
	Документы.РаспределениеПрочихЗатрат.УстановитьДоступностьВидовУчета(ЭтаФорма);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура НастроитьОформлениеПолей(Форма)

	Элементы = Форма.Элементы;
	Объект = Форма.Объект;

	Элементы.ДоляСтоимостиНаОВЗ.ОтметкаНезаполненного = Не Элементы.ДоляСтоимостиНаОВЗ.ТолькоПросмотр
		И Не ЗначениеЗаполнено(Объект.ДоляСтоимостиНаОВЗ);

	Элементы.ДоляСтоимостиНаНЗП.ОтметкаНезаполненного = Не Элементы.ДоляСтоимостиНаНЗП.ТолькоПросмотр
		И Не ЗначениеЗаполнено(Объект.ДоляСтоимостиНаНЗП);

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

&НаСервере
Процедура УстановитьВидимостьЭлементовПоФО(ИмяРеквизита = Неопределено)

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

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

&НаСервере
Процедура СинхронизироватьВидыУчетаБУиНУ(ВидУчета)
	
	Документы.РаспределениеПрочихЗатрат.СинхронизироватьВидыУчетаБУиНУ(ЭтаФорма, ВидУчета);
	
КонецПроцедуры

//++ НЕ УТ

//++ Локализация

&НаСервере
Процедура УправлениеЭлементамиФормы()
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьРеглУчет") = Истина Тогда
		Элементы.НалоговыйУчет.Видимость = Истина;
	КонецЕсли;
		
КонецПроцедуры
//-- Локализация

//-- НЕ УТ

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

#Область ИнициализацияФормы

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()

	ДоходыИРасходыСервер.ПриЧтенииНаСервере(ЭтотОбъект,
		Документы.РаспределениеПрочихЗатрат.ПараметрыВыбораСтатейИАналитик());
	//++ НЕ УТ
	НастройкаСчетовУчетаСервер.ПриЧтенииНаСервере(ЭтотОбъект,
		Документы.РаспределениеПрочихЗатрат.ПараметрыНастройкиСчетовУчета());
	//-- НЕ УТ

	ОпределитьВидимостьИСуммуРасходовПоСтатье();

	ЗаполнитьСлужебныеРеквизитыФормы();

	УстановитьВидимостьЭлементовПоФО();
	УстановитьВидимостьЭлементов(ЭтаФорма);
	УстановитьДоступностьЭлементов(ЭтаФорма);
	УстановитьДоступностьВидовУчета();
	НастроитьОформлениеПолей(ЭтаФорма);

	УстановитьПараметрыСпискаЗначенийПоказателей();

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

&НаСервере
Процедура УстановитьПараметрыСпискаЗначенийПоказателей()

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

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

&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыФормы()

	УстановитьЗаголовокФормы();

	НедоступныеЭлементы = НедоступныеЭлементыПоФО(Объект.Дата);

КонецПроцедуры
&НаКлиенте
Процедура ОбновитьНадписьПериод()

	НадписьПериод = ПредставлениеПериода(НачалоМесяца(Объект.Дата), КонецМесяца(Объект.Дата), "ДЛФ=D");

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

&НаСервере
Процедура УстановитьЗаголовокФормы()

	ПредставлениеОбъекта = Метаданные.Документы.РаспределениеПрочихЗатрат.Синоним;
	УточнениеПредставленияОбъекта = НСтр("ru = 'между объектами возникновения затрат'");

	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда

		ШаблонЗаголовка = НСтр("ru = '%1 %2 (создание)'");
		Заголовок = СтрШаблон(ШаблонЗаголовка, ПредставлениеОбъекта, УточнениеПредставленияОбъекта);

	Иначе

		ШаблонЗаголовка = НСтр("ru = '%1 %2 №%3 от %4'");
		Заголовок = СтрШаблон(ШаблонЗаголовка, ПредставлениеОбъекта, УточнениеПредставленияОбъекта, Объект.Номер,
			Формат(Объект.Дата, "ДЛФ=DT"));

	КонецЕсли;

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

//++ НЕ УТ

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

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

//-- НЕ УТ

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

#Область ВзаимодействиеСПользователем

&НаКлиенте
Процедура УточнитьИзменениеРеквизита(ИмяРеквизита, НеобходимоЗадатьВопрос = Ложь)

	Если Не НеобходимоЗадатьВопрос Тогда
		
		// Параметр не передан. Значит надо определить требуется задать вопрос или нет.

		СтруктураЗависимыхРеквизитов = ЗависимыеРеквизиты(ИмяРеквизита);

		Для Каждого РеквизитФормы Из СтруктураЗависимыхРеквизитов.РеквизитыФормы Цикл

			Если ТипЗнч(ЭтаФорма[РеквизитФормы]) = Тип("Булево") И ЭтаФорма[РеквизитФормы] = Истина Или Не ТипЗнч(
				ЭтаФорма[РеквизитФормы]) = Тип("Булево") И ЗначениеЗаполнено(ЭтаФорма[РеквизитФормы]) Тогда

				НеобходимоЗадатьВопрос = Истина;
				Прервать;

			КонецЕсли;

		КонецЦикла;

		Если Не НеобходимоЗадатьВопрос Тогда
			Для Каждого РеквизитОбъекта Из СтруктураЗависимыхРеквизитов.РеквизитыОбъекта Цикл

				Если ТипЗнч(Объект[РеквизитОбъекта]) = Тип("Булево") И Объект[РеквизитОбъекта] = Истина Или Не ТипЗнч(
					Объект[РеквизитОбъекта]) = Тип("Булево") И ЗначениеЗаполнено(Объект[РеквизитОбъекта]) Тогда

					НеобходимоЗадатьВопрос = Истина;
					Прервать;

				КонецЕсли;

			КонецЦикла;
		КонецЕсли;

	КонецЕсли;

	Если НеобходимоЗадатьВопрос Тогда

		Если ИмяРеквизита = "РаспределятьНаСтатьи" Тогда
			ТекстВопроса = НСтр("ru = 'Настройки распределения на другие статьи будут очищены. Продолжить?'");
		КонецЕсли;

		ПараметрыОповещения = Новый Структура("ИмяРеквизита", ИмяРеквизита);

		ПоказатьВопрос(Новый ОписаниеОповещения("УточнитьИзменениеРеквизитаЗавершение", ЭтаФорма, ПараметрыОповещения),
			ТекстВопроса, РежимДиалогаВопрос.ДаНет);

		Возврат;

	КонецЕсли;

	ОбработатьИзменениеРеквизитов(ИмяРеквизита);

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

&НаКлиенте
Процедура УточнитьИзменениеРеквизитаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт

	ИмяРеквизита = ДополнительныеПараметры.ИмяРеквизита;

	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		ОбработатьИзменениеРеквизитов(ИмяРеквизита);
	Иначе
		Если ИмяРеквизита = "РаспределятьНаОВЗ" Или ИмяРеквизита = "РаспределятьНаСтатьи" Тогда
			Объект[ИмяРеквизита] = Не Объект[ИмяРеквизита];
		КонецЕсли;
	КонецЕсли;

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

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

#Область КонтрольИзмененийРеквизитов

&НаКлиенте
Процедура ОбработатьИзменениеРеквизитов(ИмяРеквизита)

	Если ИмяРеквизита = "РаспределятьНаОВЗ" Тогда
		ОбработатьИзменениеРаспределятьНаОВЗ();
	ИначеЕсли ИмяРеквизита = "РаспределятьНаСтатьи" Тогда
		ОбработатьИзменениеРаспределятьНаСтатьи();
	КонецЕсли;

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

&НаКлиенте
Функция ОчиститьЗависимыеРеквизиты(ИмяРеквизита)

	СтруктураЗависимыхРеквизитов = ЗависимыеРеквизиты(ИмяРеквизита);

	Для Каждого РеквизитФормы Из СтруктураЗависимыхРеквизитов.РеквизитыФормы Цикл

		Если ТипЗнч(ЭтаФорма[РеквизитФормы]) = Тип("ДанныеФормыКоллекция") Тогда
			ЭтаФорма[РеквизитФормы].Очистить();
		Иначе
			ЭтаФорма[РеквизитФормы] = Неопределено;
		КонецЕсли;

		ОбработатьИзменениеРеквизитов(РеквизитФормы);

	КонецЦикла;

	Для Каждого РеквизитОбъекта Из СтруктураЗависимыхРеквизитов.РеквизитыОбъекта Цикл

		Если ТипЗнч(Объект[РеквизитОбъекта]) = Тип("ДанныеФормыКоллекция") Тогда
			Объект[РеквизитОбъекта].Очистить();
		Иначе
			Объект[РеквизитОбъекта] = Неопределено;
		КонецЕсли;

		ОбработатьИзменениеРеквизитов(РеквизитОбъекта);

	КонецЦикла;

	Возврат СтруктураЗависимыхРеквизитов;

КонецФункции

&НаКлиенте
Функция ЗависимыеРеквизиты(Реквизит)

	РеквизитыФормы = Новый Массив;
	РеквизитыОбъекта = Новый Массив;

	Если Реквизит = "РаспределятьНаСтатьи" Тогда

		Если Не Объект.РаспределятьНаСтатьи Тогда
			РеквизитыОбъекта.Добавить("ДоляСтоимостиНаОВЗ");
		КонецЕсли;

		РеквизитыОбъекта.Добавить("Списание");
		РеквизитыОбъекта.Добавить("ДоляСтоимостиНаСтатьи");

	КонецЕсли;

	Возврат Новый Структура("РеквизитыФормы, РеквизитыОбъекта", РеквизитыФормы, РеквизитыОбъекта);

КонецФункции

#КонецОбласти
#Область Прочее

&НаСервереБезКонтекста
Функция НедоступныеЭлементыПоФО(Период)

	ПартионныйУчетВерсии22 = РасчетСебестоимостиПовтИсп.ПартионныйУчетВерсии22(Период);

	НедоступныеЭлементы = Новый СписокЗначений;

	Если Не ПартионныйУчетВерсии22 Тогда
		НедоступныеЭлементы.Добавить("ГруппаОставитьВНЗП");
	КонецЕсли;

	Возврат НедоступныеЭлементы;

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьДолиСтоимости(Форма)

	Объект = Форма.Объект;

	Объект.ДоляСтоимостиНаСтатьи = Объект.Списание.Итог("ДоляСтоимости");

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

&НаСервере
Процедура ОпределитьВидимостьИСуммуРасходовПоСтатье()

	Запрос = Новый Запрос("
						  |ВЫБРАТЬ ПЕРВЫЕ 1
						  |	*
						  |ИЗ
						  |	РегистрНакопления.ДвиженияНоменклатураДоходыРасходы.Обороты(
						  |			&ДатаНачала,
						  |			&ДатаОкончания,
						  |			,
						  |			АналитикаРасходов = &Аналитика) КАК Движения");

	Запрос.УстановитьПараметр("Аналитика", Объект.АналитикаРасходов);
	Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(Объект.Дата));
	Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(Объект.Дата));

	УстановитьПривилегированныйРежим(Истина);

	ЕстьОборотыПоСтатье = Не Запрос.Выполнить().Пустой();
	Если Не ЕстьОборотыПоСтатье Тогда
		Элементы.ГруппаСуммы.Видимость = Истина;
		Элементы.ГруппаБезСумм.Видимость = Ложь;
	Иначе
		Элементы.ГруппаСуммы.Видимость = Ложь;
		Элементы.ГруппаБезСумм.Видимость = Истина;
	КонецЕсли;

	Если ЕстьОборотыПоСтатье Тогда
		Возврат;
	КонецЕсли;

	ПоддерживаемыеВариантыРаспределения = Новый Массив;
	ПоддерживаемыеВариантыРаспределения.Добавить(
		Перечисления.ВариантыРаспределенияРасходов.НаОбъектыВозникновенияЗатрат);
	ПоддерживаемыеВариантыРаспределения.Добавить(Перечисления.ВариантыРаспределенияРасходов.НаНаправленияДеятельности);

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

	Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Объект.Дата));
	Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Объект.Дата));
	Запрос.УстановитьПараметр("ГраницаКонецПериода", Новый Граница(КонецМесяца(Объект.Дата), ВидГраницы.Включая));
	Запрос.УстановитьПараметр("МассивОрганизаций", Объект.Организация);
	Запрос.УстановитьПараметр("СписокПодразделений", Объект.Подразделение);
	Запрос.УстановитьПараметр("ПоВсемОрганизациям", Ложь);
	Запрос.УстановитьПараметр("ПоВсемПодразделениям", Ложь);
	//Запрос.УстановитьПараметр("Статья", Объект.СтатьяРасходов);
	Запрос.УстановитьПараметр("Аналитика", Объект.АналитикаРасходов);
	Запрос.УстановитьПараметр("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
	Запрос.УстановитьПараметр("ВариантыРаспределенияРасходов", ПоддерживаемыеВариантыРаспределения);

	Выборка = Запрос.Выполнить().Выбрать();

	ШаблонПредставления = НСтр("ru = '%1 (%2)'");
	ВалютаУпр = Константы.ВалютаУправленческогоУчета.Получить();
	ВалютаРегл = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);

	Если Выборка.Следующий() Тогда
		Сумма = Выборка.Сумма;
		СуммаРегл = Выборка.СуммаРегл;
		ВременнаяРазница = Выборка.ВременнаяРазница;
	КонецЕсли;

	Элементы.Сумма.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		ШаблонПредставления, Сумма, ВалютаУпр);
	Элементы.СуммаРегл.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		ШаблонПредставления, СуммаРегл, ВалютаРегл);
	Элементы.СуммаВР.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		ШаблонПредставления, ВременнаяРазница, ВалютаРегл);

	ПрименяетсяПБУ18 = Ложь;
	//++ Локализация

	//++ НЕ УТ
	ПрименяетсяПБУ18 = УчетнаяПолитика.ПоддержкаПБУ18(Объект.Организация, Объект.Дата);
	//-- НЕ УТ

	//-- Локализация
	Элементы.ГруппаРегл.Видимость = (Не СуммаРегл = 0);
	Элементы.ГруппаВР.Видимость = (ПрименяетсяПБУ18 И Не ВременнаяРазница = 0);

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

//-- Устарело_Производство21

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

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

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