Распределение расходов / Форма рабочее место / Модуль формы

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

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

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

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

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

				//++ Локализация
				И Состояние <> Строки[0].СостояниеНал
				//-- Локализация

				//-- НЕ УТ
				Тогда
				ОбновитьДанныеФормы();
			КонецЕсли;
			
		Иначе
			
			СостояниеУпр = Неопределено;
			Если Параметр.Свойство("СостояниеУпр") Тогда
				СостояниеУпр = Параметр.СостояниеУпр;
			КонецЕсли;
			
			СостояниеРегл = Неопределено;
			Если Параметр.Свойство("СостояниеРегл") Тогда
				СостояниеРегл = Параметр.СостояниеРегл;
			КонецЕсли;
			
			//++ НЕ УТ

			//++ Локализация
			СостояниеНал = Неопределено;
			Если Параметр.Свойство("СостояниеНал") Тогда
				СостояниеНал = Параметр.СостояниеНал;
			КонецЕсли;
			//-- Локализация

			//-- НЕ УТ
			
			Если ЗначениеЗаполнено(Состояние) 
				И Состояние <> СостояниеУпр
				И Состояние <> СостояниеРегл
				//++ НЕ УТ

				//++ Локализация
				И Состояние <> СостояниеНал
				//-- Локализация

				//-- НЕ УТ
				Тогда
				ОбновитьДанныеФормы();
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;

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

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

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

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

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

&НаКлиенте
Процедура МесяцСтрокаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработчикЗакрытия = Новый ОписаниеОповещения("МесяцСтрокаНачалоВыбораЗавершение", ЭтотОбъект);
	ПараметрыФормы 	   = Новый Структура("Значение, РежимВыбораПериода", Период, "МЕСЯЦ");
	
	ОткрытьФорму("ОбщаяФорма.ВыборПериода",
		ПараметрыФормы, 
		ЭтотОбъект, 
		УникальныйИдентификатор,
		,
		, 
		ОбработчикЗакрытия,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

		ОбновитьДанныеФормы();
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура МесяцСтрокаОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	ОбновитьДанныеФормы();
	УстановитьВидимость(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ОбновитьДанныеФормы();
	УстановитьВидимость(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура СостояниеПриИзменении(Элемент)
	
	ОбновитьДанныеФормы();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Обновить(Команда)
	
	ОбновитьДанныеФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьиРасходовОткрыть(Команда)
	
	ОткрытьФормуДокумента();
	
КонецПроцедуры

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

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

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

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

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

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

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьиРасходовСостояниеУпр.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьиРасходовСостояниеРегл.Имя);
	//++ НЕ УТ

	//++ Локализация
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтатьиРасходовСостояниеНал.Имя);
	//-- Локализация

	//-- НЕ УТ
	
	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

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

	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтатьиРасходов.СостояниеРегл");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Перечисления.СостоянияРаспределенияРасходов.ОшибкаРаспределения;
	
	//++ НЕ УТ

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

	//-- НЕ УТ
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.SpecialTextColor);

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

#Область ЗаполнениеФормы

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

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

	ОтключитьОбработчикОжидания("ПроверитьАктивностьФоновогоЗаданияОбновленияФормы");
	
	ПартионныйУчет22 = ИспользуетсяПартионныйУчет22(Период);
	
	СтатьиРасходов.Очистить();
	ДобавитьФоновоеЗадание("ОбновитьГиперссылкуКОформлению", ТекущиеФоновыеЗадания);
	ДобавитьФоновоеЗадание("ЗаполнитьСтатьиРасходов", ТекущиеФоновыеЗадания);
	
	ЗапуститьФоновыеЗадания();

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

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

#Область ФоновыеЗадания

#Область ОбщиеМеханизмы

