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

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

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

&НаКлиенте
Перем ТекущиеДанныеИдентификатор;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат; // В УТ и КА обработчик пустой
	
КонецПроцедуры


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

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПоменятьМестамиОтправителяИПолучателяПриИзмененииОперации(СписокИзмененныхРеквизитов)

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

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

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

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

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

	НастроитьЗависимыеЭлементыФормыНаСервере("Получатель");

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

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

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

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

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

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

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


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

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

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

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

&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЕстьЗаполненныеСерииПоFEFO()

	Возврат НоменклатураСервер.ЕстьСтрокиСЗаполненнымиПоFEFOСериями(Объект.Товары);

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

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

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

&НаСервере
Функция ЗаполнитьСерииПоFEFOСервер()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПоРаспоряжениямПриИзмененииНаСервере()

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

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

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

#Область Распоряжения

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

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

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

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

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

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

#Область ОтклоненияОтРаспоряжений

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Тара

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

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

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

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

&НаСервере
Функция ЕстьСтрокиПривязанныеКЗаказу()
	
	Для каждого Строка Из Объект.Товары Цикл
		Если Строка.КодСтроки <> 0 Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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


&НаСервере
Процедура УстановитьВидимостьПриИзмененииРеквизитов(СтруктураИзмененныхРеквизитов)

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

&НаСервере
Процедура УстановитьЗаголовкиПриИзмененииРеквизитов(СтруктураИзмененныхРеквизитов)

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

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

&НаСервере
Процедура УстановитьПрочиеСвойстваПриИзмененииРеквизитов(СтруктураИзмененныхРеквизитов)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ДоступенВыборПоРаспоряжению(Объект)

	Возврат Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаМатериаловВКладовую")
			;

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

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

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

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

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

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

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

&НаСервере
Процедура ОкруглитьДоЦелойУпаковкиНаСервере(КэшированныеЗначения)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Ордера

// Процедура - Перезаполнить по заказам ордерам
//
// Параметры:
//	ДанныеЗаполнения - Структура - данные заказов
//
&НаСервере
Процедура ПерезаполнитьПоОрдерам(ДанныеЗаполнения)

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

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

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

#Область ПлановаяСтоимость

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

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

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


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

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

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

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

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