ОбновитьПревьюТабличныйВопрос (БСП)

Автор: 1С
ОбщийМодуль.Анкетирование
БСП

Обновить превью табличный вопрос. Обновляет превью табличного вопроса.

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

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПолучитьПредставленияЭлементарныхВопросовТабличногоВопроса (БСП)

ОтправлятьПревью (БСП)

ПолучитьПревьюРасширенийВФоне (БСП)

ОбновитьКонтактнуюИнформациюДляСписков (БСП)

Задать вопрос

Вопрос по OneTracker

СформироватьТаблицуПодчиненияВопросов (БСП)

ПоказатьВопросПользователю (БСП)

ПараметрыВопросаПодтвержденияСкрытия (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз