Корректировка назначения товаров / Форма документа / Модуль формы

файл

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьИнформациюПоЗаказам", 1, Истина);
	
КонецПроцедуры

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

	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РедактированиеТоваров

&НаКлиенте
Процедура Подключаемый_ОбновитьИнформациюПоЗаказам()
	ОбновитьИнформациюПоЗаказам();
КонецПроцедуры

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

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

#Область УказаниеНазначенй

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

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

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

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

#Область КопированиеИВставка

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

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

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

#Область ФормаСлужебные

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);

	//

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РеквизитыТабличнойЧастиТовары

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

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

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

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

#Область ЗаполнениеТовары

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

&НаСервере
Функция ЕстьТоварыКСнятиюРезерва()
	
	Возврат Документы.КорректировкаНазначенияТоваров.ЕстьТоварыКСнятиюРезерва(Объект.Назначение);
	
КонецФункции

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

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

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

	ОбновитьИнформациюПоЗаказам();
	
КонецПроцедуры

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

#Область ЗаполнениеВидыЗапасов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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