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

файл

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

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

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

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

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

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

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

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

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

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

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	УстановитьВидимостьКомандВводаНаОсновании();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДополнитьМногооборотнойТарой(Команда)

	МногооборотнаяТараКлиент.ПодобратьМногооборотнуюТару(
		ЭтаФорма,
		"Товары",
		"Номенклатура,Характеристика,Количество,,НачалоОтгрузки");
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Аналоги

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	#КонецОбласти
	
КонецПроцедуры

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

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

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


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

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

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

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

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

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

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

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

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

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

#Область ПодборыИОбработкаПроверкиКоличества

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

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

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

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

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

#Область ШтрихкодыИТорговоеОборудование

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

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

	Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда
		Элементы.Товары.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПараметрыОповещения = Новый Структура;
	ПараметрыОповещения.Вставить("РежимЗаписи",      ПараметрыЗаписи.РежимЗаписи);
	ПараметрыОповещения.Вставить("ЕстьРаспоряжение", Истина);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


#Область ОтменаСтрок

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

&НаСервере
Функция ОтменитьНеотработанныеСервер()
	
	СтруктураКорректировкиСтрокЗаказа = ЗаказыСервер.СтруктураКорректировкиСтрокЗаказа();
	СтруктураКорректировкиСтрокЗаказа.ОтменитьНеотработанныеСтроки = Истина;
	
	Возврат СкорректироватьСтрокиЗаказа(СтруктураКорректировкиСтрокЗаказа);
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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