Заказ переработчику (2.4) / Форма документа / Модуль формы

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

&НаКлиенте
Перем ФормаМодифицирована; // используется для отработки события изменения модифицированности формы

&НаКлиенте
Перем ОтветПередЗаписью;

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

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

&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	
	ПриИзмененииКонтрагентаСервер();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
	ЗаполнитьПодчиненныеСвойстваПоСтатистике("Менеджер");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

&НаКлиенте
Процедура МатериалыГиперссылкаСостояниеОбеспеченияНажатие(Элемент)
	
	ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыГиперссылкаСостояниеОбеспеченияОтгружаетсяНажатие(Элемент)
	
	ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыГиперссылкаСостояниеОбеспеченияПроблемаНажатие(Элемент)
	
	ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
	
КонецПроцедуры

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

&НаКлиенте
Процедура МатериалыЭтаповГиперссылкаСостояниеОбеспеченияОтгружаетсяНажатие(Элемент)
	
	
	Возврат; // в УТ и КА обработчик пустой
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПродукцияГруппаЗатратНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ВыбратьГруппуЗатрат("Продукция");
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПродукцияГруппаЗатратОчистка(Элемент, СтандартнаяОбработка)
	
	ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
	ТекущиеДанные.НомерГруппыЗатрат = 0;

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

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

	ТекущиеДанные = Элементы.Продукция.ТекущиеДанные;
	ПриИзмененииПолучателя(ТекущиеДанные);

	ТребуетсяУточнитьДанныеРаспоряжения = Истина;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ДобавитьДействиеПроверитьЗаполнитьСклад("Материалы", ЭтаФорма, СтруктураДействий);
		
	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МатериалыГруппаЗатратНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ВыбратьГруппуЗатрат("Материалы");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыГруппаЗатратОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекущиеДанные = Элементы.Материалы.ТекущиеДанные;
	ОткрытьРаспоряжениеГруппы(ТекущиеДанные);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

	СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
		ЭтаФорма.ИмяФормы, "Услуги"));

	ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область КомандыТЧ_Продукция

&НаКлиенте
Процедура ПродукцияЗаполнитьДатуПоступления(Команда)
	
	Если Элементы.Продукция.ВыделенныеСтроки.Количество() > 0 Тогда
		ЗаполнитьДатуПоступления("Продукция", Элементы.Продукция.ВыделенныеСтроки);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ПродукцияОбщееПодобратьТовары(Команда)
	
	ПодобратьТовар("Продукция");
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПродукцияОбщееПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
	
	ОбработатьШтрихкоды(ДанныхШтрихкода, "Продукция");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область КомандыТЧ_ВозвратныеОтходы

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВозвратныеОтходыОбщееПодобратьТовары(Команда)
	
	ПодобратьТовар("ВозвратныеОтходы");
	
КонецПроцедуры

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

&НаКлиенте
Процедура ВозвратныеОтходыОбщееПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
	
	ОбработатьШтрихкоды(ДанныхШтрихкода, "ВозвратныеОтходы");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область КомандыТЧ_Материалы

&НаКлиенте
Процедура МатериалыЗаполнитьДатуОтгрузки(Команда)
	
	ЗаполнитьДатуОтгрузки("Материалы");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МатериалыОбщееПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
	
	ОбработатьШтрихкоды(ДанныхШтрихкода, "Материалы");
	
КонецПроцедуры

