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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Основное

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Изделия

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

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

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

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

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

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

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

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

#Область Материалы

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

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

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


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

#Область Услуги

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЦенаВключаетНДСПриИзменении(Элемент)
	ЦенаВключаетНДСПриИзмененииНаСервере(КэшированныеЗначения);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ВыходныеИзделияПередУдалениемНаСервере()
	
	Для Каждого ТекИдентификатор Из Элементы.ВыходныеИзделия.ВыделенныеСтроки Цикл
		УдалитьГруппуЗатрат(ТекИдентификатор);
	КонецЦикла;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ВыходныеИзделияПослеУдаления(Элемент)
	ТаблицаПослеУдаления("ВыходныеИзделия");
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ВыходныеИзделияНоменклатураПриИзменении(Элемент)
	ТаблицаНоменклатураПриИзменении("ВыходныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ВыходныеИзделияХарактеристикаПриИзменении(Элемент)
	ТаблицаХарактеристикаПриИзменении("ВыходныеИзделия");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПобочныеИзделияПередНачаломИзменения(Элемент, Отказ)
	ТаблицаПередНачаломИзменения(Отказ);
КонецПроцедуры

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

&НаКлиенте
Процедура ПобочныеИзделияПриИзменении(Элемент)
	ТаблицаПриИзменении("ПобочныеИзделия");
КонецПроцедуры

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

&НаКлиенте
Процедура ПобочныеИзделияПослеУдаления(Элемент)
	ТаблицаПослеУдаления("ПобочныеИзделия");
КонецПроцедуры


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

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

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

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

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

&НаКлиенте
Процедура ПобочныеИзделияХарактеристикаПриИзменении(Элемент)
	ТаблицаХарактеристикаПриИзменении("ПобочныеИзделия");
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПобочныеИзделияЦенаПриИзменении(Элемент)
	ТаблицаЦенаПриИзменении("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияСуммаПриИзменении(Элемент)
	ТаблицаСуммаПриИзменении("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияОтмененоПриИзменении(Элемент)
	ТаблицаОтмененоПриИзменении("ПобочныеИзделия");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиПослеУдаления(Элемент)
	ТаблицаПослеУдаления("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиЦенаПриИзменении(Элемент)
	ТаблицаЦенаПриИзменении("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура УслугиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	ТаблицаВыбор("Услуги", Поле, СтандартнаяОбработка);
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура УслугиГруппаЗатратОткрытие(Элемент, СтандартнаяОбработка)
	ТаблицаГруппаЗатратОткрытие("Услуги", СтандартнаяОбработка);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Основное

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

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

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

#Область ВыходныеИзделия

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВыходныеИзделияПоискПоШтрихкоду(Команда)
	ТаблицаПоискПоШтрихкоду("ВыходныеИзделия");
КонецПроцедуры

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

#Область ПобочныеИзделия

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

&НаКлиенте
Процедура ПобочныеИзделияЗаполнитьТЧПоСпецификации(Команда)
	ТаблицаЗаполнитьТЧПоСпецификации("ПобочныеИзделия");
КонецПроцедуры

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

&НаКлиенте
Процедура ПобочныеИзделияЗаполнитьГруппуЗатрат(Команда)
	ТаблицаЗаполнитьГруппуЗатрат("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияЗаполнитьДатуПоступления(Команда)
	ТаблицаЗаполнитьДату("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияЗаполнитьПолучателя(Команда)
	ТаблицаЗаполнитьСкладПодразделение("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияЗаполнитьСтатьюКалькуляции(Команда)
	ТаблицаЗаполнитьСтатьюКалькуляции("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияЗаполнитьПричинуОтмены(Команда)
	ТаблицаЗаполнитьПричинуОтмены("ПобочныеИзделия");
КонецПроцедуры

&НаКлиенте
Процедура ПобочныеИзделияОтменитьВыделенныеСтроки(Команда)
	ТаблицаОтменитьВыделенныеСтроки("ПобочныеИзделия");
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПобочныеИзделияСкопироватьСтроки(Команда)
	ТаблицаСкопироватьСтроки("ПобочныеИзделия");
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПобочныеИзделияПоискПоШтрихкоду(Команда)
	ТаблицаПоискПоШтрихкоду("ПобочныеИзделия");
КонецПроцедуры

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

#Область ОбеспечениеМатериаламиИРаботами

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

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиЗаполнитьТЧПоСпецификации(Команда)
	ТаблицаЗаполнитьТЧПоСпецификации("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиЗаполнитьПричинуОтмены(Команда)
	ТаблицаЗаполнитьПричинуОтмены("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиОтменитьВыделенныеСтроки(Команда)
	ТаблицаОтменитьВыделенныеСтроки("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиОтменитьНеотработанныеСтроки(Команда)
	ТаблицаОтменитьНеобработанныеСтроки("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиСкрыватьОтмененныеСтроки(Команда)
	ТаблицаСкрыватьОтмененныеСтроки("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиСкопироватьСтроки(Команда)
	ТаблицаСкопироватьСтроки("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОбеспечениеМатериаламиИРаботамиПоискПоШтрихкоду(Команда)
	ТаблицаПоискПоШтрихкоду("ОбеспечениеМатериаламиИРаботами");
КонецПроцедуры

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

#Область Услуги

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

&НаКлиенте
Процедура УслугиЗаполнитьТЧПоСпецификации(Команда)
	ТаблицаЗаполнитьТЧПоСпецификации("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиЗаполнитьЦеныПоВидуЦеныПоставщика(Команда)

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

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

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

&НаКлиенте
Процедура УслугиЗаполнитьГруппуЗатрат(Команда)
	ТаблицаЗаполнитьГруппуЗатрат("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиЗаполнитьДатуВыполнения(Команда)
	ТаблицаЗаполнитьДату("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиЗаполнитьСтатьюКалькуляции(Команда)
	ТаблицаЗаполнитьСтатьюКалькуляции("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиЗаполнитьПричинуОтмены(Команда)
	ТаблицаЗаполнитьПричинуОтмены("Услуги");
КонецПроцедуры

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

&НаКлиенте
Процедура УслугиОтменитьВыделенныеСтроки(Команда)
	ТаблицаОтменитьВыделенныеСтроки("Услуги");
КонецПроцедуры

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

&НаКлиенте
Процедура УслугиСкопироватьСтроки(Команда)
	ТаблицаСкопироватьСтроки("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиВставитьСтроки(Команда)
	ТаблицаВставитьСтроки("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиРазбитьСтроку(Команда)
	ТаблицаРазбитьСтроку("Услуги");
КонецПроцедуры

&НаКлиенте
Процедура УслугиПоискПоШтрихкоду(Команда)
	ТаблицаПоискПоШтрихкоду("Услуги");
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ТаблицаЗаполнитьГруппуЗатрат(ИмяТЧ)
	ТаблицаГруппаЗатратНачалоВыбора(ИмяТЧ);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РаботаСФайлами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ИнтеграцияС1СДокументооборотом
#Область ИнтеграцияС1СДокументооборотом

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

#КонецОбласти
// Конец ИнтеграцияС1СДокументооборотом

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область НастройкаЭлементовФормы

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

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

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

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

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

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

&НаСервере
Процедура ОбновитьКартинкуГруппыСкладов(ТаблицаСкладов, НадписьНесколькоСкладов, КартинкаНесколькоСкладов)
	
	ВсегоСкладов = ТаблицаСкладов.Количество();
	СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(
		НадписьНесколькоСкладов,
		КартинкаНесколькоСкладов,
		ВсегоСкладов);
	
КонецПроцедуры

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

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

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

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

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


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

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

#Область СобытияФормы

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

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

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

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

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

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

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


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

#Область ЭлементыФормы

#Область Основное

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


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

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

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

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

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

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

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

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

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


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

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

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

#Область ВыходныеИзделия

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

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

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

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

#Область ОбеспечениеМатериаламиИРаботами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ГруппыЗатрат

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

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

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

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

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

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

#Область ВспомогательныеПроцедуры

#Область УчетНДС

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

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

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

#Область Взаиморасчеты

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

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

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

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

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

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

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

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

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

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

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

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

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

	Запрос.УстановитьПараметр("ДатаВходящегоДокумента", ДатаВходящегоДокумента);
	Запрос.УстановитьПараметр("Контрагент", Контрагент);
	Запрос.УстановитьПараметр("ТекущийЗаказ", ТекущийЗаказ);
	Запрос.УстановитьПараметр("НомерПоДаннымПартнера", НомерВходящегоДокумента);

	СписокЗаказовПоНомеру = Новый СписокЗначений;
	СписокЗаказовПоНомеру.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));

	Возврат СписокЗаказовПоНомеру;

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

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

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

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

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

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

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

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

#Область Основное

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

#Область СлужебныеРеквизиты

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

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

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

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

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

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


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

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

#Область СтруктураДействий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РеквизитыОбъекта

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

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

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

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

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

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

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

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

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

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

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

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


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

#Область Штрихкоды

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

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

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

#Область ВспомогательныеПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ДанныеГруппыЗатратПоНомеруГруппыЗатрат(ТекущийНомерГруппы)
	
	СтруктураОтбора = Новый Структура("НомерГруппыЗатрат", ТекущийНомерГруппы);
	Возврат ДанныеГруппыЗатрат(СтруктураОтбора);

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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