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

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

Сформировать таблицу подчинения вопросов. Формирует таблицу подчинения вопросов.

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

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

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

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

СформироватьТаблицуРегламентныхЗаданий (БСП)

СформироватьОписаниеКолонок (БСП)

СоздатьВременнуюТаблицуЗначенийЗаблокированныхИзмерений (БСП)

ЭтоПодчиненныйУзелРИБ (БСП)

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

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

Вопрос по OneTracker

Структура подчиненности

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

TurboConf ИР адаптер 1.72