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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПолучитьДоступныеИсточники()

	Источники = Неопределено;
	
	КоммерческиеПредложенияДокументы.АнализируемыеИсточникиПредложений(Источники);
	
	АнализируемыеИсточникиПредложений.Загрузить(Источники);
	
	Возврат Источники.ВыгрузитьКолонку("ИмяИсточника");

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

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

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

&НаСервере
Процедура УстановитьФлагиГрупп()

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

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

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

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

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