&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьФоновоеЗадание(ИмяЗадания, ТекущиеФоновыеЗадания, ОчиститьОчередь = Ложь)

	Если ОчиститьОчередь Тогда
		
		ОтменитьВыполнениеТекущихЗаданий(ТекущиеФоновыеЗадания);
		ТекущиеФоновыеЗадания.Очистить();
		
	КонецЕсли;
	
	ДанныеЗадания = ТекущиеФоновыеЗадания.Добавить();
	ДанныеЗадания.Имя = ИмяЗадания;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапуститьФоновоеЗадание(ИмяЗадания)
	
	ДобавитьФоновоеЗадание(ИмяЗадания, ТекущиеФоновыеЗадания, Истина);
	
	ЗапуститьФоновыеЗадания();

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

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

	ВсеЗаданияВыполнены = ЗапуститьФоновыеЗаданияНаСервере(ПодготовитьКлиентскиеПараметрыЗаданий());
	
	Если ВсеЗаданияВыполнены Тогда
		ОбработатьЗавершениеЗаданийНаКлиенте();
	Иначе
		ПроверитьАктивностьФоновогоЗаданияОбновленияФормы();
	КонецЕсли;

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

// Запустить фоновые задания на сервере.
// 
// Параметры:
//  ПараметрыЗаданий - Соответствие - параметры заданий
// 
// Возвращаемое значение:
//  Булево - Запустить фоновые задания на сервере
&НаСервере
Функция ЗапуститьФоновыеЗаданияНаСервере(Знач ПараметрыЗаданий)
	
	ВсеЗаданияВыполнены = Истина;
	
	ОписанияЗаданий = ОписанияФоновыхЗаданий();
	
	Для Каждого ЗаданиеВОчереди Из ТекущиеФоновыеЗадания Цикл
		
		Если ЗаданиеВОчереди.Выполняется
			Или ЗаданиеВОчереди.Выполнено Тогда
			Продолжить;
		КонецЕсли;
		
		ОписаниеЗадания = ОписанияЗаданий.Получить(ЗаданиеВОчереди.Имя);
		Если ОписаниеЗадания = Неопределено Тогда
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
								НСтр("ru = 'Неизвестное задание ""%1""'"),
								ЗаданиеВОчереди.Имя);
		КонецЕсли;
							
		ПараметрыЗадания = ПараметрыЗаданий.Получить(ЗаданиеВОчереди.Имя);
		Если ПараметрыЗадания = Неопределено Тогда
			
			ПодготовитьСерверныеПараметрыЗаданий(ПараметрыЗаданий);
			ПараметрыЗадания = ПараметрыЗаданий.Получить(ЗаданиеВОчереди.Имя);
			
		КонецЕсли;
		
		РезультатЗапуска = ВыполнитьВФоне(ОписаниеЗадания, ПараметрыЗадания);
		
		ЗаданиеВОчереди.Идентификатор  = РезультатЗапуска.ИдентификаторЗадания;
		ЗаданиеВОчереди.АдресХранилища = РезультатЗапуска.АдресРезультата;
		ЗаданиеВОчереди.РезультатЗапуска = РезультатЗапуска;
		
		Если РезультатЗапуска.Статус = "Выполняется" Тогда
			ЗаданиеВОчереди.Выполняется = Истина;
		ИначеЕсли РезультатЗапуска.Статус = "Выполнено" Тогда
			ЗаданиеВОчереди.Выполнено = Истина;
		КонецЕсли;
		
		Если Не ЗаданиеВОчереди.Выполнено Тогда
			ВсеЗаданияВыполнены = Ложь;
		КонецЕсли;
		
	КонецЦикла;
	
	НастроитьЭлементыВЗависимостиОтНаличияФоновыхЗаданий(ЭтаФорма);
	
	Возврат ВсеЗаданияВыполнены;

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

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

// Отменить выполнение текущих служебны фоновых заданий формы.
// 
// Параметры:
//  ТекущиеФоновыеЗадания см. Документ.РаспределениеПрочихЗатрат.Форма.ФормаРабочееМесто.ТекущиеФоновыеЗадания
&НаСервереБезКонтекста
Процедура ОтменитьВыполнениеТекущихЗаданий(Знач ТекущиеФоновыеЗадания)
	
	Для Каждого Задание Из ТекущиеФоновыеЗадания Цикл
		ДлительныеОперации.ОтменитьВыполнениеЗадания(Задание.Идентификатор);
	КонецЦикла;
	
КонецПроцедуры

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

#Область КонтрольВыполненияЗаданий

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

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

#Область ОписанияЗаданий

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

	Возврат ОписаниеЗаданий;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ХарактеристикиФоновогоЗадания(Представление = "", Метод = "", ВыводитьБублик = Истина, БлокироватьФорму = Ложь)
	
	Характеристики = Новый Структура;
	Характеристики.Вставить("Представление", Представление);
	Характеристики.Вставить("Метод", Метод);
	Характеристики.Вставить("ВыводитьБублик", ВыводитьБублик);
	Характеристики.Вставить("БлокироватьФорму", БлокироватьФорму);
	
	Возврат Характеристики;
	
