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