&НаКлиенте
Процедура ДополнитьМногооборотнойТарой(Команда)

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Материалы_Заполнить_ЗаполнитьГруппуЗатрат(Команда)
	
	ВыбратьГруппуЗатрат("Материалы", Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура Материалы_Заполнить_ЗаполнитьСтатьюКалькуляции(Команда)
	
	ЗаполнитьСтатьюКалькуляции("Материалы", ПредопределенноеЗначение("Перечисление.ТипыЗатрат.Материальные"));
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыВключитьОбособленноеОбеспечение(Команда)
	
	ОбеспечениеУстановитьДействие("ФЛАГ_ОБОСОБЛЕННО");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыВыключитьОбособленноеОбеспечение(Команда)
	
	ОбеспечениеУстановитьДействие("ФЛАГ_НЕОБОСОБЛЕННО");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыКОбеспечению(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_КОБЕСПЕЧЕНИЮ");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыРезервироватьПоМереПоступления(Команда)
	
	ОбеспечениеУстановитьДействие("ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬПОМЕРЕПОСТУПЛЕНИЯ");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыНеОбеспечивать(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_НЕОБЕСПЕЧИВАТЬ");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыОтгрузить(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_ОТГРУЗИТЬ");
	
КонецПроцедуры

&НаКлиенте
Процедура МатериалыРезервировать(Команда)
	
	ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬ");
	
КонецПроцедуры


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

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

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

#Область КомандыТЧ_Услуги

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

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

#Область КомандыТЧ_РедактированиеЭтаповПродукция

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

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

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

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

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

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

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

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

#Область КомандыТЧ_РедактированиеЭтаповОтходы

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

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

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

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

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

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

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

#Область КомандыТЧ_РедактированиеЭтаповОбеспечениеМатериаламиИРаботами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура РедактированиеЭтаповРезервировать(Команда)
	
	
	Возврат;
	
КонецПроцедуры

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

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

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

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

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

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

#Область ПодключаемыеКоманды

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

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

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

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

&НаКлиенте
Процедура ЗачетОплаты(Команда)
	ВзаиморасчетыКлиент.ЗачетОплаты(ЭтаФорма, Элементы.ЗачетОплатыФорма);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
		ЭтаФорма, 
		"РедактированиеЭтаповОбеспечениеМатериаламиИРаботамиХарактеристика",
		"РедактированиеЭтапов.ОбеспечениеМатериаламиИРаботами.ХарактеристикиИспользуются");

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
		ЭтаФорма, 
		"МатериалыХарактеристика",
		"Объект.Материалы.ХарактеристикиИспользуются");

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

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
		ЭтаФорма, 
		"ВозвратныеОтходыХарактеристика",
		"Объект.ВозвратныеОтходы.ХарактеристикиИспользуются");

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
		ЭтаФорма, 
		"УслугиХарактеристика",
		"Объект.Услуги.ХарактеристикиИспользуются");

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(
		ЭтаФорма,
		"Характеристика",
		"ХарактеристикиИспользуются");
		
	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(
		ЭтаФорма, 
		"МатериалыВидЦены", 
        "Объект.Материалы.ВидЦены");

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

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

	// Текст <продукция не выбрана> в поле ГруппаЗатрат
#Область ТекстПродукцияНеВыбрана
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<продукция не выбрана>'"));
	
	//
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<продукция не выбрана>'"));
	
	//
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<продукция не выбрана>'"));
#КонецОбласти

	// Только просмотр СуммыНДС, если СтавкаНДС = БезНДС или НДС0%
#Область УслугиСуммаНДС_ТолькоПросмотр
	
	УчетНДСУП.УстановитьУсловноеОформлениеСуммНДСПоСтавкеНДСЗакупки(ЭтаФорма, "УслугиСтавкаНДС", "УслугиСуммаНДС");
	
#КонецОбласти

	#Область ПродукцияСпецификация_ОтметкаНеЗаполненного
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция КоличествоУслуг(Количество, ГруппировкаЗатрат)
	
	Если ГруппировкаЗатрат = ПредопределенноеЗначение("Перечисление.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки") Тогда
		Возврат 0;
	Иначе
		Возврат Количество;
	КонецЕсли;
	
КонецФункции

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

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

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

#Область Ценообразование

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

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

#Область ПодборыИОбработкаПроверкиКоличества

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

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

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

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

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

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

#Область ШтрихкодыИТорговоеОборудование

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

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

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

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

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

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

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

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

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


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

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

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

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

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

#Область ДатыОтгрузки

&НаКлиенте
Процедура ЗаполнитьДатуОтгрузки(ИмяТЧ)

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

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

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

&НаСервере
Процедура ЗаполнитьДатуОтгрузкиСервер(ДатаОтгрузки, ИмяТЧ, МассивВыделенныхСтрок = Неопределено)

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

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

