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

файл
//++ Устарело_Производство21
#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ТоварыПослеУдаленияНаСервере(НеобходимоОбновитьСтатусыСерий, КэшированныеЗначения);

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

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

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

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

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

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

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

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

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

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

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

	// Настройка счетов учета отражения операции.
	НастройкаСчетовУчетаКлиент.ПриНажатии(ЭтотОбъект, Поле, СтандартнаяОбработка);
	//-- НЕ УТ
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

	УсловноеОформление.Элементы.Очистить();
	
	// Стандартное оформление формы
	#Область СтандартноеОформление
	СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтаФорма);
	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);
	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, Ложь);
	НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);
	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);
	#КонецОбласти
	
	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПриИзмененииСкладаВТабличнойЧастиСервер()

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОповеститьОПроведенииДокумента(ПараметрыЗаписи)

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

	Оповестить("Запись_ВыпускПродукции", ПараметрыОповещения, Объект.Ссылка);

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

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

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

&НаСервере
Процедура ТоварыПослеУдаленияНаСервере(НеобходимоОбновитьСтатусыСерий, КэшированныеЗначения)

	Если НеобходимоОбновитьСтатусыСерий Тогда

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

	КонецЕсли;


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


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

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

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

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

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

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

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

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


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

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

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

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

	Возврат Неопределено;
	
КонецФункции

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

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

&НаСервереБезКонтекста
Функция ДанныеВыбораСкладов(Склад)

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

	Запрос.УстановитьПараметр("ГруппаСкладов", Склад);
	МассивСкладов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
	Возврат МассивСкладов;

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

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

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

КонецПроцедуры
//Конец ИнтеграцияГИСМ

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

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

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

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

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

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

#КонецОбласти
//-- Устарело_Производство21

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