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

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

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

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

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

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

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

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

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

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

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

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

	ВзаиморасчетыСервер.ФормаПриСозданииНаСервере(ЭтаФорма);
	ОповеститьОСозданииОбъектаРасчетов = Параметры.ОповеститьОСозданииОбъектаРасчетов;

	Элементы.ЗаменяющиеТоварыВидЦены.БыстрыйВыбор = Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен");

	УстановитьВидимостьКомандыЗаполнитьСтавкуНДС();

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

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

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

	УстановитьЗапретВыбораГруппыСклада(Элементы.Склад);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ВзаиморасчетыСервер.ЗагрузитьЭтапыОплатыИзВременногоХранилища(ЭтаФорма);
	ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, ИзмененныеРеквизиты, Истина);
	
	УстановитьДоступностьЭлементовПоСтатусуСервер();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Перем ВыделенныеСтроки, СтруктураДействий;

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

	ВыделенныеСтроки = ДополнитьДоПолногоНабора("ЗаменяющиеТовары");

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

	ПродажиКлиент.ОповеститьОбОтменеВыделенныхСтрок(ПричинаОтмены);

	ЗаменяющиеТоварыОтменитьВыделенныеСтрокиСервер(ВыделенныеСтроки);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗачетОплаты(Команда)
	ВзаиморасчетыКлиент.ЗачетОплаты(ЭтаФорма, Элементы.ЗачетОплатыФорма);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если СтавкаНДС = Неопределено Тогда
		Возврат;
	КонецЕсли;

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

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

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

	Перем ВыделенныеСтроки;

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

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

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

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

	РассчитатьИтоговыеПоказателиЗаявкиНаВозврат(ЭтотОбъект);

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

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

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

&НаСервере
Процедура УстановитьЗапретВыбораГруппыСклада(СкладЭлемент)

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

	Если КомиссионныеПродажи25
			ИЛИ Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтХранителя Тогда

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

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

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

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

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

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

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

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

	Элементы.ГруппаНадписьИКартинкаНесколькоСкладовВозвращаемыеТовары.Видимость = СкладГруппа;
	Элементы.ГруппаНадписьИКартинкаНесколькоСкладовЗаменяющиеТовары.Видимость 	= СкладГруппа;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

	СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтаФорма, "ВозвращаемыеТоварыСклад");
	СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтаФорма, "ЗаменяющиеТоварыСклад");

	// ВозвращаемыеТоварыСклад - отметка незаполненного

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

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

	//

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

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

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

	//

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

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

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

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

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

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

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

	//

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

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

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

	//

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

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

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

	//

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

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

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

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

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

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

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

	//
	
	УчетНДСУП.УстановитьУсловноеОформлениеСуммНДСПоНалогообложениюПродажи(ЭтаФорма,
		"ВозвращаемыеТоварыСтавкаНДС",
		"ВозвращаемыеТоварыСуммаНДС",
		"ВозвращаемыеТоварыСуммаСНДС");

	УчетНДСУП.УстановитьУсловноеОформлениеСуммНДСПоНалогообложениюПродажи(ЭтаФорма,
		"ЗаменяющиеТоварыСтавкаНДС",
		"ЗаменяющиеТоварыСуммаНДС",
		"ЗаменяющиеТоварыСуммаСНДС");

	//
	
	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтаФорма, "ВозвращаемыеТоварыСуммаСНДС");
	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтаФорма, "ЗаменяющиеТоварыСуммаСНДС");

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

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

	ОбщегоНазначенияУТ.УстановитьУсловноеОформлениеПриоритета(ЭтаФорма);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, 
																			 "ЗаменяющиеТоварыХарактеристика",
																		     "Объект.ЗаменяющиеТовары.ХарактеристикиИспользуются");

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, 
																			 "ВозвращаемыеТоварыХарактеристика",
																		     "Объект.ВозвращаемыеТовары.ХарактеристикиИспользуются");

	//

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

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

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

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

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

	//

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

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

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

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

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

	//

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

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

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

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

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

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

	//

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

	//

	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(ЭтаФорма, 
									                     "ЗаменяющиеТоварыВидЦены", 
                                                         "Объект.ЗаменяющиеТовары.ВидЦены");

	//

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

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

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

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

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, Ложь, 
																     "ВозвращаемыеТоварыСерия", 
																     "Объект.ВозвращаемыеТовары.СтатусУказанияСерий",
																	 "Объект.ВозвращаемыеТовары.ТипНоменклатуры");

	//

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь, 
																		 "ВозвращаемыеТоварыСтатусУказанияСерий",
                                                                         "Объект.ВозвращаемыеТовары.СтатусУказанияСерий");

	//

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	
	//
	
	НаборыСервер.УстановитьУсловноеОформление(ЭтаФорма, "ЗаменяющиеТовары");
	
	НаборыСервер.УстановитьУсловноеОформление(ЭтаФорма, "ВозвращаемыеТовары");
	
	//

	СкладыСервер.УстановитьУсловноеОформлениеПодразделенияВТЧ(ЭтаФорма, "ЗаменяющиеТовары", Ложь);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	УстановитьЗапретВыбораГруппыСклада(Элементы.Склад);

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

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

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

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

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

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

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

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

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

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

	МассивИзмененныхРеквизитов = Новый Массив;
	МассивИзмененныхРеквизитов.Добавить("Соглашение");
	МассивИзмененныхРеквизитов.Добавить("Партнер");
	МассивИзмененныхРеквизитов.Добавить("Договор");
	МассивИзмененныхРеквизитов.Добавить("Валюта");
	ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, МассивИзмененныхРеквизитов);

	НастроитьЭлементыФормы();
	УстановитьВидимостьДоговора();
	
