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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	Если ДоговорДоИзменения <> Объект.Договор Тогда
		ПредложениеЗаполнитьПоГосконтрактуЕИС();
	КонецЕсли;
	// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС

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

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

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

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	ПредложениеЗаполнитьПоГосконтрактуЕИС();
	// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС

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

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

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

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

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

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

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

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

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

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

	КонецЕсли;
	
КонецПроцедуры

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

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

	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура КлиентКонтрагентПриИзменении(Элемент)
	
	КлиентКонтрагентПриИзмененииНаСервере();
	ЗаполнитьДоговорКонечногоКлиентаПоУмолчанию();
	
КонецПроцедуры
//++ Локализация

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

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

&НаКлиенте
Процедура ЭтапГосконтрактаЕИСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	//++ Локализация

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

	//-- Локализация
	
	Возврат;
	
КонецПроцедуры

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

	Объект.ЭтапГосконтрактаЕИС = "";

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

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

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

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

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

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

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

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

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

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

	УстановитьПризнакЗаполненияСклада();

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

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

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

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

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

&НаКлиенте
Процедура ТоварыПриОкончанииРедактированияДляСерверногоВызова()
	
	ТоварыПриОкончанииРедактированияНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		ОчиститьСообщения();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СкопироватьСтроки(Команда)

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

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


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

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

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

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

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

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

	Если ЗначениеЗаполнено(АдресЗагруженныхДанных) Тогда
		ОчиститьСообщения();
		ПолучитьЗагруженныеТоварыИзХранилища(АдресЗагруженныхДанных);
	КонецЕсли;

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	УстановитьСнятьОтметкуОбособленно(Истина);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

	ЗапасыСервер.УстановитьУсловноеОформлениеПодразделенияДляВидовЗапасов(ЭтаФорма);
	
	//

	УчетНДСУП.УстановитьУсловноеОформлениеКодаТНВЭДПоНалогообложениюПродажи(ЭтаФорма);

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

	//

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

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);

	//

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

	//

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

	//

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

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

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

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

	//

	ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(ЭтаФорма);

	//

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

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

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

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

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

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

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

	//

	СкладыСервер.УстановитьУсловноеОформлениеСкладаВШапке(ЭтаФорма);

	////

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

	//

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

	//

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

	//

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

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
	// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС

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

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

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

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

	Элементы.ЗакрытьЗаказ.Видимость = ИспользоватьРасширенныеВозможностиЗаказаКлиента;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОбновитьИнформациюПоЗаказам();
	РассчитатьИтоговыеПоказатели(ЭтотОбъект);
	ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтотОбъект);

	ЗаполнитьУстановитьВидимостьСерийДоступностьПерезаполнитьПоОтгрузке();
	
	ЗаполнитьНалогообложениеНДСПродажи();
	НалогообложениеНДСПриИзмененииСервер();

	УстановитьЗаголовокТоварыГруппаОтправитель();

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

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

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
	// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС

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

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

	// ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС
	ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
	// Конец ЭлектронноеВзаимодействие.ЭлектронноеАктированиеЕИС

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

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

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

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

&НаСервере
Процедура ЗаполнитьПоГосконтрактуСервер()
	
	ЭлектронноеАктированиеЕИСУТ.ЗаполнитьТабличнуюЧастьДокументаПоДаннымГосконтракта(Объект);	

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПрименитьОплатуБонуснымиБаллами(, Истина);
	Возврат ЗаполнитьЦеныПоСоглашениюСервер(ПоВсемСтрокам, УчитыватьСтрокиСверхЗаказа, ТекстОшибки);
	
КонецФункции

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

