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