Помощник продаж / Форма / Модуль формы

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

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

&НаКлиенте
Перем КэшированныеЗначения; //текущая номенклатура для передачи в обработчики ожидания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПерейтиДокументы(Команда)
	
	ПерейтиКДокументам(Неопределено);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ОперативноеЗаполнение = (Объект.ДатаОтгрузки = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса())	// Если оперативное заполнение
		Или Не ЗначениеЗаполнено(Объект.ДатаОтгрузки));

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

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

	ПараметрыУказанияСерийПараметр = ?(ПараметрыУказанияСерийРеализации,
									   ПараметрыУказанияСерий.Реализация,
									   ПараметрыУказанияСерий.Заказ);

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

	ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область СозданиеДокументов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	НадписьСформированныеДокументы = СтрЗаменить(НадписьСформированныеДокументы,
												"%Валюта%",
												Объект.Валюта);
	
	ОбновитьГиперссылкуИнформационнойНадписиФормируемыеДокументы();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОперацияОтгрузкаТоваров(ХозяйственнаяОперация)
	
	Возврат ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ОтгрузкаТоваровКлиенту");
	
КонецФункции

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

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

&НаСервере
Функция РазрешенаФискализацияПоСкладу(Склад, ПробиватьФискальныйЧек)
	
	Возврат СкладыСервер.РазрешенаФискализацияПоСкладу(Склад, ПробиватьФискальныйЧек);
	
КонецФункции

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

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

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

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

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

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

#Область ЗаполнениеУсловийПродаж

Функция ДоговорПоУмолчанию()
	
	ОбъектОперация = Объект.ХозяйственнаяОперация;
	Если ЭтоОперацияОтгрузкаТоваров(ОбъектОперация) Тогда
		ОбъектОперация = ОперацияРеализацияКлиенту;
	КонецЕсли;

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

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

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

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

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

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

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

#Область УсловияОплаты

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

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

&НаСервере
Процедура УстановитьВидимостьБанковскийСчет()
	
	ВариантОформленияНеКоммерческоеПредложение
		= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
	
	Элементы.БанковскийСчет.Видимость = ВариантОформленияНеКоммерческоеПредложение;
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура УстановитьВидимостьСклада()
	
	ВариантОформленияНеКоммерческоеПредложение
		= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
	
	Элементы.Склад.Видимость = ВариантОформленияНеКоммерческоеПредложение;
	
КонецПроцедуры

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

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

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

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

#Область ВариантыОформленияДокументов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если СуммаВсегоПоЭтапам <> 0 Тогда
		Форма.ПроцентАвансаДоОбеспечения  = (Форма.СуммаАвансаДоОбеспечения/СуммаВсегоПоЭтапам) * 100;
		Форма.ПроцентПредоплатыДоОтгрузки = (Форма.СуммаПредоплатыДоОтгрузки/СуммаВсегоПоЭтапам) * 100;
		Форма.ПроцентКредитаПослеОтгрузки = (Форма.СуммаКредитаПослеОтгрузки/СуммаВсегоПоЭтапам) * 100;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		КонецЕсли;

		СтруктураОснования.Основание = ТекстПередачи;
	КонецЕсли;
	
	Возврат СтруктураОснования;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура СоздатьРеализациюПоЗаказу(Товары,
	МассивРеализаций,
	МассивНайденныхДокументов,
	ОснованиеОбъект,
	БезСменыСтатусаЗаказа,
	БезПроведения,
	Отказ)

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

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

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

&НаСервере
Процедура СоздатьПередачуТоваровПоЗаказу(Товары, МассивПередач, МассивНайденныхДокументов, ОснованиеОбъект, Отказ)

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

&НаСервере
Процедура СоздатьОтгрузкуТоваровКлиентуПоЗаказу(Товары, МассивОтгрузок, МассивНайденныхДокументов, ОснованиеОбъект, Отказ)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПолучитьВариантОбеспеченияИФлагОбособленно(ВариантОбеспечения, Соглашение, СтатусЗаказаКлиента)

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

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

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

#Область Инициализация

ВыполняетсяЗакрытие = Ложь;

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

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