КонецПроцедуры

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

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

	УстановитьВидимостьКомандыЗаполнитьСтавкуНДС();

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЗаполнитьЦеныПоСоглашениюСервер()
	
	ЦеныРассчитаны = ЗаменяющиеТоварыЗаполнитьЦеныПоСоглашениюСервер(Истина);
	ЦеныРассчитаны = ЦеныРассчитаны Или ВозвращаемыеТоварыЗаполнитьЦеныПоСоглашениюСервер(Истина);
	
	Возврат ЦеныРассчитаны;
	
КонецФункции

&НаСервере
Функция СтруктураСообщений()
	
	Возврат СкидкиНаценкиЗаполнениеСервер.СтруктураСообщений(Объект);
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЗаменяющиеТоварыЗаполнитьЦеныПоСоглашениюСервер(ПоВсемСтрокам = Ложь, ТекстОшибки = "")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизитыЗаменяющиеТовары()
	
	Возврат Новый Структура(
		"БезВозвратнойТары,ОтмененоБезВозвратнойТары,Отменено",
		"Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки,СуммаБонусныхБалловКСписаниюВВалюте",
		"Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки,СуммаБонусныхБалловКСписаниюВВалюте",
		"Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки,СуммаБонусныхБалловКСписаниюВВалюте");
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизитыЗаменяющиеТоварыСтрокой()
	
	Возврат "СуммаБезВозвратнойТары, СуммаНДСБезВозвратнойТары, СуммаСНДСБезВозвратнойТары,
		|СуммаАвтоматическойСкидкиБезВозвратнойТары, СуммаРучнойСкидкиБезВозвратнойТары,
		|СуммаБонусныхБалловКСписаниюВВалютеБезВозвратнойТары,
		|СуммаОтмененоБезВозвратнойТары, СуммаНДСОтмененоБезВозвратнойТары, СуммаСНДСОтмененоБезВозвратнойТары,
		|СуммаАвтоматическойСкидкиОтмененоБезВозвратнойТары, СуммаРучнойСкидкиОтмененоБезВозвратнойТары,
		|СуммаБонусныхБалловКСписаниюВВалютеОтмененоБезВозвратнойТары,
		|СуммаОтменено, СуммаНДСОтменено, СуммаСНДСОтменено,
		|СуммаАвтоматическойСкидкиОтменено, СуммаРучнойСкидкиОтменено,
		|СуммаБонусныхБалловКСписаниюВВалютеОтменено";
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ИспользоватьБонусныеПрограммыЛояльности(КартаЛояльности)
	
	Если Не ЗначениеЗаполнено(КартаЛояльности) Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Возврат СкидкиНаценкиСервер.ИспользоватьБонусныеПрограммыЛояльности(КартаЛояльности);
	
КонецФункции

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

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

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

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

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

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

&НаСервере
Функция ПоместитьВоВременноеХранилищеНаСервере(ИмяТЧ, Идентификатор = "")
	
	Возврат ПоместитьВоВременноеХранилище(Объект[ИмяТЧ].Выгрузить(), Идентификатор);
	
КонецФункции

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

	Для Каждого Товар Из Объект.ВозвращаемыеТовары Цикл
		Товар.ДатаПоступления = ДатаПоступления;
		
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПолучитьОтчетОРозничныхПродажахПоЧекуККМ(ЧекККМ)
	Возврат РозничныеПродажи.ПолучитьОтчетОРозничныхПродажахПоЧекуККМ(ЧекККМ);
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОчиститьЗаменяющиеТовары()
 	Объект.ЗаменяющиеТовары.Очистить();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ДатыОтгрузки

&НаСервере
Процедура УстановитьВидимостьЭлементовФормыДатОтгрузки()

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

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

&НаСервере
Процедура ЗаполнитьДатуОтгрузкиСервер(ДатаОтгрузки, МассивВыделенныхСтрок)

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

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

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

	УстановитьВидимостьЭлементовФормыДатОтгрузки();

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

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

#Область КонтрольНесогласованныхИзменений

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности()
	
	Элементы.ГруппаТоварыБонусныеБаллы.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
	Элементы.ЗаменяющиеТоварыСуммаБонусныхБалловКСписаниюВВалюте.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
	Элементы.ЗаменяющиеТоварыСуммаНачисленныхБонусныхБалловВВалюте.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
	
КонецПроцедуры

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


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