#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт
Результат = Новый Массив;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВопросыДляАнкетирования.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ВопросыДляАнкетирования КАК ВопросыДляАнкетирования
|ГДЕ
| (ВопросыДляАнкетирования.ВидПереключателя = ЗНАЧЕНИЕ(Перечисление.ВидыПереключателяВАнкетах.ПустаяСсылка)
| ИЛИ ВопросыДляАнкетирования.ВидФлажка = ЗНАЧЕНИЕ(Перечисление.ВидыФлажкаВАнкетах.ПустаяСсылка)
| ИЛИ ВопросыДляАнкетирования.МинимальноеЗначение <> 0
| И НЕ ВопросыДляАнкетирования.ИспользоватьМинимальноеЗначение
| ИЛИ ВопросыДляАнкетирования.МаксимальноеЗначение <> 0
| И НЕ ВопросыДляАнкетирования.ИспользоватьМаксимальноеЗначение)
| И НЕ ВопросыДляАнкетирования.ЭтоГруппа";
Результат = Запрос.Выполнить().Выгрузить();
МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "ПланВидовХарактеристик.ВопросыДляАнкетирования");
ПроблемныхОбъектов = 0;
ОбъектовОбработано = 0;
Пока Выборка.Следующий() Цикл
ПредставлениеСсылки = Строка(Выборка.Ссылка);
Попытка
ЗаполнитьНовыеРеквизиты(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
Исключение
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
ОбновлениеИнформационнойБазы.ЗаписатьОшибкуВЖурналРегистрации(
Выборка.Ссылка,
ПредставлениеСсылки,
ИнформацияОбОшибке());
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "ПланВидовХарактеристик.ВопросыДляАнкетирования");
Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать некоторые вопросы для анкетирования (пропущены): %1'"),
ПроблемныхОбъектов);
ВызватьИсключение ТекстСообщения;
Иначе
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,
Метаданные.ПланыВидовХарактеристик.ВопросыДляАнкетирования,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Обработана очередная порция вопросов для анкетирования: %1'"),
ОбъектовОбработано));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьНовыеРеквизиты(ВопросДляАнкетирования)
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("ПланВидовХарактеристик.ВопросыДляАнкетирования");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВопросДляАнкетирования);
Блокировка.Заблокировать();
Объект = ВопросДляАнкетирования.ПолучитьОбъект();
Если Объект.ВидПереключателя = Перечисления.ВидыПереключателяВАнкетах.ПустаяСсылка() Тогда
Объект.ВидПереключателя = Перечисления.ВидыПереключателяВАнкетах.Переключатель;
КонецЕсли;
Если Объект.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.ПустаяСсылка() Тогда
Объект.ВидФлажка = Перечисления.ВидыФлажкаВАнкетах.Флажок;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.МинимальноеЗначение) Тогда
Объект.ИспользоватьМинимальноеЗначение = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.МаксимальноеЗначение) Тогда
Объект.ИспользоватьМаксимальноеЗначение = Истина;
КонецЕсли;
ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
#КонецОбласти
#КонецЕсли