Шаблоны анкет / Форма простых вопросов / Модуль формы

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	УстановитьДоступностьПризнакаФормулировкаОтказаОтОтвета();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Функция СформироватьСтруктуруПараметровДляПередачиВладельцу()

	СтруктураВозврата = Новый Структура;
	СтруктураВозврата.Вставить("Обязательный", Обязательный);
	СтруктураВозврата.Вставить("Формулировка", Формулировка);
	СтруктураВозврата.Вставить("ЭлементарныйВопрос", ЭлементарныйВопрос);
	СтруктураВозврата.Вставить("Заметки", Заметки);
	СтруктураВозврата.Вставить("ЭтоНоваяСтрока", Ложь);
	СтруктураВозврата.Вставить("Подсказка", Подсказка);
	СтруктураВозврата.Вставить("СпособОтображенияПодсказки", СпособОтображенияПодсказки);
	СтруктураВозврата.Вставить("ИспользоватьОтказОтОтвета", ИспользоватьОтказОтОтвета);
	СтруктураВозврата.Вставить("ФормулировкаОтказаОтОтвета", ?(ИспользоватьОтказОтОтвета,
		ФормулировкаОтказаОтОтвета, ""));
	
	Возврат СтруктураВозврата;

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

&НаСервереБезКонтекста
Функция РеквизитыВопроса(Вопрос)
	
	Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Вопрос,"ЭтоГруппа,ТипОтвета,Формулировка");
	
КонецФункции

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

&НаКлиенте
Процедура УстановитьДоступностьПризнакаФормулировкаОтказаОтОтвета()
	
	Элементы.ФормулировкаОтказаОтОтвета.Доступность = ИспользоватьОтказОтОтвета;
	
КонецПроцедуры

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

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