3_1_10_248

This commit is contained in:
Компания 1С committed 2024-07-24 15:02:00 +03:00
1 parent a515946322
commit 878354f176
210 files changed
+10526 -3264

No files matched your search

@@ -76,6 +76,16 @@
Для Каждого Расширение Из РасширенияБазыДанных Цикл
КонтрольнаяСумма = КонтрольнаяСуммаРасширения(Расширение);
РасширениеПриЗапуске = РасширенияПриЗапуске.Получить(КонтрольнаяСумма);
Если РасширениеПриЗапуске = Неопределено Тогда
Ошибки = Расширение.ПроверитьВозможностьПрименения();
Для Каждого Ошибка Из Ошибки Цикл
Если Ошибка.Важность = ВажностьПроблемыПримененияРасширенияКонфигурации.Критичная Тогда
РасширенияПриЗапуске.Вставить(КонтрольнаяСумма, Расширение);
РасширениеПриЗапуске = Расширение;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если РасширениеПриЗапуске <> Неопределено Тогда
ДобавленныеРасширения.Вставить(КонтрольнаяСумма, Истина);
Расширения.Добавить(РасширениеПриЗапуске);
@@ -16,13 +16,13 @@
#КонецОбласти
// *Область ПрограммныйИнтерфейс.
// Область ПрограммныйИнтерфейс.
//
// Программный интерфейс объекта реализован через ДополнительныеСвойства:
// Программный интерфейс объекта реализован через ДополнительныеСвойства.
//
// ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи.
//
// *КонецОбласти
// КонецОбласти
#Область ОбработчикиСобытий
@@ -156,7 +156,7 @@
ГруппаПоСсылкеНового = Выборка.Ссылка;
ИначеЕсли Выборка.Наименование = НаименованиеГруппы
И ГруппаПоНаименованию = Неопределено Тогда
ГруппаПоНаименованию = НаименованиеГруппы;
ГруппаПоНаименованию = Выборка.Ссылка;
КонецЕсли;
КонецЦикла;
@@ -366,7 +366,7 @@
Иначе
// Выбор объектов метаданных
ПараметрыФормы = ПодготовитьПараметрыФормыВыборОбъектовМетаданных();
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
@@ -1173,10 +1173,10 @@
ВыбранныеОбъектыМетаданных.Добавить(КлючИЗначение.Значение);
КонецЦикла;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФильтрПоОбъектамМетаданных", ФильтрПоОбъектамМетаданных);
ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъектыМетаданных);
ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Назначение дополнительной обработки'"));
ПараметрыФормы = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыФормы.ФильтрПоОбъектамМетаданных = ФильтрПоОбъектамМетаданных;
ПараметрыФормы.ВыбранныеОбъектыМетаданных = ВыбранныеОбъектыМетаданных;
ПараметрыФормы.Заголовок = НСтр("ru = 'Назначение дополнительной обработки'");
Возврат ПараметрыФормы;
КонецФункции
@@ -3637,6 +3637,16 @@
<name>СертификатДоверителя</name>
<valueType/>
</parameters>
<parameters>
<name>НаДату</name>
<valueType>
<types>Date</types>
<dateQualifiers>
<dateFractions>Date</dateFractions>
</dateQualifiers>
</valueType>
<keyParameter>true</keyParameter>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -30,7 +30,15 @@
Доверитель = ?(ЗначениеЗаполнено(Параметры.Доверитель), Параметры.Доверитель, Доверитель);
Представитель = ?(ЗначениеЗаполнено(Параметры.Представитель), Параметры.Представитель, Представитель);
Полномочия = ?(ЗначениеЗаполнено(Параметры.Полномочия), Параметры.Полномочия, Полномочия);
Сертификат = ?(ТипЗнч(СертификатПредставителя) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования"), СертификатПредставителя, Неопределено);
Если ТипЗнч(СертификатПредставителя) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
Сертификат = СертификатПредставителя;
ИначеЕсли ТипЗнч(СертификатПредставителя) = Тип("ДвоичныеДанные") Или ЭтоАдресВременногоХранилища(СертификатПредставителя) Тогда
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатПредставителя);
Сертификат = СвойстваСертификата.Представление;
Иначе
Сертификат = Неопределено;
КонецЕсли;
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
@@ -372,7 +380,13 @@
&НаКлиенте
Процедура УстановитьОтбор()
Если ЗначениеЗаполнено(Параметры.НаДату) Тогда
ТекущаяДатаСеанса = КонецДня(Параметры.НаДату);
Иначе
ТекущаяДатаСеанса = КонецДня(ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "Действует", Истина, ВидСравненияКомпоновкиДанных.Равно,,ТолькоДействующие);
УстановитьОтборСоСтрокойПоиска(Доверитель, "Доверитель");
УстановитьОтборСоСтрокойПоиска(Представитель, "Представитель");
@@ -453,13 +467,14 @@
КонецЕсли;
Элементы.Список.Обновить();
Элементы.Список.ТекущаяСтрока = Результат.Доверенность;
Элементы.Список.ВыделенныеСтроки.Очистить();
Для Каждого Ссылка Из Результат.ЦепочкаДоверенностей Цикл
Элементы.Список.ВыделенныеСтроки.Добавить(Ссылка);
КонецЦикла;
Элементы.Список.ТекущаяСтрока = Результат.Доверенность;
Если Результат.ЦепочкаДоверенностей.Количество() = 1 Тогда
ПоказатьЗначение(Неопределено, Результат.Доверенность);
Иначе
@@ -592,14 +607,14 @@
Элементы.Список.Обновить();
Элементы.Список.ВыделенныеСтроки.Очистить();
Если ЗагруженныеДоверенности.Количество() > 0 Тогда
Элементы.Список.ТекущаяСтрока = ЗагруженныеДоверенности[0];
КонецЕсли;
Для Каждого Ссылка Из ЗагруженныеДоверенности Цикл
Элементы.Список.ВыделенныеСтроки.Добавить(Ссылка);
КонецЦикла;
Если ЗагруженныеДоверенности.Количество() > 0 Тогда
Элементы.Список.ТекущаяСтрока = ЗагруженныеДоверенности[0];
КонецЕсли;
Если ЗначениеЗаполнено(РезультатЗагрузки.ТекстОшибки) Тогда
ВызватьИсключение РезультатЗагрузки.ТекстОшибки;
КонецЕсли;
@@ -1099,6 +1099,10 @@
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не заполнены полномочия.'"),,,,Отказ);
КонецЕсли;
Если Объект.ДляНалоговыхОрганов И Не ЗначениеЗаполнено(Объект.КодНалоговогоОрганаПредставления) Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не указан код налогового органа представления.'"),,,"Объект.КодНалоговогоОрганаПредставления", Отказ);
КонецЕсли;
Если СтрДлина(Объект.ИныеСведения) > 5000 Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Иные сведения не должны превышать 5000 символов.'"),,,"Объект.ИныеСведения", Отказ);
КонецЕсли;
@@ -937,6 +937,8 @@
ФайлыДоверенностей = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Доверенности, "ФайлДоверенности");
ОписанияФайловДоверенностей = Новый Соответствие;
Для Каждого Доверенность Из Доверенности Цикл
ФайлыДоверенности = Новый Массив;
ФайлДоверенности = ФайлыДоверенностей[Доверенность];
@@ -972,10 +974,10 @@
ФайлыДоверенности.Добавить(ОписаниеФайла);
КонецЦикла;
ФайлыДоверенностей.Вставить(Доверенность, ФайлыДоверенности);
ОписанияФайловДоверенностей.Вставить(Доверенность, ФайлыДоверенности);
КонецЦикла;
Возврат ФайлыДоверенностей;
Возврат ОписанияФайловДоверенностей;
КонецФункции
@@ -1470,17 +1472,26 @@
КонецПроцедуры
// Создает новые либо перезаполняет существующие элементы справочника МашиночитаемыеДоверенности данными из файлов.
// Распределяет файлы по группам с целью поиска файлов доверенностей.
//
// Параметры:
// ЗагруженныеФайлы - Массив из Структура - файлы доверенностей и подписей, архивы zip:
// * ИмяФайла - Строка - имя файла без пути к нему,
// * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
//
// Замещать - Булево - при замещении выполняется перезаполнение элемента, все имеющиеся присоединенные файлы при этом
// помечаются на удаление.
// Возвращаемое значение:
// Структура - уже разобранные файлы доверенностей и подписей:
// * ФайлыДоверенностей - Соответствие - файлы доверенностей
// * ПодписиФайлов - Соответствие - файлы подписей доверенностей
// * ФайлыПодписей - Соответствие - другие файлы подписей
// * ФайлыZIP - Соответствие - архивы
// * ДругиеФайлы - Соответствие - файлы, не относящиеся к доверенностям
//
Функция ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать = Ложь) Экспорт
Функция ФайлыДоверенностейИПодписей(ФайлыДляОбработки, УникальныйИдентификатор = Неопределено)
ЗагруженныеФайлы = ОбщегоНазначения.СкопироватьРекурсивно(ФайлыДляОбработки);
Результат = Новый Структура("ФайлыДоверенностей, ФайлыПодписей, ДругиеФайлы, ФайлыZIP, ПодписиФайлов");
ФайлыДоверенностей = Новый Соответствие;
ФайлыПодписей = Новый Соответствие;
@@ -1496,7 +1507,7 @@
Для Каждого ФайлИзАрхива Из ФайлыИзАрхива Цикл
Файл = Новый Файл(ФайлИзАрхива.Ключ);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ФайлИзАрхива.Значение);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ФайлИзАрхива.Значение, УникальныйИдентификатор);
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("ИмяФайла", Файл.Имя);
@@ -1525,6 +1536,40 @@
ПодписиФайлов = ПодписиФайлов(ЗагруженныеФайлы, ФайлыПодписей);
СгруппироватьФайлыПоДоверенностям(ФайлыДоверенностей, ДругиеФайлы);
Результат.ФайлыДоверенностей = ФайлыДоверенностей;
Результат.ФайлыПодписей = ФайлыПодписей;
Результат.ФайлыZIP = ФайлыZIP;
Результат.ДругиеФайлы = ДругиеФайлы;
Результат.ПодписиФайлов = ПодписиФайлов;
Возврат Результат;
КонецФункции
// Создает новые либо перезаполняет существующие элементы справочника МашиночитаемыеДоверенности данными из файлов.
//
// Параметры:
// ЗагруженныеФайлы - Массив из Структура - файлы доверенностей и подписей, архивы zip:
// * ИмяФайла - Строка - имя файла без пути к нему,
// * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
// - Структура - уже разобранные файлы доверенностей и подписей:
// * ФайлыДоверенностей - Соответствие
// * ПодписиФайлов - Соответствие
//
// Замещать - Булево - при замещении выполняется перезаполнение элемента, все имеющиеся присоединенные файлы при этом
// помечаются на удаление.
//
Функция ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать = Ложь) Экспорт
Если ТипЗнч(ЗагруженныеФайлы) = Тип("Структура") Тогда
Результат = ЗагруженныеФайлы;
Иначе
Результат = ФайлыДоверенностейИПодписей(ЗагруженныеФайлы);
КонецЕсли;
ФайлыДоверенностей = Результат.ФайлыДоверенностей;
ПодписиФайлов = Результат.ПодписиФайлов;
Доверенности = Новый Массив;
ТекстыОшибок = Новый Массив;
@@ -1690,6 +1735,145 @@
КонецФункции
Функция СвойстваДоверенностейИзФайлов(ЗагруженныеФайлы, УникальныйИдентификатор) Экспорт
ФайлыДоверенностейИПодписей = ФайлыДоверенностейИПодписей(ЗагруженныеФайлы, УникальныйИдентификатор);
Доверенности = Новый Массив;
ТекстыОшибок = Новый Массив;
ДругиеФайлы = Новый Соответствие;
КоличествоПропущенных = 0;
КоличествоПрочитанных = 0;
Для Каждого Элемент Из ФайлыДоверенностейИПодписей.ФайлыДоверенностей Цикл
ЗагруженныйФайл = Элемент.Ключ;
ИмяФайла = ЗагруженныйФайл.ИмяФайла;
АдресФайла = ЗагруженныйФайл.Хранение;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
ДоверенностьXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
Попытка
ОписаниеДоверенности = ДоверенностьXDTO(ДоверенностьXML);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось прочитать файл %1 по причине:
|%2'"),
ИмяФайла,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ТекстыОшибок.Добавить(ТекстОшибки);
Продолжить;
КонецПопытки;
Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Довер.СвДов.НомДовер;
Иначе
ЕдиныйРегистрационныйНомер = ОписаниеДоверенности.Документ.Передов.СвПереДовер.НомДовер;
КонецЕсли;
//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
Доверенность = НайтиДоверенность(ЕдиныйРегистрационныйНомер);
ИННПредставителей = Новый Массив;
Если Доверенность = Неопределено Тогда
Объект = СоздатьЭлемент();
Если ОписаниеДоверенности.Документ.Передов = Неопределено Тогда
ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
Иначе
//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
КонецЕсли;
Доверенность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 - %2 (будет загружена)'"),
АвтоНаименование(Объект), ЕдиныйРегистрационныйНомер);
МассивПредставителей = Новый Массив;
Представители = Объект.Представители.Выгрузить();
Найдено = Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
Для Каждого СтрокаОрганизация Из Найдено Цикл
РеквизитыОрганизации = СтрокаОрганизация.ПредставительРеквизиты.Получить();
Если РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
Если ЗначениеЗаполнено(РеквизитыОрганизации.ИННФЛ) Тогда
ИННПредставителей.Добавить(РеквизитыОрганизации.ИННФЛ);
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(РеквизитыОрганизации.ИНН) Тогда
ИННПредставителей.Добавить(РеквизитыОрганизации.ИНН);
КонецЕсли;
НайденоФизическиеЛица = Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
СтрокаОрганизация.Идентификатор));
Для Каждого СтрокаФизическоеЛицо Из НайденоФизическиеЛица Цикл
Если ЗначениеЗаполнено(СтрокаФизическоеЛицо.ИННФЛ) Тогда
ИННПредставителей.Добавить(СтрокаФизическоеЛицо.ИННФЛ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СвойстваДоверенности = Новый Структура;
СвойстваДоверенности.Вставить("ИмяФайла", ИмяФайла);
СвойстваДоверенности.Вставить("АдресФайла", АдресФайла);
СвойстваДоверенности.Вставить("МашиночитаемаяДоверенность", Доверенность);
СвойстваДоверенности.Вставить("НомерДоверенности", ЕдиныйРегистрационныйНомер);
СвойстваДоверенности.Вставить("ПоляОтбора", СтрСоединить(ИННПредставителей, ";"));
ФайлыДоверенности = Новый Массив;
ФайлыДоверенности.Добавить(Элемент.Ключ);
ДругиеФайлы.Вставить(ИмяФайла, Истина);
Для Каждого ДополнительныйФайл Из Элемент.Значение Цикл
ДругиеФайлы.Вставить(ДополнительныйФайл.ИмяФайла, Истина);
ФайлыДоверенности.Добавить(ДополнительныйФайл);
КонецЦикла;
ПодписиФайлов = ФайлыДоверенностейИПодписей.ПодписиФайлов.Получить(Элемент.Ключ);
Если ПодписиФайлов <> Неопределено Тогда
Для Каждого Подпись Из ПодписиФайлов Цикл
ДругиеФайлы.Вставить(Подпись.ИмяФайла, Истина);
ФайлыДоверенности.Добавить(Подпись);
КонецЦикла;
КонецЕсли;
СвойстваДоверенности.Вставить("ФайлыДоверенности", ПоместитьВоВременноеХранилище(ФайлыДоверенности, УникальныйИдентификатор));
Доверенности.Добавить(СвойстваДоверенности);
КонецЦикла;
Для Каждого КлючИЗначение Из ФайлыДоверенностейИПодписей.ФайлыZIP Цикл
ДругиеФайлы.Вставить(КлючИЗначение.Ключ.ИмяФайла, Истина);
ПодписиФайлов = ФайлыДоверенностейИПодписей.ПодписиФайлов.Получить(КлючИЗначение.Ключ);
Если ПодписиФайлов <> Неопределено Тогда
Для Каждого Подпись Из ПодписиФайлов Цикл
ДругиеФайлы.Вставить(Подпись.ИмяФайла, Истина);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Результат = Новый Структура;
Результат.Вставить("Доверенности", Доверенности);
Результат.Вставить("ТекстыОшибок", ТекстыОшибок);
Результат.Вставить("ДругиеФайлы", ДругиеФайлы);
Возврат Результат;
КонецФункции
Процедура СгруппироватьФайлыПоДоверенностям(ФайлыДоверенностей, ДругиеФайлы)
Для Каждого Элемент Из ДругиеФайлы Цикл
@@ -1781,6 +1965,9 @@
ПрисоединенныйФайл = ДобавитьПрисоединенныйФайл(Доверенность, ИмяФайла, АдресФайла);
ПодписиФайла = ПодписиФайлов[ЗагруженныйФайл];
Если ПодписиФайла = Неопределено Тогда
Продолжить;
КонецЕсли;
ДобавитьПодписи(ПрисоединенныйФайл, ПодписиФайла, Доверенность);
КонецЦикла;
@@ -745,11 +745,15 @@
ДанныеНаименования = СтрРазделить(ВыбранноеЗначение, " ", Ложь);
Элементы.Наименование.ОбновитьТекстРедактирования();
Если ДанныеНаименования.Количество() < 3 Тогда
Элементы.Наименование.ВыделенныйТекст = ВыбранноеЗначение + " ";
НовоеЗначение = ВыбранноеЗначение + " ";
Иначе
Элементы.Наименование.ВыделенныйТекст = ВыбранноеЗначение;
НовоеЗначение = ВыбранноеЗначение;
ПропуститьНаименованиеАвтоПодбор = Истина;
КонецЕсли;
Элементы.Наименование.ВыделенныйТекст = НовоеЗначение;
Если Объект.Наименование <> НовоеЗначение Тогда
Объект.Наименование = ВыбранноеЗначение;
КонецЕсли;
ПропуститьНаименованиеПриИзменении = Ложь;
@@ -18,9 +18,9 @@
#КонецОбласти
// *Область ПрограммныйИнтерфейс.
// Область ПрограммныйИнтерфейс.
//
// Программный интерфейс объекта реализован через ДополнительныеСвойства:
// Программный интерфейс объекта реализован через ДополнительныеСвойства.
//
// ОписаниеПользователяИБ - Структура со свойствами:
// Действие - Строка - "Записать" или "Удалить".
@@ -79,7 +79,7 @@
// Это нужно, чтобы сделать связанные действия при создании администратора, например,
// автоматически добавить пользователя в группу доступа Администраторы.
//
// *КонецОбласти
// КонецОбласти
#Область ОбработчикиСобытий
@@ -2305,10 +2305,7 @@
// Параметры:
// Результат - Структура:
// * Получатели - ТаблицаЗначений:
// * Получатель - СправочникСсылка.ГруппыПользователей,
// - СправочникСсылка._ДемоКонтрагенты,
// - СправочникСсылка._ДемоПартнеры,
// - СправочникСсылка.Пользователи
// * Получатель - ОпределяемыйТип.ПолучательРассылки
// * Исключен - Булево
// * Адрес - Строка
// * ИндексКартинки - Число
@@ -2882,9 +2879,11 @@
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно отключить пароли.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьПароли";
КонецЕсли;
Если ДоступноШифрованиеВложений Или Объект.Архивировать Тогда
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
ИначеЕсли Объект.Личная Тогда
@@ -748,6 +748,7 @@
Если ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра)
И Не РезультатПроверкиУдостоверяющегоЦентра.Действует Тогда
Если РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.РазрешитьПодписание Тогда
ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
@@ -768,6 +769,9 @@
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ПредупреждениеОбОшибке.ТекстОшибки, Кнопки, ПараметрыВопроса);
Возврат;
КонецЕсли;
Иначе
ПодписаниеРазрешено = Ложь;
КонецЕсли;
ПодписатьДанныеПослеОтветаНаВопросОбУЦ(ПодписаниеРазрешено, Контекст);
Возврат;
@@ -673,7 +673,9 @@
КонецЕсли;
Элементы.Предупреждение.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
Если ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда
Если ДанныеПредупреждения.РазрешитьПодписание
И ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда
НастройкаРазрешитьПодписание = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Объект.Ссылка, "РазрешитьПодписание", Неопределено);
Элементы.ПодписаниеРазрешено.Видимость = Истина;
@@ -4249,6 +4249,20 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>ИмяФайлаПодписи</name>
<id>38</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>СертификатыШифрования</name>
@@ -720,7 +720,17 @@
КонецЕсли;
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
МодульЭлектроннаяПодписьКлиент.СохранитьПодпись(ТекущиеДанные.АдресПодписи);
ИмяФайлаПодписи = ТекущиеДанные.ИмяФайлаПодписи;
Если Не ЗначениеЗаполнено(ИмяФайлаПодписи) Тогда
РасширениеДляФайловПодписи = МодульЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи;
МодульЭлектроннаяПодписьСлужебныйКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйКлиентСервер");
ИмяФайлаПодписи = МодульЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаПодписи(Объект.Наименование,
ТекущиеДанные.КомуВыданСертификат, РасширениеДляФайловПодписи);
КонецЕсли;
МодульЭлектроннаяПодписьКлиент.СохранитьПодпись(ТекущиеДанные.АдресПодписи, ИмяФайлаПодписи);
КонецПроцедуры
@@ -1135,6 +1145,9 @@
Если Форма.ЭлектронныеПодписи.Количество() = 0 Тогда
СделатьКомандуНедоступной(ИменаДоступныхКоманд, "ОткрытьПодпись");
Форма.Элементы.ФормаСохранитьВместеСПодписью.Видимость = Ложь;
Иначе
Форма.Элементы.ФормаСохранитьВместеСПодписью.Видимость = Истина;
КонецЕсли;
Для Каждого ЭлементФормы Из Элементы Цикл
@@ -116,6 +116,24 @@
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
<attributes uuid="ec37d236-db36-44ef-afc2-267af1f40c1f">
<name>АдресЛичногоКабинета</name>
<synonym>
<key>ru</key>
<value>Адрес личного кабинета</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>250</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="913830c8-da01-4b7e-9d83-d406c2fefd49">
<name>АдресСервера</name>
<synonym>
@@ -135,6 +153,44 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="293cda8c-1cc8-42c0-a68f-d22163aed4f1">
<name>ВерсияАПИ</name>
<synonym>
<key>ru</key>
<value>Версия</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="d835f08d-79c6-4e79-a7c1-f00dc05778b9">
<name>ВнутреннийИдентификатор</name>
<synonym>
<key>ru</key>
<value>Внутренний идентификатор</value>
</synonym>
<comment>Данное поле заполняется программно, элементы с заполненным полем блокируются от изменения.</comment>
<type>
<types>String</types>
<stringQualifiers>
<length>40</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="653dbf7d-a213-42c7-98da-9e639f41bb02">
<name>ЗащищенноеСоединениеГОСТ</name>
<synonym>
@@ -150,41 +206,21 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171">
<name>ТаймАут</name>
<attributes uuid="8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5">
<name>ИдентификаторСЭП</name>
<synonym>
<key>ru</key>
<value>Тайм-аут (сек.)</value>
</synonym>
<type>
<types>Number</types>
<numberQualifiers>
<precision>4</precision>
<nonNegative>true</nonNegative>
</numberQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:NumberValue">
<value>0</value>
</fillValue>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="9f1c8979-2b3d-4a96-af6c-4577541696a3">
<name>ШаблонПодтверждения</name>
<synonym>
<key>ru</key>
<value>Шаблон подтверждения</value>
<value>Идентификатор СЭП</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>30</length>
<length>100</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
@@ -208,21 +244,35 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5">
<name>ИдентификаторСЭП</name>
<attributes uuid="ee0275e4-a497-4623-9d2f-6308ea2e70ca">
<name>Используется</name>
<synonym>
<key>ru</key>
<value>Идентификатор СЭП</value>
<value>Используется</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:BooleanValue">
<value>true</value>
</fillValue>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="5e48841c-0a65-457f-8952-fa97aae3207d">
<name>Комментарий</name>
<synonym>
<key>ru</key>
<value>Комментарий</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>100</length>
</stringQualifiers>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
@@ -264,6 +314,24 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="f0cebe1f-8b1a-482c-9224-63df4fd36524">
<name>СервисныйКлиент</name>
<synonym>
<key>ru</key>
<value>Сервисный клиент</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>100</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="00ce0cd2-9840-49a0-b9df-dc64becd3e65">
<name>СервисОбработкиДокументов</name>
<synonym>
@@ -319,87 +387,37 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="293cda8c-1cc8-42c0-a68f-d22163aed4f1">
<name>ВерсияАПИ</name>
<attributes uuid="ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171">
<name>ТаймАут</name>
<synonym>
<key>ru</key>
<value>Версия</value>
<value>Тайм-аут (сек.)</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
<types>Number</types>
<numberQualifiers>
<precision>4</precision>
<nonNegative>true</nonNegative>
</numberQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="5e48841c-0a65-457f-8952-fa97aae3207d">
<name>Комментарий</name>
<synonym>
<key>ru</key>
<value>Комментарий</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers/>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="ee0275e4-a497-4623-9d2f-6308ea2e70ca">
<name>Используется</name>
<synonym>
<key>ru</key>
<value>Используется</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:BooleanValue">
<value>true</value>
<fillValue xsi:type="core:NumberValue">
<value>0</value>
</fillValue>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="ec37d236-db36-44ef-afc2-267af1f40c1f">
<name>АдресЛичногоКабинета</name>
<attributes uuid="9f1c8979-2b3d-4a96-af6c-4577541696a3">
<name>ШаблонПодтверждения</name>
<synonym>
<key>ru</key>
<value>Адрес личного кабинета</value>
<value>Шаблон подтверждения</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>250</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="d835f08d-79c6-4e79-a7c1-f00dc05778b9">
<name>ВнутреннийИдентификатор</name>
<synonym>
<key>ru</key>
<value>Внутренний идентификатор</value>
</synonym>
<comment>Данное поле заполняется программно, элементы с заполненным полем блокируются от изменения.</comment>
<type>
<types>String</types>
<stringQualifiers>
<length>40</length>
<length>30</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
@@ -6,34 +6,6 @@
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// ИСПОЛЬЗОВАНИЕ ФОРМЫ //
//
// Форма предназначена для выбора объектов метаданных конфигурации и передачи
// выбранных их списка в вызывающую среду.
//
// Параметры вызова:
// КоллекцииВыбираемыхОбъектовМетаданных - СписокЗначений - фильтр по типам объектов метаданных,
// которые могут быть выбраны. Например:
// ФильтрПоСсылочнымМетаданным = Новый СписокЗначений;
// ФильтрПоСсылочнымМетаданным.Добавить("Справочники");
// ФильтрПоСсылочнымМетаданным.Добавить("Документы");
// Позволяет выбирать только объекты метаданных справочники и документы.
// ВыбранныеОбъектыМетаданных - СписокЗначений - уже выбранные объекты метаданных.
// В дереве метаданных такие объекты будут отмечены флажком.
// Может быть полезным для установки объектов метаданных выбора по умолчанию
// или переустановки уже установленного списка.
// РодительскиеПодсистемы - СписокЗначений - подсистемы, только подчиненные подсистемы которых
// будут отображаться в форме.
// ТолькоПодсистемыСКИ - Булево - признак того, что в списке выбора будут только те подсистемы,
// которые включены в командный интерфейс.
// ВыборЕдинственного - Булево - признак того, что выбирается единственный объект метаданных.
// При этом пометка нескольких будет невозможна, кроме того двойной клик по строке
// с объектом метаданных осуществит выбор.
// НачальноеЗначениеВыбора - Строка - полное имя метаданных, на котором будет спозиционирован
// список при открытии формы.
//
#Область ОписаниеПеременных
&НаСервере
@@ -202,6 +202,60 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ПодписиМашиночитаемаяДоверенность</name>
<id>54</id>
<title>
<key>ru</key>
<value>Машиночитаемая доверенность</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Подписи.МашиночитаемаяДоверенность</segments>
</dataPath>
<extendedTooltip>
<name>ПодписиМашиночитаемаяДоверенностьРасширеннаяПодсказка</name>
<id>56</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПодписиМашиночитаемаяДоверенностьКонтекстноеМеню</name>
<id>55</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>AutoComplete</event>
<name>ПодписиМашиночитаемаяДоверенностьАвтоПодбор</name>
</handlers>
<handlers>
<event>StartChoice</event>
<name>ПодписиМашиночитаемаяДоверенностьНачалоВыбора</name>
</handlers>
<width>40</width>
<autoMaxWidth>true</autoMaxWidth>
<height>2</height>
<wrap>true</wrap>
<choiceButton>true</choiceButton>
<choiceButtonRepresentation>ShowInInputField</choiceButtonRepresentation>
<quickChoice>false</quickChoice>
<typeDomainEnabled>true</typeDomainEnabled>
<textSize>Normal</textSize>
</extInfo>
</items>
<autoCommandBar>
<name>ПодписиКоманднаяПанель</name>
<id>3</id>
@@ -210,7 +264,7 @@
<id>17</id>
<title>
<key>ru</key>
<value>Добавить ...</value>
<value>Выбрать файлы с компьютера...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
@@ -363,7 +417,7 @@
<id>8</id>
<title>
<key>ru</key>
<value>ОК</value>
<value>Добавить</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
@@ -501,6 +555,55 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>МашиночитаемаяДоверенность</name>
<title>
<key>ru</key>
<value>Машиночитаемая доверенность</value>
</title>
<id>9</id>
<valueType>
<types>CatalogRef.МашиночитаемыеДоверенности</types>
<types>String</types>
<stringQualifiers>
<length>500</length>
</stringQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ПоляОтбора</name>
<id>23</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>НомерДоверенности</name>
<id>27</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>МенеджерКриптографииНаСервереОписаниеОшибки</name>
@@ -531,6 +634,106 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>Доверенности</name>
<id>6</id>
<valueType>
<types>ValueTable</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<columns>
<name>МашиночитаемаяДоверенность</name>
<id>7</id>
<valueType>
<types>CatalogRef.МашиночитаемыеДоверенности</types>
<types>String</types>
<stringQualifiers>
<length>500</length>
</stringQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ИмяФайла</name>
<id>11</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>НомерДоверенности</name>
<id>12</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ФайлыДоверенности</name>
<id>25</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ПоляОтбора</name>
<id>26</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>ОшибкиПриЗагрузкеДоверенностей</name>
<id>8</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ОК</name>
<title>
@@ -553,6 +756,24 @@
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ПодобратьДоверенности</name>
<title>
<key>ru</key>
<value>Подобрать доверенности</value>
</title>
<id>2</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ПодобратьДоверенности</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>ПоказатьКомментарий</name>
<valueType>
@@ -26,6 +26,14 @@
УстановитьУсловноеОформление();
АвтоЗаголовок = Ложь;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Заголовок = НСтр("ru = 'Добавление электронных подписей из файлов на устройстве'");
Элементы.ПодписиДобавить.Заголовок = НСтр("ru = 'Выбрать файлы с устройства...'");
Иначе
Заголовок = НСтр("ru = 'Добавление электронных подписей из файлов на компьютере'");
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ЗаголовокДанных) Тогда
Элементы.ПредставлениеДанных.Заголовок = Параметры.ЗаголовокДанных;
Иначе
@@ -57,6 +65,8 @@
КонецЕсли;
ЭлектроннаяПодписьЛокализация.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
@@ -95,7 +105,7 @@
Отказ = Истина;
Если ОтображениеДанныхОбновлено = Истина Тогда
ВыбратьФайл(Истина);
ВыбратьФайлы(Истина);
КонецЕсли;
КонецПроцедуры
@@ -104,7 +114,43 @@
Процедура ПодписиПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыбратьФайл();
ВыбратьФайлы();
КонецПроцедуры
&НаКлиенте
Процедура ПодписиМашиночитаемаяДоверенностьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПодписиМашиночитаемаяДоверенностьНачалоВыбораПродолжение(Элемент, ДанныеВыбора);
КонецПроцедуры
&НаКлиенте
Асинх Процедура ПодписиМашиночитаемаяДоверенностьНачалоВыбораПродолжение(Элемент, ДанныеВыбора)
ТекущиеДанные = Элементы.Подписи.ТекущиеДанные;
СписокВыбора = Новый СписокЗначений;
ЭлектроннаяПодписьКлиентЛокализация.ПриПолученииСпискаВыбораМашиночитаемыхДоверенностей(
ЭтотОбъект, ТекущиеДанные, СписокВыбора);
Если СписокВыбора.Количество() > 0 Тогда
СписокВыбора.Добавить("ВыбратьИзСправочника", НСтр("ru = 'Выбрать из справочника...'"));
Результат = Ждать ВыбратьИзСпискаАсинх(СписокВыбора, Элементы.ПодписиМашиночитаемаяДоверенность);
Если Результат <> Неопределено Тогда
Если Результат.Значение = "ВыбратьИзСправочника" Тогда
МашиночитаемаяДоверенностьВыбратьИзСправочника();
Возврат;
КонецЕсли;
ТекущиеДанные.МашиночитаемаяДоверенность = Результат.Представление;
ТекущиеДанные.НомерДоверенности = Результат.Значение;
ПодключитьОбработчикОжидания("ПодписиМашиночитаемаяДоверенностьПриИзменении", 0.1, Истина);
КонецЕсли;
Иначе
МашиночитаемаяДоверенностьВыбратьИзСправочника();
КонецЕсли;
КонецПроцедуры
@@ -112,6 +158,17 @@
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ПодобратьДоверенности(Команда)
Если ОписаниеДанных.Свойство("Объект") И ТипЗнч(ОписаниеДанных.Объект) <> Тип("ОписаниеОповещения") Тогда
ЗаполнитьМашиночитаемыеДоверенности(ОписаниеДанных.Объект);
Иначе
ЗаполнитьМашиночитаемыеДоверенности();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОК(Команда)
@@ -120,6 +177,8 @@
Возврат;
КонецЕсли;
ЗагрузитьМашиночитаемыеДоверенности();
Если Не ОписаниеДанных.Свойство("Объект") Тогда
ОписаниеДанных.Вставить("Подписи", ДобавляемыеПодписи());
Закрыть(Истина);
@@ -191,6 +250,7 @@
Процедура ПослеОткрытия()
ОтображениеДанныхОбновлено = Истина;
ВыбратьФайлы(Истина);
КонецПроцедуры
@@ -212,61 +272,164 @@
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайл(ДобавитьНовуюСтроку = Ложь)
Процедура ВыбратьФайлы(МножественныйВыбор = Ложь)
ОшибкиПриЗагрузкеДоверенностей = "";
Доверенности.Очистить();
Контекст = Новый Структура;
Контекст.Вставить("ДобавитьНовуюСтроку", ДобавитьНовуюСтроку);
Контекст.Вставить("ДобавитьНовыеСтроки", МножественныйВыбор);
Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПомещенияФайла", ЭтотОбъект, Контекст);
Оповещение = Новый ОписаниеОповещения("ВыбратьФайлыПослеПомещенияФайлов", ЭтотОбъект, Контекст);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
Если МножественныйВыбор Тогда
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файлы электронной подписи'");
Иначе
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл электронной подписи'");
ПараметрыЗагрузки.Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файлы подписи (*.%1)|*.%1'"),
ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи);
КонецЕсли;
ПараметрыЗагрузки.Диалог.МножественныйВыбор = МножественныйВыбор;
ФильтрДляВыбораПодписей = НСтр("ru = 'Файлы подписи (*.p7s, *.sig%1)|*.p7s;*.sig%2'");
ЭлектроннаяПодписьКлиентЛокализация.ПриПолученииФильтраДляВыбораПодписей(ФильтрДляВыбораПодписей);
РасширениеДляФайловПодписи = ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи;
Если СтрНайти(ФильтрДляВыбораПодписей, РасширениеДляФайловПодписи) = 0 Тогда
ФильтрДляВыбораПодписей= СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ФильтрДляВыбораПодписей,
", *." + РасширениеДляФайловПодписи, ";*." + РасширениеДляФайловПодписи);
Иначе
ФильтрДляВыбораПодписей= СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ФильтрДляВыбораПодписей, "", "");
КонецЕсли;
ПараметрыЗагрузки.Диалог.Фильтр = ФильтрДляВыбораПодписей;
ПараметрыЗагрузки.Диалог.Фильтр = ПараметрыЗагрузки.Диалог.Фильтр + "|" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы());
Если Не ДобавитьНовуюСтроку Тогда
Если Не МножественныйВыбор Тогда
ПараметрыЗагрузки.Диалог.ПолноеИмяФайла = Элементы.Подписи.ТекущиеДанные.ПутьКФайлу;
КонецЕсли;
ФайловаяСистемаКлиент.ЗагрузитьФайл(Оповещение, ПараметрыЗагрузки);
ФайловаяСистемаКлиент.ЗагрузитьФайлы(Оповещение, ПараметрыЗагрузки);
КонецПроцедуры
// Продолжение процедуры ВыбратьФайл.
&НаКлиенте
Процедура ВыбратьФайлПослеПомещенияФайла(ПомещенныйФайл, Контекст) Экспорт
Процедура ВыбратьФайлыПослеПомещенияФайлов(ПомещенныеФайлы, Контекст) Экспорт
Если ПомещенныйФайл = Неопределено Тогда
Если ПомещенныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ПомещенныеФайлы) = Тип("Файл") Тогда
ПомещенныеФайлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПомещенныеФайлы);
КонецЕсли;
Результат = ДобавитьСтрокиНаСервере(ПомещенныеФайлы, Контекст.ДобавитьНовыеСтроки);
Контекст.Вставить("ПомещенныеФайлы", ПомещенныеФайлы);
Контекст.Вставить("ДанныеДляПроверкиПодписи", Неопределено);
Контекст.Вставить("РезультатДобавленияПодписей", Результат);
Контекст.Вставить("ДругиеФайлы", Результат);
Контекст.Вставить("Ошибки", Новый Структура("ОшибкиНаКлиенте, ОшибкиНаСервере", Новый Соответствие, Новый Соответствие));
Контекст.Вставить("Индекс", -1);
ВыбратьФайлыЦиклНачало(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлыЦиклНачало(Контекст)
Если Контекст.ПомещенныеФайлы.Количество() <= Контекст.Индекс + 1 Тогда
ВыбратьФайлыПослеЦикла(Контекст);
Возврат;
КонецЕсли;
Контекст.Индекс = Контекст.Индекс + 1;
ПомещенныйФайл = Контекст.ПомещенныеФайлы[Контекст.Индекс];
СоставИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПомещенныйФайл.Имя);
Контекст.Вставить("Адрес", ПомещенныйФайл.Хранение);
Контекст.Вставить("ИмяФайла", СоставИмени.Имя);
Контекст.Вставить("ОшибкаНаСервере", Новый Структура);
Контекст.Вставить("ДанныеПодписи", Неопределено);
Контекст.Вставить("ДатаПодписи", Неопределено);
Контекст.Вставить("АдресСвойствПодписи", Неопределено);
РезультатДобавленияПодписи = Контекст.РезультатДобавленияПодписей.Получить(ПомещенныйФайл.Имя);
Успех = ДобавитьСтрокуНаСервере(Контекст.Адрес, Контекст.ИмяФайла, Контекст.ДобавитьНовуюСтроку,
Контекст.ОшибкаНаСервере, Контекст.ДанныеПодписи, Контекст.ДатаПодписи, Контекст.АдресСвойствПодписи);
Если РезультатДобавленияПодписи = Неопределено Тогда
ВыбратьФайлыЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Если Успех Тогда
Контекст.Вставить("РезультатДобавленияПодписи", РезультатДобавленияПодписи);
Если РезультатДобавленияПодписи.Успех Тогда
ВыбратьФайлПослеДобавленияСтроки(Контекст);
Возврат;
КонецЕсли;
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(Контекст.ДанныеПодписи);
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(
Контекст.РезультатДобавленияПодписи.ДанныеПодписи);
ПараметрыСоздания.ПоказатьОшибку = Неопределено;
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(Новый ОписаниеОповещения(
"ВыбратьФайлПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст),
"", ПараметрыСоздания);
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографии(
Новый ОписаниеОповещения("ВыбратьФайлПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), "",
ПараметрыСоздания);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФайлыПослеЦикла(Контекст)
ЗаполнитьМашиночитаемыеДоверенности();
Если Контекст.Ошибки.ОшибкиНаКлиенте.Количество() = 0
И Контекст.Ошибки.ОшибкиНаСервере.Количество() = 0
И ОшибкиПриЗагрузкеДоверенностей = "" Тогда
Возврат;
КонецЕсли;
ОшибкаНаКлиенте = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок();
ОшибкаНаКлиенте.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить файлы'");
Для Каждого КлючИЗначение Из Контекст.Ошибки.ОшибкиНаКлиенте Цикл
СвойстваОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки();
Если ЗначениеЗаполнено(КлючИЗначение.Значение.ДополнительныеПараметры) Тогда
ЗаполнитьЗначенияСвойств(СвойстваОшибки, КлючИЗначение.Значение.ДополнительныеПараметры);
КонецЕсли;
СвойстваОшибки.Описание = СтрШаблон("%1:
|%2", КлючИЗначение.Ключ, СтрСоединить(КлючИЗначение.Значение.Файлы, Символы.ПС));
ОшибкаНаКлиенте.Ошибки.Добавить(СвойстваОшибки);
КонецЦикла;
ОшибкаНаСервере = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок();
ОшибкаНаСервере.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить файлы'");
Если ОшибкиПриЗагрузкеДоверенностей <> "" Тогда
СвойстваОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки();
СвойстваОшибки.Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось загрузить доверенности:
|%1'"), ОшибкиПриЗагрузкеДоверенностей);
ОшибкаНаСервере.Ошибки.Добавить(СвойстваОшибки);
КонецЕсли;
Для Каждого КлючИЗначение Из Контекст.Ошибки.ОшибкиНаСервере Цикл
СвойстваОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки();
Если ЗначениеЗаполнено(КлючИЗначение.Значение.ДополнительныеПараметры) Тогда
ЗаполнитьЗначенияСвойств(СвойстваОшибки, КлючИЗначение.Значение.ДополнительныеПараметры);
КонецЕсли;
СвойстваОшибки.Описание = СтрШаблон("%1:
|%2", КлючИЗначение.Ключ, СтрСоединить(КлючИЗначение.Значение.Файлы, Символы.ПС));
ОшибкаНаСервере.Ошибки.Добавить(СвойстваОшибки);
КонецЦикла;
ПоказатьОшибку(ОшибкаНаКлиенте, ОшибкаНаСервере);
КонецПроцедуры
@@ -279,7 +442,7 @@
ПараметрыСоздания.ПоказатьОшибку = Неопределено;
ЭлектроннаяПодписьСлужебныйКлиент.ПрочитатьСвойстваПодписи(Новый ОписаниеОповещения(
"ВыбратьФайлПослеЧтенияСвойствПодписи", ЭтотОбъект, Контекст),
Контекст.ДанныеПодписи, Истина, Ложь);
Контекст.РезультатДобавленияПодписи.ДанныеПодписи, Истина, Ложь);
Возврат;
КонецЕсли;
@@ -288,14 +451,14 @@
Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда
МенеджерКриптографии.НачатьПолучениеКонтейнераПодписейКриптографии(Новый ОписаниеОповещения(
"ВыбратьФайлПослеПолученияКонтейнераПодписи", ЭтотОбъект, Контекст,
"ВыбратьФайлПослеОшибкиПолученияКонтейнераПодписи", ЭтотОбъект), Контекст.ДанныеПодписи);
"ВыбратьФайлПослеОшибкиПолученияКонтейнераПодписи", ЭтотОбъект), Контекст.РезультатДобавленияПодписи.ДанныеПодписи);
Возврат;
КонецЕсли;
Контекст.Вставить("ПараметрыПодписи", Неопределено);
МенеджерКриптографии.НачатьПолучениеСертификатовИзПодписи(Новый ОписаниеОповещения(
"ВыбратьФайлПослеПолученияСертификатовИзПодписи", ЭтотОбъект, Контекст,
"ВыбратьФайлПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект), Контекст.ДанныеПодписи);
"ВыбратьФайлПослеОшибкиПолученияСертификатовИзПодписи", ЭтотОбъект), Контекст.РезультатДобавленияПодписи.ДанныеПодписи);
КонецПроцедуры
@@ -304,7 +467,7 @@
Процедура ВыбратьФайлПослеЧтенияСвойствПодписи(Результат, Контекст) Экспорт
Если Результат.Успех = Ложь Тогда
ПоказатьОшибку(Результат.ТекстОшибки, Контекст.ОшибкаНаСервере);
ДобавитьОшибку(Новый Структура("ОписаниеОшибки", Результат.ТекстОшибки), Контекст);
Возврат;
КонецЕсли;
@@ -318,18 +481,19 @@
СвойстваСертификата.Вставить("Отпечаток", Результат.Отпечаток);
СвойстваСертификата.Вставить("КомуВыдан", Результат.КомуВыданСертификат);
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(Контекст.ДанныеПодписи,
СвойстваСертификата, "", ПользователиКлиент.АвторизованныйПользователь(), Контекст.ИмяФайла,
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(Контекст.РезультатДобавленияПодписи.ДанныеПодписи,
СвойстваСертификата, "", ПользователиКлиент.АвторизованныйПользователь(), Контекст.РезультатДобавленияПодписи.ИмяФайла,
Контекст.ПараметрыПодписи, Истина);
ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовуюСтроку, СвойстваПодписи, Контекст.ИмяФайла,
Контекст.АдресСвойствПодписи);
ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовыеСтроки, СвойстваПодписи, Контекст.РезультатДобавленияПодписи.ИмяФайла,
Контекст.РезультатДобавленияПодписи.АдресСвойствПодписи);
ВыбратьФайлПослеДобавленияСтроки(Контекст);
Иначе
ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", НСтр("ru = 'В файле подписи нет ни одного сертификата.'"));
ПоказатьОшибку(ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере);
ДобавитьОшибку(ОшибкаНаКлиенте, Контекст);
КонецЕсли;
КонецПроцедуры
@@ -347,9 +511,9 @@
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПоказатьИнструкцию", Истина);
ДополнительныеПараметры.Вставить("Подпись", Контекст.ДанныеПодписи);
ДополнительныеПараметры.Вставить("Подпись", Контекст.РезультатДобавленияПодписи.ДанныеПодписи);
ПоказатьОшибку(ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере, ДополнительныеПараметры);
ДобавитьОшибку(ОшибкаНаКлиенте, Контекст, ДополнительныеПараметры);
КонецПроцедуры
@@ -365,7 +529,7 @@
Контекст.Вставить("ПараметрыПодписи", ПараметрыПодписи);
ДатаПодписи = ПараметрыПодписи.НеподтвержденнаяДатаПодписи;
Если ЗначениеЗаполнено(ДатаПодписи) Тогда
Контекст.Вставить("ДатаПодписи", ДатаПодписи);
Контекст.РезультатДобавленияПодписи.ДатаПодписи = ДатаПодписи;
КонецЕсли;
Сертификаты = Новый Массив;
@@ -390,9 +554,9 @@
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПоказатьИнструкцию", Истина);
ДополнительныеПараметры.Вставить("Подпись", Контекст.ДанныеПодписи);
ДополнительныеПараметры.Вставить("Подпись", Контекст.РезультатДобавленияПодписи.ДанныеПодписи);
ПоказатьОшибку(ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере, ДополнительныеПараметры);
ДобавитьОшибку(ОшибкаНаКлиенте, Контекст, ДополнительныеПараметры);
КонецПроцедуры
@@ -404,7 +568,7 @@
ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки",
НСтр("ru = 'В файле подписи нет ни одного сертификата.'"));
ПоказатьОшибку(ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере);
ДобавитьОшибку(ОшибкаНаКлиенте, Контекст);
Возврат;
КонецЕсли;
@@ -417,7 +581,7 @@
Исключение
ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки",
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ПоказатьОшибку(ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере);
ДобавитьОшибку(ОшибкаНаКлиенте, Контекст);
Возврат;
КонецПопытки;
@@ -436,11 +600,12 @@
СвойстваСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваСертификата(Контекст.Сертификат);
СвойстваСертификата.Вставить("ДвоичныеДанные", ДанныеСертификата);
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(Контекст.ДанныеПодписи,
СвойстваСертификата, "", ПользователиКлиент.АвторизованныйПользователь(), Контекст.ИмяФайла, Контекст.ПараметрыПодписи, Истина);
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(Контекст.РезультатДобавленияПодписи.ДанныеПодписи,
СвойстваСертификата, "", ПользователиКлиент.АвторизованныйПользователь(),
Контекст.РезультатДобавленияПодписи.ИмяФайла, Контекст.ПараметрыПодписи, Истина);
ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовуюСтроку, СвойстваПодписи,
Контекст.ИмяФайла, Контекст.АдресСвойствПодписи);
ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовыеСтроки, СвойстваПодписи,
Контекст.РезультатДобавленияПодписи.ИмяФайла, Контекст.РезультатДобавленияПодписи.АдресСвойствПодписи);
ВыбратьФайлПослеДобавленияСтроки(Контекст);
@@ -450,13 +615,18 @@
&НаКлиенте
Процедура ВыбратьФайлПослеДобавленияСтроки(Контекст)
Если Не ОписаниеДанных.Свойство("Данные") Тогда
Если Не ОписаниеДанных.Свойство("Данные") Или Контекст.ДанныеДляПроверкиПодписи = Ложь Тогда
ВыбратьФайлыЦиклНачало(Контекст);
Возврат; // Если данные не указаны, подпись проверить невозможно.
КонецЕсли;
Если Контекст.ДанныеДляПроверкиПодписи = Неопределено Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьДанныеИзОписанияДанных(Новый ОписаниеОповещения(
"ВыбратьФайлПослеПолученияДанных", ЭтотОбъект, Контекст),
ЭтотОбъект, ОписаниеДанных, ОписаниеДанных.Данные, Истина);
Иначе
ВыбратьФайлПослеПолученияДанных(Контекст.ДанныеДляПроверкиПодписи, Контекст);
КонецЕсли;
КонецПроцедуры
@@ -465,15 +635,22 @@
Процедура ВыбратьФайлПослеПолученияДанных(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
Контекст.ДанныеДляПроверкиПодписи = Ложь;
ВыбратьФайлыЦиклНачало(Контекст);
Возврат; // Не удалось получить данные, подпись проверить невозможно.
КонецЕсли;
Если Контекст.ДанныеДляПроверкиПодписи = Неопределено Тогда
Контекст.ДанныеДляПроверкиПодписи = Результат;
КонецЕсли;
ПараметрыДляПроверки = ЭлектроннаяПодписьКлиент.ПараметрыПроверкиПодписи();
ПараметрыДляПроверки.ПоказатьОшибкуСозданияМенеджераКриптографии = Ложь;
ПараметрыДляПроверки.РезультатВВидеСтруктуры = Истина;
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись(Новый ОписаниеОповещения(
"ВыбратьФайлПослеПроверкиПодписи", ЭтотОбъект, Контекст),
Результат, Контекст.ДанныеПодписи, , Контекст.ДатаПодписи, ПараметрыДляПроверки);
Контекст.ДанныеДляПроверкиПодписи, Контекст.РезультатДобавленияПодписи.ДанныеПодписи, ,
Контекст.РезультатДобавленияПодписи.ДатаПодписи, ПараметрыДляПроверки);
КонецПроцедуры
@@ -482,10 +659,12 @@
Процедура ВыбратьФайлПослеПроверкиПодписи(РезультатПроверки, Контекст) Экспорт
Если РезультатПроверки.Результат = Неопределено Тогда
ВыбратьФайлыЦиклНачало(Контекст);
Возврат; // Не удалось проверить подпись.
КонецЕсли;
ОбновитьРезультатПроверкиПодписи(Контекст.АдресСвойствПодписи, РезультатПроверки);
ОбновитьРезультатПроверкиПодписи(Контекст.РезультатДобавленияПодписи.АдресСвойствПодписи, РезультатПроверки);
ВыбратьФайлыЦиклНачало(Контекст);
КонецПроцедуры
@@ -506,52 +685,100 @@
КонецПроцедуры
&НаСервере
Функция ДобавитьСтрокуНаСервере(Адрес, ИмяФайла, ДобавитьНовуюСтроку, ОшибкаНаСервере,
ДанныеПодписи, ДатаПодписи, АдресСвойствПодписи)
Функция ДобавитьСтрокиНаСервере(ПомещенныеФайлы, ДобавитьНовыеСтроки)
Соответствие = Новый Соответствие;
ДругиеФайлы = Новый Соответствие;
ЭлектроннаяПодписьЛокализация.ПриДобавленииСтрокНаСервере(
ЭтотОбъект, ПомещенныеФайлы, ДругиеФайлы, ОшибкиПриЗагрузкеДоверенностей, УникальныйИдентификатор);
Для Каждого ПомещенныйФайл Из ПомещенныеФайлы Цикл
СоставИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПомещенныйФайл.Имя);
Если ДругиеФайлы.Получить(СоставИмени.Имя) <> Неопределено Тогда
Продолжить;
КонецЕсли;
РезультатДобавленияСтроки = Новый Структура;
РезультатДобавленияСтроки.Вставить("Успех", Ложь);
РезультатДобавленияСтроки.Вставить("Адрес", ПомещенныйФайл.Хранение);
РезультатДобавленияСтроки.Вставить("ИмяФайла", СоставИмени.Имя);
РезультатДобавленияСтроки.Вставить("ОшибкаНаСервере", Новый Структура);
РезультатДобавленияСтроки.Вставить("ДанныеПодписи", Неопределено);
РезультатДобавленияСтроки.Вставить("ДатаПодписи", Неопределено);
РезультатДобавленияСтроки.Вставить("АдресСвойствПодписи", Неопределено);
РезультатДобавленияСтроки = ДобавитьСтрокуНаСервере(РезультатДобавленияСтроки, ДобавитьНовыеСтроки);
Соответствие.Вставить(ПомещенныйФайл.Имя, РезультатДобавленияСтроки);
КонецЦикла;
Возврат Соответствие;
КонецФункции
&НаСервере
Функция ДобавитьСтрокуНаСервере(Знач РезультатДобавленияСтроки, ДобавитьНовуюСтроку)
Попытка
ДанныеПодписи = ЭлектроннаяПодпись.ПодписьВКодировкеDER(Адрес);
РезультатДобавленияСтроки.ДанныеПодписи = ЭлектроннаяПодпись.ПодписьВКодировкеDER(РезультатДобавленияСтроки.Адрес);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ОшибкаНаСервере.Вставить("ОписаниеОшибки", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат Ложь;
РезультатДобавленияСтроки.ОшибкаНаСервере.Вставить("ОписаниеОшибки", ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Возврат РезультатДобавленияСтроки;
КонецПопытки;
ДатаПодписи = ЭлектроннаяПодпись.ДатаПодписания(ДанныеПодписи);
РезультатДобавленияСтроки.ДатаПодписи = ЭлектроннаяПодпись.ДатаПодписания(РезультатДобавленияСтроки.ДанныеПодписи);
Если Не ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере()
И Не ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Возврат Ложь;
Возврат РезультатДобавленияСтроки;
КонецЕсли;
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ОписаниеОшибки = ОшибкаНаСервере;
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(ДанныеПодписи);
ПараметрыСоздания.ОписаниеОшибки = РезультатДобавленияСтроки.ОшибкаНаСервере;
ПараметрыСоздания.АлгоритмПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(
РезультатДобавленияСтроки.ДанныеПодписи);
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("", ПараметрыСоздания);
ОшибкаНаСервере = ПараметрыСоздания.ОписаниеОшибки;
РезультатДобавленияСтроки.ОшибкаНаСервере = ПараметрыСоздания.ОписаниеОшибки;
Если МенеджерКриптографии = Неопределено Тогда
Возврат Ложь;
Возврат РезультатДобавленияСтроки;
КонецЕсли;
ПараметрыПодписи = Неопределено;
Если ЭлектроннаяПодпись.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(ДанныеПодписи);
Попытка
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(РезультатДобавленияСтроки.ДанныеПодписи);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
РезультатДобавленияСтроки.ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить контейнер подписи из файла подписи по причине:
|%1'"),
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)));
Возврат РезультатДобавленияСтроки;
КонецПопытки;
ПараметрыПодписи = ЭлектроннаяПодписьСлужебный.ПараметрыПодписиКриптографии(КонтейнерПодписи,
ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ТекущаяДатаСеанса());
Если ЗначениеЗаполнено(ПараметрыПодписи.НеподтвержденнаяДатаПодписи) Тогда
ДатаПодписи = ПараметрыПодписи.НеподтвержденнаяДатаПодписи;
РезультатДобавленияСтроки.ДатаПодписи = ПараметрыПодписи.НеподтвержденнаяДатаПодписи;
КонецЕсли;
КонецЕсли;
Если ПараметрыПодписи = Неопределено Тогда
Попытка
Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(ДанныеПодписи);
Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(РезультатДобавленияСтроки.ДанныеПодписи);
Если Сертификаты.Количество() = 0 Тогда
ВызватьИсключение НСтр("ru = 'В файле подписи нет ни одного сертификата.'");
@@ -572,11 +799,11 @@
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
РезультатДобавленияСтроки.ОшибкаНаСервере.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить сертификаты из файла подписи по причине:
|%1'"),
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)));
Возврат Ложь;
Возврат РезультатДобавленияСтроки;
КонецПопытки;
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Сертификат);
@@ -589,19 +816,24 @@
СвойстваСертификата.Вставить("ДвоичныеДанные", Сертификат.Выгрузить());
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДанныеПодписи,
СвойстваСертификата, "", Пользователи.АвторизованныйПользователь(), ИмяФайла, ПараметрыПодписи, Истина);
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(РезультатДобавленияСтроки.ДанныеПодписи,
СвойстваСертификата, "", Пользователи.АвторизованныйПользователь(), РезультатДобавленияСтроки.ИмяФайла, ПараметрыПодписи, Истина);
ДобавитьСтроку(ЭтотОбъект, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла, АдресСвойствПодписи);
ДобавитьСтроку(ЭтотОбъект, ДобавитьНовуюСтроку, СвойстваПодписи, РезультатДобавленияСтроки.ИмяФайла,
РезультатДобавленияСтроки.АдресСвойствПодписи);
РезультатДобавленияСтроки.Успех = Истина;
Возврат Истина;
Возврат РезультатДобавленияСтроки;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьСтроку(Форма, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла, АдресСвойствПодписи)
АдресСвойствПодписи = ПоместитьВоВременноеХранилище(СвойстваПодписи, Форма.УникальныйИдентификатор);
НовыеСвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи();
ЗаполнитьЗначенияСвойств(НовыеСвойстваПодписи, СвойстваПодписи);
АдресСвойствПодписи = ПоместитьВоВременноеХранилище(НовыеСвойстваПодписи, Форма.УникальныйИдентификатор);
Если ДобавитьНовуюСтроку Тогда
ТекущиеДанные = Форма.Подписи.Добавить();
@@ -637,6 +869,38 @@
КонецФункции
&НаКлиенте
Процедура ДобавитьОшибку(ОшибкаНаКлиенте, Контекст, ДополнительныеПараметры = Неопределено)
Если ЗначениеЗаполнено(ОшибкаНаКлиенте.ОписаниеОшибки) Тогда
Найдено = Контекст.Ошибки.ОшибкиНаКлиенте.Получить(ОшибкаНаКлиенте.ОписаниеОшибки);
Если Найдено = Неопределено Тогда
Найдено = Новый Структура("Файлы, ДополнительныеПараметры", Новый Массив);
КонецЕсли;
Найдено.Файлы.Добавить(Контекст.РезультатДобавленияПодписи.ИмяФайла);
Найдено.ДополнительныеПараметры = ДополнительныеПараметры;
Контекст.Ошибки.ОшибкиНаКлиенте.Вставить(ОшибкаНаКлиенте.ОписаниеОшибки, Найдено);
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.РезультатДобавленияПодписи.ОшибкаНаСервере) Тогда
ОшибкаНаСервере = Контекст.РезультатДобавленияПодписи.ОшибкаНаСервере;
Если ОшибкаНаСервере.ОписаниеОшибки <> ОшибкаНаКлиенте.ОписаниеОшибки Тогда
Найдено = Контекст.Ошибки.ОшибкиНаСервере.Получить(ОшибкаНаСервере.ОписаниеОшибки);
Если Найдено = Неопределено Тогда
Найдено = Новый Структура("Файлы, ДополнительныеПараметры", Новый Массив);
КонецЕсли;
Найдено.Файлы.Добавить(Контекст.РезультатДобавленияПодписи.ИмяФайла);
Найдено.ДополнительныеПараметры = ДополнительныеПараметры;
Контекст.Ошибки.ОшибкиНаСервере.Вставить(ОшибкаНаСервере.ОписаниеОшибки, Найдено);
КонецЕсли;
КонецЕсли;
ВыбратьФайлыЦиклНачало(Контекст);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьОшибку(ОшибкаНаКлиенте, ОшибкаНаСервере, ДополнительныеПараметры = Неопределено)
@@ -646,4 +910,62 @@
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьМашиночитаемыеДоверенности()
ЭлектроннаяПодписьЛокализация.ПриЗагрузкеМашиночитаемыхДоверенностей(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьМашиночитаемыеДоверенности(ПодписанныйОбъект = Неопределено)
ЭлектроннаяПодписьЛокализация.ПриЗаполненииМашиночитаемыхДоверенностей(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура МашиночитаемаяДоверенностьВыбратьИзСправочника()
ТекущиеДанные = Элементы.Подписи.ТекущиеДанные;
ОбработчикЗавершения = Новый ОписаниеОповещения("МашиночитаемаяДоверенностьОкончаниеВыбора", ЭтотОбъект);
ЭлектроннаяПодписьКлиентЛокализация.ПриВыбореМашиночитаемойДоверенности(ОбработчикЗавершения, ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура МашиночитаемаяДоверенностьОкончаниеВыбора(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.Подписи.ТекущиеДанные;
ТекущиеДанные.МашиночитаемаяДоверенность = Результат;
ПодписиМашиночитаемаяДоверенностьПриИзменении();
КонецПроцедуры
&НаКлиенте
Процедура ПодписиМашиночитаемаяДоверенностьПриИзменении()
Если ОписаниеДанных.Свойство("Объект") И ТипЗнч(ОписаниеДанных.Объект) <> Тип("ОписаниеОповещения") Тогда
ЗаполнитьМашиночитаемуюДоверенностьВСтроке(Элементы.Подписи.ТекущаяСтрока, ОписаниеДанных.Объект);
Иначе
ЗаполнитьМашиночитаемуюДоверенностьВСтроке(Элементы.Подписи.ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьМашиночитаемуюДоверенностьВСтроке(ИдентификаторСтроки, ПодписанныйОбъект = Неопределено)
ЭлектроннаяПодписьЛокализация.ПриЗаполненииМашиночитаемойДоверенностиВСтроке(ЭтотОбъект, ИдентификаторСтроки, ПодписанныйОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПодписиМашиночитаемаяДоверенностьАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
@@ -204,17 +204,16 @@
ОтборМетаданных.Добавить("Задачи");
ОтборМетаданных.Добавить("ВнешниеИсточникиДанных");
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", ОтборМетаданных);
ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъекты);
ПараметрыФормы.Вставить("УникальныйИдентификаторИсточник", УникальныйИдентификатор);
ПараметрыФормы.Вставить("ВыборЕдинственного", Ложь);
ПараметрыФормы.Вставить("ВыбиратьТаблицыВнешнихИсточниковДанных", Истина);
ПараметрыФормы.Вставить("СпособГруппировкиОбъектов", "ПоВидам");
ПараметрыФормы = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыФормы.КоллекцииВыбираемыхОбъектовМетаданных = ОтборМетаданных;
ПараметрыФормы.ВыбранныеОбъектыМетаданных = ВыбранныеОбъекты;
ПараметрыФормы.УникальныйИдентификаторИсточник = УникальныйИдентификатор;
ПараметрыФормы.ВыборЕдинственного = Ложь;
ПараметрыФормы.ВыбиратьТаблицыВнешнихИсточниковДанных = Истина;
ПараметрыФормы.СпособГруппировкиОбъектов = "ПоВидам";
ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьОбъектыЗавершение", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы,,,,, ОписаниеОповещения);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыФормы, ОписаниеОповещения);
КонецПроцедуры
@@ -223,8 +222,7 @@
Если Результат <> Неопределено Тогда
ОбработатьВыбранные(Результат.ВыгрузитьЗначения());
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект,
Элементы.Настройки.Имя,, Истина);
СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, Элементы.Настройки.Имя,, Истина);
КонецЕсли;
КонецПроцедуры
@@ -17,6 +17,7 @@
<ul><li>Сертификат <b>только для шифрования</b> можно <b>Добавить из файла</b>. Выберите нужное действие и перейдите по ссылке, укажите путь к файлу или каталогу на компьютере.</li></ul><li>Также с помощью кнопки <b>Оформить заявление</b> можно подготовить <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.Форма/Help">Заявление на выпуск нового сертификата</a>.
</li>
<li>Выпустить повторно сертификат, у которого закончился срок действия можно с помощью кнопки <strong>Перевыпустить (cкопировать, F9)</strong>.</li>
<li>Для анализа сертификатов сотрудников и контроля своевременного обновления сертификатов можно воспользоваться кнопкой <b>Отчеты</b> для того, чтобы открыть список доступных <a href="Catalog.ВариантыОтчетов/Help">вариантов отчета</a>.</li>
<li>Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Приложения</h3>
<ul><li>Содержит список настроенных приложений, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ). </li>
<li>Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними.
@@ -87,18 +87,26 @@
&НаКлиенте
Процедура ИнструкцияНажатие(Элемент)
ЯкорьОшибки = "";
Если Элемент.Имя = "ИнструкцияКлиент"
И Не ПустаяСтрока(ЯкорьОшибкиКлиент) Тогда
ЯкорьОшибки = ""; ТекстДляПоиска = "";
Если Элемент.Имя = "ИнструкцияКлиент" Тогда
Если Не ПустаяСтрока(ЯкорьОшибкиКлиент) Тогда
ЯкорьОшибки = ЯкорьОшибкиКлиент;
ИначеЕсли Элемент.Имя = "ИнструкцияСервер"
И Не ПустаяСтрока(ЯкорьОшибкиСервер) Тогда
Иначе
ТекстДляПоиска = ТекстОшибкиКлиент;
КонецЕсли;
ИначеЕсли Элемент.Имя = "ИнструкцияСервер" Тогда
Если Не ПустаяСтрока(ЯкорьОшибкиСервер) Тогда
ЯкорьОшибки = ЯкорьОшибкиСервер;
Иначе
ТекстДляПоиска = ТекстОшибкиСервер;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстДляПоиска) Тогда
ЭлектроннаяПодписьКлиент.ОткрытьПоискПоОшибкамПриРаботеСЭлектроннойПодписью(ТекстДляПоиска);
Иначе
ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(ЯкорьОшибки);
КонецЕсли;
КонецПроцедуры
@@ -349,6 +357,9 @@
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
ЭлементИнструкция.Имя, "Заголовок", НСтр("ru = 'Подробнее'"));
ТребуемоеКоличествоСтрок = 0;
ШиринаПоля = Цел(?(Ширина < 20, 20, Ширина) * 1.4);
Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстОшибки) Цикл
@@ -824,6 +824,7 @@
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBar</locationInCommandBar>
</items>
<visible>true</visible>
<enabled>true</enabled>
@@ -2293,6 +2294,10 @@
<value>Отобразить инструкцию</value>
</title>
<id>6</id>
<toolTip>
<key>ru</key>
<value>Отобразить инструкцию по редактированию макета</value>
</toolTip>
<use>
<common>true</common>
</use>
@@ -2358,7 +2363,7 @@
<id>9</id>
<toolTip>
<key>ru</key>
<value>Показать оригинал</value>
<value>Показать поставляемый макет</value>
</toolTip>
<use>
<common>true</common>
@@ -2435,6 +2440,11 @@
<value>Посмотреть печатную форму</value>
</title>
<id>13</id>
<toolTip>
<key>ru</key>
<value>Посмотреть печатную форму по макету
</value>
</toolTip>
<use>
<common>true</common>
</use>
@@ -217,25 +217,31 @@
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ОтказСохраненияИзменений Тогда
Если ЗавершениеРаботы Тогда
Если Модифицированность И Не ОтказСохраненияИзменений Тогда
ТекстПредупреждения = НСтр("ru = 'Макет печатной формы отредактирован в другом приложении.
|Нажмите Записать, чтобы не потерять изменения.'");
Отказ = Истина;
КонецЕсли;
Возврат;
КонецЕсли;
ИначеЕсли Не ЗаписьВыполнена Тогда
Если Не ОтказСохраненияИзменений Тогда
Если Не ЗаписьВыполнена Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Отказ", Отказ);
ДополнительныеПараметры.Вставить("ЗавершениеРаботы", ЗавершениеРаботы);
ДополнительныеПараметры.Вставить("ТекстПредупреждения", ТекстПредупреждения);
ДополнительныеПараметры.Вставить("СтандартнаяОбработка", СтандартнаяОбработка);
Оповещение = Новый ОписаниеОповещения("ПередЗакрытиемОкончание", ЭтотОбъект, ДополнительныеПараметры);
ОповещениеОшибки = Новый ОписаниеОповещения("ОшибкаПриЧтенииФайла", ЭтотОбъект);
ПрочитатьРедактируемыйФайлМакета(Оповещение, ОповещениеОшибки);
Отказ = Истина;
Иначе
ПередЗакрытиемЗавершение(Ложь, Неопределено);
КонецЕсли;
КонецЕсли;
Если Не Отказ И Не ЗавершениеРаботы И ЗначениеЗаполнено(КлючОбъектаРедактирования) Тогда
Если Не Отказ И ЗначениеЗаполнено(КлючОбъектаРедактирования) Тогда
РазблокироватьНаСервере();
КонецЕсли;
@@ -306,6 +312,11 @@
Оповещение = Новый ОписаниеОповещения("ОткрытьРедакторПродолжение", ЭтотОбъект);
ОповещениеОшибки = Новый ОписаниеОповещения("ОшибкаПриОткрытииФайла", ЭтотОбъект);
ПрочитатьРедактируемыйФайлМакета(Оповещение, ОповещениеОшибки);
Если Не ЭтоНовый() Тогда
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -654,19 +665,19 @@
Процедура ПередЗакрытиемОкончание(Результат, ДополнительныеПараметры) Экспорт
Отказ = ДополнительныеПараметры.Отказ;
ЗавершениеРаботы = ДополнительныеПараметры.ЗавершениеРаботы;
Если Не ЗавершениеРаботы И Не ПовторноеЗакрытие = Истина Тогда
Модифицированность = Модифицированность ИЛИ МакетИзменен();
Если ПовторноеЗакрытие <> Истина Тогда
Модифицированность = Модифицированность Или МакетИзменен();
КонецЕсли;
ПовторноеЗакрытие = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект);
ОписаниеЯзыка = ?(ЗначениеЗаполнено(ТекущийЯзык), " (" + ТекущийЯзык + ")", "");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сохранить изменения в %1%2?'"), ИмяДокумента, ОписаниеЯзыка);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(ОписаниеОповещения, Отказ, ЗавершениеРаботы, ТекстВопроса);
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сохранить изменения в %1%2?'"),
ИмяДокумента, ОписаниеЯзыка);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(ОписаниеОповещения, Отказ, Ложь, ТекстВопроса);
Если Модифицированность Или ЗавершениеРаботы Тогда
Если Модифицированность Тогда
Возврат;
КонецЕсли;
@@ -1012,7 +1023,6 @@
ПодготовитьМакетКСохранению(Макет);
АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет, УникальныйИдентификатор);
ОписаниеМакета = УправлениеПечатью.ОписаниеМакета();
ОписаниеМакета.ИмяОбъектаМетаданныхМакета = ИдентификаторМакета;
@@ -1234,12 +1244,11 @@
ПослеПодключенияРасширения = Новый ОписаниеОповещения("ПослеПодключенияРасширения", ЭтотОбъект, ДополнительныеПараметры);
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(ПослеПодключенияРасширения);
Элементы.ПолеДокументаИнструкции.Видимость = Ложь;
Элементы.ОткрытьРедактор.КнопкаПоУмолчанию = Ложь;
Элементы.ЗаписатьИЗакрыть.КнопкаПоУмолчанию = Истина;
Элементы.ПолеДокументаИнструкции.Видимость = Ложь;
Элементы.ОтобразитьИнструкцию.Пометка = Элементы.ПолеДокументаИнструкции.Видимость;
Элементы.ОтобразитьИнструкцию.Пометка = Ложь;
КонецПроцедуры
&НаКлиенте
@@ -2364,14 +2373,14 @@
&НаКлиенте
Процедура НазначениеМакетаНажатие(Элемент)
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ИсточникиДанных));
ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина);
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Назначение макета'"));
ПараметрыПодбора.Вставить("ФильтрПоОбъектамМетаданных", ОбъектыСКомандамиПечати());
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ИсточникиДанных);
ПараметрыПодбора.ВыбиратьСсылки = Истина;
ПараметрыПодбора.Заголовок = НСтр("ru = 'Назначение макета'");
ПараметрыПодбора.ФильтрПоОбъектамМетаданных = ОбъектыСКомандамиПечати();
ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореВладельцевМакета", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора, , , , , ОписаниеОповещения);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, ОписаниеОповещения);
КонецПроцедуры
@@ -282,14 +282,14 @@
&НаКлиенте
Процедура ВладельцыМакетаНажатие(Элемент)
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ИсточникиДанных));
ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина);
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Назначение макета'"));
ПараметрыПодбора.Вставить("ФильтрПоОбъектамМетаданных", ОбъектыСКомандамиПечати());
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ИсточникиДанных);
ПараметрыПодбора.ВыбиратьСсылки = Истина;
ПараметрыПодбора.Заголовок = НСтр("ru = 'Назначение макета'");
ПараметрыПодбора.ФильтрПоОбъектамМетаданных = ОбъектыСКомандамиПечати();
ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореВладельцевМакета", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора, , , , , ОписаниеОповещения);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, ОписаниеОповещения);
КонецПроцедуры
@@ -277,6 +277,52 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ТаблицаПодписейМашиночитаемаяДоверенность</name>
<id>97</id>
<title>
<key>ru</key>
<value>Машиночитаемая доверенность</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТаблицаПодписей.МашиночитаемаяДоверенностьПредставление</segments>
</dataPath>
<extendedTooltip>
<name>ТаблицаПодписейМашиночитаемаяДоверенностьРасширеннаяПодсказка</name>
<id>99</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаПодписейМашиночитаемаяДоверенностьКонтекстноеМеню</name>
<id>98</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<readOnly>true</readOnly>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<height>2</height>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
<heightControlVariant>ByContent</heightControlVariant>
</extInfo>
</items>
<commandBarLocation>None</commandBarLocation>
<autoCommandBar>
<name>ТаблицаПодписейКоманднаяПанель</name>
@@ -743,6 +789,51 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>МашиночитаемаяДоверенность</name>
<id>13</id>
<valueType>
<types>ValueList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>МашиночитаемаяДоверенностьПредставление</name>
<title>
<key>ru</key>
<value>Машиночитаемая доверенность представление</value>
</title>
<id>14</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Отпечаток</name>
<id>9</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>БольшеНеСпрашивать</name>
@@ -45,6 +45,8 @@
ЗаполнитьПодписи(Параметры.Объект);
ЭлектроннаяПодписьЛокализация.ПриСозданииНаСервере(ЭтотОбъект);
БольшеНеСпрашивать = Ложь;
КонецПроцедуры
@@ -105,7 +107,7 @@
Если ТипЗнч(Объект) = Тип("Строка") Тогда
КоллекцияПодписей = ПолучитьИзВременногоХранилища(Объект);
Иначе
КоллекцияПодписей = ЭлектроннаяПодпись.УстановленныеПодписи(Объект);
КоллекцияПодписей = ЭлектроннаяПодпись.УстановленныеПодписи(Объект, Неопределено, Истина);
КонецЕсли;
Для каждого ВсеСвойстваПодписи Из КоллекцияПодписей Цикл
@@ -115,6 +117,16 @@
НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище(
ВсеСвойстваПодписи.Подпись, УникальныйИдентификатор);
Если ЗначениеЗаполнено(ВсеСвойстваПодписи.РезультатПроверкиПодписиПоМЧД) Тогда
Для Каждого РезультатПроверкиПодписиПоМЧД Из ВсеСвойстваПодписи.РезультатПроверкиПодписиПоМЧД Цикл
НоваяСтрока.МашиночитаемаяДоверенность.Добавить(
РезультатПроверкиПодписиПоМЧД.МашиночитаемаяДоверенность);
НоваяСтрока.МашиночитаемаяДоверенностьПредставление = НоваяСтрока.МашиночитаемаяДоверенностьПредставление
+ ?(ЗначениеЗаполнено(НоваяСтрока.МашиночитаемаяДоверенностьПредставление), Символы.ПС, "")
+ РезультатПроверкиПодписиПоМЧД.МашиночитаемаяДоверенность;
КонецЦикла;
КонецЕсли;
ДанныеПоСертификату = ЭлектроннаяПодписьСлужебный.ДанныеПоСертификату(ВсеСвойстваПодписи, УникальныйИдентификатор);
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеПоСертификату);
@@ -103,6 +103,13 @@
КонецПроцедуры
// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт
Списки.Вставить(Метаданные.Документы.Анкета, Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -275,7 +275,7 @@
// установить расширение для работы с 1С:Предприятием.
// Необязательный. Значение по умолчанию: Ложь.
// * Менеджер - Строка - полное имя объекта метаданных, отвечающего за выполнение команды.
// Например, "Отчет._ДемоКнигаПокупок".
// Например, "Отчет.КнигаПокупок".
// * ИмяФормы - Строка - имя формы, которую требуется открыть или получить для выполнения команды.
// Если Обработчик не указан, то у формы вызывается метод "Открыть".
// * КлючВарианта - Строка - имя варианта отчета, открываемого при выполнении команды.
@@ -16,8 +16,8 @@
// Объекты - Массив из ОбъектМетаданных
//
// Пример:
// Объекты.Добавить(Метаданные.Справочники._ДемоНоменклатура);
// Объекты.Добавить(Метаданные.Справочники._ДемоКонтрагенты);
// Объекты.Добавить(Метаданные.Справочники.Номенклатура);
// Объекты.Добавить(Метаданные.Справочники.Контрагенты);
//
Процедура ПриОпределенииОбъектовСКомандойГрупповогоИзмененияОбъектов(Объекты) Экспорт
@@ -692,6 +692,7 @@
// Выполнить в основном потоке.
Если ВыполнитьБезФоновогоЗадания Тогда
СообщенияПередВызовом = ПолучитьСообщенияПользователю(Истина);
Попытка
Если ПараметрыВыполнения.Свойство("ЭтоФункция") И ПараметрыВыполнения.ЭтоФункция Тогда
ВызватьФункцию(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, ПараметрыВыполнения);
@@ -715,6 +716,10 @@
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Ошибка выполнения'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки);
КонецПопытки;
Результат.Сообщения = ПолучитьСообщенияПользователю(Истина);
Для Каждого Сообщение Из СообщенияПередВызовом Цикл
Сообщение.Сообщить();
КонецЦикла;
Возврат Результат;
КонецЕсли;
@@ -5322,6 +5322,11 @@
// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Анкетирование") Тогда
МодульАнкетирование = ОбщегоНазначения.ОбщийМодуль("Анкетирование");
МодульАнкетирование.ПриЗаполненииСписковСОграничениемДоступа(Списки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда
МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер");
МодульБизнесПроцессыИЗадачиСервер.ПриЗаполненииСписковСОграничениемДоступа(Списки);
@@ -710,70 +710,18 @@
//
Функция ДанныеКлассификатора() Экспорт
ДанныеФайлов = Неопределено;
ДанныеКлассификатора = Новый Структура;
Идентификаторы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторКлассификатора());
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
ДанныеФайлов = МодульРаботаСКлассификаторами.ПолучитьФайлыКлассификаторов(Идентификаторы);
КонецЕсли;
ПроизводственныеКалендари = Новый Структура;
ПроизводственныеКалендари.Вставить("ИмяТаблицы", "");
ПроизводственныеКалендари.Вставить("Данные", Новый ТаблицаЗначений());
Если ДанныеФайлов = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря.
|Классификаторы не поддерживаются или подсистема ""Работа с классификаторами"" отсутствует.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ДанныеПроизводственныхКалендарей = Новый Структура(Новый ФиксированнаяСтруктура(ПроизводственныеКалендари));
Если Не ПустаяСтрока(ДанныеФайлов.КодОшибки) Тогда
ИмяСобытия = НСтр("ru = 'Календарные графики.Получение файла классификатора'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(
ИмяСобытия,
УровеньЖурналаРегистрации.Ошибка,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить данные календаря.
|%1'"),
ДанныеФайлов.ИнформацияОбОшибке));
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить данные календаря.
|%1.'"),
ДанныеФайлов.СообщениеОбОшибке);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ДанныеКлассификатора.Вставить("ПроизводственныеКалендари", ПроизводственныеКалендари);
ДанныеКлассификатора.Вставить("ДанныеПроизводственныхКалендарей", ДанныеПроизводственныхКалендарей);
ОтборСтрок = Новый Структура("Идентификатор");
ОтборСтрок.Идентификатор = ИдентификаторКлассификатора();
НайденныеСтроки = ДанныеФайлов.ДанныеКлассификаторов.НайтиСтроки(ОтборСтрок);
Если НайденныеСтроки.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря.
|Полученные классификаторы не содержат календарей.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
СведенияФайла = НайденныеСтроки[0];
Если СведенияФайла.Версия < ВерсияКалендарей() Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать полученные данные календаря из-за конфликта версий.
|Версия календарей
|- полученного классификатора %1,
|- встроенных в конфигурацию %2,
|- загруженного ранее классификатора %3.
|Рекомендуется выполнить обновление классификаторов.'"),
СведенияФайла.Версия,
ВерсияКалендарей(),
ВерсияЗагруженныхКалендарей());
ВызватьИсключение ТекстСообщения;
КонецЕсли;
Попытка
ДанныеКлассификатора = ДанныеФайлаКлассификатора(СведенияФайла.АдресФайла);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать полученные данные календаря.
|%1.'"),
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстСообщения;
КонецПопытки;
КалендарныеГрафикиЛокализация.ПриПолученииДанныхКлассификатора(ДанныеКлассификатора);
Возврат ДанныеКлассификатора;
@@ -954,7 +902,7 @@
КонецПроцедуры
Функция ДанныеФайлаКлассификатора(Адрес)
Функция ДанныеФайлаКлассификатора(Адрес) Экспорт
ДанныеКлассификатора = Новый Структура(
"ПроизводственныеКалендари,
@@ -0,0 +1,95 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Запрашивает файл с данными классификатора календарей.
// Преобразует полученный файл в структуру с таблицами календарей и их данных.
// Если не удалось получить файл классификатора, вызывается исключение.
//
// Параметры:
// ДанныеКлассификатора - Структура:
// * ПроизводственныеКалендари - Структура:
// * ИмяТаблицы - Строка - имя таблицы.
// * Данные - ТаблицаЗначений - преобразованная из XML таблица календарей.
// * ДанныеПроизводственныхКалендарей - Структура:
// * ИмяТаблицы - Строка - имя таблицы.
// * Данные - ТаблицаЗначений - преобразованная из XML таблица данных календарей.
//
Процедура ПриПолученииДанныхКлассификатора(ДанныеКлассификатора) Экспорт
// Локализация
ДанныеФайлов = Неопределено;
Идентификаторы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(КалендарныеГрафики.ИдентификаторКлассификатора());
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
ДанныеФайлов = МодульРаботаСКлассификаторами.ПолучитьФайлыКлассификаторов(Идентификаторы);
КонецЕсли;
Если ДанныеФайлов = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря.
|Классификаторы не поддерживаются или подсистема ""Работа с классификаторами"" отсутствует.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
Если Не ПустаяСтрока(ДанныеФайлов.КодОшибки) Тогда
ИмяСобытия = НСтр("ru = 'Календарные графики.Получение файла классификатора'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(
ИмяСобытия,
УровеньЖурналаРегистрации.Ошибка,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить данные календаря.
|%1'"),
ДанныеФайлов.ИнформацияОбОшибке));
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить данные календаря.
|%1.'"),
ДанныеФайлов.СообщениеОбОшибке);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ОтборСтрок = Новый Структура("Идентификатор");
ОтборСтрок.Идентификатор = КалендарныеГрафики.ИдентификаторКлассификатора();
НайденныеСтроки = ДанныеФайлов.ДанныеКлассификаторов.НайтиСтроки(ОтборСтрок);
Если НайденныеСтроки.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Не удалось получить данные календаря.
|Полученные классификаторы не содержат календарей.'");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
СведенияФайла = НайденныеСтроки[0];
Если СведенияФайла.Версия < КалендарныеГрафики.ВерсияКалендарей() Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать полученные данные календаря из-за конфликта версий.
|Версия календарей
|- полученного классификатора %1,
|- встроенных в конфигурацию %2,
|- загруженного ранее классификатора %3.
|Рекомендуется выполнить обновление классификаторов.'"),
СведенияФайла.Версия,
КалендарныеГрафики.ВерсияКалендарей(),
КалендарныеГрафики.ВерсияЗагруженныхКалендарей());
ВызватьИсключение ТекстСообщения;
КонецЕсли;
Попытка
ДанныеКлассификатора = КалендарныеГрафики.ДанныеФайлаКлассификатора(СведенияФайла.АдресФайла);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось обработать полученные данные календаря.
|%1.'"),
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение ТекстСообщения;
КонецПопытки;
// Конец Локализация
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="87251f18-17da-497a-9b39-f84a388c855c">
<name>КалендарныеГрафикиЛокализация</name>
<synonym>
<key>ru</key>
<value>Календарные графики локализация</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -2556,33 +2556,23 @@
ИмяПоляПоиска = "ПредставлениеПутиКДанным";
КонецЕсли;
Владелец = Неопределено;
Папки = Новый Массив;
Владельцы = Новый Массив;
Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
Если НРег(Реквизит[ИмяПоляПоиска]) = НРег(ПутьКДанным) Тогда
Возврат Реквизит;
КонецЕсли;
Если Реквизит.Папка Тогда
Папки.Добавить(Реквизит);
Иначе
Если СтрНачинаетсяС(НРег(ПутьКДанным), НРег(Реквизит[ИмяПоляПоиска]) + ".") Тогда
Владелец = Реквизит;
КонецЕсли;
Если Реквизит.Папка Или СтрНачинаетсяС(НРег(ПутьКДанным), НРег(Реквизит[ИмяПоляПоиска]) + ".") Тогда
Владельцы.Добавить(Реквизит);
КонецЕсли;
КонецЦикла;
Если Владелец <> Неопределено Тогда
Для Каждого Владелец Из Владельцы Цикл
РазвернутьРеквизит(Владелец.ПолучитьИдентификатор(), ИмяСписка, Форма);
Возврат НайтиРеквизит(Форма, ИмяСписка, ПутьКДанным, Владелец.ПолучитьЭлементы(), ИскатьПоПредставлению);
КонецЕсли;
НайденныйРеквизит = НайтиРеквизит(Форма, ИмяСписка, ПутьКДанным, Владелец.ПолучитьЭлементы(), ИскатьПоПредставлению);
Для Каждого Папка Из Папки Цикл
РазвернутьРеквизит(Папка.ПолучитьИдентификатор(), ИмяСписка, Форма);
Реквизит = НайтиРеквизит(Форма, ИмяСписка, ПутьКДанным, Папка.ПолучитьЭлементы(), ИскатьПоПредставлению);
Если Реквизит <> Неопределено Тогда
Возврат Реквизит;
Если НайденныйРеквизит <> Неопределено Тогда
Возврат НайденныйРеквизит;
КонецЕсли;
КонецЦикла;
@@ -99,7 +99,7 @@
// Проверка.Причины = НСтр("ru='Не введен комментарий в документе.'");
// Проверка.Рекомендация = НСтр("ru='Ввести комментарий в документе.'");
// Проверка.Идентификатор = "ПроверитьКомментарийВПоступленииТоваров";
// Проверка.ОбработчикПроверки = "_ДемоСтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров";
// Проверка.ОбработчикПроверки = "СтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров";
// Проверка.ДатаНачалаПроверки = Дата('20140101000000');
// Проверка.ЛимитПроблем = 3;
// 2) Добавление группы проверок
@@ -224,11 +224,11 @@
// Пример:
// Проверка = Проверки.Добавить();
// Проверка.ИдентификаторГруппы = "СистемныеПроверки";
// Проверка.Наименование = НСтр("ru='Демо: Проверка заполнения комментария в документах ""Демо: Поступление товаров""'");
// Проверка.Наименование = НСтр("ru='Проверка заполнения комментария в документах ""Поступление товаров""'");
// Проверка.Причины = НСтр("ru='Не введен комментарий в документе.'");
// Проверка.Рекомендация = НСтр("ru='Ввести комментарий в документе.'");
// Проверка.Идентификатор = "ПроверитьКомментарийВПоступленииТоваров";
// Проверка.ОбработчикПроверки = "_ДемоСтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров";
// Проверка.ОбработчикПроверки = "СтандартныеПодсистемы.ПроверитьКомментарийВПоступленииТоваров";
// Проверка.ДатаНачалаПроверки = Дата('20140101000000');
// Проверка.ЛимитПроблем = 3;
//
@@ -154,14 +154,14 @@
Коллекции = Новый СписокЗначений;
Коллекции.Добавить("Роли");
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина);
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", Выбранные);
ПараметрыПодбора.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", Коллекции);
ПараметрыПодбора.Вставить("СпособГруппировкиОбъектов", "ПоВидам");
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор ролей'"));
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбиратьСсылки = Истина;
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = Выбранные;
ПараметрыПодбора.КоллекцииВыбираемыхОбъектовМетаданных = Коллекции;
ПараметрыПодбора.СпособГруппировкиОбъектов = "ПоВидам";
ПараметрыПодбора.Заголовок = НСтр("ru = 'Подбор ролей'");
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора,,,,, ОповещениеОЗакрытии);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, ОповещениеОЗакрытии);
КонецПроцедуры
@@ -173,6 +173,8 @@
| МашиночитаемыеДоверенностиДоверители.ОГРН КАК ДоверительОГРН,
| МашиночитаемыеДоверенностиДоверители.СНИЛС КАК ДоверительСНИЛС,
| МашиночитаемыеДоверенностиДоверители.КПП КАК ДоверительКПП,
| МашиночитаемыеДоверенностиДоверители.ФИО КАК ДоверительФИО,
| МашиночитаемыеДоверенностиПредставители.ФИО КАК ПредставительФИО,
| МашиночитаемыеДоверенностиДоверители.Организация КАК ДоверительОрганизация,
| МашиночитаемыеДоверенностиДоверители.ФизическоеЛицо КАК ДоверительФизическоеЛицо,
| МашиночитаемыеДоверенностиДоверители.НаименованиеОрганизации КАК ДоверительНаименованиеОрганизации,
@@ -185,18 +187,21 @@
| МашиночитаемыеДоверенностиСтатусы.Подписана КАК Подписана,
| МашиночитаемыеДоверенности.ДатаОкончания КАК ДатаОкончания,
| МашиночитаемыеДоверенности.ДатаОтмены КАК ДатаОтмены,
| МашиночитаемыеДоверенности.ПометкаУдаления КАК ПометкаУдаления
| МашиночитаемыеДоверенности.ПометкаУдаления КАК ПометкаУдаления,
| МашиночитаемыеДоверенности.СтатусВернаУстановленВручную,
| МашиночитаемыеДоверенности.УстановившийСтатусВерна
|ИЗ
| РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставители
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиДоверители
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
| МашиночитаемыеДоверенностиДоверители
| ПО (МашиночитаемыеДоверенностиПредставители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель))
| И (МашиночитаемыеДоверенностиДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель))
| И (МашиночитаемыеДоверенностиДоверители.МашиночитаемаяДоверенность = МашиночитаемыеДоверенностиПредставители.МашиночитаемаяДоверенность)
| И
| (МашиночитаемыеДоверенностиДоверители.МашиночитаемаяДоверенность = МашиночитаемыеДоверенностиПредставители.МашиночитаемаяДоверенность)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.МашиночитаемыеДоверенности КАК МашиночитаемыеДоверенности
| ПО МашиночитаемыеДоверенностиПредставители.МашиночитаемаяДоверенность = МашиночитаемыеДоверенности.Ссылка
| {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МашиночитаемыеДоверенностиСтатусы КАК МашиночитаемыеДоверенностиСтатусы
| ПО (МашиночитаемыеДоверенности.Ссылка = МашиночитаемыеДоверенностиСтатусы.МашиночитаемаяДоверенность)}
|";
| ПО (МашиночитаемыеДоверенности.Ссылка = МашиночитаемыеДоверенностиСтатусы.МашиночитаемаяДоверенность)}";
Условия = Новый Массив;
@@ -33,6 +33,7 @@
// * Полномочия - Массив из Строка - коды полномочий
// * СертификатДоверителя - см. МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату
// * СертификатПредставителя - см. МашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату
// * НаДату - Дата - статусы отобразятся на переданную дату.
//
Функция ОтборыСпискаДоверенностей() Экспорт
Результат = Новый Структура;
@@ -44,6 +45,7 @@
Результат.Вставить("Полномочия");
Результат.Вставить("СертификатДоверителя");
Результат.Вставить("СертификатПредставителя");
Результат.Вставить("НаДату");
Возврат Результат;
КонецФункции
@@ -733,6 +733,82 @@
КонецФункции
// Создает новые либо перезаполняет существующие элементы справочника МашиночитаемыеДоверенности данными из файлов.
//
// Параметры:
// ЗагруженныеФайлы - Массив из Структура - файлы доверенностей и подписей, архивы zip:
// * ИмяФайла - Строка - имя файла без пути к нему,
// * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
// - Структура - уже разобранные файлы доверенностей и подписей:
// * ФайлыДоверенностей - Соответствие
// * ПодписиФайлов - Соответствие
//
// Замещать - Булево - при замещении выполняется перезаполнение элемента, все имеющиеся присоединенные файлы при этом
// помечаются на удаление.
//
Функция ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать = Ложь) Экспорт
Возврат Справочники.МашиночитаемыеДоверенности.ЗагрузитьДоверенностиВИнформационнуюБазу(ЗагруженныеФайлы, Замещать = Ложь);
КонецФункции
// Возвращает свойства или ссылку на существующие элементы справочника МашиночитаемыеДоверенности.
//
// Параметры:
// ЗагруженныеФайлы - Массив из Структура - файлы доверенностей и подписей, архивы zip:
// * ИмяФайла - Строка - имя файла без пути к нему,
// * Хранение - Строка - адрес двоичных данных файла во временном хранилище.
// - Структура - уже разобранные файлы доверенностей и подписей:
// * ФайлыДоверенностей - Соответствие
// * ПодписиФайлов - Соответствие
//
Функция СвойстваДоверенностейИзФайлов(ЗагруженныеФайлы, УникальныйИдентификатор) Экспорт
Возврат Справочники.МашиночитаемыеДоверенности.СвойстваДоверенностейИзФайлов(ЗагруженныеФайлы,
УникальныйИдентификатор);
КонецФункции
// Результат проверки подписи по МЧД.
//
// Параметры:
// Доверенность - СправочникСсылка.МашиночитаемыеДоверенности
//
// Возвращаемое значение:
// Структура:
// * МашиночитаемаяДоверенность - СправочникСсылка.МашиночитаемыеДоверенности
// * Представление - Строка - представление доверенности для отображения пользователям, т.к. может не быть прав на чтение.
// * ТребуетсяПроверка - Булево
// * ДатаПроверки - Дата
// * Верна - Булево
// * ПодписантСоответствуетПредставителю - Булево
// * СовместныеПолномочия - Булево
// * СовместныеПолномочияВерны - Булево
// * СтатусВернаУстановленВручную - Булево
// * УстановившийСтатусВерна - СправочникСсылка.Пользователи
// * ПротоколПроверки - Соответствие из КлючИЗначение:
// ** Ключ - Строка - идентификатор проверки
// ** Значение - см. МашиночитаемыеДоверенностиФНС.РезультатПроверкиДляПротокола
//
Функция НовыйРезультатПроверкиПодписиПоМЧД(Доверенность) Экспорт
Структура = Новый Структура;
Структура.Вставить("Представление");
Структура.Вставить("МашиночитаемаяДоверенность", Доверенность);
Структура.Вставить("ТребуетсяПроверка", Истина);
Структура.Вставить("ДатаПроверки");
Структура.Вставить("Верна");
Структура.Вставить("ПодписантСоответствуетПредставителю");
Структура.Вставить("СовместныеПолномочия");
Структура.Вставить("СовместныеПолномочияВерны");
Структура.Вставить("ПротоколПроверки");
Структура.Вставить("СтатусВернаУстановленВручную", Ложь);
Структура.Вставить("УстановившийСтатусВерна");
Возврат Структура;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -2539,46 +2615,6 @@
КонецФункции
// Результат проверки подписи по МЧД.
//
// Параметры:
// Доверенность - СправочникСсылка.МашиночитаемыеДоверенности
//
// Возвращаемое значение:
// Структура:
// * МашиночитаемаяДоверенность - СправочникСсылка.МашиночитаемыеДоверенности
// * Представление - Строка - представление доверенности для отображения пользователям, т.к. может не быть прав на чтение.
// * ТребуетсяПроверка - Булево
// * ДатаПроверки - Дата
// * Верна - Булево
// * ПодписантСоответствуетПредставителю - Булево
// * СовместныеПолномочия - Булево
// * СовместныеПолномочияВерны - Булево
// * СтатусВернаУстановленВручную - Булево
// * УстановившийСтатусВерна - СправочникСсылка.Пользователи
// * ПротоколПроверки - Соответствие из КлючИЗначение:
// ** Ключ - Строка - идентификатор проверки
// ** Значение - см. МашиночитаемыеДоверенностиФНС.РезультатПроверкиДляПротокола
//
Функция НовыйРезультатПроверкиПодписиПоМЧД(Доверенность) Экспорт
Структура = Новый Структура;
Структура.Вставить("Представление");
Структура.Вставить("МашиночитаемаяДоверенность", Доверенность);
Структура.Вставить("ТребуетсяПроверка", Истина);
Структура.Вставить("ДатаПроверки");
Структура.Вставить("Верна");
Структура.Вставить("ПодписантСоответствуетПредставителю");
Структура.Вставить("СовместныеПолномочия");
Структура.Вставить("СовместныеПолномочияВерны");
Структура.Вставить("ПротоколПроверки");
Структура.Вставить("СтатусВернаУстановленВручную", Ложь);
Структура.Вставить("УстановившийСтатусВерна");
Возврат Структура;
КонецФункции
Функция РеквизитыНотариальнойДоверенности() Экспорт
Структура = Новый Структура;
@@ -2638,7 +2674,7 @@
Файл = Новый Файл(ЗагруженныйФайл.ИмяФайла);
Если НРег(Файл.Расширение) = ".zip" Тогда
ДвоичныеДанные = Новый ДвоичныеДанные(ЗагруженныйФайл.ПолноеИмя);
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ЗагруженныйФайл.Хранение);
ИменаФайловВАрхиве = ИменаФайловВАрхиве(ДвоичныеДанные);
Для Каждого ИмяФайлаВАрхиве Из ИменаФайловВАрхиве Цикл
@@ -13776,7 +13776,7 @@
// Массив = Новый Массив;
// Массив.Добавить("Константа.ИспользоватьСинхронизациюДанных");
// Массив.Добавить("Справочник.Валюты");
// Массив.Добавить("Справочник._ДемоОрганизации");
// Массив.Добавить("Справочник.Организации");
// Отбор = Новый Структура;
// Отбор.Вставить("ПолноеИмя", Массив);
//
@@ -14017,7 +14017,7 @@
// Возвращаемое значение:
// ТаблицаЗначений - содержит строки с описанием подробных отборов по сценарию узла:
// * ПолноеИмяМетаданных - Строка - полное имя метаданных регистрируемого объекта, отбор которого описывает строка.
// Например "Документ._ДемоПоступлениеТоваров". Можно
// Например "Документ.ПоступлениеТоваров". Можно
// использовать специальные значения "ВсеДокументы" и
// "ВсеСправочники" для отбора соответственно всех
// документов и всех справочников, регистрирующихся на узле "Получатель".
@@ -3849,7 +3849,7 @@
// Либо точка маршрута, например, "БизнесПроцесс.Задание.ТочкаМаршрута.УдалитьВернутьИсполнителю".
// Либо все точки маршрута, например, "БизнесПроцесс.Задание.Точки".
// Либо поле регистра, входящее в уникальный индекс,
// например, измерение "РегистрСведений._ДемоОтветственныеЛица.Склад".
// например, измерение "РегистрСведений.ОтветственныеЛица.Склад".
//
// Уточнение - Булево - когда в параметре Объект указан удаляемый в будущем объект.
// Имя объекта должно начинаться с Удалить.
@@ -4288,7 +4288,9 @@
СведенияОбОбновлении.ТекущаяИтерацияОбновления = 1;
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении);
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Константы.ПорядокОбрабатываемыхДанных.Установить(Перечисления.ПорядокОбработчиковОбновления.Критичный);
КонецЕсли;
Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Ложь);
Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.10.226";
Описание.Версия = "3.1.10.248";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1608,8 +1608,8 @@
// "<ВидОМ>.<ИмяОМ>.<ТипРеквизитаИлиТЧ>.<ИмяРеквизитаИлиТЧ>[.<ТипРеквизита>.<ИмяРеквизитаТЧ>]".
// Примеры:
// "РегистрСведений.ВерсииОбъектов.Реквизит.АвторВерсии",
// "Документ._ДемоЗаказПокупателя.ТабличнаяЧасть.СчетаНаОплату.Реквизит.Счет",
// "ПланВидовРасчета._ДемоОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета".
// "Документ.ЗаказПокупателя.ТабличнаяЧасть.СчетаНаОплату.Реквизит.Счет",
// "ПланВидовРасчета.ОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета".
// Относительный путь к реквизиту должен получиться таким, чтобы его можно было использовать в условиях запроса:
// "<ИмяРеквизитаИлиТЧ>[.<ИмяРеквизитаТЧ>]".
Если КоличествоПодстрок = 4 Тогда
@@ -2017,8 +2017,9 @@
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
Возврат СтандартныеПодсистемыПовтИсп.ИнформационнаяБазаФайловая();
КонецЕсли;
Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
КонецФункции
@@ -4517,17 +4518,17 @@
// ВерсияИБ - Строка - версия конечной конфигурации, при переходе на которую нужно
// выполнить переименование, например, "2.1.2.14".
// СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать,
// например "Подсистема._ДемоПодсистемы".
// например "Подсистема.СлужебныеПодсистемы".
// НовоеПолноеИмя - Строка - новое полное имя объекта метаданных, на которое нужно переименовать,
// например "Подсистема._ДемоСервисныеПодсистемы".
// например "Подсистема.СервисныеПодсистемы".
// ИдентификаторБиблиотеки - Строка - внутренний идентификатор библиотеки, к которой относится ВерсияИБ.
// Для основной конфигурации не требуется.
// Например, "СтандартныеПодсистемы" - как указано
// в ОбновлениеИнформационнойБазыБСП.ПриДобавленииПодсистемы.
// Пример:
// ОбщегоНазначения.ДобавитьПереименование(Итог, "2.1.2.14",
// "Подсистема._ДемоПодсистемы",
// "Подсистема._ДемоСервисныеПодсистемы");
// "Подсистема.СлужебныеПодсистемы",
// "Подсистема.СервисныеПодсистемы");
//
Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт
@@ -7041,7 +7042,7 @@
// Реквизиты.Добавить("Номер");
// Реквизиты.Добавить("Валюта.НаименованиеПолное");
//
// Результат = ОбщегоНазначения.ПроверитьСуществованиеРеквизитовОбъекта("Документ._ДемоЗаказПокупателя", Реквизиты);
// Результат = ОбщегоНазначения.ПроверитьСуществованиеРеквизитовОбъекта("Документ.ЗаказПокупателя", Реквизиты);
//
// Если Результат.Ошибка Тогда
// ВызватьИсключение Результат.ОписаниеОшибки;
@@ -1897,9 +1897,8 @@
Возврат Ложь;
КонецЕсли;
// Проверяем наличие спецсимволов в начале и в конце домена.
Если ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда
// Проверяем наличие спецсимволов в начале и в конце имени и домена.
Если ЕстьСимволыВНачалеВКонце(ЛокальноеИмя, ".") Или ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда
Возврат Ложь;
КонецЕсли;
@@ -181,7 +181,7 @@
// Пример:
// ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов);
// ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Измерения.Объект);
// ИсключенияПоискаСсылок.Добавить("ПланВидовРасчета._ДемоОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета");
// ИсключенияПоискаСсылок.Добавить("ПланВидовРасчета.ОсновныеНачисления.СтандартнаяТабличнаяЧасть.БазовыеВидыРасчета.СтандартныйРеквизит.ВидРасчета");
//
Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт
@@ -249,8 +249,8 @@
//
// Пример:
// ОбщегоНазначения.ДобавитьПереименование(Итог, "2.1.2.14",
// "Подсистема._ДемоПодсистемы",
// "Подсистема._ДемоСервисныеПодсистемы");
// "Подсистема.СлужебныеПодсистемы",
// "Подсистема.СервисныеПодсистемы");
//
Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт
@@ -32,49 +32,41 @@
// Запрос.УстановитьПараметр("Ссылка", Организация);
// Запрос.Текст =
// "ВЫБРАТЬ
// | _ДемоОрганизации.Ссылка КАК Ссылка,
// | _ДемоОрганизации.ВерсияДанных КАК ВерсияДанных,
// | _ДемоОрганизации.ПометкаУдаления КАК ПометкаУдаления,
// | _ДемоОрганизации.Код КАК Код,
// | _ДемоОрганизации.Наименование КАК Наименование,
// | _ДемоОрганизации.БИК КАК БИК,
// | _ДемоОрганизации.ГлавныйБухгалтер КАК ГлавныйБухгалтер,
// | _ДемоОрганизации.Директор КАК Директор,
// | _ДемоОрганизации.ИндивидуальныйПредприниматель КАК ИндивидуальныйПредприниматель,
// | _ДемоОрганизации.ИНН КАК ИНН,
// | _ДемоОрганизации.ИнформационноеОбслуживание КАК ИнформационноеОбслуживание,
// | _ДемоОрганизации.КорреспондентскийСчет КАК КорреспондентскийСчет,
// | _ДемоОрганизации.КПП КАК КПП,
// | _ДемоОрганизации.НаименованиеПолное КАК НаименованиеПолное,
// | _ДемоОрганизации.НаименованиеСокращенное КАК НаименованиеСокращенное,
// | _ДемоОрганизации.ОГРН КАК ОГРН,
// | _ДемоОрганизации.Префикс КАК Префикс,
// | _ДемоОрганизации.РасчетныйСчет КАК РасчетныйСчет,
// | _ДемоОрганизации.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
// | _ДемоОрганизации.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь,
// | _ДемоОрганизации.Предопределенный КАК Предопределенный,
// | _ДемоОрганизации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
// | Организации.Ссылка КАК Ссылка,
// | Организации.ВерсияДанных КАК ВерсияДанных,
// | Организации.ПометкаУдаления КАК ПометкаУдаления,
// | Организации.Код КАК Код,
// | Организации.Наименование КАК Наименование,
// | Организации.БИК КАК БИК,
// | Организации.ГлавныйБухгалтер КАК ГлавныйБухгалтер,
// | Организации.Директор КАК Директор,
// | Организации.ИндивидуальныйПредприниматель КАК ИндивидуальныйПредприниматель,
// | Организации.ИНН КАК ИНН,
// | Организации.ИнформационноеОбслуживание КАК ИнформационноеОбслуживание,
// | Организации.КорреспондентскийСчет КАК КорреспондентскийСчет,
// | Организации.КПП КАК КПП,
// | Организации.НаименованиеПолное КАК НаименованиеПолное,
// | Организации.НаименованиеСокращенное КАК НаименованиеСокращенное,
// | Организации.ОГРН КАК ОГРН,
// | Организации.Префикс КАК Префикс,
// | Организации.РасчетныйСчет КАК РасчетныйСчет,
// | Организации.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
// | Организации.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь,
// | Организации.Предопределенный КАК Предопределенный,
// | Организации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
// |ИЗ
// | Справочник._ДемоОрганизации КАК _ДемоОрганизации
// | Справочник.Организации КАК Организации
// |ГДЕ
// | _ДемоОрганизации.Ссылка = &Ссылка";
// | Организации.Ссылка = &Ссылка";
//
// РезультатЗапроса = Запрос.Выполнить();
//
// ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
//
// Если ВыборкаДетальныеЗаписи.Следующий() Тогда
//
// Для каждого Элемент Из СвойстваОрганизации Цикл
//
// Если РезультатЗапроса.Колонки.Найти(Элемент) <> Неопределено Тогда
//
// РегистрационныеДанные.Вставить(Элемент, ВыборкаДетальныеЗаписи[Элемент]);
//
// КонецЕсли;
//
// КонецЦикла;
//
// КонецЕсли;
//
Процедура ПриОпределенииРегистрационныхДанныхОрганизации(Организация, Поля, Дата, РегистрационныеДанные, КодЯзыка) Экспорт
@@ -651,12 +651,12 @@
Если ЭтоВыборОбъектовМетаданных Тогда
ПроверитьОтмеченныеЗначения(ОтмеченныеЗначения, ДоступныеТипы);
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", ОтмеченныеЗначения);
ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина);
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор таблиц'"));
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = ОтмеченныеЗначения;
ПараметрыПодбора.ВыбиратьСсылки = Истина;
ПараметрыПодбора.Заголовок = НСтр("ru = 'Подбор таблиц'");
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора,,,,, Обработчик);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, Обработчик);
КонецЕсли;
Возврат ЭтоВыборОбъектовМетаданных;
@@ -160,7 +160,7 @@
// &НаКлиенте
// Процедура ПослеЗаписи(ПараметрыЗаписи)
// Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
// ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведение, "_ДемоПроведениеДокумента");
// ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведение, "ПроведениеДокумента");
// КонецЕсли;
// КонецПроцедуры
//
@@ -66,14 +66,17 @@
// См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт
Зависимость = Настройки.Добавить();
Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности;
Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ВыполнятьЗамерыПроизводительности;
Зависимость.РаботаетСВнешнимиРесурсами = Истина;
Зависимость = Настройки.Добавить();
Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаЗамеровВремени;
Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ВыполнятьЗамерыПроизводительности;
Зависимость.РаботаетСВнешнимиРесурсами = Истина;
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности;
Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ВыполнятьЗамерыПроизводительности;
Настройка.РаботаетСВнешнимиРесурсами = Истина;
Настройка.Параметризуется = Истина;
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаЗамеровВремени;
Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ВыполнятьЗамерыПроизводительности;
Настройка.РаботаетСВнешнимиРесурсами = Истина;
КонецПроцедуры
// См. РаботаВБезопасномРежимеПереопределяемый.ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам.
@@ -67,6 +67,14 @@
Если ЕстьПараметрыСписка <> ЕстьПараметрыОбъекта Тогда
ЭтоФормаОбъекта = ЕстьПараметрыОбъекта;
КонецЕсли;
Если ЭтоФормаОбъекта = Неопределено Тогда
РеквизитыФормы = Форма.ПолучитьРеквизиты();
Если РеквизитыФормы.Количество() > 0 И РеквизитыФормы[0].ТипЗначения = Новый ОписаниеТипов("ДинамическийСписок") Тогда
ЭтоФормаОбъекта = Ложь;
КонецЕсли;
КонецЕсли;
// Для форм внешних отчетов и обработок невозможно получить метаданные имея только имя формы,
// поэтому определение источников команд выполняется до вызова ПовтИсп.
Если ИсточникиЧерезЗапятую = "" И ТребуетсяУказаниеИсточниковКоманд(ИмяФормы) Тогда
@@ -1048,11 +1056,16 @@
Функция КлючПараметровРазмещения(Знач ПараметрыРазмещения)
ПараметрыРазмещения = ОбщегоНазначения.СкопироватьРекурсивно(ПараметрыРазмещения);
ПараметрыРазмещения.Удалить("ЭтоФормаОбъекта");
ГруппаФормы = ПараметрыРазмещения.КоманднаяПанель;
Если ТипЗнч(ГруппаФормы) = Тип("ГруппаФормы") Тогда
ПараметрыРазмещения.КоманднаяПанель = ГруппаФормы.Имя;
КонецЕсли;
Источники = Новый Массив;
Если ТипЗнч(ПараметрыРазмещения.Источники) = Тип("Массив") Тогда
Для Каждого ОбъектМетаданных Из ПараметрыРазмещения.Источники Цикл
Источники.Добавить(ОбъектМетаданных.ПолноеИмя());
@@ -45,8 +45,8 @@
// Объекты - Массив из ОбъектМетаданных
//
// Пример:
// Объекты.Добавить(Метаданные.Справочники._ДемоНоменклатура);
// Объекты.Добавить(Метаданные.Справочники._ДемоКонтрагенты);
// Объекты.Добавить(Метаданные.Справочники.Номенклатура);
// Объекты.Добавить(Метаданные.Справочники.Контрагенты);
//
Процедура ПриОпределенииОбъектовСКомандамиОбъединенияДублейЗаменыСсылок(Объекты) Экспорт
@@ -27,7 +27,7 @@
// РазделГлавное.Раздел = "Главное";
// РазделГлавное.Картинка = БиблиотекаКартинок.РазделГлавное;
//
// СчетНаОплату = Метаданные.Документы._ДемоСчетНаОплатуПокупателю;
// СчетНаОплату = Метаданные.Документы.СчетНаОплатуПокупателю;
// Если ПравоДоступа("Просмотр", СчетНаОплату)
// И ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(СчетНаОплату) Тогда
//
@@ -7621,6 +7621,13 @@
//
Функция КлючиРолейПользователяИБ(ПользовательИБ)
Для Каждого Роль Из ПользовательИБ.Роли Цикл
Прервать;
КонецЦикла;
Если Роль = Неопределено Тогда
Возврат "";
КонецЕсли;
РолиРасширений = ПользователиСлужебныйПовтИсп.РолиРасширений();
Список = Новый СписокЗначений;
@@ -20,9 +20,9 @@
// создавать файлы по шаблонам.
//
// Пример:
// Настройки.НеОчищатьФайлы.Добавить(Метаданные.Справочники._ДемоНоменклатура);
// Настройки.НеСинхронизироватьФайлы.Добавить(Метаданные.Справочники._ДемоПартнеры);
// Настройки.НеСоздаватьФайлыПоШаблону.Добавить(Метаданные.Справочники._ДемоПартнеры);
// Настройки.НеОчищатьФайлы.Добавить(Метаданные.Справочники.Номенклатура);
// Настройки.НеСинхронизироватьФайлы.Добавить(Метаданные.Справочники.Партнеры);
// Настройки.НеСоздаватьФайлыПоШаблону.Добавить(Метаданные.Справочники.Партнеры);
//
Процедура ПриОпределенииНастроек(Настройки) Экспорт
@@ -39,8 +39,8 @@
// Основной справочник используется для интерактивной работы с файлами.
//
// Пример:
// Если ТипВладелецФайла = Тип("СправочникСсылка._ДемоНоменклатура") Тогда
// ИменаСправочников["_ДемоНоменклатураПрисоединенныеФайлы"] = Ложь;
// Если ТипВладелецФайла = Тип("СправочникСсылка.Номенклатура") Тогда
// ИменаСправочников["НоменклатураПрисоединенныеФайлы"] = Ложь;
// ИменаСправочников.Вставить("Файлы", Истина);
// КонецЕсли;
//
@@ -1140,6 +1140,7 @@
Элементы.ГруппаЭлектронныеПодписи.Видимость = ДоступнаЭлектроннаяПодпись;
Элементы.ГруппаСертификатыШифрования.Видимость = ПросмотрЗашифрованных И ДоступнаЭлектроннаяПодпись;
Элементы.Инструкция.Видимость = Подписание И ВидимостьИнструкции;
Элементы.ФормаСохранитьВместеСПодписью.Видимость = Форма.ЭлектронныеПодписи.Количество() <> 0;
КонецЕсли;
КонецЕсли;
@@ -2980,13 +2980,19 @@
РезультатПроверкиДоверенностей = ПолучитьИзВременногоХранилища(СтрокаПодписи.РезультатПроверкиПодписиПоМЧД);
НовыйРезультатПроверкиДоверенностей = Новый Массив;
Для Каждого Результат Из РезультатПроверкиДоверенностей Цикл
Если Не ЗначениеЗаполнено(РезультатПроверкиПодписи.Сертификат) Тогда
НовыйРезультатПроверкиДоверенностей.Добавить(
МодульМашиночитаемыеДоверенностиФНССлужебный.НовыйРезультатПроверкиПодписиПоМЧД(
Результат.МашиночитаемаяДоверенность));
Иначе
РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(
Результат.МашиночитаемаяДоверенность, ПодписанныйОбъект, РезультатПроверкиПодписи.Сертификат,
СтрокаПодписи.ДатаПодписи);
НовыйРезультатПроверкиДоверенностей.Добавить(РезультатПроверкиПодписиПоМЧД);
СтрокаПодписи.РезультатПроверкиДоверенностей = ПоместитьВоВременноеХранилище(
НовыйРезультатПроверкиДоверенностей, СтрокаПодписи.РезультатПроверкиПодписиПоМЧД);
КонецЕсли;
КонецЦикла;
СтрокаПодписи.РезультатПроверкиПодписиПоМЧД = ПоместитьВоВременноеХранилище(
НовыйРезультатПроверкиДоверенностей, СтрокаПодписи.РезультатПроверкиПодписиПоМЧД);
КонецЕсли;
// Конец Локализация
@@ -3000,42 +3006,19 @@
КонецПроцедуры
// Локализация
Функция ПроверитьПодписиПоМЧД(Подписи, ПодписанныйОбъект) Экспорт
РезультатыПроверок = Новый Массив;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Возврат Новый Массив;
КонецЕсли;
МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль(
"МашиночитаемыеДоверенностиФНССлужебный");
Для Каждого Подпись Из Подписи Цикл
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль(
"ЭлектроннаяПодписьСлужебный");
РезультатПроверкиДоверенностей = ПолучитьИзВременногоХранилища(Подпись.РезультатПроверкиПодписиПоМЧД);
НовыйРезультатПроверкиДоверенностей = Новый Массив;
Для Каждого Результат Из РезультатПроверкиДоверенностей Цикл
РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(
Результат.МашиночитаемаяДоверенность, ПодписанныйОбъект, Подпись.Сертификат, Подпись.ДатаПодписи);
НовыйРезультатПроверкиДоверенностей.Добавить(РезультатПроверкиПодписиПоМЧД);
КонецЦикла;
РезультатПроверки = Новый Структура("Индекс, РезультатПроверкиПодписиПоМЧД", Подпись.Индекс,
НовыйРезультатПроверкиДоверенностей);
МодульМашиночитаемыеДоверенностиФНССлужебный.ДобавитьИнформациюМЧД(РезультатПроверки,
Подпись.РезультатПроверкиПодписиПоМЧД);
РезультатыПроверок.Добавить(РезультатПроверки);
КонецЦикла;
Возврат РезультатыПроверок;
Возврат МодульЭлектроннаяПодписьСлужебный.ПроверитьПодписиПоМЧД(Подписи, ПодписанныйОбъект);
КонецФункции
// Конец Локализация
// Заносит номер в регистр сведений НомераОтсканированныхФайлов.
//
// Параметры:
@@ -1159,6 +1159,11 @@
КонецПроцедуры
Процедура ОбработкаВыбораТабличногоДокумента(ФормаОтчета, Элемент, Область, СтандартнаяОбработка) Экспорт
Если ФормаОтчета.НастройкиОтчета.ПолноеИмя <> "Отчет.ПроверкаЦелостностиТома" Тогда
Возврат;
КонецЕсли;
Если Область.Расшифровка = "ПроверкаЦелостностиТома.ВосстановитьФайлы" Тогда
СтандартнаяОбработка = Ложь;
Том = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Том").Значение;
@@ -1175,6 +1180,7 @@
ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -1168,10 +1168,10 @@
// См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт
Зависимость = Настройки.Добавить();
Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов;
Зависимость.РаботаетСВнешнимиРесурсами = Истина;
Зависимость.Параметризуется = Истина;
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов;
Настройка.РаботаетСВнешнимиРесурсами = Истина;
Настройка.Параметризуется = Истина;
КонецПроцедуры
// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков.
@@ -2301,12 +2301,12 @@
Для Каждого АдресЭП Из АдресаПолучателя Цикл
ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, СтрокаПолучатель.Ключ, ПараметрыДоставки.ДатаВыполнения);
ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись;
ПоляИстории.АдресЭП = АдресЭП;
ПоляИстории.АдресЭП = АдресЭП.Адрес;
ПоляИстории.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1 %2", ШаблонСообщенияОбОшибке, РасширенноеПредставлениеОшибки);
ПоляИстории.Выполнена = Ложь;
ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, СтрокаПолучатель.Ключ,
АдресЭП);
АдресЭП.Адрес);
ПоляИстории.ИдентификаторПисьма = "";
РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории);
@@ -1008,7 +1008,7 @@
// Структура:
// * ИмяМодуляОтправки - Строка - смотри НовоеСерверноеОповещение.ИмяМодуляОтправки.
// * Параметры - Произвольный - смотри НовоеСерверноеОповещение.Параметры
// Если не заполнен, тогда свойства нет.
// Если равен Неопределено, тогда свойства нет.
//
// * ПериодПроверки - Число - смотри НовоеСерверноеОповещение.ПериодПроверки.
// Если указано 20*60, тогда свойства нет.
@@ -1018,7 +1018,7 @@
Результат = Новый Структура;
Результат.Вставить("ИмяМодуляОтправки", Оповещение.ИмяМодуляОтправки);
Если ЗначениеЗаполнено(Оповещение.Параметры) Тогда
Если Оповещение.Параметры <> Неопределено Тогда
Результат.Вставить("Параметры", Оповещение.Параметры);
КонецЕсли;
@@ -689,16 +689,25 @@
ИсточникНастроек = СервисКриптографииDSSСлужебный.ПолучитьИсточникНастроек(ВходящиеПараметры);
АдресПодключения = НастройкиПользователя.Методы.СервисИдентификации + "token";
ЗаголовкиЗапроса = Новый Соответствие;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("client_id", НастройкиПользователя.Подключение.ИдентификаторКлиента);
ПараметрыЗапроса.Вставить("username", НастройкиПользователя.Логин);
ПараметрыЗапроса.Вставить("resource", НастройкиПользователя.Подключение.ИдентификаторПодписи);
ПараметрыЗапроса.Вставить("grant_type", "password");
Если НастройкиПользователя.ПервичнаяАутентификация = Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент Тогда
СекретСервисногоКлиента = СервисКриптографииDSSСлужебный.ПолучитьЗакрытыеДанные(КлючСервисногоКлиента(НастройкиПользователя),
"СекретСервисногоКлиента", Истина).Значение;
ПараметрыЗапроса.Вставить("password", "");
ЗаголовкиЗапроса.Вставить("Authorization",
ПолучитьПредставлениеСекрета(НастройкиПользователя.Подключение.СервисныйКлиент, СекретСервисногоКлиента));
Иначе
ПараметрыЗапроса.Вставить("client_id", НастройкиПользователя.Подключение.ИдентификаторКлиента);
ПараметрыЗапроса.Вставить("password", ПолучитьЗначениеПароля(НастройкиПользователя.Пароль, НастройкиПользователя));
КонецЕсли;
СвойстваПодключения = СервисКриптографииDSSСлужебный.ПодготовитьСвойстваПодключения(НастройкиПользователя.Подключение, АдресПодключения);
Соединение = СервисКриптографииDSSСлужебный.ПодготовитьПодключение(СвойстваПодключения, Неопределено, ПараметрыОперации);
РезультатЗапроса = СервисКриптографииDSSСлужебный.ВыполнитьМетодСервиса(Соединение, СвойстваПодключения.АдресПодключения, ПараметрыЗапроса, "POST", , , ПараметрыОперации);
РезультатЗапроса = СервисКриптографииDSSСлужебный.ВыполнитьМетодСервиса(Соединение, СвойстваПодключения.АдресПодключения, ПараметрыЗапроса, "POST", ЗаголовкиЗапроса, , ПараметрыОперации);
СохранитьНастройки = Ложь;
Если РезультатЗапроса.Выполнено Тогда
@@ -1006,7 +1015,8 @@
Если ВРег(ДанныеТокена.Логин) = ВРег(НастройкиПользователя.Логин) Тогда
ТокенАвторизации.Токен = СервисКриптографииDSSКлиентСервер.ОбъектПароля(Токен, 0);
ТокенАвторизации.ТипТокена = ТипТокена;
ТокенАвторизации.ТокенОбновления= СервисКриптографииDSSКлиентСервер.ОбъектПароля(ТокенОбновления, 0);
ТокенАвторизации.ТокенОбновления= СервисКриптографииDSSКлиентСервер.ОбъектПароля(ТокенОбновления,
?(ЗначениеЗаполнено(ТокенОбновления), 0, 3));
НастройкиПользователя.ЭлектроннаяПочта = ДанныеТокена.ЭлектроннаяПочта;
НастройкиПользователя.Телефон = ДанныеТокена.Телефон;
НастройкиПользователя.ИдентификаторНаСервере = ДанныеТокена.Идентификатор;
@@ -1130,6 +1140,7 @@
Представление = СвойствоСтруктуры(СтрокаМассива, "FriendlyName", "");
Представление = ?(ПустаяСтрока(Представление), СвойстваСертификата.Наименование, Представление);
Представление = ?(ПустаяСтрока(Представление), НСтр("ru = 'Не задано имя'"), Представление);
МобильныйЗакрытыКлюч= СвойствоСтруктуры(СтрокаМассива, "Storage", "") = "Mobile";
НоваяСтрока = СервисКриптографииDSSКлиентСервер.СвойстваСертификатаПользователя();
НоваяСтрока.Идентификатор = ВнутреннийНомер;
@@ -1144,6 +1155,7 @@
НоваяСтрока.ДатаОкончания = СвойстваСертификата.ДатаОкончания;
НоваяСтрока.АлгоритмыХеширования = АлгоритмыХеширования;
НоваяСтрока.КомуВыдан = КомуВыдан;
НоваяСтрока.МобильныйЗакрытыйКлюч = МобильныйЗакрытыКлюч;
СписокСертификатов.Вставить(ОтпечатокСертификата, НоваяСтрока);
КонецЦикла;
@@ -1733,6 +1745,7 @@
НастройкиПользователя = ПолучитьНастройкиПользователя(ИдентификаторПользователя, ПараметрыОперации);
РезультатВызова = СервисКриптографииDSSКлиентСервер.ОтветСервисаПоУмолчанию(Ложь);
ПодтверждатьОперации = НастройкиПользователя.ПервичнаяАутентификация = Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент;
Если НЕ НастройкиПользователя.Политика.Заполнено ИЛИ Принудительно Тогда
@@ -1740,7 +1753,7 @@
РезультатЗапроса= ПолучитьПараметрыПолитики(НастройкиПользователя, ПараметрыОперации);
Если РезультатЗапроса.Выполнено Тогда
СервисКриптографииDSSСлужебный.НастройкиРаботыАнализПолитикиПользователя(НастройкиПользователя.Политика, РезультатЗапроса.Результат);
СервисКриптографииDSSСлужебный.НастройкиРаботыАнализПолитикиПользователя(НастройкиПользователя.Политика, РезультатЗапроса.Результат, ПодтверждатьОперации);
КонецЕсли;
ПараметрыПоиска = Новый Структура("ПроверитьНаличиеВБазе", ЗначениеЗаполнено(НастройкиПользователя.Ссылка));
@@ -2734,25 +2747,37 @@
Если РезультатЗапроса.Выполнено Тогда
Выжимка = ОписаниеАсинхроннойОперации(РезультатЗапроса.Результат.Operation, "Result.ProcessedDocuments");
РезультатОперации = Выжимка.ОписаниеОперации;
ЕстьСортировка = Ложь;
Если НЕ Выжимка.Выполнено Тогда
РезультатЗапроса.Выполнено = Ложь;
РезультатЗапроса.Ошибка = Выжимка.Ошибка;
РезультатЗапроса.СтатусОшибки.Представление = Выжимка.Ошибка;
ИначеЕсли НЕ РезультатОперации.ТребуетПодтверждения Тогда
МассивИдентификаторов = Новый Массив;
МассивСодержимого = Новый Массив;
МассивИдентификаторов = Новый СписокЗначений;
МассивСодержимого = Новый СписокЗначений;
Для Каждого СтрокаОтвета Из Выжимка.Действия Цикл
ИдентификаторДокумента = СвойствоСтруктуры(СтрокаОтвета, "RefId", "");
СодержимоеДокумента = СвойствоСтруктуры(СтрокаОтвета, "Content", "");
ИмяДокумента = СвойствоСтруктуры(СтрокаОтвета, "OriginalContentInfo", "");
Позиция = СтрНайти(ИмяДокумента, " #", НаправлениеПоиска.СКонца);
Если Позиция > 0 Тогда
ИмяДокумента = Сред(ИмяДокумента, Позиция + 2);
ЕстьСортировка = ЕстьСортировка ИЛИ ЗначениеЗаполнено(ИмяДокумента);
КонецЕсли;
Если ЗначениеЗаполнено(ИдентификаторДокумента) Тогда
МассивИдентификаторов.Добавить(ИдентификаторДокумента);
МассивИдентификаторов.Добавить(ИдентификаторДокумента, ИмяДокумента);
ИначеЕсли ЗначениеЗаполнено(СодержимоеДокумента) Тогда
МассивСодержимого.Добавить(СодержимоеДокумента);
МассивСодержимого.Добавить(СодержимоеДокумента, ИмяДокумента);
КонецЕсли;
КонецЦикла;
РезультатОперации.Вставить("ИдентификаторыДокументов", МассивИдентификаторов);
РезультатОперации.Вставить("СодержимоеДокументов", МассивСодержимого);
Если ЕстьСортировка Тогда
МассивИдентификаторов.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
МассивСодержимого.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
КонецЕсли;
РезультатОперации.Вставить("ИдентификаторыДокументов", МассивИдентификаторов.ВыгрузитьЗначения());
РезультатОперации.Вставить("СодержимоеДокументов", МассивСодержимого.ВыгрузитьЗначения());
Иначе
ПолучитьДокументы = Ложь;
КонецЕсли;
@@ -3933,6 +3958,7 @@
Результат.Вставить("СервисПроверки", "");
Результат.Вставить("СервисОбработкиДокументов", "");
Результат.Вставить("СервисАудита", "");
Результат.Вставить("СервисныйКлиент", "");
Результат.Вставить("ВнутреннийИдентификатор", "");
Результат.Вставить("ИдентификаторЦИ", "");
Результат.Вставить("ИдентификаторСЭП", "");
@@ -4235,6 +4261,7 @@
ВидАутентификации = НастройкиПользователя.ПервичнаяАутентификация;
Если ВидАутентификации = Перечисления.СпособыАвторизацииDSS.Первичный_УчетныеДанные // основной сценарий
ИЛИ ВидАутентификации = Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент
ИЛИ ВидАутентификации = Перечисления.СпособыАвторизацииDSS.Первичный_ДвухФакторная // возможно, если не подтверждается выпуск маркера безопасности
ИЛИ ВидАутентификации = Перечисления.СпособыАвторизацииDSS.Первичный_КодАвторизации Тогда // возможно, если не подтверждается выпуск маркера безопасности
Результат = АутентификацияПоЛогину(НастройкиПользователя, ПараметрыОперации);
@@ -4345,6 +4372,7 @@
// Служебная функция для формирования секрета пользователя в заголовке запроса
// Параметры:
// НастройкиПользователя - см. НастройкиПользователяПоУмолчанию
// - Строка
// ПарольКлиента - Строка - пароль в закрытом виде
//
// Возвращаемое значение:
@@ -4354,7 +4382,13 @@
Результат = "";
ИсходныеДанные = ПолучитьДвоичныеДанныеИзСтроки(НастройкиПользователя.Логин
Если ТипЗнч(НастройкиПользователя) = Тип("Строка") Тогда
Владелец = НастройкиПользователя;
Иначе
Владелец = НастройкиПользователя.Логин;
КонецЕсли;
ИсходныеДанные = ПолучитьДвоичныеДанныеИзСтроки(Владелец
+ ":"
+ ПарольКлиента,
"UTF-8");
@@ -4806,4 +4840,19 @@
КонецФункции
// Формирует путь хранения в безопасном хранилище для сервисного клиента.
//
// Параметры:
// НастройкиПользователя - Структура
//
// Возвращаемое значение:
// Строка
//
Функция КлючСервисногоКлиента(НастройкиПользователя) Экспорт
Возврат СтрЗаменить(
НастройкиПользователя.Методы.СервисИдентификации + НастройкиПользователя.Подключение.СервисныйКлиент, "/", "");
КонецФункции
#КонецОбласти
@@ -28,6 +28,7 @@
// * ДатаОкончания - Дата - окончание срока действия сертификата
// * Издатель - Строка - представление издателя сертификата
// * АлгоритмыХеширования - Массив - элементы массива содержат описание алгоритма хеширования
// * МобильныйЗакрытыйКлюч - Булево - закрытый ключ храниться на мобильном устройстве
//
Функция СвойстваСертификатаПользователя() Экспорт
@@ -44,6 +45,7 @@
Результат.Вставить("ДатаОкончания", '00010101');
Результат.Вставить("Издатель", "");
Результат.Вставить("АлгоритмыХеширования", Новый Массив);
Результат.Вставить("МобильныйЗакрытыйКлюч", Ложь);
Возврат Результат;
@@ -408,7 +410,9 @@
Если ТипЗнч(ОбъектПароля) = Тип("Структура") Тогда
Если ОбъектПароля.Состояние = 0 Тогда
Если ОбъектПароля.Состояние = 0 И АвторизованныйПользователь = Неопределено Тогда
Результат = ОбъектПароля.Значение;
ИначеЕсли ОбъектПароля.Состояние = 0 Тогда
Результат = ЗакрытьСекретПользователя(ОбъектПароля.Значение, АвторизованныйПользователь);
ИначеЕсли ОбъектПароля.Состояние = 1 Тогда
Результат = ОбъектПароля.Значение;
@@ -443,7 +447,8 @@
Результат = Истина;
ИначеЕсли НЕ ТребуетсяВводКонфиденциальныхДанных(НастройкиПользователя.ТокенАвторизации.ТокенОбновления) Тогда
Результат = Истина;
ИначеЕсли НастройкиПользователя.ЗапоминатьПароли Тогда
ИначеЕсли НастройкиПользователя.ЗапоминатьПароли
И НастройкиПользователя.ПервичнаяАутентификация <> ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_ДвухФакторная") Тогда
Результат = Истина;
КонецЕсли;
КонецЕсли;
@@ -699,8 +704,10 @@
Функция ПодготовитьПакетДляПодписи(МассивДокументов) Экспорт
Результат = Новый Массив;
НесколькоФайлов = МассивДокументов.Количество() > 1;
Для каждого СтрокаМассива Из МассивДокументов Цикл
Для Счетчик = 1 По МассивДокументов.Количество() Цикл
СтрокаМассива = МассивДокументов[Счетчик - 1];
НоваяСтрока = Новый Структура();
НоваяСтрока.Вставить("Content", "");
@@ -738,6 +745,10 @@
КонецЕсли;
Если НесколькоФайлов Тогда
НоваяСтрока.ContentInfo = НоваяСтрока.ContentInfo + " #" + Формат(Счетчик, "ЧЦ=3; ЧВН=; ЧГ=0");
КонецЕсли;
Результат.Добавить(НоваяСтрока);
КонецЦикла;
@@ -691,9 +691,9 @@
УправлениеЭлементамиОбщее(КонтекстФормы, 4);
КонецЕсли;
КлючДействия = КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения);
Подтверждать = КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения);
Если КлючДействия.Подтверждать Тогда
Если Подтверждать Тогда
ПодключитьОжидание(КонтекстФормы, Истина);
КонецЕсли;
@@ -712,6 +712,7 @@
Если ЗначениеЗаполнено(ДанныеПодтверждения) Тогда
КонтекстФормы[РеестрИмен.ДанныеПодтверждения].ПараметрыВариантаВстроенного.ПарольВПамяти = ПарольУстановлен;
ДанныеПодтверждения.ПараметрыВариантаВстроенного.ПакетнаяОперация = ПроверитьПакетнуюОперацию(ТипОперации, ОписаниеДанных, ДанныеПодтверждения);
ДанныеПодтверждения.ПараметрыВариантаВстроенного.ПодтверждатьПринудительно = СервисКриптографииDSSКлиентСервер.ПолучитьПолеСтруктуры(ОписаниеДанных, "ПринудительноПодтверждатьОблачнуюОперацию", Ложь);
КонецЕсли;
УправлениеЭлементамиОбщее(КонтекстФормы, 5);
Если ТипОперации <> "Проверка" Тогда
@@ -761,7 +762,7 @@
ДанныеПодтверждения = КонтекстФормы[РеестрИмен.ДанныеПодтверждения];
ДатаСеанса = СервисКриптографииDSSСлужебныйКлиент.ДатаСеанса();
Авторизован = СервисКриптографииDSSКлиентСервер.УчетнаяЗаписьАвторизована(НастройкиПользователя, ДатаСеанса);
КлючДействия = КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения);
Подтверждать = КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения);
ТребуетПинКод = ТипОперации <> "Шифрование";
Если Авторизован И ТипОперации <> "Шифрование" Тогда
@@ -770,9 +771,9 @@
КонецЕсли;
Если УчетАвторизации Тогда
Результат = Авторизован И КлючДействия.Подтверждать;
Результат = Авторизован И Подтверждать;
Иначе
Результат = ТребуетПинКод ИЛИ НЕ Авторизован ИЛИ КлючДействия.Подтверждать;
Результат = ТребуетПинКод ИЛИ НЕ Авторизован ИЛИ Подтверждать;
КонецЕсли;
КонецЕсли;
@@ -861,7 +862,7 @@
ДатаСеанса = СервисКриптографииDSSСлужебныйКлиент.ДатаСеанса();
ДанныеПодтверждения = КонтекстФормы[РеестрИмен.ДанныеПодтверждения];
Авторизован = СервисКриптографииDSSКлиентСервер.УчетнаяЗаписьАвторизована(НастройкиПользователя, ДатаСеанса);
КлючДействия = КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения);
Подтверждать = КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения);
ТребуетПинКод = ТипОперации <> "Шифрование";
ВыбранСпособ = Истина;
@@ -874,7 +875,7 @@
ТребуетПинКод = ТекущийСертификат.ТребуетсяПинКод И НЕ ЗначениеЗаполнено(ЗначениеПароля);
КонецЕсли;
Если КлючДействия.Подтверждать И НЕ ВыбранСпособ Тогда
Если Подтверждать И НЕ ВыбранСпособ Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + НСтр("ru = 'Не указан способ подтверждения'", КодЯзыка);
КонецЕсли;
@@ -1395,6 +1396,8 @@
//
Функция КлючДействияОперации(ТипОперации, НастройкиПользователя, ДанныеПодтверждения)
Обязательно = Ложь;
Если ТипОперации = "Подтверждение"
ИЛИ ТипОперации = "Аутентификация" Тогда
КлючДействия = СервисКриптографииDSSКлиентСервер.СвойствоВыполняемойОперации(НастройкиПользователя, ТипОперации);
@@ -1404,6 +1407,7 @@
Если ТипОперации = "Подписание" Тогда
Если ДанныеПодтверждения.ВерсияПодтверждения = 2 Тогда
ВидОперации = "ПодписьДокумента";
Обязательно = ДанныеПодтверждения.Сертификат.МобильныйЗакрытыйКлюч;
ИначеЕсли ДанныеПодтверждения.ПараметрыВариантаВстроенного.ПакетнаяОперация Тогда
ВидОперации = "ПодписьПакета";
Иначе
@@ -1411,6 +1415,9 @@
КонецЕсли;
ИначеЕсли ТипОперации = "Расшифрование" Тогда
ВидОперации = "Расшифрование";
Если ДанныеПодтверждения.ВерсияПодтверждения = 2 Тогда
Обязательно = ДанныеПодтверждения.Сертификат.МобильныйЗакрытыйКлюч;
КонецЕсли;
Иначе
ВидОперации = ТипОперации;
КонецЕсли;
@@ -1419,7 +1426,9 @@
КонецЕсли;
Возврат КлючДействия;
Возврат Обязательно
ИЛИ КлючДействия.Подтверждать
ИЛИ ПолучитьПолеСтруктуры(ДанныеПодтверждения, "ПараметрыВариантаВстроенного.ПодтверждатьПринудительно", Ложь);
КонецФункции
@@ -2175,9 +2184,9 @@
НуженПинКод = ?(ЗначениеЗаполнено(ДанныеПодтверждения.Сертификат), ДанныеПодтверждения.Сертификат.ТребуетсяПинКод, Истина);
СертификатАвторизации = НастройкиПользователя.СертификатАвторизации
ИЛИ НастройкиПользователя.ПервичнаяАутентификация <> ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СертификатАвторизации");
ПарольНеНужен = НастройкиПользователя.ПервичнаяАутентификация = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент");
КлючДействия = КлючДействияОперации(ФормаИсточник, НастройкиПользователя, ДанныеПодтверждения);
ТребуетсяПодтверждение = КлючДействия.Подтверждать;
ТребуетсяПодтверждение = КлючДействияОперации(ФормаИсточник, НастройкиПользователя, ДанныеПодтверждения);
Если НайтиЭлементФормы(ЭлементыФормы, "Комментарий") Тогда
ЕстьКомментарий = ЭлементыФормы.Комментарий.Видимость;
@@ -2213,7 +2222,7 @@
УстановитьСвойствоЭлемента(ЭлементыФормы, "ГруппаПодтвержденияУчетнаяЗапись", "Видимость", НЕ ОтдельнаяАвторизация И БылаАвторизация, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеЛогин", "Видимость", ЗначениеЗаполнено(КонтекстФормы[РеестрИмен.Логин]), ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ГруппаПодтверждениеПарольЗапомнить", "Видимость", НЕ ОтдельнаяАвторизация И БылаАвторизация, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ГруппаПодтверждениеПарольЗапомнить", "Видимость", НЕ ОтдельнаяАвторизация И БылаАвторизация И НЕ ПарольНеНужен, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеЗапомнитьПарольЛогина", "Видимость", ЗначениеЗаполнено(КонтекстФормы[РеестрИмен.Логин]), ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ГруппаПодтвержденияУчетнаяЗаписьВеб", "Видимость", ОтдельнаяАвторизация И БылаАвторизация, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеПредставлениеСертификата", "Видимость", НЕ ОтдельнаяАвторизация И БылаАвторизация И НЕ СертификатАвторизации, ИменаЭлементов);
@@ -2230,6 +2239,7 @@
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеПредставлениеСертификата", "ТолькоПросмотр", ЕстьАвторизация ИЛИ (ОперацияАутентификации И НЕ НеНачалось), ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеПароль", "ТолькоПросмотр", ЕстьАвторизация И НЕ ОперацияАутентификации, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеПароль", "Видимость", НЕ ПарольНеНужен, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ГруппаПодтвержденияУчетнаяЗаписьВеб", "ТолькоПросмотр", ЕстьАвторизация, ИменаЭлементов);
УстановитьСвойствоЭлемента(ЭлементыФормы, "ПодтверждениеОК", "КнопкаПоУмолчанию", НЕ НеНачалось, ИменаЭлементов);
@@ -720,6 +720,7 @@
ДанныеПодтверждения.ПараметрыВариантаВстроенного.Вставить("ПакетнаяОперация", Ложь);
ДанныеПодтверждения.ПараметрыВариантаВстроенного.Вставить("ТипРезультата", Неопределено);
ДанныеПодтверждения.ПараметрыВариантаВстроенного.Вставить("ПарольВПамяти", Ложь);
ДанныеПодтверждения.ПараметрыВариантаВстроенного.Вставить("ПодтверждатьПринудительно", Ложь);
КонецПроцедуры
@@ -415,6 +415,7 @@
| ЭкземплярыСервераDSS.СервисПроверки КАК СервисПроверки,
| ЭкземплярыСервераDSS.СервисАудита КАК СервисАудита,
| ЭкземплярыСервераDSS.СервисОбработкиДокументов КАК СервисОбработкиДокументов,
| ЭкземплярыСервераDSS.СервисныйКлиент КАК СервисныйКлиент,
| ЭкземплярыСервераDSS.ВнутреннийИдентификатор КАК ВнутреннийИдентификатор,
| ЭкземплярыСервераDSS.ИдентификаторЦИ КАК ИдентификаторЦИ,
| ЭкземплярыСервераDSS.ИдентификаторСЭП КАК ИдентификаторСЭП,
@@ -2231,8 +2232,9 @@
// * ТипыПодписей - Массив - массив из чисел, идентификаторов типов подписи
// * РежимПинКода - Строка - строковая константа режим применения пин-кодов для сертификатов варианты: Обязательно, Запрещено, Опционально
// ДанныеПолитики - Структура - сформированная структура на основе данных JSON, которые вернул сервер DSS
// ЭтоСервисныйКлиент - Булево
//
Процедура НастройкиРаботыАнализПолитикиПользователя(ПолитикаПользователя, ДанныеПолитики) Экспорт
Процедура НастройкиРаботыАнализПолитикиПользователя(ПолитикаПользователя, ДанныеПолитики, ЭтоСервисныйКлиент = Ложь) Экспорт
// По документации API сервиса, поля
// "CAPolicy" Массив Для формирования сертификатов
@@ -2277,7 +2279,7 @@
ЗначениеПолитики= ПолучитьПолеСтруктуры(СтрокаМассива, "MfaRequired");
КлючПоиска = "";
Если КлючПолитики <> Неопределено И СписокДействий.Свойство(КлючПолитики, КлючПоиска) Тогда
ПолитикаПользователя.Действия[КлючПоиска[0]].Подтверждать = ЗначениеПолитики;
ПолитикаПользователя.Действия[КлючПоиска[0]].Подтверждать = ЗначениеПолитики ИЛИ ЭтоСервисныйКлиент;
ВсегоПолей = ВсегоПолей + 1;
КонецЕсли;
КонецЦикла;
@@ -2380,14 +2382,15 @@
// НастройкиПользователя - Структура - структура хранящая сессионные данные учетной записи
// - Строка - GUID полученный для пользователя
// ИмяЗначения - Строка - необязательно, если передано, то возвращается значение из структуры хранения
// ОбщиеНастройки - Булево - настройки для всех пользователей
//
// Возвращаемое значение:
// Строка
//
Функция ПолучитьЗакрытыеДанные(НастройкиПользователя, ИмяЗначения = Неопределено) Экспорт
Функция ПолучитьЗакрытыеДанные(НастройкиПользователя, ИмяЗначения = Неопределено, ОбщиеНастройки = Ложь) Экспорт
Результат = "";
КлючЗначения = КлючЗаписиКонфиденциальныхДанных(НастройкиПользователя);
КлючЗначения = КлючЗаписиКонфиденциальныхДанных(НастройкиПользователя, ОбщиеНастройки);
ДанныеХранилища = ПрочитатьДанныеБезопасногоХранилища(КлючЗначения);
ЗначениеПоУмолчанию = КонфиденциальныеДанныеПользователя();
ТекущиеНастройки = ПолучитьКонтейнерНастроек(ПолучитьИсточникНастроек(Неопределено));
@@ -2396,6 +2399,9 @@
ЗаполнитьЗначенияСвойств(ЗначениеПоУмолчанию, ДанныеХранилища);
КонецЕсли;
Если ОбщиеНастройки Тогда
КонецЕсли;
Если ПолучитьПолеСтруктуры(ЗначениеПоУмолчанию.Пароль, "Состояние") = 5
И ТекущиеНастройки.Параметры[ЗначениеПоУмолчанию.Пароль.Значение] = Неопределено Тогда
ЗначениеПоУмолчанию.Пароль = "";
@@ -2406,6 +2412,11 @@
ЗначениеПоУмолчанию.ПарольСертификата = "";
КонецЕсли;
Если ПолучитьПолеСтруктуры(ЗначениеПоУмолчанию.СекретСервисногоКлиента, "Состояние") = 5
И ТекущиеНастройки.Параметры[ЗначениеПоУмолчанию.СекретСервисногоКлиента.Значение] = Неопределено Тогда
ЗначениеПоУмолчанию.СекретСервисногоКлиента = "";
КонецЕсли;
Если ТипЗнч(ЗначениеПоУмолчанию.Пароль) = Тип("Строка") Тогда
Если ЗначениеЗаполнено(ЗначениеПоУмолчанию.Пароль) Тогда
ЗначениеПоУмолчанию.Пароль = СервисКриптографииDSSКлиентСервер.ОбъектПароля(ЗначениеПоУмолчанию.Пароль, 1);
@@ -2422,6 +2433,14 @@
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ЗначениеПоУмолчанию.СекретСервисногоКлиента) = Тип("Строка") Тогда
Если ЗначениеЗаполнено(ЗначениеПоУмолчанию.СекретСервисногоКлиента) Тогда
ЗначениеПоУмолчанию.СекретСервисногоКлиента = СервисКриптографииDSSКлиентСервер.ОбъектПароля(ЗначениеПоУмолчанию.СекретСервисногоКлиента, 0);
Иначе
ЗначениеПоУмолчанию.СекретСервисногоКлиента = СервисКриптографииDSSКлиентСервер.ОбъектПароля("", 3);
КонецЕсли;
КонецЕсли;
Для Каждого СтрокаКлюча Из ЗначениеПоУмолчанию.Сертификаты Цикл
Если ПолучитьПолеСтруктуры(СтрокаКлюча.Значение, "Состояние") = 5
И ТекущиеНастройки.Параметры[СтрокаКлюча.Значение.Значение] = Неопределено Тогда
@@ -2454,14 +2473,15 @@
// - Строка - GUID полученный для пользователя
// Значение - Строка, Структура, Соответствие - данные сохраняемые в безопасном хранилище
// ИмяЗначения - Строка - имя свойства в структуре конфиденциальных данных
// ОбщиеНастройки - Булево - настройки для всех пользователей
//
Процедура СохранитьЗакрытыеДанные(НастройкиПользователя, Значение, ИмяЗначения = Неопределено) Экспорт
Процедура СохранитьЗакрытыеДанные(НастройкиПользователя, Значение, ИмяЗначения = Неопределено, ОбщиеНастройки = Ложь) Экспорт
КлючЗначения = КлючЗаписиКонфиденциальныхДанных(НастройкиПользователя);
КлючЗначения = КлючЗаписиКонфиденциальныхДанных(НастройкиПользователя, ОбщиеНастройки);
НовоеЗначение = Значение;
Если ЗначениеЗаполнено(ИмяЗначения) Тогда
ВсеДанные = ПолучитьЗакрытыеДанные(НастройкиПользователя);
ВсеДанные = ПолучитьЗакрытыеДанные(НастройкиПользователя, , ОбщиеНастройки);
ВсеДанные.Вставить(ИмяЗначения, Значение);
НовоеЗначение = ВсеДанные;
КонецЕсли;
@@ -2825,6 +2845,7 @@
| ЭкземплярыСервераDSS.СервисПодписи КАК СервисПодписи,
| ЭкземплярыСервераDSS.СервисПроверки КАК СервисПроверки,
| ЭкземплярыСервераDSS.СервисИдентификации КАК СервисИдентификации,
| ЭкземплярыСервераDSS.СервисныйКлиент КАК СервисныйКлиент,
| ЭкземплярыСервераDSS.ИдентификаторЦИ КАК ИдентификаторЦИ,
| ЭкземплярыСервераDSS.ИдентификаторСЭП КАК ИдентификаторСЭП,
| ЭкземплярыСервераDSS.ШаблонПодтверждения КАК ШаблонПодтверждения
@@ -3066,6 +3087,7 @@
Результат.Добавить(Перечисления.СпособыАвторизацииDSS.Первичный_ДвухФакторная);
Результат.Добавить(Перечисления.СпособыАвторизацииDSS.Первичный_СертификатАвторизации);
Результат.Добавить(Перечисления.СпособыАвторизацииDSS.Первичный_КодАвторизации);
Результат.Добавить(Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент);
Возврат Результат;
@@ -5549,8 +5571,14 @@
РезультатЗапроса = ОтветСервисаПоУмолчанию(Истина);
РезультатЗапроса.Вставить("Результат", Результат);
ДанныеПодтверждения = ПараметрыВыполнения.ДанныеПодтверждения;
Если ДанныеПодтверждения = Неопределено Тогда
ДанныеПодтверждения = СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию(НастройкиПользователя);
КонецЕсли;
ОтдельныйВыбор = ПолучитьПолеСтруктуры(ВходящиеПараметры, "ОтдельныйВыбор", Ложь);
ПодтверждатьПринудительно = ПолучитьПолеСтруктуры(ВходящиеПараметры, "ПодтверждатьПринудительно", Ложь);
ПодтверждатьПринудительно = ПолучитьПолеСтруктуры(ВходящиеПараметры, "ПодтверждатьПринудительно", Ложь)
ИЛИ ДанныеПодтверждения.ПараметрыВариантаВстроенного.ПодтверждатьПринудительно;
ТипОперации = ПараметрыВыполнения.ТипОперации;
Сертификат = ПараметрыВыполнения.Сертификат;
ДанныеДокумента = ПараметрыВыполнения.ДанныеДокумента;
@@ -5559,11 +5587,7 @@
ДатаСеанса = ПараметрыВыполнения.ДатаСеанса;
ТипДокумента = ПараметрыВыполнения.ТипДокумента;
ОписаниеДокумента = ПараметрыВыполнения.ОписаниеДокумента;
ДанныеПодтверждения = ПараметрыВыполнения.ДанныеПодтверждения;
Если ДанныеПодтверждения = Неопределено Тогда
ДанныеПодтверждения = СервисКриптографииDSSПодтверждениеСервер.ДанныеВторичнойАвторизацииПоУмолчанию(НастройкиПользователя);
КонецЕсли;
ЭтоМассивДокументов = ТипЗнч(ДанныеДокумента) = Тип("Массив");
ВерсияПодтверждения = ДанныеПодтверждения.ВерсияПодтверждения;
СвойствоТранзакции = Неопределено;
@@ -5600,6 +5624,8 @@
НастройкиПользователя = ПроверитьМаркерОбновления(РезультатЗапроса, НастройкиПользователя, МаркерОбновлен);
ТекущийСертификат = СервисКриптографииDSSКлиентСервер.НайтиСертификат(НастройкиПользователя, Сертификат);
ДанныеПодтверждения.Сертификат = ТекущийСертификат;
ПодтверждатьПринудительно = ПодтверждатьПринудительно ИЛИ ТекущийСертификат.МобильныйЗакрытыйКлюч;
Если ТекущийСертификат.ДатаОкончания < ДатаСеанса И ТипОперации = "Подписание" Тогда
РезультатЗапроса = ОтветСервисаПоУмолчанию(Ложь);
@@ -5620,7 +5646,7 @@
КлючДействия = СервисКриптографииDSSКлиентСервер.СвойствоВыполняемойОперации(НастройкиПользователя, "ПодписьДокумента");
СвойствоПодписи = СервисКриптографииDSSКлиентСервер.ПолучитьСвойствоПодписиCMS(Истина, Ложь);
СервисКриптографииDSSКлиентСервер.ПолучитьИнформациюДокументаДляПодписи(СвойствоПодписи, ОписаниеДокумента, ТипДокумента);
Если ТипЗнч(ДанныеДокумента) = Тип("Массив") И ВерсияПодтверждения = 1 Тогда
Если ЭтоМассивДокументов И ВерсияПодтверждения = 1 Тогда
КлючДействия = СервисКриптографииDSSКлиентСервер.СвойствоВыполняемойОперации(НастройкиПользователя, "ПодписьПакета");
КонецЕсли;
СвойствоТранзакции = СервисКриптографииDSSКлиентСервер.СвойстваТранзакцииПодписания(СвойствоПодписи, ТекущийСертификат.Идентификатор);
@@ -5658,9 +5684,39 @@
Если ТипОперации = "Подтверждение" ИЛИ ТипОперации = "Аутентификация" Тогда
РезультатЗапроса.Вставить("Результат", "");
ИначеЕсли ТипОперации = "Подписание" И ВерсияПодтверждения = 2 Тогда
Если ТекущийСертификат.МобильныйЗакрытыйКлюч Тогда
СписокДокументов = СервисКриптографииDSSКлиентСервер.ЗначениеВМассиве(ДанныеДокумента);
ПараметрыДокументов = Новый Массив;
Для Счетчик = 0 По СписокДокументов.Количество() - 1 Цикл
СтрокаМассива = СписокДокументов[Счетчик];
ИмяДокумента = ПолучитьПолеСтруктуры(СтрокаМассива, "ИмяДокумента", "Подпись");
ТипДокумента = ПолучитьПолеСтруктуры(СтрокаМассива, "ТипДокумента", "bin");
НоваяСтрока = СервисКриптографииDSSКлиентСервер.ПолучитьСвойстваДокумента(ИмяДокумента, ТипДокумента, Истина, "");
РезультатЗапроса = СервисКриптографииDSS.ЗагрузитьДокумент(НастройкиПользователя, СтрокаМассива.Содержание, НоваяСтрока, ВходящиеПараметры);
Если РезультатЗапроса.Выполнено Тогда
СписокДокументов[Счетчик] = РезультатЗапроса.Результат;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Если РезультатЗапроса.Выполнено Тогда
Если НЕ ЭтоМассивДокументов Тогда
ДанныеДокумента = СписокДокументов[Счетчик];
Иначе
Для Счетчик = 0 По СписокДокументов.Количество() - 1 Цикл
ДанныеДокумента[Счетчик] = СписокДокументов[Счетчик];
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если РезультатЗапроса.Выполнено Тогда
РезультатЗапроса = СервисКриптографииDSS.ПодписатьАсинхронно(НастройкиПользователя, ДанныеДокумента, СвойствоПодписи, ТекущийСертификат.Идентификатор, "", ВходящиеПараметры);
ТипРезультата = ПолучитьПолеСтруктуры(РезультатЗапроса, "ТипРезультата");
ИдентификаторТранзакции = ПолучитьПолеСтруктуры(РезультатЗапроса, "Результат.ИдентификаторОперации", "");
КонецЕсли;
ИначеЕсли ТипОперации = "Расшифрование" И ВерсияПодтверждения = 2 Тогда
РезультатЗапроса = СервисКриптографииDSS.РасшифроватьАсинхронно(НастройкиПользователя, ДанныеДокумента, ТекущийСертификат.Идентификатор, "CMS", "", ВходящиеПараметры);
ТипРезультата = ПолучитьПолеСтруктуры(РезультатЗапроса, "ТипРезультата");
@@ -6316,6 +6372,7 @@
ОтборСпособов.Вставить(Перечисления.СпособыАвторизацииDSS.Вторичный_ЭлектроннаяПочта, 8);
ОтборСпособов.Вставить(Перечисления.СпособыАвторизацииDSS.Вторичный_AirKeyLite, 9);
ОтборСпособов.Вставить(Перечисления.СпособыАвторизацииDSS.Вторичный_DSSSDK, 10);
ОтборСпособов.Вставить(Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент, 11);
Если ТипЗнч(СпособАвторизации) = Тип("Число") Тогда
Результат = Перечисления.СпособыАвторизацииDSS.Вторичный_МобильноеПриложение;
@@ -6659,6 +6716,7 @@
ДанныеПодключения.Вставить("ЗащищенноеСоединение", Истина);
ДанныеПодключения.Вставить("ТаймАут", ВыборкаПользователей.ТаймАут);
ДанныеПодключения.Вставить("Заглушка", "urn:ietf:wg:oauth:2.0:oob:auto");
ДанныеПодключения.Вставить("СервисныйКлиент", ВыборкаПользователей.СервисныйКлиент);
Если ВыборкаПользователей <> Неопределено Тогда
ДанныеПодключения = Новый ФиксированнаяСтруктура(ДанныеПодключения);
@@ -6754,7 +6812,8 @@
ДанныеПользователя.Методы = НастройкиРаботыТочкиПодключения(ВыборкаПользователей);
ДанныеПользователя.ШаблонПодтверждения = ВыборкаПользователей.ШаблонПодтверждения;
НастройкиРаботыАнализПолитикиПользователя(ДанныеПользователя.Политика, Неопределено);
НастройкиРаботыАнализПолитикиПользователя(ДанныеПользователя.Политика,
Неопределено, ДанныеПользователя.ПервичнаяАутентификация = Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент);
Возврат ДанныеПользователя;
@@ -6912,13 +6971,16 @@
// Параметры:
// НастройкиПользователя - см. СервисКриптографииDSS.НастройкиПользователяПоУмолчанию
// - Строка - идентификатор поиска
// ОбщиеНастройки - Булево - общие настройки пользователей
//
// Возвращаемое значение:
// Строка - полный путь поиска в регистре БезопасноеХранилище, включает в себя данные об учетной записи и пользователе 1С
//
Функция КлючЗаписиКонфиденциальныхДанных(НастройкиПользователя)
Функция КлючЗаписиКонфиденциальныхДанных(НастройкиПользователя, ОбщиеНастройки = Ложь)
Если ТипЗнч(НастройкиПользователя) = Тип("Строка")
Если ОбщиеНастройки Тогда
КлючЗначения = "ЭП_DSS." + НастройкиПользователя;
ИначеЕсли ТипЗнч(НастройкиПользователя) = Тип("Строка")
ИЛИ ТипЗнч(НастройкиПользователя) = Тип("УникальныйИдентификатор") Тогда
ТекущийПользователь = Пользователи.АвторизованныйПользователь();
КлючЗначения = "ЭлектроннаяПодписьDSS." + ТекущийПользователь.УникальныйИдентификатор() + "." + НастройкиПользователя;
@@ -6950,6 +7012,7 @@
Результат.Вставить("Пароль", ЗакрытьКонфиденциальноеЗначение(""));
Результат.Вставить("ПарольСертификата", ЗакрытьКонфиденциальноеЗначение(""));
Результат.Вставить("Сертификаты", Новый Соответствие);
Результат.Вставить("СекретСервисногоКлиента", ЗакрытьКонфиденциальноеЗначение(""));
Возврат Результат;
@@ -7211,6 +7274,8 @@
Варианты = Новый Соответствие();
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_УчетныеДанные"),
НСтр("ru = 'Логин и пароль'"));
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент"),
НСтр("ru = 'Логин'"));
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_ДвухФакторная"),
НСтр("ru = 'Логин и пароль с дополнительным подтверждением'"));
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СертификатАвторизации"),
@@ -811,6 +811,8 @@
ВызватьДиалог = ПустойПароль;
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_УчетныеДанные") Тогда
ВызватьДиалог = ПустойПароль;
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент") Тогда
ВызватьДиалог = Ложь;
КонецЕсли;
Иначе
Если ТокенУстарел = Неопределено Тогда
@@ -836,6 +838,9 @@
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_УчетныеДанные") Тогда
ВызватьДиалог = ПустойПароль ИЛИ ЭтоОшибка;
ВызватьФоновоеЗадание = НЕ ВызватьДиалог;
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент") Тогда
ВызватьДиалог = ЭтоОшибка;
ВызватьФоновоеЗадание = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -901,6 +906,9 @@
АутентификацияПоСертификату(НастройкиПользователя, ОписаниеСледующее, ПараметрыОперации);
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_УчетныеДанные") Тогда
АутентификацияПоЛогину(НастройкиПользователя, ОписаниеСледующее, ПараметрыОперации);
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент") Тогда
ОтветПользователю = ОтветСервисаПоУмолчанию(Ложь);
ПроверкаАутентификацииПользователяРезультат(ОтветПользователю, ВходящийКонтекст);
Иначе
ОтветПользователю = ОтветСервисаПоУмолчанию(Ложь);
СформироватьОтказАутентификации(ОтветПользователю);
@@ -1550,7 +1558,7 @@
ПодтверждатьОперацию = Ложь;
ВходящийКонтекст.Вставить("Транзакция", Истина);
Иначе
ПодтверждатьОперацию = КлючДействия.Подтверждать ИЛИ ВходящийКонтекст.ПодтверждатьПринудительно;
ПодтверждатьОперацию = КлючДействия.Подтверждать ИЛИ ВходящийКонтекст.ПодтверждатьПринудительно ИЛИ ОписаниеСертификата.МобильныйЗакрытыйКлюч;
ВходящийКонтекст.Вставить("Транзакция", ПодтверждатьОперацию);
КонецЕсли;
@@ -2127,25 +2135,46 @@
КонецЕсли;
ОписаниеСертификата = ВходящийКонтекст.ОписаниеСертификата;
СвойствоПодписи = ВходящийКонтекст.СвойствоПодписи;
Если ПодтверждатьОперацию И ВерсияПодтверждения = 2 Тогда
ОбъектОповещения = Новый ОписаниеОповещения("ПодписатьАсинхронноПодтверждение", ЭтотОбъект);
Если ВерсияПодтверждения = 2 И НЕ ЗначениеЗаполнено(ВходящийКонтекст.ИдентификаторТранзакции) Тогда
ВходящийКонтекст.Вставить("ПодтверждатьОперацию", ПодтверждатьОперацию);
ОбъектОповещения = Новый ОписаниеОповещения("ПодписатьАсинхронноПослеВыгрузкиДокументов", ЭтотОбъект);
СледующееОповещение = ОбработчикОповещения(ОбъектОповещения, ВходящийКонтекст);
ПараметрыОперации = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ВходящийКонтекст.ПараметрыОперации); // Структура
ПараметрыОперации.Вставить("Сертификат", ВходящийКонтекст.ПредставлениеСертификата);
ПараметрыОперации.Вставить("ПодтверждатьПринудительно", Истина);
Если ОписаниеСертификата.МобильныйЗакрытыйКлюч И ВходящийКонтекст.ПакетнаяПодпись Тогда
ПараметрыДокументов = Новый Массив;
Для Каждого СтрокаМассива Из ВходящийКонтекст.ДанныеДокумента Цикл
ИмяДокумента = СвойствоСтруктуры(СтрокаМассива, "Name", "Подпись");
ТипДокумента = СвойствоСтруктуры(СтрокаМассива, "Type", "bin");
НоваяСтрока = СервисКриптографииDSSКлиентСервер.ПолучитьСвойстваДокумента(ИмяДокумента, ТипДокумента, Истина, "");
НоваяСтрока.Вставить("Content", Base64Строка(СтрокаМассива.Содержание));
ПараметрыДокументов.Добавить(НоваяСтрока);
КонецЦикла;
ОжидатьЗавершенияВыполненияВФоне(
СледующееОповещение,
СервисКриптографииDSSСлужебныйВызовСервера.ПодписатьАсинхронно(
ВходящийКонтекст.НастройкиПользователя,
ВходящийКонтекст.ДанныеДокумента,
ВходящийКонтекст.СвойствоПодписи,
ОписаниеСертификата.Идентификатор,
ОписаниеСертификата.ПинКод,
ПараметрыОперации),
СервисКриптографииDSSСлужебныйВызовСервера.ЗагрузитьПакетДокументов(
НастройкиПользователя,
ПараметрыДокументов,
ВходящийКонтекст.ПараметрыОперации),
ВходящийКонтекст.ПараметрыОперации);
ИначеЕсли ОписаниеСертификата.МобильныйЗакрытыйКлюч Тогда
ИмяДокумента = СвойствоСтруктуры(СвойствоПодписи, "DocumentInfo", "Подпись");
ТипДокумента = СвойствоСтруктуры(СвойствоПодписи, "DocumentType", "bin");
ПараметрыДокументов = СервисКриптографииDSSКлиентСервер.ПолучитьСвойстваДокумента(ИмяДокумента, ТипДокумента, Истина, "");
ОжидатьЗавершенияВыполненияВФоне(
СледующееОповещение,
СервисКриптографииDSSСлужебныйВызовСервера.ЗагрузитьДокумент(
НастройкиПользователя,
ВходящийКонтекст.ДанныеДокумента,
ПараметрыДокументов,
ВходящийКонтекст.ПараметрыОперации),
ВходящийКонтекст.ПараметрыОперации);
Иначе
ПодписатьАсинхронноПослеВыгрузкиДокументов(Неопределено, ВходящийКонтекст);
КонецЕсли;
ИначеЕсли ПодтверждатьОперацию Тогда
ОбъектОповещения = Новый ОписаниеОповещения("ПодписатьФоновымЗаданием", ЭтотОбъект);
@@ -2173,6 +2202,57 @@
КонецПроцедуры
// Продолжение процедуры Подписать.
Процедура ПодписатьАсинхронноПослеВыгрузкиДокументов(ДлительнаяОперация, ВходящийКонтекст) Экспорт
РезультатВыполнения = ПолучитьРезультатВыполненияВФоне(ДлительнаяОперация, ВходящийКонтекст);
НастройкиПользователя = ВходящийКонтекст.НастройкиПользователя;
ПодтверждатьОперацию = ВходящийКонтекст.ПодтверждатьОперацию;
ОписаниеСертификата = ВходящийКонтекст.ОписаниеСертификата;
Если ДлительнаяОперация = Неопределено Тогда
РезультатВыполнения = ОтветСервисаПоУмолчанию(Истина);
ИначеЕсли РезультатВыполнения <> Неопределено Тогда
Если РезультатВыполнения.Выполнено Тогда
Если ВходящийКонтекст.ПакетнаяПодпись Тогда
Для Счетчик = 0 По РезультатВыполнения.Результат.Количество() - 1 Цикл
ВходящийКонтекст.ДанныеДокумента[Счетчик] = РезультатВыполнения.Результат[Счетчик];
КонецЦикла;
Иначе
ВходящийКонтекст.ДанныеДокумента = РезультатВыполнения.Результат;
КонецЕсли;
ИначеЕсли НеОбрабатыватьОшибкиСервиса(ВходящийКонтекст) Тогда
ПодписатьРезультат(РезультатВыполнения, ВходящийКонтекст);
Возврат;
КонецЕсли;
КонецЕсли;
Если ПодтверждатьОперацию ИЛИ ОписаниеСертификата.МобильныйЗакрытыйКлюч Тогда
ОбъектОповещения = Новый ОписаниеОповещения("ПодписатьАсинхронноПодтверждение", ЭтотОбъект);
СледующееОповещение = ОбработчикОповещения(ОбъектОповещения, ВходящийКонтекст);
ПараметрыОперации = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ВходящийКонтекст.ПараметрыОперации); // Структура
ПараметрыОперации.Вставить("Сертификат", ВходящийКонтекст.ПредставлениеСертификата);
ПараметрыОперации.Вставить("ПодтверждатьПринудительно", Истина);
ОжидатьЗавершенияВыполненияВФоне(
СледующееОповещение,
СервисКриптографииDSSСлужебныйВызовСервера.ПодписатьАсинхронно(
НастройкиПользователя,
ВходящийКонтекст.ДанныеДокумента,
ВходящийКонтекст.СвойствоПодписи,
ОписаниеСертификата.Идентификатор,
ОписаниеСертификата.ПинКод,
ПараметрыОперации),
ВходящийКонтекст.ПараметрыОперации);
Иначе
ПодписатьФоновымЗаданием(РезультатВыполнения, ВходящийКонтекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры Подписать.
Процедура ПодписатьАсинхронноПодтверждение(ДлительнаяОперация, ВходящийКонтекст) Экспорт
@@ -224,6 +224,8 @@
КонецФункции
#Область ОбработкаОшибок
// Вызывает метод ПоказатьИнформациюОбОшибке объекта ОбработкаОшибок.
// Требуется использовать для возможности автоматического тестирования,
// чтобы перехватывать ошибки с помощью расширения.
@@ -429,6 +431,8 @@
КонецПроцедуры
#КонецОбласти
#Область ОбработкаСобытийПриложения
// Отключает выдачу предупреждения пользователю при завершении работы программы.
@@ -1206,14 +1210,14 @@
// то есть с некоторой минимальной задержкой.
//
// Параметры:
// Оповещение - ОписаниеОповещения - оповещение, которое нужно выполнить.
// ОписаниеОповещения - ОписаниеОповещения - оповещение, которое нужно выполнить.
// Результат - Произвольный - значение, которое передается в параметр Результат
// метода платформы ВыполнитьОбработкуОповещения.
//
Процедура НачатьВыполнениеОбработкиОповещения(Оповещение, Результат = Неопределено) Экспорт
Процедура НачатьВыполнениеОбработкиОповещения(ОписаниеОповещения, Результат = Неопределено) Экспорт
Контекст = Новый Структура;
Контекст.Вставить("Оповещение", Оповещение);
Контекст.Вставить("Оповещение", ОписаниеОповещения);
Контекст.Вставить("Результат", Результат);
Поток = Новый ПотокВПамяти;
@@ -1222,6 +1226,24 @@
КонецПроцедуры
// Открыть выбор объектов метаданных.
//
// Параметры:
// ПараметрыФормы - см. СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных
// ОписаниеОповещенияОЗакрытии - ОписаниеОповещения - оповещение, вызываемое при закрытии формы с параметрами:
// # ВыбранныеОбъектыМетаданных - СписокЗначений - полные имена выбранных объектов метаданных,
// или ссылки на идентификаторы объектов метаданных, если параметр ВыбиратьСсылки установлен в Истина.
// # ДополнительныеПараметры - Произвольный - дополнительные параметры, переданные при создании оповещения.
// Если ОписаниеОповещенияОЗакрытии не указано, то будет вызвано оповещение, которое можно получить
// с помощью обработчика ОбработкаОповещения:
// # ИмяСобытия - Строка - "ВыборОбъектовМетаданных"
// # Параметр - СписокЗначений - выбранные объекты метаданных.
// # Источник - см. СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных.УникальныйИдентификаторИсточник
//
Процедура ВыбратьОбъектыМетаданных(ПараметрыФормы, ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы,,,,, ОписаниеОповещенияОЗакрытии);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -0,0 +1,74 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныйПрограммныйИнтерфейс
// Возвращает параметры выбора объектов метаданных для процедуры
// СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных.
//
// Возвращаемое значение:
// Структура:
// * КоллекцииВыбираемыхОбъектовМетаданных - СписокЗначений - фильтр по типам объектов метаданных,
// которые могут быть выбраны. Например, выбирать только объекты метаданных справочники и документы:
// КоллекцииВыбираемыхОбъектовМетаданных = Новый СписокЗначений;
// КоллекцииВыбираемыхОбъектовМетаданных.Добавить("Справочники");
// КоллекцииВыбираемыхОбъектовМетаданных.Добавить("Документы");
//
// * ФильтрПоОбъектамМетаданных - СписокЗначений - фильтр по объектам метаданных,
// которые могут быть выбраны. Например:
// ФильтрПоОбъектамМетаданных = Новый СписокЗначений;
// ФильтрПоОбъектамМетаданных.Добавить("Справочник.Товары");
// ФильтрПоОбъектамМетаданных.Добавить("Документ.СчетНаОплату");
// * ВыбранныеОбъектыМетаданных - СписокЗначений - полные имена выбранных объектов метаданных, которые
// в дереве метаданных должны быть отмечены флажком.
// * НачальноеЗначениеВыбора - Строка - полное имя метаданных, на котором будет спозиционирован
// список при открытии формы. Например, "Справочник.Партнеры".
// * ВыборЕдинственного - Булево - по умолчанию Ложь. Укажите Истина, если нужно выбрать один объект метаданных.
// При этом пометка нескольких строк будет невозможна, а выбирать можно по двойному клик по строке.
// * ВыбиратьСсылки - Булево - по умолчанию Ложь. Укажите Истина, чтобы в возвращаемом значении вместо
// полных имен выбранных метаданных содержались ссылки на их идентификаторы,
// см. ОбщегоНазначения.ИдентификаторыОбъектовМетаданных.
// * ВыбиратьКоллекцииКогдаВыбраныВсеОбъекты - Булево - по умолчанию Ложь. При группировке объектов по видам,
// укажите Истина, чтобы в возвращаемое значение включать также типы объектов метаданных
// (Конфигурация, Справочники, Документы...), если у них выбраны все подчиненные строки.
// * ВыбиратьТаблицыВнешнихИсточниковДанных - Булево - по умолчанию Ложь для совместимости.
// * Заголовок - Строка - если не указано, то форма откроется со стандартным заголовком "Выбор объектов метаданных".
// * СпособГруппировкиОбъектов - Строка - по умолчанию "ПоВидам". Укажите "ПоРазделам", чтобы вывести дерево
// объектов метаданных по разделам командного интерфейса (подсистемам, включенным в командный интерфейс)
// вместо группировки по технологическим типам: Справочники, Документы и т.п.
// Также можно указать "ПоРазделам,ПоВидам" или "ПоВидам,ПоРазделам", чтобы в форме был доступен
// переключатель группировки объектов метаданных.
// * РодительскиеПодсистемы - СписокЗначений - можно указать список подсистемы, только подчиненные подсистемы
// которых нужно отобразить в форме.
// * ТолькоПодсистемыСКИ - Булево - по умолчанию Ложь. Укажите Истина, чтобы в списке оставить только подсистемы,
// которые включены в командный интерфейс (разделы командного интерфейса).
// * УникальныйИдентификаторИсточник - УникальныйИдентификатор - опционально. Уникальный идентификатор формы,
// передаваемый в оповещение ВыборОбъектовМетаданных в качестве параметра Источник.
// Это оповещение вызывается, если
//
Функция ПараметрыВыбораОбъектовМетаданных() Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", Новый СписокЗначений);
ПараметрыФормы.Вставить("ФильтрПоОбъектамМетаданных", Новый СписокЗначений);
ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", Новый СписокЗначений);
ПараметрыФормы.Вставить("НачальноеЗначениеВыбора", "");
ПараметрыФормы.Вставить("ВыборЕдинственного", Ложь);
ПараметрыФормы.Вставить("ВыбиратьСсылки", Ложь);
ПараметрыФормы.Вставить("ВыбиратьКоллекцииКогдаВыбраныВсеОбъекты", Ложь);
ПараметрыФормы.Вставить("ВыбиратьТаблицыВнешнихИсточниковДанных", Ложь);
ПараметрыФормы.Вставить("Заголовок", "");
ПараметрыФормы.Вставить("СпособГруппировкиОбъектов", "ПоВидам");
ПараметрыФормы.Вставить("РодительскиеПодсистемы", Новый СписокЗначений);
ПараметрыФормы.Вставить("ТолькоПодсистемыСКИ", Ложь);
ПараметрыФормы.Вставить("УникальныйИдентификаторИсточник", Неопределено);
Возврат ПараметрыФормы;
КонецФункции
#КонецОбласти
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6a8de94b-7b62-4d91-80df-e47c4ef90864">
<name>СтандартныеПодсистемыКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Стандартные подсистемы клиент сервер</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -627,6 +627,15 @@
КонецФункции
Функция ИнформационнаяБазаФайловая() Экспорт
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
КонецФункции
Функция РазделениеВключено() Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
@@ -348,7 +348,7 @@
// Получает настройку необходимости выводить подтверждение при завершении работы программы
// для текущего пользователя. Предназначена для использования в форме персональных настроек
// пользователя. Пример использования см. в общей форме _ДемоМоиНастройки.
// пользователя.
//
// Возвращаемое значение:
// Булево - если Истина, то пользователю при закрытии программы будет показано
@@ -739,7 +739,17 @@
// Вызывает исключение с требованием перезапустить сеанс из-за обновления расширений программы.
Процедура ПотребоватьПерезапускСеансаПоПричинеДинамическогоОбновленияРасширенийПрограммы() Экспорт
Если ЭтоРазделенныйРежимСеансаБезРазделителей() Тогда
ЭтоРазделенныйРежимБезРасширенийОбластиДанных = ЭтоРазделенныйРежимСеансаБезРазделителей();
Если ЭтоРазделенныйРежимБезРасширенийОбластиДанных Тогда
ФоновоеЗадание = ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание();
Если ФоновоеЗадание <> Неопределено
И ФоновоеЗадание.РазделениеДанных.Количество() > 0 Тогда
ЭтоРазделенныйРежимБезРасширенийОбластиДанных = Ложь;
КонецЕсли;
КонецЕсли;
Если ЭтоРазделенныйРежимБезРасширенийОбластиДанных Тогда
ТекстОшибки =
НСтр("ru = 'Для выполнения требуемых действий следует
|запустить сеанс с установленными разделителями.
@@ -53,7 +53,7 @@
// Параметры:
// ОтборМетаданных - СписокЗначений из Строка - список из полных имен метаданных, в которых будет
// выполнен поиск помеченных на удаление.
// Например, "Справочник._ДемоНоменклатура".
// Например, "Справочник.Номенклатура".
// - Неопределено - отбор по объектам метаданных накладываться не будет.
//
// ИскатьТехнологическиеОбъекты - Булево - если Истина, то поиск будет осуществляться в объектах метаданных,
@@ -143,7 +143,7 @@
// // Установка основной таблицы необходима для перехода к спискам помеченных объектов
// // с предустановленным отбором
// ОсновныеТаблицыСписка = Новый СписокЗначений();
// ОсновныеТаблицыСписка.Добавить("Справочник._ДемоНоменклатура");
// ОсновныеТаблицыСписка.Добавить("Справочник.Номенклатура");
// Настройка.ТипыМетаданных = ОсновныеТаблицыСписка;
// УдалениеПомеченныхОбъектов.ПриСозданииНаСервере(ЭтотОбъект, НастройкиОтображенияПомеченных);
//
@@ -17,8 +17,8 @@
// помеченных на удаления.
//
// Пример:
// Объекты.Добавить(Метаданные.Справочники._ДемоНоменклатура);
// Объекты.Добавить(Метаданные.Справочники._ДемоПартнеры);
// Объекты.Добавить(Метаданные.Справочники.Номенклатура);
// Объекты.Добавить(Метаданные.Справочники.Партнеры);
//
Процедура ПриОпределенииОбъектовСКомандойПоказатьПомеченные(Объекты) Экспорт
File diff suppressed because it is too large. Load diff
@@ -1165,19 +1165,19 @@
Выбранные = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(УсловияВыбора.Отмеченные);
УдалитьОтключенныеЗначения(Выбранные);
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина);
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", Выбранные);
ПараметрыПодбора.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", Коллекции);
ПараметрыПодбора.Вставить("СпособГруппировкиОбъектов", "ПоРазделам,ПоВидам");
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор таблиц'"));
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбиратьСсылки = Истина;
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = Выбранные;
ПараметрыПодбора.КоллекцииВыбираемыхОбъектовМетаданных = Коллекции;
ПараметрыПодбора.СпособГруппировкиОбъектов = "ПоРазделам,ПоВидам";
ПараметрыПодбора.Заголовок = НСтр("ru = 'Подбор таблиц'");
Контекст = Новый Структура;
Контекст.Вставить("УсловияВыбора", УсловияВыбора);
Контекст.Вставить("ОповещениеОЗакрытии", ОповещениеОЗакрытии);
Обработчик = Новый ОписаниеОповещения("ПослеВыбораОбъектовМетаданных", ЭтотОбъект, Контекст);
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора,,,,, Обработчик);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, Обработчик);
КонецПроцедуры
@@ -1195,21 +1195,21 @@
УдалитьОтключенныеЗначения(Выбранные);
Коллекции = Новый СписокЗначений;
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", Выбранные);
ПараметрыПодбора.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", Коллекции);
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = Выбранные;
ПараметрыПодбора.КоллекцииВыбираемыхОбъектовМетаданных = Коллекции;
Если УсловияВыбора.ИмяПоля = "Роль" Тогда
Для Каждого ЭлементСписка Из Выбранные Цикл
ЭлементСписка.Значение = "Роль." + ЭлементСписка.Значение;
КонецЦикла;
ПараметрыПодбора.Вставить("СпособГруппировкиОбъектов", "ПоВидам");
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор ролей'"));
ПараметрыПодбора.СпособГруппировкиОбъектов = "ПоВидам";
ПараметрыПодбора.Заголовок = НСтр("ru = 'Подбор ролей'");
Коллекции.Добавить("Роли");
Иначе
ПараметрыПодбора.Вставить("СпособГруппировкиОбъектов", "ПоВидам,ПоРазделам");
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор объектов метаданных'"));
ПараметрыПодбора.Вставить("ВыбиратьКоллекцииКогдаВыбраныВсеОбъекты", Истина);
ПараметрыПодбора.СпособГруппировкиОбъектов = "ПоВидам,ПоРазделам";
ПараметрыПодбора.Заголовок = НСтр("ru = 'Подбор объектов метаданных'");
ПараметрыПодбора.ВыбиратьКоллекцииКогдаВыбраныВсеОбъекты = Истина;
ДобавитьКоллекцииОбъектовМетаданныхСПравами(Коллекции);
КонецЕсли;
@@ -1218,7 +1218,7 @@
Контекст.Вставить("ОповещениеОЗакрытии", ОповещениеОЗакрытии);
Обработчик = Новый ОписаниеОповещения("ПослеВыбораОбъектовМетаданных", ЭтотОбъект, Контекст);
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора,,,,, Обработчик);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, Обработчик);
КонецПроцедуры
@@ -1127,6 +1127,30 @@
КонецФункции
// Возвращает строку символов.
//
// Параметры:
// Символ - Строка - строка длиной 1 символ.
// Количество - Число - количество символов, которые требуется вернуть.
//
// Возвращаемое значение:
// Строка
//
Функция СтрокаСимволов(Символ = " ", Количество = 50) Экспорт
Шаблон = " ";
Если Количество > 50 Тогда
Шаблоны = Новый Массив;
Пока Шаблоны.Количество() * 50 < Количество Цикл
Шаблоны.Добавить(Шаблон);
КонецЦикла;
Шаблон = СтрСоединить(Шаблоны, "");
КонецЕсли;
Возврат Лев(СтрЗаменить(Шаблон, " ", Символ), Количество);
КонецФункции
Функция ДоступнаБалансировкаНагрузкиНаДиск() Экспорт
Возврат Не ОбщегоНазначения.ИнформационнаяБазаФайловая();
@@ -3765,7 +3765,7 @@
// Подсказка - Строка - подсказка команды.
// Картинка - Картинка - картинка команды.
// Действие - Строка - полный путь к процедуре, которую необходимо выполнить.
// Например, "_ДемоСтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча".
// Например, "СтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча".
// ИзменяетСохраняемыеДанные - Булево
//
// Возвращаемое значение:
@@ -1972,7 +1972,7 @@
// Параметры:
// ИмяОбработчика - Строка - полный путь к функции, которую необходимо выполнить.
// Например, "_ДемоСтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча".
// Например, "СтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча".
// Параметры - Структура:
// * КонтактнаяИнформация - см. ПараметрКонтактнаяИнформацияДляВыполненияКоманд
// * ДополнительныеПараметры - см. ДополнительныеПараметрыДляВыполненияКоманд
@@ -39,12 +39,12 @@
// Настройки.ОписаниеКоманд[Адрес].ЗапланироватьВстречу.Заголовок = НСтр("ru='Встреча'");
// Настройки.ОписаниеКоманд[Адрес].ЗапланироватьВстречу.Подсказка = НСтр("ru='Создать событие встречи'");
// Настройки.ОписаниеКоманд[Адрес].ЗапланироватьВстречу.Картинка = БиблиотекаКартинок.ЗапланированноеВзаимодействие;
// Настройки.ОписаниеКоманд[Адрес].ЗапланироватьВстречу.Действие = "_ДемоСтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча";
// Настройки.ОписаниеКоманд[Адрес].ЗапланироватьВстречу.Действие = "СтандартныеПодсистемыКлиент.ОткрытьФормуДокументаВстреча";
//
// _ДемоФактическийАдресОрганизации = УправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("_ДемоФактическийАдресОрганизации");
// Настройки.ОписаниеКоманд[_ДемоФактическийАдресОрганизации] =
// ФактическийАдресОрганизации = УправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("ФактическийАдресОрганизации");
// Настройки.ОписаниеКоманд[ФактическийАдресОрганизации] =
// ОбщегоНазначения.СкопироватьРекурсивно(УправлениеКонтактнойИнформацией.КомандыТипаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Адрес));
// Настройки.ОписаниеКоманд[_ДемоФактическийАдресОрганизации].ЗапланироватьВстречу.Действие = ""; // Отключение действия команды для вида
// Настройки.ОписаниеКоманд[ФактическийАдресОрганизации].ЗапланироватьВстречу.Действие = ""; // Отключение действия команды для вида
//
// Процедурам, указанных в свойстве Действие, передаются 2 параметра:
// КонтактнаяИнформация - Структура:
@@ -59,7 +59,7 @@
// Процедура ОткрытьФормуДокументаВстреча(КонтактнаяИнформация, ДополнительныеПараметры) Экспорт
// ЗначенияЗаполнения = Новый Структура;
// ЗначенияЗаполнения.Вставить("МестоПроведенияВстречи", КонтактнаяИнформация.Представление);
// Если ТипЗнч(ДополнительныеПараметры.ВладелецКонтактнойИнформации) = Тип("ДокументСсылка._ДемоЗаказПокупателя") Тогда
// Если ТипЗнч(ДополнительныеПараметры.ВладелецКонтактнойИнформации) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
// ЗначенияЗаполнения.Вставить("Предмет", ДополнительныеПараметры.ВладелецКонтактнойИнформации);
// ЗначенияЗаполнения.Вставить("Контакт", "");
// Иначе
@@ -81,12 +81,12 @@
//
// Параметры:
// Наименования - Соответствие из КлючИЗначение - представление вида контактной информации на переданном языке:
// * Ключ - Строка - имя вида контактной информации. Например, "_ДемоАдресПартнера".
// * Ключ - Строка - имя вида контактной информации. Например, "АдресПартнера".
// * Значение - Строка - наименование вида контактной информации для переданного кода языка.
// КодЯзыка - Строка - код языка. Например, "en".
//
// Пример:
// Наименования["_ДемоАдресПартнера"] = НСтр("ru='Адрес'; en='Address';", КодЯзыка);
// Наименования["АдресПартнера"] = НСтр("ru='Адрес'; en='Address';", КодЯзыка);
//
Процедура ПриПолученииНаименованийВидовКонтактнойИнформации(Наименования, КодЯзыка) Экспорт
@@ -82,7 +82,7 @@
// Если ПечатнаяФорма <> Неопределено Тогда
// ПечатнаяФорма.ТабличныйДокумент = ПечатьКвитанции(МассивОбъектов);
// ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Квитанция (с QR кодом)'");
// ПечатнаяФорма.ПолныйПутьКМакету = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_Квитанция";
// ПечатнаяФорма.ПолныйПутьКМакету = "Документ.СчетНаОплатуПокупателю.ПФ_MXL_Квитанция";
// КонецЕсли;
//
Функция СведенияОПечатнойФорме(КоллекцияПечатныхФорм, Идентификатор) Экспорт
@@ -356,7 +356,7 @@
//
// Для печатных форм, менеджером печати которых является общий модуль
// "УправлениеПечатью", в качестве идентификатора необходимо указать полный путь к макету.
// Например, "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_СчетНаОплату".
// Например, "Документ.СчетНаОплатуПокупателю.ПФ_MXL_СчетНаОплату".
//
// - Массив - список идентификаторов команд печати.
//
@@ -384,7 +384,7 @@
// Формат "<ИмяПроцедуры>" используется, когда процедура размещена
// в модуле основной формы отчета или обработки, указанной в МенеджерПечати.
// Например,
// КомандаПечати.Обработчик = "_ДемоСтандартныеПодсистемыКлиент.ПечатьСчетовНаОплатуПокупателю";
// КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ОткрытьФормуСогласиеНаОбработкуПерсональныхДанных";
// Пример обработчика в модуле формы:
// // Формирует печатную форму <представление печатной формы>.
// //
@@ -5861,6 +5861,8 @@
ОбработанныеЯчейки = Новый Соответствие;
ФункцииСРазделениемПараметров = ФункцииСРазделениемПараметров();
Для НомерСтроки = Область.Верх По Область.Низ Цикл
Для НомерСтолбца = 1 По Макет.ШиринаТаблицы Цикл
ОбластьЯчейки = Макет.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца);
@@ -5876,12 +5878,25 @@
Для Каждого Параметр Из ПараметрыВТексте Цикл
Выражение = ОчиститьКвадратныеСкобки(Параметр);
ЭлементыФормулы =КонструкторФормулСлужебный.ЭлементыФормулы(Выражение);
НайденаФункцияИтогов = Ложь;
Для Каждого Элемент Из ЭлементыФормулы.ВсеЭлементы Цикл
Если СтрНачинаетсяС(Элемент, ИмяМодуляПечати() + РазделительКоманды())
И ФункцииСРазделениемПараметров.Найти(Элемент) <> Неопределено Тогда
НайденаФункцияИтогов = Истина;
Продолжить;
КонецЕсли;
Для Каждого Таблица Из Таблицы Цикл
СтрокаПоиска = Таблица + ".";
Если СтрНачинаетсяС(Элемент, СтрокаПоиска) Тогда
Если НайденаФункцияИтогов Тогда
НайденаФункцияИтогов = Ложь;
Иначе
Возврат Таблица;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
@@ -7054,7 +7069,7 @@
КонецЦикла;
КонецЕсли;
СоответствиеСтроки = Новый Соответствие();
СоответствиеСтроки = ОбщегоНазначения.СкопироватьРекурсивно(ИсточникДанных);
Для Каждого ПараметрОбласти Из МассивПараметровОбласти Цикл
Представление = УстановитьПредставлениеКартинку(КодЯзыка, ПараметрОбласти, НастройкиФорматаПолей, ИсточникДанных, ПараметрыПечати);
@@ -366,7 +366,7 @@
// Формат "<ИмяПроцедуры>" используется, когда процедура размещена
// в модуле основной формы отчета или обработки, указанной в МенеджерПечати.
// Например,
// КомандаПечати.Обработчик = "_ДемоСтандартныеПодсистемыКлиент.ПечатьСчетовНаОплатуПокупателю";
// КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ОткрытьФормуСогласиеНаОбработкуПерсональныхДанных";
// Пример обработчика в модуле формы:
// // Формирует печатную форму <представление печатной формы>.
// //
@@ -1220,14 +1220,10 @@
СтрокаДерева.Текст = СтрЗаменить(ЧтениеXML.Значение, Символ(160), " ");
Если СтрНачинаетсяС(СтрокаДерева.Текст, "HYPERLINK ") Тогда
СтрокаДерева.Текст = РаскодироватьСтроку(ЧтениеXML.Значение, СпособКодированияСтроки.КодировкаURL);
Иначе
СтрокаДерева.Текст = СтрЗаменить(ЧтениеXML.Значение, Символ(160), " ");
КонецЕсли;
СтрокаДерева.ПолныйТекст = СтрокаДерева.Текст;
ПолныйТекст = ПолныйТекст + СтрокаДерева.ПолныйТекст;
ЧтениеXML.Прочитать();
Возврат ПолныйТекст;
Иначе
ВызватьИсключение (НСтр("ru = 'Не известный:'") + " " + ЧтениеXML.ТипУзла);
КонецЕсли;
@@ -299,6 +299,7 @@
ВладелецФормы = ПараметрыОткрытия.ВладелецФормы;
ПараметрыОткрытия.ВладелецФормы = Неопределено;
СписокПереданныхПараметров.Удалить(0);
ПодключитьОбработчикОжидания("ПродолжитьВыполнениеКомандыПечатиСПереданнымиПараметрами", 0.1, Истина);
Если ТипЗнч(ПараметрыПечати) = Тип("Структура")
И ПараметрыПечати.Свойство("ВыполнятьВФоновомЗадании")
@@ -196,6 +196,8 @@
| КОНЕЦ
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|УПОРЯДОЧИТЬ ПО
| ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0)
|ИТОГИ ПО
| УчетнаяЗапись";
@@ -226,7 +228,7 @@
КонецЕсли;
Письма = Новый Массив;
СсылкиПисем = Новый Соответствие;
ДанныеПисем = Новый Соответствие;
ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать();
Пока ВыборкаПисьма.Следующий() Цикл
@@ -257,7 +259,13 @@
КонецПопытки;
Письма.Добавить(Письмо);
СсылкиПисем.Вставить(ВыборкаПисьма.Ссылка, Письмо);
ДанныеПисьма = Новый Структура;
ДанныеПисьма.Вставить("Письмо", Письмо);
ДанныеПисьма.Вставить("КоличествоПопыток", ВыборкаПисьма.КоличествоПопыток);
ДанныеПисьма.Вставить("ПредставлениеПисьма", ВыборкаПисьма.ПредставлениеПисьма);
ДанныеПисем.Вставить(ВыборкаПисьма.Ссылка, ДанныеПисьма);
КонецЦикла;
@@ -274,20 +282,44 @@
ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке,
УчетнаяЗапись, РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки(ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка()));
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке);
Если Не ЗначениеЗаполнено(РезультатОтправки) Тогда
Продолжить;
Если Письма.Количество() <> 0 Тогда
ДанныеПервогоПисьма = СсылкаНаПисьмоПоОтправляемомуПочтовомуСообщению(ДанныеПисем, Письма[0]);
Если ДанныеПервогоПисьма <> Неопределено Тогда
ПараметрыОбработкиОшибки = ПараметрыОбработкиОшибкиОтправки();
ПараметрыОбработкиОшибки.ПисьмоОбъект = ДанныеПервогоПисьма.Ключ.ПолучитьОбъект();
ПараметрыОбработкиОшибки.Ссылка = ДанныеПервогоПисьма.Ключ;
ПараметрыОбработкиОшибки.ПредставлениеПисьма = ДанныеПервогоПисьма.Значение.ПредставлениеПисьма;
ПараметрыОбработкиОшибки.КоличествоПопыток = ДанныеПервогоПисьма.Значение.КоличествоПопыток;
ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток = Истина;
ПараметрыОбработкиОшибки.СообщатьПользователю = Интерактивно;
ПараметрыОбработкиОшибки.ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
РезультатОбработкиОшибки = ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, Новый Массив);
КонецЕсли;
Продолжить;
КонецЕсли;
КонецЕсли;
КонецПопытки;
ТекстыОшибок = Новый Массив;
ВыборкаПисьма = ВыборкаУчетныеЗаписи.Выбрать();
Пока ВыборкаПисьма.Следующий() Цикл
ПисьмоСсылка = ВыборкаПисьма.Ссылка;
РезультатОтправкиПисьма = РезультатОтправки[СсылкиПисем[ПисьмоСсылка]];
РезультатОтправкиПисьма = РезультатОтправки[ДанныеПисем[ПисьмоСсылка].Письмо];
ОшибочныеПолучатели = Неопределено;
Если РезультатОтправкиПисьма <> Неопределено Тогда
ОшибочныеПолучатели = РезультатОтправкиПисьма.ОшибочныеПолучатели;
Если ЗначениеЗаполнено(ОшибочныеПолучатели) Тогда
ПараметрыОбработкиОшибки = ПараметрыОбработкиОшибкиОтправки();
ПараметрыОбработкиОшибки.ПисьмоОбъект = ВыборкаПисьма.Ссылка.ПолучитьОбъект();
ПараметрыОбработкиОшибки.Ссылка = ВыборкаПисьма.Ссылка;
@@ -300,6 +332,7 @@
Если Не РезультатОбработкиОшибки.ПисьмоОтправлено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
ОтправленоПисем = ОтправленоПисем + 1;
@@ -322,6 +355,36 @@
КонецЕсли;
КонецЦикла;
Если РезультатОтправки.Количество() <> Письма.Количество() Тогда
Для Каждого ОтправляемоеПисьмо Из Письма Цикл
Если РезультатОтправки[ОтправляемоеПисьмо] = Неопределено Тогда
ДанныеПервогоНеотправленногоПисьма = СсылкаНаПисьмоПоОтправляемомуПочтовомуСообщению(ДанныеПисем, ОтправляемоеПисьмо);
Если ДанныеПервогоНеотправленногоПисьма <> Неопределено Тогда
ПараметрыОбработкиОшибки = ПараметрыОбработкиОшибкиОтправки();
ПараметрыОбработкиОшибки.ПисьмоОбъект = ДанныеПервогоНеотправленногоПисьма.Ключ.ПолучитьОбъект();
ПараметрыОбработкиОшибки.Ссылка = ДанныеПервогоНеотправленногоПисьма.Ключ;
ПараметрыОбработкиОшибки.ПредставлениеПисьма = ДанныеПервогоНеотправленногоПисьма.Значение.ПредставлениеПисьма;
ПараметрыОбработкиОшибки.КоличествоПопыток = ДанныеПервогоНеотправленногоПисьма.Значение.КоличествоПопыток;
ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток = Истина;
ПараметрыОбработкиОшибки.СообщатьПользователю = Интерактивно;
ПараметрыОбработкиОшибки.ТекстОшибки = НСтр("ru = 'Непредвиденная ошибка при отправке письма'");
ПараметрыОбработкиОшибки.ВыполнятьЗаписьВЖурналРегистрации = Ложь;
РезультатОбработкиОшибки = ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, Новый Массив);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстыОшибок) Тогда
ВызватьИсключение СтрСоединить(ТекстыОшибок, Символы.ПС);
КонецЕсли;
@@ -330,6 +393,22 @@
КонецПроцедуры
Функция СсылкаНаПисьмоПоОтправляемомуПочтовомуСообщению(ДанныеПисем, ОтправляемоеПисьмо)
Для Каждого ДанныеПисьма Из ДанныеПисем Цикл
Если ДанныеПисьма.Значение.Письмо = ОтправляемоеПисьмо Тогда
Возврат ДанныеПисьма;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Функция РасширениеДляЗашифрованныхФайлов()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
@@ -398,6 +477,8 @@
Параметры.Вставить("КоличествоПопыток", 0);
Параметры.Вставить("ИнкрементироватьКоличествоПопыток" , Ложь);
Параметры.Вставить("СообщатьПользователю", Ложь);
Параметры.Вставить("ТекстОшибки", "");
Параметры.Вставить("ВыполнятьЗаписьВЖурналРегистрации", Истина);
Возврат Параметры;
@@ -421,6 +502,9 @@
РезультатАнализа = РезультатАнализаОшибочныхПолучателей(ПараметрыОбработкиОшибки.ПисьмоОбъект, ОшибочныеПолучатели);
ВсеАдресатыПисьмаОтвергнутыСервером = РезультатАнализа.ВсеАдресатыПисьмаОтвергнутыСервером;
ПредставлениеОшибочныхАдресатов = РезультатАнализа.ПредставлениеОшибочныхАдресатов;
ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов = РезультатАнализа.ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов;
Если ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Тогда
Если Не ВсеАдресатыПисьмаОтвергнутыСервером Тогда
ШаблонСообщенияОбОшибке = НСтр("ru = 'Следующие адресаты письма ""%1"" не приняты почтовым сервером:
@@ -430,11 +514,31 @@
|Следующие адресаты письма не приняты почтовым сервером:
|%2.'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке,
ПараметрыОбработкиОшибки.ПредставлениеПисьма, ПредставлениеОшибочныхАдресатов);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,
ПараметрыОбработкиОшибки.Ссылка, ТекстСообщенияОбОшибке);
ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке,
ПараметрыОбработкиОшибки.ПредставлениеПисьма,
ПредставлениеОшибочныхАдресатов);
Иначе
ШаблонСообщенияОбОшибке = НСтр("ru = 'Не удалось отправить письмо ""%1"".
|По причине: %2.'", ОбщегоНазначения.КодОсновногоЯзыка());
ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщенияОбОшибке,
ПараметрыОбработкиОшибки.ПредставлениеПисьма,
ПараметрыОбработкиОшибки.ТекстОшибки)
КонецЕсли;
Если ПараметрыОбработкиОшибки.ВыполнятьЗаписьВЖурналРегистрации Тогда
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,
ПараметрыОбработкиОшибки.Ссылка.Метаданные(),
ПараметрыОбработкиОшибки.Ссылка,
ТекстСообщенияОбОшибке);
КонецЕсли;
Результат.ТекстСообщения = ТекстСообщенияОбОшибке;
@@ -442,15 +546,8 @@
ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияОбОшибке, ПараметрыОбработкиОшибки.Ссылка);
КонецЕсли;
Если ВсеАдресатыПисьмаОтвергнутыСервером Тогда
ПисьмоОбъект = ПараметрыОбработкиОшибки.ПисьмоОбъект; // ДокументОбъект.ЭлектронноеПисьмоИсходящее
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка,
ПисьмоОбъект.Ссылка.Метаданные(),
ПараметрыОбработкиОшибки.Ссылка,
ТекстСообщенияОбОшибке);
Если ВсеАдресатыПисьмаОтвергнутыСервером
Или Не ЭтоПроблемаОтвергнутыхСерверомПочтовыхАдресов Тогда
Если ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток Тогда
@@ -675,6 +772,8 @@
| ИНАЧЕ ЭлектронноеПисьмоИсходящее.ДатаАктуальностиОтправки > &ТекущаяДата
| КОНЕЦ
| И ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0) < 5
|УПОРЯДОЧИТЬ ПО
| ЕСТЬNULL(НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма.КоличествоПопыток, 0)
|ИТОГИ ПО
| УчетнаяЗапись";
@@ -1020,23 +1119,24 @@
Попытка
ЗаголовкиПисемДляЗагрузки = Почта.ПолучитьЗаголовки(ПараметрыОтбора);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить заголовки писем для папки ""%1"" учетной записи ""%2"", по причине: %3'"),
ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты,
РаботаСПочтовымиСообщениями.РасширенноеПредставлениеОшибки(ИнформацияОбОшибке(), ОбщегоНазначения.КодОсновногоЯзыка(), Ложь));
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,
Метаданные.Справочники.ПапкиЭлектронныхПисем,, ТекстСообщения);
Продолжить;
КонецПопытки;
КоличествоПисемКЗагрузке = ЗаголовкиПисемДляЗагрузки.Количество();
Если КоличествоПисемКЗагрузке = 0 Тогда
Продолжить;
КонецЕсли;
ТекстСообщения = СтрШаблон(НСтр("ru = 'Начало получения писем из папки ""%1"" учетной записи ""%2"". Писем к загрузке: %3'"),
ИмяАктивнойПапки, ДанныеУчетнойЗаписи.АдресЭлектроннойПочты, КоличествоПисемКЗагрузке);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Информация,
Метаданные.Справочники.ПапкиЭлектронныхПисем,
,
ТекстСообщения);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,
Метаданные.Справочники.ПапкиЭлектронныхПисем,, ТекстСообщения);
ЗаголовкиСПустымИдентификатором = Новый Массив;
ТаблицаИдентификаторов.Очистить();
@@ -134,25 +134,17 @@
Возврат;
КонецЕсли;
Для Каждого СтрокаСписка Из СтрокиСписка Цикл
СтрокаСписка = СтрокиСписка[СтрокаСписка.Ключ];
Если СтрокаСписка.Оформление.Получить("СостояниеОригиналаПервичногоДокумента") = Неопределено
Или СтрокаСписка.Оформление.Получить("СостояниеОригиналПолучен") = Неопределено Тогда
Возврат;
КонецЕсли;
Прервать;
КонецЦикла;
Ключи = СтрокиСписка.ПолучитьКлючи(); // Массив из ДокументСсылка, Массив из РегистрСведенийКлючЗаписи
Ссылки = Новый Массив;
ИмяКлючевогоПоля = "Ссылка";
Для Каждого Ключ Из Ключи Цикл
ЭтоСсылка = ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Ключ));
Если ЭтоСсылка Тогда
Ссылки.Добавить(Ключ);
Иначе
Ссылки.Добавить(Ключ[ИмяКлючевогоПоля]);
Для Каждого СтрокаСписка Из СтрокиСписка Цикл
СтрокаСписка = СтрокиСписка[СтрокаСписка.Ключ];
Если Не СтрокаСписка.Данные.Свойство("Ссылка")
Или (СтрокаСписка.Оформление.Получить("СостояниеОригиналаПервичногоДокумента") = Неопределено
И СтрокаСписка.Оформление.Получить("СостояниеОригиналПолучен") = Неопределено) Тогда
Возврат;
КонецЕсли;
Ссылки.Добавить(СтрокаСписка.Данные[ИмяКлючевогоПоля]);
КонецЦикла;
Запрос = Новый Запрос;
@@ -170,23 +162,34 @@
|ГДЕ
| СостоянияОригиналовПервичныхДокументов.ОбщееСостояние
| И СостоянияОригиналовПервичныхДокументов.Владелец В(&Ссылка)";
Запрос.УстановитьПараметр("Ссылка", Ссылки);
Выборка = Запрос.Выполнить().Выбрать();
Для Каждого СтрокаСписка Из СтрокиСписка Цикл
СтрокаСписка = СтрокиСписка[СтрокаСписка.Ключ];
Если Не СтрокаСписка.Оформление.Получить("СостояниеОригиналаПервичногоДокумента") = Неопределено Тогда
Для Каждого Строка Из СтрокиСписка Цикл
Строка = СтрокиСписка[Строка.Ключ];
Выборка.Сбросить();
Если Выборка.НайтиСледующий(СтрокаСписка.Данные["Ссылка"], "Ссылка") Тогда
СтрокаСписка.Данные["СостояниеОригиналаПервичногоДокумента"] = Выборка.СостояниеОригиналаПервичногоДокумента;
СтрокаСписка.Оформление["СостояниеОригиналаПервичногоДокумента"].УстановитьЗначениеПараметра("ЦветТекста",
ЦветаСтиля.ГиперссылкаЦвет);
СтрокаСписка.Данные["СостояниеОригиналПолучен"] = Выборка.СостояниеОригиналПолучен;
Если Выборка.НайтиСледующий(Строка.Данные["Ссылка"], "Ссылка") Тогда
Строка.Данные["СостояниеОригиналаПервичногоДокумента"] = Выборка.СостояниеОригиналаПервичногоДокумента;
Строка.Оформление["СостояниеОригиналаПервичногоДокумента"].УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
Иначе
СтрокаСписка.Данные["СостояниеОригиналаПервичногоДокумента"] = НСтр("ru = '<Неизвестно>'");
СтрокаСписка.Оформление["СостояниеОригиналаПервичногоДокумента"].УстановитьЗначениеПараметра("ЦветТекста",
ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Строка.Данные["СостояниеОригиналаПервичногоДокумента"] = НСтр("ru = '<Неизвестно>'");
Строка.Оформление["СостояниеОригиналаПервичногоДокумента"].УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не СтрокаСписка.Оформление.Получить("СостояниеОригиналПолучен") = Неопределено Тогда
Для Каждого Строка Из СтрокиСписка Цикл
Строка = СтрокиСписка[Строка.Ключ];
Выборка.Сбросить();
Если Выборка.НайтиСледующий(Строка.Данные["Ссылка"], "Ссылка") Тогда
Строка.Данные["СостояниеОригиналПолучен"] = Выборка.СостояниеОригиналПолучен;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
@@ -44,7 +44,7 @@
//
// Пример:
// НоваяСтрока = ТаблицаУчетаОригиналов.Добавить();
// НоваяСтрока.ОбъектМетаданных = Метаданные.Документы._ДемоРеализацияТоваров;
// НоваяСтрока.ОбъектМетаданных = Метаданные.Документы.РеализацияТоваров;
// НоваяСтрока.Идентификатор = "РасходнаяНакладная";
//
Процедура ЗаполнитьТаблицуУчетаОригиналов(ТаблицаУчетаОригиналов) Экспорт
@@ -2096,6 +2096,15 @@
Соответствие.Вставить("SendReport","ОтправлятьОтчет");
Соответствие.Вставить("IncludeDetailErrorDescriptionInReport","ВключатьПодробныйТекстОшибкиВОтчет");
Соответствие.Вставить("IncludeInfobaseInformationInReport","ВключатьСведенияОбИнформационнойБазеВОтчет");
Соответствие.Вставить("ErrorMessageDisplayVariant","ВариантОтображенияСообщенияОбОшибке");
Соответствие.Вставить("ErrorProcessingServiceURL","АдресСервисаОбработкиОшибок");
Соответствие.Вставить("SendReportOnClient","ОтправлятьОтчетНаКлиенте");
Соответствие.Вставить("SendReportOnServer","ОтправлятьОтчетНаСервере");
Соответствие.Вставить("IncludeDetailErrorDescriptionInReportOnClient","ВключатьПодробныйТекстОшибкиВОтчетНаКлиенте");
Соответствие.Вставить("IncludeDetailErrorDescriptionInReportOnServer","ВключатьПодробныйТекстОшибкиВОтчетНаСервере");
Соответствие.Вставить("IncludeInfobaseInformationInReportOnClient","ВключатьСведенияОбИнформационнойБазеВОтчетНаКлиенте");
Соответствие.Вставить("IncludeInfobaseInformationInReportOnServer","ВключатьСведенияОбИнформационнойБазеВОтчетНаСервере");
Значение = Соответствие.Получить(Ключ);
Если Значение = Неопределено Тогда
Возврат Ключ
@@ -3962,6 +3971,7 @@
УстановитьПривилегированныйРежим(Истина);
ОбщиеНастройки = Параметры.ОбработкаОшибок.ПолучитьОбщиеНастройки();
УстановитьПривилегированныйРежим(Ложь);
ДополнительнаяИнформация = Новый Структура;
Если ЗначениеЗаполнено(ОбщиеНастройки.ДополнительнаяИнформацияОтчета) Тогда
// Считаем, что внутри json. Если нет, то кто-то установил руками. Тогда ничего не меняем - так и должно быть.
@@ -3977,6 +3987,7 @@
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(ЗаписьJSON, ДополнительнаяИнформация);
ОбщиеНастройки.ДополнительнаяИнформацияОтчета = ЗаписьJSON.Закрыть();
УстановитьПривилегированныйРежим(Истина);
Параметры.ОбработкаОшибок.УстановитьОбщиеНастройки(ОбщиеНастройки);
УстановитьПривилегированныйРежим(Ложь);
@@ -3991,76 +4002,60 @@
РезультатОбработки = Новый Структура;
Параметры = Новый Структура;
Параметры.Вставить("КодВыполнен", Ложь);
Параметры.Вставить("ОбработкаОшибок", Неопределено);
Параметры.Вставить("РежимОтправкиИнформацииОбОшибке", Неопределено);
Параметры.Вставить("ВариантОтображенияСообщенияОбОшибке", Неопределено);
КодДляВыполнения = "Параметры.ОбработкаОшибок = ОбработкаОшибок;
|Параметры.КодВыполнен = Истина;
|Параметры.РежимОтправкиИнформацииОбОшибке = РежимОтправкиИнформацииОбОшибке;
|Параметры.ВариантОтображенияСообщенияОбОшибке = ВариантОтображенияСообщенияОбОшибке;";
// Инициализируем менеджер обработки ошибок.
// АПК:280-выкл обработка исключения не требуется
Попытка
ОбщегоНазначения.ВыполнитьВБезопасномРежиме(КодДляВыполнения, Параметры);
Исключение
// Исключение не выбрасываем.
КонецПопытки;
Если Параметры.КодВыполнен Тогда
Попытка
Если БезопасныйРежим() = Истина Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ОбщиеНастройки = Параметры.ОбработкаОшибок.ПолучитьОбщиеНастройки();
ПеречислениеРежимОтправкиИнформацииОбОшибке = Параметры.РежимОтправкиИнформацииОбОшибке;
ПеречислениеВариантОтображенияСообщенияОбОшибке = Параметры.ВариантОтображенияСообщенияОбОшибке;
ОбщиеНастройки = ОбработкаОшибок.ПолучитьОбщиеНастройки();
ПеречислениеРежимОтправкиИнформацииОбОшибке = РежимОтправкиИнформацииОбОшибке;
ПеречислениеВариантОтображенияСообщенияОбОшибке = ВариантОтображенияСообщенияОбОшибке;
УстановитьПривилегированныйРежим(Ложь);
Если ОбщиеНастройки.АдресСервисаРегистрацииОшибок = СохраненныеПараметры.АдресСервисаРегистрацииОшибок
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно Тогда
ОбщиеНастройки.АдресСервисаРегистрацииОшибок = ПолученныеПараметры.АдресСервисаРегистрацииОшибок;
// Сравниваем с сохраненными параметрами, чтобы убедиться, что руками пользователь ничего не менял.
Если ПолученныеПараметры.Свойство("АдресСервисаРегистрацииОшибок")
И (ОбщиеНастройки.АдресСервисаОбработкиОшибок = СохраненныеПараметры.АдресСервисаРегистрацииОшибок
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно) Тогда
ОбщиеНастройки.АдресСервисаОбработкиОшибок = ПолученныеПараметры.АдресСервисаРегистрацииОшибок;
РезультатОбработки.Вставить("АдресСервисаРегистрацииОшибок", ПолученныеПараметры.АдресСервисаРегистрацииОшибок);
КонецЕсли;
// АПК:1036-выкл
Если ОбщиеНастройки.ОтправлятьОчет = ПеречислениеРежимОтправкиИнформацииОбОшибке[СохраненныеПараметры.ОтправлятьОтчет]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно Тогда
ОбщиеНастройки.ОтправлятьОчет = ПеречислениеРежимОтправкиИнформацииОбОшибке[ПолученныеПараметры.ОтправлятьОтчет];
Если ПолученныеПараметры.Свойство("ОтправлятьОтчет")
И (ОбщиеНастройки.ОтправлятьОтчетНаКлиенте = ПеречислениеРежимОтправкиИнформацииОбОшибке[СохраненныеПараметры.ОтправлятьОтчет]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно) Тогда
ОбщиеНастройки.ОтправлятьОтчетНаКлиенте = ПеречислениеРежимОтправкиИнформацииОбОшибке[ПолученныеПараметры.ОтправлятьОтчет];
РезультатОбработки.Вставить("ОтправлятьОтчет", ПолученныеПараметры.ОтправлятьОтчет);
КонецЕсли;
// АПК:1036-вкл
Если ОбщиеНастройки.ВариантОтображенияСообщения = ПеречислениеВариантОтображенияСообщенияОбОшибке[СохраненныеПараметры.ВариантОтображенияСообщенияОбОшибке]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно Тогда
Если ПолученныеПараметры.Свойство("ВариантОтображенияСообщенияОбОшибке")
И (ОбщиеНастройки.ВариантОтображенияСообщения = ПеречислениеВариантОтображенияСообщенияОбОшибке[СохраненныеПараметры.ВариантОтображенияСообщенияОбОшибке]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно) Тогда
ОбщиеНастройки.ВариантОтображенияСообщения = ПеречислениеВариантОтображенияСообщенияОбОшибке[ПолученныеПараметры.ВариантОтображенияСообщенияОбОшибке];
// Текст сообщения.
ПараметрыДляТекстаСообщения = Новый Структура("ОбщиеНастройки", ОбщиеНастройки);
КодДляВыполнения = "СтрокаСообщения = Новый ФорматированнаяСтрока(НСтр(""ru = 'К сожалению, возникла непредвиденная ситуация'""), ШрифтыСтиля.ОченьКрупныйШрифтТекста);
|ТекстыСообщенияОбОшибке = Новый ТекстыСообщенияОбОшибке(СтрокаСообщения, СтрокаСообщения);
|Параметры.ОбщиеНастройки.ТекстыСообщенийОбОшибках.Вставить(КатегорияОшибки.ПрочаяОшибка, ТекстыСообщенияОбОшибке);";
ОбщегоНазначения.ВыполнитьВБезопасномРежиме(КодДляВыполнения, ПараметрыДляТекстаСообщения);
СтрокаСообщения = СтроковыеФункции.ФорматированнаяСтрока(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '<span style=""font:%1"">К сожалению, возникла непредвиденная ситуация</span>'"),
"ШрифтОченьКрупныйШрифтТекста"));
ТекстыСообщенияОбОшибке = Новый ТекстыСообщенияОбОшибке(СтрокаСообщения, СтрокаСообщения);
ОбщиеНастройки.ТекстыСообщенийОбОшибках.Вставить(КатегорияОшибки.ПрочаяОшибка, ТекстыСообщенияОбОшибке);
РезультатОбработки.Вставить("ВариантОтображенияСообщенияОбОшибке", ПолученныеПараметры.ВариантОтображенияСообщенияОбОшибке);
КонецЕсли;
Если ОбщиеНастройки.ВключатьПодробныйТекстОшибкиВОтчет = ПеречислениеРежимОтправкиИнформацииОбОшибке[СохраненныеПараметры.ВключатьПодробныйТекстОшибкиВОтчет]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно Тогда
ОбщиеНастройки.ВключатьПодробныйТекстОшибкиВОтчет = ПеречислениеРежимОтправкиИнформацииОбОшибке[ПолученныеПараметры.ВключатьПодробныйТекстОшибкиВОтчет];
Если ПолученныеПараметры.Свойство("ВключатьПодробныйТекстОшибкиВОтчет")
И (ОбщиеНастройки.ВключатьПодробныйТекстОшибкиВОтчетНаКлиенте = ПеречислениеРежимОтправкиИнформацииОбОшибке[СохраненныеПараметры.ВключатьПодробныйТекстОшибкиВОтчет]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно) Тогда
ОбщиеНастройки.ВключатьПодробныйТекстОшибкиВОтчетНаКлиенте = ПеречислениеРежимОтправкиИнформацииОбОшибке[ПолученныеПараметры.ВключатьПодробныйТекстОшибкиВОтчет];
РезультатОбработки.Вставить("ВключатьПодробныйТекстОшибкиВОтчет", ПолученныеПараметры.ВключатьПодробныйТекстОшибкиВОтчет);
КонецЕсли;
Если ОбщиеНастройки.ВключатьСведенияОбИнформационнойБазеВОтчет = ПеречислениеРежимОтправкиИнформацииОбОшибке[СохраненныеПараметры.ВключатьСведенияОбИнформационнойБазеВОтчет]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно Тогда
ОбщиеНастройки.ВключатьСведенияОбИнформационнойБазеВОтчет = ПеречислениеРежимОтправкиИнформацииОбОшибке[ПолученныеПараметры.ВключатьСведенияОбИнформационнойБазеВОтчет];
Если ПолученныеПараметры.Свойство("ВключатьСведенияОбИнформационнойБазеВОтчет")
И (ОбщиеНастройки.ВключатьСведенияОбИнформационнойБазеВОтчетНаКлиенте = ПеречислениеРежимОтправкиИнформацииОбОшибке[СохраненныеПараметры.ВключатьСведенияОбИнформационнойБазеВОтчет]
ИЛИ ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно) Тогда
ОбщиеНастройки.ВключатьСведенияОбИнформационнойБазеВОтчетНаКлиенте = ПеречислениеРежимОтправкиИнформацииОбОшибке[ПолученныеПараметры.ВключатьСведенияОбИнформационнойБазеВОтчет];
РезультатОбработки.Вставить("ВключатьСведенияОбИнформационнойБазеВОтчет", ПолученныеПараметры.ВключатьСведенияОбИнформационнойБазеВОтчет);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Параметры.ОбработкаОшибок.УстановитьОбщиеНастройки(ОбщиеНастройки);
ОбработкаОшибок.УстановитьОбщиеНастройки(ОбщиеНастройки);
УстановитьПривилегированныйРежим(Ложь);
РезультатОбработки.Вставить("УстановитьНастройкиОбработкиОшибокПринудительно", ПолученныеПараметры.УстановитьНастройкиОбработкиОшибокПринудительно);
РезультатОбработки.Вставить("ВариантОтображенияСообщенияОбОшибке", ПолученныеПараметры.ВариантОтображенияСообщенияОбОшибке);
РезультатОбработки.Вставить("АдресСервисаРегистрацииОшибок", ПолученныеПараметры.АдресСервисаРегистрацииОшибок);
РезультатОбработки.Вставить("ОтправлятьОтчет", ПолученныеПараметры.ОтправлятьОтчет);
РезультатОбработки.Вставить("ВключатьПодробныйТекстОшибкиВОтчет", ПолученныеПараметры.ВключатьПодробныйТекстОшибкиВОтчет);
РезультатОбработки.Вставить("ВключатьСведенияОбИнформационнойБазеВОтчет", ПолученныеПараметры.ВключатьСведенияОбИнформационнойБазеВОтчет);
Исключение
// Исключение не выбрасываем.
КонецПопытки;
КонецЕсли;
// АПК:280-вкл
Возврат РезультатОбработки;
КонецФункции
@@ -1921,7 +1921,7 @@
Если ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии(
ПодписьДляПроверки, МенеджерКриптографииДляПроверки, Ложь);
ПодписьДляПроверки, МенеджерКриптографииДляПроверки, Сертификат = Неопределено);
Если ПустаяСтрока(ОшибкаПроверкиПодписи) И СвойстваПодписи.ТипПодписи <> Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS
И СвойстваПодписи.ТипПодписи <> Перечисления.ТипыПодписиКриптографии.БазоваяCAdESBES Тогда
Попытка
@@ -1932,13 +1932,14 @@
КонецПопытки;
КонецЕсли;
Иначе
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиИзДвоичныхДанных(ПодписьДляПроверки, Ложь);
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиИзДвоичныхДанных(ПодписьДляПроверки, Сертификат = Неопределено);
КонецЕсли;
СвойстваСертификата = Неопределено;
Если РезультатСтруктура <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(РезультатСтруктура, СвойстваПодписи);
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатСуществует(Сертификат) Тогда
Если Не ЗначениеЗаполнено(РезультатСтруктура.Сертификат)
И ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатСуществует(Сертификат) Тогда
СвойстваСертификата = СвойстваСертификата(Сертификат);
РезультатСтруктура.Сертификат = Сертификат.Выгрузить();
РезультатСтруктура.Отпечаток = СвойстваСертификата.Отпечаток;
@@ -2168,6 +2168,24 @@
#Область СлужебныйПрограммныйИнтерфейс
// Открывает ссылку с поиском по ошибкам при работе с электронной подписью
// и вариантами их решения.
//
// Параметры:
// СтрокаПоиска - Строка - строка для поиска.
//
Процедура ОткрытьПоискПоОшибкамПриРаботеСЭлектроннойПодписью(СтрокаПоиска = "") Экспорт
НавигационнаяСсылка = "";
ЭлектроннаяПодписьКлиентСерверЛокализация.ПриОпределенииСсылкиНаПоискПоОшибкамПриРаботеСЭлектроннойПодписью(
НавигационнаяСсылка, СтрокаПоиска);
Если Не ПустаяСтрока(НавигационнаяСсылка) Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылка);
КонецЕсли;
КонецПроцедуры
// Открывает форму просмотра подписи ЭП.
Процедура ОткрытьПодпись(ТекущиеДанные) Экспорт
@@ -2206,9 +2224,9 @@
// Сохраняет подпись на компьютер.
Процедура СохранитьПодпись(АдресПодписи) Экспорт
Процедура СохранитьПодпись(АдресПодписи, ИмяФайлаПодписи = "") Экспорт
ЭлектроннаяПодписьСлужебныйКлиент.СохранитьПодпись(АдресПодписи);
ЭлектроннаяПодписьСлужебныйКлиент.СохранитьПодпись(АдресПодписи, ИмяФайлаПодписи);
КонецПроцедуры
@@ -0,0 +1,97 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
Процедура ПриПолученииФильтраДляВыбораПодписей(Фильтр) Экспорт
// Локализация
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Фильтр = НСтр("ru = 'Файлы подписи (*.p7s, *.sig%1), МЧД (*.xml, *.zip)|*.p7s;*.sig%2;*.xml;*.zip'");
КонецЕсли;
// Конец Локализация
КонецПроцедуры
Процедура ПриПолученииСпискаВыбораМашиночитаемыхДоверенностей(Форма, ТекущиеДанные, СписокВыбора) Экспорт
// Локализация
Доверенности = Форма.Доверенности;
Если ЗначениеЗаполнено(ТекущиеДанные.ПоляОтбора) Тогда
ПоляОтбора = СтрРазделить(ТекущиеДанные.ПоляОтбора, ";");
Для Каждого Доверенность Из Доверенности Цикл
Для Каждого Элемент Из ПоляОтбора Цикл
Если СтрНайти(Доверенность.ПоляОтбора, Элемент) <> 0 Тогда
СписокВыбора.Добавить(Доверенность.НомерДоверенности, Доверенность.МашиночитаемаяДоверенность);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
// Конец Локализация
КонецПроцедуры
Процедура ПриВыбореМашиночитаемойДоверенности(ОбработчикЗавершения, ТекущиеДанные) Экспорт
// Локализация
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
СвойстваПодписи = ПолучитьИзВременногоХранилища(ТекущиеДанные.АдресСвойствПодписи);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("СертификатПредставителя", СвойстваПодписи.Сертификат);
ПараметрыФормы.Вставить("НаДату", СвойстваПодписи.ДатаПодписи);
ПараметрыФормы.Вставить("ТолькоДействующие", Истина);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
МодульМашиночитаемыеДоверенностиФНСКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("МашиночитаемыеДоверенностиФНСКлиент");
МодульМашиночитаемыеДоверенностиФНСКлиент.ОткрытьСписокМЧД(ПараметрыФормы, ОбработчикЗавершения);
// Конец Локализация
КонецПроцедуры
Процедура ПриОпределенииФайловМашиночитаемыхДоверенностей(ФайлыМашиночитаемыхДоверенностей,
КоллекцияПодписей) Экспорт
// Локализация
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
МашиночитаемыеДоверенности = Новый Массив;
Для Каждого Подпись Из КоллекцияПодписей Цикл
Для Каждого МашиночитаемаяДоверенность Из Подпись.МашиночитаемаяДоверенность Цикл
Если МашиночитаемыеДоверенности.Найти(МашиночитаемаяДоверенность.Значение) = Неопределено Тогда
МашиночитаемыеДоверенности.Добавить(МашиночитаемаяДоверенность.Значение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если МашиночитаемыеДоверенности.Количество() > 0 Тогда
МодульМашиночитаемыеДоверенностиФНССлужебныйВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль(
"МашиночитаемыеДоверенностиФНССлужебныйВызовСервера");
ФайлыМашиночитаемыхДоверенностей = МодульМашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ФайлыДоверенностей(
МашиночитаемыеДоверенности, Ложь);
КонецЕсли;
// Конец Локализация
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="398cd724-3c08-49b3-a5b4-4186f1d6b32d">
<name>ЭлектроннаяПодписьКлиентЛокализация</name>
<synonym>
<key>ru</key>
<value>Электронная подпись клиент локализация</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -201,6 +201,7 @@
СвойстваПодписи.Вставить("ПодписьВерна");
СвойстваПодписи.Вставить("ДатаПроверкиПодписи");
СвойстваПодписи.Вставить("КомуВыданСертификат");
СвойстваПодписи.Вставить("ИмяФайлаПодписи");
СвойстваПодписи.Вставить("ТребуетсяПроверка");
СвойстваПодписи.Вставить("УстановившийПодпись");
СвойстваПодписи.Вставить("ТипПодписи");
@@ -314,6 +314,17 @@
КонецПроцедуры
Процедура ПриОпределенииСсылкиНаПоискПоОшибкамПриРаботеСЭлектроннойПодписью(НавигационнаяСсылка, СтрокаПоиска = "") Экспорт
// Локализация
НавигационнаяСсылка = "https://edo.1c.ru/handbook"
+ ?(ПустаяСтрока(СтрокаПоиска), "", "//?q=" + СтрокаПоиска);
// Конец Локализация
КонецПроцедуры
// Локализация
#Область ШаблоныКонвертаXML
@@ -670,6 +681,22 @@
// Аккредитация удостоверяющего центра прекращена.
Если Не РезультатПроверкиУдостоверяющегоЦентра.Действует Тогда
Если СтрНачинаетсяС(КонтекстПроверки.ЗначенияПоиска, "1024001434049")
И ЗначениеЗаполнено(ДатаПрекращенияАккредитацииУЦ)
И ДатаПрекращенияАккредитацииУЦ - КонтекстПроверки.РазницаСУниверсальнымВременем = Дата(2024, 7, 20, 21, 0, 0) Тогда
РезультатПроверкиУдостоверяющегоЦентра.Действует = Ложь;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.РазрешитьПодписание = Ложь;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат не действует с %1, так как аккредитация удостоверяющего центра %2, выдавшего сертификат, прекращена.'"),
Формат(ДатаПрекращенияАккредитацииУЦ, "ДЛФ=DT"), КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
Если Не КонтекстПроверки.ЭтоПроверкаПодписи Тогда
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подайте <a href = ""%1"">заявление</a> на новый сертификат.'"), "ПодатьЗаявлениеНаСертификат");
КонецЕсли;
Возврат РезультатПроверкиУдостоверяющегоЦентра;
КонецЕсли;
Если ДанныеУдостоверяющегоЦентра.РазрешенныйНеаккредитованный Тогда
РезультатПроверкиУдостоверяющегоЦентра.Действует = Истина;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
@@ -683,18 +710,20 @@
НСтр("ru = 'Сертификат не действует с %1, так как аккредитация удостоверяющего центра %2, выдавшего сертификат, прекращена.'"),
Формат(ДатаПрекращенияАккредитацииУЦ, "ДЛФ=DT"), КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.РазрешитьПодписание = Ложь;
Если Не КонтекстПроверки.ЭтоПроверкаПодписи Тогда
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ВозможенПеревыпуск = ВозможенПеревыпуск;
Если ВозможенПеревыпуск Тогда
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подайте <a href = ""%1"">заявление</a> на новый сертификат или добавьте удостоверяющий центр %2 в <a href = ""%3"">список разрешенных</a> неаккредитованных УЦ.'"),
НСтр("ru = 'Подайте <a href = ""%1"">заявление</a> на новый сертификат. Если юридическая значимость подписей не требуется, добавьте удостоверяющий центр %2 в <a href = ""%3"">список разрешенных</a> неаккредитованных УЦ.'"),
"ПодатьЗаявлениеНаСертификат", КонтекстПроверки.НаименованиеУдостоверяющегоЦентра,
"ДобавитьУдостоверяющийЦентрВСписокРазрешенныхНеаккредитованных");
Иначе
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Получите новый сертификат в <a href = ""%1"">соответствующем удостоверяющем центре</a> или добавьте удостоверяющий центр %2 в <a href = ""%3"">список разрешенных</a> неаккредитованных УЦ.'"),
НСтр("ru = 'Получите новый сертификат в <a href = ""%1"">соответствующем удостоверяющем центре</a>. Если юридическая значимость подписей не требуется, добавьте удостоверяющий центр %2 в <a href = ""%3"">список разрешенных</a> неаккредитованных УЦ.'"),
СсылкаНаСтатьюОбУдостоверяющихЦентрах(), КонтекстПроверки.НаименованиеУдостоверяющегоЦентра,
"ДобавитьУдостоверяющийЦентрВСписокРазрешенныхНеаккредитованных");
КонецЕсли;
@@ -0,0 +1,271 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
// При создании на сервере.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения
//
Процедура ПриСозданииНаСервере(Форма) Экспорт
// Локализация
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
Если Форма.ИмяФормы = "ОбщаяФорма.ДобавлениеЭлектроннойПодписиИзФайла" Тогда
Форма.Элементы.ПодписиМашиночитаемаяДоверенность.Видимость = Истина;
Возврат;
КонецЕсли;
Если Форма.ИмяФормы = "ОбщаяФорма.СохранениеВместеСЭлектроннойПодписью" Тогда
Форма.Элементы.ТаблицаПодписейМашиночитаемаяДоверенность.Видимость = Истина;
Возврат;
КонецЕсли;
// Конец Локализация
КонецПроцедуры
Процедура ПриЗагрузкеМашиночитаемыхДоверенностей(Форма) Экспорт
// Локализация
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
Подписи = Форма.Подписи;
Доверенности = Форма.Доверенности;
МодульМашиночитаемыеДоверенностиСлужебный = ОбщегоНазначения.ОбщийМодуль(
"МашиночитаемыеДоверенностиФНССлужебный");
Для Каждого Подпись Из Подписи Цикл
Если ТипЗнч(Подпись.МашиночитаемаяДоверенность) = Тип("Строка") И ЗначениеЗаполнено(
Подпись.МашиночитаемаяДоверенность) Тогда
Найдено = Доверенности.НайтиСтроки(Новый Структура("НомерДоверенности", Подпись.НомерДоверенности));
ФайлыДоверенности = ПолучитьИзВременногоХранилища(Найдено[0].ФайлыДоверенности);
Результат = МодульМашиночитаемыеДоверенностиСлужебный.ЗагрузитьДоверенностиВИнформационнуюБазу(
ФайлыДоверенности);
МашиночитаемаяДоверенность = Результат.Доверенности[0];
СвойстваПодписи = ПолучитьИзВременногоХранилища(Подпись.АдресСвойствПодписи);
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиСлужебный.НовыйРезультатПроверкиПодписиПоМЧД(
МашиночитаемаяДоверенность);
ПоместитьВоВременноеХранилище(СвойстваПодписи, Подпись.АдресСвойствПодписи);
Подпись.МашиночитаемаяДоверенность = МашиночитаемаяДоверенность;
Найдено = Подписи.НайтиСтроки(Новый Структура("НомерДоверенности", Подпись.НомерДоверенности));
Для Каждого Строка Из Найдено Цикл
Строка.МашиночитаемаяДоверенность = МашиночитаемаяДоверенность;
СвойстваПодписи = ПолучитьИзВременногоХранилища(Строка.АдресСвойствПодписи);
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиСлужебный.НовыйРезультатПроверкиПодписиПоМЧД(
МашиночитаемаяДоверенность);
ПоместитьВоВременноеХранилище(СвойстваПодписи, Строка.АдресСвойствПодписи);
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Конец Локализация
КонецПроцедуры
Процедура ПриЗаполненииМашиночитаемыхДоверенностей(Форма, ПодписанныйОбъект = Неопределено) Экспорт
// Локализация
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
Подписи = Форма.Подписи;
Доверенности = Форма.Доверенности;
МодульМашиночитаемыеДоверенностиФНС = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНС");
МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный");
Для Каждого ТекущаяСтрока Из Подписи Цикл
ТекущаяСтрока.МашиночитаемаяДоверенность = Неопределено;
СвойстваПодписи = ПолучитьИзВременногоХранилища(ТекущаяСтрока.АдресСвойствПодписи);
Сертификат = СвойстваПодписи.Сертификат;
ОтборПоСертификату = МодульМашиночитаемыеДоверенностиФНС.ОтборДляДоверенностейПоСертификату(Сертификат, "Представитель");
ПоляОтбора = Новый Массив;
Для Каждого Элемент Из ОтборПоСертификату Цикл
Если Элемент.Ключ = "ПредставительИНН" Или Элемент.Ключ = "ПредставительИННФЛ" Тогда
Если Не ЗначениеЗаполнено(ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
Для Каждого Доверенность Из Доверенности Цикл
Если СтрНайти(Доверенность.ПоляОтбора, Элемент.Значение) Тогда
ТекущаяСтрока.МашиночитаемаяДоверенность = Доверенность.МашиночитаемаяДоверенность;
ТекущаяСтрока.НомерДоверенности = Доверенность.НомерДоверенности;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоляОтбора.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;
ТекущаяСтрока.ПоляОтбора = СтрСоединить(ПоляОтбора, ";");
Если Не ЗначениеЗаполнено(ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
Результат = МодульМашиночитаемыеДоверенностиФНС.ДоверенностиСОтбором(
ОтборПоСертификату, "МашиночитаемаяДоверенность", СвойстваПодписи.ДатаПодписи);
Если Результат.Количество() > 0 Тогда
Для Каждого Доверенность Из Результат Цикл
Найдено = Доверенности.НайтиСтроки(Новый Структура("МашиночитаемаяДоверенность",
Доверенность.МашиночитаемаяДоверенность));
Если Найдено.Количество() > 0 Тогда
ТекущаяСтрока.МашиночитаемаяДоверенность = Найдено[0].МашиночитаемаяДоверенность;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
ТекущаяСтрока.МашиночитаемаяДоверенность = Результат[0].МашиночитаемаяДоверенность;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
Если ПодписанныйОбъект = Неопределено Тогда
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.НовыйРезультатПроверкиПодписиПоМЧД(
ТекущаяСтрока.МашиночитаемаяДоверенность);
ИначеЕсли МодульМашиночитаемыеДоверенностиФНССлужебный.ЭтоМашиночитаемаяДоверенность(
ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(
ТекущаяСтрока.МашиночитаемаяДоверенность, ПодписанныйОбъект, СвойстваПодписи.Сертификат,
СвойстваПодписи.ДатаПодписи);
Иначе
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = Неопределено;
КонецЕсли;
Иначе
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = Неопределено;
КонецЕсли;
ПоместитьВоВременноеХранилище(СвойстваПодписи, ТекущаяСтрока.АдресСвойствПодписи);
КонецЦикла;
// Конец Локализация
КонецПроцедуры
Процедура ПриЗаполненииМашиночитаемойДоверенностиВСтроке(Форма, ИдентификаторСтроки, ПодписанныйОбъект) Экспорт
// Локализация
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
Подписи = Форма.Подписи;
МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный");
ТекущаяСтрока = Подписи.НайтиПоИдентификатору(ИдентификаторСтроки);
СвойстваПодписи = ПолучитьИзВременногоХранилища(ТекущаяСтрока.АдресСвойствПодписи);
Если ЗначениеЗаполнено(ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
Если ПодписанныйОбъект = Неопределено Тогда
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.НовыйРезультатПроверкиПодписиПоМЧД(
ТекущаяСтрока.МашиночитаемаяДоверенность);
ИначеЕсли МодульМашиночитаемыеДоверенностиФНССлужебный.ЭтоМашиночитаемаяДоверенность(
ТекущаяСтрока.МашиночитаемаяДоверенность) Тогда
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(
ТекущаяСтрока.МашиночитаемаяДоверенность, ПодписанныйОбъект, СвойстваПодписи.Сертификат,
СвойстваПодписи.ДатаПодписи);
Иначе
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = Неопределено;
КонецЕсли;
Иначе
СвойстваПодписи.РезультатПроверкиПодписиПоМЧД = Неопределено;
КонецЕсли;
ПоместитьВоВременноеХранилище(СвойстваПодписи, ТекущаяСтрока.АдресСвойствПодписи);
// Конец Локализация
КонецПроцедуры
Процедура ПриДобавленииСтрокНаСервере(Форма, ПомещенныеФайлы, ДругиеФайлы, ОшибкиПриЗагрузкеДоверенностей, УникальныйИдентификатор) Экспорт
// Локализация
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
Доверенности = Форма.Доверенности;
МодульМашиночитаемыеДоверенностиСлужебный = ОбщегоНазначения.ОбщийМодуль(
"МашиночитаемыеДоверенностиФНССлужебный");
СвойстваДоверенностей = МодульМашиночитаемыеДоверенностиСлужебный.СвойстваДоверенностейИзФайлов(
ПомещенныеФайлы, УникальныйИдентификатор);
Для Каждого СвойстваДоверенности Из СвойстваДоверенностей.Доверенности Цикл
НоваяСтрока = Доверенности.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваДоверенности);
КонецЦикла;
ОшибкиПриЗагрузкеДоверенностей = СтрСоединить(СвойстваДоверенностей.ТекстыОшибок, Символы.ПС);
ДругиеФайлы = СвойстваДоверенностей.ДругиеФайлы;
// Конец Локализация
КонецПроцедуры
Процедура ПриПроверкеПодписейПоМЧД(Подписи, ПодписанныйОбъект, РезультатыПроверок) Экспорт
// Локализация
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
РезультатыПроверок = Новый Массив;
МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль(
"МашиночитаемыеДоверенностиФНССлужебный");
Для Каждого Подпись Из Подписи Цикл
РезультатПроверкиДоверенностей = ПолучитьИзВременногоХранилища(Подпись.РезультатПроверкиПодписиПоМЧД);
НовыйРезультатПроверкиДоверенностей = Новый Массив;
Для Каждого Результат Из РезультатПроверкиДоверенностей Цикл
Если Не ЗначениеЗаполнено(Подпись.Сертификат) Тогда
НовыйРезультатПроверкиДоверенностей.Добавить(
МодульМашиночитаемыеДоверенностиФНССлужебный.НовыйРезультатПроверкиПодписиПоМЧД(Результат.МашиночитаемаяДоверенность));
Иначе
РезультатПроверкиПодписиПоМЧД = МодульМашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(
Результат.МашиночитаемаяДоверенность, ПодписанныйОбъект, Подпись.Сертификат, Подпись.ДатаПодписи);
НовыйРезультатПроверкиДоверенностей.Добавить(РезультатПроверкиПодписиПоМЧД);
КонецЕсли;
КонецЦикла;
РезультатПроверки = Новый Структура("Индекс, РезультатПроверкиПодписиПоМЧД", Подпись.Индекс,
НовыйРезультатПроверкиДоверенностей);
МодульМашиночитаемыеДоверенностиФНССлужебный.ДобавитьИнформациюМЧД(РезультатПроверки,
Подпись.РезультатПроверкиПодписиПоМЧД);
РезультатыПроверок.Добавить(РезультатПроверки);
КонецЦикла;
// Конец Локализация
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1d1248ce-c31a-41f9-85b2-0d97ae2bea82">
<name>ЭлектроннаяПодписьЛокализация</name>
<synonym>
<key>ru</key>
<value>Электронная подпись локализация</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -1000,6 +1000,18 @@
КонецФункции
Функция ПроверитьПодписиПоМЧД(Подписи, ПодписанныйОбъект) Экспорт
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
Возврат Новый Массив;
КонецЕсли;
РезультатыПроверок = Новый Массив;
ЭлектроннаяПодписьЛокализация.ПриПроверкеПодписейПоМЧД(Подписи, ПодписанныйОбъект, РезультатыПроверок);
Возврат РезультатыПроверок;
КонецФункции
#Область ПоставляемыеДанные
// См. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных
@@ -1515,6 +1527,7 @@
СертификатСуществует = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатСуществует(Подпись.СертификатПодписи);
Если СертификатСуществует Тогда
ПараметрыПодписи.Сертификат = Подпись.СертификатПодписи;
ПараметрыПодписи.ОписаниеСертификата = ЭлектроннаяПодпись.СвойстваСертификата(Подпись.СертификатПодписи);
КонецЕсли;
@@ -2506,9 +2519,14 @@
АдресСпискаОтзываВнутренний.АдресВнешний, АдресСпискаОтзываВнутренний.АдресВнутренний);
Исключение
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатДляПроверки);
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось установить список отзыва %1 при проверке сертификата: %2'"),
АдресСпискаОтзываВнутренний.АдресВнутренний, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
НСтр("ru = 'Не удалось установить список отзыва при проверке сертификата: %1
|%2.'"),
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),
ЭлектроннаяПодписьСлужебныйКлиентСервер.СведенияОСертификатеСтрокой(СвойстваСертификата));
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Электронная подпись.Обновление списков отзыва'",
@@ -7491,7 +7509,7 @@
РезультатЗагрузки.АдресФайла = Неопределено;
РезультатЗагрузки.ИмяФайла = Неопределено;
РезультатЗагрузки.ДанныеФайла = Неопределено;
РезультатЗагрузки.СообщениеОбОшибке = НСтр("ru = 'Список отзыва просрочен.'");
РезультатЗагрузки.СообщениеОбОшибке = НСтр("ru = 'Список отзыва просрочен. Обратитесь в удостоверяющий центр, выдавший сертификат.'");
Возврат;
КонецЕсли;
@@ -7839,8 +7857,22 @@
ОписаниеОшибки = "";
ДанныеФайла = Результат.ДанныеФайла;
СвойстваСпискаОтзыва = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСпискаОтзыва(ДанныеФайла);
Если СвойстваСпискаОтзыва = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файл %1 не является списком отзыва.'"), Результат.АдресФайла);
КонецЕсли;
Если ЗначениеЗаполнено(СвойстваСпискаОтзыва.ДатаОкончания) И СвойстваСпискаОтзыва.ДатаОкончания < ТекущаяУниверсальнаяДата() Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Список отзыва %1 просрочен. Обратитесь в удостоверяющий центр, выдавший сертификат.'"), Результат.АдресФайла);
КонецЕсли;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".crl");
ДанныеФайла.Записать(ИмяВременногоФайла);
Попытка
ОбъектКомпоненты.ИмпортироватьСписокОтзываСертификатов(ИмяВременногоФайла, "CA");
РезультатУстановки = Истина;
@@ -1092,7 +1092,7 @@
КонецПроцедуры
// Сохраняет подпись на компьютер.
Процедура СохранитьПодпись(АдресПодписи) Экспорт
Процедура СохранитьПодпись(АдресПодписи, ИмяФайлаПодписи = "") Экспорт
Оповещение = Новый ОписаниеОповещения("СохранитьПодписьПослеПолученияФайла", ЭтотОбъект, Неопределено);
Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
@@ -1104,7 +1104,7 @@
ПараметрыСохранения.Диалог.Фильтр = Фильтр;
ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите файл для сохранения подписи'");
ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, АдресПодписи, "", ПараметрыСохранения);
ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, АдресПодписи, ИмяФайлаПодписи, ПараметрыСохранения);
КонецПроцедуры
@@ -2203,12 +2203,13 @@
КонецЕсли;
КонецЕсли;
Если ОшибкаПоКлассификатору <> Неопределено Тогда
ОбработатьОшибкуПоКлассификатору(ОписаниеОшибки, Контекст.ТребуетПроверкиНаКлиенте, Контекст, ОшибкаПоКлассификатору);
КонецЕсли;
Иначе
ОписаниеОшибки = Строка(ИнформацияОбОшибке);
ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.ОшибкаПоКлассификатору(ОписаниеОшибки);
КонецЕсли;
Если ОшибкаПоКлассификатору <> Неопределено Тогда
ОбработатьОшибкуПоКлассификатору(ОписаниеОшибки, Контекст.ТребуетПроверкиНаКлиенте, Контекст, ОшибкаПоКлассификатору);
КонецЕсли;
Контекст.ОписаниеОшибкиНаКлиенте = ОписаниеОшибки;
@@ -2231,14 +2232,16 @@
Если Не Результат.УстановкаВыполнена Тогда
ТекстПредыдущейОшибки = Контекст.ДействияДляУстраненияОшибок.Получить("УстановитьСписокОтзываСертификата");
ПроверитьСертификатНаКлиентеПослеОшибкиПроверки(ТекстПредыдущейОшибки, Ложь, Контекст);
ТекстОшибкиУстановкиСпискаОтзыва = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось установить список отзыва при проверке сертификата: %1'"), Результат.Сообщение);
НСтр("ru = 'Не удалось установить список отзыва при проверке сертификата: %1
|%2.'"), Результат.Сообщение, СвойстваСертификатаСтрокой(Контекст.СертификатКриптографии));
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Электронная подпись.Обновление списков отзыва'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
"Предупреждение", ТекстОшибкиУстановкиСпискаОтзыва,, Истина);
ПроверитьСертификатНаКлиентеПослеОшибкиПроверки(ТекстПредыдущейОшибки, Ложь, Контекст);
Возврат;
КонецЕсли;
@@ -4238,6 +4241,13 @@
Контекст.Вставить("КоллекцияПодписей", КоллекцияПодписей);
МашиночитаемыеДоверенности = Новый Массив;
ЭлектроннаяПодписьКлиентЛокализация.ПриОпределенииФайловМашиночитаемыхДоверенностей(МашиночитаемыеДоверенности,
Контекст.КоллекцияПодписей);
Контекст.Вставить("МашиночитаемыеДоверенности", МашиночитаемыеДоверенности);
Контекст.Вставить("ВыгруженныеСертификаты", Новый Соответствие);
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ОписаниеДанных", Контекст.ОписаниеДанных);
ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения(
@@ -4326,6 +4336,7 @@
СохранитьДанныеВместеСПодписьюПослеЦикла(Контекст);
Возврат;
КонецЕсли;
Контекст.Индекс = Контекст.Индекс + 1;
Контекст.Вставить("ОписаниеПодписи", Контекст.КоллекцияПодписей[Контекст.Индекс]);
@@ -4424,7 +4435,9 @@
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
Процедура СохранитьДанныеВместеСПодписьюЦиклПослеСохраненияПодписи(Результат, Контекст) Экспорт
Если Контекст.СохранятьСертификатВместеСПодписью Тогда
Если Контекст.СохранятьСертификатВместеСПодписью И Контекст.ВыгруженныеСертификаты.Получить(
Контекст.ОписаниеПодписи.Отпечаток) = Неопределено Тогда
Контекст.Вставить("Счетчик", 1);
СохранитьДанныеСертификатаВместеСПодписьюЦиклНачало(Контекст);
Иначе
СохранитьДанныеВместеСПодписьюЦиклНачало(Контекст);
@@ -4465,6 +4478,7 @@
Контекст.ИмяФайлаСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ИмяФайлаСертификата(Контекст.ИмяФайлаСертификатаБезРасширения,
"(" + Строка(Контекст.Счетчик) + ")", Контекст.ОписаниеПодписи.РасширениеСертификата, Ложь);
Контекст.Счетчик = Контекст.Счетчик + 1;
СохранитьДанныеСертификатаВместеСПодписьюЦиклВнутреннийЦиклНачало(Контекст);
КонецПроцедуры
@@ -4494,6 +4508,7 @@
СоставИмениФайлаСертификата = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайлаСертификата);
Контекст.ИменаФайлов.Вставить(СоставИмениФайлаСертификата.Имя, Ложь);
Контекст.ВыгруженныеСертификаты.Вставить(Контекст.ОписаниеПодписи.Отпечаток, Истина);
Если Контекст.Подключено Тогда
Описание = Новый ОписаниеПередаваемогоФайла(СоставИмениФайлаСертификата.Имя, Контекст.ОписаниеПодписи.АдресСертификата);
@@ -4518,6 +4533,45 @@
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
Процедура СохранитьДанныеВместеСПодписьюПослеЦикла(Контекст)
Контекст.Вставить("ИндексДоверенности", -1);
СохранитьМашиночитаемыеДоверенностиЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
Процедура СохранитьМашиночитаемыеДоверенностиЦиклНачало(Контекст)
Если Контекст.МашиночитаемыеДоверенности.Количество() <= Контекст.ИндексДоверенности + 1 Тогда
СохранитьДанныеВместеСПодписьюПослеЦиклаСохраненияМашиночитаемыхДоверенностей(Контекст);
Возврат;
КонецЕсли;
Контекст.ИндексДоверенности = Контекст.ИндексДоверенности + 1;
ВыгружаемаяДоверенность = Контекст.МашиночитаемыеДоверенности[Контекст.ИндексДоверенности];
Если Контекст.Подключено Тогда
Описание = Новый ОписаниеПередаваемогоФайла(ВыгружаемаяДоверенность.Имя, ВыгружаемаяДоверенность.Хранение);
Контекст.ПолучаемыеФайлы.Добавить(Описание);
СохранитьМашиночитаемыеДоверенностиЦиклНачало(Контекст);
Иначе
// Сохранение файла из программы на компьютер.
ФайловаяСистемаКлиент.СохранитьФайл(
Новый ОписаниеОповещения("СохранитьДанныеВместеСПодписьюПослеЦиклаСохраненияМашиночитаемойДоверенности", ЭтотОбъект, Контекст),
ВыгружаемаяДоверенность.Хранение, ВыгружаемаяДоверенность.Имя);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
Процедура СохранитьДанныеВместеСПодписьюПослеЦиклаСохраненияМашиночитаемойДоверенности(Результат, Контекст) Экспорт
СохранитьМашиночитаемыеДоверенностиЦиклНачало(Контекст);
КонецПроцедуры
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
Процедура СохранитьДанныеВместеСПодписьюПослеЦиклаСохраненияМашиночитаемыхДоверенностей(Контекст)
Если Не Контекст.Подключено Тогда
Если Контекст.ОбработкаРезультата <> Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.ОбработкаРезультата, Истина);
@@ -8759,10 +8813,12 @@
ЭлектроннаяПодписьСлужебныйВызовСервера.ЗарегистрироватьПодписаниеДанныхВЖурнале(
СвойстваТекущегоЭлементаДанных(Контекст, СвойстваПодписи));
Контекст.ОписаниеДанных.Вставить("ТекущийЭлементНабораДанных", ЭлементДанных);
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ОписаниеДанных", Контекст.ОписаниеДанных);
ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения(
"ВыполнитьНаСторонеЦиклПослеЗаписиПодписи", ЭтотОбъект, Контекст));
"ВыполнитьНаСторонеЦиклПослеЗаписиПакетнойПодписи", ЭтотОбъект, Контекст));
Попытка
ВыполнитьОбработкуОповещения(ЭлементДанных.Объект, ПараметрыВыполнения);
@@ -8784,6 +8840,13 @@
КонецПроцедуры
Процедура ВыполнитьНаСторонеЦиклПослеЗаписиПакетнойПодписи(Результат, Контекст) Экспорт
// Заглушка для пакетного режима, не требуется выполнять цикл выполнения операций.
Контекст.Индекс = 0;
КонецПроцедуры
Функция ПроверятьСертификатыОблачнойПодписью()
Результат = ИспользоватьСервисОблачнойПодписи()
@@ -9818,7 +9881,13 @@
Если СвойстваСпискаОтзыва = Неопределено Тогда
ОбработатьОшибкуУстановкиСпискаОтзыва(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файл %1 не является списком отзыва.'"), Результат.АдресФайла), Контекст);
НСтр("ru = 'Файл %1 не является списком отзыва.'"), Результат.АдресФайла), Результат, Истина);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(СвойстваСпискаОтзыва.ДатаОкончания) И СвойстваСпискаОтзыва.ДатаОкончания < ОбщегоНазначенияКлиент.ДатаУниверсальная() Тогда
ОбработатьОшибкуУстановкиСпискаОтзыва(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Список отзыва %1 просрочен. Обратитесь в удостоверяющий центр, выдавший сертификат.'"), Результат.АдресФайла), Результат, Истина);
Возврат;
КонецЕсли;
@@ -85,6 +85,7 @@
// * ВозможенПеревыпуск - Булево - можно подать заявление на новый сертификат из программы.
// * Причина - Строка - причина ошибки для отображения в расширенной форме ошибки.
// * Решение - Строка - рекомендация для отображения в расширенной форме ошибки.
// * РазрешитьПодписание - Булево - можно разрешить подписание в пользовательских настройках.
//
Функция ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата() Экспорт
@@ -93,6 +94,7 @@
Предупреждение.Вставить("ВозможенПеревыпуск", Ложь);
Предупреждение.Вставить("Причина", "");
Предупреждение.Вставить("Решение", "");
Предупреждение.Вставить("РазрешитьПодписание", Истина);
Предупреждение.Вставить("ДополнительныеСведения", "");
Возврат Предупреждение;
@@ -4786,11 +4788,18 @@
Буфер = АнализДанных.Буфер;
Если ОбщийБлок Тогда
Смещение = Буфер.Размер - 2;
ЛишниеСимволыВКонце = 0;
Пока Буфер[Буфер.Размер - ЛишниеСимволыВКонце -1] <> 0 И ЛишниеСимволыВКонце < Буфер.Размер Цикл
ЛишниеСимволыВКонце = ЛишниеСимволыВКонце + 1;
КонецЦикла;
Смещение = Буфер.Размер - ЛишниеСимволыВКонце - 2;
Если Смещение < 2 Тогда
ПриОшибкеКодированияASN1(АнализДанных);
Возврат Ложь;
КонецЕсли;
Иначе
Смещение = АнализДанных.Смещение;
Если Смещение + 2 > АнализДанных.Родители[0].СмещениеСледующего Тогда
@@ -126,7 +126,7 @@
<td height="30">
<p>
<span class="Text">Сохраните макет и закройте редактор, затем нажмите кнопку </span><span class="boldText">Завершить изменения<span class="Text">.</span>
<span class="Text">Сохраните макет и закройте редактор, затем нажмите </span><span class="boldText">Записать и закрыть<span class="Text">.</span>
</span></p>
</td>
</tr><tr class="webclient"><td height="30">
@@ -139,7 +139,7 @@
<td height="30">
<p>
<span class="Text">Сохраните макет и закройте редактор, затем нажмите кнопку </span><span class="boldText">Завершить изменения<span class="Text">.</span>
<span class="Text">Сохраните макет и закройте редактор, затем нажмите </span><span class="boldText">Записать и закрыть<span class="Text">.</span>
</span></p>
</td>
</tr><tr><td height="30">
Loaded 100 of 210 files, more files were not shown because too many files have changed in this diff. Show more