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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПартииУказаныВручнуюПриИзменении(Элемент)
	
	УточнитьИзменениеРеквизита("ПартииУказаныВручную")
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЭтапыВРучнуюПослеУдаления(Элемент)
	
	Возврат; // В КА обработчик пустой
	
КонецПроцедуры

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыВыпускиБезРаспоряжения

&НаКлиенте
Процедура ВыпускиБезРаспоряженияПриИзменении(Элемент)
	
	СуммаДолейСтоимостиВТЧВыпускиБезРаспоряжений = ВыпускиБезРаспоряжения.Итог("ДоляСтоимости");
	
КонецПроцедуры

&НаКлиенте
Процедура ВыпускиБезРаспоряженияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Отказ = Истина;
	//++ Устарело_Производство21
	ОткрытьПодборТоваровПоЗаказу("ВыпускиБезРаспоряжения");
	//-- Устарело_Производство21
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура РазвернутьВыпускиБезРаспоряжения(Команда)
	
	РазвернутьВыпускиБезРаспоряжения = Не РазвернутьВыпускиБезРаспоряжения;
	Элементы.ВыпускиБезРаспоряженияРазвернутьПоРаспоряжениям.Пометка = РазвернутьВыпускиБезРаспоряжения;
	СвернутьРазвернутьТЧ(РазвернутьВыпускиБезРаспоряжения);
	
КонецПроцедуры

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

#Область БСП

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

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

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

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

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

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

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

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

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

#Область Подбор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область БСП

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//++ НЕ УТ

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

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

//-- НЕ УТ

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

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

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
	
	Элементы.НаЛюбыеНаправленияДеятельности.Видимость = ЗначениеЗаполнено(Объект.НаправлениеДеятельности);

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

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

&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыТЧ()
	
	ЗатратыСервер.ЗаполнитьХарактеристикиИзделийПоПартииПроизводства(Объект.ПартииПроизводства);
	
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре("ВыпускиБезРаспоряжения");
	СвернутьРазвернутьТЧ(РазвернутьВыпускиБезРаспоряжения);
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьЗаголовокФормы()
	
	ПредставлениеОбъекта = Метаданные.Документы.РаспределениеПрочихЗатрат.Синоним;
	УточнениеПредставленияОбъекта = НСтр("ru = 'между партиями производства'");
	
	Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
		
		ШаблонЗаголовка = НСтр("ru = '%1 %2 (создание)'");
		Заголовок = СтрШаблон(ШаблонЗаголовка, ПредставлениеОбъекта, УточнениеПредставленияОбъекта);
		
	Иначе
		
		ШаблонЗаголовка = НСтр("ru = '%1 %2 №%3 от %4'");
		Заголовок = СтрШаблон(ШаблонЗаголовка, ПредставлениеОбъекта, 
								УточнениеПредставленияОбъекта,
								Объект.Номер,
								Формат(Объект.Дата, "ДЛФ=DT"));
		
	КонецЕсли;
	
КонецПроцедуры

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

#Область Отборы

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

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

КонецПроцедуры
//-- Локализация

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

&НаСервере
Процедура ВосстановитьНастройкиКомпоновщика(ИмяРеквизитаСНастройками, ДокОбъект = Неопределено)
	
	МодификаторНастроек = СтрШаблон("%1Изменены", ИмяРеквизитаСНастройками);
	Если Не Объект[МодификаторНастроек] Тогда
		Возврат;
	КонецЕсли;
	
	Если ДокОбъект = Неопределено Тогда
		ДокОбъект = РеквизитФормыВЗначение("Объект");
	КонецЕсли;

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

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

&НаКлиенте
Функция ПараметрыОткрытияНастройкиОтборов()
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("ИмяСхемы", "");
	ПараметрыОткрытия.Вставить("ИмяНастроекКомпоновщика", "");
	ПараметрыОткрытия.Вставить("НеНастраиватьПараметры", Истина);
	
	Возврат ПараметрыОткрытия;
	
КонецФункции

// Открывает форму настройки отборов.
// Параметры:
//	ПараметрыОткрытия - Структура - описание структуры в ПараметрыОткрытияНастройкиОтборов
&НаКлиенте
Процедура ОткрытьФормуНастройкиОтборов(ПараметрыОткрытия, ЗаголовокФормы = "")

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РаботаСТипамиБаз

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура СвернутьРазвернутьТЧ(Развернуть = Ложь)
	
	Если Не Развернуть Тогда
		
		КолонкиГруппировок = "Номенклатура, Характеристика, СтатьяКалькуляции, Серия, Упаковка, Назначение";
		КолонкиСуммирования = "КоличествоУпаковок, Количество, ДоляСтоимости";
		
		ТаблицаЗначений = Объект.ВыпускиБезРаспоряжения.Выгрузить(,КолонкиГруппировок + ", " + КолонкиСуммирования); // ТаблицаЗначений
		ТаблицаЗначений.Свернуть(КолонкиГруппировок, КолонкиСуммирования);
		
		ВыпускиБезРаспоряжения.Загрузить(ТаблицаЗначений);
		
		СтруктураОтбора = Новый Структура(КолонкиГруппировок);
		ШаблонПредставления = НСтр("ru = 'Всего документов: %1'");
		
		Для Каждого Строка Из ВыпускиБезРаспоряжения Цикл
			ЗаполнитьЗначенияСвойств(СтруктураОтбора, Строка);
			НайденныеСтроки = Объект.ВыпускиБезРаспоряжения.НайтиСтроки(СтруктураОтбора);
			Строка.ПредставлениеРаспоряжений = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				ШаблонПредставления,
				НайденныеСтроки.Количество());
			
		КонецЦикла;
	Иначе
		ВыпускиБезРаспоряжения.Загрузить(Объект.ВыпускиБезРаспоряжения.Выгрузить());
	КонецЕсли;
	
	ЗаполнитьСлужебныеРеквизитыПоНоменклатуре("ВыпускиБезРаспоряжения");
	СуммаДолейСтоимостиВТЧВыпускиБезРаспоряжений = ВыпускиБезРаспоряжения.Итог("ДоляСтоимости");
	
	НомерСтроки = 1;
	Для Каждого Строка Из ВыпускиБезРаспоряжения Цикл
		Строка.НомерСтроки = НомерСтроки;
		НомерСтроки = НомерСтроки + 1;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура СохранитьДанныеСтроки(ДанныеСтроки)
	
	СохраненныеДанные = Новый Структура("Номенклатура, Характеристика, СтатьяКалькуляции");
	ЗаполнитьЗначенияСвойств(СохраненныеДанные, ДанныеСтроки);
	
КонецПроцедуры

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

	ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
	ТабЧасть = ДополнительныеПараметры.ТабЧасть;
	СтатьяКалькуляцииДляЗаполнения = Результат;

	Если НЕ ЗначениеЗаполнено(СтатьяКалькуляцииДляЗаполнения) Тогда
		Возврат;
	Конецесли;

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

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

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

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

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

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

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

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

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



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

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

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