Передача товаров / Форма документа / Модуль формы

файл

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

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

&НаКлиенте
Перем ПредыдущиеРеквизитыСтроки; // Используется для отвязки строки поступления от строки заказа

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

// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами

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

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

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

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

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

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

	//++ Локализация
	Элементы.ГруппаСостояниеЭПД.Видимость = ОбменСГИСЭПДПереопределяемый.РазрешенаРаботаЭПД();
	ОбновитьТекстЭПД();
	//-- Локализация
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура АвтоТест_ЗаполнитьЦеныПоСоглашению(Команда) Экспорт
	
	ЗаполнитьЦеныПоСоглашению(Команда);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьЦеныПоДоговору(Команда)
	
	ЗаполнитьЦеныПоДоговоруВСтроке();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ИнтернетПоддержкаПользователей.РаботаСКонтрагентами
#Область РаботаСКонтрагентами

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

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

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

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

#КонецОбласти
// Конец ИнтернетПоддержкаПользователей.РаботаСКонтрагентами

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

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

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

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

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

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

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

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

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

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

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

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

#Область Наборы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ЗаполнитьУсловияПродаж  = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект);
	ПроверитьЗаполнитьСклад = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект,
		СкладГруппа);

	СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
	СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж",  ЗаполнитьУсловияПродаж);
	СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ПроверитьЗаполнитьСклад);

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

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

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

#Область Ценообразование

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область Доставка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеФлагаОбособленно(ЭтотОбъект);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизиты()
	
	Возврат Новый Структура("БезВозвратнойТары", "Сумма");
	
КонецФункции

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

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

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

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

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

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

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


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

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

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

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

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

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

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

	ПараметрыЗаполнения = Новый Структура("ОтображатьСообщение", Ложь);

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьОснованиеДляПечати()

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

&НаСервере
Функция ЭтоДоговорПоНовойКомиссии()

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

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

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

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

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

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

#Область Локализация

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

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

&НаСервере
Процедура ОбновитьТекстДокументыНаОснованииЛокализация()
	
	//++ Локализация
	ТекстТТН = Документы.ТранспортнаяНакладная.ТекстТТН(ЭтотОбъект);
	ТекстыПоляДокументыНаОсновании.Добавить(ТекстТТН);
	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

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

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

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

//++ Локализация

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

//-- Локализация

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

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