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

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

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

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

&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		ДобавитьДействияЗаполнитьЦену(ЭтотОбъект, ИмяТЧ, СтруктураДействий);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	
	Возврат;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РаботаСКонтрагентами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов

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

//Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	#Область СтандартноеОформлениеТабличныеЧасти

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура СнятьНакладнаяПоЗаказуНаСервере()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбщиеСобытияТаблиц

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

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

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

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

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

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

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

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

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

	Если Не РезультатЗакрытия = Неопределено Тогда

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

		ТоварыСерияПересчитатьЦены(, ДополнительныеПараметры.ПараметрыУказанияСерий.ИмяТЧТовары);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

	Если РезультатЗакрытия = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Модифицированность = Истина;
	ПодборТоваровИзЗаказаЗавершениеНаСервере(РезультатЗакрытия);

	РассчитатьИтогиДокумента(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Процедура ПроверитьНаличиеКорректировокИСчетовФактур(Ссылка, ЕстьКорректировки, ЕстьСчетаФактуры)
	
	ЗакупкиСервер.ПроверитьНаличиеКорректировокИСчетовФактур(Ссылка, Ссылка, ЕстьКорректировки, ЕстьСчетаФактуры);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьПризнакЕстьКорректировки()
	
	ЕстьСчетФактуры = Ложь;
	ПроверитьНаличиеКорректировокИСчетовФактур(Объект.Ссылка, ЕстьКорректировки, ЕстьСчетФактуры);
	
КонецПроцедуры

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

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

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

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

		ДанныеТЧ.Вставить(
			ИмяТЧ,
			ПроизводствоСервер.ПоместитьВоВременноеХранилищеДанныеСтрок(ЭтотОбъект, "Объект", ИмяТЧ, Ложь, ДанныеПолей));
	
	КонецЦикла;
	
	Возврат ДанныеТЧ;
	
КонецФункции

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

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

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