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

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

&НаКлиенте
Перем КэшированныеЗначения;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СтатусУказанияСерийНажатие(Элемент, СтандартнаяОбработка)

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИспользоватьОтборПоГруппамПродукцииПриИзменении(Элемент)
	
	УстановитьВидимостьПоОтборуПоГруппамПродукции();
	Модифицированность = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УказатьСерииВШапке(Команда)

	ОткрытьПодборСерий();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла);
	
	УстановитьУсловноеОформлениеПодразделениеПолучатель();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбновитьИтоги(ОбновитьКоличествоРаспределено = Истина)
	
	КРаспределениюМакс = УчетОстаток - Объект.КоличествоФакт;
	КРаспределениюМин = УчетОстаток - ЛимитВОбработке - Объект.КоличествоФакт;
	
	Если ЛимитВОбработке = 0 Тогда
		Состояние = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Учетный остаток %1 %2. Лимит в обработке не установлен. К распределению %3 %4.'"),
				УчетОстаток,
				ЕдиницаИзмерения,
				КРаспределениюМакс,
				ЕдиницаИзмерения);
	Иначе
		Состояние = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Учетный остаток %1 %2. Лимит в обработке %3 %4. К распределению от %5 до %6 %7.'"),
				УчетОстаток,
				ЕдиницаИзмерения,
				ЛимитВОбработке,
				ЕдиницаИзмерения,
				КРаспределениюМин,
				КРаспределениюМакс,
				ЕдиницаИзмерения);
	КонецЕсли;
	
	ИтогРаспределеноНаВыпускиБезРаспоряжений = ВыпускиБезРаспоряжения.Итог("Количество");
	ИтогСписаноНаРасходы = Объект.ПрочиеРасходы.Итог("Количество");
	
	Если ОбновитьКоличествоРаспределено Тогда
		
		Количество = Объект.КоличествоКРаспределениюПоПравилу
						+ ИтогРаспределеноНаВыпускиБезРаспоряжений 
						+ ИтогСписаноНаРасходы;
						
		Объект.Количество = ?(Количество < 0, -Количество, Количество);
		
		Если НоменклатураКлиент.НеобходимоОбновитьСтатусСерийВШапке(Объект,КэшированныеЗначения,ПараметрыУказанияСерий) Тогда
			ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(КэшированныеЗначения);
			НоменклатураКлиент.ОбновитьКешированныеЗначенияШапкиДляУчетаСерий(Объект,КэшированныеЗначения,ПараметрыУказанияСерий);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

#Область Автозаполнение

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

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

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

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

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

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

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

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

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

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

#Область Серии

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

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

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

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

&НаСервере
Функция ПараметрыФормыУказанияСерий()
	
	Возврат НоменклатураСервер.ПараметрыФормыУказанияСерий(Объект, ПараметрыУказанияСерий, 0, ЭтаФорма);
	
КонецФункции

&НаСервере
Процедура НастроитьЭлементыСерий()

	Элементы.УказатьСерииВШапке.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	Элементы.СтатусУказанияСерий.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
 	Элементы.Серия.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;

	УстановитьДоступностьСерииВШапке();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьДоступностьСерииВШапке()
	
	Элементы.УказатьСерииВШапке.Доступность = Объект.СтатусУказанияСерий <> 0 И Объект.СтатусУказанияСерий <> 14; 
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(КэшированныеЗначения)

	НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриИзмененииТовараВШапке(Объект, 
				ПараметрыУказанияСерий, КэшированныеЗначения);
	УстановитьДоступностьСерииВШапке();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьНастройкиПоУмолчаниюИзПравилаРаспределения(Правило)
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	М.Материал
	|ИЗ
	|	Справочник.ПравилаРаспределенияРасходов.ОтборПоМатериалам КАК М
	|ГДЕ
	|	М.Ссылка = &Ссылка
	|;
	|
	|///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Р.ВидРабот
	|ИЗ
	|	Справочник.ПравилаРаспределенияРасходов.ОтборПоВидамРабот КАК Р
	|ГДЕ
	|	Р.Ссылка = &Ссылка
	|;
	|
	|///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	П.ГруппаПродукции
	|ИЗ
	|	Справочник.ПравилаРаспределенияРасходов.ОтборПоГруппамПродукции КАК П
	|ГДЕ
	|	П.Ссылка = &Ссылка
	|;
	|
	|///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	С.СтатьяКалькуляции
	|ИЗ
	|	Справочник.ПравилаРаспределенияРасходов КАК С
	|ГДЕ
	|	С.Ссылка = &Ссылка
	|;
	|
	|///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	С.БазаРаспределения
	|ИЗ
	|	Справочник.ПравилаРаспределенияРасходов КАК С
	|ГДЕ
	|	С.Ссылка = &Ссылка
	|;
	|
	|///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////");
	
	Запрос.УстановитьПараметр("Ссылка", Правило);
	Результат = Запрос.ВыполнитьПакет();
	ОтборПоМатериалам.ЗагрузитьЗначения(Результат[0].Выгрузить().ВыгрузитьКолонку("Материал"));
	ОтборПоВидамРабот.ЗагрузитьЗначения(Результат[1].Выгрузить().ВыгрузитьКолонку("ВидРабот"));
	ОтборПоГруппамПродукции.ЗагрузитьЗначения(Результат[2].Выгрузить().ВыгрузитьКолонку("ГруппаПродукции"));
	Объект.СтатьяКалькуляции = ?(НЕ Результат[3].Пустой(),
									   Результат[3].Выгрузить()[0].СтатьяКалькуляции,
									   Справочники.СтатьиКалькуляции.ПустаяСсылка());
	ИспользоватьОтборПоГруппамПродукции = (ОтборПоГруппамПродукции.Количество() > 0);
	Объект.БазаРаспределения = ?(НЕ Результат[4].Пустой(),
									   Результат[4].Выгрузить()[0].БазаРаспределения,
									   Перечисления.ТипыБазыРаспределенияРасходов.ПустаяСсылка());
									   
	УстановитьТекстНадписиБазаРаспределения();
	УстановитьТекстИВидимостьОтбораБазыРаспределения();
	УстановитьВидимостьПоОтборуПоГруппамПродукции();
	УстановитьТекстНадписиОтбораПоГруппамПродукции();
	
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Результат = КодВозвратаДиалога.Да Тогда
		Наличие = ВходящийОстаток - Объект.Количество;
		Объект.Распределить = ВходящийОстаток - Объект.Количество - Наличие;
	КонецЕсли;
	
КонецПроцедуры

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

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