#Область ЗаполнениеПоЗаказуПоОрдеру

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПредварительноРассчитанныеСкидкиНаценкиПоЗаказу(ИзменилисьСкидки)
	
	СкидкиНаценки = Объект.СкидкиНаценки.Выгрузить();
	СкидкиНаценки.Очистить();
	
	ДанныеСкидкиНаценкиПоЗаказу = СкидкиНаценкиЗаполнениеСервер.СкидкиНаценкиПоЗаказу(Объект);
	Для Каждого СтрокаТоваровЗаказа Из ДанныеСкидкиНаценкиПоЗаказу.ТаблицаТоваров Цикл
		
		НайденныеСтроки = Объект.Товары.НайтиСтроки(
			Новый Структура("ЗаказКлиента,КодСтроки", СтрокаТоваровЗаказа.ЗаказКлиента, СтрокаТоваровЗаказа.КодСтроки));
		Если НайденныеСтроки.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		СтрокаТаблицы = НайденныеСтроки[0];
		Если СтрокаТоваровЗаказа.СуммаАвтоматическойСкидки = Null Тогда
			Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности Тогда
				ТекстОшибки = НСтр("ru='Возникла проблемная ситуация при переносе скидок из распоряжения. Возможно не задан курс для валюты ""%Валюта%""'");
			Иначе
				ТекстОшибки = НСтр("ru='Возникла проблемная ситуация при переносе скидок из заказа. Возможно не задан курс для валюты ""%Валюта%""'");
			КонецЕсли;
			ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Валюта%", Объект.ВалютаВзаиморасчетов);
			ВызватьИсключение ТекстОшибки;
		КонецЕсли;
		
		СуммаКРаспределению = Окр(
				СтрокаТоваровЗаказа.ЗаказСуммаАвтоматическойСкидки
				* (СтрокаТоваровЗаказа.РеализацияКоличество / СтрокаТоваровЗаказа.ЗаказКоличество)
				* СтрокаТоваровЗаказа.ВалютаКоэффициентПересчета,
			 2);
		ТекСуммаБонусныхБалловКСписаниюВВалюте = Окр(
				СтрокаТоваровЗаказа.ЗаказСуммаБонусныхБалловКСписаниюВВалюте 
				* (СтрокаТоваровЗаказа.РеализацияКоличество / СтрокаТоваровЗаказа.ЗаказКоличество) 
				* СтрокаТоваровЗаказа.ВалютаКоэффициентПересчета, 
			2);
		ТекСуммаБонусныхБалловКСписанию = Окр(
				СтрокаТоваровЗаказа.ЗаказСуммаБонусныхБалловКСписанию 
				* (СтрокаТоваровЗаказа.РеализацияКоличество / СтрокаТоваровЗаказа.ЗаказКоличество), 
			2);
		
		Если СтрокаТоваровЗаказа.ПроцентРучнойСкидки <> СтрокаТаблицы.ПроцентРучнойСкидки
			Или ТекСуммаБонусныхБалловКСписаниюВВалюте <> СтрокаТаблицы.СуммаБонусныхБалловКСписаниюВВалюте
			Или ТекСуммаБонусныхБалловКСписанию <> СтрокаТаблицы.СуммаБонусныхБалловКСписанию Тогда
				
			ИзменилисьСкидки = Истина;
			Возврат СкидкиНаценки;
			
		КонецЕсли;
		
		Если СтрокаТаблицы.КлючСвязи <> 0 Тогда
		
			НайденныеСтроки = ДанныеСкидкиНаценкиПоЗаказу.СкидкиНаценкиЗаказа.НайтиСтроки(
				Новый Структура("ЗаказКлиента, КлючСвязи", СтрокаТаблицы.ЗаказКлиента, СтрокаТоваровЗаказа.КлючСвязи));
			Если НайденныеСтроки.Количество() <> 0 Тогда
				Для Каждого СтрокаСкидкиЗаказа Из НайденныеСтроки Цикл
					
					СтрокаСкидки = СкидкиНаценки.Добавить();
					ЗаполнитьЗначенияСвойств(СтрокаСкидки, СтрокаСкидкиЗаказа);
					СтрокаСкидки.КлючСвязи	= СтрокаТаблицы.КлючСвязи;
					СтрокаСкидки.Сумма = СтрокаТоваровЗаказа.Коэффициент * СтрокаСкидки.Сумма;
					
					СуммаКРаспределению = СуммаКРаспределению - СтрокаСкидки.Сумма;
				КонецЦикла;
				Если СуммаКРаспределению <> 0 Тогда
					СтрокаСкидки.Сумма = СтрокаСкидки.Сумма + СуммаКРаспределению;
				КонецЕсли;
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат СкидкиНаценки;
	
КонецФункции

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

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

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

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

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

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

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

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

	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

		КорректировкаВыполнена = Истина;
		
	КонецЦикла;

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

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

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

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

	СтрокаТаблицы = НайденныеСтроки[0];

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПараметрыФормыУказанияСерий = ДополнительныеПараметры.ПараметрыФормыУказанияСерий;
	ЗначениеВозврата = Результат;

	Если ЗначениеВозврата <> Неопределено Тогда
		ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий);
	КонецЕсли;

	ТоварыСерияПересчитатьЦены();
	
КонецПроцедуры

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

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

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

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

	ТаблицаТоваров = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, Колонки);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОрдернаяСхемаПриОтгрузке = Значение;

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

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

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

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

&НаСервереБезКонтекста
Процедура ПроверитьНаличиеКорректировок(Ссылка, ЕстьКорректировки)
	
	ПродажиСервер.ПроверитьНаличиеКорректировок(Ссылка, Ссылка, ЕстьКорректировки)
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
	
КонецПроцедуры

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

&НаСервере
Процедура ПолучитьЗагруженныеТоварыИзХранилища(АдресТоваровВХранилище)
	
	ПрименитьОплатуБонуснымиБаллами(, Истина);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УстановитьПризнакЗаполненияСклада()
	
	СкладОбязателен = ?(Объект.Товары.Итог("СкладОбязателен") = 0, 0, 1);
	
КонецПроцедуры

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

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

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

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

	ЗаполнитьСтавкуНДСНаСервере(СтавкаНДС, КэшированныеЗначения);
	СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);

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

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

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

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

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

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

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

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

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

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

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

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

	СтруктураПараметров = ЦеныПредприятияЗаполнениеСервер.НовыйПараметрыПроверкиВидаЦенДоговора();
	СтруктураПараметров.ПолеВидаЦен = "ВидЦенПродажи";

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ФискальнаяОперация

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ШтрихкодыУпаковокЗаполнены()
	
	Возврат ФормированиеФискальныхЧековСервер.ШтрихкодыУпаковокЗаполнены(Объект);
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПолучитьЗначенияФОМаркировки()
	
	ИспользоватьМаркировку = Ложь;
	//++ Локализация
	ИспользоватьМаркировку = ПолучитьФункциональнуюОпцию("ВестиУчетМаркировкиПродукцииВГИСМ") 
		ИЛИ ПолучитьФункциональнуюОпцию("ВестиУчетМаркируемойПродукцииИСМП");
	//-- Локализация
	
	Возврат ИспользоватьМаркировку;
	
КонецФункции

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

//++ Локализация
&НаСервереБезКонтекста
// Параметры:
//	ПараметрыОбъекта - см. РеализацияТоваровУслугЛокализация.РазрешеноПробитиеФискальныхЧековПоДокументу.ПараметрыОбъекта
Функция ВозможноПробитиеЧекаПоДокументу(Знач ПараметрыОбъекта)
	
	Возврат РеализацияТоваровУслугЛокализация.РазрешеноПробитиеФискальныхЧековПоДокументу(ПараметрыОбъекта);
	
КонецФункции

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

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

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