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