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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ИсточникиПередУдалением(Элемент, Отказ)
	Отказ = Истина;
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура Обновить(Команда)
	
	Страница = 0;
	НачатьСохранениеИзменений();
	
	ПодключитьОбработчикОжидания("НачатьПолучениеСпискаПредложений", 0.5, Истина);
КонецПроцедуры

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

&НаКлиенте
Процедура КРассмотрению(Команда)
	
	ОтметитьКРассмотрению(Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	Если ТекущиеДанные = Неопределено Тогда 
		Условия = "";
		
		Возврат;
	КонецЕсли;
	
	ПодстрокиУсловия = Новый Массив;
	ПодстрокиУсловия.Добавить("ru = '<HTML><HEAD><style> html, body { overflow: hidden;} </style></HEAD>");
	
	ШаблонСтроки = "<P><FONT face=Arial><FONT size=2><FONT color=#1c55ae><STRONG>%1:</STRONG></FONT><BR>%2</FONT></FONT></P>";
	
	Если ТекущиеДанные.ПоляДляСравненияУсловий <> Неопределено Тогда
		Налогообложение = ?(ТекущиеДанные.ПоляДляСравненияУсловий.Налогообложение, НСтр("ru = 'Продажа облагается НДС'"),
			НСтр("ru = 'Продажа не облагается НДС'"));
			
		ДобавитьУсловиеПоПредложению(ПодстрокиУсловия, "Оплата", ТекущиеДанные.ПоляДляСравненияУсловий.УсловияОплатыТекст);
		ДобавитьУсловиеПоПредложению(ПодстрокиУсловия, "Доставка", ТекущиеДанные.ПоляДляСравненияУсловий.УсловияПоставкиТекст);
		ДобавитьУсловиеПоПредложению(ПодстрокиУсловия, "Налогообложение", Налогообложение);
		ДобавитьУсловиеПоПредложению(ПодстрокиУсловия, "Прочее", ТекущиеДанные.ПоляДляСравненияУсловий.УсловиеПрочееТекст);
	КонецЕсли;
	
	Если ТекущиеДанные.ПроцентСкидки > 0 Тогда
		ДобавитьУсловиеПоПредложению(ПодстрокиУсловия, "Ценообразование", СтрШаблон(НСтр("ru = 'Предоставлена скидка %1'"),
			Формат(ТекущиеДанные.ПроцентСкидки,"ЧЦ=3; ЧДЦ=0; ЧФ=Ч%")));
	КонецЕсли;
	
	ПодстрокиУсловия.Добавить("</BODY></HTML>'");
	
	Если ПодстрокиУсловия.Количество() <=2 Тогда
		Условия = "";
		
		Возврат;
	КонецЕсли;
	
	Условия = НСтр(СтрСоединить(ПодстрокиУсловия, Символы.ПС));
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьУсловиеПоПредложению(ПодстрокиУсловия, Представление, Текст)
	
	Если ПустаяСтрока(Текст) Тогда
		Возврат;
	КонецЕсли;
	
	ПодстрокиУсловия.Добавить(
		СтрШаблон("<P><FONT face=Arial><FONT size=2><FONT color=#1c55ae><STRONG>%1:</STRONG></FONT><BR>%2</FONT></FONT></P>",
		Представление, Текст));
	
КонецПроцедуры

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

	СформироватьЗаголовокИтоги(ЭтотОбъект);

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

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

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

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

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


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

&НаКлиенте
Процедура НачатьПолучениеСпискаПредложений()
	

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

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

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

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

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

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

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат.Статус = "Выполнено" Тогда
		
		ЗаполнитьДанныеТорговогоПредложения(Результат.АдресРезультата);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

	КонецЦикла;
	
	СформироватьЗаголовокИтоги(ЭтотОбъект);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИсточникиПриАктивизацииЯчейки(Элемент)
	
	Если Источники.Количество() > 1 И Элемент.ТекущийЭлемент = Элементы.ИсточникиПоказатьЕще Тогда
		
		Элементы.Источники.ТекущаяСтрока = Источники[Источники.Количество() - 2].ПолучитьИдентификатор();
		Источники.Удалить(Источники.Количество() - 1);
		
		Элемент.ТекущийЭлемент = Элементы.ИсточникиПоставщикНаименование;
		Страница = Страница + 1;
		
		НачатьПоискТорговыхПредложений();
		
	КонецЕсли;

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

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

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

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

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

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

	ВыполнитьСохранениеИзмененийВДокументахВФоне(Источники, ПараметрыОперации);
	
	Модифицированность = Ложь;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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