&НаСервере
Процедура НеОтгружатьЧастямиПриИзмененииСервер()

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

	УстановитьВидимостьЭлементовФормыДатОтгрузки();

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

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


#Область ДоступностьИВидимостьЭлементовНаФорме

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

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

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

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

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

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

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

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

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

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

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

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

#Область Доставка

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

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

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

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

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

#Область КонтрольНесогласованныхИзменений

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

#Область ГруппировкаЗатрат

&НаСервере
Процедура ЗаполнитьСписокВыбораГруппировкиЗатрат()

	ПараметрыИспользования = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПараметрыИспользования();
	
	//++ Устарело_Производство21
	ПараметрыИспользования.ПоЗаказамНаПроизводство = ПолучитьФункциональнуюОпцию("УправлениеПредприятием");

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

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

&НаСервере
Процедура ГруппировкаЗатратПриИзмененииНаСервере()

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

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

&НаСервере
Процедура ВыполнитьСменуГруппировкиЗатратСПродукцииНаСпецификации()

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

&НаСервере
Процедура НастроитьФормуПоСпособуГруппировкиЗатрат()

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

	Если Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки Тогда
		Элементы.ПродукцияГруппаЗатрат.Заголовок        = ЗаголовокГруппы;
		Элементы.ВозвратныеОтходыГруппаЗатрат.Заголовок = ЗаголовокГруппы;
		Элементы.МатериалыГруппаЗатрат.Заголовок        = ЗаголовокГруппы;
		Элементы.УслугиГруппаЗатрат.Заголовок           = ЗаголовокГруппы;
		
		Элементы.ПродукцияГруппаЗатрат.Подсказка        = ПодсказкаГруппыПродукция;
		Элементы.ВозвратныеОтходыГруппаЗатрат.Подсказка = ПодсказкаГруппыОтходы;
		Элементы.МатериалыГруппаЗатрат.Подсказка        = ПодсказкаГруппыМатериалы;
		Элементы.УслугиГруппаЗатрат.Подсказка           = ПодсказкаГруппыУслуги;
		
		Элементы.ВозвратныеОтходыЗаполнитьГруппуЗатрат.Заголовок = ЗаголовокКомандыЗаполнитьГруппуЗатрат;
		Элементы.МатериалыЗаполнитьГруппуЗатрат.Заголовок = ЗаголовокКомандыЗаполнитьГруппуЗатрат;
	КонецЕсли;
	
	#КонецОбласти

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

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

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

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

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

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

&НаКлиенте
Процедура ВыбратьГруппуЗатрат(ИмяТЧ, МножественныйВыборСтрок = Ложь)

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ИмяПоляГруппаЗатрат(Объект)

	Возврат ПереработкаНаСторонеКлиентСервер.ИмяПоляГруппаЗатратВЗаказеПереработчику(Объект);

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

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

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

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

#Область РаботаСБуферомОбмена

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

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

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

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

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


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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыПересчетаСуммыНДСВТЧ(Форма)
	
	СтруктураПересчетаСуммы = Новый Структура("ЦенаВключаетНДС", Ложь);
	
	Возврат СтруктураПересчетаСуммы;
	
КонецФункции

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

&НаСервере
Процедура ПродукцияНоменклатураПриИзмененииНаСервере(ИдентификаторСтроки, СтруктураДействий, КэшированныеЗначения)

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

	ПродукцияСтрокаЗаполнитьСпецификацию(ТекущаяСтрока);
	
КонецПроцедуры

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

&НаСервере
Процедура ВозвратныеОтходыНоменклатураПриИзмененииНаСервере(ИдентификаторСтроки, СтруктураДействий, КэшированныеЗначения)

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизитыМатериалы()
	
	Возврат Новый Структура("Отменено", "Сумма");
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизитыМатериалыСтрокой()
	
	Возврат "СуммаОтменено";
	
КонецФункции


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


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

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

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

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

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

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

	ТребуетсяЗаполнитьДанныеРаспоряжения = Истина;
	
	Возврат ЗаполненоСтрок;
	