КонецФункции

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

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

#Область ОбработкаРезультатовФоновыхЗаданий

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

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

&НаКлиенте
Процедура ОбработатьРезультатФормированияДокументов(АдресХранилища)
	
	Результат = ПолучитьИзВременногоХранилища(АдресХранилища);
	
	Для Каждого РезультатПоОрганизации Из Результат Цикл
		
		ДетализацияРезультата = РезультатПоОрганизации.Значение;
		
		Если ДетализацияРезультата.ОписаниеОшибок.Количество() > 0 Тогда
			Для Каждого ОписаниеОшибки Из ДетализацияРезультата.ОписаниеОшибок Цикл
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки.ТекстОшибки);
			КонецЦикла;
		КонецЕсли;
		
		Если ДетализацияРезультата.СформированоДокументов  = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		ШаблонСформированоДокументов = НСтр("ru='По организации %1 сформировано %2 документов распределения.'");
		ПоказатьОповещениеПользователя(,
			,
			СтрШаблон(ШаблонСформированоДокументов,
				РезультатПоОрганизации.Ключ,
				Формат(ДетализацияРезультата.СформированоДокументов, "ЧГ=0")),
			БиблиотекаКартинок.Информация32);
		
		Для Каждого НовыеДанные Из ДетализацияРезультата.ОбновленныеДанные Цикл
			
			СтрокаКОбновлению = СтатьиРасходов.НайтиПоИдентификатору(НовыеДанные.ИдСтроки);
			Если СтрокаКОбновлению = Неопределено 
				Или НЕ СтрокаКОбновлению.СтатьяРасходов = НовыеДанные.СтатьяРасходов
				Или НЕ СтрокаКОбновлению.АналитикаРасходов = НовыеДанные.АналитикаРасходов
				Или НЕ СтрокаКОбновлению.Организация = НовыеДанные.Организация
				Или НЕ СтрокаКОбновлению.Подразделение = НовыеДанные.Подразделение
				Или НЕ СтрокаКОбновлению.НаправлениеДеятельности = НовыеДанные.НаправлениеДеятельности Тогда
				Продолжить;
			КонецЕсли;
			
			ЗаполнитьЗначенияСвойств(СтрокаКОбновлению, НовыеДанные, , 
				"СтатьяРасходов, АналитикаРасходов, Организация, Подразделение, НаправлениеДеятельности");
			
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры	

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

&НаСервере
Процедура ОбработатьРезультатФормированияКОформлениюЗавершение(АдресХранилища)
	
	КОформлению = ПолучитьИзВременногоХранилища(АдресХранилища);
	
	Если Не ЗначениеЗаполнено(КОформлению) Тогда
		ТекстИдетОбновлениеДанных = НСтр("ru = 'К оформлению: нет'");
		КОформлению = Новый ФорматированнаяСтрока(ТекстИдетОбновлениеДанных);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

#Область Прочее

&НаСервере
Функция ОписаниеОперацийИТиповДокументов()
	
	ТЗХозОперацииИТипыДокументов = ХозяйственныеОперацииИДокументы.Выгрузить();
	ТЗХозОперацииИТипыДокументов.Очистить();

	#Область РаспределениеРасходовБудущихПериодов
	
	СтрокаРБП							= ТЗХозОперацииИТипыДокументов.Добавить();
	Строка								= СтрокаРБП;
	Строка.ХозяйственнаяОперация		= Перечисления.ХозяйственныеОперации.РаспределениеРБП;
	Строка.КлючНазначенияИспользования	= "";
	Строка.ЗаголовокРабочегоМеста		= НСтр("ru = 'Распределение расходов будущих периодов'");
	Строка.ТипДокумента					= Тип("ДокументСсылка.РаспределениеРасходовБудущихПериодов");
	Строка.ПолноеИмяДокумента			= Метаданные.Документы.РаспределениеРасходовБудущихПериодов.ПолноеИмя();
	Строка.ИспользуютсяСтатусы			= Ложь;
	Строка.ДобавитьКнопкуСоздать		= Ложь;
	Строка.Порядок						= 10;
	Строка.Отбор 						= Истина;
	Строка.МенеджерРасчетаГиперссылкиКОформлению = "Документ.РаспределениеРасходовБудущихПериодов";
		
	#КонецОбласти
	
	Возврат ТЗХозОперацииИТипыДокументов;
	
