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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗакладкаУслугиПоПереработке

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Продукция

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

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

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

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

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

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

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

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

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

#Область ВозвратныеОтходы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Подборы

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


&НаСервере
Процедура ПерезаполнитьПоЗаказуПереработчика(ИдентификаторыСтрок)
	
	ПоляГруппировкиЗатрат = "НомерГруппыЗатрат";
	
	// 1. Получение списка обрабатываемых группировок затрат.
	ЗначенияГруппировок = Объект.Продукция.Выгрузить(Новый Массив, ПоляГруппировкиЗатрат);
	Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
		ЗаполнитьЗначенияСвойств(ЗначенияГруппировок.Добавить(), Объект.Продукция.НайтиПоИдентификатору(ИдентификаторСтроки));
	КонецЦикла;
	
	ЗначенияГруппировок.Свернуть(ПоляГруппировкиЗатрат);
	ЗначенияГруппировок.Индексы.Добавить(ПоляГруппировкиЗатрат);
	
	// 2. Подготовка списка выбранных строк продукции.
	ВыбранныеСтрокиПродукции = Объект.Продукция.Выгрузить(Новый Массив, "КодСтроки,Количество");
	
	Для Каждого ТекущаяСтрока Из Объект.Продукция Цикл
		ОтборСтрок = Новый Структура(ПоляГруппировкиЗатрат, ТекущаяСтрока.НомерГруппыЗатрат);
		Если ЗначенияГруппировок.НайтиСтроки(ОтборСтрок).Количество() > 0 Тогда
			ЗаполнитьЗначенияСвойств(ВыбранныеСтрокиПродукции.Добавить(), ТекущаяСтрока);
		КонецЕсли;
	КонецЦикла;
	
	ТекстТабличныеЧасти = Документы.ЗаказПереработчику.ТабличныеЧастиДляОформленияОтчетаПереработчика();
	
	ТекстТоварыКОформлению =
		"ВЫБРАТЬ
		|	ВыбранныеСтроки.КодСтроки  КАК КодСтроки,
		|	ВыбранныеСтроки.Количество КАК КоличествоОстаток
		|ПОМЕСТИТЬ ТоварыКОформлению
		|ИЗ
		|	&ВыбранныеСтрокиПродукции КАК ВыбранныеСтроки
		|ИНДЕКСИРОВАТЬ ПО
		|	КодСтроки";
	
	// 3. Расчет норматива для заполнения сырья по данным заказа и поступившим товарам.
	ТекстНормативы =
		"ВЫБРАТЬ
		|	ГруппировкаЗатрат.НомерГруппыЗатрат     КАК НомерГруппыЗатрат,
		|	МАКСИМУМ(ГруппировкаЗатрат.Коэффициент) КАК Коэффициент
		|ПОМЕСТИТЬ Нормативы
		|ИЗ(
		|	ВЫБРАТЬ
		|		ПродукцияЗаказа.Номенклатура                                          КАК Номенклатура,
		|		ПродукцияЗаказа.Характеристика                                        КАК Характеристика,
		|		ПродукцияЗаказа.НомерГруппыЗатрат                                     КАК НомерГруппыЗатрат,
		|		СУММА(Остатки.КоличествоОстаток) / СУММА(ПродукцияЗаказа.Количество)  КАК Коэффициент
		|	ИЗ
		|		&ПродукцияЗаказа КАК ПродукцияЗаказа
		|			
		|			ЛЕВОЕ СОЕДИНЕНИЕ ТоварыКОформлению КАК Остатки
		|			ПО ПродукцияЗаказа.КодСтроки = Остатки.КодСтроки
		|	ГДЕ
		|		НЕ Остатки.КодСтроки ЕСТЬ NULL
		|	СГРУППИРОВАТЬ ПО
		|		ПродукцияЗаказа.НомерГруппыЗатрат,
		|		ПродукцияЗаказа.Номенклатура,
		|		ПродукцияЗаказа.Характеристика) КАК ГруппировкаЗатрат
		|СГРУППИРОВАТЬ ПО
		|	ГруппировкаЗатрат.НомерГруппыЗатрат
		|ИНДЕКСИРОВАТЬ ПО
		|	ГруппировкаЗатрат.НомерГруппыЗатрат";
	
	// 4. Заполнение возвратных отходов по данным заказа и нормативам.
	ТекстВозвратныеОтходы =
		"ВЫБРАТЬ
		|	МИНИМУМ(ВозвратныеОтходыЗаказа.НомерСтроки)                                                КАК НомерСтроки,
		|	ВозвратныеОтходыЗаказа.НомерГруппыЗатрат                                                   КАК НомерГруппыЗатрат,
		|	ВозвратныеОтходыЗаказа.КодСтроки                                                           КодСтроки,
		|	ВозвратныеОтходыЗаказа.Номенклатура                                                        КАК Номенклатура,
		|	ВозвратныеОтходыЗаказа.Характеристика                                                      КАК Характеристика,
		|	ВозвратныеОтходыЗаказа.Назначение                                                          КАК Назначение,
		|	ВозвратныеОтходыЗаказа.Получатель                                                          КАК Получатель,
		|	ВозвратныеОтходыЗаказа.СписатьНаРасходы                                                    КАК СписатьНаРасходы,
		|	ВозвратныеОтходыЗаказа.СтатьяРасходов                                                      КАК СтатьяРасходов,
		|	ВозвратныеОтходыЗаказа.АналитикаРасходов                                                   КАК АналитикаРасходов,
		|	ВозвратныеОтходыЗаказа.АналитикаАктивовПассивов                                            КАК АналитикаАктивовПассивов,
		|	ВозвратныеОтходыЗаказа.Упаковка                                                            КАК Упаковка,
		|	ВозвратныеОтходыЗаказа.СтатьяКалькуляции                                                   КАК СтатьяКалькуляции,
		|	ВозвратныеОтходыЗаказа.ВидЦены                                                             КАК ВидЦены,
		|	ВозвратныеОтходыЗаказа.Цена                                                                КАК Цена,
		|	СУММА(ВозвратныеОтходыЗаказа.Цена
		|		* ВозвратныеОтходыЗаказа.Количество * Нормативы.Коэффициент / ЕСТЬNULL(&Коэффициент, 1)) КАК Сумма,
		|	СУММА(ВозвратныеОтходыЗаказа.Количество * Нормативы.Коэффициент)                             КАК Количество,
		|	СУММА(ВозвратныеОтходыЗаказа.Количество * Нормативы.Коэффициент / ЕСТЬNULL(&Коэффициент, 1)) КАК КоличествоУпаковок
		|ИЗ
		|	&ВозвратныеОтходыЗаказа КАК ВозвратныеОтходыЗаказа
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ Нормативы КАК Нормативы
		|		ПО Нормативы.НомерГруппыЗатрат = ВозвратныеОтходыЗаказа.НомерГруппыЗатрат
		|ГДЕ
		|	НЕ Нормативы.НомерГруппыЗатрат ЕСТЬ NULL
		|СГРУППИРОВАТЬ ПО
		|	ВозвратныеОтходыЗаказа.НомерГруппыЗатрат,
		|	ВозвратныеОтходыЗаказа.КодСтроки,
		|	ВозвратныеОтходыЗаказа.Номенклатура,
		|	ВозвратныеОтходыЗаказа.Характеристика,
		|	ВозвратныеОтходыЗаказа.Назначение,
		|	ВозвратныеОтходыЗаказа.Получатель,
		|	ВозвратныеОтходыЗаказа.СписатьНаРасходы,
		|	ВозвратныеОтходыЗаказа.СтатьяРасходов,
		|	ВозвратныеОтходыЗаказа.АналитикаРасходов,
		|	ВозвратныеОтходыЗаказа.АналитикаАктивовПассивов,
		|	ВозвратныеОтходыЗаказа.Упаковка,
		|	ВозвратныеОтходыЗаказа.СтатьяКалькуляции,
		|	ВозвратныеОтходыЗаказа.ВидЦены,
		|	ВозвратныеОтходыЗаказа.Цена
		|УПОРЯДОЧИТЬ ПО
		|	НомерСтроки";
	
	// 5. Заполнение сырья по данным заказа и нормативам.
	ТекстМатериалы =
		"ВЫБРАТЬ
		|	МИНИМУМ(МатериалыЗаказа.НомерСтроки)                                                  КАК НомерСтроки,
		|	МатериалыЗаказа.НомерГруппыЗатрат                                                     КАК НомерГруппыЗатрат,
		|	МатериалыЗаказа.Номенклатура                                                          КАК Номенклатура,
		|	МатериалыЗаказа.Характеристика                                                        КАК Характеристика,
		|	МатериалыЗаказа.Назначение                                                            КАК Назначение,
		|	МатериалыЗаказа.Упаковка                                                              КАК Упаковка,
		|	МатериалыЗаказа.СтатьяКалькуляции                                                     КАК СтатьяКалькуляции,
		|	СУММА(МатериалыЗаказа.Количество * Нормативы.Коэффициент)                             КАК Количество,
		|	СУММА(МатериалыЗаказа.Количество * Нормативы.Коэффициент / ЕСТЬNULL(&Коэффициент, 1)) КАК КоличествоУпаковок
		|ИЗ
		|	&МатериалыЗаказа КАК МатериалыЗаказа
		|		
		|		ЛЕВОЕ СОЕДИНЕНИЕ Нормативы КАК Нормативы
		|		ПО Нормативы.НомерГруппыЗатрат = МатериалыЗаказа.НомерГруппыЗатрат
		|ГДЕ
		|	НЕ Нормативы.НомерГруппыЗатрат ЕСТЬ NULL
		|СГРУППИРОВАТЬ ПО
		|	МатериалыЗаказа.НомерГруппыЗатрат,
		|	МатериалыЗаказа.Номенклатура,
		|	МатериалыЗаказа.Характеристика,
		|	МатериалыЗаказа.Назначение,
		|	МатериалыЗаказа.Упаковка,
		|	МатериалыЗаказа.СтатьяКалькуляции
		|УПОРЯДОЧИТЬ ПО
		|	НомерСтроки";
	
	// 6. Заполнение услуг по данным заказа и нормативам.
	ТекстУслуги =
		"ВЫБРАТЬ
		|	УслугиЗаказа.НомерСтроки											КАК НомерСтроки,
		|	УслугиЗаказа.Номенклатура										КАК Номенклатура,
		|	УслугиЗаказа.Характеристика										КАК Характеристика,
		|	УслугиЗаказа.Спецификация										КАК Спецификация,
		|	УслугиЗаказа.Сумма * Нормативы.Коэффициент	КАК Сумма,
		|	УслугиЗаказа.СтавкаНДС												КАК СтавкаНДС,
		|	УслугиЗаказа.СтатьяКалькуляции								КАК СтатьяКалькуляции,
		|	УслугиЗаказа.НомерГруппыЗатрат							КАК НомерГруппыЗатрат,
		|	0																							КАК СуммаНДС,
		|	0																							КАК СуммаСНДС,
		|	0																							КАК СуммаВзаиморасчетов,
		|	0																							КАК СуммаНДСВзаиморасчетов
		|ИЗ
		|	&УслугиЗаказа КАК УслугиЗаказа
		|	
		|	ЛЕВОЕ СОЕДИНЕНИЕ Нормативы КАК Нормативы
		|	ПО Нормативы.НомерГруппыЗатрат = УслугиЗаказа.НомерГруппыЗатрат
		|
		|ГДЕ
		|	НЕ Нормативы.НомерГруппыЗатрат ЕСТЬ NULL
		|УПОРЯДОЧИТЬ ПО
		|	НомерСтроки";
	
	// 6. Получение данных ИБ.
	ТекстМатериалы = СтрЗаменить(ТекстМатериалы, "&МатериалыЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.Материалы));
	ТекстВозвратныеОтходы = СтрЗаменить(ТекстВозвратныеОтходы, "&ВозвратныеОтходыЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.ВозвратныеОтходы));
	ТекстНормативы = СтрЗаменить(ТекстНормативы, "&ПродукцияЗаказа", СтрШаблон("(%1)", ТекстТабличныеЧасти.Продукция));
	ТекстУслуги    = СтрЗаменить(ТекстУслуги,    "&УслугиЗаказа",    СтрШаблон("(%1)", ТекстТабличныеЧасти.Услуги));
	
	ТекстКоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки("%1.Упаковка", "%1.Номенклатура");
	ТекстВозвратныеОтходы = СтрЗаменить(ТекстВозвратныеОтходы, "&Коэффициент", СтрШаблон(ТекстКоэффициентУпаковки, "ВозвратныеОтходыЗаказа"));
	ТекстМатериалы = СтрЗаменить(ТекстМатериалы,               "&Коэффициент", СтрШаблон(ТекстКоэффициентУпаковки, "МатериалыЗаказа"));
	
	ТекстыЗапроса = Новый Массив(5);
	ТекстыЗапроса[0] = ТекстТоварыКОформлению;
	ТекстыЗапроса[1] = ТекстНормативы;
	ТекстыЗапроса[2] = ТекстВозвратныеОтходы;
	ТекстыЗапроса[3] = ТекстМатериалы;
	ТекстыЗапроса[4] = ТекстУслуги;
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("Заказ", Объект.ЗаказПереработчику);
	Запрос.УстановитьПараметр("ВыбранныеСтрокиПродукции", ВыбранныеСтрокиПродукции);
	
	Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
	
	Если ОбщегоНазначенияУТ.РежимОтладки() Тогда
		Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	КонецЕсли;
	ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет();
	
	ВозвратныеОтходы = ПакетРезультатовЗапроса[2].Выгрузить();
	Материалы        = ПакетРезультатовЗапроса[3].Выгрузить();
	Услуги           = ПакетРезультатовЗапроса[4].Выгрузить();
	
	// 7. Обработка таблицы услуги.
	СтруктураПересчетаСуммы = Новый Структура("ЦенаВключаетНДС", Ложь);
	СтруктураДействий = Новый Структура;
	СтруктураДействий.Вставить("ПересчитатьСуммуНДС",  СтруктураПересчетаСуммы);
	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
	СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
	ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Услуги, СтруктураДействий, Неопределено);
	
	// 8. Перенос данных в объект.
	УдалитьСтрокиПоКлючу(Объект.ВозвратныеОтходы, ПоляГруппировкиЗатрат, ЗначенияГруппировок);
	УдалитьСтрокиПоКлючу(Объект.Материалы,        ПоляГруппировкиЗатрат, ЗначенияГруппировок);
	УдалитьСтрокиПоКлючу(Объект.Услуги,           ПоляГруппировкиЗатрат, ЗначенияГруппировок);
	
	ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.ВозвратныеОтходы, ВозвратныеОтходы);
	ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Материалы,        Материалы);
	ОбщегоНазначенияУТ.ДобавитьСтрокиВТаблицу(Объект.Услуги,           Услуги);
	
	// 9. Заполнение служебных реквизитов.
	ЗаполнитьСлужебныеРеквизиты();
	ЗаполнитьНормативыМатериаловНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПодборПоЗаказамПереработчикамЗавершениеНаСервере(ЗаказСсылка)

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

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

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

