Коммерческое предложение клиенту / Форма документа / Модуль формы

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЦеныСуммы

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

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

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

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

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

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

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

#Область РучныеСкидки

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

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

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

#Область Комментарии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗаполнениеТабличнойЧастиТовары

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

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

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

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

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

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

&НаКлиенте
Процедура ДобавитьПредложениеПоПозиции(Команда)

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

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

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

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

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

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

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

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

#Область ЦеныИСкидки

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ВнедрениеПодсистемБСП

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

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

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

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

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

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

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

#Область УправлениеЭлементамиФормы

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

	Элементы.ТоварыХарактеристика.Видимость = НастройкиУчета.ИспользуютсяХарактеристикиНоменклатуры;
	
	Элементы.ТоварыПроцентАвтоматическойСкидки.Видимость   = НастройкиУчета.ИспользуютсяАвтоматическиеСкидкиВПродажах;
	Элементы.ТоварыСуммаАвтоматическойСкидки.Видимость     = НастройкиУчета.ИспользуютсяАвтоматическиеСкидкиВПродажах;
	Элементы.ТоварыРассчитатьСкидки.Видимость              = НастройкиУчета.ИспользуютсяАвтоматическиеСкидкиВПродажах;
	Элементы.ТоварыНазначитьАвтоматическиеСкидки.Видимость = НастройкиУчета.ИспользуютсяАвтоматическиеСкидкиВПродажах
	                                                         И НастройкиУчета.ИспользуютсяНазначаемыеАвтоматическиеСкидкиВПродажах;

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

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

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

#Область ВнедрениеПодсистемБСП

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

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

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

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

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

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

#Область Комментарии

&НаКлиенте
Процедура КомментарийВнутреннийНачалоВыбора()

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

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

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

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

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

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

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

#Область ДополнительнаяИнформацияКлиенту

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

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

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

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

#Область ДобавлениеСтрокИзЗапроса

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

// ЭлектронноеВзаимодействие.ЗапросКоммерческогоПредложенияОтКлиента

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

// Конец ЭлектронноеВзаимодействие.ЗапросКоммерческогоПредложенияОтКлиента

&НаСервере
Процедура ДобавитьСтрокиИзЗапроса(МассивИдентификаторовДобавляемыхСтрокЗапроса)

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

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

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

#Область ЗагрузкаИзВнешнегоФайла

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

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ЗагрузитьПолученныеИзВнешнегоФайлаДанные(Результат);

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

&НаСервере
Процедура ЗагрузитьПолученныеИзВнешнегоФайлаДанные(Результат)

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

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

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

#Область ИнформацияЗапрошеноПредложено

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

&НаСервере
Процедура СформироватьИнформациюЗапрошеноПредложеноПоСтроке(ИдентификаторСтроки)

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

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

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

#Область РаботаСоСтрокамиЗапрошено

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

&НаКлиенте
Процедура УдалитьСтрокиСПредложениямиПоСтрокеЗапроса(ИдентификаторСтрокиЗапроса)

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

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

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

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

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

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

&НаСервере
Процедура ПересчитатьЦенуЗапроса()

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

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

#Область ФормированиеПредставлений

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

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

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

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

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

	Если Не ЗначениеЗаполнено(СрокПоставки) Тогда
		
		Возврат "";
		
	ИначеЕсли ТипЗнч(СрокПоставки) = Тип("Число") Тогда
		
		Возврат СтрШаблон(НСтр("ru = 'В течение %1 дн.'"), СрокПоставки);
		
	ИначеЕсли ТипЗнч(СрокПоставки) = Тип("Дата") Тогда
		
		Возврат СтрШаблон(НСтр("ru = 'до %1'"), Формат(СрокПоставки, "ДЛФ=D"));
		
	КонецЕсли;

КонецФункции
// Конец ЭлектронноеВзаимодействие.ЗапросКоммерческогоПредложенияОтКлиента

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

#Область ИтогиНачальноеЗаполнение

&НаСервере
Функция НаОснованииЗапросаКоммерческогоПредложения()

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

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

&НаСервере
Процедура ПриСозданииЧтенииНаСервере()

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_РассчитатьИтоговыеПоказателиФормы() Экспорт

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

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

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

#Область ЗавершениеВыполненияКомандФормы

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

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

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

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

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

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

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

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

#Область ЗаполнениеДокумента

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

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

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

#Область ОбработкаВводаШтрихкода

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

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

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

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

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

#Область ЗагрузкаДанныхТСД

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПереопределяемаяКомандаСервер(ИмяКоманды, Результат)

	КоммерческиеПредложенияДокументыПереопределяемый.ПриВыполненииПереопределяемойКоманды(ЭтотОбъект, ИмяКоманды, Результат);

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

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

#Область Скидки

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

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

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

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

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

&НаСервере
Процедура ПриНазначенииАвтоматическихСкидокНаСервере(Результат)

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

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

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

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

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

#Область КопированиеСтрок

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

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

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

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

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

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