КонецФункции

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

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

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

	// Отображение элементов для работы с объектами возникновения затрат
	ИзОВЗ = Форма.РежимРаспределенияРасходов = "ИзОВЗ";
	Элементы.СтатьиРасходов.ОтборСтрок = Новый ФиксированнаяСтруктура("ЭтоОВЗ", ИзОВЗ);
	Элементы.СтатьяРасходов.Видимость = НЕ ИзОВЗ;
	Элементы.НаправлениеДеятельности.Видимость = НЕ ИзОВЗ;
	Элементы.ГруппаСтатей.Видимость = НЕ ИзОВЗ;
	Элементы.АналитикаРасходов.Заголовок = 
		?(ИзОВЗ, НСтр("ru = 'Объект возникновения затрат'"), НСтр("ru = 'Аналитика расхода'"));
	
КонецПроцедуры

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

&НаКлиенте
Функция ОпределитьПараметрыОткрытияФормыДокумента(ТекущиеДанные, ПараметрыОткрытия)
	
	Если Не ПараметрыОткрытия = Неопределено Тогда
		Возврат ПараметрыОткрытия;
	КонецЕсли;
	
	//++ НЕ УТ

	//++ Локализация
	ИспользоватьРеглУчет = ОпределитьИспользованиеРеглУчета();
	//-- Локализация

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

		//++ Локализация
		И (ТекущиеДанные.ДокументУпр = ТекущиеДанные.ДокументНал
			ИЛИ НЕ ИспользоватьРеглУчет)
		//-- Локализация

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

			//++ Локализация
			И (ТекущиеДанные.СостояниеНал = ПредопределенноеЗначение("Перечисление.СостоянияРаспределенияРасходов.НеТребуется")
				ИЛИ НЕ ИспользоватьРеглУчет)
			//-- Локализация

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

			//++ Локализация
			И (ТекущиеДанные.СостояниеНал = ПредопределенноеЗначение("Перечисление.СостоянияРаспределенияРасходов.НеТребуется")
				ИЛИ НЕ ИспользоватьРеглУчет)
			//-- Локализация

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

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

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

		//++ Локализация
		И (Не ЗначениеЗаполнено(ТекущиеДанные.ДокументНал)
			ИЛИ НЕ ИспользоватьРеглУчет)
		//-- Локализация

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

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

			//-- НЕ УТ
			И НЕ ИспользоватьНДД 
				ИЛИ (ПараметрыФормы.НастройкаРаспределения.ВариантРаспределенияНДД = ПараметрыФормы.НастройкаРаспределения.ВариантРаспределенияУпр
					И ПараметрыФормы.НастройкаРаспределения.ПравилоРаспределенияНДД = ПараметрыФормы.НастройкаРаспределения.ПравилоРаспределенияУпр)
			Или ПараметрыФормы.НастройкаРаспределения.ВариантРаспределенияРегл = ПараметрыФормы.НастройкаРаспределения.ВариантРаспределенияУпр
				//++ НЕ УТ

				//++ Локализация
				И (ПараметрыФормы.НастройкаРаспределения.ВариантРаспределенияНал = ПараметрыФормы.НастройкаРаспределения.ВариантРаспределенияУпр
					ИЛИ НЕ ИспользоватьРеглУчет)
				//-- Локализация

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

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

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

//++ НЕ УТ

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

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

	Возврат Перечисления.ВариантыРаспределенияРасходов.ВариантИспользуетПравилоРаспределенияНУ(ВариантРаспределения);
	
КонецФункции
//-- Локализация

//-- НЕ УТ

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

	//++ Локализация
	ИначеЕсли ПараметрыОткрытия.РазрезУчета = ПредопределенноеЗначение("Перечисление.РазрезыУчета.Налоговый") Тогда
		Документ = ТекущиеДанные.ДокументНал;
	//-- Локализация

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

		//++ Локализация
		ПараметрыОткрытия.НастройкаРаспределения.Вставить("НалоговыйУчет", ПараметрыОткрытия.РазрезУчета = Неопределено
			Или ПараметрыОткрытия.РазрезУчета = ПредопределенноеЗначение("Перечисление.РазрезыУчета.Налоговый"));
		//-- Локализация

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