&НаСервере
Процедура ПодобратьИзПоступленийЗавершениеНаСервере(ДанныеЗаполнения)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти

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

	#Область Продукция

	УстановитьУсловноеОформлениеСписаниеНаРасходы("Продукция");
	УстановитьУсловноеОформлениеПолучатель("Объект", "Продукция");
	
	#КонецОбласти

	#Область ВозвратныеОтходы

	УстановитьУсловноеОформлениеСписаниеНаРасходы("ВозвратныеОтходы");
	УстановитьУсловноеОформлениеПолучатель("Объект", "ВозвратныеОтходы");

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	// Видимость элементов
	#Область Видимость
	Элементы.ПродукцияСпецификация.Видимость = (
		Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции);
	
	Элементы.ПродукцияГруппаЗатрат.Видимость = (
		Объект.ПоЗаказам
		И (Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
			//++ Устарело_Производство21
			ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
			//-- Устарело_Производство21
			ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства));
	
	Элементы.МатериалыНорматив.Видимость = (
		Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
		//++ Устарело_Производство21
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
		//-- Устарело_Производство21
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства);
	
	Элементы.МатериалыОтклонение.Видимость = (
		Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоПродукции
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям
		//++ Устарело_Производство21
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
		//-- Устарело_Производство21
		ИЛИ Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЭтапамПроизводства);
		
	Элементы.ВозвратныеОтходыГруппаЗатрат.Видимость = (Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки);
	Элементы.МатериалыГруппаЗатрат.Видимость = (Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки);
	Элементы.УслугиГруппаЗатрат.Видимость = (Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки);
	Элементы.ПродукцияПерезаполнить.Видимость = Объект.ПоЗаказам ИЛИ Объект.ГруппировкаЗатрат <> Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки;
	
	Элементы.СпособРаспределенияЗатратНаВыходныеИзделия.Видимость =
		Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.БезГруппировки
		//++ Устарело_Производство21
		Или Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоЗаказамНаПроизводство
		//-- Устарело_Производство21
		Или Объект.ГруппировкаЗатрат = Перечисления.ГруппировкиЗатратВЗаказеПереработчику.ПоСпецификациям;
	
	#КонецОбласти

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

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

&НаСервере
Процедура НастроитьФормуПоФлагуПоЗаказам()

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьНормативыМатериаловНаСервере(Знач ДанныеЗаказа = Неопределено)

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

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

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

&НаКлиенте
Процедура УдалитьВыбранныеУслуги()

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

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

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


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

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

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

&НаСервере
Процедура УстановитьДоступностьЦенВозвратныхОтходов()

	ДоступноУказаниеЦенВозвратныхОтходов = Документы.ОтчетПереработчика.ДоступноУказаниеЦенВозвратныхОтходов(Объект);

	Элементы.ВозвратныеОтходыЦена.Видимость = ДоступноУказаниеЦенВозвратныхОтходов;
	Элементы.ВозвратныеОтходыСумма.Видимость = ДоступноУказаниеЦенВозвратныхОтходов;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОткрытьФормуВводаДолиСтоимости(ТекущиеДанные)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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