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

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

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

&НаКлиенте
Перем ТекущиеДанныеИдентификатор; //используется для передачи текущей строки в обработчик ожидания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СпецификацияПриИзмененииФрагмент()
	
	СохраненнаяСпецификация = Объект.Спецификация;
	
	СпецификацияПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НазначениеПриИзмененииФрагмент()
	
	ПриИзмененииНазначенияНаСервере();
	СохраненноеНазначение = Объект.Назначение;
	
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВыходныеИзделияПослеУдаления(Элемент)
	ВсегоИзделий = ВыходныеИзделия.Количество() + ВозвратныеОтходы.Количество();
	ВсегоПродукции = ВыходныеИзделия.Количество();
	УстановитьПредставлениеДокумента();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВозвратныеОтходыПослеУдаления(Элемент)
	ВсегоИзделий = ВыходныеИзделия.Количество() + ВозвратныеОтходы.Количество();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МатериалыИУслугиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	ОбработкаПодбораОбособленныхМатериалов(ВыбранноеЗначение);
КонецПроцедуры

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

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

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


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


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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УказатьСерии(Команда)
	
	ОткрытьПодборСерий();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьПродукциюВсемиВыпусками(Команда)
	ЗаполнитьПродукцию(Ложь);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПродукциюБезСпецификации(Команда)
	ЗаполнитьПродукцию(Ложь);
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьВозвратныеОтходыВсемиВыпусками(Команда)
	
	ЗаполнитьВозвратныеОтходы(Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

// СтандартныеПодсистемы.Свойства

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

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

// Конец СтандартныеПодсистемы.Свойства

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

&НаСервере
Процедура СпецификацияПриИзмененииНаСервере()
	
	УправлениеВидимостьюИДоступностью();
	УстановитьПредставлениеДокумента();
	
КонецПроцедуры

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

&НаСервере
Процедура КоличествоИзделийВТЧПриИзменении(ИмяТЧ, Идентификатор)
	
	ОбновитьТаблицуОбъекта(ИмяТЧ, Идентификатор);
	УстановитьПредставлениеДокумента();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Заполнение

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

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

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

&НаСервере
Процедура ЗаполнитьОбособленныеМатериалыПоСтроке(ПоляДляЗаполнения = Неопределено, ПодборОстатков = Истина)
	
	ЗаполнитьОбособленныеМатериалы(ПоляДляЗаполнения, ПодборОстатков);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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