Запрос коммерческих предложений у поставщиков / Форма документа / Модуль формы

файл

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

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

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

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

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

	// ЭлектронноеВзаимодействие.ИнтеграцияСЭлектроннымиТорговымиПлощадками
	ПроверитьСвязьСЭТПБидзаар();
	// Конец ЭлектронноеВзаимодействие.ИнтеграцияСЭлектроннымиТорговымиПлощадками
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		Оповещение = Новый ОписаниеОповещения("ОткрытьФормуКонтактнойИнформацииЗавершение", ЭтотОбъект, ПараметрыЗавершения);

		УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыОткрытия, , Оповещение);

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

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

&НаКлиенте
Процедура СкладОчистка(Элемент, СтандартнаяОбработка)
	
	Объект.СкладЗначенияПолей = "";
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	Если Результат = КодВозвратаДиалога.Да Тогда

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

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

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

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

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

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

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

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

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

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

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

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

	ПроверитьРегистрациюОрганизаций();
	ПроверитьСвязьСЭТПБидзаар();

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

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

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

	ОчиститьСообщения();
	СтандартнаяОбработка = Ложь;

	Если ТребуетсяРегистрацияОрганизации И Не Объект.Организация.Пустая() Тогда

		ПараметрыМетода = Новый Структура;
		ПараметрыМетода.Вставить("НавигационнаяСсылкаФорматированнойСтроки", НавигационнаяСсылкаФорматированнойСтроки);

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

	Иначе

		СборПредложенийОбработкаНавигационнойСсылкиПродолжить(НавигационнаяСсылкаФорматированнойСтроки);

	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура МенеджерКонтактныеДанныеПредставлениеНажатие(Элемент)

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Менеджер", Объект.Менеджер);
	ПараметрыФормы.Вставить("Email", Объект.МенеджерEmail);
	ПараметрыФормы.Вставить("Телефон", Объект.МенеджерНомерТелефона);
	ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);

	ОповещениеЗакрытияФормы = Новый ОписаниеОповещения("ПриИзмененииКонтактнойИнформацииМенеджера", ЭтотОбъект);

	ОткрытьФорму("Документ.ЗапросКоммерческихПредложенийПоставщиков.форма.ВводКонтактнойИнформации", ПараметрыФормы, , ,
		, , ОповещениеЗакрытияФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

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

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Если Объект.МенеджерEmail <> Результат.Email Или Объект.МенеджерНомерТелефона <> Результат.Телефон Тогда
		Модифицированность = Истина
	КонецЕсли;

	Объект.МенеджерEmail = Результат.Email;
	Объект.МенеджерНомерТелефона = Результат.Телефон;

	Элементы.МенеджерКонтактныеДанныеПредставление.Заголовок = ПредставленияКИМенеджера(Объект.Менеджер, Объект.МенеджерEmail,
		Объект.МенеджерНомерТелефона);

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

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

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

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

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

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

	ЗаполнениеКИМенеджера(Объект.Менеджер, Объект.МенеджерEmail, Объект.МенеджерНомерТелефона);

	Элементы.МенеджерКонтактныеДанныеПредставление.Заголовок = ПредставленияКИМенеджера(Объект.Менеджер, Объект.МенеджерEmail,
		Объект.МенеджерНомерТелефона);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	
	Если ОтсутствуютТекущиеДанныеТЧТовары(ТекущиеДанные) Тогда 
		Возврат;
	КонецЕсли;
	
	ПриИзмененииНоменклатуры(ТекущиеДанные);	
	
КонецПроцедуры

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПоступившиеПредложения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьВыборПредложений(Команда)
	ЗапуститьПроверкуВыбранныхПредложенийВБизнесСеть();
КонецПроцедуры

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

&НаКлиенте
Процедура ОбновитьПредложения(Команда)
	ЗаполнитьПоступившиеПредложения();
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВыбратьКартинкуИзПрисоединенныхФайлов(Команда)

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

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

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

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

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

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

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

	Прочитать();

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

	ИзменитьЭтап();
	ОбновитьЭлементыФормы();

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

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

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

#Область ИнтеграцияСПодсистемами

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

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

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

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

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

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

#Область ВизуальноеОформлениеФормы

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

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

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

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

	Для Каждого СтрокаТабличнойЧасти Из СтрокиВОбработке Цикл
		СтрокаТабличнойЧасти.ИдентификаторЗадания = ЗаданиеЗаполненияДанныхСервиса.ИдентификаторЗадания;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

&НаСервереБезКонтекста
Процедура ОбновитьСостояниеДокумента(Знач Документ, Знач ТекущееСостояние, Знач НовоеСостояние, Действие = "")

	СтатусПоУмолчанию = Документы.ЗапросКоммерческихПредложенийПоставщиков.СтатусПоУмолчанию();
	
	Если ТекущееСостояние = Неопределено Тогда
		ТекущееСостояние = СтатусПоУмолчанию;
	КонецЕсли;

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

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

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

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

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

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

	Элементы.Товары.ДобавитьСтроку();
	АдресКартинки = "";
	УказатьЗаполненностьИзображенияВСтроке(Элементы.Товары.ТекущиеДанные);
	
КонецПроцедуры

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

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

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

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

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

	УказатьЗаполненностьИзображенияТовары(Объект.Товары);

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

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

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

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

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

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

	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветПустойГиперссылки);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Получение категории...'"));
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Ошибка получения категории'"));
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

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

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

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

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

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

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

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

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

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

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

			ЕстьПобедители = Элементы.СтатусВСервисе.Заголовок
				<> ИнтеграцияСЭлектроннымиТорговымиПлощадкамиКлиентСервер.СостояниеСборПредложенийЗавершенБезПобедителя();

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПризнакКэшированияИзображенияСтроки(СтрокаТаблицыТоваров, ИспользоватьСервисРаботаСНоменклатурой)

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

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

#Область ОбработчикиОжидания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция АдресДвоичныхДанныхИзображенияПоВнешнейСсылке(ВнешняяСсылкаИзображения)

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

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

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

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

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

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

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

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

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

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

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

	ИспользоватьСервисРаботаСНоменклатурой = Истина;
	
	ВыбратьНоменклатуруИзСервиса();

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

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

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

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

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

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

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

	ТекущиеДанные.Номенклатура = Результат;
		
	ПриИзмененииНоменклатуры(ТекущиеДанные);	
	
КонецПроцедуры

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

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

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

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

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

#Область ОтборСтрок

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

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

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

	Элементы.СтраницыДокумента.ТекущаяСтраница = Элементы.СтраницаВыборПредложений;
	
	ОтобразитьГруппуОшибки();
	
КонецПроцедуры

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

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

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

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

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

&НаСервереБезКонтекста
Функция НоменклатураСопоставлена(Номенклатура, ИспользоватьСервисРаботаСНоменклатурой)
	
	Результат = Ложь;

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПроверитьГотовностьКОтправке(Ссылка)

	РезультатПроверкиПоставщиков = АдресаЭлектроннойПочтыПолучателейЗапросаСоответствуютТребованиям(Ссылка);

	Возврат РезультатПроверкиПоставщиков И КоммерческиеПредложения.ЗапросКоммерческихПредложенийПоставщиковГотовКОтправке(Ссылка);

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

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

	Результат = Истина;

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

	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.УстановитьПараметр("КодИдентификацииБидзаар", 2);

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

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

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

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

	Возврат Результат;

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

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

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

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

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

&НаСервере
Процедура ПроверитьРегистрациюОрганизаций(РезультатАвторизации = Неопределено)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗагрузитьПоступившиеПредложения(АдресТаблицы)

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция ПолучитьКоличествоПоставщиков(Знач ПоступившиеПредложения)

	Таблица = ПоступившиеПредложения.Выгрузить(,"ПоставщикПредставление");
	
	Таблица.Свернуть("ПоставщикПредставление");
	
	Возврат Таблица.Количество();
	
КонецФункции

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

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

&НаСервереБезКонтекста
Функция ПолучитьВыбранныеИсточникиДокумента(Знач АнализируемыеИсточникиПредложений, Знач ВсеИсточники = Ложь)

	Возврат КоммерческиеПредложенияДокументы.ПолучитьВыбранныеИсточникиДокумента(АнализируемыеИсточникиПредложений, ВсеИсточники)

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтменитьВыборПредложенияЗавершение(МассивПараметров)
	
	ОтменитьВыборПредложенияНаСервере(МассивПараметров);
	ОтобразитьГруппуОшибки();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Процедура ПрикрепитьЗаказКЗапросу(Запрос, Заказ)
	
	МенеджерЗаписи = РегистрыСведений.ЗаказыПоставщикамПоЗапросамКоммерческихПредложений.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.ЗаказПоставщику = Заказ;
	МенеджерЗаписи.ЗапросКоммерческихПредложений = Запрос;
	
	УстановитьПривилегированныйРежим(Истина);
	МенеджерЗаписи.Записать();
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

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

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

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

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

	Возврат УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(ВидКонтактнойИнформации);

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьАдресКартинки(
		АдресКартинки, Изображение, АдресДвоичныхДанных, ПанельОтображается, УникальныйИдентификатор)

	АдресКартинки = АдресДвоичныхДанных;
	КоммерческиеПредложенияДокументыКлиентСервер.УстановитьАдресКартинки(Изображение, АдресКартинки,
		ПанельОтображается, УникальныйИдентификатор);
	АдресДвоичныхДанных = АдресКартинки;	
	
