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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

		
	Иначе
		
		СоглашениеПриИзмененииСервер(Ложь);

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

		
		ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродаж();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

	СтатусПриИзмененииСервер();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ИнтернетПоддержкаПользователей.СПАРКРиски

// Обновляет отображение индексов СПАРК Риски.
//
// Параметры:
//  Нет.
//
&НаКлиенте
Процедура Подключаемый_ОбновитьОтображениеИндексыСПАРК()

	ОбновитьОтображениеИндексыСПАРК();

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

// Обновляет отображение индексов СПАРК Риски.
//
// Параметры:
//  Нет.
//
&НаКлиенте
Процедура ОбновитьОтображениеИндексыСПАРК()

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

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

&НаСервереБезКонтекста
Функция ВидКонтрагентаСПАРК(Контрагент)
	
	Возврат Перечисления.ЮрФизЛицо.ВидКонтрагентаСПАРКРиски(Контрагент);
	
КонецФункции
// Конец ИнтернетПоддержкаПользователей.СПАРКРиски

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыСтавкаНДСНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)

	ДатаОтгрузки = Объект.Дата;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОперацииПередачи = ПродажиСервер.ОперацииПередачиТоваров();

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

	//

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

	//

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

	//

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

	//

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

	//

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

	//

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

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

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

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

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

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

	//

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

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

	//
	
	ПараметрыУстановки = МногооборотнаяТараСервер.ПараметрыУстановкиУсловногоОформленияДляСтрокСМногооборотнойТарой();
	
	ПараметрыУстановки.Форма                 = ЭтаФорма;
	ПараметрыУстановки.ЭтоПоступление        = Истина;
	
	МногооборотнаяТараСервер.УстановитьУсловноеОформлениеДляСтрокСМногооборотнойТарой(ПараметрыУстановки);

	//

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

	//

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ЦеныРасчитаны;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат СкидкиИзменились;
	
КонецФункции

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

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

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

	КонецЦикла;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		ДлительныеОперацииКлиент.ОжидатьЗавершение(
			ДанныеПоФоновомуЗаданиюПолучениеПеревозчиков, ОповещениеОЗавершении, ПараметрыОжидания);
	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОчиститьСообщения();
	ПрименитьОплатуБонуснымиБалламиКлиент(, Истина);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			СтруктураДействий.Вставить("ПроверитьЗаполнитьВидЦены", ПараметрыДействия);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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