//++ НЕ УТ

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

// Формирует массив с данными по строке
//	Параметры:
//		ИдСтроки - Число - идентификатор строки, по которой сработало событие Выбор
//	Возвращаемое значение:
//		Массив - содержит структуру с данными строк.
//
&НаКлиенте
Функция ПолучитьПараметрыРасходов(ИдСтроки = Неопределено)
	
	ПараметрыРасходов = Новый Массив;
	Для Каждого ТекСтрока Из Элементы.СтатьиРасходов.ВыделенныеСтроки Цикл
		
		Если Не ИдСтроки = Неопределено И Не ТекСтрока = ИдСтроки Тогда
			Продолжить;
		КонецЕсли;
		
		ДанныеЗаполнения = Новый Структура;
		ДанныеСтроки = Элементы.СтатьиРасходов.ДанныеСтроки(ТекСтрока);
		ДанныеЗаполнения.Вставить("Дата",                    КонецМесяца(Период));
		ДанныеЗаполнения.Вставить("ДокументУпр",			 ДанныеСтроки.ДокументУпр);
		ДанныеЗаполнения.Вставить("ДокументРегл",			 ДанныеСтроки.ДокументРегл);
		//++ НЕ УТ

		//++ Локализация
		ДанныеЗаполнения.Вставить("ДокументНал",			 ДанныеСтроки.ДокументНал);
		//-- Локализация

		//-- НЕ УТ
		ДанныеЗаполнения.Вставить("ДокументНДД",			 ДанныеСтроки.ДокументНДД);
		
		ДанныеЗаполнения.Вставить("СостояниеУпр",			 ДанныеСтроки.СостояниеУпр);
		ДанныеЗаполнения.Вставить("СостояниеРегл",			 ДанныеСтроки.СостояниеРегл);
		//++ НЕ УТ

		//++ Локализация
		ДанныеЗаполнения.Вставить("СостояниеНал",			 ДанныеСтроки.СостояниеНал);
		//-- Локализация

		//-- НЕ УТ
		ДанныеЗаполнения.Вставить("СостояниеНДД",			 ДанныеСтроки.СостояниеНДД);
		
		ДанныеЗаполнения.Вставить("ИДСтроки",                ТекСтрока);
		ДанныеЗаполнения.Вставить("СтатьяРасходов",          ДанныеСтроки.СтатьяРасходов);
		ДанныеЗаполнения.Вставить("АналитикаРасходов",       ДанныеСтроки.АналитикаРасходов);
		ДанныеЗаполнения.Вставить("Организация",             ДанныеСтроки.Организация);
		ДанныеЗаполнения.Вставить("Подразделение",           ДанныеСтроки.Подразделение);
		ДанныеЗаполнения.Вставить("НаправлениеДеятельности", ДанныеСтроки.НаправлениеДеятельности);
		
		ПараметрыРасходов.Добавить(ДанныеЗаполнения);
				
	КонецЦикла;
	
	Возврат ПараметрыРасходов;
	
КонецФункции

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

&НаСервереБезКонтекста
Функция ИспользуетсяПартионныйУчет22(Период)
	Возврат РасчетСебестоимостиПовтИсп.ПартионныйУчетВерсии22(Период);
КонецФункции
	
//++ НЕ УТ

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

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

//-- НЕ УТ

// Определить использование НДД.
// 
// Возвращаемое значение:
//  Булево - Истина, если ФО УчетПоНДД включена.
&НаСервереБезКонтекста
Функция ОпределитьИспользованиеНДД()
	Возврат РасчетСебестоимостиЛокализация.ПолучитьФункциональнуюОпциюУчетПоНДД();
КонецФункции

&НаСервере
Процедура УправлениеЭлементамиФормы()
	
	//++ НЕ УТ

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

	//-- НЕ УТ
	
	Если ОпределитьИспользованиеНДД() Тогда
		Элементы.СтатьиРасходовСостояниеНДД.Видимость = Истина;
	КонецЕсли;
	
КонецПроцедуры
	
#КонецОбласти

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

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