КонецПроцедуры

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

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

		ПриИзмененииИзображения(ТекущиеДанные);
		
		УстановитьВидимостьПодсказкиИзображения(ТекущиеДанные);
		УстановитьТекстНевыбраннойКартинки(ТекущиеДанные);
		УстановитьДоступностьКомандИзображения(ТекущиеДанные);

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

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

	ТекущиеДанные.ИзображениеАдресДвоичныхДанных = 
		АдресДвоичныхДанныхИзображенияПоВнешнейСсылке(ВнешнийАдресИзображения);
				
КонецПроцедуры

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

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

&НаКлиенте	
Процедура ПросмотретьИзображениеОбработчик()

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

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

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

&НаСервере
Процедура СохранитьИзмененныеИзображенияТоварныхПозиций()

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ОтсутствуютТекущиеДанныеТЧТовары(ТекущиеДанные) 
	Возврат ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.ИдентификаторСтрокиЗапроса);		
КонецФункции

&НаСервереБезКонтекста
Процедура НастройкаПанелиИзображенийНаСервере(
	ИмяФормы, ПанельОтображается, АдресКартинки, Изображение, АдресДвоичныхДанных, УникальныйИдентификатор)

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

&НаСервереБезКонтекста
Процедура ЗаполнениеКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона)

	Документы.ЗапросКоммерческихПредложенийПоставщиков.ЗаполнитьКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона);

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

&НаКлиентеНаСервереБезКонтекста
Функция ПредставленияКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона)

	ЧастиКИ = Новый Массив;	//Массив из строка
	Если ЗначениеЗаполнено(МенеджерEmail) Тогда
		ЧастиКИ.Добавить(НСтр("ru ='email'") + ": " + МенеджерEmail);
	КонецЕсли;
	Если ЗначениеЗаполнено(МенеджерНомерТелефона) Тогда
		ЧастиКИ.Добавить(НСтр("ru ='телефон'") + ": " + МенеджерНомерТелефона);
	КонецЕсли;

	Если ЗначениеЗаполнено(Менеджер) И ЧастиКИ.Количество() = 0 Тогда
		ЧастиКИ.Добавить(НСтр("ru ='укажите контактную информацию'"));
	КонецЕсли;

	Возврат СтрСоединить(ЧастиКИ, "; ");

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

// Возвращает ссылку на страницу запроса коммерческих предложений в сервисе.
//
// Возвращаемое значение:
// 	Строка.
//
&НаКлиенте
Функция СсылкаНаСтраницуЗапроса()
	
	Возврат СтрШаблон("/process/light/%1",
		Объект.ИдентификаторВСервисе);
	
КонецФункции

&НаСервере
Процедура ЗаписатьДанныеПредложенийБидзаар(АдресРезультата)

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

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

	Если ПустаяСтрока(НавигационнаяСсылкаФорматированнойСтроки) Тогда
		Возврат;
	КонецЕсли;

	Если НачалоДня(Объект.ДатаНачалаПубликации) <> НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) Тогда
		Объект.ДатаНачалаПубликации = ОбщегоНазначенияКлиент.ДатаСеанса();
		Модифицированность = Истина;
	КонецЕсли;

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

	ОбработатьИзмененияШапки(НавигационнаяСсылкаФорматированнойСтроки);

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

&НаКлиенте
Процедура ПроверитьСвязьСЭТПБидзаар()

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

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

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

	СтандартнаяОбработка = Ложь;

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

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

	ВыполнитьОбработкуОповещения(ПриЗавершенииСохранения, Истина);

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

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

	Если Не Результат Тогда
		Возврат;
	КонецЕсли;

	ПриЗавершенииСозданияЗаказовБидзаар = Новый ОписаниеОповещения("ПослеЗавершенияСозданияЗаказовБидзаар", ЭтотОбъект);

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

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

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

	ОбновитьОтображениеДанных();

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

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

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

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

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

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

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

&НаКлиенте
Функция ЭтоТоварИзСервиса(ТекущиеДанные)
	Возврат ТекущиеДанные.ИсточникДобавленияТовара = ИндексТовараИзСервиса;
КонецФункции

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

&НаКлиенте
Функция ЭтоРучнойТовар(ТекущиеДанные)
	Возврат ТекущиеДанные.ИсточникДобавленияТовара = ИндексРучногоТовара;
КонецФункции

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

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

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