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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
	
	
	Возврат;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВыходныеИзделияЦенаПриИзменении(Элемент)
	
	ТекущаяСтрока = Элементы.ВыходныеИзделия.ТекущиеДанные;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработчикиКомандВыходныеИзделия

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработчикиКомандМатериалыИРаботы

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МатериалыИРаботыДополнитьПоСпецификации(Команда)
	
	// СтандартныеПодсистемы.ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ПроизводствоБезЗаказа.Форма.ФормаДокумента.Команда.МатериалыИРаботыДополнитьПоСпецификации");
	// Конец СтандартныеПодсистемы.ЗамерПроизводительности
	
	ДополнитьПоСпецификацииНаСервере("МатериалыИРаботы");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТрудозатратыДополнитьПоСпецификации(Команда)
	
	// СтандартныеПодсистемы.ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ПроизводствоБезЗаказа.Форма.ФормаДокумента.Команда.ТрудозатратыДополнитьПоСпецификации");
	// Конец СтандартныеПодсистемы.ЗамерПроизводительности
	
	ДополнитьПоСпецификацииНаСервере("Трудозатраты");
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтображатьВнутреннююПереработку(Команда)
	
	
	Возврат;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

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

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

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

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

	#Область ЕдиницыИзмерения

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

	#Область Характеристики

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

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

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

	#Область ТрудозатратыБригада

	// Установка отметки незаполненного поля Бригада
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();

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

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

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

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


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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'В подразделение'"));

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

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформлениеПодразделениеРасходов(ИмяТЧ, ИмяПоля)

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойстваСворачиваемойГруппы(ЭлементГруппа, КартинкаГруппы, ГруппаСвернута)

	ЭлементГруппа.Видимость = НЕ ГруппаСвернута;
	
	Если ГруппаСвернута Тогда
		КартинкаГруппы.Картинка = БиблиотекаКартинок.СтрелкаВправо;
	Иначе
		КартинкаГруппы.Картинка = БиблиотекаКартинок.СтрелкаВниз;
	КонецЕсли; 

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

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

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

	Если ИмяТЧ = "ВыходныеИзделия" Тогда
		ИмяПоляПолучатель = "ВыходныеИзделияПолучатель";
	Иначе
		ИмяПоляПолучатель = "ПобочныеИзделияПолучатель";
	КонецЕсли;

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ОписаниеГруппыЗатрат(СтруктураПоиска)

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

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

// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

//++ Локализация
&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗаданияИС()
	
	СоответствиеТребованиямГИСМТКлиент.ПроверитьВыполнениеЗадания(ЭтотОбъект);
	
КонецПроцедуры
//-- Локализация


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ЗначениеРеквизитаОбъекта(Объект, ИмяРеквизита)
	
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект, ИмяРеквизита);
	
КонецФункции

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

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

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

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