Акт выполненных работ для клиента / Форма документа / Модуль формы

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

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

&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;

&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;

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

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

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

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

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

	ИсправлениеДокументов.ПриСозданииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//++ НЕ УТ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Иначе
		ДоговорОчисткаСервер();
		СуммаДолга = 0;
	КонецЕсли;
	
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ЗаполнитьПоЗаказуСервер();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	//

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

	//

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

	//

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

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

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

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

	//

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

	//

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

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

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

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

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

	//

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

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

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

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

	//

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

	//

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

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

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

	//

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

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

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

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

	//

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ПриИзмененииКлючевыхРеквизитовСостояниеЭДО();
	
КонецПроцедуры

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ИспользоватьКартыЛояльности()
	
	Возврат ПолучитьФункциональнуюОпцию("ИспользоватьКартыЛояльности");
	
КонецФункции

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

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

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

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

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