КонецФункции

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПоместитьЭтапыОплатыВоВременноеХранилище(ИмяЭлемента)
	ВзаиморасчетыСервер.ПоместитьЭтапыОплатыВоВременноеХранилище(ЭтаФорма, ИмяЭлемента);
КонецПроцедуры

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

&НаСервере
Процедура ЗаполнитьДатуВТЧ(Знач ИмяТЧ, Знач ПолеДата, Знач НоваяДата)

	Если НоваяДата = '000101010000' Тогда
		Возврат;
	КонецЕсли;
	
	ТабличнаяЧасть = ТабличнаяЧастьПоИмени(ИмяТЧ, ЭтаФорма);
	Для каждого ДанныеСтроки Из ТабличнаяЧасть Цикл
		ДанныеСтроки[ПолеДата] = НоваяДата;
	КонецЦикла;

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВалютаПриИзмененииЗавершение(ПересчитатьСуммы)

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

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

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

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

&НаСервере
Процедура ПродукцияХарактеристикаПриИзмененииНаСервере(ИдентификаторСтроки)

	ТекущаяСтрока = Объект.Продукция.НайтиПоИдентификатору(ИдентификаторСтроки);

	ПродукцияСтрокаЗаполнитьСпецификацию(ТекущаяСтрока);

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

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

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

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

&НаКлиенте
Процедура ОткрытьРаспоряжениеГруппы(ТекущиеДанные)
	
	ИмяПоляГруппаЗатрат	= ИмяПоляГруппаЗатрат(Объект);

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьВозвратныеОтходыИМатериалыНаСервере(ВыделенныеСтроки)

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

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

&НаСервере
Процедура ЗаполнитьПоСпецификации(ВыделенныеСтроки)

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ТабличнаяЧастьПоИмени(ИмяТЧ, Форма)

	Если ИмяТЧ = "РедактированиеЭтаповОбеспечениеМатериаламиИРаботами" Тогда
		ТабличнаяЧасть = Форма.РедактированиеЭтапов.ОбеспечениеМатериаламиИРаботами;
	ИначеЕсли ИмяТЧ = "РедактированиеЭтаповВыходныеИзделия" Тогда
		ТабличнаяЧасть = Форма.РедактированиеЭтапов.ВыходныеИзделия;
	ИначеЕсли ИмяТЧ = "РедактированиеЭтаповПобочныеИзделия" Тогда
		ТабличнаяЧасть = Форма.РедактированиеЭтапов.ПобочныеИзделия;
	ИначеЕсли ИмяТЧ = "РедактированиеЭтаповЭтапы" Тогда
		ТабличнаяЧасть = Форма.РедактированиеЭтапов.Этапы;
	Иначе
		ТабличнаяЧасть = Форма.Объект[ИмяТЧ];
	КонецЕсли;

	Возврат ТабличнаяЧасть;
	
КонецФункции
 

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

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

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

&НаСервере
Процедура ДополнитьИнформациюПоДоставкеКонтактамиСервер()
	
	ДоставкаТоваров.ДополнитьИнформациюПоДоставкеКонтактами(Объект);
	
КонецПроцедуры

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

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

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

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

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

	Форма.КоличествоВыходныхИзделий = 
		Форма.Объект.Продукция.Количество() 
		+ Форма.Объект.ВозвратныеОтходы.Количество()
		;

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьСтатьюКалькуляции(ИмяТабличнойЧасти, ТипЗатрат)

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

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

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

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

&НаСервереБезКонтекста
Функция СуммаНДСТолькоПросмотр(СтавкаНДС)
	
	Возврат УчетНДСУП.НезначащаяСтавка(СтавкаНДС);
	
КонецФункции

&НаСервере
Процедура ВалютаПриИзмененииНаСервере()
	
	ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Валюта");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ПриИзмененииМодифицированностиФормы()
	
	Если ФормаМодифицирована <> Модифицированность Тогда
		
		ФормаМодифицирована = Модифицированность;
		НастроитьГиперссылкиСостояниеОбеспеченияКлиент();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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


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

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

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

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

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

#Область Инициализация

ОтветПередЗаписью = Ложь;

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

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