3_1_5_110

This commit is contained in:
Компания 1С committed 2021-06-30 13:54:00 +03:00
1 parent 1dd0aae5bd
commit 4161ee88c2
910 files changed
+131083 -20319

No files matched your search

@@ -14,7 +14,7 @@
// Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере.
// Для существующего - в ПриЧтенииНаСервере.
Если Объект.Ссылка.Пустая() Тогда
ИнициализацияФормы();
ИнициализироватьФорму();
КонецЕсли;
ТекущийПользователь = Пользователи.ТекущийПользователь();
@@ -89,7 +89,7 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ИнициализацияФормы();
ИнициализироватьФорму();
// СтандартныеПодсистемы.УправлениеДоступом
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
@@ -251,7 +251,7 @@
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ИнициализацияФормы()
Процедура ИнициализироватьФорму()
НачальныйПризнакВыполнения = Объект.Выполнена;
ПрочитатьРеквизитыБизнесПроцесса();
@@ -14,7 +14,7 @@
// Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере.
// Для существующего - в ПриЧтенииНаСервере.
Если Объект.Ссылка.Пустая() Тогда
ИнициализацияФормы();
ИнициализироватьФорму();
КонецЕсли;
ТекущийПользователь = Пользователи.ТекущийПользователь();
@@ -77,7 +77,7 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ИнициализацияФормы();
ИнициализироватьФорму();
// СтандартныеПодсистемы.УправлениеДоступом
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
@@ -262,7 +262,7 @@
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ИнициализацияФормы()
Процедура ИнициализироватьФорму()
НачальныйПризнакВыполнения = Объект.Выполнена;
ПрочитатьРеквизитыБизнесПроцесса();
@@ -27,7 +27,7 @@
// Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере.
// Для существующего - в ПриЧтенииНаСервере.
Если Объект.Ссылка.Пустая() Тогда
ИнициализацияФормы();
ИнициализироватьФорму();
КонецЕсли;
// СтандартныеПодсистемы.РаботаСФайлами
@@ -58,7 +58,7 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ИнициализацияФормы();
ИнициализироватьФорму();
// СтандартныеПодсистемы.УправлениеДоступом
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
@@ -489,7 +489,7 @@
КонецПроцедуры
&НаСервере
Процедура ИнициализацияФормы()
Процедура ИнициализироватьФорму()
НачальныйПризнакСтарта = Объект.Стартован;
@@ -348,12 +348,10 @@
"РезультатВыполнения,ДатаИсполнения,Исполнитель,Выполнена");
СтрокаФормат = ?(ЗадачаДанные.Выполнена,
"%1, %2 " + НСтр("ru = 'выполнил(а) задачу'") + ":
|%3
|",
"%1, %2 " + НСтр("ru = 'отклонил(а) задачу'") + ":
|%3
|");
НСтр("ru = '%1, %2 выполнил(а) задачу:
|%3'") + Символы.ПС,
НСтр("ru = '%1, %2 отклонил(а) задачу:
|%3'") + Символы.ПС);
Комментарий = СокрЛП(ЗадачаДанные.РезультатВыполнения);
Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС);
@@ -366,17 +364,15 @@
Функция РезультатВыполненияТочкиПроверить(Знач ЗадачаСсылка)
Если НЕ Подтверждено Тогда
СтрокаФормат = "%1, %2 " + НСтр("ru = 'вернул(а) задачу на доработку'") + ":
|%3
|";
СтрокаФормат = НСтр("ru = '%1, %2 вернул(а) задачу на доработку:
|%3'") + Символы.ПС;
Иначе
СтрокаФормат = ?(Выполнено,
"%1, %2 " + НСтр("ru = 'подтвердил(а) выполнение задачи'") + ":
|%3
|",
"%1, %2 " + НСтр("ru = 'подтвердил(а) отмену задачи'") + ":
|%3
|");
НСтр("ru = '%1, %2 подтвердил(а) выполнение задачи:
|%3'") + Символы.ПС,
НСтр("ru = '%1, %2 подтвердил(а) отмену задачи:
|%3'") + Символы.ПС);
КонецЕсли;
ЗадачаДанные = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка,
@@ -270,7 +270,7 @@
<key>ru</key>
<value>Задание</value>
</synonym>
<comment>Описание задания</comment>
<comment>АПК:58 - Описание задания</comment>
<type>
<types>String</types>
<stringQualifiers>
@@ -76,7 +76,7 @@
#КонецОбласти
#Область ОбработчикиЭлементовШапкиФормы
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
@@ -14,6 +14,7 @@
<dataPath xsi:type="form:DataPath">
<segments>СтрокаПоиска</segments>
</dataPath>
<titleLocation>None</titleLocation>
<toolTip>
<key>ru</key>
<value>Поиск слов в наименовании и описании отчета а также в наименованиях настроек отчета.</value>
@@ -57,6 +58,10 @@
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
<inputHint>
<key>ru</key>
<value>Наименование, поле или автор отчета</value>
</inputHint>
</extInfo>
</items>
<items xsi:type="form:Button">
@@ -2242,6 +2247,7 @@
<name>ВыполнитьПоиск</name>
</handler>
</action>
<representation>Picture</representation>
<currentRowUse>DontUse</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
@@ -117,8 +117,14 @@
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияИзменениеВарианта()
Или ИмяСобытия = "Запись_НаборКонстант" Тогда
ДеревоПодсистемТекущаяСтрока = -1;
ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина);
ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиент.ИмяСобытияОбновленияВариантовОтчетовИзФайлов() Тогда
УстановитьОтборПоОбновленнымИзФайловОтчетов(Параметр);
КонецЕсли;
КонецПроцедуры
@@ -254,40 +260,40 @@
&НаКлиенте
Процедура СохранитьВариантОтчетаВФайл(Команда)
ВариантОтчета = Элементы.Список.ТекущаяСтрока;
Если Не ЗначениеЗаполнено(ВариантОтчета) Тогда
ВыбранныеВариантыОтчетов = Элементы.Список.ВыделенныеСтроки;
Если ВыбранныеВариантыОтчетов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПараметрыСохранения = Новый Структура(ВариантыОтчетовКлиентСервер.СвойстваСохраненияВариантаОтчета());
ПараметрыСохранения.ВариантОтчета = ВариантОтчета;
ОткрытьФорму(
"ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.СохранениеВариантаОтчетаВФайл",
ПараметрыСохранения,
Новый Структура("ВыбранныеВариантыОтчетов", ВыбранныеВариантыОтчетов),
ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьВариантОтчетаИзФайла(Команда)
Ссылка = Элементы.Список.ТекущаяСтрока;
ВыбранныеВариантыОтчетов = Элементы.Список.ВыделенныеСтроки;
Если ТипЗнч(Ссылка) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда
Если ВыбранныеВариантыОтчетов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СвойстваВариантаОтчета = ВариантыОтчетовКлиент.СвойстваВариантаОтчетаОснования();
СвойстваВариантаОтчета.Ссылка = Ссылка;
СвойстваВариантаОтчета.ПредставлениеВарианта = Строка(Ссылка);
Обработчик = Новый ОписаниеОповещения(
"ОбновитьВариантОтчетаИзФайла", ВариантыОтчетовКлиент, СвойстваВариантаОтчета);
СвойстваВариантаОтчета.Ссылка = ВыбранныеВариантыОтчетов[0];
СвойстваВариантаОтчета.ПредставлениеВарианта = Строка(ВыбранныеВариантыОтчетов[0]);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Архив ZIP (*.zip)|*.zip'");
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ФайловаяСистемаКлиент.ЗагрузитьФайл(Обработчик, ПараметрыЗагрузки);
Обработчик = Новый ОписаниеОповещения(
ВариантыОтчетовКлиент.ИмяСобытияОбновленияВариантовОтчетовИзФайлов(),
ВариантыОтчетовКлиент,
СвойстваВариантаОтчета);
ФайловаяСистемаКлиент.ЗагрузитьФайлы(Обработчик, ПараметрыЗагрузки);
КонецПроцедуры
#КонецОбласти
@@ -347,8 +353,8 @@
// Строка - Число
//
// Возвращаемое значение:
// Неопределено
// Структура:
// - Неопределено
// - Структура:
// * Варианты - Структура:
// ** Массив - Массив из ДанныеФормыЭлементДерева
// ** Всего - Число
@@ -448,14 +454,7 @@
//
// Параметры:
// Ответ - КодВозвратаДиалога
// ПараметрыРазмещения - Структура:
// * Варианты - Структура:
// ** Массив - Массив из ДанныеФормыЭлементДерева
// ** Всего - Число
// ** Представление - Строка
// * Действие - Строка
// * Приемник - ДанныеФормыЭлементДерева
// * Источник - ДанныеФормыЭлементДерева
// ПараметрыРазмещения - см. ПараметрыРазмещения
//
&НаКлиенте
Процедура ДеревоПодсистемПеретаскиваниеЗавершение(Ответ, ПараметрыРазмещения) Экспорт
@@ -837,4 +836,33 @@
КонецФункции
// Параметры:
// ОписаниеВариантовОтчетов - см. ВариантыОтчетов.СвойстваВариантовОтчетовИзФайлов
//
&НаКлиенте
Процедура УстановитьОтборПоОбновленнымИзФайловОтчетов(ОписаниеВариантовОтчетов)
ОбновленныеВариантыОтчетов = Новый СписокЗначений;
Для Каждого ОписаниеВариантаОтчета Из ОписаниеВариантовОтчетов Цикл
ОбновленныеВариантыОтчетов.Добавить(ОписаниеВариантаОтчета.Ссылка);
КонецЦикла;
ДочерниеПодсистемы = ДеревоПодсистем.ПолучитьЭлементы();
Если ДочерниеПодсистемы.Количество() > 0 Тогда
Элементы.ДеревоПодсистем.ТекущаяСтрока = ДочерниеПодсистемы[0].ПолучитьИдентификатор();
КонецЕсли;
ОбновитьСодержимоеСписка();
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Ссылка",
ОбновленныеВариантыОтчетов,
ВидСравненияКомпоновкиДанных.ВСписке,,,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный);
КонецПроцедуры
#КонецОбласти
@@ -144,7 +144,7 @@
КонецЕсли;
КонецЦикла;
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Невозможно перейти в списку для %1'"), ВидКонтактнойИнформацииСсылка);
НСтр("ru = 'Невозможно перейти к списку %1'"), ВидКонтактнойИнформацииСсылка);
КонецФункции
@@ -157,6 +157,14 @@
Отказ = Истина;
КонецЕсли;
Если ВидКИСТакимНаименованиемУжеСуществует(ТекущийОбъект) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Вид контактной информации с наименованием %1 уже существует. Необходимо задать другое наименование.'"),
Строка(ТекущийОбъект.Наименование));
КонецЕсли;
// Формирование идентификатора для формул дополнительного реквизита (сведения).
Если Не ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторДляФормул)
Или ПараметрыЗаписи.Свойство("КогдаИдентификаторДляФормулУжеИспользуется") Тогда
@@ -471,6 +479,31 @@
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВидКИСТакимНаименованиемУжеСуществует(ТекущийОбъект)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВидыКонтактнойИнформации.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
|ГДЕ
| ВидыКонтактнойИнформации.Наименование = &Наименование
| И ВидыКонтактнойИнформации.Родитель = &Родитель
| И ВидыКонтактнойИнформации.Ссылка <> &Ссылка";
Запрос.УстановитьПараметр("Наименование", ТекущийОбъект.Наименование);
Запрос.УстановитьПараметр("Родитель", ТекущийОбъект.Родитель);
Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
&НаСервереБезКонтекста
Функция ИдентификаторДляФормулУжеИспользуется(Знач ИдентификаторДляФормул, Знач ТекущийВидКонтактнойИнформации, Знач Родитель)
@@ -51,29 +51,14 @@
// СтандартныеПодсистемы.ПоискИУдалениеДублей
// Анализирует пары ссылок справочника на возможность замены одной на другую
// во всех местах использования с прикладной точки зрения.
// Проверки на запрет замены групп и ссылок разных типов производятся автоматически при начале замены.
//
// Параметры:
// ПарыЗамен - Соответствие из КлючИЗначение:
// * Ключ - ЛюбаяСсылка - что будет заменено
// * Значение - ЛюбаяСсылка - на что будет заменено
// Параметры - Структура - набор флагов, описывающих действие с заменяемыми элементами.
// Содержит необязательные реквизиты:
// * СпособУдаления - Строка - может принимать значения:
// "Непосредственно" - Если после замены ссылка нигде не используется,
// то она будет удалена непосредственно
// "Пометка" - Если после замены ссылка не используется, то
// она будет помечена на удаление.
// Любые другие значения говорят о том, что заменяемая ссылка не будет изменена.
// ПарыЗамен - см. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииВозможностиЗаменыЭлементов.ПарыЗамен
// ПараметрыЗамены - см. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииВозможностиЗаменыЭлементов.ПараметрыЗамены
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение:
// * Ключ - ЛюбаяСсылка - исходная ссылка
// * Значение - Строка - описание, почему замена недопустима. Если все замены допустимы, то возвращается пустое соответствие
// см. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииВозможностиЗаменыЭлементов.НедопустимыеЗамены
//
Функция ВозможностьЗаменыЭлементов(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт
Функция ВозможностьЗаменыЭлементов(Знач ПарыЗамен, Знач ПараметрыЗамены = Неопределено) Экспорт
Результат = Новый Соответствие;
Для Каждого КлючЗначение Из ПарыЗамен Цикл
@@ -97,34 +82,9 @@
Возврат Результат;
КонецФункции
// Вызывается для определения прикладных параметров поиска дублей.
//
// Параметры:
//
// ПараметрыПоиска - Структура - предлагаемые параметры поиска. Содержит поля:
//
// * ПравилаПоиска - ТаблицаЗначений - предлагаемые правила сравнения для объектов.
// Может быть изменена для установки новых вариантов. Содержит колонки:
// ** Реквизит - Строка - имя реквизита для сравнения.
// ** Правило - Строка - правило сравнения: "Равно" - сравнение по равенству, "Подобно" -подобие строк,
// "" - пустая строка - не сравнивать.
//
// * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - инициализированный компоновщик для
// предварительного отбора. Может быть изменен, например, для
// усиления отборов.
//
// * ОграниченияСравнения - Массив - предназначен для заполнения описания прикладных правил-ограничений.
// Должен быть дополнен структурами с полями:
// ** Представление - Строка - описание правила-ограничения для пользователя.
// ** ДополнительныеПоля - Строка - список дополнительных реквизитов запятую, необходимых для
// дополнительного анализа.
//
// * КоличествоЭлементовДляСравнения - Число - количество кандидатов в дубли, передаваемых одним вызовом
// обработчику.
//
// ДополнительныеПараметры - Произвольный - значение, переданное при вызове программного интерфейса
// ОбщегоНазначения.НайтиДублиЭлементов.
// При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено.
// ПараметрыПоиска - см. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииПараметровПоискаДублей.ПараметрыПоиска
// ДополнительныеПараметры - см. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииПараметровПоискаДублей.ДополнительныеПараметры
//
Процедура ПараметрыПоискаДублей(ПараметрыПоиска, ДополнительныеПараметры = Неопределено) Экспорт
@@ -162,6 +122,8 @@
#Область ОбработчикиСобытий
// АПК:362-выкл Проектное решение
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
@@ -176,10 +138,80 @@
#КонецЕсли
КонецПроцедуры
// АПК:362-вкл
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлементов
//
// Параметры:
// Настройки - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлементов.Настройки
//
Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт
Настройки.ПриНачальномЗаполненииЭлемента = Ложь;
КонецПроцедуры
// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов
//
// Параметры:
// КодыЯзыков - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.КодыЯзыков
// Элементы - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.Элементы
// ТабличныеЧасти - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.ТабличныеЧасти
//
Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "СправочникПользователи";
Элемент.Наименование = НСтр("ru = 'Контактная информация справочника ""Пользователи""'");
Элемент.ЭтоГруппа = Истина;
Элемент.Используется = Истина;
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "EmailПользователя";
Элемент.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
Элемент.Наименование = НСтр("ru = 'Электронная почта'");
Элемент.МожноИзменятьСпособРедактирования = Истина;
Элемент.РазрешитьВводНесколькихЗначений = Истина;
Элемент.Родитель = Справочники.ВидыКонтактнойИнформации.СправочникПользователи;
Элемент.ИдентификаторДляФормул = "ЭлектроннаяПочта";
Элемент.ВидРедактирования = "ПолеВвода";
Элемент.Используется = Истина;
Элемент.РеквизитДопУпорядочивания = 2;
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "ТелефонПользователя";
Элемент.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
Элемент.Наименование = НСтр("ru = 'Телефон'");
Элемент.МожноИзменятьСпособРедактирования = Истина;
Элемент.РазрешитьВводНесколькихЗначений = Истина;
Элемент.Родитель = Справочники.ВидыКонтактнойИнформации.СправочникПользователи;
Элемент.ИдентификаторДляФормул = "Телефон";
Элемент.Используется = Истина;
Элемент.ВидРедактирования = "ПолеВводаИДиалог";
Элемент.РеквизитДопУпорядочивания = 1;
КонецПроцедуры
// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлемента
//
// Параметры:
// Объект - СправочникОбъект.ВидыКонтактнойИнформации - заполняемый объект.
// Данные - СтрокаТаблицыЗначений - данные заполнения объекта.
// ДополнительныеПараметры - Структура:
// * ПредопределенныеДанные - ТаблицаЗначений - данные заполненные в процедуре ПриНачальномЗаполненииЭлементов.
//
Процедура ПриНачальномЗаполненииЭлемента(Объект, Данные, ДополнительныеПараметры) Экспорт
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ИдентификаторДляФормул
@@ -475,8 +507,16 @@
ОбъектовОбработано = 0;
Пока ВидКонтактнойИнформацииСсылка.Следующий() Цикл
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВидыКонтактнойИнформации");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВидКонтактнойИнформацииСсылка.Ссылка);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ВидКонтактнойИнформации = ВидКонтактнойИнформацииСсылка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ВидыКонтактнойИнформации
// Исправление наименований на разных языках
@@ -580,5 +620,4 @@
#КонецОбласти
#КонецЕсли
@@ -5,14 +5,12 @@
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ТипЗнч(Параметры.ОбновляемыеКомпоненты) <> Тип("Массив")
Или Параметры.ОбновляемыеКомпоненты.Количество() = 0 Тогда
Если ТипЗнч(Параметры.ОбновляемыеКомпоненты) <> Тип("Массив") Или Параметры.ОбновляемыеКомпоненты.Количество() = 0 Тогда
ВызватьИсключение НСтр("ru = 'Некорректное значение параметра формы ОбновляемыеКомпоненты.'");
КонецЕсли;
@@ -21,13 +19,14 @@
ТекстПояснения = "";
ПредложитьОбновление = Ложь;
РеквизитыКомпонент = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Параметры.ОбновляемыеКомпоненты, "Идентификатор, Версия, ОбновлятьСПортала1СИТС");
Для Каждого ОбновляемаяКомпонента Из Параметры.ОбновляемыеКомпоненты Цикл
ПараметрОбновляемыеКомпоненты = Параметры.ОбновляемыеКомпоненты; // Массив из СправочникСсылка.ВнешниеКомпоненты
РеквизитыКомпонент = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ПараметрОбновляемыеКомпоненты,
"Идентификатор, Версия, ОбновлятьСПортала1СИТС");
Для Каждого ОбновляемаяКомпонента Из ПараметрОбновляемыеКомпоненты Цикл
Реквизиты = РеквизитыКомпонент[ОбновляемаяКомпонента];
ТекстПояснения = ТекстПояснения
+ ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(Реквизиты.Идентификатор, Реквизиты. Версия)
+ ?(Реквизиты.ОбновлятьСПортала1СИТС, "", " - " + НСтр("ru = 'обновление отключено'") + ".")
+ Символы.ПС;
ТекстПояснения = ТекстПояснения + ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(Реквизиты.Идентификатор,
Реквизиты.Версия) + ?(Реквизиты.ОбновлятьСПортала1СИТС, "", " - " + НСтр("ru = 'обновление отключено'")
+ ".") + Символы.ПС;
ПредложитьОбновление = ПредложитьОбновление Или Реквизиты.ОбновлятьСПортала1СИТС;
Если Реквизиты.ОбновлятьСПортала1СИТС Тогда
@@ -39,8 +38,7 @@
Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1
|Проверить и загрузить обновление компоненты?'"),
ТекстПояснения);
|Проверить и загрузить обновление компоненты?'"), ТекстПояснения);
Элементы.ПодключитьИнтернетПоддержку.Видимость = Не ДанныеАутентификацииПорталаСохранены;
Элементы.Закрыть.Видимость = Ложь;
@@ -72,7 +70,8 @@
Процедура ПодключитьИнтернетПоддержку(Команда = Неопределено)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда
МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент");
МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ИнтернетПоддержкаПользователейКлиент");
Оповещение = Новый ОписаниеОповещения("ПослеПодключенияИнтернетПоддержки", ЭтотОбъект);
МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(Оповещение, ЭтотОбъект);
КонецЕсли;
@@ -139,8 +138,8 @@
Возврат Неопределено;
КонецЕсли;
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("ОбновляемыеКомпоненты", ОбновляемыеКомпоненты.ВыгрузитьЗначения());
ПараметрыПроцедуры = ВнешниеКомпонентыСлужебный.ПараметрыОбновленияКомпонентСПортала();
ПараметрыПроцедуры.ОбновляемыеКомпоненты = ОбновляемыеКомпоненты.ВыгрузитьЗначения();
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление внешней компоненты.'");
@@ -115,9 +115,9 @@
Возврат Неопределено;
КонецЕсли;
ПараметрыПроцедуры = Новый Структура;
ПараметрыПроцедуры.Вставить("Идентификатор", Идентификатор);
ПараметрыПроцедуры.Вставить("Версия", Версия);
ПараметрыПроцедуры = ВнешниеКомпонентыСлужебный.ПараметрыКомпонентаСПортала();
ПараметрыПроцедуры.Идентификатор = Идентификатор;
ПараметрыПроцедуры.Версия = Версия;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение внешней компоненты.'");
@@ -966,7 +966,8 @@
Если ТипЗнч(Параметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
Если ХранимыеПараметры.ИспользоватьГруппы Тогда
Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ХранимыеПараметры.ТекущаяСтрока;
ТекущиеХранимыеПараметры = ХранимыеПараметры; // Структура
Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ТекущиеХранимыеПараметры.ТекущаяСтрока;
Иначе
Параметры.ТекущаяСтрока = Неопределено;
КонецЕсли;
@@ -1182,7 +1183,7 @@
// ДополнительныеПараметры - Структура:
// * ПараметрыПеретаскивания - Массив из СправочникСсылка.ВнешниеПользователи
// * Строка - СправочникСсылка.ГруппыВнешнихПользователей
// * Перемещение - ДействиеПеретаскивания
// * Перемещение - Булево
//
&НаКлиенте
Процедура ГруппыВнешнихПользователейПеретаскиваниеОбработкаВопроса(Ответ, ДополнительныеПараметры) Экспорт
@@ -1513,7 +1513,10 @@
ИначеЕсли Параметры.Свойство("ИдентификаторПользователяИБ")
И ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда
Если Объект.ИдентификаторПользователяИБ <> Параметры.ИдентификаторПользователяИБ Тогда
Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ;
Модифицированность = Истина;
КонецЕсли;
ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ);
Если ПрочитанныеСвойства <> Неопределено Тогда
@@ -16,6 +16,8 @@
Запрос.УстановитьПараметр("ПользовательГрупп", Параметры.ПользовательГрупп);
Запрос.УстановитьПараметр("Ответственный", Пользователи.АвторизованныйПользователь());
Запрос.УстановитьПараметр("ПолноправныйОтветственный", Пользователи.ЭтоПолноправныйПользователь());
Запрос.УстановитьПараметр("ГруппаДоступаАдминистраторы",
УправлениеДоступом.ГруппаДоступаАдминистраторы());
УстановитьПривилегированныйРежим(Истина);
Запрос.Текст =
@@ -49,7 +51,7 @@
| ТОГДА ЛОЖЬ
| КОГДА ГруппыДоступа.Профиль.ПометкаУдаления
| ТОГДА ЛОЖЬ
| КОГДА ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы)
| КОГДА ГруппыДоступа.Ссылка = &ГруппаДоступаАдминистраторы
| ТОГДА &ПолноправныйОтветственный
| И ТИПЗНАЧЕНИЯ(&ПользовательГрупп) = ТИП(Справочник.Пользователи)
| КОГДА &ПолноправныйОтветственный = ЛОЖЬ
@@ -57,7 +57,7 @@
Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
// Скрытие группы доступа Администраторы.
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список, "Ссылка", Справочники.ГруппыДоступа.Администраторы,
Список, "Ссылка", УправлениеДоступом.ГруппаДоступаАдминистраторы(),
ВидСравненияКомпоновкиДанных.НеРавно, , Истина);
КонецЕсли;
@@ -2120,6 +2120,32 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПрофильАдминистратор</name>
<id>9</id>
<valueType>
<types>CatalogRef.ПрофилиГруппДоступа</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ГруппаДоступаАдминистраторы</name>
<id>10</id>
<valueType>
<types>CatalogRef.ГруппыДоступа</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Подобрать</name>
<title>
@@ -34,7 +34,7 @@
Элементы.КонтекстноеМенюПользователиПодобрать.Доступность = НЕ ТолькоПросмотр;
Если ОбщегоНазначения.РазделениеВключено()
И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы
И Объект.Ссылка = ГруппаДоступаАдминистраторы
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса") Тогда
МодульПользователиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ПользователиСлужебныйВМоделиСервиса");
@@ -51,7 +51,7 @@
ВыполненаПроцедураПриСозданииНаСервере = Истина;
Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
Если Не Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы
Если Не Объект.Ссылка = ГруппаДоступаАдминистраторы
И Не УправлениеДоступомСлужебный.ЭтоПрофильОткрытиеВнешнихОтчетовИОбработок(Объект.Профиль) Тогда
ТолькоПросмотр = Истина;
@@ -76,12 +76,12 @@
Если ОтветНаВопросПриОткрытииФормы = "УстановитьПрофильАдминистратор" Тогда
ОтветНаВопросПриОткрытииФормы = Неопределено;
Объект.Профиль = ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор");
Объект.Профиль = ПрофильАдминистратор;
Модифицированность = Истина;
ИначеЕсли Не ТолькоПросмотр
И Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы")
И Объект.Профиль <> ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор") Тогда
И Объект.Ссылка = ГруппаДоступаАдминистраторы
И Объект.Профиль <> ПрофильАдминистратор Тогда
Отказ = Истина;
ПоказатьВопрос(
@@ -148,7 +148,7 @@
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().РазделениеВключено
И Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы")
И Объект.Ссылка = ГруппаДоступаАдминистраторы
И ПарольПользователяСервиса = Неопределено Тогда
Отказ = Истина;
@@ -173,7 +173,9 @@
ТекущийОбъект.Пользователи.Очистить();
Если ТекущийОбъект.Ссылка <> Справочники.ГруппыДоступа.Администраторы
ГруппаДоступаАдминистраторы = ГруппаДоступаАдминистраторы;
Если ТекущийОбъект.Ссылка <> ГруппаДоступаАдминистраторы
И ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда
Если ИспользованиеПерсональногоДоступа Тогда
@@ -185,13 +187,13 @@
КонецЦикла;
КонецЕсли;
Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
Если ТекущийОбъект.Ссылка = ГруппаДоступаАдминистраторы Тогда
Объект.Родитель = Неопределено;
Объект.Ответственный = Неопределено;
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено()
И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
И Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить(
"ПарольПользователяСервиса", ПарольПользователяСервиса);
@@ -377,7 +379,7 @@
КонецЕсли;
// Проверка наличия только пользователей в предопределенной группе Администраторы.
Если Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы
Если Объект.Ссылка = ГруппаДоступаАдминистраторы
И ТипЗнч(ТекущаяСтрока.Пользователь) <> Тип("СправочникСсылка.Пользователи") Тогда
Если ТипЗнч(ТекущаяСтрока.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
@@ -428,7 +430,7 @@
КонецЦикла;
Если НЕ ОбщегоНазначения.РазделениеВключено()
И Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
И Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ОписаниеОшибки = "";
УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы(
@@ -683,7 +685,7 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
Если Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ДанныеВыбора = УправлениеДоступомСлужебныйВызовСервера.СформироватьДанныеВыбораПользователя(
Текст, Ложь, Ложь);
Иначе
@@ -699,7 +701,7 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
Если Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ДанныеВыбора = УправлениеДоступомСлужебныйВызовСервера.СформироватьДанныеВыбораПользователя(
Текст, Ложь, Ложь);
Иначе
@@ -959,7 +961,10 @@
&НаСервере
Процедура НачальнаяНастройкаПриЧтенииИСоздании(ТекущийОбъект)
Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
ПрофильАдминистратор = УправлениеДоступом.ПрофильАдминистратор();
ГруппаДоступаАдминистраторы = УправлениеДоступом.ГруппаДоступаАдминистраторы();
Если ТекущийОбъект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ЗапретитьИзменениеВсегоКромеСоставаУчастников();
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
@@ -1216,7 +1221,7 @@
ВыборИПодборВнешнихПользователей = Ложь;
Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
Если Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ВыполнитьОбработкуОповещения(ОбработкаПродолжения, ВыборИПодборВнешнихПользователей);
Возврат;
КонецЕсли;
@@ -1320,7 +1325,7 @@
ПараметрыФормы.Вставить("РасширенныйПодбор", Истина);
ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ПараметрыРасширеннойФормыПодбора());
ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина);
ИначеЕсли Объект.Ссылка <> ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
ИначеЕсли Объект.Ссылка <> ГруппаДоступаАдминистраторы Тогда
Если ВыборИПодборВнешнихПользователей Тогда
ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина);
Иначе
@@ -1366,7 +1371,7 @@
ПараметрыРасширеннойФормыПодбора = Новый Структура;
ПараметрыРасширеннойФормыПодбора.Вставить("ЗаголовокФормыПодбора", ЗаголовокФормыПодбора);
ПараметрыРасширеннойФормыПодбора.Вставить("ВыбранныеПользователи", ВыбранныеПользователи);
Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
Если Объект.Ссылка = ГруппаДоступаАдминистраторы Тогда
ПараметрыРасширеннойФормыПодбора.Вставить("ПодборГруппНевозможен");
КонецЕсли;
@@ -122,18 +122,15 @@
#Область СлужебныеПроцедурыИФункции
// Устанавливает пометку удаления группам доступа, если установлена
// пометка удаления у профиля группы доступа. Требуется, например,
// при удалении предопределенных профилей групп доступа,
// т.к. платформа не вызывает обработчики объектов при
// установке пометки удаления бывшим предопределенным
// элементам в процессе обновления конфигурации базы данных.
//
// Параметры:
// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись,
// устанавливается Истина, иначе не изменяется.
//
Процедура ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей(ЕстьИзменения = Неопределено) Экспорт
// См. УправлениеДоступом.ГруппаДоступаАдминистраторы
Функция ГруппаДоступаАдминистраторы(ПрофильАдминистратор = Неопределено) Экспорт
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Если Не ЗначениеЗаполнено(ПрофильАдминистратор) Тогда
ПрофильАдминистратор = УправлениеДоступом.ПрофильАдминистратор();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
@@ -142,14 +139,167 @@
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
| ГруппыДоступа.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)
| ГруппыДоступа.Профиль = &ПрофильАдминистратор
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ГруппыДоступа.Ссылка КАК Ссылка
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
| ГруппыДоступа.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
Запрос.УстановитьПараметр("ПрофильАдминистратор", ПрофильАдминистратор);
Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", "Администраторы");
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ВыборкаПоПрофилю = РезультатыЗапроса[0].Выбрать();
ВыборкаПоПредопределенному = РезультатыЗапроса[1].Выбрать();
Если ВыборкаПоПрофилю.Следующий()
И ВыборкаПоПредопределенному.Следующий()
И ВыборкаПоПрофилю.Количество() = 1
И ВыборкаПоПредопределенному.Количество() = 1
И ВыборкаПоПрофилю.Ссылка = ВыборкаПоПредопределенному.Ссылка Тогда
Возврат ВыборкаПоПрофилю.Ссылка;
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Справочник.ГруппыДоступа");
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ВыборкаПоПрофилю = РезультатыЗапроса[0].Выбрать();
ВыборкаПоПредопределенному = РезультатыЗапроса[1].Выбрать();
Если ВыборкаПоПрофилю.Следующий() Тогда
ГруппаДоступаОбъект = ВыборкаПоПрофилю.Ссылка.ПолучитьОбъект();
Если ГруппаДоступаОбъект.ИмяПредопределенныхДанных <> "Администраторы" Тогда
ГруппаДоступаОбъект.ИмяПредопределенныхДанных = "Администраторы";
КонецЕсли;
ИначеЕсли ВыборкаПоПредопределенному.Следующий() Тогда
ГруппаДоступаОбъект = ВыборкаПоПредопределенному.Ссылка.ПолучитьОбъект();
ГруппаДоступаОбъект.Профиль = ПрофильАдминистратор;
Иначе
ГруппаДоступаПоНаименованию = ГруппаДоступаПоНаименованию(
НСтр("ru = 'Администраторы'", ОбщегоНазначения.КодОсновногоЯзыка()));
Если ЗначениеЗаполнено(ГруппаДоступаПоНаименованию) Тогда
ГруппаДоступаОбъект = ГруппаДоступаПоНаименованию.ПолучитьОбъект();
Иначе
ГруппаДоступаОбъект = СоздатьЭлемент();
КонецЕсли;
ГруппаДоступаОбъект.Профиль = ПрофильАдминистратор;
ГруппаДоступаОбъект.ИмяПредопределенныхДанных = "Администраторы";
КонецЕсли;
Если ГруппаДоступаОбъект.Модифицированность() Тогда
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаДоступаОбъект, Ложь, Ложь);
КонецЕсли;
ОбъектыДляОтвязки = Новый Соответствие;
Пока ВыборкаПоПрофилю.Следующий() Цикл
Если ВыборкаПоПрофилю.Ссылка <> ГруппаДоступаОбъект.Ссылка Тогда
ОбъектыДляОтвязки.Вставить(ВыборкаПоПрофилю.Ссылка);
КонецЕсли;
КонецЦикла;
Пока ВыборкаПоПредопределенному.Следующий() Цикл
Если ВыборкаПоПредопределенному.Ссылка <> ГруппаДоступаОбъект.Ссылка Тогда
ОбъектыДляОтвязки.Вставить(ВыборкаПоПредопределенному.Ссылка);
КонецЕсли;
КонецЦикла;
Для Каждого КлючИЗначение Из ОбъектыДляОтвязки Цикл
ТекущийГруппаДоступаОбъект = КлючИЗначение.Ключ.ПолучитьОбъект();
ТекущийГруппаДоступаОбъект.Профиль = Неопределено;
ТекущийГруппаДоступаОбъект.ИмяПредопределенныхДанных = "";
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ТекущийГруппаДоступаОбъект, Ложь, Ложь);
КонецЦикла;
Для Каждого КлючИЗначение Из ОбъектыДляОтвязки Цикл
ТекущийГруппаДоступаОбъект = КлючИЗначение.Ключ.ПолучитьОбъект();
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ТекущийГруппаДоступаОбъект);
КонецЦикла;
ГруппаДоступаОбъект.Наименование = НСтр("ru = 'Администраторы'",
ОбщегоНазначения.КодОсновногоЯзыка());
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаДоступаОбъект);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Возврат ГруппаДоступаОбъект.Ссылка;
КонецФункции
// Для функции ГруппаДоступаАдминистраторы.
Функция ГруппаДоступаПоНаименованию(Наименование)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ГруппыДоступа.Ссылка КАК Ссылка
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
| ГруппыДоступа.Наименование = &Наименование
|
|УПОРЯДОЧИТЬ ПО
| Ссылка";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Устанавливает пометку удаления группам доступа, если установлена
// пометка удаления у профиля группы доступа. Требуется, например,
// при удалении предопределенных профилей групп доступа,
// т.к. платформа не вызывает обработчики объектов при
// установке пометки удаления бывшим предопределенным
// элементам в процессе обновления конфигурации базы данных.
//
// Параметры:
// ЕстьИзменения - Булево - возвращаемое значение. Если производилась запись,
// устанавливается Истина, иначе не изменяется.
//
Процедура ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей(ЕстьИзменения = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПрофильАдминистратор", УправлениеДоступом.ПрофильАдминистратор());
Запрос.Текст =
"ВЫБРАТЬ
| ГруппыДоступа.Ссылка КАК Ссылка
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
| ГруппыДоступа.Профиль <> &ПрофильАдминистратор
| И ГруппыДоступа.Профиль.ПометкаУдаления
| И НЕ ГруппыДоступа.ПометкаУдаления
| И НЕ ГруппыДоступа.Предопределенный";
Выборка = Запрос.Выполнить().Выбрать();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа");
Пока Выборка.Следующий() Цикл
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ГруппаДоступаОбъект = Выборка.Ссылка.ПолучитьОбъект();
ГруппаДоступаОбъект.ПометкаУдаления = Истина;
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаДоступаОбъект);
@@ -158,6 +308,11 @@
ПользователиДляОбновления = ПользователиДляОбновленияРолей(Неопределено, ГруппаДоступаОбъект);
УправлениеДоступом.ОбновитьРолиПользователей(ПользователиДляОбновления);
ЕстьИзменения = Истина;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
@@ -194,6 +349,8 @@
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПрофильАдминистратор", УправлениеДоступом.ПрофильАдминистратор());
Запрос.УстановитьПараметр("ГруппаДоступаАдминистраторы", УправлениеДоступом.ГруппаДоступаАдминистраторы());
Запрос.Текст =
"ВЫБРАТЬ
| ГруппыДоступа.Ссылка КАК Ссылка
@@ -201,8 +358,8 @@
| Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
| НЕ(ГруппыДоступа.Профиль <> &Профиль
| И НЕ(&Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)
| И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы)))";
| И НЕ(&Профиль = &ПрофильАдминистратор
| И ГруппыДоступа.Ссылка = &ГруппаДоступаАдминистраторы))";
Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
@@ -211,10 +368,10 @@
// Проверка необходимости/возможности обновления группы доступа.
ГруппаДоступа = Выборка.Ссылка.ПолучитьОбъект();
Если ГруппаДоступа.Ссылка = Администраторы
И ГруппаДоступа.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда
Если ГруппаДоступа.Ссылка = УправлениеДоступом.ГруппаДоступаАдминистраторы()
И ГруппаДоступа.Профиль <> УправлениеДоступом.ПрофильАдминистратор() Тогда
// Установка профиля Администратор, если не задан.
ГруппаДоступа.Профиль = Справочники.ПрофилиГруппДоступа.Администратор;
ГруппаДоступа.Профиль = УправлениеДоступом.ПрофильАдминистратор();
КонецЕсли;
// Проверка состава видов доступа.
@@ -447,6 +604,69 @@
КонецФункции
Функция РолиДляОбновленияПрав(СтарыеЗначения, ЭлементДанных) Экспорт
Если СтарыеЗначения = Неопределено Тогда
СтарыеЗначения = Новый Структура("Ссылка, Профиль, ПометкаУдаления")
КонецЕсли;
// Обновление ролей для добавленных, оставшихся и удаленных пользователей.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НовыйПрофиль",
?(ТипЗнч(ЭлементДанных) <> Тип("УдалениеОбъекта") И Не ЭлементДанных.ПометкаУдаления,
ЭлементДанных.Профиль, Справочники.ПрофилиГруппДоступа.ПустаяСсылка()));
Запрос.УстановитьПараметр("СтарыйПрофиль",
?(ЭлементДанных.Ссылка = СтарыеЗначения.Ссылка И Не СтарыеЗначения.ПометкаУдаления,
СтарыеЗначения.Профиль, Справочники.ПрофилиГруппДоступа.ПустаяСсылка()));
Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта")
Или ЭлементДанных.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда
// Выбор всех ролей старого или нового профилей группы доступа.
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РолиПрофилей.Роль КАК Роль
|ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
|ГДЕ
| РолиПрофилей.Ссылка В (&СтарыйПрофиль, &НовыйПрофиль)";
Иначе
// Выбор изменений состава ролей группы доступа.
Запрос.Текст =
"ВЫБРАТЬ
| Данные.Роль КАК Роль
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| РолиПрофилей.Роль КАК Роль,
| -1 КАК ВидИзмененияСтроки
| ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ГДЕ
| РолиПрофилей.Ссылка = &СтарыйПрофиль
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| РолиПрофилей.Роль,
| 1
| ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ГДЕ
| РолиПрофилей.Ссылка = &НовыйПрофиль) КАК Данные
|
|СГРУППИРОВАТЬ ПО
| Данные.Роль
|
|ИМЕЮЩИЕ
| СУММА(Данные.ВидИзмененияСтроки) <> 0";
КонецЕсли;
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Роль");
КонецФункции
Функция ГруппыДоступаПрофиля(Профили) Экспорт
Запрос = Новый Запрос;
@@ -560,23 +780,28 @@
// Процедуры и функции для поддержки обмена данными в РИБ.
// Только для внутреннего использования.
//
// Параметры:
// ЭлементДанных - СправочникОбъект.ГруппыДоступа
//
Процедура ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных) Экспорт
Если ЭлементДанных.ИмяПредопределенныхДанных <> "Администраторы" Тогда
ГруппаДоступаАдминистраторы = УправлениеДоступом.ГруппаДоступаАдминистраторы();
Если ЭлементДанных.Ссылка <> ГруппаДоступаАдминистраторы Тогда
Возврат;
КонецЕсли;
ЭлементДанных.Пользователи.Очистить();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", "Администраторы");
Запрос.УстановитьПараметр("ГруппаДоступаАдминистраторы", ГруппаДоступаАдминистраторы);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ГруппыДоступаПользователи.Пользователь
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
|ГДЕ
| ГруппыДоступаПользователи.Ссылка.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных";
| ГруппыДоступаПользователи.Ссылка = &ГруппаДоступаАдминистраторы";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЭлементДанных.Пользователи.Найти(Выборка.Пользователь, "Пользователь") = Неопределено Тогда
@@ -589,14 +814,16 @@
// Только для внутреннего использования.
Процедура УдалитьУчастниковГруппыДоступаАдминистраторыБезПользователяИБ() Экспорт
НачатьТранзакцию();
Попытка
ГруппаДоступаАдминистраторы = УправлениеДоступом.ГруппаДоступаАдминистраторы();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа");
ЭлементБлокировки.УстановитьЗначение("Ссылка", Администраторы);
Блокировка.Заблокировать();
ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаДоступаАдминистраторы);
ГруппаДоступаАдминистраторы = Администраторы.ПолучитьОбъект();
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ГруппаДоступаАдминистраторы = ГруппаДоступаАдминистраторы.ПолучитьОбъект();
Индекс = ГруппаДоступаАдминистраторы.Пользователи.Количество() - 1;
Пока Индекс >= 0 Цикл
@@ -671,9 +898,13 @@
КонецЕсли;
ПользователиДляОбновления = ПользователиДляОбновленияРолей(СтарыеЗначения, ЭлементДанных);
ЗарегистрироватьСсылки("Пользователи", ПользователиДляОбновления);
Если УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда
РолиДляОбновления = РолиДляОбновленияПрав(СтарыеЗначения, ЭлементДанных);
ЗарегистрироватьСсылки("Роли", РолиДляОбновления);
КонецЕсли;
КонецПроцедуры
// Только для внутреннего использования.
@@ -700,8 +931,16 @@
КонецЕсли;
Если УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда
УправлениеДоступомСлужебный.ЗапланироватьОбновлениеНаборовГруппДоступа(
"ОбновитьВспомогательныеДанныеГруппДоступаИзмененныхПриЗагрузке");
Описание = "ОбновитьВспомогательныеДанныеГруппДоступаИзмененныхПриЗагрузке";
УправлениеДоступомСлужебный.ЗапланироватьОбновлениеНаборовГруппДоступа(Описание);
СоставИзмененийРолей = ЗарегистрированныеСсылки("Роли");
Если СоставИзмененийРолей.Количество() = 1
И СоставИзмененийРолей[0] = Неопределено Тогда
СоставИзмененийРолей = Неопределено;
КонецЕсли;
УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииПрофиляГруппыДоступа(Описание,
СоставИзмененийРолей, Истина);
ЗарегистрироватьСсылки("Роли", Null);
КонецЕсли;
ЗарегистрироватьСсылки("ГруппыДоступа", Null);
@@ -869,7 +1108,7 @@
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "Администраторы";
Элемент.Наименование = НСтр("ru = 'Администраторы'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Профиль = Справочники.ПрофилиГруппДоступа.Администратор;
Элемент.Профиль = УправлениеДоступом.ПрофильАдминистратор();
КонецПроцедуры
@@ -879,9 +1118,9 @@
Процедура ЗаполнитьПрофильГруппыДоступаАдминистраторы() Экспорт
Объект = Администраторы.ПолучитьОбъект();
Если Объект.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда
Объект.Профиль = Справочники.ПрофилиГруппДоступа.Администратор;
Объект = УправлениеДоступом.ГруппаДоступаАдминистраторы().ПолучитьОбъект();
Если Объект.Профиль <> УправлениеДоступом.ПрофильАдминистратор() Тогда
Объект.Профиль = УправлениеДоступом.ПрофильАдминистратор();
ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект);
КонецЕсли;
@@ -1078,6 +1317,18 @@
ИначеЕсли ВидСсылок = "Пользователи" Тогда
ДопустимыеТипы = Новый ОписаниеТипов("СправочникСсылка.Пользователи,СправочникСсылка.ВнешниеПользователи");
ИмяПараметраРаботыПрограммы = "СтандартныеПодсистемы.УправлениеДоступом.ПользователиИзмененныеПриЗагрузке";
ИначеЕсли ВидСсылок = "Роли" Тогда
ДопустимыеТипы = Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных,СправочникСсылка.ИдентификаторыОбъектовРасширений");
ИмяПараметраРаботыПрограммы = "СтандартныеПодсистемы.УправлениеДоступом.РолиИзмененныеПриЗагрузке";
ИначеЕсли ВидСсылок = "ОграничиватьДоступНаУровнеЗаписей" Тогда
ДопустимыеТипы = Новый ОписаниеТипов("Булево");
ИмяПараметраРаботыПрограммы = "СтандартныеПодсистемы.УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписейИзменениеПриЗагрузке";
ИначеЕсли ВидСсылок = "ИспользуемыеВидыДоступа" Тогда
ДопустимыеТипы = Метаданные.ОпределяемыеТипы.ЗначениеДоступа;
ИмяПараметраРаботыПрограммы = "СтандартныеПодсистемы.УправлениеДоступом.ИспользуемыеВидыДоступаИзмененныеПриЗагрузке";
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недопустимое значение ""%1"" параметра ВидСсылок функции СвойстваВидаСсылок.'"),
@@ -42,10 +42,10 @@
Индекс = Индекс - 1;
КонецЦикла;
Если Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
Если Ссылка = УправлениеДоступом.ГруппаДоступаАдминистраторы() Тогда
// Всегда предопределенный профиль Администратор.
Профиль = Справочники.ПрофилиГруппДоступа.Администратор;
Профиль = УправлениеДоступом.ПрофильАдминистратор();
// Не может быть персональной группой доступа.
Пользователь = Неопределено;
@@ -76,7 +76,7 @@
КонецЦикла;
// Нельзя устанавливать предопределенный профиль Администратор произвольной группе доступа.
ИначеЕсли Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда
ИначеЕсли Профиль = УправлениеДоступом.ПрофильАдминистратор() Тогда
ВызватьИсключение
НСтр("ru = 'Предопределенный профиль Администратор может быть только
|у предопределенной группы доступа Администраторы.'");
@@ -152,6 +152,12 @@
РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(Ссылка);
КонецЕсли;
Если УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально() Тогда
СоставИзмененийРолей = Справочники.ГруппыДоступа.РолиДляОбновленияПрав(СтарыеЗначения, ЭтотОбъект);
УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииПрофиляГруппыДоступа(
"ГруппаДоступаПриИзмененииПрофиля", СоставИзмененийРолей, Профиль <> СтарыеЗначения.Профиль);
КонецЕсли;
Если Справочники.ГруппыДоступа.ИзменилисьВидыИлиЗначенияДоступа(СтарыеЗначения, ЭтотОбъект)
Или ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления
Или НаличиеУчастников <> СтароеНаличиеУчастников Тогда
@@ -249,7 +255,7 @@
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено()
И Ссылка = Справочники.ГруппыДоступа.Администраторы
И Ссылка = УправлениеДоступом.ГруппаДоступаАдминистраторы()
И Не СеансЗапущенБезРазделителей
И ДополнительныеСвойства.Свойство("ПарольПользователяСервиса") Тогда
@@ -263,7 +269,7 @@
ПользователиДляОбновления =
Справочники.ГруппыДоступа.ПользователиДляОбновленияРолей(СтарыеЗначения, ЭтотОбъект);
Если Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
Если Ссылка = УправлениеДоступом.ГруппаДоступаАдминистраторы() Тогда
// Добавление пользователей, связанных с пользователямиИБ, имеющих роль ПолныеПрава.
Для Каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
@@ -184,18 +184,16 @@
Возврат;
КонецЕсли;
ТекстОшибки =
НСтр("ru = 'Недостаточно прав доступа.
|
|В состав участников групп пользователей можно добавлять и удалять только
|новых (добавленных) пользователей, у которых включен признак Подготовлен.
|
|Запрещено добавлять и удалять существующих пользователей:'");
СоставПользователей = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Наименование");
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ТекстОшибки = ТекстОшибки + Символы.ПС + Выборка.Наименование;
КонецЦикла;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав доступа для изменения:
|%1
|
|В состав участников групп пользователей можно включать и исключать
|только новых пользователей, которые еще не одобрены администратором
|(то есть администратор еще не разрешил вход в программу).'"),
СтрСоединить(СоставПользователей, Символы.ПС));
ВызватьИсключение ТекстОшибки;
@@ -57,6 +57,8 @@
#Область ОбработчикиСобытий
// АПК:362-выкл Проектное решение
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
@@ -71,4 +73,6 @@
#КонецЕсли
КонецПроцедуры
// АПК:362-вкл
#КонецОбласти
@@ -57,6 +57,8 @@
#Область ОбработчикиСобытий
// АПК:362-выкл Проектное решение
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
@@ -71,5 +73,7 @@
#КонецЕсли
КонецПроцедуры
// АПК:362-вкл
#КонецОбласти
@@ -428,10 +428,10 @@
// Процедура обновляет данные справочника по метаданным конфигурации.
//
// Параметры:
// ЕстьИзменения - Булево - (возвращаемое значение) в этот параметр возвращается
// ЕстьИзменения - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если производилась запись, иначе не изменяется.
//
// ЕстьУдаленные - Булево - (возвращаемое значение) в этот параметр возвращается
// ЕстьУдаленные - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если хотя бы один элемент справочника был помечен
// на удаление, иначе не изменяется.
//
@@ -483,24 +483,23 @@
// Процедура обновляет данные справочника по метаданным конфигурации.
//
// Параметры:
// ЕстьИзменения - Булево - (возвращаемое значение) - в этот параметр возвращается
// ЕстьИзменения - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если производилась запись, иначе не изменяется.
//
// ЕстьУдаленные - Булево - (возвращаемое значение) - в этот параметр возвращается
// ЕстьУдаленные - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если хотя бы один элемент справочника был помечен
// на удаление, иначе не изменяется.
//
// ТолькоПроверка - Булево - не производить никаких изменений, а выполнить только установку
// параметров ЕстьИзменения, ЕстьУдаленные, ЕстьКритичныеИзменения, СписокКритичныхИзменений.
//
// ЕстьКритичныеИзменения - (возвращаемое значение) - в этот параметр возвращается
// ЕстьКритичныеИзменения - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если найдены критичные изменения, иначе не изменяется.
// Критичные изменения (только для не помеченных на удаление):
// - изменении реквизита ПолноеИмя,
// - добавление нового элемента справочника.
// В общем случае, критичные изменения требуют монопольный режим.
// Критичные изменения (только для непомеченных на удаление):
// изменении реквизита ПолноеИмя или добавление нового элемента справочника.
// В общем случае критичные изменения требуют монопольный режим.
//
// СписокКритичныхИзменений - Строка (возвращаемое значение) - содержит полные имена
// СписокКритичныхИзменений - Строка - возвращаемое значение. Содержит полные имена
// объектов метаданных, которые добавлены или требуется добавить,
// а также объектов метаданных, полные имена которых изменены или требуется изменить.
//
@@ -697,6 +696,9 @@
ИначеЕсли ТипЗнч(Описание.Ключ) = Тип("Тип") Тогда
Результат.Вставить(Идентификатор, Метаданные.НайтиПоТипу(Описание.Ключ));
ИначеЕсли СтрНачинаетсяС(Описание.Ключ, "Роль.") Тогда
Результат.Вставить(Идентификатор, Метаданные.Роли.Найти(СтрРазделить(Описание.Ключ, ".")[1]));
Иначе
Результат.Вставить(Идентификатор, Метаданные.НайтиПоПолномуИмени(Описание.Ключ));
КонецЕсли;
@@ -1444,15 +1446,22 @@
Выгрузка.Колонки.Добавить("ЭтоНовый", Новый ОписаниеТипов("Булево"));
// Упорядочение идентификаторов перед обработкой.
Для каждого Строка Из Выгрузка Цикл
Для Каждого Строка Из Выгрузка Цикл
Если Не ЗначениеЗаполнено(Строка.Ссылка) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Данные справочника %1 повреждены.
|В конфигураторе в меню ""Администрирование""
|выполните ""Тестирование и исправление..."".'"),
?(ОбъектыРасширений, "ИдентификаторыОбъектовРасширений", "ИдентификаторыОбъектовМетаданных"));
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если ТипЗнч(Строка.ХранилищеКлюча) = Тип("ХранилищеЗначения") Тогда
Строка.КлючОбъектаМетаданных = Строка.ХранилищеКлюча.Получить();
Иначе
Строка.КлючОбъектаМетаданных = Неопределено;
КонецЕсли;
Строка.БезКлючаОбъектаМетаданных = Строка.КлючОбъектаМетаданных = Неопределено
ИЛИ Строка.КлючОбъектаМетаданных = Тип("Неопределено");
Или Строка.КлючОбъектаМетаданных = Тип("Неопределено");
КонецЦикла;
Выгрузка.Индексы.Добавить("Ссылка");
@@ -1460,7 +1469,7 @@
СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(ОбъектыРасширений);
Для каждого СвойстваКоллекции Из СвойстваКоллекций Цикл
Для Каждого СвойстваКоллекции Из СвойстваКоллекций Цикл
ИдентификаторКоллекции = ИдентификаторКоллекции(СвойстваКоллекции.Идентификатор, ОбъектыРасширений);
Строка = Выгрузка.Найти(ИдентификаторКоллекции, "Ссылка");
Если Строка = Неопределено Тогда
@@ -1523,6 +1532,7 @@
Переименование.НовоеПолноеИмя = НовоеПолноеИмя;
КонецЕсли;
Строка.ПолноеИмя = НовоеПолноеИмя;
Строка.Обновлен = Истина;
КонецЦикла;
КонецЦикла;
@@ -2248,7 +2258,11 @@
Функция МетаданныеНайтиПоПолномуИмени(ПолноеИмя)
Если СтрНачинаетсяС(ПолноеИмя, "Роль.") Тогда
ОбъектМетаданных = Метаданные.Роли.Найти(СтрРазделить(ПолноеИмя, ".")[1]);
Иначе
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
КонецЕсли;
Если ОбъектМетаданных = Неопределено Тогда
Возврат Неопределено;
@@ -1253,6 +1253,30 @@
<value></value>
</code>
</items>
<items id="51a9bff2-c716-4f86-bbfa-861b026ee9fd">
<name>РегистрСведенийИспользуемыеВидыДоступа</name>
<code xsi:type="core:StringValue">
<value></value>
</code>
</items>
<items id="bdd8a5af-48f3-48f5-b5ef-e03497baf600">
<name>РегистрСведенийИспользуемыеВидыДоступаПоТаблицам</name>
<code xsi:type="core:StringValue">
<value></value>
</code>
</items>
<items id="27eb08f4-c296-4ef9-9941-bceec60b4b02">
<name>РегистрСведенийКэшПереводов</name>
<code xsi:type="core:StringValue">
<value></value>
</code>
</items>
<items id="f674dc60-7b2e-4976-83a1-ae630aad4b4b">
<name>РегистрСведенийСертификатыПользователяDSS</name>
<code xsi:type="core:StringValue">
<value></value>
</code>
</items>
</predefined>
<predefinedDataUpdate>DontAutoUpdate</predefinedDataUpdate>
<editType>InDialog</editType>
@@ -117,10 +117,10 @@
// Процедура обновляет данные справочника по метаданным конфигурации.
//
// Параметры:
// ЕстьИзменения - Булево - (возвращаемое значение) в этот параметр возвращается
// ЕстьИзменения - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если производилась запись, иначе не изменяется.
//
// ЕстьУдаленные - Булево - (возвращаемое значение) в этот параметр возвращается
// ЕстьУдаленные - Булево - возвращаемое значение. В этот параметр возвращается
// значение Истина, если хотя бы один элемент справочника был помечен
// на удаление, иначе не изменяется.
//
@@ -557,7 +557,7 @@
<name>ЗагрузитьКлассификатор</name>
<title>
<key>ru</key>
<value>Загрузить классификатор</value>
<value>Загрузить классификатор...</value>
</title>
<id>1</id>
<toolTip>
@@ -12,6 +12,7 @@
<key>ru</key>
<value>Справочник БИК</value>
</synonym>
<comment>АПК:58</comment>
<useStandardCommands>true</useStandardCommands>
<inputByString>Catalog.КлассификаторБанков.StandardAttribute.Description</inputByString>
<inputByString>Catalog.КлассификаторБанков.StandardAttribute.Code</inputByString>
@@ -91,7 +91,7 @@
// параметрах дополнительных реквизитов и сведений.
//
// Параметры:
// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись,
// ЕстьИзменения - Булево - возвращаемое значение. Если производилась запись,
// устанавливается Истина, иначе не изменяется.
//
Процедура ОбновитьСоставНаименованийПредопределенныхНаборов(ЕстьИзменения = Неопределено) Экспорт
@@ -78,8 +78,8 @@
КонецПроцедуры
// Обработчик обновления на версию 3.1.4.294:
// - заполняет реквизит "ТипПредопределеннойПапки" в справочнике "Папки электронных писем"
// Обработчик обновления на версию 3.1.5.108:
// - заполняет реквизит "ТипПредопределеннойПапки" в справочнике "Папки электронных писем".
//
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
@@ -172,5 +172,4 @@
#КонецОбласти
#КонецЕсли
@@ -1185,12 +1185,13 @@
ХранимыеПараметры.Вставить("ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"));
КонецЕсли;
Если ХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда
ТекущиеХранимыеПараметры = ХранимыеПараметры; // Структура
Если ТекущиеХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда
Если ТипЗнч(ХранимыеПараметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
Если ТипЗнч(ТекущиеХранимыеПараметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
Если ХранимыеПараметры.ИспользоватьГруппы Тогда
Элементы.ГруппыПользователей.ТекущаяСтрока = ХранимыеПараметры.ТекущаяСтрока;
Элементы.ГруппыПользователей.ТекущаяСтрока = ТекущиеХранимыеПараметры.ТекущаяСтрока;
Иначе
Параметры.ТекущаяСтрока = Неопределено;
КонецЕсли;
@@ -1341,9 +1342,9 @@
// Параметры:
// Ответ - КодВозвратаДиалога
// ДополнительныеПараметры - Структура:
// * ПараметрыПеретаскивания - ПараметрыПеретаскивания
// * ПараметрыПеретаскивания - Массив из СправочникСсылка.Пользователи
// * Строка - Строка
// * Перемещение - ДействиеПеретаскивания
// * Перемещение - Булево
//
&НаКлиенте
Процедура ГруппыПользователейПеретаскиваниеЗавершение(Ответ, ДополнительныеПараметры) Экспорт
@@ -2071,7 +2071,10 @@
ИначеЕсли Параметры.Свойство("ИдентификаторПользователяИБ")
И ЗначениеЗаполнено(Параметры.ИдентификаторПользователяИБ) Тогда
Если Объект.ИдентификаторПользователяИБ <> Параметры.ИдентификаторПользователяИБ Тогда
Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ;
Модифицированность = Истина;
КонецЕсли;
ПрочитанныеСвойства = Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ);
Если ПрочитанныеСвойства <> Неопределено Тогда
@@ -62,10 +62,9 @@
//
// Параметры:
// ПараметрыВыгрузки - Структура:
// - ДляПисемВПапке - Справочник.ПапкиЭлектронныхПисем - письма, которые находятся в этой папке
// будут обработаны.
// - ВключаяПодчиненные - Булево - признак, того что должны обрабатываться письма в подчиненных папках.
// - ТаблицаПравил - ТаблицаЗначений - таблица правил, которые должны быть применены.
// * ДляПисемВПапке - СправочникСсылка.ПапкиЭлектронныхПисем - письма, которые находятся в этой папке будут обработаны.
// * ВключаяПодчиненные - Булево - признак, того что должны обрабатываться письма в подчиненных папках.
// * ТаблицаПравил - ТаблицаЗначений - таблица правил, которые должны быть применены.
// АдресХранилища - Строка - сообщение о результате применения правил.
//
Процедура ПрименитьПравила(ПараметрыВыгрузки, АдресХранилища) Экспорт
@@ -235,7 +235,7 @@
КонецПроцедуры
// Параметры:
// ОписаниеОшибки - ДанныеФормыКоллекция:
// ОписаниеОшибок - ДанныеФормыКоллекция:
// * Ошибки - Массив из Структура
// ОшибкаНаСервере - Булево
//
@@ -231,6 +231,7 @@
// ТаблицаЗначений - выполненные изменения данных производственных календарей:
// * КодПроизводственногоКалендаря - Строка - код измененного календаря,
// * Год - Число - год, за который календарь был изменен.
//
Функция ОбновитьДанныеПроизводственныхКалендарей(Знач ТаблицаДанных) Экспорт
ТаблицаИзменений = ТаблицаИзмененийПроизводственныхКалендарей();
@@ -359,12 +360,13 @@
// КодБазовогоКалендаря - Строка - код базового календаря
//
// Возвращаемое значение:
// ТаблицаЗначений - Результат заполнения производственного календаря по умолчанию:
// * КодПроизводственногоКалендаря - Строка -
// * ВидДня - ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря -
// * Год - Число -
// * Дата - Дата -
// * ДатаПереноса - Дата -
// ТаблицаЗначений - результат заполнения производственного календаря по умолчанию:
// * КодПроизводственногоКалендаря - Строка
// * ВидДня - ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря
// * Год - Число
// * Дата - Дата
// * ДатаПереноса - Дата
//
Функция РезультатЗаполненияПроизводственногоКалендаряПоУмолчанию(КодКалендаря, НомерГода, Знач КодБазовогоКалендаря = Неопределено) Экспорт
ВидыДней = Новый Соответствие;
@@ -524,11 +526,11 @@
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * КодПроизводственногоКалендаря
// * ВидДня
// * Год
// * Дата
// * ДатаПереноса.
// * КодПроизводственногоКалендаря - Строка
// * ВидДня - ПеречислениеСсылка.ВидыДнейПроизводственногоКалендаря
// * Год - Число
// * Дата - Дата
// * ДатаПереноса - Дата
//
Функция ДанныеПроизводственныхКалендарейИзXML(Знач ДанныеXML, ТаблицаКалендарей, КодыКалендарей = Неопределено, ФормироватьПолныйНабор = Истина) Экспорт
@@ -981,7 +983,7 @@
// Параметры:
// ПроизводственныйКалендарь - СправочникСсылка.ПроизводственныеКалендари - текущий элемент справочника.
// НомерГода - Число - номер года, за который необходимо записать производственный календарь.
// ДанныеПроизводственногоКалендаря - ТаблицаЗначений - см. Справочник.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря.
// ДанныеПроизводственногоКалендаря - см. Справочник.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря.
//
Процедура ЗаписатьДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода, ДанныеПроизводственногоКалендаря) Экспорт
@@ -1013,6 +1015,7 @@
//
// Возвращаемое значение:
// Соответствие - соответствие видов дня и цветов оформления.
//
Функция ЦветаОформленияВидовДнейПроизводственногоКалендаря() Экспорт
ЦветаОформления = Новый Соответствие;
@@ -1032,6 +1035,7 @@
//
// Возвращаемое значение:
// СписокЗначений - список, содержащий значение перечисления и его синоним в качестве представления.
//
Функция СписокВидовДня() Экспорт
СписокВидовДня = Новый СписокЗначений;
@@ -1048,7 +1052,8 @@
// для использования, например, в качестве шаблона.
//
// Возвращаемое значение:
// Массив - Список производственных календарей
// Массив - список производственных календарей
//
Функция СписокПроизводственныхКалендарей() Экспорт
Запрос = Новый Запрос(
@@ -11,10 +11,34 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если УпрощенныйИнтерфейс() Тогда
КлючВарианта = "ПраваПользователейНаТаблицы";
Отбор = Новый Структура;
Отбор.Вставить("ГруппаДоступа", ПараметрКоманды);
Отбор.Вставить("ВходВПрограммуРазрешен", Истина);
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОтчета.Вставить("Отбор", Отбор);
ПараметрыОтчета.Вставить("КлючВарианта", КлючВарианта);
ПараметрыОтчета.Вставить("КлючНазначенияИспользования", КлючВарианта);
ОткрытьФорму("Отчет.АнализПравДоступа.Форма", ПараметрыОтчета, ЭтотОбъект);
Иначе
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Профиль", ПараметрКоманды);
ОткрытьФорму("Справочник.ГруппыДоступа.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УпрощенныйИнтерфейс()
Возврат УправлениеДоступомСлужебный.УпрощенныйИнтерфейсНастройкиПравДоступа();
КонецФункции
#КонецОбласти
@@ -15,6 +15,12 @@
ТолькоПросмотр = Истина;
КонецЕсли;
БезРедактированияПоставляемыхЗначений = ТолькоПросмотр
Или Не Объект.Ссылка.Пустая()
И Справочники.ПрофилиГруппДоступа.ЗапретИзмененияПрофиля(Объект, Элементы.Родитель.ТолькоПросмотр);
Элементы.Наименование.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений;
КонецПроцедуры
&НаСервере
@@ -20,7 +20,7 @@
// Скрытие профиля Администратор.
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список, "Ссылка", Справочники.ПрофилиГруппДоступа.Администратор,
Список, "Ссылка", УправлениеДоступом.ПрофильАдминистратор(),
ВидСравненияКомпоновкиДанных.НеРавно, , Истина);
Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов;
@@ -27,16 +27,17 @@
// Установка постоянной доступности свойств.
// Определение необходимости настройки ограничений доступа.
Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда
Если Не УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда
Элементы.ВидыИЗначенияДоступа.Видимость = Ложь;
КонецЕсли;
// Определение возможности редактирования элементов формы (перезапись доступна).
БезРедактированияПоставляемыхЗначений = ТолькоПросмотр
ИЛИ НЕ Объект.Ссылка.Пустая() И Справочники.ПрофилиГруппДоступа.ЗапретИзмененияПрофиля(Объект);
Или Не Объект.Ссылка.Пустая()
И Справочники.ПрофилиГруппДоступа.ЗапретИзмененияПрофиля(Объект, Элементы.Родитель.ТолькоПросмотр);
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
Если Объект.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор
Если Объект.Ссылка = УправлениеДоступом.ПрофильАдминистратор()
И Не Пользователи.ЭтоПолноправныйПользователь(, Не РазделениеВключено) Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
@@ -668,7 +669,7 @@
ПараметрыДействия.Вставить("КоллекцияРолей", КоллекцияРолей);
ПараметрыДействия.Вставить("СкрытьРольПолныеПрава",
Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор);
Объект.Ссылка <> УправлениеДоступом.ПрофильАдминистратор());
ПараметрыДействия.Вставить("НазначениеРолей",
УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(Объект));
File diff suppressed because it is too large. Load diff
@@ -37,6 +37,7 @@
РолиАдминистратора.Добавить("Роль.АдминистраторСистемы");
ИдентификаторыРолей = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(РолиАдминистратора);
ОбработанныеРоли = Новый Соответствие;
ПрофильАдминистратор = УправлениеДоступом.ПрофильАдминистратор();
Индекс = Роли.Количество();
Пока Индекс > 0 Цикл
Индекс = Индекс - 1;
@@ -46,7 +47,7 @@
Продолжить;
КонецЕсли;
ОбработанныеРоли.Вставить(Роль, Истина);
Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда
Если Ссылка = ПрофильАдминистратор Тогда
Продолжить;
КонецЕсли;
Если Роль = ИдентификаторыРолей["Роль.ПолныеПрава"]
@@ -206,12 +207,13 @@
Возврат;
КонецЕсли;
Если ОбъектКопирования.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда
ИдентификаторПоставляемыхДанных = Неопределено;
Если Не ОбъектКопирования.ДополнительныеСвойства.Свойство("ПропуститьОчисткуРолей")
И ОбъектКопирования.Ссылка = УправлениеДоступом.ПрофильАдминистратор() Тогда
Роли.Очистить();
КонецЕсли;
ИдентификаторПоставляемыхДанных = Неопределено;
КонецПроцедуры
#КонецОбласти
@@ -224,8 +226,11 @@
Функция ОбновитьРолиПользователейПриИзмененииРолейПрофиля()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Профиль", Ссылка);
Запрос.УстановитьПараметр("СтарыеРолиПрофиля", ?(Ссылка = СтарыеЗначения.Ссылка,
Запрос.УстановитьПараметр("Профиль", ?(ПометкаУдаления,
Справочники.ПрофилиГруппДоступа.ПустаяСсылка(), Ссылка));
Запрос.УстановитьПараметр("СтарыеРолиПрофиля",
?(Ссылка = СтарыеЗначения.Ссылка И Не СтарыеЗначения.ПометкаУдаления,
СтарыеЗначения.Роли.Выгрузить(), Роли.Выгрузить(Новый Массив)));
Запрос.Текст =
@@ -270,14 +275,14 @@
"ВЫБРАТЬ
| ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолейРасширений.Роль КАК Роль,
| ПраваРолейРасширений.Добавление КАК Добавление,
| ПраваРолейРасширений.Изменение КАК Изменение,
| ПраваРолейРасширений.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
| ПраваРолейРасширений.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
| ПраваРолейРасширений.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
| ПраваРолейРасширений.Просмотр КАК Просмотр,
| ПраваРолейРасширений.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление,
| ПраваРолейРасширений.Редактирование КАК Редактирование,
| ПраваРолейРасширений.ПравоДобавление КАК ПравоДобавление,
| ПраваРолейРасширений.ПравоИзменение КАК ПравоИзменение,
| ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолейРасширений.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолейРасширений.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолейРасширений.ПравоРедактирование КАК ПравоРедактирование,
| ПраваРолейРасширений.ВидИзмененияСтроки КАК ВидИзмененияСтроки
|ПОМЕСТИТЬ ПраваРолейРасширений
|ИЗ
@@ -288,14 +293,14 @@
|ВЫБРАТЬ
| ПраваРолейРасширений.ОбъектМетаданных КАК ОбъектМетаданных,
| ПраваРолейРасширений.Роль КАК Роль,
| ПраваРолейРасширений.Добавление КАК Добавление,
| ПраваРолейРасширений.Изменение КАК Изменение,
| ПраваРолейРасширений.ЧтениеБезОграничения КАК ЧтениеБезОграничения,
| ПраваРолейРасширений.ДобавлениеБезОграничения КАК ДобавлениеБезОграничения,
| ПраваРолейРасширений.ИзменениеБезОграничения КАК ИзменениеБезОграничения,
| ПраваРолейРасширений.Просмотр КАК Просмотр,
| ПраваРолейРасширений.ИнтерактивноеДобавление КАК ИнтерактивноеДобавление,
| ПраваРолейРасширений.Редактирование КАК Редактирование
| ПраваРолейРасширений.ПравоДобавление КАК ПравоДобавление,
| ПраваРолейРасширений.ПравоИзменение КАК ПравоИзменение,
| ПраваРолейРасширений.ПравоЧтениеБезОграничения КАК ПравоЧтениеБезОграничения,
| ПраваРолейРасширений.ПравоДобавлениеБезОграничения КАК ПравоДобавлениеБезОграничения,
| ПраваРолейРасширений.ПравоИзменениеБезОграничения КАК ПравоИзменениеБезОграничения,
| ПраваРолейРасширений.ПравоПросмотр КАК ПравоПросмотр,
| ПраваРолейРасширений.ПравоИнтерактивноеДобавление КАК ПравоИнтерактивноеДобавление,
| ПраваРолейРасширений.ПравоРедактирование КАК ПравоРедактирование
|ПОМЕСТИТЬ ПраваРолей
|ИЗ
| ПраваРолейРасширений КАК ПраваРолейРасширений
@@ -307,14 +312,14 @@
|ВЫБРАТЬ
| ПраваРолей.ОбъектМетаданных,
| ПраваРолей.Роль,
| ПраваРолей.Добавление,
| ПраваРолей.Изменение,
| ПраваРолей.ЧтениеБезОграничения,
| ПраваРолей.ДобавлениеБезОграничения,
| ПраваРолей.ИзменениеБезОграничения,
| ПраваРолей.Просмотр,
| ПраваРолей.ИнтерактивноеДобавление,
| ПраваРолей.Редактирование
| ПраваРолей.ПравоДобавление,
| ПраваРолей.ПравоИзменение,
| ПраваРолей.ПравоЧтениеБезОграничения,
| ПраваРолей.ПравоДобавлениеБезОграничения,
| ПраваРолей.ПравоИзменениеБезОграничения,
| ПраваРолей.ПравоПросмотр,
| ПраваРолей.ПравоИнтерактивноеДобавление,
| ПраваРолей.ПравоРедактирование
|ИЗ
| РегистрСведений.ПраваРолей КАК ПраваРолей
| ЛЕВОЕ СОЕДИНЕНИЕ ПраваРолейРасширений КАК ПраваРолейРасширений
@@ -326,11 +331,18 @@
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПраваРолей.ОбъектМетаданных
| ПраваРолей.ОбъектМетаданных КАК ОбъектМетаданных
|ИЗ
| ПраваРолей КАК ПраваРолей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИзмененныеРоли КАК ИзмененныеРоли
| ПО ПраваРолей.Роль = ИзмененныеРоли.Роль";
| ПО ПраваРолей.Роль = ИзмененныеРоли.Роль
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИзмененныеРоли.Роль КАК Роль
|ИЗ
| ИзмененныеРоли КАК ИзмененныеРоли";
Запрос.Текст = Запрос.Текст + "
|;
@@ -341,8 +353,16 @@
Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений());
РезультатыЗапросов = Запрос.ВыполнитьПакет();
Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей")
И НЕ РезультатыЗапросов[1].Пустой() Тогда
Если УправлениеДоступомСлужебный.ОграничиватьДоступНаУровнеЗаписейУниверсально()
И Не РезультатыЗапросов[5].Пустой() Тогда
ИзмененныеРоли = РезультатыЗапросов[5].Выгрузить().ВыгрузитьКолонку("Роль");
УправлениеДоступомСлужебный.ЗапланироватьОбновлениеДоступаПриИзмененииРолейПрофиля(
"ОбновитьРолиПользователейПриИзмененииРолейПрофиля", ИзмененныеРоли);
КонецЕсли;
Если Не ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей")
И Не РезультатыЗапросов[5].Пустой() Тогда
ПользователиДляОбновленияРолей = Справочники.ГруппыДоступа.ПользователиДляОбновленияРолейПоПрофилю(Ссылка);
УправлениеДоступом.ОбновитьРолиПользователей(ПользователиДляОбновленияРолей);
@@ -151,12 +151,13 @@
</type>
<toolTip>
<key>ru</key>
<value>Для профилей, поставляемых в составе конфигурации, содержит идентификатор по которому можно найти описание поставляемого профиля.</value>
<value>Для профилей и папок профилей, поставляемых в составе конфигурации, содержит идентификатор по которому можно найти описание поставляемого профиля или папки профиля.</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<indexing>Index</indexing>
<use>ForFolderAndItem</use>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="db497857-33d3-49a1-b328-dfc62c973ecb">
@@ -11,11 +11,7 @@
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
// Вызывается непосредственно до записи объекта в базу данных.
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ЭтоГруппа Тогда
Если ОбменДанными.Загрузка Или ЭтоГруппа Тогда
Возврат;
КонецЕсли;
@@ -23,7 +19,7 @@
УстановитьПривилегированныйРежим(Истина);
РегламентныеЗаданияСервер.ЗаблокироватьРегламентноеЗадание(РегламентноеЗадание);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); // АПК:453 задание запускается от имени пользователя, выбранного в форме рассылки.
Если Задание = Неопределено Тогда
// Из-за выполнения индивидуального регламентного задания непосредственно в необходимой области модели сервиса.
@@ -65,7 +61,7 @@
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); // АПК:453 задание запускается от имени пользователя, выбранного в форме рассылки.
Если Задание <> Неопределено Тогда
Задание.Удалить();
КонецЕсли;
@@ -94,7 +90,7 @@
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗадание); // АПК:453 задание запускается от имени пользователя, выбранного в форме рассылки.
Если Задание <> Неопределено Тогда
ЗаданиеИзменено = Ложь;
@@ -115,6 +115,7 @@
<lang>ru</lang>
</pages>
</help>
<dataLockFields>Catalog.РассылкиОтчетов.Attribute.ТипПолучателейРассылки</dataLockFields>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<objectPresentation>
@@ -181,9 +181,10 @@
Элемент.КраткоеПредставление = НСтр("ru = '000000001'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.ТипыОсновногоОбъектаАдресации = ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации;
Элемент.Назначение = ТабличныеЧасти.Назначение.Скопировать();
ЭлементТЧ = Элемент.Назначение.Добавить();
Назначение = ТабличныеЧасти.Назначение.Скопировать(); // ТаблицаЗначений
ЭлементТЧ = Назначение.Добавить();
ЭлементТЧ.ТипПользователей = Справочники.Пользователи.ПустаяСсылка();
Элемент.Назначение = Назначение;
БизнесПроцессыИЗадачиПереопределяемый.ПриНачальномЗаполненииРолейИсполнителей(КодыЯзыков, Элементы, ТабличныеЧасти);
@@ -192,7 +193,7 @@
// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНастройкеНачальногоЗаполненияЭлемента
//
// Параметры:
// Объект - заполняемый объект.
// Объект - СправочникОбъект.РолиИсполнителей - заполняемый объект.
// Данные - СтрокаТаблицыЗначений - данные заполнения объекта.
// ДополнительныеПараметры - Структура:
// * ПредопределенныеДанные - ТаблицаЗначений - данные заполненные в процедуре ПриНачальномЗаполненииЭлементов.
@@ -127,6 +127,10 @@
<items xsi:type="form:Decoration">
<name>СертификатыНедоступныНаСервереЗначок</name>
<id>797</id>
<title>
<key>ru</key>
<value>Сертификаты недоступны на сервере значок</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -251,6 +255,112 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаАвторизацииОблачнойПодписи</name>
<id>858</id>
<items xsi:type="form:Decoration">
<name>ТребуетсяАутентификацияОблачнойПодписиЗначок</name>
<id>860</id>
<title>
<key>ru</key>
<value>Требуется аутентификация облачной подписи значок</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТребуетсяАутентификацияОблачнойПодписиЗначокРасширеннаяПодсказка</name>
<id>862</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТребуетсяАутентификацияОблачнойПодписиЗначокКонтекстноеМеню</name>
<id>861</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Предупреждение</picture>
</picture>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ТребуетсяАутентификацияОблачнойПодписиНадпись</name>
<id>863</id>
<title>
<key>ru</key>
<value>Чтобы отобразить сертификаты необходимо авторизоваться на сервере облачной подписи</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТребуетсяАутентификацияОблачнойПодписиНадписьРасширеннаяПодсказка</name>
<id>865</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТребуетсяАутентификацияОблачнойПодписиНадписьКонтекстноеМеню</name>
<id>864</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>Click</event>
<name>ТребуетсяАутентификацияОблачнойПодписиНадписьНажатие</name>
</handlers>
<hyperlink>true</hyperlink>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Авторизации облачной подписи</value>
</title>
<extendedTooltip>
<name>ГруппаАвторизацииОблачнойПодписиРасширеннаяПодсказка</name>
<id>859</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:Table">
<name>Сертификаты</name>
<id>217</id>
@@ -689,6 +799,9 @@
<verticalStretch>true</verticalStretch>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
<rowPictureDataPath xsi:type="form:DataPath">
<segments>Сертификаты.ТипРазмещения</segments>
</rowPictureDataPath>
<autoMaxCardHeight>true</autoMaxCardHeight>
<rowFilter xsi:type="core:UndefinedValue"/>
</items>
@@ -2136,6 +2249,22 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>ТипРазмещения</name>
<id>8</id>
<valueType>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>СертификатНаименование</name>
@@ -2535,6 +2664,48 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СписокУчетныхЗаписей</name>
<id>28</id>
<valueType>
<types>ValueList</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<extInfo xsi:type="form:ValueListExtInfo">
<itemValueType/>
</extInfo>
</attributes>
<attributes>
<name>СертификатОблачнойПодписи</name>
<id>29</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ЕстьОблачнаяПодпись</name>
<id>30</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Далее</name>
<title>
@@ -28,6 +28,13 @@
Если Параметры.Свойство("Организация") Тогда
СертификатПараметрыРеквизитов.Вставить("Организация", Параметры.Организация);
КонецЕсли;
ВыполнятьНаСервере = Параметры.ВыполнятьНаСервере;
ЕстьОблачнаяПодпись = ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи();
Если ЕстьОблачнаяПодпись Тогда
МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS");
Элементы.Сертификаты.КартинкаСтрок = МодульСервисКриптографииDSS.ПолучитьКартинкуПодсистемы("ТипыСертификатов");
КонецЕсли;
ОтборПоОрганизации = Параметры.ОтборПоОрганизации;
@@ -62,10 +69,18 @@
Заголовок = НСтр("ru = 'Добавление сертификата для подписания данных'");
КонецЕсли;
Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Если ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере()
И ВыполнятьНаСервере <> Ложь
Или ЕстьОблачнаяПодпись Тогда
Если ВыполнятьНаСервере = Истина Тогда
Элементы.ГруппаСертификаты.Заголовок =
НСтр("ru = 'Личные сертификаты на сервере'");
Иначе
Элементы.ГруппаСертификаты.Заголовок =
НСтр("ru = 'Личные сертификаты на компьютере и сервере'");
КонецЕсли;
КонецЕсли;
ЕстьОрганизации = Не Метаданные.ОпределяемыеТипы.Организация.Тип.СодержитТип(Тип("Строка"));
Элементы.СертификатОрганизация.Видимость = ЕстьОрганизации;
@@ -240,6 +255,27 @@
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяАутентификацияОблачнойПодписиНадписьНажатие(Элемент)
ОповещениеСледующее = Новый ОписаниеОповещения("ТребуетсяАутентификацияОблачнойПодписиНадписьПослеАутентификации", ЭтотОбъект);
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("СписокУчетныхЗаписей", СписокУчетныхЗаписей.ВыгрузитьЗначения());
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверкаАутентификацииПользователя(ОповещениеСледующее, Неопределено, ПараметрыОперации);
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяАутентификацияОблачнойПодписиНадписьПослеАутентификации(РезультатВызова, ДополнительныеПараметры) Экспорт
Если РезультатВызова.Выполнено Тогда
ОбновитьСписокСертификатов();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСертификаты
@@ -281,7 +317,18 @@
Возврат;
КонецЕсли;
Если ТекущиеДанные.ТипРазмещения = 3 Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ОтпечатокСертификата = Новый Структура();
ОтпечатокСертификата.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(ТекущиеДанные.Отпечаток));
ПараметрыОперации = Новый Структура("ЭтоЗаявление", ТекущиеДанные.ЭтоЗаявление);
ОповещениеСледующее = Новый ОписаниеОповещения("ОткрытьСертификатОблачнойПодписи", ЭтотОбъект, ПараметрыОперации);
МодульСервисКриптографииDSSКлиент.НайтиСертификат(ОповещениеСледующее, ОтпечатокСертификата);
Иначе
ЭлектроннаяПодписьКлиент.ОткрытьСертификат(ТекущиеДанные.Отпечаток, Не ТекущиеДанные.ЭтоЗаявление);
КонецЕсли;
КонецПроцедуры
@@ -341,7 +388,24 @@
Возврат;
КонецЕсли;
Если СертификатВОблачномСервисе Тогда
Если СертификатОблачнойПодписи Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSСлужебныйВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSСлужебныйВызовСервера");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ОтпечатокСертификата = МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(ОтпечатокВыбранногоСертификата);
НастройкиПользователя = МодульСервисКриптографииDSSСлужебныйВызовСервера.ПолучитьНастройкиПользователяПоСертификату(ОтпечатокСертификата);
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("УчетнаяЗапись", НастройкиПользователя.Ссылка);
ПараметрыОперации.Вставить("ОтпечатокСертификата", ОтпечатокСертификата);
МодульСервисКриптографииDSSКлиент.ПроверитьСертификат(
Новый ОписаниеОповещения("ВыбратьПослеПроверкиСертификатаОблачнойПодписи", ЭтотОбъект, ПараметрыОперации),
НастройкиПользователя,
ПолучитьИзВременногоХранилища(СертификатАдрес));
ИначеЕсли СертификатВОблачномСервисе Тогда
МодульСервисКриптографииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииКлиент");
МодульСервисКриптографииКлиент.ПроверитьСертификат(
@@ -401,6 +465,43 @@
КонецПроцедуры
// Продолжение процедуры Выбрать.
&НаКлиенте
Процедура ВыбратьПослеПроверкиСертификатаОблачнойПодписи(Результат, Контекст) Экспорт
ДополнительныеПараметры = Новый Структура;
Если Не Результат.Выполнено Тогда
ОписаниеОшибки = Результат.Ошибка;
ИначеЕсли Не Результат.Результат Тогда
ОписаниеОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТекстОшибкиСервисаСертификатНедействителен();
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Если ДляШифрованияИРасшифровки = Истина Тогда
ЗаголовокФормы = НСтр("ru = 'Проверка шифрования и расшифровки'");
Иначе
ЗаголовокФормы = НСтр("ru = 'Проверка установки электронной подписи'");
КонецЕсли;
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
ЗаголовокФормы, "", Новый Структура("ОписаниеОшибки", ОписаниеОшибки), Новый Структура);
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Сертификат) Тогда
ДополнительныеПараметры.Вставить("ЭтоНовый");
КонецЕсли;
ЗаписатьСертификатВСправочникОблачнаяПодпись(Контекст.УчетнаяЗапись);
ОповеститьОбИзменении(Сертификат);
Оповестить("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования",
ДополнительныеПараметры, Сертификат);
ОповеститьОВыборе(Сертификат);
КонецПроцедуры
// Продолжение процедуры Выбрать.
&НаКлиенте
Процедура ВыбратьПослеПроверкиСертификатаВМоделиСервиса(Результат, Контекст) Экспорт
@@ -524,8 +625,18 @@
Контекст = Новый Структура;
Контекст.Вставить("Оповещение", Оповещение);
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере()
И ВыполнятьНаСервере = Истина Тогда
Результат = Новый Структура;
Результат.Вставить("СвойстваСертификатовНаКлиенте", Новый Массив);
Результат.Вставить("ОшибкаПолученияСертификатовНаКлиенте", Новый Структура);
ОбновитьСписокСертификатовПродолжение(Результат, Контекст);
Иначе
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСвойстваСертификатовНаКлиенте(Новый ОписаниеОповещения(
"ОбновитьСписокСертификатовПродолжение", ЭтотОбъект, Контекст), Истина, ПоказыватьВсе);
КонецЕсли;
КонецПроцедуры
@@ -548,8 +659,12 @@
ОшибкаПолученияСертификатовНаСервере = Новый Структура;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОтборПоОрганизации", ОтборПоОрганизации);
ДополнительныеПараметры.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере);
ЭлектроннаяПодписьСлужебный.ОбновитьСписокСертификатов(Сертификаты, СвойстваСертификатовНаКлиенте,
ДобавлениеВСписок, Истина, ОшибкаПолученияСертификатовНаСервере, ПоказыватьВсе, ОтборПоОрганизации);
ДобавлениеВСписок, Истина, ОшибкаПолученияСертификатовНаСервере, ПоказыватьВсе, ДополнительныеПараметры);
Если ЗначениеЗаполнено(ОтпечатокВыбранногоСертификата)
И ( Элементы.Сертификаты.ТекущаяСтрока = Неопределено
@@ -570,6 +685,15 @@
Элементы.ГруппаСертификатыНедоступныНаСервере.Видимость =
ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаСервере);
ВидимостьАутентификации = Ложь;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
СписокУчетныхЗаписей.ЗагрузитьЗначения(МодульСервисКриптографииDSSСлужебный.УчетныеЗаписиБезСертификатов());
ВидимостьАутентификации = СписокУчетныхЗаписей.Количество() > 0;
КонецЕсли;
Элементы.ГруппаАвторизацииОблачнойПодписи.Видимость = ВидимостьАутентификации;
Если Элементы.Сертификаты.ТекущаяСтрока = Неопределено Тогда
ОтпечатокВыбранногоСертификата = "";
Иначе
@@ -579,6 +703,15 @@
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСертификатОблачнойПодписи(РезультатПоиска, ДополнительныеПараметры) Экспорт
Если РезультатПоиска.Выполнено Тогда
ЭлектроннаяПодписьКлиент.ОткрытьСертификат(РезультатПоиска.ДанныеСертификата.Сертификат, Не ДополнительныеПараметры.ЭтоЗаявление);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКВыборуТекущегоСертификата(Оповещение)
@@ -606,6 +739,7 @@
СертификатНаКлиенте = ТекущиеДанные.НаКлиенте;
СертификатНаСервере = ТекущиеДанные.НаСервере;
СертификатВОблачномСервисе = ТекущиеДанные.ВОблачномСервисе;
СертификатОблачнойПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ТекущиеДанные.ТипРазмещения) = "ОблачнаяПодпись";
Контекст = Новый Структура;
Контекст.Вставить("Оповещение", Оповещение);
@@ -624,7 +758,16 @@
Возврат;
КонецЕсли;
Если ТекущиеДанные.ВОблачномСервисе Тогда
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ТекущиеДанные.ТипРазмещения) = "ОблачнаяПодпись" Тогда
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(ТекущиеДанные.Отпечаток));
МодульСервисКриптографииDSSКлиент.НайтиСертификат(Новый ОписаниеОповещения(
"ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификатаВОблачнойПодписи", ЭтотОбъект, Контекст), СтруктураПоиска);
ИначеЕсли ТекущиеДанные.ВОблачномСервисе Тогда
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", Base64Значение(ТекущиеДанные.Отпечаток));
МодульХранилищеСертификатовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ХранилищеСертификатовКлиент");
@@ -678,22 +821,42 @@
&НаКлиенте
Процедура ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификатаВОблачномСервисе(РезультатПоиска, Контекст) Экспорт
ТекущиеДанные = Элементы.Сертификаты.ТекущиеДанные;
Если ЕстьОблачнаяПодпись Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ОбработкаСледующая = Новый ОписаниеОповещения("ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификатаВОблачнойПодписи", ЭтотОбъект, Контекст);
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(ТекущиеДанные.Отпечаток));
МодульСервисКриптографииDSSКлиент.НайтиСертификат(ОбработкаСледующая, СтруктураПоиска);
Иначе
ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификатаВОблачнойПодписи(РезультатПоиска, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ПерейтиКВыборуТекущегоСертификата.
&НаКлиенте
Процедура ПерейтиКВыборуТекущегоСертификатаПослеПоискаСертификатаВОблачнойПодписи(РезультатПоиска, Контекст) Экспорт
Если Не РезультатПоиска.Выполнено Тогда
Контекст.Результат.ОписаниеОшибки = РезультатПоиска.ОписаниеОшибки.Описание;
Контекст.Результат.ОписаниеОшибки = РезультатПоиска.Ошибка;
Контекст.Результат.ОбновитьСписокСертификатов = Истина;
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат);
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(РезультатПоиска.Сертификат) Тогда
Контекст.Результат.ОписаниеОшибки = НСтр("ru = 'Сертификат отсутствует в облачном сервисе (возможно удален).'");
Если Не ЗначениеЗаполнено(РезультатПоиска.ДанныеСертификата) Тогда
Контекст.Результат.ОписаниеОшибки = НСтр("ru = 'Сертификат отсутствует на сервере облачной подписи (возможно удален).'");
Контекст.Результат.ОбновитьСписокСертификатов = Истина;
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Результат);
Возврат;
КонецЕсли;
Контекст.Вставить("СертификатКриптографии", РезультатПоиска.Сертификат);
ПерейтиКВыборуТекущегоСертификатаПослеВыгрузкиСертификата(РезультатПоиска.Сертификат.Сертификат, Контекст);
Контекст.Вставить("СертификатКриптографии", РезультатПоиска.ДанныеСертификата);
ПерейтиКВыборуТекущегоСертификатаПослеВыгрузкиСертификата(РезультатПоиска.ДанныеСертификата.Сертификат, Контекст);
КонецПроцедуры
@@ -768,7 +931,7 @@
КонецЕсли;
КонецЕсли;
Если СертификатВОблачномСервисе Тогда
Если СертификатВОблачномСервисе ИЛИ СертификатОблачнойПодписи Тогда
Элементы.ГруппаУсиленнаяЗащитаЗакрытогоКлюча.Видимость = Ложь;
Иначе
Элементы.ГруппаУсиленнаяЗащитаЗакрытогоКлюча.Видимость = Истина;
@@ -796,4 +959,13 @@
КонецПроцедуры
&НаСервере
Процедура ЗаписатьСертификатВСправочникОблачнаяПодпись(УчетнаяЗапись)
СертификатУсиленнаяЗащитаЗакрытогоКлюча = Ложь;
ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатВСправочник(ЭтотОбъект, УчетнаяЗапись, Ложь);
КонецПроцедуры
#КонецОбласти
@@ -703,6 +703,7 @@
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<width>35</width>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoTitle>true</autoTitle>
@@ -690,6 +690,9 @@
<verticalStretch>true</verticalStretch>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
<rowPictureDataPath xsi:type="form:DataPath">
<segments>Сертификаты.ТипРазмещения</segments>
</rowPictureDataPath>
<autoMaxCardHeight>true</autoMaxCardHeight>
<rowFilter xsi:type="core:UndefinedValue"/>
</items>
@@ -1695,6 +1698,22 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>ТипРазмещения</name>
<id>8</id>
<valueType>
<types>Number</types>
<numberQualifiers>
<precision>10</precision>
</numberQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>СертификатНаименование</name>
@@ -1931,6 +1950,19 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>УчетнаяЗапись</name>
<id>14</id>
<valueType>
<types>CatalogRef</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Далее</name>
<title>
@@ -49,6 +49,11 @@
ОпределяемыйТипОрганизацияНастроен = Истина;
КонецЕсли;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS");
Элементы.Сертификаты.КартинкаСтрок = МодульСервисКриптографииDSS.ПолучитьКартинкуПодсистемы("ТипыСертификатов");
КонецЕсли;
Элементы.СертификатПользователь.Подсказка =
Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.Реквизиты.Пользователь.Подсказка;
@@ -225,7 +230,23 @@
Элементы.Далее.Доступность = Ложь;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() И ТекущиеДанные.ВОблачномСервисе Тогда
УчетнаяЗапись = Неопределено;
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.РазмещениеСертификата(ТекущиеДанные.ТипРазмещения) = "ОблачнаяПодпись" Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSСлужебныйВызовСервера = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSСлужебныйВызовСервера");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ОтпечатокСертификата = МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(ТекущиеДанные.Отпечаток);
НастройкиПользователя = МодульСервисКриптографииDSSСлужебныйВызовСервера.ПолучитьНастройкиПользователяПоСертификату(ОтпечатокСертификата);
УчетнаяЗапись = НастройкиПользователя.Ссылка;
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", ОтпечатокСертификата);
МодульСервисКриптографииDSSКлиент.НайтиСертификат(Новый ОписаниеОповещения(
"ДалееПослеПоискаСертификатаОблачнаяПодпись", ЭтотОбъект, УчетнаяЗапись), СтруктураПоиска);
ИначеЕсли ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьЭлектроннуюПодписьВМоделиСервиса() И ТекущиеДанные.ВОблачномСервисе Тогда
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", Base64Значение(ТекущиеДанные.Отпечаток));
МодульХранилищеСертификатовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ХранилищеСертификатовКлиент");
@@ -261,6 +282,30 @@
КонецПроцедуры
// Продолжение процедуры Далее.
&НаКлиенте
Процедура ДалееПослеПоискаСертификатаОблачнаяПодпись(Результат, Контекст) Экспорт
Если Не Результат.Выполнено Тогда
Контекст = Новый Структура;
Контекст.Вставить("ОписаниеОшибки", Результат.Ошибка);
ОбновитьСписокСертификатов(Новый ОписаниеОповещения(
"ДалееПослеОбновленияСпискаСертификатов", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ДанныеСертификата) Тогда
Контекст = Новый Структура;
Контекст.Вставить("ОписаниеОшибки", НСтр("ru = 'Сертификат отсутствует в облачном сервисе (возможно удален).'"));
ОбновитьСписокСертификатов(Новый ОписаниеОповещения(
"ДалееПослеОбновленияСпискаСертификатов", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
ДалееПослеВыгрузкиСертификата(Результат.ДанныеСертификата.Сертификат, Результат.ДанныеСертификата);
КонецПроцедуры
// Продолжение процедуры Далее.
&НаКлиенте
Процедура ДалееПослеВыгрузкиСертификата(ВыгруженныеДанные, СертификатКриптографии) Экспорт
@@ -476,7 +521,11 @@
&НаСервере
Процедура ЗаписатьСертификатВСправочник()
Если ЗначениеЗаполнено(УчетнаяЗапись) Тогда
ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатВСправочник(ЭтотОбъект, УчетнаяЗапись, Истина);
Иначе
ЭлектроннаяПодписьСлужебный.ЗаписатьСертификатВСправочник(ЭтотОбъект, , Истина);
КонецЕсли;
КонецПроцедуры
@@ -189,4 +189,14 @@
КонецПроцедуры
&НаКлиенте
Процедура СброситьПарольСертификата(СертификатСсылка) Экспорт // АПК:78 - исключение для безопасного хранения паролей.
ХранилищеПаролей = ОбщиеВнутренниеДанные.Получить("ХранилищеПаролей");
Если ХранилищеПаролей <> Неопределено Тогда
ХранилищеПаролей.Вставить(СертификатСсылка, Неопределено);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -1219,9 +1219,24 @@
СертификатыПереопределяемый.Пользователь КАК Пользователь,
СертификатыПереопределяемый.ПользовательОповещенОСрокеДействия КАК ПользовательОповещенОСрокеДействия,
СертификатыПереопределяемый.Предопределенный КАК Предопределенный,
СертификатыПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
СертификатыПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
ВЫБОР
КОГДА ПрограммыЭлектроннойПодписиИШифрованияПереопределяемый.ЭтоПрограммаОблачногоСервиса
ТОГДА 4
КОГДА СертификатыПереопределяемый.Программа = НЕОПРЕДЕЛЕНО
ИЛИ СертификатыПереопределяемый.Программа = ЗНАЧЕНИЕ(Справочник.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка)
ИЛИ НЕ ПрограммыЭлектроннойПодписиИШифрованияПереопределяемый.Ссылка ЕСТЬ NULL
ТОГДА 1
ИНАЧЕ 3
КОНЕЦ + ВЫБОР
КОГДА СертификатыПереопределяемый.ПометкаУдаления
ТОГДА 4
ИНАЧЕ 0
КОНЕЦ КАК ТипРазмещения
ИЗ
Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК СертификатыПереопределяемый
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрованияПереопределяемый
ПО СертификатыПереопределяемый.Программа = ПрограммыЭлектроннойПодписиИШифрованияПереопределяемый.Ссылка
ГДЕ
&amp;ДополнительноеУсловие
{ГДЕ
@@ -1234,7 +1249,6 @@
СоставыГруппПользователейПереопределяемый.Пользователь = СертификатыПереопределяемый.Пользователь
И СоставыГруппПользователейПереопределяемый.ГруппаПользователей В (&amp;ГруппаПользователей)))}</queryText>
<mainTable>Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования</mainTable>
<dynamicDataRead>true</dynamicDataRead>
<autoFillAvailableFields>true</autoFillAvailableFields>
<customQuery>true</customQuery>
<autoSaveUserSettings>true</autoSaveUserSettings>
@@ -2,8 +2,7 @@
<p>Предназначен для подбора сертификата электронной подписи.</p>
<p>Открывается по кнопке <strong>Подобрать</strong> из окна <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ШифрованиеДанных/Help">Шифрование данных</a>.</p>
<p>В списке выводится:</p>
<ul><li><strong>Представление</strong> - полное наименование сертификата;
</li><li><strong>Фирма</strong> - организация, которой выдан сертификат;
<ul><li><strong>Представление</strong> - полное наименование сертификата; </li><li><strong>Фирма</strong> - организация, которой выдан сертификат;
</li><li><strong>Пользователь</strong> - пользователь, который является владельцем подписи;
</li><li><strong>Кем выдан</strong> - организация, которая выдала сертификат.</li></ul><h3>Отборы</h3>
<ul><li>Если <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования/Help">сертификатов</a> много, то можно отобрать нужные:
@@ -35,6 +35,12 @@
ГруппаПользователейПриИзмененииНаСервере();
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS");
Элементы.Список.КартинкаСтрок = МодульСервисКриптографииDSS.ПолучитьКартинкуПодсистемы("ТипыСертификатов");;
Элементы.Список.ПутьКДаннымКартинкиСтроки = "Список.ТипРазмещения";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -74,10 +74,8 @@
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<representation>NormalSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
@@ -146,7 +144,6 @@
<event>ChoiceProcessing</event>
<name>СертификатОбработкаВыбора</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<dropListButton>false</dropListButton>
@@ -226,6 +223,7 @@
<dataPath xsi:type="form:DataPath">
<segments>ЗапомнитьПароль</segments>
</dataPath>
<skipOnInput>true</skipOnInput>
<titleLocation>Right</titleLocation>
<toolTip>
<key>ru</key>
@@ -513,6 +511,37 @@
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<showTitle>auto</showTitle>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКонтейнер</name>
<id>468</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Контейнер</value>
</title>
<extendedTooltip>
<name>ГруппаКонтейнерРасширеннаяПодсказка</name>
<id>469</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
@@ -532,6 +561,7 @@
<dataPath xsi:type="form:DataPath">
<segments>Комментарий</segments>
</dataPath>
<skipOnInput>true</skipOnInput>
<titleHeight>2</titleHeight>
<extendedTooltip>
<name>КомментарийРасширеннаяПодсказка</name>
@@ -554,7 +584,6 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<height>1</height>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
@@ -564,6 +593,38 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКонтейнер1</name>
<id>470</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Контейнер1</value>
</title>
<extendedTooltip>
<name>ГруппаКонтейнер1РасширеннаяПодсказка</name>
<id>471</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -573,6 +634,7 @@
<key>ru</key>
<value>Подписание и комментарий</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>ГруппаПодписаниеИКомментарийРасширеннаяПодсказка</name>
<id>453</id>
@@ -588,18 +650,50 @@
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКоманды</name>
<id>456</id>
<items xsi:type="form:FormGroup">
<name>ГруппаКомандыПодтверждения</name>
<id>458</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды подтверждения</value>
</title>
<extendedTooltip>
<name>ГруппаКомандыПодтвержденияРасширеннаяПодсказка</name>
<id>459</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОсновныеКоманды</name>
<id>460</id>
<items xsi:type="form:Button">
<name>Подписать</name>
<id>307</id>
<id>462</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -607,7 +701,7 @@
</userVisible>
<extendedTooltip>
<name>ПодписатьРасширеннаяПодсказка</name>
<id>308</id>
<id>463</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -625,7 +719,7 @@
</items>
<items xsi:type="form:Button">
<name>Отмена</name>
<id>303</id>
<id>464</id>
<title>
<key>ru</key>
<value>Отмена</value>
@@ -637,7 +731,7 @@
</userVisible>
<extendedTooltip>
<name>ОтменаРасширеннаяПодсказка</name>
<id>304</id>
<id>465</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -654,7 +748,7 @@
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>448</id>
<id>466</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -662,7 +756,7 @@
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>449</id>
<id>467</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -678,6 +772,67 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Основные команды</value>
</title>
<horizontalStretch>false</horizontalStretch>
<groupHorizontalAlign>Right</groupHorizontalAlign>
<extendedTooltip>
<name>ГруппаОсновныеКомандыРасширеннаяПодсказка</name>
<id>461</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>ГруппаКомандыРасширеннаяПодсказка</name>
<id>457</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>None</commandBarLocation>
<showCommandBar>false</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Right</horizontalAlign>
</autoCommandBar>
<handlers>
@@ -696,7 +851,7 @@
<event>OnClose</event>
<name>ПриЗакрытии</name>
</handlers>
<width>45</width>
<width>56</width>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
@@ -851,7 +1006,7 @@
<name>СертификатПрограмма</name>
<id>9</id>
<valueType>
<types>CatalogRef.ПрограммыЭлектроннойПодписиИШифрования</types>
<types>DefinedType.ПрограммаЭлектроннойПодписи</types>
</valueType>
<view>
<common>true</common>
@@ -949,9 +1104,7 @@
<attributes>
<name>ВыполнятьНаСервере</name>
<id>19</id>
<valueType>
<types>Boolean</types>
</valueType>
<valueType/>
<view>
<common>true</common>
</view>
@@ -7,10 +7,14 @@
</li><li>Если <strong>Сертификат</strong> не выбран - выберите его из списка. Если при следующем открытии сертификат будет среди установленных на компьютере, повторный выбор не потребуется.
</li><li>При выборе из выпадающего списка будут показаны только сертификаты, у которых поле <strong>Пользователь</strong> не заполнено или совпадает с текущим пользователем сеанса, а поле <strong>Программа</strong> заполнено. Если при открытии окна <strong>Подписание</strong> был указан отбор по организации, то в выпадающем списке не будет сертификатов, у которых поле <strong>Организация</strong> не совпадает с организацией, указанной в отборе. Если при открытии окна <strong>Подписание</strong> был указан конкретный список сертификатов, то будет показан только этот список.
</li><li>При выборе из списка личных сертификатов (установленных на компьютере и на сервере) путем нажатия <strong>Показать все</strong>, показываются все сертификаты без учета полей <strong>Пользователь</strong> и <strong>Программа</strong>. Если при открытии окна <strong>Подписание</strong> был указан отбор по организации, то в списке не будет сертификатов, у которых поле <strong>Организация</strong> не совпадает с организацией, указанной в отборе. Но будут показаны все сертификаты, которых еще нет в списке (то есть те, которые есть только в хранилище сертификатов операционный системы компьютера или сервера).
</li><li>Введите <strong>Пароль</strong> к закрытому ключу (указанный при установке или создании сертификата).
</li><li>Включите флажок <strong>Запомнить пароль</strong>, для того чтобы не вводить пароль в следующий раз.
</li><li>Введите <strong>Пароль</strong> к закрытому ключу (указанный при установке или создании сертификата) <span style="font-size: 7.5pt;">или <b style="mso-bidi-font-weight: normal;">Пин-код</b>, если местом хранения сертификата является сервис
облачной подписи.</span>
</li><li>Включите флажок <strong>Запомнить пароль</strong>, для того чтобы не вводить пароль <span style="font-size: 7.5pt; mso-fareast-font-family: &quot;Times New Roman&quot;; mso-bidi-font-family: &quot;Times New Roman&quot;; mso-ansi-language: RU; mso-fareast-language: RU; mso-bidi-language: AR-SA;">(пин-код
для облачной подписи) </span>в следующий раз.
</li><li>В некоторых случаях можно ввести <strong>Комментарий к подписи</strong> - дополнительную информацию о подписи.
</li><li>Для выполнения подписи нажмите <strong>Подписать</strong>.
</li><li>Данные будут подписаны с использованием указанного сертификата.
</li><li>Созданная электронная подпись хранится в программе. Подписанный объект становится недоступным для редактирования и отображается в списках со значком <img src="CommonPicture.ПодписанЭП"></img>.</li></ul><h3>См. также:</h3>
<ul style="MARGIN-RIGHT: 0px" dir="ltr"><li><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a>.</li></ul></body></html>
</li><li>Созданная электронная подпись хранится в программе. Подписанный объект становится недоступным для редактирования и отображается в списках со значком <img src="CommonPicture.ПодписанЭП"></img>.</li><ul type="disc"></ul></ul><h3></h3><h3>См. также:</h3>
<ul style="margin-right: 0px;" dir="ltr"><li><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a>.</li></ul></body></html>
@@ -23,6 +23,17 @@
ЭлектроннаяПодписьСлужебный.НастроитьФормуПодписанияШифрованияРасшифровки(ЭтотОбъект);
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Подписание",
"ГруппаПодписаниеИКомментарий",
"ГруппаКонтейнер",
"ГруппаКонтейнер1",
"ГруппаКомандыПодтверждения");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -36,6 +47,11 @@
ТекущийЭлемент = Элементы[ИмяПоляАктивизироватьПоУмолчанию];
КонецЕсли;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриОткрытии(ЭтотОбъект, Отказ, ЗначениеЗаполнено(Пароль) И ЗапомнитьПароль, ОписаниеДанных);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -50,6 +66,30 @@
Если ВРег(ИмяСобытия) = ВРег("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ПодключитьОбработчикОжидания("ПриИзмененииСпискаСертификатов", 0.1, Истина);
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеВыполнитьОсновнуюОперацию") И Источник = УникальныйИдентификатор Тогда
Если Параметр.Выполнено Тогда
ДанныеПакета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметр, "ДанныеПакета");
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных, Новый Структура("ДанныеПакета", ДанныеПакета));
СвойстваОблачнойПодписи = ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСвойстваОблачнойПодписи(ОписаниеДанных);
ОповещениеПриПодтверждении = СвойстваОблачнойПодписи.ОповещениеПриПодтверждении;
Если ОповещениеПриПодтверждении = Неопределено Тогда
ПодписатьДанные(Новый ОписаниеОповещения("ПодписатьЗавершение", ЭтотОбъект));
Иначе
ВыполнитьОбработкуОповещения(ОповещениеПриПодтверждении, ЭтотОбъект);
КонецЕсли;
КонецЕсли;
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеАвторизация") И Источник = УникальныйИдентификатор Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьОтпечаткиСертификатовНаКлиенте(
Новый ОписаниеОповещения("СертификатОбработкаВыбораЗавершение", ЭтотОбъект));
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеПодготовитьДанные") И Источник = УникальныйИдентификатор Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьДанныеДляОблачнойПодписи(
Параметр.ОбработчикСледующий, Параметр.КонтекстФормы,
Параметр.ОписаниеДанных, Параметр.Данные, Истина);
КонецЕсли;
КонецПроцедуры
@@ -80,7 +120,14 @@
СертификатПриИзмененииНаСервере(ОтпечаткиСертификатовНаКлиенте);
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля);
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля, Новый Структура("ПриОткрытии", Истина));
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверитьНаОшибкуСертификата(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ФильтроватьСписокСпособов(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
КонецПроцедуры
@@ -101,6 +148,7 @@
Если ТипЗнч(ОтборСертификатов) <> Тип("СписокЗначений") Тогда
ПараметрыФормы.Вставить("ОтборПоОрганизации", ОтборСертификатов);
КонецЕсли;
ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере);
ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент);
@@ -149,6 +197,13 @@
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля);
КонецЕсли;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, СвойстваПароля.Значение);
МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверитьНаОшибкуСертификата(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ФильтроватьСписокСпособов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -203,20 +258,28 @@
&НаКлиенте
Процедура Подписать(Команда)
Если Не Элементы.Подписать.Доступность Тогда
Возврат;
КонецЕсли;
ОписаниеДанных.Вставить("ПользовательНажалКнопкуПодписать", Истина);
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
Если ЭлектроннаяПодписьСлужебныйКлиент.ЭтоОперацияОблачнойПодписи(ЭтотОбъект) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
Если МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверкаПередВыполнениемОперации(ЭтотОбъект, СвойстваПароля.Значение) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент.ВыполнитьНачальнуюОперациюСервиса(ЭтотОбъект, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
Иначе
Если Не Элементы.Подписать.Доступность Тогда
Возврат;
КонецЕсли;
Элементы.Подписать.Доступность = Ложь;
ПодписатьДанные(Новый ОписаниеОповещения("ПодписатьЗавершение", ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры Подписать.
@@ -274,24 +337,44 @@
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПриОткрытии", Истина);
Если СвойстваПароля <> Неопределено Тогда
ДополнительныеПараметры.Вставить("ПриУстановкеПароляИзДругойОперации", Истина);
КонецЕсли;
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект,
ВнутренниеДанные, СвойстваПароля, ДополнительныеПараметры);
МодульСервисКриптографииDSSПодтверждениеКлиент = Неопределено;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
КонецЕсли;
Если БезПодтверждения
И ( ДополнительныеПараметры.ПарольУказан
Или ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча
Или ОблачныйПарольПодтвержден) Тогда
Если МодульСервисКриптографииDSSПодтверждениеКлиент <> Неопределено Тогда
Если НЕ МодульСервисКриптографииDSSПодтверждениеКлиент.ОблачнаяПодписьТребуетПодтверждения(ЭтотОбъект, ДополнительныеПараметры.ПарольУказан) Тогда
ОбработкаПослеПредупреждения = Неопределено;
ПодписатьДанные(Новый ОписаниеОповещения("ПродолжитьОткрытиеПослеПодписанияДанных", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
Иначе
ОбработкаПослеПредупреждения = Неопределено;
ПодписатьДанные(Новый ОписаниеОповещения("ПродолжитьОткрытиеПослеПодписанияДанных", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
КонецЕсли;
Открыть();
Если МодульСервисКриптографииDSSПодтверждениеКлиент <> Неопределено Тогда
Если МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверкаВыполненияНачальнойОперации(ЭтотОбъект, БезПодтверждения И ДополнительныеПараметры.ПарольУказан) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент.ВыполнитьНачальнуюОперациюСервиса(ЭтотОбъект, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
КонецЕсли;
ПродолжитьОткрытиеЗавершение(Контекст);
КонецПроцедуры
@@ -356,9 +439,7 @@
&НаКлиенте
Процедура ВыполнитьПодписаниеЗавершение(Результат, Контекст) Экспорт
Если Результат = Истина Тогда
ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Истина);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Результат);
КонецПроцедуры
@@ -393,11 +474,24 @@
ЭлектроннаяПодписьСлужебный.СертификатПриИзмененииНаСервере(ЭтотОбъект, ОтпечаткиСертификатовНаКлиенте);
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодписатьДанные(Оповещение)
Если ЭлектроннаяПодписьСлужебныйКлиент.ЭтоОперацияОблачнойПодписи(ЭтотОбъект) Тогда
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных,
Новый Структура("УчетнаяЗапись, ДанныеПодтверждения", ЭтотОбъект.НастройкиПользователя, ЭтотОбъект.ДанныеПодтверждения));
Иначе
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных,
Новый Структура("УчетнаяЗапись, ДанныеПодтверждения"));
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("Оповещение", Оповещение);
Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура);
@@ -489,7 +583,9 @@
Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения);
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере()
И ВыполнятьНаСервере <> Ложь Тогда
Если ЗначениеЗаполнено(СертификатНаСервереОписаниеОшибки) Тогда
Результат = Новый Структура("Ошибка", СертификатНаСервереОписаниеОшибки);
СертификатНаСервереОписаниеОшибки = Новый Структура;
@@ -523,6 +619,10 @@
Иначе
Если Результат <> Неопределено Тогда
Контекст.ОшибкаНаСервере = Результат.Ошибка;
Если ВыполнятьНаСервере = Истина Тогда
ПодписатьДанныеПослеВыполненияНаСторонеКлиента(Новый Структура, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
// Попытка подписания на клиенте.
@@ -635,4 +735,53 @@
КонецПроцедуры
#Область ПодключаемыеОбработчики
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработкаКоманды(Команда)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаКоманды(ЭтотОбъект, Команда, ОписаниеДанных, СвойстваПароля.Значение);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеПриИзменении(Элемент)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элемент, ОписаниеДанных, СвойстваПароля.Значение);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработчикОжидания()
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаОжидания(ЭтотОбъект, ОписаниеДанных, СвойстваПароля.Значение);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -4298,7 +4298,7 @@
<name>Программа</name>
<id>4</id>
<valueType>
<types>CatalogRef.ПрограммыЭлектроннойПодписиИШифрования</types>
<types>DefinedType.ПрограммаЭлектроннойПодписи</types>
</valueType>
<view>
<common>true</common>
@@ -4575,6 +4575,19 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ЭтоПрограммаОблачнойПодписи</name>
<id>22</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Проверить</name>
<title>
@@ -128,20 +128,36 @@
КонецЕсли;
СвойстваСертификата = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сертификат,
"ДанныеСертификата, Программа, УсиленнаяЗащитаЗакрытогоКлюча");
"ДанныеСертификата, Программа, УсиленнаяЗащитаЗакрытогоКлюча, Отпечаток");
Программа = СвойстваСертификата.Программа;
АдресСертификата = ПоместитьВоВременноеХранилище(
СвойстваСертификата.ДанныеСертификата.Получить(), УникальныйИдентификатор);
СертификатУсиленнаяЗащитаЗакрытогоКлюча = СвойстваСертификата.УсиленнаяЗащитаЗакрытогоКлюча;
ЭтоПрограммаОблачнойПодписи = ТипЗнч(Программа) = ЭлектроннаяПодписьСлужебный.ПолучитьТипОблачнойПодписи()
И ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи();
ЭтоПрограммаОблачногоСервиса = Программа = ЭлектроннаяПодписьСлужебный.ПрограммаОблачногоСервиса();
Если Программа.ЭтоПрограммаОблачногоСервиса Тогда
ЭтоПрограммаОблачногоСервиса = Истина;
Если ЭтоПрограммаОблачнойПодписи Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
ДанныеСертификата = МодульСервисКриптографииDSSСлужебный.ПолучитьДанныеСертификатаПоОтпечатку(
МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(СвойстваСертификата.Отпечаток));
Если ДанныеСертификата = Неопределено ИЛИ ДанныеСертификата.УчетнаяЗапись <> Программа Тогда
ВызватьИсключение МодульСервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки(Неопределено, "ЧужойСертификат");
КонецЕсли;
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Проверка", "", "");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
ИначеЕсли ЭтоПрограммаОблачногоСервиса Тогда
Элементы.ГруппаВводаПароля.Видимость = Ложь;
ИначеЕсли Не СтандартныеПроверки
И Не ВводитьПароль Тогда
Элементы.ГруппаВводаПароля.Видимость = Ложь;
КонецЕсли;
ОбновитьВидимостьНаСервере();
@@ -164,6 +180,11 @@
Отказ = Истина;
КонецЕсли;
Если ЭтоПрограммаОблачнойПодписи Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриОткрытии(ЭтотОбъект, Отказ, ЗначениеЗаполнено(Пароль) И ЗапомнитьПароль);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -319,6 +340,7 @@
КлиентскиеПараметры.Вставить("Результат");
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПриОткрытии", Истина);
Если КлиентскиеПараметры.Свойство("УказанКонтекстДругойОперации") Тогда
СвойстваСертификата = ОбщиеВнутренниеДанные;
@@ -560,7 +582,11 @@
ПроверитьЗаконныйСертификатНаКлиенте(Контекст);
// Наличие сертификата в личном списке.
Если ЭтоПрограммаОблачногоСервиса Тогда
Если ЭтоОперацияОблачнойПодписи() Тогда
ОповещениеСледующее = Новый ОписаниеОповещения("ПроверитьНаСторонеКлиентаПослеАвторизацииВОблачнойПодписи", ЭтотОбъект, Контекст);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверкаАутентификацииПользователя(ОповещениеСледующее, Программа);
ИначеЕсли ЭтоПрограммаОблачногоСервиса Тогда
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", Контекст.СертификатКриптографии.Отпечаток);
МодульХранилищеСертификатовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ХранилищеСертификатовКлиент");
@@ -1056,6 +1082,24 @@
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(Неопределен, Контекст) Экспорт
ПараметрыВыполнения = ПараметрыВыполненияКонтекста.Получить(Контекст);
ПараметрыВыполненияКонтекста.Удалить(Контекст);
УстановитьЭлемент(ЭтотОбъект, Контекст.ЭлементСписка.Имя, Ложь,
ПараметрыВыполнения.ОписаниеОшибки,
ПараметрыВыполнения.ЭтоПредупреждение <> Истина,
ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаЦиклНачало(Контекст);
КонецПроцедуры
#КонецОбласти
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаЦиклНачало(Контекст)
@@ -1098,22 +1142,294 @@
КонецПроцедуры
#Область ПроверкаНаКлиентеОблачнаяПодпись
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеДополнительнойПроверки(Неопределен, Контекст) Экспорт
Процедура ПроверитьНаСторонеКлиентаПослеАвторизацииВОблачнойПодписи(РезультатВызова, Контекст) Экспорт
ПараметрыВыполнения = ПараметрыВыполненияКонтекста.Получить(Контекст);
ПараметрыВыполненияКонтекста.Удалить(Контекст);
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, Контекст.ЭлементСписка.Имя, Ложь,
ПараметрыВыполнения.ОписаниеОшибки,
ПараметрыВыполнения.ЭтоПредупреждение <> Истина,
ОбъединятьРезультаты);
// Если не авторизовались, проверки прекращаются.
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
Возврат;
КонецЕсли;
ПроверитьНаСторонеКлиентаЦиклНачало(Контекст);
ЭтотОбъект.НастройкиПользователя = РезультатВызова.НастройкиПользователя;
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Контекст.СертификатКриптографии.Отпечаток));
МодульСервисКриптографииDSSКлиент.НайтиСертификат(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПоискаСертификатаОблачнойПодписи", ЭтотОбъект, Контекст), СтруктураПоиска);
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПоискаСертификатаОблачнойПодписи(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = "";
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
ИначеЕсли Не ЗначениеЗаполнено(РезультатВызова.ДанныеСертификата) Тогда
ОписаниеОшибки = НСтр("ru = 'Сертификат отсутствует в сервисе ""Облачная подпись"" (возможно удален).'");
КонецЕсли;
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи и расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Ложь, ОписаниеОшибки, , ОбъединятьРезультаты);
// Если не нашли сертификат в хранилище сертификатов, проверки прекращаются.
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
Возврат;
КонецЕсли;
// Проверка данных сертификата.
Контекст.Вставить("НастройкиПользователя", ЭтотОбъект.НастройкиПользователя);
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаОблачнойПодписи", ЭтотОбъект, Контекст);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверитьСертификат(ОбработчикСледующий, Контекст.НастройкиПользователя, РезультатВызова.ДанныеСертификата.Сертификат);
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиСертификатаОблачнойПодписи(Результат, Контекст) Экспорт
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли Результат.Выполнено И Результат.Результат Тогда
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = Результат.Ошибка;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ДанныеСертификата", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
// Наличие программы
Если ЗначениеЗаполнено(Программа) Тогда
ПроверитьНаСторонеКлиентаОблачнаяПодпись("ОблачнаяПодпись", Контекст);
Иначе
ОписаниеОшибки = НСтр("ru = 'Программа для использования закрытого ключа не указана в сертификате.'");
ПроверитьНаСторонеКлиентаПослеСозданияМенеджераКриптографии(ОписаниеОшибки, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаОблачнаяПодпись(Результат, Контекст)
Контекст.Вставить("МенеджерКриптографии", Неопределено);
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли ТипЗнч(Результат) = Тип("Строка") И Результат = "ОблачнаяПодпись" Тогда
Контекст.МенеджерКриптографии = Результат;
ОписаниеОшибки = "";
Иначе
ОписаниеОшибки = Результат + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Проверка подписания, созданной подписи, шифрования и
|расшифровки не могут быть выполнены.'");
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "НаличиеПрограммы", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Если Контекст.МенеджерКриптографии = Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
// Подписание.
Если ПроверкиНаКлиенте.НаличиеСертификата Тогда
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодписанияОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПодписания", ЭтотОбъект);
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Контекст.СертификатКриптографии.Отпечаток));
ЗначениеПинКода = ?(ЗначениеЗаполнено(СвойстваПароля.Значение), СвойстваПароля.Значение, Неопределено);
ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("ПинКод", МодульСервисКриптографииDSSКлиент.ПодготовитьОбъектПароля(ЗначениеПинКода));
МодульСервисКриптографииDSSКлиент.Подписать(
ОбработчикСледующий,
Контекст.НастройкиПользователя,
Контекст.ДанныеСертификата,
,
СтруктураПоиска,
ПараметрыОперации);
Иначе
ПроверитьНаСторонеКлиентаПослеПодписания(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПодписанияОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ДанныеПодписи = РезультатВызова.Результат;
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ПарольПринят = Истина;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
// Проверка подписи.
Если ПроверкиНаКлиенте.НаличиеСертификата И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписиОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.ПроверитьПодпись(ОбработчикСледующий,
Контекст.НастройкиПользователя,
ДанныеПодписи,
Контекст.ДанныеСертификата,
"CMS");
Иначе
ПроверитьНаСторонеКлиентаПослеПроверкиПодписиОблачнаяПодпись(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписиОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ОписаниеОшибки = "";
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
// Шифрование.
Если НЕ ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеШифрованияОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиШифрования", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиент.Зашифровать(ОбработчикСледующий,
Контекст.НастройкиПользователя,
Контекст.ДанныеСертификата,
Контекст.ДанныеСертификата);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеШифрованияОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ОписаниеОшибки = "";
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
// Расшифровка.
Если ПроверкиНаКлиенте.НаличиеСертификата И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбработчикСледующий = Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеРасшифровкиОблачнаяПодпись", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиРасшифровки", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Отпечаток", МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Контекст.СертификатКриптографии.Отпечаток));
ЗначениеПинКода = ?(ЗначениеЗаполнено(СвойстваПароля.Значение), СвойстваПароля.Значение, Неопределено);
ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("ПинКод", МодульСервисКриптографииDSSКлиент.ПодготовитьОбъектПароля(ЗначениеПинКода));
МодульСервисКриптографииDSSКлиент.Расшифровать(ОбработчикСледующий, Контекст.НастройкиПользователя, РезультатВызова.Результат, , СтруктураПоиска, ПараметрыОперации);
Иначе
ПроверитьНаСторонеКлиентаПослеРасшифровкиОблачнаяПодпись(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеРасшифровкиОблачнаяПодпись(РезультатВызова, Контекст) Экспорт
ОписаниеОшибки = Неопределено;
Если НЕ ОперацияАктивна() Тогда
ОписаниеОшибки = НСтр("ru = 'Форма проверки закрыта.'");
ИначеЕсли РезультатВызова <> Неопределено Тогда
Если Не РезультатВызова.Выполнено Тогда
ОписаниеОшибки = РезультатВызова.Ошибка;
Иначе
ОписаниеОшибки = "";
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РезультатВызова.Результат, ОписаниеОшибки);
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Расшифровка", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
КонецПроцедуры
&НаКлиенте
Функция ЭтоОперацияОблачнойПодписи()
Результат = ТипЗнч(Программа) = ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьТипОблачнойПодписи();
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ОперацияАктивна()
Результат = Открыта();
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ПроверкаНаСервере
@@ -48,6 +48,7 @@
<name>ПредставлениеДанныхНажатие</name>
</handlers>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<hyperlink>true</hyperlink>
</extInfo>
</items>
@@ -72,12 +73,11 @@
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<group>Vertical</group>
<behavior>Auto</behavior>
<representation>NormalSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
@@ -159,6 +159,9 @@
<choiceHistoryOnInput>DontUse</choiceHistoryOnInput>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаПароль</name>
<id>455</id>
<items xsi:type="form:FormField">
<name>Пароль</name>
<id>316</id>
@@ -205,15 +208,13 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Страницы</name>
<id>416</id>
<items xsi:type="form:FormGroup">
<name>СтраницаЗапоминаниеПароля</name>
<id>418</id>
<items xsi:type="form:FormField">
<name>ЗапомнитьПароль</name>
<id>324</id>
<title>
<key>ru</key>
<value>Запомнить на время сеанса</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -261,11 +262,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Страница запоминание пароля</value>
<value>Пароль</value>
</title>
<extendedTooltip>
<name>СтраницаЗапоминаниеПароляРасширеннаяПодсказка</name>
<id>419</id>
<name>ГруппаПарольРасширеннаяПодсказка</name>
<id>456</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -273,13 +274,19 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Page</type>
<extInfo xsi:type="form:PageGroupExtInfo">
<group>HorizontalIfPossible</group>
<showTitle>auto</showTitle>
<scrollOnCompress>false</scrollOnCompress>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Страницы</name>
<id>416</id>
<items xsi:type="form:FormGroup">
<name>СтраницаПояснениеУсиленногоПароля</name>
<id>438</id>
@@ -475,6 +482,38 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКонтейнер</name>
<id>457</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Контейнер</value>
</title>
<extendedTooltip>
<name>ГруппаКонтейнерРасширеннаяПодсказка</name>
<id>458</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -502,18 +541,50 @@
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<showTitle>auto</showTitle>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКоманды</name>
<id>459</id>
<items xsi:type="form:FormGroup">
<name>ГруппаКомандыПодтверждения</name>
<id>461</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<extendedTooltip>
<name>ГруппаКомандыПодтвержденияРасширеннаяПодсказка</name>
<id>462</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОсновныеКоманды</name>
<id>463</id>
<items xsi:type="form:Button">
<name>ФормаРасшифровать</name>
<id>307</id>
<id>465</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -521,7 +592,7 @@
</userVisible>
<extendedTooltip>
<name>ФормаРасшифроватьРасширеннаяПодсказка</name>
<id>308</id>
<id>466</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -539,7 +610,7 @@
</items>
<items xsi:type="form:Button">
<name>ФормаЗакрыть</name>
<id>303</id>
<id>467</id>
<title>
<key>ru</key>
<value>Отмена</value>
@@ -551,7 +622,7 @@
</userVisible>
<extendedTooltip>
<name>ФормаЗакрытьРасширеннаяПодсказка</name>
<id>304</id>
<id>468</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -568,7 +639,7 @@
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>448</id>
<id>469</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -576,7 +647,7 @@
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>449</id>
<id>470</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -592,6 +663,67 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Основные команды</value>
</title>
<horizontalStretch>false</horizontalStretch>
<groupHorizontalAlign>Right</groupHorizontalAlign>
<extendedTooltip>
<name>ГруппаОсновныеКомандыРасширеннаяПодсказка</name>
<id>464</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>ГруппаКомандыРасширеннаяПодсказка</name>
<id>460</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Right</horizontalAlign>
</autoCommandBar>
<handlers>
@@ -610,7 +742,7 @@
<event>OnClose</event>
<name>ПриЗакрытии</name>
</handlers>
<width>45</width>
<width>56</width>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
@@ -766,7 +898,7 @@
<name>СертификатПрограмма</name>
<id>9</id>
<valueType>
<types>CatalogRef.ПрограммыЭлектроннойПодписиИШифрования</types>
<types>DefinedType.ПрограммаЭлектроннойПодписи</types>
</valueType>
<view>
<common>true</common>
@@ -9,7 +9,8 @@
<div>В поле <strong>Пароль</strong> введите пароль для выбранного сертификата.</div>
</li><li>
<div>Включите флажок <strong>Запомнить пароль</strong>, для того чтобы не вводить пароль в следующий раз.</div>
</li><li>
</li>
<li>
<div>Нажмите <strong>Расшифровать</strong>.</div></li></ul><h3>См. также:</h3>
<ul><li>
<div><a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a>.</div></li></ul></body></html>
@@ -31,6 +31,16 @@
Элементы.ПояснениеУсиленногоПароля.Заголовок = НСтр("ru = 'Нажмите ОК, чтобы перейти к вводу пароля.'");
КонецЕсли;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Расшифрование",
"ГруппаРасшифровка",
"ГруппаКонтейнер",
,
"ГруппаКомандыПодтверждения");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -44,6 +54,11 @@
ТекущийЭлемент = Элементы[ИмяПоляАктивизироватьПоУмолчанию];
КонецЕсли;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриОткрытии(ЭтотОбъект, Отказ, ЗначениеЗаполнено(Пароль) И ЗапомнитьПароль, ОписаниеДанных);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -58,6 +73,28 @@
Если ВРег(ИмяСобытия) = ВРег("Запись_СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ПодключитьОбработчикОжидания("ПриИзмененииСпискаСертификатов", 0.1, Истина);
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеВыполнитьОсновнуюОперацию") И Источник = УникальныйИдентификатор Тогда
Если Параметр.Выполнено Тогда
СвойстваОблачнойПодписи = ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСвойстваОблачнойПодписи(ОписаниеДанных);
ОповещениеПриПодтверждении = СвойстваОблачнойПодписи.ОповещениеПриПодтверждении;
Если ОповещениеПриПодтверждении = Неопределено Тогда
РасшифроватьДанные(Новый ОписаниеОповещения("РасшифроватьЗавершение", ЭтотОбъект));
Иначе
ВыполнитьОбработкуОповещения(ОповещениеПриПодтверждении, ЭтотОбъект);
КонецЕсли;
КонецЕсли;
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеАвторизация") И Источник = УникальныйИдентификатор Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьОтпечаткиСертификатовНаКлиенте(
Новый ОписаниеОповещения("СертификатПриИзмененииЗавершение", ЭтотОбъект),
ЗначениеЗаполнено(ОтборОтпечатков));
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеПодготовитьДанные") И Источник = УникальныйИдентификатор Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьДанныеДляОблачнойПодписи(
Параметр.ОбработчикСледующий, Параметр.КонтекстФормы,
Параметр.ОписаниеДанных, Параметр.Данные, Истина);
КонецЕсли;
КонецПроцедуры
@@ -89,7 +126,14 @@
СертификатПриИзмененииНаСервере(ОтпечаткиСертификатовНаКлиенте);
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля);
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля, Новый Структура("ПриОткрытии", Истина));
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверитьНаОшибкуСертификата(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ФильтроватьСписокСпособов(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
КонецПроцедуры
@@ -107,6 +151,7 @@
ПараметрыФормы.Вставить("ВыбранныйСертификат", Сертификат);
ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина);
ПараметрыФормы.Вставить("ВернутьПароль", Истина);
ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере);
ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент);
@@ -139,6 +184,7 @@
ПараметрыФормы.Вставить("ОтпечатокВыбранногоСертификата", ВыбранноеЗначение);
ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина);
ПараметрыФормы.Вставить("ВернутьПароль", Истина);
ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере);
ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент);
Возврат;
@@ -150,6 +196,11 @@
Новый ОписаниеОповещения("СертификатОбработкаВыбораЗавершение", ЭтотОбъект, ВыбранноеЗначение),
ЗначениеЗаполнено(ОтборОтпечатков));
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры СертификатОбработкаВыбора.
@@ -169,6 +220,13 @@
ЭлектроннаяПодписьСлужебныйКлиент.ОбработатьПарольВФорме(ЭтотОбъект, ВнутренниеДанные, СвойстваПароля);
КонецЕсли;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, СвойстваПароля.Значение);
МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверитьНаОшибкуСертификата(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ФильтроватьСписокСпособов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -237,17 +295,25 @@
&НаКлиенте
Процедура Расшифровать(Команда)
Если Не Элементы.ФормаРасшифровать.Доступность Тогда
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
Если Не ПроверитьЗаполнение() Тогда
Если ЭлектроннаяПодписьСлужебныйКлиент.ЭтоОперацияОблачнойПодписи(ЭтотОбъект) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
Если МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверкаПередВыполнениемОперации(ЭтотОбъект, СвойстваПароля.Значение) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент.ВыполнитьНачальнуюОперациюСервиса(ЭтотОбъект, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
Иначе
Если Не Элементы.ФормаРасшифровать.Доступность Тогда
Возврат;
КонецЕсли;
Элементы.ФормаРасшифровать.Доступность = Ложь;
РасшифроватьДанные(Новый ОписаниеОповещения("РасшифроватьЗавершение", ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
@@ -305,7 +371,13 @@
Возврат;
КонецЕсли;
МодульСервисКриптографииDSSПодтверждениеКлиент = Неопределено;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПриОткрытии", Истина);
Если СвойстваПароля <> Неопределено Тогда
ДополнительныеПараметры.Вставить("ПриУстановкеПароляИзДругойОперации", Истина);
КонецЕсли;
@@ -324,13 +396,27 @@
Или ДополнительныеПараметры.УсиленнаяЗащитаЗакрытогоКлюча
Или ОблачныйПарольПодтвержден) Тогда
Если МодульСервисКриптографииDSSПодтверждениеКлиент <> Неопределено Тогда
Если НЕ МодульСервисКриптографииDSSПодтверждениеКлиент.ОблачнаяПодписьТребуетПодтверждения(ЭтотОбъект, ДополнительныеПараметры.ПарольУказан) Тогда
ОбработкаПослеПредупреждения = Неопределено;
РасшифроватьДанные(Новый ОписаниеОповещения("ПродолжитьОткрытиеПослеРасшифровкиДанных", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
Иначе
ОбработкаПослеПредупреждения = Неопределено;
РасшифроватьДанные(Новый ОписаниеОповещения("ПродолжитьОткрытиеПослеРасшифровкиДанных", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
КонецЕсли;
Открыть();
Если МодульСервисКриптографииDSSПодтверждениеКлиент <> Неопределено Тогда
Если МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверкаВыполненияНачальнойОперации(ЭтотОбъект, БезПодтверждения И ДополнительныеПараметры.ПарольУказан) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент.ВыполнитьНачальнуюОперациюСервиса(ЭтотОбъект, ОписаниеДанных, СвойстваПароля.Значение);
КонецЕсли;
КонецЕсли;
ПродолжитьОткрытиеЗавершение(Контекст);
КонецПроцедуры
@@ -395,9 +481,7 @@
&НаКлиенте
Процедура ВыполнитьРасшифровкуЗавершение(Результат, Контекст) Экспорт
Если Результат = Истина Тогда
ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Истина);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Результат);
КонецПроцедуры
@@ -433,11 +517,24 @@
ЭлектроннаяПодписьСлужебный.СертификатПриИзмененииНаСервере(ЭтотОбъект, ОтпечаткиСертификатовНаКлиенте,, Истина);
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, Сертификат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РасшифроватьДанные(Оповещение)
Если ЭлектроннаяПодписьСлужебныйКлиент.ЭтоОперацияОблачнойПодписи(ЭтотОбъект) Тогда
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных,
Новый Структура("УчетнаяЗапись, ДанныеПодтверждения", ЭтотОбъект.НастройкиПользователя, ЭтотОбъект.ДанныеПодтверждения));
Иначе
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных,
Новый Структура("УчетнаяЗапись, ДанныеПодтверждения"));
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("Оповещение", Оповещение);
Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура);
@@ -500,7 +597,9 @@
ПараметрыВыполнения.Вставить("ЗначениеПароля", СвойстваПароля.Значение);
Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения);
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере()
И ВыполнятьНаСервере <> Ложь Тогда
Если ЗначениеЗаполнено(СертификатНаСервереОписаниеОшибки) Тогда
Результат = Новый Структура("Ошибка", СертификатНаСервереОписаниеОшибки);
СертификатНаСервереОписаниеОшибки = Новый Структура;
@@ -535,6 +634,10 @@
Иначе
Если Результат <> Неопределено Тогда
Контекст.ОшибкаНаСервере = Результат.Ошибка;
Если ВыполнятьНаСервере = Истина Тогда
РасшифроватьДанныеПослеВыполненияНаСторонеКлиента(Новый Структура, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
// Попытка подписания на клиенте.
@@ -703,4 +806,49 @@
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработкаКоманды(Команда)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаКоманды(ЭтотОбъект, Команда, ОписаниеДанных, СвойстваПароля.Значение);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеПриИзменении(Элемент)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элемент, ОписаниеДанных, СвойстваПароля.Значение);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработчикОжидания()
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаОжидания(ЭтотОбъект, ОписаниеДанных, СвойстваПароля.Значение);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,761 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<title>
<key>ru</key>
<value>Список пользователей</value>
</title>
<items xsi:type="form:FormGroup">
<name>ГруппаДанные</name>
<id>42</id>
<items xsi:type="form:FormGroup">
<name>ГруппаАвтор</name>
<id>32</id>
<items xsi:type="form:FormField">
<name>СпособВыбора</name>
<id>36</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СпособВыбора</segments>
</dataPath>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>СпособВыбораПриИзменении</name>
</handlers>
<extendedTooltip>
<name>СпособВыбораРасширеннаяПодсказка</name>
<id>38</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СпособВыбораКонтекстноеМеню</name>
<id>37</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<choiceList>
<presentation>
<key>ru</key>
<value>Только для меня</value>
</presentation>
<value xsi:type="core:StringValue">
<value>ТолькоДляМеня</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Автор</value>
</title>
<extendedTooltip>
<name>ГруппаАвторРасширеннаяПодсказка</name>
<id>33</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаСписок</name>
<id>34</id>
<items xsi:type="form:FormField">
<name>СпособВыбораСписок</name>
<id>39</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СпособВыбора</segments>
</dataPath>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>СпособВыбораПриИзменении</name>
</handlers>
<extendedTooltip>
<name>СпособВыбораСписокРасширеннаяПодсказка</name>
<id>41</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СпособВыбораСписокКонтекстноеМеню</name>
<id>40</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<choiceList>
<presentation>
<key>ru</key>
<value>Добавить пользователей</value>
</presentation>
<value xsi:type="core:StringValue">
<value>СписокПользователей</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:Table">
<name>ТаблицаПользователей</name>
<id>7</id>
<title>
<key>ru</key>
<value>Таблица пользователей</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТаблицаПользователей</segments>
</dataPath>
<titleLocation>None</titleLocation>
<excludedCommands>Change</excludedCommands>
<excludedCommands>Copy</excludedCommands>
<excludedCommands>Delete</excludedCommands>
<excludedCommands>EndEdit</excludedCommands>
<excludedCommands>MoveDown</excludedCommands>
<excludedCommands>MoveUp</excludedCommands>
<excludedCommands>OutputList</excludedCommands>
<excludedCommands>ShowRowRearrangement</excludedCommands>
<excludedCommands>SortListAsc</excludedCommands>
<excludedCommands>SortListDesc</excludedCommands>
<items xsi:type="form:FormField">
<name>ПользователиПометка</name>
<id>23</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТаблицаПользователей.Пометка</segments>
</dataPath>
<extendedTooltip>
<name>ПользователиПометкаРасширеннаяПодсказка</name>
<id>25</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПользователиПометкаКонтекстноеМеню</name>
<id>24</id>
<autoFill>true</autoFill>
</contextMenu>
<type>CheckBoxField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<items xsi:type="form:FormField">
<name>ПользователиПользователь</name>
<id>20</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТаблицаПользователей.Пользователь</segments>
</dataPath>
<extendedTooltip>
<name>ПользователиПользовательРасширеннаяПодсказка</name>
<id>22</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПользователиПользовательКонтекстноеМеню</name>
<id>21</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<readOnly>true</readOnly>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<autoCommandBar>
<name>ТаблицаПользователейКоманднаяПанель</name>
<id>9</id>
<items xsi:type="form:Button">
<name>ПользователиПометитьВсе</name>
<id>26</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПользователиПометитьВсеРасширеннаяПодсказка</name>
<id>27</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ПометитьВсе</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ПользователиОтменитьПометку</name>
<id>28</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПользователиОтменитьПометкуРасширеннаяПодсказка</name>
<id>29</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ОтменитьПометку</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<searchStringAddition>
<name>ТаблицаПользователейСтрокаПоиска</name>
<id>11</id>
<extendedTooltip>
<name>ТаблицаПользователейСтрокаПоискаРасширеннаяПодсказка</name>
<id>13</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаПользователейСтрокаПоискаКонтекстноеМеню</name>
<id>12</id>
<autoFill>true</autoFill>
</contextMenu>
<source>ТаблицаПользователей</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchStringAddition>
<viewStatusAddition>
<name>ТаблицаПользователейСостояниеПросмотра</name>
<id>14</id>
<extendedTooltip>
<name>ТаблицаПользователейСостояниеПросмотраРасширеннаяПодсказка</name>
<id>16</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаПользователейСостояниеПросмотраКонтекстноеМеню</name>
<id>15</id>
<autoFill>true</autoFill>
</contextMenu>
<type>ViewStatusAddition</type>
<source>ТаблицаПользователей</source>
<extInfo xsi:type="form:ViewStatusAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</viewStatusAddition>
<searchControlAddition>
<name>ТаблицаПользователейУправлениеПоиском</name>
<id>17</id>
<extendedTooltip>
<name>ТаблицаПользователейУправлениеПоискомРасширеннаяПодсказка</name>
<id>19</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаПользователейУправлениеПоискомКонтекстноеМеню</name>
<id>18</id>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>ТаблицаПользователей</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</searchControlAddition>
<extendedTooltip>
<name>ТаблицаПользователейРасширеннаяПодсказка</name>
<id>10</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаПользователейКонтекстноеМеню</name>
<id>8</id>
<autoFill>true</autoFill>
</contextMenu>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<selectionMode>MultiRow</selectionMode>
<headerHeight>1</headerHeight>
<footerHeight>1</footerHeight>
<horizontalScrollBar>AutoUse</horizontalScrollBar>
<verticalScrollBar>AutoUse</verticalScrollBar>
<horizontalLines>true</horizontalLines>
<verticalLines>true</verticalLines>
<useAlternationRowColorBWA>false</useAlternationRowColorBWA>
<autoInsertNewRow>true</autoInsertNewRow>
<searchOnInput>Auto</searchOnInput>
<initialListView>Auto</initialListView>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
<fileDragMode>AsFileRef</fileDragMode>
<autoMaxCardHeight>true</autoMaxCardHeight>
<rowFilter xsi:type="core:UndefinedValue"/>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Список</value>
</title>
<extendedTooltip>
<name>ГруппаСписокРасширеннаяПодсказка</name>
<id>35</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Данные</value>
</title>
<extendedTooltip>
<name>ГруппаДанныеРасширеннаяПодсказка</name>
<id>43</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКоманды</name>
<id>1</id>
<items xsi:type="form:Button">
<name>ОК</name>
<id>30</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<defaultItem>true</defaultItem>
<extendedTooltip>
<name>ОКРасширеннаяПодсказка</name>
<id>31</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ОК</commandName>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>Отмена</name>
<id>5</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОтменаРасширеннаяПодсказка</name>
<id>6</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Cancel</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<extendedTooltip>
<name>ГруппаКомандыРасширеннаяПодсказка</name>
<id>2</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Right</horizontalAlign>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>ТаблицаПользователей</name>
<title>
<key>ru</key>
<value>Таблица пользователей</value>
</title>
<id>1</id>
<valueType>
<types>ValueTable</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<columns>
<name>Пользователь</name>
<title>
<key>ru</key>
<value>Пользователь</value>
</title>
<id>1</id>
<valueType>
<types>CatalogRef.Пользователи</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Пометка</name>
<title>
<key>ru</key>
<value>Пометка</value>
</title>
<id>2</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Основной</name>
<id>3</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>СпособВыбора</name>
<title>
<key>ru</key>
<value>Способ выбора</value>
</title>
<id>2</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>РежимПросмотра</name>
<id>3</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ПометитьВсе</name>
<title>
<key>ru</key>
<value>Пометить все</value>
</title>
<id>1</id>
<toolTip>
<key>ru</key>
<value>Пометить все</value>
</toolTip>
<use>
<common>true</common>
</use>
<picture xsi:type="core:PictureRef">
<picture>StdPicture.CheckAll</picture>
</picture>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ПометитьВсе</name>
</handler>
</action>
<representation>Picture</representation>
<currentRowUse>Auto</currentRowUse>
<associatedTableElementId xsi:type="core:StringValue">
<value>ТаблицаПользователей</value>
</associatedTableElementId>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОтменитьПометку</name>
<title>
<key>ru</key>
<value>Отменить пометку</value>
</title>
<id>2</id>
<toolTip>
<key>ru</key>
<value>Отменить пометку</value>
</toolTip>
<use>
<common>true</common>
</use>
<picture xsi:type="core:PictureRef">
<picture>StdPicture.UncheckAll</picture>
</picture>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОтменитьПометку</name>
</handler>
</action>
<representation>Picture</representation>
<currentRowUse>Auto</currentRowUse>
<associatedTableElementId xsi:type="core:StringValue">
<value>ТаблицаПользователей</value>
</associatedTableElementId>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОК</name>
<title>
<key>ru</key>
<value>ОК</value>
</title>
<id>3</id>
<toolTip>
<key>ru</key>
<value>ОК</value>
</toolTip>
<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/>
</parameters>
<parameters>
<name>Пользователь</name>
<valueType>
<types>CatalogRef.Пользователи</types>
</valueType>
</parameters>
<parameters>
<name>РежимПросмотра</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
</form:Form>
@@ -0,0 +1,192 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПользователиСертификата = Параметры.Пользователи;
ВладелецСертификата = Параметры.Пользователь;
РежимПросмотра = Параметры.РежимПросмотра;
Если ПользователиСертификата = Неопределено Тогда
ПользователиСертификата = Новый Массив;
КонецЕсли;
Если ПользователиСертификата.Количество() > 0
ИЛИ ВладелецСертификата <> Пользователи.ТекущийПользователь()
ИЛИ НЕ ЗначениеЗаполнено(ВладелецСертификата) Тогда
СпособВыбора = "СписокПользователей";
Иначе
СпособВыбора = "ТолькоДляМеня";
КонецЕсли;
ЗаполнитьПолныйСписок(ПользователиСертификата, ВладелецСертификата);
УправлениеФормой(ЭтотОбъект);
НастроитьУсловноеОформление();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СпособВыбораПриИзменении(Элемент)
УправлениеФормой(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОК(Команда)
Если РежимПросмотра Тогда
Результат = Неопределено;
Иначе
Результат = Новый Структура;
Результат.Вставить("Пользователи", Новый Массив);
Результат.Вставить("Пользователь", ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"));
Если СпособВыбора = "СписокПользователей" Тогда
Для Каждого СтрокаПользователя Из ТаблицаПользователей Цикл
Если СтрокаПользователя.Пометка Тогда
Результат.Пользователи.Добавить(СтрокаПользователя.Пользователь);
КонецЕсли;
КонецЦикла;
Иначе
Результат.Пользователь = ПользователиКлиент.ТекущийПользователь();
КонецЕсли;
КонецЕсли;
Закрыть(Результат);
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьПометку(Команда)
ИзменитьПометкиСписка(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПометитьВсе(Команда)
ИзменитьПометкиСписка(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ИзменитьПометкиСписка(ЗначениеПометки)
Для Каждого СтрокаПользователя Из ТаблицаПользователей Цикл
СтрокаПользователя.Пометка = ЗначениеПометки;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НастроитьУсловноеОформление()
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("BackColor");
ЭлементЦветаОформления.Значение = ЦветаСтиля.ДобавленныйРеквизитФон;
ЭлементЦветаОформления.Использование = Истина;
ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаПользователей.Основной");
ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбораДанных.ПравоеЗначение = Истина;
ЭлементОтбораДанных.Использование = Истина;
ЭлементПоляОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ЭлементПоляОформления.Поле = Новый ПолеКомпоновкиДанных("ТаблицаПользователей");
ЭлементПоляОформления.Использование = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПолныйСписок(ПользователиСертификата, ВладелецСертификата)
МассивПользователей = Новый Массив;
Если ПользователиСертификата <> Неопределено Тогда
МассивПользователей = ПользователиСертификата;
КонецЕсли;
Если ЗначениеЗаполнено(ВладелецСертификата)
И СпособВыбора = "СписокПользователей" Тогда
МассивПользователей.Добавить(ВладелецСертификата);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Пользователи.Ссылка КАК Пользователь,
| ВЫБОР
| КОГДА Пользователи.Ссылка В (&Пользователи)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК Пометка,
| ВЫБОР
| КОГДА Пользователи.Ссылка = &ВладелецСертификата
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК Основной
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| (НЕ Пользователи.ПометкаУдаления
| И НЕ Пользователи.Недействителен
| И (НЕ Пользователи.Служебный
| И Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификаторПользователяИБ
| ИЛИ Пользователи.Ссылка = &ТекущийПользователь)
| ИЛИ Пользователи.Ссылка В (&Пользователи))
|
|УПОРЯДОЧИТЬ ПО
| Пользователи.Наименование";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Пользователи", МассивПользователей);
Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
Запрос.УстановитьПараметр("ПустойИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Запрос.УстановитьПараметр("ВладелецСертификата", ВладелецСертификата);
ТаблицаПользователей.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УправлениеФормой(КонтекстФормы)
ЭлементыФормы = КонтекстФормы.Элементы;
Если КонтекстФормы.РежимПросмотра Тогда
ЭлементыФормы.ТаблицаПользователей.ТолькоПросмотр = Истина;
ЭлементыФормы.СпособВыбора.ТолькоПросмотр = Истина;
ЭлементыФормы.СпособВыбораСписок.ТолькоПросмотр = Истина;
Иначе
ЭлементыФормы.ТаблицаПользователей.ТолькоПросмотр = НЕ КонтекстФормы.СпособВыбора = "СписокПользователей";
КонецЕсли;
ЭлементыФормы.ПользователиПометитьВсе.Доступность = НЕ ЭлементыФормы.ТаблицаПользователей.ТолькоПросмотр;
ЭлементыФормы.ПользователиОтменитьПометку.Доступность = НЕ ЭлементыФормы.ТаблицаПользователей.ТолькоПросмотр;
КонецПроцедуры
#КонецОбласти
@@ -747,10 +747,9 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>37</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<horizontalStretch>true</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
@@ -759,23 +758,20 @@
<choiceHistoryOnInput>DontUse</choiceHistoryOnInput>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГоризонтальнаяГруппа</name>
<id>259</id>
<items xsi:type="form:FormField">
<name>Пользователь</name>
<id>171</id>
<name>Пользователи</name>
<id>273</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Пользователь</segments>
<segments>ПредставлениеПользователей</segments>
</dataPath>
<extendedTooltip>
<name>ПользовательРасширеннаяПодсказка</name>
<id>173</id>
<name>ПользователиРасширеннаяПодсказка</name>
<id>275</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -784,8 +780,8 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПользовательКонтекстноеМеню</name>
<id>172</id>
<name>ПользователиКонтекстноеМеню</name>
<id>274</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
@@ -794,14 +790,19 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>37</width>
<handlers>
<event>StartChoice</event>
<name>ПользователиНачалоВыбора</name>
</handlers>
<handlers>
<event>Opening</event>
<name>ПользователиОткрытие</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>true</choiceButton>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
@@ -851,35 +852,6 @@
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Горизонтальная группа</value>
</title>
<extendedTooltip>
<name>ГоризонтальнаяГруппаРасширеннаяПодсказка</name>
<id>260</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Поля</value>
@@ -904,36 +876,6 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Горизонтальная группа 1</value>
</title>
<horizontalStretch>false</horizontalStretch>
<extendedTooltip>
<name>ГоризонтальнаяГруппа1РасширеннаяПодсказка</name>
<id>211</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ДляЭлектроннойПодписиИРасшифровки</name>
<id>221</id>
@@ -976,7 +918,9 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<choiceButton>false</choiceButton>
<createButton>true</createButton>
<listChoiceMode>true</listChoiceMode>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
@@ -1026,7 +970,6 @@
<key>ru</key>
<value>Настройки закрытого ключа (для создания электронных подписей или расшифровки данных)</value>
</title>
<width>60</width>
<extendedTooltip>
<name>ДляЭлектроннойПодписиИРасшифровкиРасширеннаяПодсказка</name>
<id>222</id>
@@ -1048,6 +991,36 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Горизонтальная группа 1</value>
</title>
<horizontalStretch>false</horizontalStretch>
<extendedTooltip>
<name>ГоризонтальнаяГруппа1РасширеннаяПодсказка</name>
<id>211</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
@@ -1157,6 +1130,59 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаСменитьПинКод</name>
<id>269</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСменитьПинКодРасширеннаяПодсказка</name>
<id>270</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.СменитьПинКод</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаСброситьПароль</name>
<id>271</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСброситьПарольРасширеннаяПодсказка</name>
<id>272</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.СброситьПароль</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1315,6 +1341,10 @@
</items>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>NotificationProcessing</event>
<name>ОбработкаОповещения</name>
</handlers>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
@@ -1505,6 +1535,35 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СертификатОблачнойПодписи</name>
<id>11</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПредставлениеПользователей</name>
<title>
<key>ru</key>
<value>Пользователи</value>
</title>
<id>12</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>СертификатОтозван</name>
<title>
@@ -1657,6 +1716,50 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>СменитьПинКод</name>
<title>
<key>ru</key>
<value>Сменить пин-код</value>
</title>
<id>8</id>
<toolTip>
<key>ru</key>
<value>Сменить пин код</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>СменитьПинКод</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>СброситьПароль</name>
<title>
<key>ru</key>
<value>Сбросить пароль в памяти</value>
</title>
<id>9</id>
<toolTip>
<key>ru</key>
<value>Сбросить пароль</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>СброситьПароль</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel>
<cmiFragmentRecord>
@@ -14,6 +14,14 @@
ЭлектроннаяПодписьСлужебный.НастроитьПояснениеВводаПароля(ЭтотОбъект,
Элементы.УсиленнаяЗащитаЗакрытогоКлюча.Имя);
СертификатОблачнойПодписи = ИнформацияОблачнойПодписи(Объект.Программа);
ЗаполнитьСписокПрограммСервер();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяОблачнаяПодпись")
И ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
Элементы.Программа.Заголовок = НСтр("ru = 'Программа или сервис'");
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
Возврат;
КонецЕсли;
@@ -56,6 +64,8 @@
Возврат;
КонецЕсли;
ОформитьСписокПользователей();
КонецПроцедуры
&НаСервере
@@ -86,6 +96,16 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Запись_ПрограммыЭлектроннойПодписиИШифрования"
ИЛИ ИмяСобытия = "Запись_УчетнойЗаписиDSS" Тогда
ЗаполнитьСписокПрограммСервер();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
@@ -129,6 +149,22 @@
КонецПроцедуры
&НаКлиенте
Процедура ПользователиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьСписокПользователей(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПользователиОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьСписокПользователей(Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -216,6 +252,28 @@
КонецПроцедуры
&НаКлиенте
Процедура СброситьПароль(Команда)
ЭлектроннаяПодписьСлужебныйКлиент.СброситьПарольВПамяти(Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура СменитьПинКод(Команда)
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
ПредставлениеОтпечатка = МодульСервисКриптографииDSSКлиентСервер.ТрансформироватьОтпечаток(Объект.Отпечаток);
ОписаниеСледующее = Новый ОписаниеОповещения("ПослеСменыПинКода", ЭтотОбъект);
МодульСервисКриптографииDSSКлиент.СменитьПинКодСертификата(
ОписаниеСледующее,
Объект.Программа,
Новый Структура("Отпечаток", ПредставлениеОтпечатка));
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -262,17 +320,20 @@
КонецЕсли;
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
Если Объект.Добавил <> Пользователи.ТекущийПользователь()
И Объект.Пользователь <> Пользователи.ТекущийПользователь() Тогда
ЭтоАвтор = Объект.Добавил = Пользователи.ТекущийПользователь();
СертификатДоступен = СертификатДоступенПользователю();
Если НЕ ЭтоАвтор И НЕ СертификатДоступен Тогда
// Обычный пользователь может изменять только свои сертификаты.
ТолькоПросмотр = Истина;
Иначе
// Обычный пользователь не может изменить права доступа.
Элементы.Добавил.ТолькоПросмотр = Истина;
Если Объект.Добавил <> Пользователи.ТекущийПользователь() Тогда
Если НЕ СертификатДоступен Тогда
// Обычный пользователь не может изменять реквизит Пользователь,
// если не он добавил сертификат.
Элементы.Пользователь.ТолькоПросмотр = Истина;
Элементы.Пользователи.ТолькоПросмотр = Истина;
Элементы.Пользователи.КнопкаОткрытия = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -361,8 +422,185 @@
Процедура ОбновитьВидимостьЭлементаУсиленнаяЗащитаЗакрытогоКлюча(Форма)
Форма.Элементы.УсиленнаяЗащитаЗакрытогоКлюча.Видимость =
Форма.Объект.Программа <> Форма.ПрограммаОблачногоСервиса;
Форма.Объект.Программа <> Форма.ПрограммаОблачногоСервиса
И НЕ Форма.СертификатОблачнойПодписи.ОблачнаяПодпись;
Форма.Элементы.ФормаСменитьПинКод.Видимость = Форма.СертификатОблачнойПодписи.ОблачнаяПодпись;
КонецПроцедуры
&НаКлиенте
Процедура ОформитьСписокПользователей()
КоличествоПользователей = Объект.Пользователи.Количество();
Если КоличествоПользователей = 1 Тогда
ПредставлениеПользователей = СокрЛП(Объект.Пользователи[0].Пользователь);
ИначеЕсли КоличествоПользователей > 1 Тогда
ПредставлениеПользователей = НСтр("ru = 'Несколько пользователей'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка())
+ " (" + Формат(КоличествоПользователей, "ЧГ=0") + ")";
ИначеЕсли ЗначениеЗаполнено(Объект.Пользователь) Тогда
ПредставлениеПользователей = СокрЛП(Объект.Пользователь);
Иначе
ПредставлениеПользователей = НСтр("ru = 'Не указаны'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПользователейЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
Если РезультатВыбора <> Неопределено И ТипЗнч(РезультатВыбора) = Тип("Структура") Тогда
Объект.Пользователи.Очистить();
Объект.Пользователь = РезультатВыбора.Пользователь;
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицуИзМассива(Объект.Пользователи, РезультатВыбора.Пользователи, "Пользователь");
ОформитьСписокПользователей();
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеСменыПинКода(РезультатВызова, ДополнительныеПараметры) Экспорт
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
Если РезультатВызова.Выполнено Тогда
ПоказатьПредупреждение(Неопределено,
НСтр("ru = 'Смена пин-кода выполнена успешно.'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()), 30);
ИначеЕсли НЕ МодульСервисКриптографииDSSКлиентСервер.ЭтоОшибкаОтказа(РезультатВызова.Ошибка) Тогда
МодульСервисКриптографииDSSКлиент.ВывестиОшибку(Неопределено, РезультатВызова.Ошибка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСписокПользователей(РежимПросмотра)
МассивПользователей = Новый Массив;
Для Каждого СтрокаТаблицы Из Объект.Пользователи Цикл
МассивПользователей.Добавить(СтрокаТаблицы.Пользователь);
КонецЦикла;
ОповещениеЗавершения = Новый ОписаниеОповещения("СписокПользователейЗавершение", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Пользователь", Объект.Пользователь);
ПараметрыФормы.Вставить("Пользователи", МассивПользователей);
ПараметрыФормы.Вставить("РежимПросмотра", РежимПросмотра ИЛИ ТолькоПросмотр);
ОткрытьФорму("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма.СписокПользователей",
ПараметрыФормы, ЭтотОбъект, , , , ОповещениеЗавершения);
КонецПроцедуры
&НаСервере
Функция СертификатДоступенПользователю()
ТекПользователь = Пользователи.ТекущийПользователь();
НашлиСтроки = Объект.Пользователи.НайтиСтроки(Новый Структура("Пользователь", ТекПользователь));
Результат = НашлиСтроки.Количество() > 0 ИЛИ Объект.Пользователь = ТекПользователь;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьСписокПрограммСервер()
СписокВыбора = Элементы.Программа.СписокВыбора;
СписокВыбора.Очистить();
ВесьСписок = ЗаполнитьСписокПрограмм(Объект.Программа);
Для каждого СтрокаСписка Из ВесьСписок Цикл
НоваяСтрока = СписокВыбора.Добавить(СтрокаСписка.Значение);
НоваяСтрока.Картинка = СтрокаСписка.Картинка;
НоваяСтрока.Представление = СтрокаСписка.Представление;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИнформацияОблачнойПодписи(ТекущаяПрограмма)
Результат = Новый Структура();
Результат.Вставить("ОблачнаяПодпись", Ложь);
Результат.Вставить("МенятьПинКод", Ложь);
Если ЗначениеЗаполнено(ТекущаяПрограмма)
И ТипЗнч(ТекущаяПрограмма) = ЭлектроннаяПодписьСлужебный.ПолучитьТипОблачнойПодписи() Тогда
МодульСервисКриптографииDSSСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебныйВызовСервера");
ДанныеУчетнойЗаписи = МодульСервисКриптографииDSSСлужебныйВызовСервера.ПолучитьНастройкиПользователя(ТекущаяПрограмма);
Результат.ОблачнаяПодпись = Истина;
Результат.МенятьПинКод = ДанныеУчетнойЗаписи.Политика.РежимПинКода <> "Запрещено";
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ЗаполнитьСписокПрограмм(Знач ВыбраннаяПрограмма)
ДобавитьКартинку = ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() ИЛИ ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса();
КартинкаКомпьютера = Новый Картинка;
КартинкаСервиса = Новый Картинка;
КартинкаОблака = Новый Картинка;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS");
КартинкаКомпьютера = МодульСервисКриптографииDSS.ПолучитьКартинкуПодсистемы("КомпьютерКлиент");
КартинкаСервиса = МодульСервисКриптографииDSS.ПолучитьКартинкуПодсистемы("ПодписьСервиса");
КартинкаОблака = МодульСервисКриптографииDSS.ПолучитьКартинкуПодсистемы("ПодписьОблако");
КонецЕсли;
Результат = Новый СписокЗначений;
ТекстЗапроса =
"ВЫБРАТЬ
| ПрограммыЭлектроннойПодписиИШифрования.Ссылка КАК Ссылка,
| ПрограммыЭлектроннойПодписиИШифрования.ЭтоПрограммаОблачногоСервиса КАК ЭтоПрограммаОблачногоСервиса,
| ПрограммыЭлектроннойПодписиИШифрования.ТипПрограммы КАК ТипПрограммы,
| ЛОЖЬ КАК ОблачнаяПодпись
|ИЗ
| Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрования";
Запрос = Новый Запрос(ТекстЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Результат.Добавить(Выборка.Ссылка);
Если Выборка.ЭтоПрограммаОблачногоСервиса И ДобавитьКартинку Тогда
НоваяСтрока.Картинка = КартинкаСервиса;
ИначеЕсли ДобавитьКартинку Тогда
НоваяСтрока.Картинка = КартинкаКомпьютера;
КонецЕсли;
КонецЦикла;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS");
МассивУчетныхЗаписей = МодульСервисКриптографииDSSСлужебный.ПолучитьВсеУчетныеЗаписи();
Для каждого СтрокаМассива Из МассивУчетныхЗаписей Цикл
НоваяСтрока = Результат.Добавить(СтрокаМассива.Ссылка);
Если ДобавитьКартинку Тогда
НоваяСтрока.Картинка = КартинкаОблака;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Результат.НайтиПоЗначению(ВыбраннаяПрограмма) = Неопределено Тогда
ПредставлениеПрограммы = ?(ЗначениеЗаполнено(ВыбраннаяПрограмма),
СокрЛ(ВыбраннаяПрограмма),
НСтр("ru = 'Не выбрана'"));
Результат.Добавить(ВыбраннаяПрограмма, ПредставлениеПрограммы);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -200,6 +200,38 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКонтейнер</name>
<id>538</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Контейнер</value>
</title>
<extendedTooltip>
<name>ГруппаКонтейнерРасширеннаяПодсказка</name>
<id>539</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаСертификатыШифрования</name>
<id>489</id>
@@ -219,6 +251,7 @@
<segments>СертификатыШифрования</segments>
</dataPath>
<defaultItem>true</defaultItem>
<skipOnInput>true</skipOnInput>
<titleLocation>None</titleLocation>
<excludedCommands>Change</excludedCommands>
<excludedCommands>Copy</excludedCommands>
@@ -305,6 +338,7 @@
<userVisible>
<common>true</common>
</userVisible>
<skipOnInput>true</skipOnInput>
<extendedTooltip>
<name>СертификатыШифрованияДобавитьРасширеннаяПодсказка</name>
<id>484</id>
@@ -873,14 +907,47 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:FormGroup">
<name>ГруппаКомандыФормы</name>
<id>526</id>
<items xsi:type="form:FormGroup">
<name>ГруппаКомандыПодтверждения</name>
<id>528</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<extendedTooltip>
<name>ГруппаКомандыПодтвержденияРасширеннаяПодсказка</name>
<id>529</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаОсновныеКоманды</name>
<id>530</id>
<items xsi:type="form:Button">
<name>ФормаЗашифровать</name>
<id>307</id>
<id>532</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -888,7 +955,7 @@
</userVisible>
<extendedTooltip>
<name>ФормаЗашифроватьРасширеннаяПодсказка</name>
<id>308</id>
<id>533</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -906,7 +973,7 @@
</items>
<items xsi:type="form:Button">
<name>ФормаЗакрыть</name>
<id>303</id>
<id>534</id>
<title>
<key>ru</key>
<value>Отмена</value>
@@ -916,9 +983,10 @@
<userVisible>
<common>true</common>
</userVisible>
<skipOnInput>true</skipOnInput>
<extendedTooltip>
<name>ФормаЗакрытьРасширеннаяПодсказка</name>
<id>304</id>
<id>535</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -935,7 +1003,7 @@
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>448</id>
<id>536</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -943,7 +1011,7 @@
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>449</id>
<id>537</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -959,6 +1027,67 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Основные команды</value>
</title>
<horizontalStretch>false</horizontalStretch>
<groupHorizontalAlign>Right</groupHorizontalAlign>
<extendedTooltip>
<name>ГруппаОсновныеКомандыРасширеннаяПодсказка</name>
<id>531</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Команды</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
<name>ГруппаКомандыФормыРасширеннаяПодсказка</name>
<id>527</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<horizontalAlign>Right</horizontalAlign>
</autoCommandBar>
<handlers>
@@ -1073,7 +1202,7 @@
<name>СертификатПрограмма</name>
<id>9</id>
<valueType>
<types>CatalogRef.ПрограммыЭлектроннойПодписиИШифрования</types>
<types>DefinedType.ПрограммаЭлектроннойПодписи</types>
</valueType>
<view>
<common>true</common>
@@ -1335,7 +1464,7 @@
<name>ПерваяПрограммаНаСервере</name>
<id>19</id>
<valueType>
<types>CatalogRef.ПрограммыЭлектроннойПодписиИШифрования</types>
<types>DefinedType.ПрограммаЭлектроннойПодписи</types>
</valueType>
<view>
<common>true</common>
@@ -38,6 +38,16 @@
ЗаполнитьПрограммуШифрованияНаСервере();
КонецЕсли;
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодготовитьГруппуПодтверждения(ЭтотОбъект, "Шифрование",
"ПодборИзСправочника",
"ГруппаКонтейнер",
,
"ГруппаКомандыПодтверждения");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, ПолучитьОсновнойСертификат());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -51,6 +61,11 @@
ТекущийЭлемент = Элементы[ИмяПоляАктивизироватьПоУмолчанию];
КонецЕсли;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриОткрытии(ЭтотОбъект, Отказ, Ложь, ОписаниеДанных);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -77,6 +92,24 @@
ПодключитьОбработчикОжидания("ПриИзмененииСпискаСертификатов", 0.1, Истина);
КонецЕсли;
Если ВРег(ИмяСобытия) = ВРег("ПодтверждениеВыполнитьОсновнуюОперацию") И Источник = УникальныйИдентификатор Тогда
Если Параметр.Выполнено Тогда
СвойстваОблачнойПодписи = ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьСвойстваОблачнойПодписи(ОписаниеДанных);
ОповещениеПриПодтверждении = СвойстваОблачнойПодписи.ОповещениеПриПодтверждении;
Если ОповещениеПриПодтверждении = Неопределено Тогда
ЗашифроватьДанные(Новый ОписаниеОповещения("ЗашифроватьЗавершение", ЭтотОбъект));
Иначе
ВыполнитьОбработкуОповещения(ОповещениеПриПодтверждении, ЭтотОбъект);
КонецЕсли;
КонецЕсли;
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ПодтверждениеПодготовитьДанные") И Источник = УникальныйИдентификатор Тогда
ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьДанныеДляОблачнойПодписи(
Параметр.ОбработчикСледующий, Параметр.КонтекстФормы,
Параметр.ОписаниеДанных, Параметр.Данные, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -105,13 +138,26 @@
СертификатПриИзмененииНаСервере(ОтпечаткиСертификатовНаКлиенте);
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверитьНаОшибкуСертификата(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ФильтроватьСписокСпособов(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, "");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СертификатНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЭлектроннаяПодписьКлиент.СертификатНачалоВыбораСПодтверждением(Элемент,
Сертификат, СтандартнаяОбработка, Истина);
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВыбранныйСертификат", Сертификат);
ПараметрыФормы.Вставить("ДляШифрованияИРасшифровки", Истина);
ПараметрыФормы.Вставить("ВыполнятьНаСервере", ВыполнятьНаСервере);
ЭлектроннаяПодписьСлужебныйКлиент.ВыборСертификатаДляПодписанияИлиРасшифровки(ПараметрыФормы, Элемент);
КонецПроцедуры
@@ -143,6 +189,13 @@
СертификатПриИзмененииНаСервере(ОтпечаткиСертификатовНаКлиенте);
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверитьНаОшибкуСертификата(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ФильтроватьСписокСпособов(ЭтотОбъект);
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элементы.Сертификат, ОписаниеДанных, "");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -217,19 +270,21 @@
&НаКлиенте
Процедура Зашифровать(Команда)
Если Не Элементы.ФормаЗашифровать.Доступность Тогда
Возврат;
Если ЭлектроннаяПодписьСлужебныйКлиент.ЭтоОперацияОблачнойПодписи(ЭтотОбъект) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
Если МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверкаПередВыполнениемОперации(ЭтотОбъект, "") Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент.ВыполнитьНачальнуюОперациюСервиса(ЭтотОбъект, ОписаниеДанных, "");
КонецЕсли;
Если Не УказанНеизменяемыйНаборСертификатов
И Не ПроверитьЗаполнение() Тогда
Иначе
Если Не Элементы.ФормаЗашифровать.Доступность Тогда
Возврат;
КонецЕсли;
Элементы.ФормаЗашифровать.Доступность = Ложь;
ЗашифроватьДанные(Новый ОписаниеОповещения("ЗашифроватьЗавершение", ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
@@ -239,7 +294,7 @@
Элементы.ФормаЗашифровать.Доступность = Истина;
Если Результат = Истина Тогда
Если Результат = Истина И Открыта() Тогда
Закрыть(Истина);
КонецЕсли;
@@ -536,7 +591,8 @@
//
// Параметры:
// Контекст - Структура:
// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования
// * ОписаниеПрограммы - Структура:
// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
//
&НаКлиенте
Процедура ЗаполнитьПрограммуШифрованияЦиклНачало(Контекст)
@@ -566,8 +622,11 @@
// Продолжение процедуры ЗаполнитьПрограммуШифрования.
//
// Параметры:
// МенеджерКриптографии - МенеджерКриптографии
// - Неопределено
// Контекст - Структура:
// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования
// * ОписаниеПрограммы - Структура:
// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
//
&НаКлиенте
Процедура ЗаполнитьПрограммуШифрованияПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт
@@ -600,8 +659,11 @@
// Продолжение процедуры ЗаполнитьПрограммуШифрования.
//
// Параметры:
// ЗашифрованныеДанные - ДвоичныеДанные
// - Неопределено
// Контекст - Структура:
// * ОписаниеПрограммы - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования
// * ОписаниеПрограммы - Структура:
// ** Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
//
&НаКлиенте
Процедура ЗаполнитьПрограммуШифрованияПослеШифрования(ЗашифрованныеДанные, Контекст) Экспорт
@@ -674,14 +736,34 @@
&НаКлиенте
Процедура ПродолжитьОткрытиеПослеЗаполненияПрограммы(Результат, Контекст) Экспорт
МодульСервисКриптографииDSSПодтверждениеКлиент = Неопределено;
Если ЭлектроннаяПодписьСлужебныйКлиент.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
КонецЕсли;
Если БезПодтверждения Тогда
Если МодульСервисКриптографииDSSПодтверждениеКлиент <> Неопределено Тогда
ТребуетПодтверждения = МодульСервисКриптографииDSSПодтверждениеКлиент.ОблачнаяПодписьТребуетПодтверждения(ЭтотОбъект);
Если НЕ ТребуетПодтверждения Тогда
ОбработкаПослеПредупреждения = Неопределено;
ЗашифроватьДанные(Новый ОписаниеОповещения("ПродолжитьОткрытиеПослеШифрованияДанных", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
Иначе
ОбработкаПослеПредупреждения = Неопределено;
ЗашифроватьДанные(Новый ОписаниеОповещения("ПродолжитьОткрытиеПослеШифрованияДанных", ЭтотОбъект, Контекст));
Возврат;
КонецЕсли;
КонецЕсли;
Открыть();
Если МодульСервисКриптографииDSSПодтверждениеКлиент <> Неопределено Тогда
Если МодульСервисКриптографииDSSПодтверждениеКлиент.ПроверкаВыполненияНачальнойОперации(ЭтотОбъект, БезПодтверждения) Тогда
МодульСервисКриптографииDSSПодтверждениеКлиент.ВыполнитьНачальнуюОперациюСервиса(ЭтотОбъект, ОписаниеДанных, "");
КонецЕсли;
КонецЕсли;
ПродолжитьОткрытиеЗавершение(Контекст);
КонецПроцедуры
@@ -746,9 +828,7 @@
&НаКлиенте
Процедура ВыполнитьШифрованиеЗавершение(Результат, Контекст) Экспорт
Если Результат = Истина Тогда
ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Истина);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.ОбработкаЗавершения, Результат);
КонецПроцедуры
@@ -780,11 +860,23 @@
ЭлектроннаяПодписьСлужебный.СертификатПриИзмененииНаСервере(ЭтотОбъект, ОтпечаткиСертификатовНаКлиенте, Истина);
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSSПодтверждениеСервер = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSПодтверждениеСервер");
МодульСервисКриптографииDSSПодтверждениеСервер.ПодтверждениеПриИзмененииСертификата(ЭтотОбъект, ПолучитьОсновнойСертификат());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗашифроватьДанные(Оповещение)
Если ЭлектроннаяПодписьСлужебныйКлиент.ЭтоОперацияОблачнойПодписи(ЭтотОбъект) Тогда
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных,
Новый Структура("УчетнаяЗапись", ЭтотОбъект.НастройкиПользователя));
Иначе
ЭлектроннаяПодписьСлужебныйКлиент.УстановитьСвойстваОблачнойПодписи(ОписаниеДанных, Новый Структура("УчетнаяЗапись"));
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("Оповещение", Оповещение);
Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура);
@@ -831,7 +923,9 @@
ПараметрыВыполнения.Вставить("ИдентификаторФормы", Контекст.ИдентификаторФормы);
Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения);
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере()
И ВыполнятьНаСервере <> Ложь Тогда
Если ЗначениеЗаполнено(СертификатНаСервереОписаниеОшибки) Тогда
Результат = Новый Структура("Ошибка", СертификатНаСервереОписаниеОшибки);
СертификатНаСервереОписаниеОшибки = Новый Структура;
@@ -865,6 +959,10 @@
Иначе
Если Результат <> Неопределено Тогда
Контекст.ОшибкаНаСервере = Результат.Ошибка;
Если ВыполнятьНаСервере = Истина Тогда
ЗашифроватьДанныеПослеВыполненияНаСторонеКлиента(Новый Структура, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
// Попытка подписания на клиенте.
@@ -1103,4 +1201,65 @@
КонецПроцедуры
&НаСервере
Функция ПолучитьОсновнойСертификат()
Результат = Неопределено;
Если УказанНеизменяемыйНаборСертификатов Тогда
Если СертификатыШифрования.Количество() > 0 Тогда
Результат = СертификатыШифрования[0].Сертификат;
КонецЕсли;
Иначе
Результат = Сертификат;
КонецЕсли;
Возврат Результат;
КонецФункции
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработкаКоманды(Команда)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаКоманды(ЭтотОбъект, Команда, ОписаниеДанных, "");
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеПриИзменении(Элемент)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеПриИзменении(ЭтотОбъект, Элемент, ОписаниеДанных, "");
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеОбработчикОжидания()
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеОбработкаОжидания(ЭтотОбъект, ОписаниеДанных, "");
КонецПроцедуры
//@skip-warning
&НаКлиенте
Процедура Подключаемый_ПодтверждениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МодульСервисКриптографииDSSПодтверждениеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSПодтверждениеКлиент");
МодульСервисКриптографииDSSПодтверждениеКлиент.ПодтверждениеНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
@@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.10570.1001"></meta></head><body>
<p>Предназначен для управления <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаВыбора/Help">сертификатами</a> ключей электронной подписи и шифрования.</p>
<p>Электронная подпись - реквизит любого электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для подписи необходимо иметь <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">сертификат</a> ключа электронной подписи. Сертификат ключа электронной подписи можно получить с помощью криптографических сервисов (провайдеров) или операционной системы.</p>
<p>Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи документа и сертификата ключа электронной подписи. Если электронная подпись соответствует сертификату, то это является гарантией того, что документ не был изменен кем-либо с момента его подписания. Контроль неизменности электронного документа можно выполнить в любой момент времени.</p>
<p>Электронная подпись - реквизит любого электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для подписи необходимо иметь <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">сертификат</a> ключа электронной подписи. Сертификат ключа электронной подписи можно получить с помощью криптографических сервисов (провайдеров) или операционной системы.</p><p>
Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи документа и сертификата ключа электронной подписи. Если электронная подпись соответствует сертификату, то это является гарантией того, что документ не был изменен кем-либо с момента его подписания. Контроль неизменности электронного документа можно выполнить в любой момент времени.</p>
<p>С помощью электронной подписи можно:</p>
<ul><li>Подписывать объекты программы (например, поля <strong>Наименование</strong> и <strong>Краткое содержание</strong>);
</li>
@@ -16,6 +16,26 @@
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ДанныеЗаполнения = Неопределено Тогда
Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Программа = Неопределено Тогда
Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Иначе
@@ -396,7 +396,7 @@
<value>Программа</value>
</synonym>
<type>
<types>CatalogRef.ПрограммыЭлектроннойПодписиИШифрования</types>
<types>DefinedType.ПрограммаЭлектроннойПодписи</types>
</type>
<toolTip>
<key>ru</key>
@@ -564,6 +564,39 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<tabularSections uuid="0c38782c-6559-4f1c-88af-aa022285ffbd">
<producedTypes>
<objectType typeId="464fa35c-8333-4de7-8117-367e4fc712d4" valueTypeId="4b79bd44-b8f3-4214-9e85-23ace383f6d7"/>
<rowType typeId="65d6beae-74b4-420b-927a-5b062b4c89e9" valueTypeId="4bbbef85-6048-43a6-b721-3f703b569ee0"/>
</producedTypes>
<name>Пользователи</name>
<synonym>
<key>ru</key>
<value>Пользователи</value>
</synonym>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>LineNumber</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<attributes uuid="eed23203-924d-4092-a1a8-a7cdd72489e5">
<name>Пользователь</name>
<synonym>
<key>ru</key>
<value>Пользователь</value>
</synonym>
<type>
<types>CatalogRef.Пользователи</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataHistory>Use</dataHistory>
<fullTextSearch>Use</fullTextSearch>
</attributes>
</tabularSections>
<forms uuid="b0deb957-624b-4bcb-824c-76aedf1affe9">
<name>ФормаЭлемента</name>
<synonym>
@@ -716,6 +749,15 @@
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="3fa9aa34-382c-49fa-87d8-34bedcde5836">
<name>СписокПользователей</name>
<synonym>
<key>ru</key>
<value>Список пользователей</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаXMLDSIG</name>
<synonym>
@@ -32,22 +32,22 @@
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "ФормаНапечатана";
Элемент.Наименование = НСтр("ru='Форма напечатана'",ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Описание = НСтр("ru='Состояние, означающее, что печатная форма только печаталась.'") ;
Элемент.Наименование = НСтр("ru='Форма напечатана'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Описание = НСтр("ru='Состояние, означающее, что печатная форма только печаталась.'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Код = "000000001";
Элемент.РеквизитДопУпорядочивания = "1";
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "ОригиналыНеВсе";
Элемент.Наименование = НСтр("ru='Оригиналы не все'",ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Описание = НСтр("ru='Общее состояние для документа, у которого оригиналы печатных форм находятся в разных состояниях.'");
Элемент.Наименование = НСтр("ru='Оригиналы не все'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Описание = НСтр("ru='Общее состояние для документа, у которого оригиналы печатных форм находятся в разных состояниях.'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Код = "000000002";
Элемент.РеквизитДопУпорядочивания = "99998";
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "ОригиналПолучен";
Элемент.Наименование = НСтр("ru='Оригинал получен'",ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Описание = НСтр("ru='Состояние, означающее, что подписанный оригинал печатной формы есть в наличии.'");
Элемент.Наименование = НСтр("ru='Оригинал получен'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Описание = НСтр("ru='Состояние, означающее, что подписанный оригинал печатной формы есть в наличии.'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.Код = "000000003";
Элемент.РеквизитДопУпорядочивания = "99999";
@@ -74,7 +74,7 @@
// * НаименованиеПолное - Строка
// * КодАльфа2 - Строка
// * КодАльфа3 - Строка
// * Ссылка - СправочникаСсылка.СтраныМира
// * Ссылка - СправочникСсылка.СтраныМира
// Неопределено - страна не существует.
//
Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт
@@ -245,9 +245,27 @@
ДанныеКлассификатора = УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоКоду(СтранаМираСсылка.Ссылка.Код);
Если ДанныеКлассификатора <> Неопределено Тогда
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить("Справочник.СтраныМира");
ЭлементБлокировки.УстановитьЗначение("Ссылка", СтранаМираСсылка.Ссылка);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
СтранаМира = СтранаМираСсылка.Ссылка.ПолучитьОбъект();
ЗаполнитьЗначенияСвойств(СтранаМира, ДанныеКлассификатора);
ОбновлениеИнформационнойБазы.ЗаписатьДанные(СтранаМира);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(СтранаМираСсылка.Ссылка);
КонецЕсли;
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html;charset=utf-8" http-equiv="content-type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.17239"></meta></head><body>
<p>Основное назначение сценария - это выполнение <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> автоматически по заданному расписанию. Сценарий необходим для задания расписания и порядка отправки и получения данных. </p>
<p>Основное назначение сценария - это выполнение <a href="CommonForm.НастройкиСинхронизацииДанных/Help">синхронизации данных</a> автоматически по заданному расписанию. Сценарий необходим для задания расписания и порядка отправки и получения данных. </p>
<p>Не рекомендуется выполнять только отправку данных или только получение данных, хотя сценарий позволяет это сделать. Рекомендуется выполнять полноценную синхронизацию данных в одном сценарии.</p>
<h3>Настройка сценария синхронизации</h3>
<ul><li>Введите <strong>Наименование</strong> сценария. Необходимо указать наименования баз данных, участвующих в синхронизации, редакцию программы, для того чтобы все пользователи могли понять назначение данного сценария.
@@ -14,7 +14,7 @@
<p>Настройка сценария синхронизации данных состоит из следующих этапов:</p>
<ul><li>Настроить расписание выполнения сценария синхронизации данных.
</li><li>Выбрать информационные базы, для которых будет выполняться сценарий синхронизации данных.
</li><li>Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).</li></ul></li><li>После того как настроен сценарий синхронизации данных, около <a href="CommonForm.СинхронизацияДанных/Help">настройки синхронизации данных</a> в списке появляется значок <img src="StdPicture.ScheduledJob" width="16" height="16"></img>. Синхронизация данных производится по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>.</li></ul><h3>Включение выгрузки и загрузки данных</h3>
</li><li>Для каждой информационной базы выбрать способ подключения и выполняемое действие (отправка или получение).</li></ul></li><li>После того как настроен сценарий синхронизации данных, около <a href="CommonForm.НастройкиСинхронизацииДанных/Help">настройки синхронизации данных</a> в списке появляется значок <img src="StdPicture.ScheduledJob" width="16" height="16"></img>. Синхронизация данных производится по расписанию с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>.</li></ul><h3>Включение выгрузки и загрузки данных</h3>
<ul><li>
<div>С помощью выпадающего меню <strong>Включить/Отключить</strong> можно управлять выгрузкой и загрузкой данных.</div>
</li><li>
@@ -205,7 +205,7 @@
КонецПроцедуры
&НаКлиенте
Процедура УдалитьФайлНаКлиенте(ПутьКФайлу, ДополнительныеПараметры) Экспорт
Процедура УдалитьФайлНаКлиенте(ПутьКФайлу, ДополнительныеПараметры)
Результат = УдалитьФайл(ПутьКФайлу);
Если Результат.Успешно Тогда
ОбработатьУдалениеОчередногоФайлаЗавершение(ДополнительныеПараметры);
@@ -310,7 +310,7 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьУдалениеОчередногоФайлаЗавершение(ДополнительныеПараметры) Экспорт
Процедура ОбработатьУдалениеОчередногоФайлаЗавершение(ДополнительныеПараметры)
ОбработатьОчереднойФайлЗавершение(ДополнительныеПараметры);
@@ -0,0 +1,13 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>
<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 7.5pt; font-family: Verdana;">Предназначен для управления подключением к
сервисам облачной подписи. Для подключения к сервису необходимо указать данные </span><span lang="EN-US" style="font-size: 7.5pt; font-family: Verdana;">web</span><span style="font-size: 7.5pt; font-family: Verdana;">-адресов
и параметров подключения к нему. Это информация указывается в отдельном
справочнике <b>серверы облачной подписи</b>.
<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 6pt; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 7.5pt; font-family: Verdana;"> Справочник позволяет менять сервис, к которому
может подключаться пользователь, менять способы авторизации и дополнительную
информацию необходимую для работы с сервисом облачной подписи<o:p></o:p></span></p>
</body></html>
@@ -0,0 +1,142 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
// Возвращает реквизиты объекта, которые не рекомендуется редактировать
// с помощью обработки группового изменения реквизитов.
//
// Возвращаемое значение:
// Массив - список имен реквизитов объекта.
//
Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт
НеРедактируемыеРеквизиты = Новый Массив;
НеРедактируемыеРеквизиты.Добавить("Логин");
Возврат НеРедактируемыеРеквизиты;
КонецФункции
// СтандартныеПодсистемы.ВариантыОтчетов
// Определяет список команд отчетов.
//
// Параметры:
// КомандыОтчетов - ТаблицаЗначений - таблица с командами отчетов. Для изменения.
// См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
// Параметры - Структура - вспомогательные параметры. Для чтения.
// См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Если ПравоДоступа("Просмотр", Метаданные.Отчеты.СостояниеУчетнойЗаписиDSS) Тогда
Команда = КомандыОтчетов.Добавить();
Команда.Представление = НСтр("ru = 'Состояние учетной записи'");
Команда.МножественныйВыбор = Ложь;
Команда.Обработчик = "СервисКриптографииDSSКлиент.ПоказатьОтчетСостояниеУчетнойЗаписи";
Команда.ИмяПараметраФормы = "УчетнаяЗапись";
Команда.РежимЗаписи = "ЗаписыватьТолькоНовые";
Команда.Менеджер = "Отчет.СостояниеУчетнойЗаписиDSS";
Команда.РежимЗаписи = "Запись";
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВариантыОтчетов
// СтандартныеПодсистемы.УправлениеДоступом
// Параметры:
// Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЭтоАвторизованныйПользователь(Автор)";
КонецПроцедуры
// Конец СтандартныеПодсистемы.УправлениеДоступом
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если НЕ (ЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи() ИЛИ ЭлектроннаяПодпись.ИспользоватьШифрование()) Тогда
СтандартнаяОбработка = Ложь;
ВызватьИсключение НСтр("ru = 'Не включен режим использования электронной подписи'");
ИначеЕсли НЕ ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
СтандартнаяОбработка = Ложь;
ВызватьИсключение СервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки(Неопределено, "ПодсистемаОтключена");
ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда
СтандартнаяОбработка = Ложь;
Если Параметры.Свойство("Ключ") Тогда
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
Иначе
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаУчетнойЗаписи;
КонецЕсли;
ИначеЕсли ВидФормы = "ФормаВыбора" Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ВыборУчетнойЗаписи;
ИначеЕсли ВидФормы = "ФормаСписка" Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.СписокУчетныхЗаписей;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьДанныеСсылки(СсылкаСправочника) Экспорт
Результат = Новый Структура("Владелец, Логин");
Если НЕ СервисКриптографииDSSСлужебный.ПроверитьПраво("УчетныеЗаписиDSS") Тогда
Возврат Результат;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| УчетныеЗаписиDSS.Владелец КАК Владелец,
| УчетныеЗаписиDSS.Логин КАК Логин,
| УчетныеЗаписиDSS.Ссылка КАК Ссылка
|ИЗ
| Справочник.УчетныеЗаписиDSS КАК УчетныеЗаписиDSS
|ГДЕ
| УчетныеЗаписиDSS.Ссылка = &СсылкаСправочника";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("СсылкаСправочника", СсылкаСправочника);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(Результат, Выборка);
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -0,0 +1,107 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов
// Возвращает реквизиты объекта, которые не рекомендуется редактировать
// с помощью обработки группового изменения реквизитов.
//
// Возвращаемое значение:
// Массив - список имен реквизитов объекта.
//
Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт
НеРедактируемыеРеквизиты = Новый Массив;
НеРедактируемыеРеквизиты.Добавить("Логин");
НеРедактируемыеРеквизиты.Добавить("Автор");
Возврат НеРедактируемыеРеквизиты;
КонецФункции
// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Наименование = СокрЛП(Логин) + " на " + СокрЛП(Владелец);
Если НЕ ЭтоНовый() И НЕ Отказ Тогда
ДанныеСсылки = Справочники.УчетныеЗаписиDSS.ПолучитьДанныеСсылки(Ссылка);
Если ДанныеСсылки.Владелец <> Владелец
ИЛИ ДанныеСсылки.Логин <> Логин Тогда
СервисКриптографииDSSСлужебный.ОчиститьСписокСертификатов(Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
Логин = "";
ПервичнаяАутентификация = Неопределено;
СостояниеЗаявления = Перечисления.СостоянияЗаявленияУчетнойЗаписиDSS.НеПодготовлено;
СодержаниеЗаявления = Неопределено;
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
КлючиПроверки = СервисКриптографииDSSСлужебный.КлючиУникальностиСправочника("УчетныеЗаписиDSS");
Если ЗначениеЗаполнено(КлючиПроверки) Тогда
ДанныеКлюча = Новый Структура(КлючиПроверки);
ЗаполнитьЗначенияСвойств(ДанныеКлюча, ЭтотОбъект);
НашлиДубль = СервисКриптографииDSSСлужебный.ПроверитьДублированиеЛогинов(Ссылка, ДанныеКлюча);
Если ЗначениеЗаполнено(НашлиДубль) Тогда
ТекстСообщения = НСтр("ru = 'Обнаружена дублирующая запись в справочнике Учетные записи DSS:'") + " " + Логин;
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "Логин", "Объект", Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.ЭкземплярыСервераDSS") Тогда
Владелец = ДанныеЗаполнения;
КонецЕсли;
Автор = Пользователи.ТекущийПользователь();
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
@@ -0,0 +1,255 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="440ecfe8-72fd-447b-8680-c4a8c43f2c72">
<producedTypes>
<objectType typeId="d6fb0b00-7d33-4234-a568-8dd02500dbca" valueTypeId="f2f67d5e-248d-4391-9dc8-78eb18ad4306"/>
<refType typeId="91a4166a-f631-4402-902c-39617772e34f" valueTypeId="a7c2a238-46c4-450a-85f8-b3b59791ff9c"/>
<selectionType typeId="9a519d3e-79d9-4a8f-90bc-e2967338138c" valueTypeId="e8dd002b-99c3-4818-85d0-0e31eceac672"/>
<listType typeId="af286fdb-b2d4-40de-a1cc-581f997287df" valueTypeId="b8a98c40-dfa0-4a58-af8d-45cf7f18bd57"/>
<managerType typeId="3eaa1dd7-f4f2-4bdf-bc93-8329a16629be" valueTypeId="372d4bae-328f-4e90-9775-56275dfdf1e4"/>
</producedTypes>
<name>УчетныеЗаписиDSS</name>
<synonym>
<key>ru</key>
<value>Учетные записи DSS</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Catalog.УчетныеЗаписиDSS.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>PredefinedDataName</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Predefined</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Ref</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>DeletionMark</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>IsFolder</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Owner</name>
<synonym>
<key>ru</key>
<value>Сервер</value>
</synonym>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:ReferenceValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Parent</name>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Description</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Code</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<createOnInput>Use</createOnInput>
<includeHelpInContents>true</includeHelpInContents>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<objectPresentation>
<key>ru</key>
<value>Учетная запись облачной подписи</value>
</objectPresentation>
<listPresentation>
<key>ru</key>
<value>Учетные записи облачной подписи</value>
</listPresentation>
<levelCount>2</levelCount>
<foldersOnTop>true</foldersOnTop>
<owners>Catalog.ЭкземплярыСервераDSS</owners>
<descriptionLength>100</descriptionLength>
<codeType>String</codeType>
<codeAllowedLength>Variable</codeAllowedLength>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
<attributes uuid="5afe3a0f-1bbc-4f04-87b3-f98d54b65a42">
<name>Автор</name>
<synonym>
<key>ru</key>
<value>Автор</value>
</synonym>
<type>
<types>CatalogRef.Пользователи</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="ee9e8f50-4d4f-43aa-99eb-cda2308c903e">
<name>ВторичнаяАвторизация</name>
<synonym>
<key>ru</key>
<value>Вторичная авторизация</value>
</synonym>
<type>
<types>EnumRef.СпособыАвторизацииDSS</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="4ff043c1-6c0b-4889-a684-23da5a35b9c2">
<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="6fe56ecb-c969-4c03-8e6b-65395c29e817">
<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="48627a8d-b108-43b8-a58e-fd98e4220639">
<name>Логин</name>
<synonym>
<key>ru</key>
<value>Логин</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>50</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="2a8eb62d-2795-48ab-ae02-68527996f411">
<name>ПервичнаяАутентификация</name>
<synonym>
<key>ru</key>
<value>Первичная аутентификация</value>
</synonym>
<type>
<types>EnumRef.СпособыАвторизацииDSS</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="d3bf09be-0f21-4dc3-a525-1c4dc75928ea">
<name>СодержаниеЗаявления</name>
<synonym>
<key>ru</key>
<value>Содержание заявления</value>
</synonym>
<type>
<types>ValueStorage</types>
</type>
<toolTip>
<key>ru</key>
<value>Содержит заявление, как оно была оформлено в момент создания закрытого ключа.</value>
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="5ca880c5-7c34-4c31-a2b8-46265ddea7d4">
<name>СостояниеЗаявления</name>
<synonym>
<key>ru</key>
<value>Состояние заявления</value>
</synonym>
<type>
<types>EnumRef.СостоянияЗаявленияУчетнойЗаписиDSS</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:ReferenceValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
</mdclass:Catalog>
@@ -613,7 +613,8 @@
Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда
ПараметрыПриложения.Вставить(ИмяПараметра, Новый Массив);
КонецЕсли;
ПараметрыПриложения[ИмяПараметра].Добавить(ОписаниеОповещения);
ОбработчикОжиданияПередЗаписьюВФорме = ПараметрыПриложения[ИмяПараметра]; // Массив
ОбработчикОжиданияПередЗаписьюВФорме.Добавить(ОписаниеОповещения);
ПодключитьОбработчикОжидания("ВыполнитьПроверкуПередЗаписьюВФорме", 0.1, Истина);
Возврат;
@@ -690,11 +690,6 @@
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'"));
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество() > 0 Тогда
РаботаСФайламиКлиент.НапечататьФайлы(ВыделенныеСтроки, ЭтотОбъект.УникальныйИдентификатор);
@@ -834,13 +834,7 @@
&НаКлиенте
Процедура Печать(Команда)
Если Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент() Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'"));
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка)
Или Записать() Тогда
Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) Или Записать() Тогда
Файлы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Объект.Ссылка);
РаботаСФайламиКлиент.НапечататьФайлы(Файлы, ЭтотОбъект.УникальныйИдентификатор);
КонецЕсли;
@@ -1273,10 +1267,8 @@
Модифицированность = Ложь;
ОтобразитьИзменениеДанных(ЭтотОбъект.Объект.Ссылка, ВидИзмененияДанных.Изменение);
ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка);
Оповестить("Запись_Файл",
Новый Структура("ЭтоНовый", ФайлБылСоздан),
ЭтотОбъект.Объект.Ссылка);
ОповеститьОбИзменении(ЭтотОбъект.Объект.ВладелецФайла);
Оповестить("Запись_Файл", Новый Структура("ЭтоНовый", ФайлБылСоздан), ЭтотОбъект.Объект.Ссылка);
УстановитьДоступностьКомандСпискаЭП();
УстановитьДоступностьКомандСпискаШифрования();
@@ -766,8 +766,7 @@
// Очищает ответы и заполняет их вариантами ответов.
//
// Параметры:
// ЭлементарныйВопрос - ПланВидовХарактеристик.ВопросыДляАнкетирования - вопрос для которого будут заполнены его
// варианты ответов.
// ЭлементарныйВопрос - ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования.
//
&НаСервере
Процедура ОчиститьЗаполнитьВариантыОтветов(ЭлементарныйВопрос)
@@ -776,7 +775,7 @@
Возврат;
КонецЕсли;
НайденныеСтроки = Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос",ЭлементарныйВопрос));
НайденныеСтроки = Ответы.НайтиСтроки(Новый Структура("ЭлементарныйВопрос", ЭлементарныйВопрос));
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Ответы.Удалить(Ответы.Индекс(НайденнаяСтрока));
КонецЦикла;
@@ -334,14 +334,14 @@
Отказ = Истина;
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(НСтр("ru = 'Раздел'"));
СписокВыбора.Добавить(НСтр("ru = 'Простой вопрос'"));
СписокВыбора.Добавить(НСтр("ru = 'Комплексный вопрос'"));
СписокВыбора.Добавить(НСтр("ru = 'Условный вопрос'"));
СписокВыбора.Добавить(НСтр("ru = 'Табличный вопрос'"));
СписокВыбора.Добавить("Раздел", НСтр("ru = 'Раздел'"));
СписокВыбора.Добавить("Простой", НСтр("ru = 'Простой вопрос'"));
СписокВыбора.Добавить("Комплексный", НСтр("ru = 'Комплексный вопрос'"));
СписокВыбора.Добавить("Условный", НСтр("ru = 'Условный вопрос'"));
СписокВыбора.Добавить("Табличный", НСтр("ru = 'Табличный вопрос'"));
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыборТипаДобавляемогоЭлементаПриЗавершении", ЭтотОбъект);
СписокВыбора.ПоказатьВыборЭлемента(ОбработчикОповещенияОЗакрытии, НСтр("ru = 'Выберите тип добавляемого элемента.'"),СписокВыбора[0]);
СписокВыбора.ПоказатьВыборЭлемента(ОбработчикОповещенияОЗакрытии, НСтр("ru = 'Выберите тип добавляемого элемента.'"), СписокВыбора[0]);
КонецПроцедуры
@@ -579,10 +579,13 @@
КонецПроцедуры
// Добавляет новую строку в дерево формы.
// Родитель - СтрокаДереваАнкеты - элемент дерева значений формы, от которого отращивается новая ветка.
// ТипСтроки - Строка - Тип строки дерева.
//
// Параметры:
// Родитель - СтрокаДереваЗначений - элемент дерева значений формы, от которого отращивается новая ветка.
// ТипСтроки - Строка - тип строки дерева.
//
// Возвращаемое значение:
// Строка - новая строка дерева.
// Строка
//
&НаКлиенте
Функция ДобавитьСтрокуДеревоАнкеты(Родитель,ТипСтроки,ТипВопроса = Неопределено)
@@ -846,18 +849,18 @@
// Добавляет вопрос в шаблон анкеты.
//
// Параметры:
// ТекущиеДанные - ДанныеФормыЭлементДерева - данные текущей строки дерева.
// ТипВопроса - Перечисления.ТипыВопросовШаблонаАнкет - тип добавляемого вопроса.
// ТекущиеДанные - ДанныеФормыЭлементДерева.
// ТипВопроса - ПеречислениеСсылка.ТипыВопросовШаблонаАнкеты.
//
&НаКлиенте
Процедура ДобавитьВопрос(ТекущиеДанные,ТипВопроса)
Процедура ДобавитьВопрос(ТекущиеДанные, ТипВопроса)
Родитель = ПолучитьРодителяДеревоАнкеты(ТекущиеДанные,Ложь,ТипВопроса);
Родитель = ПолучитьРодителяДеревоАнкеты(ТекущиеДанные, Ложь, ТипВопроса);
Если Родитель.ТипСтроки = "Корень" Тогда
ПоказатьПредупреждение(,НСтр("ru = 'Вопросы нельзя добавлять в корень анкеты.'"),15,НСтр("ru = 'Ошибка добавления'"));
ПоказатьПредупреждение(, НСтр("ru = 'Вопросы нельзя добавлять в корень анкеты.'"));
Возврат;
КонецЕсли;
ДобавитьСтрокуДеревоАнкеты(Родитель,"Вопрос",ТипВопроса);
ДобавитьСтрокуДеревоАнкеты(Родитель, "Вопрос", ТипВопроса);
КонецПроцедуры
@@ -995,23 +998,23 @@
Если НЕ ВыбранныйЭлемент = Неопределено Тогда
Если ВыбранныйЭлемент.Значение = НСтр("ru = 'Раздел'") Тогда
Если ВыбранныйЭлемент.Значение = "Раздел" Тогда
ДобавитьРаздел(Команды.ДобавитьРаздел);
ИначеЕсли ВыбранныйЭлемент.Значение = НСтр("ru = 'Простой вопрос'") Тогда
ИначеЕсли ВыбранныйЭлемент.Значение = "Простой" Тогда
ДобавитьПростойВопрос(Команды.ДобавитьПростойВопрос)
ИначеЕсли ВыбранныйЭлемент.Значение = НСтр("ru = 'Комплексный вопрос'") Тогда
ИначеЕсли ВыбранныйЭлемент.Значение = "Комплексный" Тогда
ДобавитьКомплексныйВопрос(Команды.ДобавитьПростойВопрос)
ИначеЕсли ВыбранныйЭлемент.Значение = НСтр("ru = 'Условный вопрос'") Тогда
ИначеЕсли ВыбранныйЭлемент.Значение = "Условный" Тогда
ДобавитьВопросСУсловием(Команды.ДобавитьВопросСУсловием)
ИначеЕсли ВыбранныйЭлемент.Значение = НСтр("ru = 'Табличный вопрос'") Тогда
ИначеЕсли ВыбранныйЭлемент.Значение = "Табличный" Тогда
ДобавитьТабличныйВопрос(Команды.ДобавитьТабличныйВопрос);
@@ -82,8 +82,10 @@
Процедура ПриОткрытии(Отказ)
Если ПоказыватьФормуВыбораШаблонов Тогда
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
УстановитьВыборФормата();
СформироватьПредставлениеВыбранныхФорматов();
КонецЕсли;
Иначе
ПараметрыОтправки = КонструкторПараметровОтправки();
ПараметрыОтправки.ДополнительныеПараметры.ПреобразовыватьHTMLДляФорматированногоДокумента = Ложь;
@@ -116,7 +118,7 @@
Если Элемент.ТекущиеДанные <> Неопределено Тогда
ШаблонВыбран = Элемент.ТекущиеДанные.Имя <> "<БезШаблона>";
Элементы.ФормаСформироватьИОтправить.Доступность = ШаблонВыбран;
Если ШаблонВыбран Тогда
Если ШаблонВыбран Или Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Если Элемент.ТекущиеДанные.ТипТекстаПисьма = ПредопределенноеЗначение("Перечисление.СпособыРедактированияЭлектронныхПисем.HTML") Тогда
Элементы.СтраницыПредпросмотра.ТекущаяСтраница = Элементы.СтраницаФорматированныйДокумент;
ПодключитьОбработчикОжидания("ОбновитьДанныеПредпросмотра", 0.2, Истина);
@@ -36,8 +36,7 @@
Элементы.ФормаСоздатьШаблонСообщенияSMS.Видимость = Ложь;
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Заголовок = НСтр("ru='Создать'");
ШаблонДля = ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем();
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор,
"ШаблонДля", НСтр("ru = 'Электронного письма'"), ВидСравненияКомпоновкиДанных.Равно);
УстановитьОтборВСпискеШаблонов(Список, ШаблонДля);
КонецЕсли;
@@ -49,8 +48,7 @@
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Видимость = Ложь;
Элементы.ФормаСоздатьШаблонСообщенияSMS.Заголовок = НСтр("ru='Создать'");
ШаблонДля = ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS();
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор,
"ШаблонДля", НСтр("ru = 'Сообщения SMS'"), ВидСравненияКомпоновкиДанных.Равно);
УстановитьОтборВСпискеШаблонов(Список, ШаблонДля);
КонецЕсли;
@@ -76,7 +74,7 @@
&НаКлиенте
Процедура ШаблонДляФильтрОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
УстановитьОтборВСпискеШаблонов(ВыбранноеЗначение);
УстановитьОтборВСпискеШаблонов(Список, ВыбранноеЗначение);
КонецПроцедуры
@@ -160,15 +158,18 @@
ОткрытьФорму("Справочник.ШаблоныСообщений.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтборВСпискеШаблонов(Знач ВыбранноеЗначение)
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтборВСпискеШаблонов(Список, Знач ЗначениеОтбора)
Если ВыбранноеЗначение = ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ШаблонДля", НСтр("ru = 'Сообщения SMS'"), ВидСравненияКомпоновкиДанных.Равно);
ИначеЕсли ВыбранноеЗначение = ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ШаблонДля", НСтр("ru = 'Электронного письма'"), ВидСравненияКомпоновкиДанных.Равно);
Если ЗначениеОтбора = ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ПредназначенДляSMS", Истина, ВидСравненияКомпоновкиДанных.Равно);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ПредназначенДляЭлектронныхПисем", Ложь, ВидСравненияКомпоновкиДанных.Равно);
ИначеЕсли ЗначениеОтбора = ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ПредназначенДляSMS", Ложь, ВидСравненияКомпоновкиДанных.Равно);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ПредназначенДляЭлектронныхПисем", Истина, ВидСравненияКомпоновкиДанных.Равно);
Иначе
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "ШаблонДля");
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "ПредназначенДляSMS");
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "ПредназначенДляЭлектронныхПисем");
КонецЕсли;
КонецПроцедуры
@@ -1662,7 +1662,8 @@
//
// Параметры:
// Ссылка - ДокументСсылка - ссылка на владельца присоединенных файлов.
// ТипТекстаПисьма - Перечисление.СпособыРедактированияЭлектронныхПисем - для определения необходимости выполнения преобразований.
// ТипТекстаПисьма - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем - для определения необходимости
// выполнения преобразований.
// ТаблицаСоответствийИменВложенийИдентификаторам - ТаблицаЗначений - позволяет определить какому вложению
// соответствует какая картинка.
// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы из которого выполняется сохранение.
@@ -0,0 +1,21 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link></head><body>
<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 7.5pt; font-family: Verdana;">Предназначен для хранения настроек подключения
к сервисам облачной подписи (КриптоПро </span><span lang="EN-US" style="font-size: 7.5pt; font-family: Verdana;">DSS</span><span style="font-size: 7.5pt; font-family: Verdana;">)<o:p></o:p></span></p>
<p style="margin-top: 0cm; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 7.5pt; font-family: Verdana;"> Сервис
облачной подписи – это сервис на базе КриптоПро </span><span lang="EN-US" style="font-size: 7.5pt; font-family: Verdana;">DSS</span><span style="font-size: 7.5pt; font-family: Verdana;"> предоставляемый
провайдером. Данный сервис позволяет хранить сертификаты и закрытые ключи к ним
в «Облаке». С помощью «облачных» сертификатов пользователь может задействовать функции
подписания, шифрования, расшифровки данных практически с любого компьютера. Для
использования этого функционала не требуется установки криптопровайдеров и
сертификатов на локальный компьютер, достаточно предоставить данные для
авторизации на настроенном сервисе.<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom: 6pt; background-position: initial initial; background-repeat: initial initial;"><span style="font-size: 7.5pt; font-family: Verdana;"> К каждому серверу облачной подписи
привязываются реестр учетных записей этого сервиса, указываемые в справочнике
«Учетные записи облачной подписи»<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</body></html>
@@ -0,0 +1,87 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
// СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов
// Возвращает реквизиты объекта, которые разрешается редактировать
// с помощью обработки группового изменения реквизитов.
//
// Возвращаемое значение:
// Массив - список имен реквизитов объекта.
//
Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт
РедактируемыеРеквизиты = Новый Массив;
Возврат РедактируемыеРеквизиты;
КонецФункции
// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов
// ТехнологияСервиса.ВыгрузкаЗагрузкаДанных
// Возвращает реквизиты справочника, которые образуют естественный ключ для элементов справочника.
//
// Возвращаемое значение:
// Массив из Строка - массив имен реквизитов, образующих естественный ключ.
//
Функция ПоляЕстественногоКлюча() Экспорт
Результат = Новый Массив;
Результат.Добавить("АдресСервера");
Результат.Добавить("ИдентификаторЦИ");
Возврат Результат;
КонецФункции
// Конец ТехнологияСервиса.ВыгрузкаЗагрузкаДанных
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если НЕ (ЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи() ИЛИ ЭлектроннаяПодпись.ИспользоватьШифрование()) Тогда
СтандартнаяОбработка = Ложь;
ВызватьИсключение НСтр("ru = 'Не включен режим использования электронной подписи'");
ИначеЕсли НЕ ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
СтандартнаяОбработка = Ложь;
ВызватьИсключение СервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки(Неопределено, "ПодсистемаОтключена");
ИначеЕсли ВидФормы = "ФормаОбъекта" Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ФормаЭкземпляраСервераDSS;
ИначеЕсли ВидФормы = "ФормаВыбора" Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.ВыборЭкземпляровСервераDSS;
ИначеЕсли ВидФормы = "ФормаСписка" Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = Метаданные.Обработки.УправлениеПодключениемDSS.Формы.СписокЭкземпляровСервераDSS;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -0,0 +1,77 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2021, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПриКопировании(ОбъектКопирования)
ВнутреннийИдентификатор = "";
ИдентификаторЦИ = "";
Используется = Истина;
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ВнутреннийИдентификатор)
И НЕ ДополнительныеСвойства.Свойство("ПоставляемыеДанные") Тогда
ТекстСообщения = НСтр("ru = 'Поставляемые серверы облачной подписи предназначены для программного изменения.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "АдресСервера", "Объект", Отказ);
Отказ = Истина;
КонецЕсли;
Если ПустаяСтрока(Наименование) Тогда
Наименование = СокрЛП(АдресСервера);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
КлючиПроверки = СервисКриптографииDSSСлужебный.КлючиУникальностиСправочника("ЭкземплярыСервераDSS");
Если ЗначениеЗаполнено(КлючиПроверки)
И НЕ ДополнительныеСвойства.Свойство("ПоставляемыеДанные") Тогда
ДанныеКлюча = Новый Структура(КлючиПроверки);
ЗаполнитьЗначенияСвойств(ДанныеКлюча, ЭтотОбъект);
ЕстьПовтор = СервисКриптографииDSSСлужебный.ПроверитьДублированиеСерверов(Ссылка, ДанныеКлюча);
Если ЗначениеЗаполнено(ЕстьПовтор) Тогда
ТекстСообщения = НСтр("ru = 'Обнаружена дублирующая запись в справочнике Экземпляры сервера DSS:'") + " " + АдресСервера;
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "АдресСервера", "Объект");
КонецЕсли;
КонецЕсли;
ИдВерсии = СервисКриптографииDSSКлиентСервер.ИдентификаторВерсииСервера(ВерсияАПИ);
Если ИдВерсии > 1 Тогда
ПроверяемыеРеквизиты.Добавить("СервисАудита");
ПроверяемыеРеквизиты.Добавить("СервисОбработкиДокументов");
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
ВсеВерсии = СервисКриптографииDSSКлиентСервер.ПоддерживаемыеВерсии();
ТаймАут = 120;
ВерсияАПИ = ВсеВерсии[0];
Используется = Истина;
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
@@ -0,0 +1,429 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="041c364f-0498-494f-9e41-82cb416c0862">
<producedTypes>
<objectType typeId="a666d2bd-cbc7-42c9-8f91-eeceb502e963" valueTypeId="b4913d26-b034-48fb-a4e5-bb92510d37bd"/>
<refType typeId="9b8af6f5-16d4-48ae-bc48-ac3c96b54e7a" valueTypeId="c74a9bd3-58c3-4ac5-9778-c8f04c55f016"/>
<selectionType typeId="04105697-bbcf-4ff7-9b47-3251fdfb87f3" valueTypeId="22ab47dd-bc12-4133-8e73-100fcf9e5635"/>
<listType typeId="444d4508-9130-42a1-91a3-65cd4fa0fe0f" valueTypeId="06ee5bfe-1f2b-4d4d-b268-1b17a3b347cb"/>
<managerType typeId="56c20dae-daa1-4bcf-a409-6590e8221e4c" valueTypeId="8ae876a1-e3bf-4e57-9639-4e1cdc6a17df"/>
</producedTypes>
<name>ЭкземплярыСервераDSS</name>
<synonym>
<key>ru</key>
<value>Экземпляры сервера DSS</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Catalog.ЭкземплярыСервераDSS.StandardAttribute.Description</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>PredefinedDataName</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Predefined</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Ref</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>DeletionMark</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>IsFolder</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Owner</name>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Parent</name>
<fillFromFillingValue>true</fillFromFillingValue>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Description</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>Code</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<createOnInput>Use</createOnInput>
<includeHelpInContents>true</includeHelpInContents>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<objectPresentation>
<key>ru</key>
<value>Сервер облачной подписи</value>
</objectPresentation>
<listPresentation>
<key>ru</key>
<value>Серверы облачной подписи</value>
</listPresentation>
<levelCount>2</levelCount>
<foldersOnTop>true</foldersOnTop>
<descriptionLength>100</descriptionLength>
<codeType>String</codeType>
<codeAllowedLength>Variable</codeAllowedLength>
<defaultPresentation>AsDescription</defaultPresentation>
<editType>InDialog</editType>
<choiceMode>BothWays</choiceMode>
<attributes uuid="913830c8-da01-4b7e-9d83-d406c2fefd49">
<name>АдресСервера</name>
<synonym>
<key>ru</key>
<value>Адрес сервера</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>200</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="ca8c4c19-9f92-45a7-b5bd-1ae06e3c9171">
<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>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>30</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="5adaafcf-3d67-418d-b47d-d0d8c65f1f46">
<name>ИдентификаторЦИ</name>
<synonym>
<key>ru</key>
<value>Идентификатор ЦИ (центр идентификации)</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>50</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="8a0f16a1-63c4-4ea4-a2f1-7b08e75efbd5">
<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"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="f68ec923-89c8-4c83-80a2-2d5e096dbbd8">
<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="f278bdf8-543a-4427-b2f1-3670c61502ae">
<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"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="00ce0cd2-9840-49a0-b9df-dc64becd3e65">
<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="db6f11c0-8530-43c1-811a-48797be89ec1">
<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"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:StringValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="c2782a2b-f910-4d4d-ba1b-49ef7854bae0">
<name>СервисПроверки</name>
<synonym>
<key>ru</key>
<value>Сервис проверки</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>200</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="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="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>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<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="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>
<tabularSections uuid="32371dfd-c890-4bed-bd68-45db299c9caf">
<producedTypes>
<objectType typeId="40e49de1-d27b-4527-ad71-1e0f9f805cdd" valueTypeId="830a0cab-0cce-4d68-869e-8038548ffd48"/>
<rowType typeId="66dedd9a-95bc-445e-8af0-10105db60300" valueTypeId="d4189e92-2fb9-4d06-91fd-68a3cc0d255d"/>
</producedTypes>
<name>ОграничениеАвторизации</name>
<synonym>
<key>ru</key>
<value>Ограничение авторизации</value>
</synonym>
<standardAttributes>
<dataHistory>Use</dataHistory>
<name>LineNumber</name>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<attributes uuid="eeb298cf-8df3-41fe-bb48-9c83a24a8206">
<name>СпособАвторизации</name>
<synonym>
<key>ru</key>
<value>Способ авторизации</value>
</synonym>
<type>
<types>EnumRef.СпособыАвторизацииDSS</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataHistory>Use</dataHistory>
<fullTextSearch>Use</fullTextSearch>
</attributes>
</tabularSections>
</mdclass:Catalog>
@@ -440,28 +440,6 @@
</picture>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:FormGroup">
<name>Группа1</name>
<id>24</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>Группа1РасширеннаяПодсказка</name>
<id>25</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo">
<commandSource>Form</commandSource>
</extInfo>
</items>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
@@ -24,7 +24,7 @@
Если Не ЗначениеЗаполнено(Справочники.ЯзыкиПечатныхФорм.НайтиПоКоду(КодЯзыка)) Тогда
Язык = Справочники.ЯзыкиПечатныхФорм.СоздатьЭлемент();
Язык.Код = КодЯзыка;
Язык.Записать();
ОбновлениеИнформационнойБазы.ЗаписатьДанные(Язык);
КонецЕсли;
ЗафиксироватьТранзакцию();
@@ -12,6 +12,7 @@
<key>ru</key>
<value>Языки печатных форм</value>
</synonym>
<comment>АПК:1206</comment>
<useStandardCommands>true</useStandardCommands>
<inputByString>Catalog.ЯзыкиПечатныхФорм.StandardAttribute.Code</inputByString>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
@@ -124,6 +125,7 @@
<key>ru</key>
<value>Порядок</value>
</synonym>
<comment>АПК:58</comment>
<type>
<types>Number</types>
<numberQualifiers>
@@ -626,6 +626,10 @@
<metadata>ScheduledJob.СинхронизацияДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.ЗагрузитьРасширенияИзменяющиеСтруктуруДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>Constant.ДополнительныйЯзык1</metadata>
<use>DontUse</use>
@@ -41,8 +41,29 @@
Отбор = Новый Структура("Корреспондент", Корреспондент);
ЗначенияЗаполнения = Новый Структура("Корреспондент", Корреспондент);
РезультатПроверки = ЭтоОбменВРежимеСервисаЧерезWS(Корреспондент);
Если РезультатПроверки.РазделениеВключено Тогда
Если РезультатПроверки.ВидТранспортаПоУмолчанию = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WS")
Или РезультатПроверки.ВидТранспортаПоУмолчанию = ПредопределенноеЗначение("Перечисление.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим") Тогда
РазрешенныеНастройкиТранспорта = Новый Массив;
РазрешенныеНастройкиТранспорта.Добавить(РезультатПроверки.ВидТранспортаПоУмолчанию);
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("РазрешенныеНастройкиТранспорта", РазрешенныеНастройкиТранспорта);
Иначе
ТекстИсключения = НСтр("ru ='Настройка транспорта сообщений в режиме сервиса актуальна только для синхронизаций использующих ВЕБ-сервисы'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецЕсли;
ОбменДаннымиКлиент.ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор,
ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ПараметрыВыполненияКоманды.Источник);
ЗначенияЗаполнения, "НастройкиТранспортаОбменаДанными", ПараметрыВыполненияКоманды.Источник, , ПараметрыОткрытияФормы);
КонецПроцедуры
@@ -57,4 +78,14 @@
КонецФункции
&НаСервере
Функция ЭтоОбменВРежимеСервисаЧерезWS(Корреспондент)
РезультатПроверки = Новый Структура;
РезультатПроверки.Вставить("РазделениеВключено", ОбщегоНазначения.РазделениеВключено());
РезультатПроверки.Вставить("ВидТранспортаПоУмолчанию", РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(Корреспондент));
Возврат РезультатПроверки;
КонецФункции
#КонецОбласти
@@ -11,7 +11,10 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("ОбщаяФорма.СинхронизацияДанных");
ОткрытьФорму("ОбщаяФорма.НастройкиСинхронизацииДанных",,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
Loaded 100 of 910 files, more files were not shown because too many files have changed in this diff. Show more