3_1_10_206

This commit is contained in:
Компания 1С committed 2024-06-17 10:24:00 +03:00
1 parent 44a10b9181
commit f91290c6ec
229 files changed
+13743 -3175

No files matched your search

@@ -39,7 +39,7 @@
КонецЕсли; КонецЕсли;
НоваяСтрока = Языки.Добавить(); НоваяСтрока = Языки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ЯзыкКонфигурации); ЗаполнитьЗначенияСвойств(НоваяСтрока, ЯзыкКонфигурации);
НоваяСтрока.Имя = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", ""); НоваяСтрока.Имя = "Язык_" + ЯзыкКонфигурации.КодЯзыка;
КонецЦикла; КонецЦикла;
СформироватьПоляВводаНаРазныхЯзыках(Ложь, Параметры.ТолькоПросмотр); СформироватьПоляВводаНаРазныхЯзыках(Ложь, Параметры.ТолькоПросмотр);
@@ -138,7 +138,9 @@
Добавлять = Новый Массив; Добавлять = Новый Массив;
ТипСтрока = Новый ОписаниеТипов("Строка"); ТипСтрока = Новый ОписаниеТипов("Строка");
Для Каждого ЯзыкКонфигурации Из Языки Цикл Для Каждого ЯзыкКонфигурации Из Языки Цикл
Добавлять.Добавить(Новый РеквизитФормы(ЯзыкКонфигурации.Имя, ТипСтрока, , ЯзыкКонфигурации.Представление)); Добавлять.Добавить(Новый РеквизитФормы(ЯзыкКонфигурации.Имя, ТипСтрока, ,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Параметры прописи для языка %1'"),
ЯзыкКонфигурации.Представление)));
Добавлять.Добавить(Новый РеквизитФормы("ПодсказкаВвода" + ЯзыкКонфигурации.Имя, ТипСтрока, , Добавлять.Добавить(Новый РеквизитФормы("ПодсказкаВвода" + ЯзыкКонфигурации.Имя, ТипСтрока, ,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подсказка ввода для языка %1'"), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подсказка ввода для языка %1'"),
ЯзыкКонфигурации.Представление))); ЯзыкКонфигурации.Представление)));
@@ -128,11 +128,11 @@
| Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты
|ГДЕ |ГДЕ
| ВнешниеКомпоненты.Идентификатор = &Идентификатор | ВнешниеКомпоненты.Идентификатор = &Идентификатор
| ИЛИ ВнешниеКомпоненты.Версия = &Версия"; | ИЛИ ВнешниеКомпоненты.Идентификатор = &Идентификатор2 И ВнешниеКомпоненты.Версия ПОДОБНО ""3.1.0.%""";
Запрос = Новый Запрос(ТекстЗапроса); Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Идентификатор", "AddInNativeExtension"); Запрос.УстановитьПараметр("Идентификатор", "AddInNativeExtension");
Запрос.УстановитьПараметр("Версия", "3.1.0.1013"); Запрос.УстановитьПараметр("Идентификатор2", "ImageScan");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка")); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
@@ -264,38 +264,37 @@
ОбновитьПоддерживаемыеПлатформыКомпоненты = Истина; ОбновитьПоддерживаемыеПлатформыКомпоненты = Истина;
ЦелевыеПлатформы = РеквизитыКомпоненты.ЦелевыеПлатформы.Получить();
ДвоичныеДанныеКомпоненты = РеквизитыКомпоненты.ХранилищеКомпоненты.Получить(); ДвоичныеДанныеКомпоненты = РеквизитыКомпоненты.ХранилищеКомпоненты.Получить();
Если ТипЗнч(ДвоичныеДанныеКомпоненты) <> Тип("ДвоичныеДанные") Тогда Если ТипЗнч(ДвоичныеДанныеКомпоненты) <> Тип("ДвоичныеДанные") Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь; ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли; Иначе
ИнформацияОКомпонентеИзФайла = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла( ИнформацияОКомпонентеИзФайла = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(
ДвоичныеДанныеКомпоненты, Ложь); ДвоичныеДанныеКомпоненты, Ложь);
Если Не ИнформацияОКомпонентеИзФайла.Разобрано Тогда Если Не ИнформацияОКомпонентеИзФайла.Разобрано Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь; ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли; Иначе
Реквизиты = ИнформацияОКомпонентеИзФайла.Реквизиты; Реквизиты = ИнформацияОКомпонентеИзФайла.Реквизиты;
ЦелевыеПлатформы = РеквизитыКомпоненты.ЦелевыеПлатформы.Получить();
Если ЦелевыеПлатформы <> Неопределено И ОбщегоНазначения.КоллекцииИдентичны(ЦелевыеПлатформы, Реквизиты.ЦелевыеПлатформы) Тогда Если ЦелевыеПлатформы <> Неопределено И ОбщегоНазначения.КоллекцииИдентичны(ЦелевыеПлатформы,
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка); Реквизиты.ЦелевыеПлатформы) Тогда
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь; ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли; КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе Иначе
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь; ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли; КонецЕсли;
Если Не ОбновитьПоддерживаемыеПлатформыКомпоненты Если Не ОбновитьПоддерживаемыеПлатформыКомпоненты
И Не (ОбновитьПараметрыКомпонентыСканирования И (РеквизитыКомпоненты.Идентификатор = "AddInNativeExtension") И Не (ОбновитьПараметрыКомпонентыСканирования И (РеквизитыКомпоненты.Идентификатор = "AddInNativeExtension"
Или РеквизитыКомпоненты.Версия = "3.1.0.1013") Тогда Или РеквизитыКомпоненты.Идентификатор = ИдентификаторКомпонентыСканирования
И СтрНачинаетсяС(РеквизитыКомпоненты.Версия, "3.1.0."))) Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
@@ -318,8 +317,8 @@
КомпонентаОбъект.Идентификатор = ИдентификаторКомпонентыСканирования; КомпонентаОбъект.Идентификатор = ИдентификаторКомпонентыСканирования;
КонецЕсли; КонецЕсли;
Если ОбновитьПараметрыКомпонентыСканирования И РеквизитыКомпоненты.Версия = "3.1.0.1013" Тогда Если ОбновитьПараметрыКомпонентыСканирования И СтрНачинаетсяС(РеквизитыКомпоненты.Версия, "3.1.0.") Тогда
КомпонентаОбъект.Версия = "3.0.1.1013"; КомпонентаОбъект.Версия = СтрЗаменить(РеквизитыКомпоненты.Версия, "3.1.0.", "3.0.1.");
КонецЕсли; КонецЕсли;
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(КомпонентаОбъект); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(КомпонентаОбъект);
@@ -362,7 +361,7 @@
#КонецОбласти #КонецОбласти
Функция ОбновитьПараметрыКомпонентыСканирования(ВерсияПодсистемыНаНачалоОбновления) Функция ОбновитьПараметрыКомпонентыСканирования(ВерсияПодсистемыНаНачалоОбновления)
Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПодсистемыНаНачалоОбновления, "3.1.9.230") < 0 Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПодсистемыНаНачалоОбновления, "3.1.10.179") < 0
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами")
КонецФункции КонецФункции
@@ -47,9 +47,9 @@
<div>При необходимости для каждого <strong>Вида доступа</strong> можно задать список значений или групп значений, которые будут исключениями. Для этого в списке <strong>Разрешенные(Запрещенные) значения</strong> нажмите <strong>Добавить</strong>. Выберите исключения из предлагаемых приложением списков.</div> <div>При необходимости для каждого <strong>Вида доступа</strong> можно задать список значений или групп значений, которые будут исключениями. Для этого в списке <strong>Разрешенные(Запрещенные) значения</strong> нажмите <strong>Добавить</strong>. Выберите исключения из предлагаемых приложением списков.</div>
<ul><li>В ряде случаев для упрощения настройки прав доступа, в списке разрешенных или запрещенных значений можно указывать не отдельные элементы, а целые группы элементов. Например, для вида доступа <strong>Демо: Группы Партнеров</strong> можно ограничить доступ в разрезе групп доступа партнеров, а не по каждому партнеру в отдельности. Для этого необходимо определить список групп доступа партнеров, и у каждого партнера задать принадлежность к той или иной группе. Эти действия могут быть выполнены не только администратором, но и любым пользователем с соответствующими правами на редактирование списка партнеров.</li></ul></li> <ul><li>В ряде случаев для упрощения настройки прав доступа, в списке разрешенных или запрещенных значений можно указывать не отдельные элементы, а целые группы элементов. Например, для вида доступа <strong>Демо: Группы Партнеров</strong> можно ограничить доступ в разрезе групп доступа партнеров, а не по каждому партнеру в отдельности. Для этого необходимо определить список групп доступа партнеров, и у каждого партнера задать принадлежность к той или иной группе. Эти действия могут быть выполнены не только администратором, но и любым пользователем с соответствующими правами на редактирование списка партнеров.</li></ul></li>
<li>В некоторых группах доступа предусмотрена настройка прав с помощью вида доступа <strong>Пользователи</strong> (аналогично, вид доступа <strong>Внешние пользователи</strong> для внешних пользователей). Настройка может учитываться только в тех документах (и других объектах приложения), в полях которых могут быть указаны пользователи, получающие доступ к этим документам ("Ответственный", "Автор", "Исполнитель" и т.п.). <li>В некоторых группах доступа предусмотрена настройка прав с помощью вида доступа <strong>Пользователи</strong> (аналогично, вид доступа <strong>Внешние пользователи</strong> для внешних пользователей). Настройка может учитываться только в тех документах (и других объектах приложения), в полях которых могут быть указаны пользователи, получающие доступ к этим документам ("Ответственный", "Автор", "Исполнитель" и т.п.).
<ul><li>Для того чтобы дать участникам группы права доступа ко всем ограниченным данным, с которыми работает тот или иной пользователь, необходимо включить его в список разрешенных значений для вида доступа <strong>Пользователи</strong>. <ul><li>Для того чтобы участникам группы доступа дать права доступа ко всем ограниченным данным, с которыми работает тот или иной пользователь, необходимо включить его в список разрешенных значений для вида доступа <strong>Пользователи</strong>.</li>
</li> <li>При этом не нужно включать лишних пользователей, так как для этих видов доступа <b>авторизованный пользователь и его группы всегда разрешены</b>. То есть в своем сеансе каждый участник группы доступа будет разрешенным по виду доступа <b>Пользователи</b> в рамках этой группы доступа, как будут разрешены и его группы пользователей (в которые он входит).</li>
<li>Например, если доступ к документам <strong>Поступление товаров и услуг </strong>зависит от того, кто указан в поле <strong>Ответственный</strong>, тогда пользователь сможет записывать документы, у которых <strong>Ответственный</strong> совпадает с пользователем, или добавлен в список разрешенных для вида доступа <strong>Пользователи</strong>. Аналогично действует запрещающая настройка.</li></ul></li></ul><h3 style="font-size: 13.4399995803833px;">Отчеты</h3> <li>Например, если доступ к документам <strong>Поступление товаров и услуг </strong>зависит от того, кто указан в поле <strong>Ответственный</strong>, тогда пользователь сможет записывать документы, у которых <strong>Ответственный</strong> совпадает с ним или группой пользователей, в которую он входит, или добавлен в список разрешенных для вида доступа <strong>Пользователи</strong>. Аналогично действует запрещающая настройка (список исключений из состава разрешенных), но сам авторизованный пользователь и его группы пользователей остаются в составе разрешенных. </li></ul></li></ul><h3 style="font-size: 13.4399995803833px;">Отчеты</h3>
<ul><li> <ul><li>
<div>Просмотреть участников групп доступа можно с помощью отчета <b>Участники групп доступа</b>. Отчет может быть полезен, если в приложении большое количество пользователей и групп.  </div></li></ul><h3>См. также:</h3> <div>Просмотреть участников групп доступа можно с помощью отчета <b>Участники групп доступа</b>. Отчет может быть полезен, если в приложении большое количество пользователей и групп.  </div></li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>. </li></ul></body></html> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>. </li></ul></body></html>
@@ -1,10 +1,10 @@
<!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> <!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>Приложение позволяет настроить доступ пользователей к различным функциям, спискам и документам. Предусмотрены предопределенные наборы ролей. Кроме этого, имеется возможность самостоятельной настройки доступа. Управление доступом осуществляет администратор. При этом пользователь, назначенный ответственным в <a href="Catalog.ГруппыДоступа.Form.ФормаЭлемента/Help">группе доступа</a>, может изменять состав своей группы доступа.</p> <p>Приложение позволяет настроить доступ пользователей к различным функциям, спискам и документам. Предусмотрены предопределенные наборы прав. Кроме этого, имеется возможность самостоятельной настройки доступа. Управление доступом осуществляет администратор. При этом пользователь, назначенный ответственным в <a href="Catalog.ГруппыДоступа.Form.ФормаЭлемента/Help">группе доступа</a>, может изменять состав участников своей группы доступа.</p>
<p>Набор прав и возможности по их ограничению определяются заданным <a href="Catalog.ПрофилиГруппДоступа/Help">профилем групп доступа</a>. </p> <p>Набор прав (ролей) и возможности по их ограничению определяются заданным <a href="Catalog.ПрофилиГруппДоступа/Help">профилем групп доступа</a>. </p>
<p>Например, группа доступа "Менеджеры по продажам ПО делового назначения" с пользователями Иванов и Петров может ссылаться на профиль "Менеджер по продажам", в котором предусмотрена возможность ограничения по виду доступа <strong>Виды номенклатуры</strong>. Тогда если по этому виду доступа для всех значений указать вариант "Запрещены", а в список добавить вид номенклатуры "ПО делового назначения", то Иванову и Петрову будут доступны только те данные и операции, которые связаны с ПО делового назначения.</p> <p>Например, группа доступа "Менеджеры по продажам ПО делового назначения" с пользователями Иванов и Петров может ссылаться на профиль "Менеджер по продажам", в котором предусмотрена возможность ограничения по виду доступа <strong>Виды номенклатуры</strong>. Тогда если по этому виду доступа для всех значений указать вариант "Запрещены", а в список добавить вид номенклатуры "ПО делового назначения", то Иванову и Петрову будут доступны только те данные и операции, которые связаны с ПО делового назначения.</p>
<p>Рекомендуется задавать наименования групп таким образом, чтобы название отражало как суть профиля, так и смысл ограничений, заданных в группе.</p> <p>Рекомендуется задавать наименования групп таким образом, чтобы название отражало как суть профиля, так и смысл ограничений, заданных в группе.</p>
<p>В состав группы доступа могут быть включены как отдельные <a href="Catalog.Пользователи/Help">пользователи</a> (<a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a>), так и <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> (<a href="Catalog.ГруппыВнешнихПользователей/Help">группы внешних пользователей</a>). В случае большого количества пользователей, участвующих сразу в нескольких группах доступа, рекомендуется объединять пользователей в группы. Включение таких групп пользователей в группы доступа позволит избежать рутинного пересмотра состава пользователей в нескольких группах доступа.</p> <p>В состав группы доступа могут быть включены как отдельные <a href="Catalog.Пользователи/Help">пользователи</a> (<a href="Catalog.ВнешниеПользователи/Help">внешние пользователи</a>), так и <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> (<a href="Catalog.ГруппыВнешнихПользователей/Help">группы внешних пользователей</a>). В случае большого количества пользователей, участвующих сразу в нескольких группах доступа, рекомендуется объединять пользователей в группы пользователей. Включение таких групп пользователей в группы доступа позволит избежать рутинного пересмотра состава пользователей в нескольких группах доступа.</p>
<h3>Состав ролей пользователя</h3> <h3>Состав ролей пользователя</h3>
<ul><li>Состав ролей пользователя определяется приложением автоматически, исходя из того, в какие <a href="Catalog.ГруппыДоступа.Form.ФормаСписка/Help">группы доступа</a> он входит явно или косвенно (посредством групп пользователей), и обновляется каждый раз при изменении состава группы доступа или состава <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> (<a href="Catalog.ГруппыВнешнихПользователей.Form.ФормаЭлемента/Help">группы внешних пользователей</a>). <ul><li>Состав ролей пользователя определяется приложением автоматически, исходя из того, в какие <a href="Catalog.ГруппыДоступа.Form.ФормаСписка/Help">группы доступа</a> он входит явно или косвенно (посредством групп пользователей), и обновляется каждый раз при изменении состава группы доступа или состава <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> (<a href="Catalog.ГруппыВнешнихПользователей.Form.ФормаЭлемента/Help">группы внешних пользователей</a>).
</li> </li>
@@ -13,7 +13,7 @@
</li> </li>
<li>В этом случае его совокупные <a href="CommonForm.ПраваДоступа/Help">права доступа</a> складываются (объединяются по "или") из прав доступа каждой группы. Например, в группе доступа "Менеджеры по закупкам" пользователю разрешен просмотр документов "Поступления товаров" по организации "Далекая перспектива". В группе доступа "Менеджеры по продажам" ему разрешен ввод документов "Заказ покупателя" по организации "Новые технологии". <li>В этом случае его совокупные <a href="CommonForm.ПраваДоступа/Help">права доступа</a> складываются (объединяются по "или") из прав доступа каждой группы. Например, в группе доступа "Менеджеры по закупкам" пользователю разрешен просмотр документов "Поступления товаров" по организации "Далекая перспектива". В группе доступа "Менеджеры по продажам" ему разрешен ввод документов "Заказ покупателя" по организации "Новые технологии".
</li> </li>
<li>При этом следует учитывать, что объединяются не списки разрешенных значений, указанные в группах, а именно права доступа. Т.е. ошибочно считать, что в приведенном примере пользователь получит доступ на просмотр документов поступления товаров и на ввод документов "Заказы покупателей" одновременно по обеим организациям.</li></ul><h3>Группа доступа для администрирования</h3> <li>При этом следует учитывать, что объединяются не списки разрешенных значений, указанные в группах доступа, а именно права доступа. Т.е. ошибочно считать, что в приведенном примере пользователь получит доступ на просмотр документов поступления товаров и на ввод документов "Заказы покупателей" одновременно по обеим организациям.</li></ul><h3>Группа доступа для администрирования</h3>
<ul><li>Для целей администрирования приложения предусмотрена предопределенная группа доступа <strong>Администраторы</strong> с профилем <strong>Администратор</strong>. При добавлении пользователя в эту группу ему автоматически устанавливается роль <strong>Полные права</strong>. При этом если в приложении имеются другие пользователи с этой ролью, которые не входят в группу <strong>Администраторы</strong>, то у таких пользователей роль <strong>Полные права</strong> будет снята.</li></ul><h3>Предупреждение</h3> <ul><li>Для целей администрирования приложения предусмотрена предопределенная группа доступа <strong>Администраторы</strong> с профилем <strong>Администратор</strong>. При добавлении пользователя в эту группу ему автоматически устанавливается роль <strong>Полные права</strong>. При этом если в приложении имеются другие пользователи с этой ролью, которые не входят в группу <strong>Администраторы</strong>, то у таких пользователей роль <strong>Полные права</strong> будет снята.</li></ul><h3>Предупреждение</h3>
<ul><li>Не следует для настройки прав доступа использовать режим конфигурирования 1С:Предприятия.</li></ul><h3>См. также</h3> <ul><li>Не следует для настройки прав доступа использовать режим конфигурирования 1С:Предприятия.</li></ul><h3>См. также</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a></li></ul></body></html> <ul><li><a href="v8help://frame/form_common">Работа с формами</a></li></ul></body></html>
File diff suppressed because it is too large. Load diff
@@ -19,18 +19,23 @@
Процедура ПередЗаписью(Отказ) Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Возврат;
КонецЕсли;
Если ЭтоГруппа Тогда Если ЭтоГруппа Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра(); Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
Или Не ОбменДанными.Загрузка Тогда
СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, СтарыеЗначения = СтарыеЗначения();
"Ссылка, Профиль, ПометкаУдаления, Пользователи, ВидыДоступа, ЗначенияДоступа"); КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра();
Если Не Справочники.ВерсииРасширений.ВсеРасширенияПодключены() Тогда Если Не Справочники.ВерсииРасширений.ВсеРасширенияПодключены() Тогда
Справочники.ПрофилиГруппДоступа.ВосстановитьНесуществующиеВидыИЗначенияДоступа(СтарыеЗначения, ЭтотОбъект); Справочники.ПрофилиГруппДоступа.ВосстановитьНесуществующиеВидыИЗначенияДоступа(СтарыеЗначения, ЭтотОбъект);
@@ -85,8 +90,6 @@
|у предопределенной группы доступа Администраторы.'"); |у предопределенной группы доступа Администраторы.'");
КонецЕсли; КонецЕсли;
Если Не ЭтоГруппа Тогда
// Автоматическая установка реквизитов для персональной группы доступа. // Автоматическая установка реквизитов для персональной группы доступа.
Если ЗначениеЗаполнено(Пользователь) Тогда Если ЗначениеЗаполнено(Пользователь) Тогда
Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(); Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа();
@@ -99,7 +102,9 @@
// При снятии пометки удаления с группы доступа выполняется // При снятии пометки удаления с группы доступа выполняется
// снятие пометки удаления с профиля этой группы доступа. // снятие пометки удаления с профиля этой группы доступа.
Если Не ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Истина Тогда Если Не ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Истина
И Профиль = СтарыеЗначения.Профиль Тогда
НачатьТранзакцию(); НачатьТранзакцию();
Попытка Попытка
Блокировка = Новый БлокировкаДанных; Блокировка = Новый БлокировкаДанных;
@@ -108,12 +113,16 @@
Блокировка.Заблокировать(); Блокировка.Заблокировать();
ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления"); ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления");
ПометкаУдаленияПрофиля = ?(ПометкаУдаленияПрофиля = Неопределено, Ложь, ПометкаУдаленияПрофиля); ПометкаУдаленияПрофиля = ?(ТипЗнч(ПометкаУдаленияПрофиля) = Тип("Булево"), ПометкаУдаленияПрофиля, Ложь);
Если ПометкаУдаленияПрофиля Тогда Если ПометкаУдаленияПрофиля Тогда
УправлениеДоступом.ПроверитьИзменениеРазрешено(Профиль);
ЗаблокироватьДанныеДляРедактирования(Профиль); ЗаблокироватьДанныеДляРедактирования(Профиль);
УстановитьПривилегированныйРежим(Истина);
ПрофильОбъект = Профиль.ПолучитьОбъект(); ПрофильОбъект = Профиль.ПолучитьОбъект();
ПрофильОбъект.ДополнительныеСвойства.Вставить("СнятиеПометкиУдаленияПрофиляПриСнятииПометкиУдаленияГруппыДоступа", Ссылка);
ПрофильОбъект.ПометкаУдаления = Ложь; ПрофильОбъект.ПометкаУдаления = Ложь;
ПрофильОбъект.Записать(); ПрофильОбъект.Записать();
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли; КонецЕсли;
ЗафиксироватьТранзакцию(); ЗафиксироватьТранзакцию();
@@ -122,7 +131,6 @@
ВызватьИсключение; ВызватьИсключение;
КонецПопытки; КонецПопытки;
КонецЕсли; КонецЕсли;
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -133,11 +141,24 @@
// //
Процедура ПриЗаписи(Отказ) Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ЭтоГруппа Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ЭтоГруппа Тогда Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеУчастниковГруппДоступа(ЭтотОбъект, СтарыеЗначения);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеРазрешенныхЗначений(ЭтотОбъект, СтарыеЗначения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -200,6 +221,35 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Значения некоторых реквизитов и табличных частей группы доступа
// до ее изменения для использования в обработчике события ПриЗаписи.
//
// Возвращаемое значение:
// Структура:
// * Ссылка - СправочникСсылка.ГруппыДоступа
// * ПометкаУдаления - Булево
// * Профиль - СправочникСсылка.ПрофилиГруппДоступа
// * ПометкаУдаленияПрофиля - Булево
// * Пользователи - РезультатЗапроса
// * ВидыДоступа - РезультатЗапроса
// * ЗначенияДоступа - РезультатЗапроса
//
Функция СтарыеЗначения()
Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка,
"Ссылка, Профиль, ПометкаУдаления, Пользователи, ВидыДоступа, ЗначенияДоступа");
Результат.Вставить("ПометкаУдаленияПрофиля", Неопределено);
Если ЗначениеЗаполнено(Результат.Профиль) Тогда
Результат.ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
Результат.Профиль, "ПометкаУдаления");
КонецЕсли;
Возврат Результат;
КонецФункции
// Параметры: // Параметры:
// НовыеУчастники - СправочникТабличнаяЧасть.ГруппыДоступа.Пользователи // НовыеУчастники - СправочникТабличнаяЧасть.ГруппыДоступа.Пользователи
// СтарыеУчастники - РезультатЗапроса // СтарыеУчастники - РезультатЗапроса
@@ -1219,6 +1219,7 @@
Строка.ИмяВЕдЧисле = "ЖурналДокументов"; Строка.ИмяВЕдЧисле = "ЖурналДокументов";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Журнал документов'"); Строка.СинонимВЕдЧисле = НСтр("ru = 'Журнал документов'");
Строка.БезДанных = Истина; Строка.БезДанных = Истина;
Строка.ОбъектыРасширений = Истина;
Строка = Результат.Добавить(); Строка = Результат.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("706cf832-0ae5-45b5-8a4a-1f251d054f3b"); Строка.Идентификатор = Новый УникальныйИдентификатор("706cf832-0ae5-45b5-8a4a-1f251d054f3b");
@@ -1300,6 +1301,7 @@
Строка.Синоним = НСтр("ru = 'Бизнес-процессы'"); Строка.Синоним = НСтр("ru = 'Бизнес-процессы'");
Строка.ИмяВЕдЧисле = "БизнесПроцесс"; Строка.ИмяВЕдЧисле = "БизнесПроцесс";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Бизнес-процесс'"); Строка.СинонимВЕдЧисле = НСтр("ru = 'Бизнес-процесс'");
Строка.ОбъектыРасширений = Истина;
Строка = Результат.Добавить(); Строка = Результат.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("8d9153ad-7cea-4e25-9542-a557ee59fd16"); Строка.Идентификатор = Новый УникальныйИдентификатор("8d9153ad-7cea-4e25-9542-a557ee59fd16");
@@ -1307,6 +1309,7 @@
Строка.Синоним = НСтр("ru = 'Задачи'"); Строка.Синоним = НСтр("ru = 'Задачи'");
Строка.ИмяВЕдЧисле = "Задача"; Строка.ИмяВЕдЧисле = "Задача";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'"); Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'");
Строка.ОбъектыРасширений = Истина;
Для каждого Строка Из Результат Цикл Для каждого Строка Из Результат Цикл
Строка.ПорядокКоллекции = Результат.Индекс(Строка); Строка.ПорядокКоллекции = Результат.Индекс(Строка);
@@ -1357,6 +1360,17 @@
УстановитьПривилегированныйРежим(Ложь); УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь);
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()
И ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
Объект.ДополнительныеСвойства.Вставить("СтандартныеПодсистемыСтарыеЗначения",
ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Ссылка,
"ПометкаУдаления, Имя, Синоним"));
КонецЕсли;
// АПК:75-вкл
Если Объект.ОбменДанными.Загрузка Тогда Если Объект.ОбменДанными.Загрузка Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -1365,6 +1379,35 @@
КонецПроцедуры КонецПроцедуры
// Параметры:
// Объект - СправочникОбъект.ИдентификаторыОбъектовМетаданных
// - СправочникОбъект.ИдентификаторыОбъектовРасширений
//
Процедура ПриЗаписиОбъекта(Объект) Экспорт
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных()
И ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
МодульПрофилиГруппДоступа = ОбщегоНазначения.ОбщийМодуль("Справочники.ПрофилиГруппДоступа");
МодульПрофилиГруппДоступа.ЗарегистрироватьИзменениеРолейПрофилей(Объект,
Объект.ДополнительныеСвойства.СтандартныеПодсистемыСтарыеЗначения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
// АПК:75-вкл
Если Объект.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
// Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление. // Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление.
// //
// Параметры: // Параметры:
@@ -19,6 +19,13 @@
КонецПроцедуры КонецПроцедуры
Процедура ПриЗаписи(Отказ)
// Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре.
Справочники.ИдентификаторыОбъектовМетаданных.ПриЗаписиОбъекта(ЭтотОбъект);
КонецПроцедуры
Процедура ПередУдалением(Отказ) Процедура ПередУдалением(Отказ)
// Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре. // Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре.
@@ -19,6 +19,13 @@
КонецПроцедуры КонецПроцедуры
Процедура ПриЗаписи(Отказ)
// Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре.
Справочники.ИдентификаторыОбъектовМетаданных.ПриЗаписиОбъекта(ЭтотОбъект);
КонецПроцедуры
Процедура ПередУдалением(Отказ) Процедура ПередУдалением(Отказ)
// Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре. // Проверка ОбменДанными.Загрузка выполняется в вызываемой процедуре.
@@ -350,13 +350,13 @@
Элементы = Форма.Элементы; Элементы = Форма.Элементы;
Если Не ЗначениеЗаполнено(Форма.ДокументВид) Если Не ЗначениеЗаполнено(Форма.ДокументВид)
Или Форма.ДокументВид = "0" Или Форма.ДокументВид = "0" Тогда
Или Форма.ДокументВид = "91" Тогда
Форма.ДокументНомер = ""; Форма.ДокументНомер = "";
Форма.ДокументКемВыдан = ""; Форма.ДокументКемВыдан = "";
Форма.ДокументДатаВыдачи = ""; Форма.ДокументДатаВыдачи = "";
Форма.ДокументКодПодразделения = ""; Форма.ДокументКодПодразделения = "";
Форма.ДокументСрокДействия = ""; Форма.ДокументСрокДействия = "";
Элементы.ДокументНомер.Маска = "";
ИначеЕсли Форма.ДокументВид = "21" Тогда ИначеЕсли Форма.ДокументВид = "21" Тогда
Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Серия и номер'"); Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Серия и номер'");
Элементы.ДокументНомер.Маска = "99 99 999999"; Элементы.ДокументНомер.Маска = "99 99 999999";
@@ -373,7 +373,6 @@
&НаКлиентеНаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьВидаДокумента(Форма) Процедура ВидимостьВидаДокумента(Форма)
Форма.Элементы.ДокументКодПодразделения.Видимость = Форма.ПоказыватьПерсональныеДанные И Форма.ДокументВид = "21";
Форма.Элементы.ДокументСрокДействия.Видимость = Форма.ПоказыватьПерсональныеДанные И Форма.ДокументВид <> "21"; Форма.Элементы.ДокументСрокДействия.Видимость = Форма.ПоказыватьПерсональныеДанные И Форма.ДокументВид <> "21";
КонецПроцедуры КонецПроцедуры
@@ -529,7 +528,7 @@
СведенияОФизическомЛице = РеквизитыУчастникаДляХранения; СведенияОФизическомЛице = РеквизитыУчастникаДляХранения;
СведенияОФизическомЛице.Вставить("Ссылка", Ссылка); СведенияОФизическомЛице.Вставить("Ссылка", Ссылка);
Если ДокументВид = "00" Тогда Если ДокументВид = "0" Тогда
СведенияОФизическомЛице.ДокументВид = ""; СведенияОФизическомЛице.ДокументВид = "";
СведенияОФизическомЛице.ДокументКемВыдан = ""; СведенияОФизическомЛице.ДокументКемВыдан = "";
СведенияОФизическомЛице.ДокументКодПодразделения = ""; СведенияОФизическомЛице.ДокументКодПодразделения = "";
@@ -8277,7 +8277,6 @@
<name>Отправить</name> <name>Отправить</name>
</handler> </handler>
</action> </action>
<modifiesStoredData>true</modifiesStoredData>
<currentRowUse>Auto</currentRowUse> <currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse> <selectedRowsUse>Auto</selectedRowsUse>
</formCommands> </formCommands>
@@ -0,0 +1,28 @@
<!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>Предназначена для создания машиночитаемой доверенности.</p>
<p>Форма МЧД должна соответствовать требованиям, утвержденным приказом Минцифры России от 18.08.2021 №857 "Об утверждении единых требований к формам доверенностей, необходимым для использования квалифицированной электронной подписи".</p>
<p>Создать машиночитаемую доверенность своей организации можно в списке МЧД по кнопке <strong>Создать</strong>. Откроется форма регистрации машиночитаемой доверенности, в которой необходимо заполнить данные <strong>Срока действия</strong>, <strong>Доверителя</strong>, <strong>Представителя</strong>, <strong>Полномочий</strong>, а также <strong>Иных сведений</strong>.</p>
<h3>Ввод доверителя</h3>
<ul><li>Выберите <strong>Организацию </strong>- указывается юридическое лицо/иностранное юридическое лицо/индивидуальный предприниматель/ физическое лицо, передавшее другому лицу полномочия представлять его интересы перед третьими лицами.</li>
<li>Если нужной <strong>Организации</strong> нет в списке, то можно ввести реквизиты вручную, перейдя по гиперссылке <strong>Уточнить реквизиты</strong>. </li>
<li>Выберите лицо, действующее от имени юридического лица - доверителя, им может быть и <strong>Физическое лицо</strong>, и <strong>Организация</strong>. Если выбрана <strong>Организация</strong>, то в поле <strong>Лицо, действующее от имени управляющей компании </strong>нужно будет выбрать физическое лицо, действующее от имени управляющей организации.</li></ul><h3>Ввод представителя</h3>
<ul><li>В поле <strong>Представитель</strong> выберите или заполните вручную представителя, получившего полномочия представлять интересы другого лица перед третьими лицами по доверенности. Представителями могут выступать <strong>Контрагенты</strong>, <strong>Организации</strong> или <strong>Физические лица</strong>.</li>
<li>При выборе <strong>Контрагента</strong> также нужно указать физическое лицо, получившее полномочия.</li>
<li>Если нужного <strong>Представителя</strong> нет в списке, то с помощью кнопки <img src="StdPicture.CreateListItem"></img> можно создать нового <strong>Представителя</strong>, указав его реквизиты. </li>
<li>В поле <strong>Полномочия</strong>, перейдя по гиперссылке с помощью выпадающего списка можно выбрать вид полномочий:<br><ul><li><strong>Полномочия в машиночитаемом виде</strong> - выбираются из классификатора ФНС;</li>
<li><strong>Полномочия в текстовом виде</strong> - вводятся в произвольной форме;</li>
<li><strong>Полномочия не ограничены</strong> - будут указаны полномочия в текстовом виде с заголовком <strong>Все полномочия</strong>; </li>
<li>В поле <strong>Ограничения полномочий</strong> можно ввести ограничение, например, установить лимит по сумме. Ограничения подбираются из классификатора;</li>
<li>С помощью кнопки <strong>Сохранить</strong> <img src="StdPicture.SaveReportSettings"></img> можно сохранить установленную настройку полномочий;</li>
<li>С помощью кнопки <strong>Загрузить</strong> <img src="StdPicture.LoadReportSettings"></img> можно загрузить настройку полномочий из ранее сохраненных настроек.</li></ul></li></ul><h3><strong>Иные сведения</strong></h3>
<ul><li>Нажмите на <strong>Иные сведения</strong> для того чтобы указать иные сведения по соглашению участников электронного взаимодействия и по требованиям федеральных органов исполнительной власти. </li>
<li>Для того чтобы зарегистрировать МЧД в <strong>Распределенном реестре ФНС России</strong> нажмите на флажок. </li>
<li>В поле <strong>Единый регистрационный номер доверенности</strong> автоматически сгенерируется номер после подписания доверенности.  </li>
<li>Поле <strong>Наименование</strong> заполняется автоматически. </li></ul><h3>Подписание доверенности</h3>
<ul><li>
<div>С помощью кнопки <strong>Подписать</strong> подпишите доверенность <a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">сертификатом электронной подписи</a>, предварительно установленным на устройство. </div></li></ul><h3><strong>Регистрация в реестре</strong></h3>
<ul><li>С помощью кнопки <strong>Зарегистрировать в реестре</strong> зарегистрируйте доверенность в распределенном реестре ФНС. Регистрация становится доступной, если предварительно установить флажок <strong>Зарегистрировать в распределенном реестре ФНС</strong>;</li>
<li>После отправки на регистрацию статус доверенности примет значение <strong>Ожидает регистрации</strong>;</li>
<li>После регистрации и проверки ФНС статус доверенности с <strong>Ожидает регистрации</strong> поменяется на <strong>В реестре</strong>;</li>
<li>Если при регистрации были выявлены ошибки, например, при неверных данных <strong>Доверителя</strong> или <strong>Представителя</strong>, то статус доверенности примет значение <strong>Отменена</strong>.</li></ul><h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -1120,14 +1120,10 @@
Для Каждого Строка Из Объект.Доверители Цикл Для Каждого Строка Из Объект.Доверители Цикл
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов); РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
СтрокаОшибки = НСтр("ru = 'Организация %1 - %2'");
Иначе
СтрокаОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
КонецЕсли;
ШаблонОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки, ПредставлениеДоверителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Доверитель, РеквизитыОрганизации);
Строка.Доверитель, " %1: ");
ШаблонОшибки = ПредставлениеДоверителя + " - %1:";
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Доверитель"; Поле = "Доверитель";
@@ -1147,14 +1143,9 @@
Для Каждого Строка Из Объект.Представители Цикл Для Каждого Строка Из Объект.Представители Цикл
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов); РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда ПредставлениеПредставителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Представитель, РеквизитыОрганизации);
СтрокаОшибки = НСтр("ru = 'Организация %1 - %2'");
Иначе
СтрокаОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
КонецЕсли;
ШаблонОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки, ШаблонОшибки = ПредставлениеПредставителя + " - %1:";
Строка.Представитель, " %1: ");
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Представитель"; Поле = "Представитель";
@@ -1194,7 +1185,7 @@
Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Тогда Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Тогда
РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.РодительскаяДоверенность, "Представители, ДатаОкончания"); РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.РодительскаяДоверенность, "Представители, ДатаВыдачи, ДатаОкончания");
ПредставителиРодительскойДоверенности = РеквизитыРодительскойДоверенности.Представители.Выгрузить(); ПредставителиРодительскойДоверенности = РеквизитыРодительскойДоверенности.Представители.Выгрузить();
Если Объект.ДатаОкончания > РеквизитыРодительскойДоверенности.ДатаОкончания Тогда Если Объект.ДатаОкончания > РеквизитыРодительскойДоверенности.ДатаОкончания Тогда
@@ -1204,6 +1195,13 @@
Формат(РеквизитыРодительскойДоверенности.ДатаОкончания, "ДЛФ=D")),, "ДатаОкончания",, Отказ); Формат(РеквизитыРодительскойДоверенности.ДатаОкончания, "ДЛФ=D")),, "ДатаОкончания",, Отказ);
КонецЕсли; КонецЕсли;
Если Объект.ДатаВыдачи < РеквизитыРодительскойДоверенности.ДатаВыдачи Тогда
ОбщегоНазначения.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Дата начала действия не должна быть меньше, чем у родительской доверенности (%1)'"),
Формат(РеквизитыРодительскойДоверенности.ДатаВыдачи, "ДЛФ=D")),, "ДатаВыдачи",, Отказ);
КонецЕсли;
Для Каждого Строка Из ПредставителиРодительскойДоверенности Цикл Для Каждого Строка Из ПредставителиРодительскойДоверенности Цикл
РеквизитыОрганизации = Строка.ПредставительРеквизиты.Получить(); РеквизитыОрганизации = Строка.ПредставительРеквизиты.Получить();
@@ -1212,17 +1210,12 @@
КПП = ""; КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ШаблонОшибки = НСтр("ru = 'Организация %1 - %2'");
ИНН = РеквизитыОрганизации.ИНН; ИНН = РеквизитыОрганизации.ИНН;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП; КПП = РеквизитыОрганизации.КПП;
КонецЕсли; КонецЕсли;
Иначе Иначе
ШаблонОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ; ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли; КонецЕсли;
@@ -1245,26 +1238,8 @@
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов); РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
ИНН = ""; ИНН = "";КПП = "";
КПП = ""; ПредставлениеДоверителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Доверитель, РеквизитыОрганизации, ИНН, КПП);
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ШаблонОшибки = НСтр("ru = 'Организация %1 - %2'");
ИНН = РеквизитыОрганизации.ИНН;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
ШаблонОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
КонецЕсли;
ПредставлениеДоверителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Доверитель, ИНН, КПП);
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Доверитель"; Поле = "Доверитель";
@@ -1274,7 +1249,7 @@
Если ТаблицаДляПроверкиПервоначальнойДоверенности.НайтиСтроки( Если ТаблицаДляПроверкиПервоначальнойДоверенности.НайтиСтроки(
Новый Структура("ИНН, КПП", ИНН, КПП)).Количество() = 0 Тогда Новый Структура("ИНН, КПП", ИНН, КПП)).Количество() = 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеДоверителя, НСтр( ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2", ПредставлениеДоверителя, НСтр(
"ru = 'отсутствует в представителях первоначальной доверенности.'")); "ru = 'отсутствует в представителях первоначальной доверенности.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
@@ -1293,7 +1268,7 @@
СтруктураОтбора.Вставить("ТабличнаяЧасть", "Доверители"); СтруктураОтбора.Вставить("ТабличнаяЧасть", "Доверители");
Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеДоверителя, НСтр( ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2", ПредставлениеДоверителя, НСтр(
"ru = 'указано несколько доверителей с одним ИНН.'")); "ru = 'указано несколько доверителей с одним ИНН.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
Иначе Иначе
@@ -1309,25 +1284,8 @@
Для Каждого Строка Из Объект.Представители Цикл Для Каждого Строка Из Объект.Представители Цикл
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов); РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
ИНН = "";КПП = "";
ИНН = ""; ПредставлениеПредставителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Представитель, РеквизитыОрганизации, ИНН, КПП);
КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ШаблонОшибки = НСтр("ru = 'Организация %1 - %2'");
ИНН = РеквизитыОрганизации.ИНН;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
ШаблонОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Представитель"; Поле = "Представитель";
@@ -1335,8 +1293,6 @@
Поле = "ЛицоПредставителя"; Поле = "ЛицоПредставителя";
КонецЕсли; КонецЕсли;
ПредставлениеПредставителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Представитель, ИНН, КПП);
Если ЗначениеЗаполнено(ИНН) Тогда Если ЗначениеЗаполнено(ИНН) Тогда
СтруктураОтбора = Новый Структура; СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ИНН", ИНН); СтруктураОтбора.Вставить("ИНН", ИНН);
@@ -1345,7 +1301,7 @@
Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2",
ПредставлениеПредставителя, НСтр( ПредставлениеПредставителя, НСтр(
"ru = 'указано несколько представителей с одним ИНН.'")); "ru = 'указано несколько представителей с одним ИНН.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
@@ -1359,7 +1315,7 @@
СтруктураОтбора.Вставить("ТабличнаяЧасть", "Доверители"); СтруктураОтбора.Вставить("ТабличнаяЧасть", "Доверители");
Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2",
ПредставлениеПредставителя, НСтр( ПредставлениеПредставителя, НСтр(
"ru = 'указан представитель и доверитель с одним и тем же ИНН.'")); "ru = 'указан представитель и доверитель с одним и тем же ИНН.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ); ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
@@ -1373,26 +1329,37 @@
КонецФункции КонецФункции
&НаСервере &НаСервере
Функция ПредставлениеДоверителяПредставителяДляОшибки(Ссылка, ИНН, КПП) Функция ПредставлениеДоверителяПредставителяДляОшибки(Ссылка, РеквизитыОрганизации, ИНН = Неопределено, КПП = Неопределено)
Если ЗначениеЗаполнено(Ссылка) Тогда
ИНН = "";
КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ИНН = РеквизитыОрганизации.ИНН;
Наименование = РеквизитыОрганизации.НаименованиеПолное;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
Наименование = СтрШаблон("%1 %2 %3",
РеквизитыОрганизации.Фамилия, РеквизитыОрганизации.Имя, РеквизитыОрганизации.Отчество);
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(КПП) Тогда Если ЗначениеЗаполнено(КПП) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (ИНН: %2, КПП %3)'"), Ссылка, ИНН, КПП); НСтр("ru = '%1 (ИНН: %2, КПП %3)'"), ?(ЗначениеЗаполнено(Ссылка), Ссылка, Наименование), ИНН, КПП);
Иначе ИначеЕсли ЗначениеЗаполнено(ИНН) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (ИНН: %2)'"), Ссылка, ИНН); НСтр("ru = '%1 (ИНН: %2)'"), ?(ЗначениеЗаполнено(Ссылка), Ссылка, Наименование), ИНН);
КонецЕсли;
Иначе Иначе
Возврат ?(ЗначениеЗаполнено(Ссылка), Строка(Ссылка), Строка(Наименование));
КонецЕсли;
Если ЗначениеЗаполнено(КПП) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с ИНН: %1, КПП %2'"), ИНН, КПП);
Иначе
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с ИНН: %1'"), ИНН);
КонецЕсли;
КонецЕсли;
КонецФункции КонецФункции
&НаКлиенте &НаКлиенте
@@ -1677,6 +1644,11 @@
&НаКлиентеНаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста
Функция ВнешнийСтатус(Форма) Функция ВнешнийСтатус(Форма)
Если Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Просрочена") Тогда
Возврат Форма.Объект.Статус <> ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Черновик") Или Форма.ЗарегистрированаВДругомРеестре;
КонецЕсли;
Возврат МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ВнешниеСтатусы()[Форма.ТехническийСтатус] = Истина Возврат МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ВнешниеСтатусы()[Форма.ТехническийСтатус] = Истина
Или Форма.ЗарегистрированаВДругомРеестре; Или Форма.ЗарегистрированаВДругомРеестре;
КонецФункции КонецФункции
@@ -1883,11 +1855,11 @@
Если Не Форма.Просрочена И (Форма.Подписана Или Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")) Тогда Если Не Форма.Просрочена И (Форма.Подписана Или Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")) Тогда
Если Не Форма.Объект.РегистрироватьВРеестре Тогда Если Не Форма.Объект.РегистрироватьВРеестре Тогда
Форма.Элементы.ФормаОтправить.Видимость = Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре; Форма.Элементы.ФормаОтправить.Видимость = Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре И Не Форма.ТолькоПросмотр;
Форма.Элементы.ФормаОтправить.Заголовок = НСтр("ru='Зарегистрировать в реестре'"); Форма.Элементы.ФормаОтправить.Заголовок = НСтр("ru='Зарегистрировать в реестре'");
Иначе Иначе
Форма.Элементы.ФормаОтправить.Видимость = Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана") Форма.Элементы.ФормаОтправить.Видимость = Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")
Или Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре; Или Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре И Не Форма.ТолькоПросмотр;
Форма.Элементы.ФормаОтправить.Заголовок = ?(Форма.Объект.РегистрироватьВРеестре И Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре, Форма.Элементы.ФормаОтправить.Заголовок = ?(Форма.Объект.РегистрироватьВРеестре И Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре,
НСтр("ru='Зарегистрировать в реестрах'"), НСтр("ru='Зарегистрировать в реестре'")); НСтр("ru='Зарегистрировать в реестрах'"), НСтр("ru='Зарегистрировать в реестре'"));
КонецЕсли; КонецЕсли;
@@ -0,0 +1,57 @@
<!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>Предназначен для формирования и хранения машиночитаемых доверенностей.</p>
<p>Открывается по соответствующей команде в разделе <strong>Справочники</strong>. Также можно перейти по гиперссылке в <a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">настройках электронной подписи и шифрования</a>.</p>
<p><strong>Машиночитаемая доверенность (МЧД)</strong> - это электронный документ XML, заполненный по утвержденному формату, содержащий сведения о доверителе, представителе и его полномочиях. </p>
<li><strong>Доверитель</strong> - ответственное лицо, разрешающее выполнение операций другим организациям или физическим лицам по доверенности;
</li>
<li><strong>Представитель</strong> - организация или физическое лицо, принимающее на себя ответственность действовать от лица <strong>Доверителя</strong> в рамках вверяемых ему полномочий.
<p></p>
<p>Ведение списка МЧД может осуществлять как администратор, так и ответственный за список МЧД. Доверенность попадает в список разными способами:</p>
<ul><li>
<div><strong>Автоматически</strong> - путем загрузки из узла распределенного реестра ФНС;</div>
</li>
<li>
<div><strong>Вручную</strong> - путем создания и подписания МЧД в приложении;</div>
</li>
<li>
<div><strong>Вручную</strong> - путем загрузки МЧД контрагентов, полученных, например,по электронной почте.</div></li></ul><p>Список состоит из колонок: </p>
<ul><li>
<div><strong>Номер доверенности (в реестре)</strong> - единый регистрационный номер доверенности, генерируется автоматически при подписании или выгрузке в файл неподписанной доверенности.</div>
</li>
<li>
<div><strong>Наименование</strong> - наименование машиночитаемой доверенности.</div>
</li>
<li>
<div><strong>Дата выдачи</strong> - дата выдачи машиночитаемой доверенности.</div>
</li>
<li>
<div><strong>Дата окончания</strong> - дата окончания действия машиночитаемой доверенности.</div>
</li>
<li>
<div><strong>Код НО</strong> - код налогового органа, в отношении которого действует доверенность.</div>
</li>
<li>
<div><strong>Номер (внутренний)</strong> - внутренний номер машиночитаемой доверенности, генерируется автоматически.</div></li></ul><h3>Создание доверенности</h3>
<ul><li>
<div>Создать машиночитаемую доверенность можно в списке МЧД по кнопке <strong>Создать</strong>. Откроется <a href="Catalog.МашиночитаемыеДоверенности.Form.ФормаЭлемента/Help">форма регистрации машиночитаемой доверенности</a>, в которой необходимо заполнить данные <strong>Доверителя</strong>, <strong>Представителя</strong>, <strong>Полномочий</strong>, а также <strong>Иных сведений</strong>. </div></li></ul><h3>Печать доверенности</h3>
<div>
<ul><li>Готовую доверенность можно напечатать из списка МЧД, а также в карточке МЧД с помощью кнопки <img src="StdPicture.Print"></img><strong>Доверенность</strong>.</li></ul></div>
<h3>Отборы</h3>
<p>Если машиночитаемых доверенностей в списке много, то для удобства поиска можно воспользоваться отборами:</p>
<ul><li>
<div>по полю <b>Сертификат</b> - выберите сертификат для отбора доверенностей, где владелец сертификата указан в качестве представителя.</div>
</li>
<li>
<div>по полю <b>Доверитель</b> - выберите нужного доверителя, указав, например, наименование организации из списка для отбора.  </div>
</li>
<li>
<div>по полю <b>Представитель</b> - выберите нужного представителя, указав, например, ИНН контрагента. </div></li></ul><h3>Загрузка из файла</h3>
<ul><li>С помощью кнопки <strong>Загрузить из файла</strong> можно загрузить МЧД из файла на устройстве. Укажите путь к файлу, нажмите <strong>Открыть</strong>.</li></ul><h3>Выгрузка в файл</h3>
<ul><li>С помощью кнопки <strong>Выгрузить в файл</strong> можно выгрузить доверенность и ее подпись (если приложена) на выбор как для представителя в налоговые органы, так и для подписания документов. Укажите папку на устройстве, нажмите <strong>Сохранить</strong>.</li></ul></li>
<p>С помощью команд меню <strong>Еще</strong> также можно использовать другие возможности работы со списком:</p>
<ul><li><b>Загрузить из реестра ФНС</b> - загрузка машиночитаемых доверенностей организации и контрагентов из распределенного реестра ФНС.
</li>
<li><strong>Обновить статус из реестра ФНС</strong> - нажмите, для того чтобы обновить статус из реестра ФНС.</li>
<li><strong>Отменить</strong> - если доверенность утратила свою актуальность ранее срока окончания доверенности, то ее можно отменить.</li></ul><p>Для того чтобы посмотреть, что означают значки состояния МЧД, нажмите раздел <strong>Легенда</strong> в нижней части списка.</p>
<h3>См. также:</h3>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a></li></ul></body></html>
@@ -1078,6 +1078,8 @@
КонецЦикла; КонецЦикла;
ТабличныйДокумент.ТолькоПросмотр = Истина;
Возврат ТабличныйДокумент; Возврат ТабличныйДокумент;
КонецФункции КонецФункции
@@ -1109,7 +1111,7 @@
КонецФункции КонецФункции
Функция РеквизитыЮридическогоЛица(СведенияОЮридическомЛице) Функция РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям = Ложь)
НаименованиеЮридическогоЛица = СведенияОЮридическомЛице.НаимОрг; НаименованиеЮридическогоЛица = СведенияОЮридическомЛице.НаимОрг;
ИНН = СведенияОЮридическомЛице.ИННЮЛ; ИНН = СведенияОЮридическомЛице.ИННЮЛ;
@@ -1119,14 +1121,20 @@
НаименованиеУчредительногоДокумента = СведенияОЮридическомЛице.НаимУчрДок; НаименованиеУчредительногоДокумента = СведенияОЮридическомЛице.НаимУчрДок;
КонтактныйТелефон = СведенияОЮридическомЛице.КонтактТлф; КонтактныйТелефон = СведенияОЮридическомЛице.КонтактТлф;
КонтактныйТелефонЗначение = КонтактнаяИнформацияПоПредставлению(КонтактныйТелефон, "Телефон"); КонтактныйТелефонЗначение = "";
АдресЭлектроннойПочты = СведенияОЮридическомЛице.АдрЭлПочт; АдресЭлектроннойПочты = СведенияОЮридическомЛице.АдрЭлПочт;
АдресЭлектроннойПочтыЗначение = КонтактнаяИнформацияПоПредставлению(АдресЭлектроннойПочты, "АдресЭлектроннойПочты"); АдресЭлектроннойПочтыЗначение = "";
АдресЮридическогоЛица = СведенияОЮридическомЛице.АдрРег; АдресЮридическогоЛица = СведенияОЮридическомЛице.АдрРег;
ПредставлениеАдресаЮридическогоЛица = ПредставленияАдреса(АдресЮридическогоЛица); ПредставлениеАдресаЮридическогоЛица = ПредставленияАдреса(АдресЮридическогоЛица);
ЮридическийАдресЗначение = "";
Если ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям Тогда
КонтактныйТелефонЗначение = КонтактнаяИнформацияПоПредставлению(КонтактныйТелефон, "Телефон");
АдресЭлектроннойПочтыЗначение = КонтактнаяИнформацияПоПредставлению(АдресЭлектроннойПочты, "АдресЭлектроннойПочты");
ЮридическийАдресЗначение = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдресаЮридическогоЛица, "Адрес"); ЮридическийАдресЗначение = КонтактнаяИнформацияПоПредставлению(ПредставлениеАдресаЮридическогоЛица, "Адрес");
КонецЕсли;
Параметры = Новый Структура; Параметры = Новый Структура;
Параметры.Вставить("НаименованиеЮридическогоЛица", НаименованиеЮридическогоЛица); Параметры.Вставить("НаименованиеЮридическогоЛица", НаименованиеЮридическогоЛица);
@@ -1556,7 +1564,7 @@
Если ЭтоПередоверие Тогда Если ЭтоПередоверие Тогда
//@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей //@skip-check query-in-loop - штучные запросы в количестве загружаемых доверенностей
ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности); ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
ПредыдущаяДоверенность = РеквизитыДоверенностиОснования(ОписаниеДоверенности); ПредыдущаяДоверенность = РеквизитыДоверенностиОснования(ОписаниеДоверенности, Истина);
Иначе Иначе
ЗаполнитьДоверенность(Объект, ОписаниеДоверенности); ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
КонецЕсли; КонецЕсли;
@@ -1970,7 +1978,7 @@
Функция ДобавитьОрганизациюДоверителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице) Функция ДобавитьОрганизациюДоверителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице)
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице); Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, Истина);
РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника( РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация()); ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация());
@@ -1993,7 +2001,7 @@
Функция ДобавитьОрганизациюПредставителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице) Функция ДобавитьОрганизациюПредставителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице)
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице); Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, Истина);
РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника( РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация()); ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация());
@@ -3372,7 +3380,7 @@
КонецФункции КонецФункции
Функция РеквизитыДоверенностиОснования(ОписаниеДоверенности) Функция РеквизитыДоверенностиОснования(ОписаниеДоверенности, ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям = Ложь)
Документ = ОписаниеДоверенности.Документ; Документ = ОписаниеДоверенности.Документ;
Передоверие = Документ.Передов; Передоверие = Документ.Передов;
@@ -3400,7 +3408,7 @@
Если ТипДоверителя = "1" Тогда Если ТипДоверителя = "1" Тогда
СведенияОЮридическомЛице = Доверитель.РосОргДовер; СведенияОЮридическомЛице = Доверитель.РосОргДовер;
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице); Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям);
ИначеЕсли ТипДоверителя = "2" Тогда ИначеЕсли ТипДоверителя = "2" Тогда
@@ -161,7 +161,7 @@
РодительскаяДоверенность = ДанныеЗаполнения; РодительскаяДоверенность = ДанныеЗаполнения;
РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РодительскаяДоверенность, РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РодительскаяДоверенность,
"Представители, Полномочия, Ограничения, НомерДоверенности, РегистрироватьВРеестре, ВозможностьПередоверия, ФайлДоверенности, ТекстПолномочий, ПолномочияВТекстовомВиде"); "ДатаОкончания, Представители, Полномочия, Ограничения, НомерДоверенности, РегистрироватьВРеестре, ВозможностьПередоверия, ФайлДоверенности, ТекстПолномочий, ПолномочияВТекстовомВиде");
Если Не ЗначениеЗаполнено(РеквизитыРодительскойДоверенности.ВозможностьПередоверия) Если Не ЗначениеЗаполнено(РеквизитыРодительскойДоверенности.ВозможностьПередоверия)
Или РеквизитыРодительскойДоверенности.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.БезПередоверия Тогда Или РеквизитыРодительскойДоверенности.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.БезПередоверия Тогда
@@ -234,6 +234,7 @@
НСтр("ru = 'Передоверие полномочий доверенности %1 от индивидуального предпринимателя может быть создано только нотариусом.'"), РодительскаяДоверенность); НСтр("ru = 'Передоверие полномочий доверенности %1 от индивидуального предпринимателя может быть создано только нотариусом.'"), РодительскаяДоверенность);
КонецЕсли; КонецЕсли;
ДатаОкончания = РеквизитыРодительскойДоверенности.ДатаОкончания;
ПолномочияВТекстовомВиде = РеквизитыРодительскойДоверенности.ПолномочияВТекстовомВиде; ПолномочияВТекстовомВиде = РеквизитыРодительскойДоверенности.ПолномочияВТекстовомВиде;
ТекстПолномочий = РеквизитыРодительскойДоверенности.ТекстПолномочий; ТекстПолномочий = РеквизитыРодительскойДоверенности.ТекстПолномочий;
Полномочия.Загрузить(РеквизитыРодительскойДоверенности.Полномочия.Выгрузить()); Полномочия.Загрузить(РеквизитыРодительскойДоверенности.Полномочия.Выгрузить());
@@ -97,6 +97,11 @@
<maxValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes> </standardAttributes>
<createOnInput>Use</createOnInput> <createOnInput>Use</createOnInput>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<dataLockControlMode>Managed</dataLockControlMode> <dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch> <fullTextSearch>Use</fullTextSearch>
<objectPresentation> <objectPresentation>
@@ -984,6 +989,11 @@
<key>ru</key> <key>ru</key>
<value>Форма элемента</value> <value>Форма элемента</value>
</synonym> </synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes> <usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes> <usePurposes>MobileDevice</usePurposes>
</forms> </forms>
@@ -1124,6 +1124,8 @@
&НаСервере &НаСервере
Процедура ИзменитьПометкуУдаленияИВладельцаЗначений(ТекущееСвойство, ПометкаУдаленияСвойства) Процедура ИзменитьПометкуУдаленияИВладельцаЗначений(ТекущееСвойство, ПометкаУдаленияСвойства)
// АПК:1328-выкл Блокировка устанавливается выше по стеку.
// АПК:1327-выкл Блокировка устанавливается выше по стеку.
СтарыйВладелецЗначений = ТекущееСвойство; СтарыйВладелецЗначений = ТекущееСвойство;
НоваяПометкаЗначений = Неопределено; НоваяПометкаЗначений = Неопределено;
@@ -1263,6 +1265,9 @@
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
// АПК:1327-вкл
// АПК:1328-вкл
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -290,7 +290,7 @@
<name>ПрименяемыеПравилаКоманднаяПанель</name> <name>ПрименяемыеПравилаКоманднаяПанель</name>
<id>3</id> <id>3</id>
<items xsi:type="form:Button"> <items xsi:type="form:Button">
<name>ПрименяемыеПравилаПрименить</name> <name>Применить</name>
<id>13</id> <id>13</id>
<title> <title>
<key>ru</key> <key>ru</key>
@@ -302,7 +302,7 @@
<common>true</common> <common>true</common>
</userVisible> </userVisible>
<extendedTooltip> <extendedTooltip>
<name>ПрименяемыеПравилаПрименитьРасширеннаяПодсказка</name> <name>ПрименитьРасширеннаяПодсказка</name>
<id>26</id> <id>26</id>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
@@ -1599,6 +1599,211 @@
УправлениеДоступомСлужебный.ДобавитьСвойстваВерсии(Контекст, Структура, ИменаПолей); УправлениеДоступомСлужебный.ДобавитьСвойстваВерсии(Контекст, Структура, ИменаПолей);
КонецПроцедуры КонецПроцедуры
// Только для внутреннего использования.
//
// Параметры:
// Объект - СправочникОбъект.ПрофилиГруппДоступа
// - СправочникОбъект.ИдентификаторыОбъектовМетаданных
// - СправочникОбъект.ИдентификаторыОбъектовРасширений
// СтарыеЗначения - Структура
//
Процедура ЗарегистрироватьИзменениеРолейПрофилей(Объект, СтарыеЗначения) Экспорт
Данные = Новый Структура;
Данные.Вставить("ВерсияСтруктурыДанных", 1);
Данные.Вставить("ИзменениеРолей", Новый Массив);
Данные.Вставить("ПредставлениеРолей", Новый Массив);
Данные.Вставить("ПредставлениеПрофилей", Новый Массив);
Если ТипЗнч(Объект) = Тип("СправочникОбъект.ПрофилиГруппДоступа") Тогда
АктивностьПрофиляИзменена = Объект.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления;
ИзменениеРолей = Объект.Роли.Выгрузить();
ИзменениеРолей.Свернуть("Роль");
ИзменениеРолей.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Строка"));
ИзменениеРолей.ЗаполнитьЗначения("Добавлено", "ВидИзменения");
Если ТипЗнч(СтарыеЗначения.Роли) = Тип("РезультатЗапроса")
И Не СтарыеЗначения.Роли.Пустой() Тогда
СтарыеРоли = СтарыеЗначения.Роли.Выгрузить();
СтарыеРоли.Индексы.Добавить("Роль");
Индекс = ИзменениеРолей.Количество();
Пока Индекс > 0 Цикл
Индекс = Индекс - 1;
НоваяРоль = ИзменениеРолей.Получить(Индекс);
СтараяРоль = СтарыеРоли.Найти(НоваяРоль.Роль, "Роль");
Если СтараяРоль = Неопределено Тогда
Продолжить;
КонецЕсли;
Если АктивностьПрофиляИзменена Тогда
НоваяРоль.ВидИзменения = "Изменено";
Иначе
ИзменениеРолей.Удалить(НоваяРоль);
КонецЕсли;
СтарыеРоли.Удалить(СтараяРоль);
КонецЦикла;
Для Каждого СтараяРоль Из СтарыеРоли Цикл
НоваяСтрока = ИзменениеРолей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтараяРоль);
НоваяСтрока.ВидИзменения = "Удалено";
КонецЦикла;
КонецЕсли;
Если Не АктивностьПрофиляИзменена
И Не ЗначениеЗаполнено(ИзменениеРолей) Тогда
Возврат;
КонецЕсли;
СериализованнаяСсылкаПрофиля = СериализованнаяСсылка(Объект.Ссылка);
ИдентификаторыРолей = ИзменениеРолей.ВыгрузитьКолонку("Роль");
СвойстваРолей = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ИдентификаторыРолей,
"ПометкаУдаления, Имя, Синоним");
МетаданныеРолей = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыРолей, Ложь);
Для Каждого Строка Из ИзменениеРолей Цикл
Если Не ЗначениеЗаполнено(Строка.Роль) Тогда
Продолжить;
КонецЕсли;
СериализованнаяСсылкаРоли = СериализованнаяСсылка(Строка.Роль);
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылкаПрофиля);
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ВидИзменения", Строка.ВидИзменения);
Данные.ИзменениеРолей.Добавить(Свойства);
МетаданныеРоли = МетаданныеРолей.Получить(Строка.Роль);
СвойстваРоли = СвойстваРолей.Получить(Строка.Роль);
ИмяРоли = Неопределено;
СинонимРоли = Неопределено;
Если ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных") Тогда
ИмяРоли = МетаданныеРоли.Имя;
СинонимРоли = МетаданныеРоли.Синоним;
ИначеЕсли СвойстваРоли <> Неопределено Тогда
ИмяРоли = СвойстваРоли.Имя;
СинонимРоли = СвойстваРоли.Синоним;
КонецЕсли;
ПометкаУдаленияРоли = ?(СвойстваРоли = Неопределено,
Неопределено, СвойстваРоли.ПометкаУдаления);
Свойства = Новый Структура;
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ПометкаУдаления", ПометкаУдаленияРоли);
Свойства.Вставить("ЕстьВМетаданных", ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"));
Свойства.Вставить("Имя", ИмяРоли);
Свойства.Вставить("Синоним", СинонимРоли);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Данные.ПредставлениеРолей.Добавить(Свойства);
КонецЦикла;
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылка(Объект.Ссылка));
Свойства.Вставить("Представление", ПредставлениеСсылки(Объект.Ссылка));
Свойства.Вставить("ПометкаУдаления", Объект.ПометкаУдаления);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Если Объект.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("ПометкаУдаления", СтарыеЗначения.ПометкаУдаления);
КонецЕсли;
Данные.ПредставлениеПрофилей.Добавить(Свойства);
Иначе
Если Объект.ПометкаУдаления = СтарыеЗначения.ПометкаУдаления Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Роль", Объект.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| ПрофилиГруппДоступа.Ссылка КАК Ссылка,
| ПрофилиГруппДоступа.ПометкаУдаления КАК ПометкаУдаления,
| ПрофилиГруппДоступа.Представление КАК Представление
|ИЗ
| Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа
|ГДЕ
| ПрофилиГруппДоступа.Ссылка В
| (ВЫБРАТЬ
| РолиПрофилей.Ссылка
| ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ГДЕ
| РолиПрофилей.Роль = &Роль)";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
СериализованнаяСсылкаРоли = СериализованнаяСсылка(Объект.Ссылка);
МетаданныеРоли = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Объект.Ссылка, Ложь);
ИмяРоли = ?(ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"), МетаданныеРоли.Имя, Объект.Имя);
СинонимРоли = ?(ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"), МетаданныеРоли.Синоним, Объект.Синоним);
Свойства = Новый Структура;
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ПометкаУдаления", Объект.ПометкаУдаления);
Свойства.Вставить("ЕстьВМетаданных", ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"));
Свойства.Вставить("Имя", ИмяРоли);
Свойства.Вставить("Синоним", СинонимРоли);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Если Объект.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("ПометкаУдаления", СтарыеЗначения.ПометкаУдаления);
КонецЕсли;
Если Объект.Имя <> СтарыеЗначения.Имя Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("Имя",
?(ТипЗнч(СтарыеЗначения.Имя) = Тип("Строка"), СтарыеЗначения.Имя, ""));
КонецЕсли;
Если Объект.Синоним <> СтарыеЗначения.Синоним Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("Синоним",
?(ТипЗнч(СтарыеЗначения.Синоним) = Тип("Строка"), СтарыеЗначения.Синоним, ""));
КонецЕсли;
Данные.ПредставлениеРолей.Добавить(Свойства);
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СериализованнаяСсылкаПрофиля = СериализованнаяСсылка(Выборка.Ссылка);
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылкаПрофиля);
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ВидИзменения", "Изменено");
Данные.ИзменениеРолей.Добавить(Свойства);
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылкаПрофиля);
Свойства.Вставить("Представление", Выборка.Представление);
Свойства.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Данные.ПредставлениеПрофилей.Добавить(Свойства);
КонецЦикла;
КонецЕсли;
ИмяСобытия = УправлениеДоступомСлужебный.ИмяСобытияИзменениеРолейПрофилейДляЖурналаРегистрации();
ЗаписьЖурналаРегистрации(ИмяСобытия,
УровеньЖурналаРегистрации.Информация,
Объект.Метаданные(),
ОбщегоНазначения.ЗначениеВСтрокуXML(Данные),
,
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
КонецПроцедуры
// См. ПользователиСлужебный.СериализованнаяСсылка
Функция СериализованнаяСсылка(Ссылка)
Возврат ПользователиСлужебный.СериализованнаяСсылка(Ссылка);
КонецФункции
// См. ПользователиСлужебный.ПредставлениеСсылки
Функция ПредставлениеСсылки(Ссылка)
Возврат ПользователиСлужебный.ПредставлениеСсылки(Ссылка);
КонецФункции
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции для поддержки обмена данными в РИБ. // Процедуры и функции для поддержки обмена данными в РИБ.
@@ -18,17 +18,23 @@
Процедура ПередЗаписью(Отказ) Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Возврат;
КонецЕсли;
Если ЭтоГруппа Тогда Если ЭтоГруппа Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра(); Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
Или Не ОбменДанными.Загрузка Тогда
СтарыеЗначения = СтарыеЗначения(); СтарыеЗначения = СтарыеЗначения();
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра();
Если Не Справочники.ВерсииРасширений.ВсеРасширенияПодключены() Тогда Если Не Справочники.ВерсииРасширений.ВсеРасширенияПодключены() Тогда
Справочники.ПрофилиГруппДоступа.ВосстановитьНесуществующиеВидыИЗначенияДоступа(СтарыеЗначения, ЭтотОбъект); Справочники.ПрофилиГруппДоступа.ВосстановитьНесуществующиеВидыИЗначенияДоступа(СтарыеЗначения, ЭтотОбъект);
@@ -123,18 +129,32 @@
Процедура ПриЗаписи(Отказ) Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ЭтоГруппа Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ЭтоГруппа Тогда Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Справочники.ПрофилиГруппДоступа.ЗарегистрироватьИзменениеРолейПрофилей(ЭтотОбъект, СтарыеЗначения);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеУчастниковГруппДоступа(ЭтотОбъект, СтарыеЗначения);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеРазрешенныхЗначений(ЭтотОбъект, СтарыеЗначения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ПроверитьОднозначностьПоставляемыхДанных(); ПроверитьОднозначностьПоставляемыхДанных();
// При установке пометки удаления нужно установить пометку удаления у групп доступа профиля. // При установке пометки удаления нужно установить пометку удаления у групп доступа профиля.
Если ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Ложь Тогда Если Справочники.ГруппыДоступа.УстановленаПометкаУдаленияПрофиля(ЭтотОбъект, СтарыеЗначения) Тогда
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Профиль", Ссылка); Запрос.УстановитьПараметр("Профиль", Ссылка);
Запрос.Текст = Запрос.Текст =
@@ -158,11 +178,14 @@
КонецЦикла; КонецЦикла;
Блокировка.Заблокировать(); Блокировка.Заблокировать();
Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл УстановитьПривилегированныйРежим(Истина);
Для Каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл
ГруппаДоступаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект(); ГруппаДоступаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект();
ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить("УстановкаПометкиУдаленияГруппыДоступаПриУстановкеПометкиУдаленияПрофиля");
ГруппаДоступаОбъект.ПометкаУдаления = Истина; ГруппаДоступаОбъект.ПометкаУдаления = Истина;
ГруппаДоступаОбъект.Записать(); ГруппаДоступаОбъект.Записать();
КонецЦикла; КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли; КонецЕсли;
ЗафиксироватьТранзакцию(); ЗафиксироватьТранзакцию();
Исключение Исключение
@@ -629,8 +629,10 @@
КонецЕсли; КонецЕсли;
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание); ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
Если Не Отказ Тогда
ПреобразоватьПараметрыТекста(ТекущийОбъект, "ПредставлениеВПараметры"); ПреобразоватьПараметрыТекста(ТекущийОбъект, "ПредставлениеВПараметры");
ПреобразоватьПараметрыНастроекОтчетов(ТекущийОбъект, "ПредставлениеВПараметры"); ПреобразоватьПараметрыНастроекОтчетов(ТекущийОбъект, "ПредставлениеВПараметры");
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -3719,7 +3721,7 @@
&НаКлиенте &НаКлиенте
Процедура ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки() Процедура ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки()
Если НЕ Объект.Персонализирована Тогда Если НЕ Объект.Персонализирована Или Элементы.Отчеты.ТекущиеДанные = Неопределено Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -790,6 +790,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -855,6 +856,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -936,6 +938,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1001,6 +1004,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1272,6 +1276,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1337,6 +1342,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1418,6 +1424,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1483,6 +1490,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1749,6 +1757,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1814,6 +1823,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1895,6 +1905,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -1960,6 +1971,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2177,7 +2189,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <maxWidth>70</maxWidth>
<height>1</height> <height>1</height>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo"> <extInfo xsi:type="form:LabelDecorationExtInfo">
@@ -2257,6 +2269,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2322,6 +2335,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2403,6 +2417,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2468,6 +2483,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2735,6 +2751,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2800,6 +2817,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2881,6 +2899,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2946,6 +2965,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -2958,6 +2978,43 @@
<horizontalAlign>Left</horizontalAlign> <horizontalAlign>Left</horizontalAlign>
</extInfo> </extInfo>
</items> </items>
<items xsi:type="form:Decoration">
<name>ДекорацияСертификатМеткиВремени</name>
<id>442</id>
<title>
<key>ru</key>
<value>Декорация сертификат метки времени</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияСертификатМеткиВремениРасширеннаяПодсказка</name>
<id>444</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияСертификатМеткиВремениКонтекстноеМеню</name>
<id>443</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>URLProcessing</event>
<name>ДекорацияСертификатМеткиВремениОбработкаНавигационнойСсылки</name>
</handlers>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible> <visible>true</visible>
<enabled>true</enabled> <enabled>true</enabled>
<userVisible> <userVisible>
@@ -3213,6 +3270,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3278,6 +3336,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3359,6 +3418,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3424,6 +3484,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3690,6 +3751,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3755,6 +3817,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3836,6 +3899,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -3901,6 +3965,7 @@
<autoFill>true</autoFill> <autoFill>true</autoFill>
</contextMenu> </contextMenu>
<type>Label</type> <type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef"> <textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color> <color>Style.ПоясняющийТекст</color>
@@ -5168,6 +5233,167 @@
<common>true</common> <common>true</common>
</edit> </edit>
</attributes> </attributes>
<attributes>
<name>ТипПодписи</name>
<id>34</id>
<valueType>
<types>EnumRef.ТипыПодписиКриптографии</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>СертификатыДляПроверкиПодписи</name>
<id>36</id>
<valueType>
<types>ValueTable</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<columns>
<name>Отпечаток</name>
<id>37</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Сервер</name>
<id>38</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Клиент</name>
<id>39</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>АдресСертификата</name>
<id>40</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>СертификатыМетокВремени</name>
<id>42</id>
<valueType>
<types>ValueTable</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<columns>
<name>Отпечаток</name>
<id>43</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ПолученНаСервере</name>
<id>44</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>АдресСертификата</name>
<id>45</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ПолученНаКлиенте</name>
<id>46</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Представление</name>
<id>47</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<formCommands> <formCommands>
<name>Проверить</name> <name>Проверить</name>
<title> <title>
@@ -5221,6 +5447,12 @@
<stringQualifiers/> <stringQualifiers/>
</valueType> </valueType>
</parameters> </parameters>
<parameters>
<name>ТипПодписи</name>
<valueType>
<types>EnumRef.ТипыПодписиКриптографии</types>
</valueType>
</parameters>
<commandInterface> <commandInterface>
<navigationPanel/> <navigationPanel/>
<commandBar/> <commandBar/>
@@ -68,6 +68,10 @@
КатегорияОшибки.ОшибкаКонфигурации); КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ТипПодписи) Тогда
ТипПодписи = Параметры.ТипПодписи;
КонецЕсли;
Для каждого Проверка Из Проверки Цикл Для каждого Проверка Из Проверки Цикл
Группа = ГруппаФормыБезОтображения("Группа" + Проверка.Имя, Элементы.ГруппаДополнительныеПроверки); Группа = ГруппаФормыБезОтображения("Группа" + Проверка.Имя, Элементы.ГруппаДополнительныеПроверки);
@@ -111,7 +115,7 @@
Элементы[Проверка + "РешениеКлиентНадпись"].Видимость = Ложь; Элементы[Проверка + "РешениеКлиентНадпись"].Видимость = Ложь;
Элементы[Проверка + "ОшибкаСервер"].Видимость = Ложь; Элементы[Проверка + "ОшибкаСервер"].Видимость = Ложь;
Элементы[Проверка + "РешениеСерверНадпись"].Видимость = Ложь; Элементы[Проверка + "РешениеСерверНадпись"].Видимость = Ложь;
Элементы[Проверка + "Надпись"].Заголовок = СтандартныйЗаголовокЭлемента(Проверка + "Надпись"); Элементы[Проверка + "Надпись"].Заголовок = СтандартныйЗаголовокЭлемента(Проверка + "Надпись", ТипПодписи);
Если ПроверкиНаКлиенте <> Неопределено Тогда Если ПроверкиНаКлиенте <> Неопределено Тогда
ВывестиРезультатПроверки(Проверка); ВывестиРезультатПроверки(Проверка);
@@ -234,7 +238,7 @@
ИмяОшибки = ИмяЭлемента + "Ошибка"; ИмяОшибки = ИмяЭлемента + "Ошибка";
ПараметрыПредупреждения = Новый Структура; ПараметрыПредупреждения = Новый Структура;
ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения", СтандартныйЗаголовокЭлемента(Элемент.Имя)); ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения", СтандартныйЗаголовокЭлемента(Элемент.Имя, ТипПодписи));
ПараметрыПредупреждения.Вставить("ТекстОшибкиКлиент", ПроверкиНаКлиенте[ИмяОшибки]); ПараметрыПредупреждения.Вставить("ТекстОшибкиКлиент", ПроверкиНаКлиенте[ИмяОшибки]);
ПараметрыПредупреждения.Вставить("ТекстОшибкиСервер", ПараметрыПредупреждения.Вставить("ТекстОшибкиСервер",
?(ОперацииНаСервере Или ЕстьВстроенныйКриптопровайдер Или ЕстьУчетнаяЗаписьСервиса, ?(ОперацииНаСервере Или ЕстьВстроенныйКриптопровайдер Или ЕстьУчетнаяЗаписьСервиса,
@@ -323,6 +327,14 @@
КонецПроцедуры КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСертификатМеткиВремениОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьСертификат(НавигационнаяСсылкаФорматированнойСтроки);
КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область ОбработчикиКомандФормы #Область ОбработчикиКомандФормы
@@ -348,6 +360,29 @@
Элементы.ФормаПроверить.Доступность = Истина; Элементы.ФормаПроверить.Доступность = Истина;
Элементы.ФормаПроверить.Отображение = ОтображениеКнопки.Текст; Элементы.ФормаПроверить.Отображение = ОтображениеКнопки.Текст;
Если СертификатыМетокВремени.Количество() = 0 Тогда
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
Иначе
Массив = Новый Массив;
Для Каждого СертификатМеткиВремени Из СертификатыМетокВремени Цикл
Если Не СертификатМеткиВремени.ПолученНаКлиенте Тогда
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат метки времени, полученной на сервере: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
ИначеЕсли Не СертификатМеткиВремени.ПолученНаСервере Тогда
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат метки времени, полученной на компьютере: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
Иначе
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат полученной метки времени: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
КонецЕсли;
КонецЦикла;
Элементы.ДекорацияСертификатМеткиВремени.Заголовок = Новый ФорматированнаяСтрока(Массив);
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Истина;
КонецЕсли;
Если Не ПроверкаПриВыборе Тогда Если Не ПроверкаПриВыборе Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -466,6 +501,8 @@
ПроверкиНаСервере = Новый Структура; ПроверкиНаСервере = Новый Структура;
ДополнительныеДанныеПроверокНаКлиенте = Новый Структура; ДополнительныеДанныеПроверокНаКлиенте = Новый Структура;
ДополнительныеДанныеПроверокНаСервере = Новый Структура; ДополнительныеДанныеПроверокНаСервере = Новый Структура;
СертификатыМетокВремени.Очистить();
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
// Очистка предыдущих результатов проверки. // Очистка предыдущих результатов проверки.
Если СтандартныеПроверки Тогда Если СтандартныеПроверки Тогда
@@ -979,10 +1016,57 @@
// Подписание. // Подписание.
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.МенеджерКриптографии.НачатьПодписывание(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодписания", ЭтотОбъект, Контекст, Попытка
"ПроверитьНаСторонеКлиентаПослеОшибкиПодписания", ЭтотОбъект), ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
Контекст.ДанныеСертификата, Контекст.СертификатКриптографии); ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
Иначе
ПарольПринят = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени);
Контекст.МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст);
Иначе Иначе
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст); ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
КонецЕсли; КонецЕсли;
@@ -1053,6 +1137,7 @@
// Проверка подписи. // Проверка подписи.
Если ДанныеПодписи <> Null И ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда Если ДанныеПодписи <> Null И ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.Вставить("ДанныеПодписи", ДанныеПодписи);
Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения( Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписи", ЭтотОбъект, Контекст, "ПроверитьНаСторонеКлиентаПослеПроверкиПодписи", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект), "ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект),
@@ -1112,7 +1197,7 @@
// Продолжение процедуры ПроверитьНаСторонеКлиента. // Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте &НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт Асинх Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт
Если Сертификат <> Null Тогда Если Сертификат <> Null Тогда
Если ТипЗнч(Сертификат) = Тип("Строка") Тогда Если ТипЗнч(Сертификат) = Тип("Строка") Тогда
@@ -1120,7 +1205,47 @@
Иначе Иначе
ОписаниеОшибки = ""; ОписаниеОшибки = "";
КонецЕсли; КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи
<> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваПодписиЧтениеМенеджеромКриптографии(
Контекст.ДанныеПодписи, Контекст.МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии();
Ждать СертификатМеткиВремени.ИнициализироватьАсинх(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебныйКлиент.РазницаСУниверсальнымВременем());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток",
СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаКлиенте = Истина;
НоваяСтрока.Представление = СвойстваСертификата.Представление;
Иначе
Найдено[0].ПолученНаКлиенте = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты); УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли; КонецЕсли;
Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения( Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения(
@@ -1795,6 +1920,29 @@
КонецПопытки; КонецПопытки;
ПарольПринят = Не ЗначениеЗаполнено(ОписаниеОшибки); ПарольПринят = Не ЗначениеЗаполнено(ОписаниеОшибки);
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени);
МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ДанныеПодписи = МенеджерКриптографии.Подписать(ДанныеСертификата, СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты); УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи; Возврат ДанныеПодписи;
@@ -1809,6 +1957,42 @@
Исключение Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки; КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии(
ДанныеПодписи, МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток", СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаСервере = Истина;
Иначе
Найдено[0].ПолученНаСервере = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты); УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецПроцедуры КонецПроцедуры
@@ -2085,7 +2269,7 @@
ЭлементФормыНадписьРешение.Заголовок = НСтр("ru = 'См. пункт Подписание данных.'"); ЭлементФормыНадписьРешение.Заголовок = НСтр("ru = 'См. пункт Подписание данных.'");
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере); ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере, Действие = "ПроверкаПодписи");
ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено; ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено;
Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка; Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка;
@@ -2093,10 +2277,10 @@
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеИзвестнойОшибки.ДействияДляУстранения) Тогда Если ЗначениеЗаполнено(Форма.Сертификат) И ЗначениеЗаполнено(ОписаниеИзвестнойОшибки.ДействияДляУстранения) Тогда
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(Неопределено);
ДанныеДляДополнения.ДанныеСертификата = ПолучитьИзВременногоХранилища(Форма.АдресСертификата);
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(
Новый Структура("Сертификат, ДанныеСертификата", Форма.Сертификат, Форма.АдресСертификата));
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора(); ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора();
Дополнение = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями( Дополнение = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями(
@@ -2124,21 +2308,21 @@
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаНеВыполнялась; ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаНеВыполнялась;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'"); ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'");
ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки <> Неопределено И ЗначениеПроверкиВторогоКонтекста = Неопределено Тогда ИначеЕсли ЗначениеПроверки <> Неопределено И ЗначениеПроверкиВторогоКонтекста = Неопределено Тогда
ГруппаОшибка.Видимость = Ложь; ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь; ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех; ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'"); ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки <> Неопределено И РезультатПроверки Тогда ИначеЕсли ЗначениеПроверки <> Неопределено И РезультатПроверки Тогда
ГруппаОшибка.Видимость = Ложь; ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь; ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех; ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'"); ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли; КонецЕсли;
Возврат; Возврат;
@@ -2158,15 +2342,15 @@
ГруппаОшибка.Видимость = Ложь; ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь; ЭлементРешение.Видимость = Ложь;
ЭлементНадпись.Гиперссылка = Ложь; ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя); ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста
Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента) Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента, ТипПодписи)
ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента); ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи);
Если Не ПустаяСтрока(ЗаголовокЭлемента) Тогда Если Не ПустаяСтрока(ЗаголовокЭлемента) Тогда
Возврат ЗаголовокЭлемента; Возврат ЗаголовокЭлемента;
КонецЕсли; КонецЕсли;
@@ -2181,7 +2365,7 @@
КонецФункции КонецФункции
&НаКлиентеНаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста
Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента) Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи)
Если ИмяЭлемента = "ЗаконныйСертификатНадпись" Тогда Если ИмяЭлемента = "ЗаконныйСертификатНадпись" Тогда
Возврат НСтр("ru = 'Соответствие законодательству Российской Федерации'"); Возврат НСтр("ru = 'Соответствие законодательству Российской Федерации'");
@@ -2196,7 +2380,17 @@
Возврат НСтр("ru = 'Наличие приложения для подписания и расшифровки'"); Возврат НСтр("ru = 'Наличие приложения для подписания и расшифровки'");
ИначеЕсли ИмяЭлемента = "ПодписаниеНадпись" Тогда ИначеЕсли ИмяЭлемента = "ПодписаниеНадпись" Тогда
Если ЗначениеЗаполнено(ТипПодписи) Тогда
ТипПодписиСтрока = Строка(ТипПодписи);
ТипПодписиСтрока = НРег(Лев(ТипПодписиСтрока, 1)) + Сред(ТипПодписиСтрока, 2);
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подписание данных типом подписи - %1'"), ТипПодписиСтрока);
Иначе
Возврат НСтр("ru = 'Подписание данных'"); Возврат НСтр("ru = 'Подписание данных'");
КонецЕсли;
ИначеЕсли ИмяЭлемента = "ПроверкаПодписиНадпись" Тогда ИначеЕсли ИмяЭлемента = "ПроверкаПодписиНадпись" Тогда
Возврат НСтр("ru = 'Проверка созданной подписи'"); Возврат НСтр("ru = 'Проверка созданной подписи'");
@@ -2243,9 +2437,9 @@
КонецПроцедуры КонецПроцедуры
&НаСервереБезКонтекста &НаСервереБезКонтекста
Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере) Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи)
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере); Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи);
КонецФункции КонецФункции
@@ -1214,6 +1214,20 @@
</edit> </edit>
</columns> </columns>
</attributes> </attributes>
<attributes>
<name>АдресСертификата</name>
<id>1</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands> <formCommands>
<name>Обновить</name> <name>Обновить</name>
<title> <title>
@@ -31,11 +31,15 @@
ВариантУстановки = СписокВыбора[0].Значение; ВариантУстановки = СписокВыбора[0].Значение;
Элементы.ВариантУстановки.ТолькоПросмотр = СписокВыбора.Количество() = 1;
СертификатДвоичныеДанные = Неопределено; СертификатДвоичныеДанные = Неопределено;
Если ЭтоАдресВременногоХранилища(Параметры.Сертификат) Тогда Если ЭтоАдресВременногоХранилища(Параметры.Сертификат) Тогда
СертификатДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.Сертификат); СертификатДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.Сертификат);
АдресСертификата = Параметры.Сертификат;
ИначеЕсли ЗначениеЗаполнено(Параметры.Сертификат) Тогда ИначеЕсли ЗначениеЗаполнено(Параметры.Сертификат) Тогда
СертификатДвоичныеДанные = Base64Значение(Параметры.Сертификат); СертификатДвоичныеДанные = Base64Значение(Параметры.Сертификат);
АдресСертификата = ПоместитьВоВременноеХранилище(СертификатДвоичныеДанные, УникальныйИдентификатор);
КонецЕсли; КонецЕсли;
Если СертификатДвоичныеДанные <> Неопределено Тогда Если СертификатДвоичныеДанные <> Неопределено Тогда
@@ -45,6 +49,7 @@
СертификатОписаниеДанных, СвойстваСертификата); СертификатОписаниеДанных, СвойстваСертификата);
КонецЕсли; КонецЕсли;
Элементы.ПоказатьДанныеСертификата.Видимость = ЗначениеЗаполнено(АдресСертификата);
Элементы.ДекорацияТекущийКонтейнер.Видимость = Ложь; Элементы.ДекорацияТекущийКонтейнер.Видимость = Ложь;
КонецПроцедуры КонецПроцедуры
@@ -127,7 +132,7 @@
&НаКлиенте &НаКлиенте
Процедура ПоказатьДанныеСертификата(Команда) Процедура ПоказатьДанныеСертификата(Команда)
ЭлектроннаяПодписьКлиент.ОткрытьСертификат(Параметры.Сертификат, Истина); ЭлектроннаяПодписьКлиент.ОткрытьСертификат(АдресСертификата, Истина);
КонецПроцедуры КонецПроцедуры
@@ -332,7 +332,7 @@
КонецЕсли; КонецЕсли;
ЭлектроннаяПодписьКлиент.ПроверитьСертификатСправочника(Объект.Ссылка, ЭлектроннаяПодписьКлиент.ПроверитьСертификатСправочника(Объект.Ссылка,
Новый Структура("БезПодтверждения", Истина)); Новый Структура("БезПодтверждения, ТипПодписи", Истина, ТипПодписиПоУмолчанию()));
КонецПроцедуры КонецПроцедуры
@@ -873,6 +873,7 @@
КонецЕсли; КонецЕсли;
Результат = Новый СписокЗначений; Результат = Новый СписокЗначений;
Результат.Добавить(Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка(), НСтр("ru = 'По умолчанию'"));
ТекстЗапроса = ТекстЗапроса =
"ВЫБРАТЬ "ВЫБРАТЬ
@@ -962,4 +963,11 @@
КонецФункции КонецФункции
&НаСервереБезКонтекста
Функция ТипПодписиПоУмолчанию()
Возврат Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
КонецФункции
#КонецОбласти #КонецОбласти
@@ -238,14 +238,44 @@
Если Сертификат <> Неопределено Тогда Если Сертификат <> Неопределено Тогда
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата( СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
Сертификат, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата); Сертификат, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(),
ДвоичныеДанныеСертификата);
Если СертификатОбъект.ДействителенДо <> СвойстваСертификата.ДействителенДо Тогда Если СертификатОбъект.ДействителенДо <> СвойстваСертификата.ДействителенДо Тогда
СтрокаПоиска = Формат(СертификатОбъект.ДействителенДо, "ДФ=MM.yyyy"); СтрокаПоиска = Формат(СертификатОбъект.ДействителенДо, "ДФ=MM.yyyy");
СтрокаЗамены = Формат(СвойстваСертификата.ДействителенДо, "ДФ=MM.yyyy"); СтрокаЗамены = Формат(СвойстваСертификата.ДействителенДо, "ДФ=MM.yyyy");
СертификатОбъект.Наименование = СтрЗаменить(СертификатОбъект.Наименование, СтрокаПоиска, СтрокаЗамены); СертификатОбъект.Наименование = СтрЗаменить(СертификатОбъект.Наименование, СтрокаПоиска,
СтрокаЗамены);
СертификатОбъект.ДействителенДо = СвойстваСертификата.ДействителенДо; СертификатОбъект.ДействителенДо = СвойстваСертификата.ДействителенДо;
ЗаписатьОбъект = Истина; ЗаписатьОбъект = Истина;
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СертификатОбъект.Программа) И ТипЗнч(СертификатОбъект.Программа) = Тип(
"СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования") Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанныеСертификата, Ложь, Истина);
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ЭтоСертификатГОСТ(АлгоритмСертификата) Тогда
ОписаниеПрограммы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
СертификатОбъект.Программа,
"ЭтоВстроенныйКриптопровайдер, АлгоритмПодписи, АлгоритмХеширования");
Если Не ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
"", АлгоритмСертификата, ОписаниеПрограммы.АлгоритмПодписи, ОписаниеПрограммы.АлгоритмХеширования);
Если Результат <> Истина Тогда
СертификатОбъект.Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
ЗаписатьОбъект = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -34,6 +34,32 @@
Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка(); Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(Программа) И ТипЗнч(Программа) = Тип(
"СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования") И ЗначениеЗаполнено(Отпечаток) Тогда
ОписаниеПрограммы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Программа,
"ЭтоВстроенныйКриптопровайдер, АлгоритмПодписи, АлгоритмХеширования");
Если Не ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
ДвоичныеДанные = ДанныеСертификата.Получить();
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанные, Ложь, Истина);
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
Наименование, АлгоритмСертификата, ОписаниеПрограммы.АлгоритмПодписи,
ОписаниеПрограммы.АлгоритмХеширования);
Если Результат <> Истина Тогда
ВызватьИсключение Результат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
КонецПроцедуры КонецПроцедуры
@@ -72,9 +72,8 @@
<li><strong>Дата подписи</strong> - дата подписания файла; <li><strong>Дата подписи</strong> - дата подписания файла;
</li> </li>
<li><b>Тип подписи</b> - существует несколько типов подписей в зависимости от срока действия;</li> <li><b>Тип подписи</b> - существует несколько типов подписей в зависимости от срока действия;</li>
<li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи; <li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки;</li>
</li> <li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи.</li></ul><p>С помощью кнопок панели навигации можно:</p>
<li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки.</li></ul><p>С помощью кнопок панели навигации можно:</p>
<ul><li><strong>Подписать</strong> файл; <ul><li><strong>Подписать</strong> файл;
</li> </li>
<li><strong>Открыть </strong>- открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись; <li><strong>Открыть </strong>- открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись;
@@ -83,10 +82,11 @@
</li> </li>
<li><strong>Проверить все</strong> - проверить все подписи; <li><strong>Проверить все</strong> - проверить все подписи;
</li> </li>
<li><strong>Удалить</strong> у файла электронную подпись.</li>
<li><strong>Сохранить</strong> электронную подпись <strong>в файл </strong>на устройство; <li><strong>Сохранить</strong> электронную подпись <strong>в файл </strong>на устройство;
</li> </li>
<li><strong>Удалить</strong> у файла электронную подпись.</li> <li><b>Проверена вручную </b>- ввести обоснование достоверности подписи, если подпись не проходит автоматическую проверку. Например, когда недоступен список отзыва, но известно, что сертификат не отозван;</li>
<li><b>Продлить действие</b> - Если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает <a href="CommonForm.ПродлениеСрокаДействияЭлектронныхПодписей/Help">способы усовершенствования</a> подписи. Для этого выберите нужный тип подписи из списка.</li></ul><h3>Разрешено расшифровывать</h3> <li><b>Продлить действие</b> - если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает <a href="CommonForm.ПродлениеСрокаДействияЭлектронныхПодписей/Help">способы усовершенствования</a> подписи. Для этого выберите нужный тип подписи из списка.</li></ul><h3>Разрешено расшифровывать</h3>
<ul><li> <ul><li>
<div>На вкладке размещаются сведения о шифровании файла:</div> <div>На вкладке размещаются сведения о шифровании файла:</div>
</li> </li>
@@ -25,7 +25,7 @@
Процедура ПриЗакрытии(ЗавершениеРаботы) Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда
Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты"); Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты", , ВладелецФормы);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -65,7 +65,8 @@
Процедура КнопкаОК(Команда) Процедура КнопкаОК(Команда)
ВыполняетсяЗакрытие = Истина; ВыполняетсяЗакрытие = Истина;
Оповестить("ОкончаниеРедактированияПараметровКомплексногоВопроса",СформироватьСтруктуруПараметровДляПередачиВладельцу()); Оповестить("ОкончаниеРедактированияПараметровКомплексногоВопроса",
СформироватьСтруктуруПараметровДляПередачиВладельцу(), ВладелецФормы);
Закрыть(); Закрыть();
КонецПроцедуры КонецПроцедуры
@@ -45,7 +45,7 @@
Процедура ПриЗакрытии(ЗавершениеРаботы) Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда
Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты"); Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты", , ВладелецФормы);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -727,7 +727,8 @@
КонецЕсли; КонецЕсли;
ВыполняетсяЗакрытие = Истина; ВыполняетсяЗакрытие = Истина;
Оповестить("ОкончаниеРедактированияПараметровТабличногоВопроса",СформироватьСтруктуруПараметровДляПередачиВладельцу()); Оповестить("ОкончаниеРедактированияПараметровТабличногоВопроса",
СформироватьСтруктуруПараметровДляПередачиВладельцу(), ВладелецФормы);
Закрыть(); Закрыть();
КонецПроцедуры КонецПроцедуры
@@ -53,7 +53,7 @@
Процедура ПриЗакрытии(ЗавершениеРаботы) Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда Если Не ВыполняетсяЗакрытие И ЭтоНоваяСтрока Тогда
Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты"); Оповестить("ОтменаВводаНовойСтрокиШаблонаАнкеты", , ВладелецФормы);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -131,7 +131,8 @@
КонецЕсли; КонецЕсли;
ВыполняетсяЗакрытие = Истина; ВыполняетсяЗакрытие = Истина;
Оповестить("ОкончаниеРедактированияПараметровСтрокиШаблонаАнкеты",СформироватьСтруктуруПараметровДляПередачиВладельцу()); Оповестить("ОкончаниеРедактированияПараметровСтрокиШаблонаАнкеты",
СформироватьСтруктуруПараметровДляПередачиВладельцу(), ВладелецФормы);
Закрыть(); Закрыть();
КонецПроцедуры КонецПроцедуры
@@ -47,6 +47,10 @@
&НаКлиенте &НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник <> ЭтотОбъект Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные; ТекущиеДанные = Элементы.ФормаДереваАнкеты.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда Если ТекущиеДанные = Неопределено Тогда
Возврат; Возврат;
@@ -246,14 +246,16 @@
&НаКлиенте &НаКлиенте
Процедура СформироватьСообщениеДляОтправки(ПараметрыОтправки) Процедура СформироватьСообщениеДляОтправки(ПараметрыОтправки)
Если Не ЗначениеЗаполнено(ПараметрыОтправки.Шаблон) И ПечатныеФормы.Количество() > 0 Тогда СформироватьБезШаблон = Не ЗначениеЗаполнено(ПараметрыОтправки.Шаблон);
Если СформироватьБезШаблон И ПечатныеФормы.Количество() > 0 Тогда
СохранитьВыборПечатныхФорм(); СохранитьВыборПечатныхФорм();
КонецЕсли; КонецЕсли;
АдресВременногоХранилища = Неопределено; АдресВременногоХранилища = Неопределено;
АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
Если Подписать Тогда СформироватьБезШаблонаИПодписать = СформироватьБезШаблон И Подписать;
Если СформироватьБезШаблонаИПодписать Тогда
ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения.УпаковатьВАрхив = Ложь; ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения.УпаковатьВАрхив = Ложь;
КонецЕсли; КонецЕсли;
@@ -268,7 +270,9 @@
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, ПараметрыСообщения, Ложь); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, ПараметрыСообщения, Ложь);
КонецЕсли; КонецЕсли;
Если Подписать Тогда Если СформироватьБезШаблонаИПодписать
И ТипЗнч(Результат.Вложения) = Тип("Массив")
И Результат.Вложения.Количество() > 0 Тогда
ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения.УпаковатьВАрхив = УпаковатьВАрхив; ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения.УпаковатьВАрхив = УпаковатьВАрхив;
ПодписатьФайлы(Результат, ПараметрыОтправки); ПодписатьФайлы(Результат, ПараметрыОтправки);
Иначе Иначе
@@ -15,26 +15,20 @@
ИнициализироватьОтборы(); ИнициализироватьОтборы();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда ДоступныеВарианты = ШаблоныСообщенийСлужебный.ДоступныеВариантыОтправкиШаблоновСообщений();
ВключенаОтправкаSMS = Истина;
ВключенаРаботаСПочтовымиСообщениями = Истина;
Иначе
ВключенаРаботаСПочтовымиСообщениями = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями");
ВключенаОтправкаSMS = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS");
КонецЕсли;
// кнопки в группе, если одна кнопка, то группа не нужна // кнопки в группе, если одна кнопка, то группа не нужна
Элементы.ФормаСоздатьШаблонСообщенияSMS.Видимость = ВключенаОтправкаSMS; Элементы.ФормаСоздатьШаблонСообщенияSMS.Видимость = ДоступныеВарианты.SMS;
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Видимость = ВключенаРаботаСПочтовымиСообщениями; Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Видимость = ДоступныеВарианты.Почта;
Элементы.ФормаПоказыватьКонтекстныеШаблоны.Видимость = Пользователи.ЭтоПолноправныйПользователь(); Элементы.ФормаПоказыватьКонтекстныеШаблоны.Видимость = Пользователи.ЭтоПолноправныйПользователь();
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда Если Не ДоступныеВарианты.SMS Тогда
Элементы.ФормаГруппаСоздать.Вид = ВидГруппыФормы.ГруппаКнопок; Элементы.ФормаГруппаСоздать.Вид = ВидГруппыФормы.ГруппаКнопок;
Элементы.ФормаСоздатьШаблонСообщенияSMS.Видимость = Ложь; Элементы.ФормаСоздатьШаблонСообщенияSMS.Видимость = Ложь;
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Заголовок = НСтр("ru='Создать'"); Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Заголовок = НСтр("ru='Создать'");
КонецЕсли; КонецЕсли;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда Если Не ДоступныеВарианты.Почта Тогда
Элементы.ФормаГруппаСоздать.Вид = ВидГруппыФормы.ГруппаКнопок; Элементы.ФормаГруппаСоздать.Вид = ВидГруппыФормы.ГруппаКнопок;
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Видимость = Ложь; Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Видимость = Ложь;
Элементы.ФормаСоздатьШаблонСообщенияSMS.Заголовок = НСтр("ru='Создать'"); Элементы.ФормаСоздатьШаблонСообщенияSMS.Заголовок = НСтр("ru='Создать'");
@@ -192,8 +186,13 @@
НСтр("ru = 'Всех сообщений'"), НСтр("ru = 'Всех сообщений'"),
НСтр("ru = 'Всех сообщений'")); НСтр("ru = 'Всех сообщений'"));
ДоступныеВарианты = ШаблоныСообщенийСлужебный.ДоступныеВариантыОтправкиШаблоновСообщений();
Если ДоступныеВарианты.SMS Тогда
Список.Параметры.УстановитьЗначениеПараметра("СообщениеSMS", ВидыШаблонов.НайтиПоЗначению("SMS").Представление); Список.Параметры.УстановитьЗначениеПараметра("СообщениеSMS", ВидыШаблонов.НайтиПоЗначению("SMS").Представление);
КонецЕсли;
Если ДоступныеВарианты.Почта Тогда
Список.Параметры.УстановитьЗначениеПараметра("ЭлектроннаяПочта", ВидыШаблонов.НайтиПоЗначению("Email").Представление); Список.Параметры.УстановитьЗначениеПараметра("ЭлектроннаяПочта", ВидыШаблонов.НайтиПоЗначению("Email").Представление);
КонецЕсли;
Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьКонтекстныеШаблоны", ПоказыватьКонтекстныеШаблоны); Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьКонтекстныеШаблоны", ПоказыватьКонтекстныеШаблоны);
Список.Параметры.УстановитьЗначениеПараметра("Произвольный", НСтр("ru = 'Произвольного сообщения'")); Список.Параметры.УстановитьЗначениеПараметра("Произвольный", НСтр("ru = 'Произвольного сообщения'"));
@@ -5,7 +5,7 @@
<ul><li>Для удобства поиска шаблонов в списке предусмотрены отборы. <ul><li>Для удобства поиска шаблонов в списке предусмотрены отборы.
</li> </li>
<li>Можно отобрать с помощью поля <strong>Шаблон для</strong>: <li>Можно отобрать с помощью поля <strong>Шаблон для</strong>:
<ul><li><strong>Электронных писем и SMS</strong>; <ul><li><strong>Всех сообщений</strong>;
</li> </li>
<li><strong>Электронного письма</strong>; <li><strong>Электронного письма</strong>;
</li> </li>
@@ -285,7 +285,7 @@
СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДополнительныйРеквизит.Свойство, "Заголовок, ТипЗначения", , ТекущийЯзык().КодЯзыка); СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДополнительныйРеквизит.Свойство, "Заголовок, ТипЗначения", , ТекущийЯзык().КодЯзыка);
СтрокаРеквизит = РеквизитыОбъекта.Добавить(); СтрокаРеквизит = РеквизитыОбъекта.Добавить();
СтрокаРеквизит.Реквизит = ДополнительныйРеквизит.Свойство; СтрокаРеквизит.Реквизит = ДополнительныйРеквизит.Свойство;
СтрокаРеквизит.Представление = СвойстваОбъекта.Заголовок; СтрокаРеквизит.Представление = Строка(ДополнительныйРеквизит.Свойство);
СтрокаРеквизит.НомерКартинки = 2; СтрокаРеквизит.НомерКартинки = 2;
СтрокаРеквизит.ТипЗначения = СвойстваОбъекта.ТипЗначения; СтрокаРеквизит.ТипЗначения = СвойстваОбъекта.ТипЗначения;
КонецЦикла; КонецЦикла;
@@ -1,9 +1,9 @@
<!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> <!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>Настройка параметров для использования средств электронной подписи и шифрования (криптографии). </p> <p>Настройка параметров для использования средств электронной подписи и шифрования (криптографии). </p>
<p>Открывается по команде <strong>Настройки электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p> <p>Открывается по команде <strong>Настройки электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p>
<p>Для электронной подписи и шифрования требуется установить специальное стороннее приложение (криптопровайдер).</p> <p>Для электронной подписи и шифрования требуется установить специальное стороннее приложение (криптопровайдер).</p>
<p>Для того чтобы подписывать данные, нужно включить флажок <strong>Электронная подпись</strong>, а для шифрования нужно включить флажок <strong>Шифрование</strong> в разделе <strong>Администрирование - Общие настройки</strong>. После этого становятся доступными соответствующие команды в приложении.</p> <p>Для того чтобы подписывать данные, нужно включить флажок <strong>Электронная подпись</strong>, а для шифрования нужно включить флажок <strong>Шифрование</strong> в разделе <strong>Администрирование - Общие настройки</strong>. После этого становятся доступными соответствующие команды в приложении.</p>
<p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для установки подписи необходимо иметь сертификат ключа электронной подписи. Сертификат можно получить в удостоверяющем центре. Например, в удостоверяющем центре фирмы 1С <a href="http://ca.1c.ru/">http://ca.1c.ru/</a>. Только удостоверяющий центр может выдать юридически значимый (квалифицированный сертификат).</p> <p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для установки подписи необходимо иметь сертификат ключа электронной подписи. Сертификат можно получить в удостоверяющем центре. Например, в удостоверяющем центре фирмы 1С <a href="http://ca.1c.ru/">http://ca.1c.ru/</a>. Только удостоверяющий центр может выдать юридически значимый (квалифицированный сертификат).</p>
<p>В случае использования распределенной информационной базы большую часть настроек можно изменить только в главном узле.</p> <p>В случае использования распределенной информационной базы большую часть настроек можно изменить только в главном узле.</p>
<p>Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты <b>ExtraCryptoAPI</b>. Установить компоненту можно<b> </b>через меню <b>Еще - Установить компоненту</b> <b>ExtraCryptoAPI.</b></p> <p>Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты <b>ExtraCryptoAPI</b>. Установить компоненту можно<b> </b>через меню <b>Еще - Установить компоненту</b> <b>ExtraCryptoAPI.</b></p>
<h3>Сертификаты</h3> <h3>Сертификаты</h3>
@@ -14,32 +14,29 @@
<li>Предусмотрен отбор по полю <strong>Состояние заявления</strong> ("Любое", "Не подготовлено", "Подготовлено", "Отправлено", "Отклонено", "Исполнено, сертификат не установлен", "Исполнено"). <li>Предусмотрен отбор по полю <strong>Состояние заявления</strong> ("Любое", "Не подготовлено", "Подготовлено", "Отправлено", "Отклонено", "Исполнено, сертификат не установлен", "Исполнено").
</li> </li>
<li><a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">Сертификат</a> можно <strong>Добавить</strong> из числа <strong>установленных на компьютере</strong>. Также это можно сделать в процессе подписания или шифрования данных. Выберите нужное действие с помощью переключателя, нажмите <b>Добавить</b>.</li> <li><a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">Сертификат</a> можно <strong>Добавить</strong> из числа <strong>установленных на компьютере</strong>. Также это можно сделать в процессе подписания или шифрования данных. Выберите нужное действие с помощью переключателя, нажмите <b>Добавить</b>.</li>
<ul><li>Сертификат <b>только для шифрования</b> можно <b>Добавить из файла</b>. Выберите нужное действие и перейдите по ссылке, укажите путь к файлу на компьютере.</li></ul><li>Также с помощью кнопки <strong>Добавить</strong> можно подготовить <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.Форма/Help">Заявление на выпуск нового сертификата</a>. <ul><li>Сертификат <b>только для шифрования</b> можно <b>Добавить из файла</b>. Выберите нужное действие и перейдите по ссылке, укажите путь к файлу или каталогу на компьютере.</li></ul><li>Также с помощью кнопки <b>Оформить заявление</b> можно подготовить <a href="DataProcessor.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата.Form.Форма/Help">Заявление на выпуск нового сертификата</a>.
</li> </li>
<li>Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Приложения</h3> <li>Выпустить повторно сертификат, у которого закончился срок действия можно с помощью кнопки <strong>Перевыпустить (cкопировать, F9)</strong>.</li>
<ul><li>Содержит список настроенных приложений, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ). </li> <li>Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Приложения</h3>
<li>Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними. <ul><li>Содержит список настроенных приложений, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ). </li>
<li>Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними.
</li> </li>
<li>Если приложение не установлена, то после установки компоненты будет предложена гиперссылка на загрузку дистрибутива <b>ViPNet CSP</b> или <b>КриптоПро CSP</b>, поддерживающие ГОСТ. </li> <li>Если приложение не установлена, то после установки компоненты будет предложена гиперссылка на загрузку дистрибутива <b>ViPNet CSP</b> или <b>КриптоПро CSP</b>, поддерживающие ГОСТ. </li>
<li>По гиперссылке также можно перейти на домашние страницы других приложений, соответствующих стандартам безопасности (например, <b>ЛИССИ CSP, Сигнал-КОМ CSP</b>). </li> <li>По гиперссылке также можно перейти на домашние страницы других приложений, соответствующих стандартам безопасности (например, <b>ЛИССИ CSP, Сигнал-КОМ CSP</b>). </li>
<li>Если требуется использовать приложение отличную от известных, тогда нужно указать ее имя, тип и алгоритмы, как указано в инструкции, поставляемой ее производителем.</li> <li>Если требуется использовать приложение отличную от известных, тогда нужно указать ее имя, тип и алгоритмы, как указано в инструкции, поставляемой ее производителем.</li>
<li>В колонке <strong>Результат проверки</strong> отражаются сведения, по которым можно понять установлено ли приложение на компьютере или нет или же установлена, но некорректно.</li> <li>В колонке <strong>Результат проверки</strong> отражаются сведения, по которым можно понять установлено ли приложение на компьютере или нет или же установлена, но некорректно.</li>
<li>Linux: <strong>Путь к приложению (&lt;Имя приложения, соответствующей выделенной строке в списке&gt;)</strong> - поле, которое требуется обязательно заполнять на компьютерах под управлением ОС Linux.</li> <li>Linux: <strong>Путь к приложению (&lt;Имя приложения, соответствующей выделенной строке в списке&gt;)</strong> - поле, которое требуется обязательно заполнять на компьютерах под управлением ОС Linux.</li>
<li>В нижней части списка расположена ссылка <a href="http://its.1c.ru/db/metod81#content:5784:1">Инструкция по работе с приложениями электронной подписи и шифрования</a>.</li></ul><ul><li>Задайте <strong>Расширение для зашифрованных файлов</strong> при отправке по почте, при выполнении команды <strong>Сохранить как</strong> и при экспорте папки (по умолчанию <strong>.p7m</strong>). <li>В нижней части списка расположена ссылка <a href="http://its.1c.ru/db/metod81#content:5784:1">Инструкция по работе с приложениями электронной подписи и шифрования</a>.</li></ul><h3>Дополнительно</h3>
</li> <h3>
<li> <ul style="font-size: 11.199999809265137px; font-weight: normal;"><li>Задайте расширение для зашифрованных файлов при отправке по почте, при выполнении команды <strong>Сохранить как</strong> и при экспорте папки (по умолчанию <strong>.p7m</strong>);</li>
<div>Напишите <strong>Расширение для файлов подписи</strong> (по умолчанию <strong>.p7s</strong>).</div> <li>Напишите расширение для файлов подписи (по умолчанию <strong>.p7s</strong>);</li>
</li> <li>С помощью переключателя <strong>При сохранении данных в файл вместе с электронной подписью</strong> задайте поведение приложения:</li>
<li> <ul><li><strong>Сохранять все подписи</strong> - все подписи сохраняются </li>
<div>С помощью переключателя <strong>При сохранении данных в файл вместе с электронной подписью</strong> задайте поведение приложения при выполнении команды <strong>Сохранить вместе с электронной подписью</strong>: </div> <li><strong>Спрашивать</strong> - выбор сохраняемых подписей осуществляется из <a href="Сохранение вместе с электронной подписью">списка</a>.</li>
<ul><li> <li>Включите флажок <strong>Сохранить сертификат</strong> для сохранения на компьютер сертификата вместе с файлом и электронной подписью. </li></ul></ul></h3>
<div><strong>Сохранять все подписи</strong> - все подписи сохраняются; </div> <h3>
</li> </h3>
<li> <h3>Машиночитаемые доверенности (единый формат) </h3>
<div><strong>Спрашивать</strong> - выбор сохраняемых подписей осуществляется из <a href="CommonForm.СохранениеВместеСЭлектроннойПодписью/Help">списка</a>.</div></li></ul></li> <ul><li>Для того чтобы попасть в <a href="Catalog.МашиночитаемыеДоверенности/Help"> список машиночитаемых доверенностей (МЧД)</a> перейдите по гиперссылке. </li></ul><h3>Легенда</h3>
<li>
<div>Включите флажок <strong>Сохранять сертификат</strong> для сохранения на компьютер сертификата вместе с файлом и электронной подписью.</div></li></ul><h3>Машиночитаемые доверенности (единый формат) </h3>
<ul><li>Для того чтобы попасть в<a href="Catalog.МашиночитаемыеДоверенности/Help"> список машиночитаемых доверенностей (МЧД)</a> перейдите по гиперссылке. </li></ul><h3>Легенда</h3>
<ul><li>Для того чтобы посмотреть состояние сертификатов нажмите раздел <strong>Легенда</strong> в нижней части списка. </li></ul><h3>См. также:</h3> <ul><li>Для того чтобы посмотреть состояние сертификатов нажмите раздел <strong>Легенда</strong> в нижней части списка. </li></ul><h3>См. также:</h3>
<ul><li>Перейдите по этой ссылке в соответствующий раздел 1С:ИТС, если имеются вопросы.</li></ul><h3>Дополнительно</h3> <ul><li>Перейдите по этой ссылке в соответствующий раздел 1С:ИТС, если имеются вопросы.</li></ul><ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
<ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -530,7 +530,7 @@
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла(); ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Интерактивно = Ложь; ПараметрыСохранения.Интерактивно = Ложь;
ИмяФайлаДляОткрытия = ИмяКаталога+"\"+ДополнительныеПараметры.ИмяФайлаДляОткрытия; ИмяФайлаДляОткрытия = ИмяКаталога + ПолучитьРазделительПути() + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ДополнительныеПараметры.ИмяФайлаДляОткрытия);
ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, ДополнительныеПараметры.АдресДокумента, ИмяФайлаДляОткрытия, ПараметрыСохранения); ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, ДополнительныеПараметры.АдресДокумента, ИмяФайлаДляОткрытия, ПараметрыСохранения);
КонецПроцедуры КонецПроцедуры
@@ -670,7 +670,7 @@
Исключение Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке(); ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина); ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
ПоказатьПредупреждение(, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(ИнформацияОбОшибке);
Возврат; Возврат;
КонецПопытки; КонецПопытки;
ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина); ПодключитьОбработчикОжидания("СкрытьДлительнуюОперацию", 0.1, Истина);
@@ -682,7 +682,6 @@
ТекстОшибки = ""; ТекстОшибки = "";
Справочники.ВерсииРасширений.УдалитьРасширения(ИдентификаторыРасширений, ТекстОшибки); Справочники.ВерсииРасширений.УдалитьРасширения(ИдентификаторыРасширений, ТекстОшибки);
УдалитьСвойстваРасширений(ИдентификаторыРасширений);
ОбновитьСписок(); ОбновитьСписок();
@@ -692,15 +691,6 @@
КонецПроцедуры КонецПроцедуры
&НаСервере
Процедура УдалитьСвойстваРасширений(ИдентификаторыРасширений)
Для каждого ИдентификаторРасширения Из ИдентификаторыРасширений Цикл
РегистрыСведений.СвойстваРасширений.УдалитьСвойстваРасширенияПоИдентификатору(ИдентификаторРасширения);
КонецЦикла;
КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура ОтключитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт Процедура ОтключитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт
@@ -74,6 +74,9 @@
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<font xsi:type="core:FontRef">
<font>Style.ВажнаяНадписьШрифт</font>
</font>
<extInfo xsi:type="form:LabelDecorationExtInfo"> <extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign> <horizontalAlign>Left</horizontalAlign>
</extInfo> </extInfo>
@@ -500,6 +503,9 @@
<type>Label</type> <type>Label</type>
<autoMaxWidth>true</autoMaxWidth> <autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight> <autoMaxHeight>true</autoMaxHeight>
<font xsi:type="core:FontRef">
<font>Style.ВажнаяНадписьШрифт</font>
</font>
<extInfo xsi:type="form:LabelDecorationExtInfo"> <extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign> <horizontalAlign>Left</horizontalAlign>
</extInfo> </extInfo>
@@ -1036,7 +1036,7 @@
ПолеЗначения.РежимВыбораИзСписка = Не ЭтоПолеСписка И (Строка.ДоступныеЗначения <> Неопределено); ПолеЗначения.РежимВыбораИзСписка = Не ЭтоПолеСписка И (Строка.ДоступныеЗначения <> Неопределено);
ПривестиЗначениеКВидуСравнения(Строка); ПривестиЗначениеКВидуСравнения(Строка);
УстановитьПредставлениеЗначения(Строка); УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
@@ -1153,7 +1153,7 @@
ЭлементНастройки.Значение = Строка.Значение; ЭлементНастройки.Значение = Строка.Значение;
УстановитьМодифицированность(); УстановитьМодифицированность();
УстановитьПредставлениеЗначения(Строка); УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
Если НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда Если НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда
ВариантБылМодифицирован = ВариантМодифицирован; ВариантБылМодифицирован = ВариантМодифицирован;
@@ -1199,7 +1199,7 @@
ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, ПравоеЗначение"); ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, ПравоеЗначение");
УстановитьМодифицированность(); УстановитьМодифицированность();
УстановитьПредставлениеЗначения(Строка); УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
@@ -2446,7 +2446,7 @@
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки); Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки);
ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки); ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки);
УстановитьПредставлениеЗначения(Строка); УстановитьПредставлениеЗначения(Строка, СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора);
Возврат УстановленыУспешно; Возврат УстановленыУспешно;
КонецФункции КонецФункции
@@ -3645,15 +3645,22 @@
КонецПроцедуры КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредставлениеЗначения(Строка) Процедура УстановитьПредставлениеЗначения(Строка, ДоступныеПоляОтбора)
Строка.ПредставлениеЗначения = ""; Строка.ПредставлениеЗначения = "";
ДоступныеЗначения = Строка.ДоступныеЗначения; ДоступныеЗначения = Строка.ДоступныеЗначения;
Значение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение);
Если ДоступныеЗначения = Неопределено Тогда Если ДоступныеЗначения = Неопределено Тогда
Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда
ДоступноеПоле = ДоступныеПоляОтбора.НайтиПоле(Значение);
Если ДоступноеПоле <> Неопределено Тогда
Строка.ПредставлениеЗначения = ДоступноеПоле.Заголовок;
КонецЕсли;
КонецЕсли;
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Значение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение);
НайденныйЭлемент = ДоступныеЗначения.НайтиПоЗначению(Значение); НайденныйЭлемент = ДоступныеЗначения.НайтиПоЗначению(Значение);
Если НайденныйЭлемент <> Неопределено Тогда Если НайденныйЭлемент <> Неопределено Тогда
Строка.ПредставлениеЗначения = НайденныйЭлемент.Представление; Строка.ПредставлениеЗначения = НайденныйЭлемент.Представление;
@@ -213,6 +213,19 @@
КонецФункции КонецФункции
// Возвращает разрешение на доступ к веб-сервису адресов через сеть Интернет.
// Если доступ запрещен, то подбор и проверка адресов использует только загруженные данные в приложение.
// Изменение доступа выполняется в разделе Администрирование - Интернет-поддержка и сервисы.
//
// Возвращаемое значение:
// Булево - если Истина, то доступ к веб-сервису разрешен.
//
Функция РазрешенДоступВИнтернет() Экспорт
Возврат Не АдресныйКлассификаторПовтИсп.ИспользоватьТолькоЗагруженныеДанные();
КонецФункции
// Проверяет адреса на соответствие адресному классификатору // Проверяет адреса на соответствие адресному классификатору
// и возвращает подходящие варианты, содержащие сведения об адресе. // и возвращает подходящие варианты, содержащие сведения об адресе.
// При проверке адреса через веб-сервиса выполнение функции может занимать 20 секунд. // При проверке адреса через веб-сервиса выполнение функции может занимать 20 секунд.
@@ -425,6 +438,41 @@
КонецФункции КонецФункции
// Проверяет корректность ОКМТО бюджетополучателей.
//
// Для проверки ОКТМО бюджетополучателей требуется подключение к Интернет-поддержке пользователей и наличие
// постоянного соединения с интернетом, т.к. адресные сведения, загруженные в приложение, не используются.
// Проверка выполняется порциям по 100 значений за один запросу к веб-сервису, поэтому рекомендуется выполнять
// ее в фоновом режиме.
// При получении ответа от веб-сервиса отличного от успешного (код 200 ОК) выполнение функции прерывается
// и возвращается ошибка. Поэтому если в данных результата отсутствует ОКТМО бюджетополучателя,
// то он не было проверен из-за ошибок работы с веб-сервисом.
//
// Параметры:
// ОКТМОБюджетополучателей - Массив из Строка - список ОКТМО бюджетополучателей.
// - Строка - ОКТМО бюджетополучателя.
//
// Возвращаемое значение:
// Структура:
// * Отказ - Булево - если Истина, то при получении ОКТМО бюджетополучателя через веб-сервис возникла ошибка.
// * ПредставлениеОшибкиДляПользователя - Строка - текст ошибки для отображения пользователю.
// * ИнформацияОбОшибке - ИнформацияОбОшибке - структурированная информация об ошибке.
// * Данные - Соответствие из КлючИЗначение:
// ** Ключ - Строка - ОКТМО бюджетополучателя.
// ** Значение - Структура:
// *** Успешно - Булево - если Истина, то код ОКТМО бюджетополучателей корректный;
// *** ТекстОшибки - Строка - текст ошибки, если ОКТМО некорректный;
// *** МуниципальныеОбразования - Массив из Строка - список муниципальных образований, принадлежащих данному ОКТМО.
//
Функция ПроверитьОКТМОБюджетополучателя(ОКТМОБюджетополучателей) Экспорт
СписокОКТМО = ?(ТипЗнч(ОКТМОБюджетополучателей) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОКТМОБюджетополучателей), ОКТМОБюджетополучателей);
Возврат АдресныйКлассификаторСлужебный.ПроверитьОКМТОБюджетополучателя(СписокОКТМО);
КонецФункции
#Область УстаревшиеПроцедурыИФункции #Область УстаревшиеПроцедурыИФункции
// Возвращает идентификационный код дома и адресного объекта с помощью веб-сервиса фирмы 1С предоставляющего // Возвращает идентификационный код дома и адресного объекта с помощью веб-сервиса фирмы 1С предоставляющего
@@ -157,9 +157,9 @@
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура: // Структура:
// * HTTPСоединение - объект для вызовов сервиса. // * СервисКлассификатора - HTTPСоединение - объект для вызовов сервиса.
// //
Функция СервисКлассификатора1С(ВремяОжидания = 120) Экспорт Функция СервисКлассификатора1С(ВремяОжидания = 20) Экспорт
Возврат Новый Структура("СервисКлассификатора", АдресныйКлассификаторСлужебный.СервисКлассификатора1С(ВремяОжидания)); Возврат Новый Структура("СервисКлассификатора", АдресныйКлассификаторСлужебный.СервисКлассификатора1С(ВремяОжидания));
@@ -6471,6 +6471,172 @@
КонецПроцедуры КонецПроцедуры
Функция ПроверитьОКМТОБюджетополучателя(ОКТМОБюджетополучателей) Экспорт
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("АдресныйКлассификаторСлужебный.ПроверитьОКМТОБюджетополучателя",
"ОКТМОБюджетополучателей", ОКТМОБюджетополучателей, Тип("Массив"));
РазмерПорции = 100;
Результат = НовыйРезультатИзВебСервиса();
Порция = Новый Массив;
Для Позиция = 0 По ОКТМОБюджетополучателей.ВГраница() Цикл
ОКТМОБюджетополучателя = СокрЛП(ОКТМОБюджетополучателей.Получить(Позиция));
Если СтрДлина(ОКТМОБюджетополучателя) = 8 Или СтрДлина(ОКТМОБюджетополучателя) = 11 Тогда
Если Результат.Данные[ОКТМОБюджетополучателя] = Неопределено Тогда
Порция.Добавить(ОКТМОБюджетополучателя);
КонецЕсли;
Иначе
ДанныеПоОКТМО = ДанныеПоОКТМО();
ДанныеПоОКТМО.ТекстОшибки = НСтр("ru = 'Указан некорректный код ОКТМО'");
Результат.Данные.Вставить(ОКТМОБюджетополучателя, ДанныеПоОКТМО);
КонецЕсли;
Если (Порция.Количество() = РазмерПорции
Или Позиция = ОКТМОБюджетополучателей.ВГраница())
И Порция.Количество() > 0 Тогда
ОбработатьПорциюОКТМОБюджетополучателей(Результат, Порция);
Если Результат.Отказ Тогда
Возврат Результат;
КонецЕсли;
Порция = Новый Массив;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ДанныеПоОКТМО()
ДанныеПоОКТМО = Новый Структура();
ДанныеПоОКТМО.Вставить("Успешно", Ложь);
ДанныеПоОКТМО.Вставить("ТекстОшибки", "");
ДанныеПоОКТМО.Вставить("МуниципальныеОбразования", Новый Массив);
Возврат ДанныеПоОКТМО;
КонецФункции
Функция ОбработатьПорциюОКТМОБюджетополучателей(Результат, Порция)
ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор);
ДанныеДляЗапроса = Новый Структура("oktmoList", Порция);
ОписаниеСервиса = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С();
Сервис = ОписаниеСервиса.СервисКлассификатора;
ПрефиксВерсииЗапроса = ПрефиксВерсииЗапросаСервисаОКТМО();
HTTPЗапрос = Новый HTTPЗапрос(ПрефиксВерсииЗапроса + "validateOktmoList");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("X-1C-Request-UID", ИдентификаторЗапроса);
HTTPЗапрос.УстановитьТелоИзСтроки(СтруктураВСтрокуJSON(ДанныеДляЗапроса));
Попытка
РезультатПроверки = Сервис.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
ОбработатьОшибкуОбращенияКВебСервисуПриПолученииОКТМО(Результат);
Возврат Результат;
КонецПопытки;
Если ТребуетсяОбновитьТикетАвторизации(РезультатПроверки.КодСостояния) Тогда
Сервис = ОбновитьОписаниеСервисаКлассификатора(ОписаниеСервиса);
Попытка
Ответ = Сервис.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
ОбработатьОшибкуОбращенияКВебСервисуПриПолученииОКТМО(Результат);
Возврат Результат;
КонецПопытки;
КонецЕсли;
ПолученныеДанные = РезультатПроверки.ПолучитьТелоКакСтроку("UTF-8");
Если РезультатПроверки.КодСостояния = 200 Тогда
ДанныеПроверки = СтрокуJSONВСоответствие(ПолученныеДанные);
Если ТипЗнч(ДанныеПроверки) = Тип("Соответствие") Тогда
НаборОКТМО = ДанныеПроверки["validateOktmoData"];
Для каждого ДанныеОКТМО Из НаборОКТМО Цикл
ЗначениеОКМТО = ДанныеОКТМО.Значение;
ДанныеПоОКТМО = ДанныеПоОКТМО();
Если ЗначениеОКМТО["validateOktmoStatus"] = "VERIFIED_OKTMO" Тогда
ДанныеПоОКТМО.Успешно = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеОКМТО["validateMessage"]) Тогда
ДанныеПоОКТМО.ТекстОшибки = ЗначениеОКМТО["validateMessage"];
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеОКМТО["oktmoMunValue"]) Тогда
ДанныеПоОКТМО.МуниципальныеОбразования = ЗначениеОКМТО["oktmoMunValue"];
КонецЕсли;
Результат.Данные.Вставить(ДанныеОКТМО.Ключ, ДанныеПоОКТМО)
КонецЦикла;
КонецЕсли;
Иначе
Результат.ПредставлениеОшибкиДляПользователя = НСтр("ru = 'Проверка ОКТМО бюджетополучателя недоступна по причине:
|- не подключена интернет-поддержка пользователей;
|- неполадки у интернет-провайдера;
|- подключение к серверу блокирует межсетевой экран,
| антивирус или другие приложения;
|- веб-сервис отключен или на техническом обслуживании.'");
Результат.Отказ = Истина;
ТекстОшибки = НСтр("ru = 'При проверке ОКМТО бюджетополучателя через веб-сервис возникли проблемы.'");
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, ТекстОшибки, HTTPЗапрос.АдресРесурса
+ " X-1C-Request-UID:" + ИдентификаторЗапроса, РезультатПроверки.КодСостояния);
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ОбработатьОшибкуОбращенияКВебСервисуПриПолученииОКТМО(Результат)
Результат.Отказ = Истина;
Результат.ИнформацияОбОшибке = ИнформацияОбОшибке();
Результат.ПредставлениеОшибкиДляПользователя = НСтр("ru = 'При проверке ОКМТО бюджетополучателя через веб-сервис возникли проблемы.'");
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(Результат.ИнформацияОбОшибке));
КонецПроцедуры
Функция ОбновитьОписаниеСервисаКлассификатора(ОписаниеСервиса)
ОписаниеСервиса.СервисКлассификатора = СервисКлассификатора1С();
Сервис = ОписаниеСервиса.СервисКлассификатора;
Возврат Сервис;
КонецФункции
Функция ТребуетсяОбновитьТикетАвторизации(КодСостояния)
Возврат КодСостояния = 401
Или КодСостояния = 409
Или КодСостояния = 419;
КонецФункции
Процедура ЗаполнитьЗначениеСвойстваЕслиПустое(Приемник, Источник, ИмяСвойстваПриемника, ИмяСвойстваИлиЗначениеИсточника, ЭтоЗначение = Ложь) Процедура ЗаполнитьЗначениеСвойстваЕслиПустое(Приемник, Источник, ИмяСвойстваПриемника, ИмяСвойстваИлиЗначениеИсточника, ЭтоЗначение = Ложь)
ЗначениеСвойства = ?(ЭтоЗначение, ИмяСвойстваИлиЗначениеИсточника, Источник[ИмяСвойстваИлиЗначениеИсточника]); ЗначениеСвойства = ?(ЭтоЗначение, ИмяСвойстваИлиЗначениеИсточника, Источник[ИмяСвойстваИлиЗначениеИсточника]);
@@ -6935,11 +7101,9 @@
Возврат Результат; Возврат Результат;
КонецПопытки; КонецПопытки;
Если РезультатПроверки.КодСостояния <> 200 Если ТребуетсяОбновитьТикетАвторизации(РезультатПроверки.КодСостояния) Тогда
И РезультатПроверки.КодСостояния <> 400 Тогда
ОписаниеСервиса.СервисКлассификатора = СервисКлассификатора1С(20); Сервис = ОбновитьОписаниеСервисаКлассификатора(ОписаниеСервиса);
Сервис = ОписаниеСервиса.СервисКлассификатора;
Попытка Попытка
РезультатПроверки = Сервис.ОтправитьДляОбработки(HTTPЗапрос); РезультатПроверки = Сервис.ОтправитьДляОбработки(HTTPЗапрос);
@@ -6983,7 +7147,7 @@
Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки; Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки;
Результат.Отказ = Истина; Результат.Отказ = Истина;
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, Результат, HTTPЗапрос.АдресРесурса ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, Результат.ПодробноеПредставлениеОшибки, HTTPЗапрос.АдресРесурса
+ " X-1C-Request-UID:" + ИдентификаторЗапроса, РезультатПроверки.КодСостояния); + " X-1C-Request-UID:" + ИдентификаторЗапроса, РезультатПроверки.КодСостояния);
Возврат Результат; Возврат Результат;
@@ -7096,6 +7260,26 @@
КонецФункции КонецФункции
// Возвращаемое значение:
// Структура:
// * Данные - Соответствие
// * Отказ - Булево
// * ПредставлениеОшибкиДляПользователя - Строка
// * ИнформацияОбОшибке - ИнформацияОбОшибке
// - Неопределено
//
Функция НовыйРезультатИзВебСервиса()
Результат = Новый Структура;
Результат.Вставить("Данные", Новый Соответствие);
Результат.Вставить("Отказ", Ложь);
Результат.Вставить("ПредставлениеОшибкиДляПользователя", "");
Результат.Вставить("ИнформацияОбОшибке", Неопределено);
Возврат Результат;
КонецФункции
Функция ПредставлениеДомаИСтроений(ОписаниеДома) Функция ПредставлениеДомаИСтроений(ОписаниеДома)
СписокСтроений = Новый Массив; СписокСтроений = Новый Массив;
@@ -7698,6 +7882,10 @@
Возврат "rest/v4/"; Возврат "rest/v4/";
КонецФункции КонецФункции
Функция ПрефиксВерсииЗапросаСервисаОКТМО()
Возврат "rest/oktmo/v1/";
КонецФункции
// Возвращает информацию из классификатора субъектов РФ. // Возвращает информацию из классификатора субъектов РФ.
// //
// Возвращаемое значение: // Возвращаемое значение:
@@ -8198,7 +8386,7 @@
// Возвращаемое значение: // Возвращаемое значение:
// HTTPСоединение - объект для вызовов сервиса. // HTTPСоединение - объект для вызовов сервиса.
// //
Функция СервисКлассификатора1С(ВремяОжидания = 120) Экспорт Функция СервисКлассификатора1С(ВремяОжидания = 20) Экспорт
URLПорталаПоддержки = "https://portal.1c.ru/"; URLПорталаПоддержки = "https://portal.1c.ru/";
СохраненныйТекущийURLПорталаПоддержки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLПорталаПоддержки"); СохраненныйТекущийURLПорталаПоддержки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLПорталаПоддержки");
@@ -8322,10 +8510,9 @@
КонецПопытки; КонецПопытки;
Если Ответ.КодСостояния <> 200 Тогда Если ТребуетсяОбновитьТикетАвторизации(Ответ.КодСостояния) Тогда
ОписаниеСервиса.СервисКлассификатора = СервисКлассификатора1С(ВремяОжидания); Сервис = ОбновитьОписаниеСервисаКлассификатора(ОписаниеСервиса);
Сервис = ОписаниеСервиса.СервисКлассификатора;
Попытка Попытка
Ответ = Сервис.Получить(HTTPЗапрос); Ответ = Сервис.Получить(HTTPЗапрос);
@@ -8402,7 +8589,7 @@
Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки; Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки;
ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8"); ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8");
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервера, Результат, ТекстURL, Ответ.КодСостояния); ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервера, Результат.ПодробноеПредставлениеОшибки, ТекстURL, Ответ.КодСостояния);
КонецПроцедуры КонецПроцедуры
@@ -8417,7 +8604,7 @@
КонецПроцедуры КонецПроцедуры
Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, Результат, ТекстURL, КодСостояния) Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния)
ШаблонТекстОтветаСервера = НСтр("ru = '%1 ШаблонТекстОтветаСервера = НСтр("ru = '%1
|Техническая информация. При запросе: %2 |Техническая информация. При запросе: %2
@@ -8425,7 +8612,7 @@
|с текстом: %4'"); |с текстом: %4'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстОтветаСервера, ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстОтветаСервера,
Результат.ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния, ОтветОтСервераСтрокой); ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния, ОтветОтСервераСтрокой);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
@@ -8512,6 +8699,19 @@
КонецФункции КонецФункции
Функция СтрокуJSONВСоответствие(Значение)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Значение);
Результат = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
// Описание национальных полей структуры контактной информации для хранения ее в формате JSON. // Описание национальных полей структуры контактной информации для хранения ее в формате JSON.
// Основной список полей определяется в одноименной функции общего модуля . // Основной список полей определяется в одноименной функции общего модуля .
// //
@@ -7543,9 +7543,9 @@
Запрос.УстановитьПараметр("НазначенияВариантовОтчетов", ПараметрыЗаполнения.НазначенияВариантовОтчетов); Запрос.УстановитьПараметр("НазначенияВариантовОтчетов", ПараметрыЗаполнения.НазначенияВариантовОтчетов);
Запрос.УстановитьПараметр("ИскатьВоВсехРазделах", ПараметрыЗаполнения.ИскатьВоВсехРазделах); Запрос.УстановитьПараметр("ИскатьВоВсехРазделах", ПараметрыЗаполнения.ИскатьВоВсехРазделах);
Если ПараметрыЗаполнения.ОтображатьВсеВариантыОтчетов Тогда Если ПараметрыЗаполнения.ОтображатьВсеВариантыОтчетов Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Параметр1", "ИСТИНА"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоНазначениюВариантовОтчетов", "ИСТИНА");
Иначе Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Параметр1", "ВариантыОтчетов.Назначение В (&НазначенияВариантовОтчетов)"); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоНазначениюВариантовОтчетов", "ВариантыОтчетов.Назначение В (&НазначенияВариантовОтчетов)");
КонецЕсли; КонецЕсли;
ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
@@ -7657,7 +7657,7 @@
| |
|ГДЕ |ГДЕ
| НЕ ВариантыОтчетов.ПометкаУдаления | НЕ ВариантыОтчетов.ПометкаУдаления
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
| |
|ОБЪЕДИНИТЬ ВСЕ |ОБЪЕДИНИТЬ ВСЕ
| |
@@ -7706,7 +7706,7 @@
|ГДЕ |ГДЕ
| (НЕ ВариантыОтчетов.ПометкаУдаления | (НЕ ВариантыОтчетов.ПометкаУдаления
| ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL) | ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL)
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
|; |;
| |
|//////////////////////////////////////////////////////////////////////////////// |////////////////////////////////////////////////////////////////////////////////
@@ -7773,7 +7773,7 @@
| ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)
| И (ВариантыОтчетов.Пользовательский | И (ВариантыОтчетов.Пользовательский
| ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
|"; |";
Если ЗначениеЗаполнено(СуффиксТекущегоЯзыка) Тогда Если ЗначениеЗаполнено(СуффиксТекущегоЯзыка) Тогда
@@ -7846,7 +7846,7 @@
| И (ПредставленияВариантов.КодЯзыка = &КодЯзыка) | И (ПредставленияВариантов.КодЯзыка = &КодЯзыка)
|ГДЕ |ГДЕ
| НЕ ВариантыОтчетов.ПометкаУдаления | НЕ ВариантыОтчетов.ПометкаУдаления
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
| |
|ОБЪЕДИНИТЬ ВСЕ |ОБЪЕДИНИТЬ ВСЕ
| |
@@ -7906,7 +7906,7 @@
|ГДЕ |ГДЕ
| (НЕ ВариантыОтчетов.ПометкаУдаления | (НЕ ВариантыОтчетов.ПометкаУдаления
| ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL) | ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL)
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
|; |;
| |
|//////////////////////////////////////////////////////////////////////////////// |////////////////////////////////////////////////////////////////////////////////
@@ -7994,7 +7994,7 @@
| ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)
| И (ВариантыОтчетов.Пользовательский | И (ВариантыОтчетов.Пользовательский
| ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
|"; |";
КонецЕсли; КонецЕсли;
@@ -8083,7 +8083,7 @@
| ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления) | ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)
| И (ВариантыОтчетов.Пользовательский | И (ВариантыОтчетов.Пользовательский
| ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления) | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)
| И &Параметр1 | И &УсловиеПоНазначениюВариантовОтчетов
| И втВсеВариантыСПодсистемами.Ссылка ЕСТЬ NULL | И втВсеВариантыСПодсистемами.Ссылка ЕСТЬ NULL
| |
|ОБЪЕДИНИТЬ ВСЕ |ОБЪЕДИНИТЬ ВСЕ
@@ -1378,8 +1378,16 @@
Настройки = ИспользуемыеНастройки(Форма, СвойстваЗаголовка.ИдентификаторНастроек); Настройки = ИспользуемыеНастройки(Форма, СвойстваЗаголовка.ИдентификаторНастроек);
Фильтры = Настройки.Отбор;
Фильтр = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрРазделаОтчета(Фильтры, СвойстваЗаголовка.Поле);
Если Настройки.Структура.Количество() > 1 Тогда
Если Фильтр = Неопределено
Или Фильтр <> Неопределено И Фильтр.ВидСравнения <> ВидСравнения Или Фильтр.ПравоеЗначение <> ДанныеРасшифровки.Значение Тогда
Фильтры = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрыРазделаОтчета(Настройки, СвойстваЗаголовка, ЭтоГруппировка); Фильтры = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрыРазделаОтчета(Настройки, СвойстваЗаголовка, ЭтоГруппировка);
Фильтр = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрРазделаОтчета(Фильтры, СвойстваЗаголовка.Поле); Фильтр = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрРазделаОтчета(Фильтры, СвойстваЗаголовка.Поле);
КонецЕсли;
КонецЕсли;
Если Фильтр = Неопределено Тогда Если Фильтр = Неопределено Тогда
@@ -841,7 +841,7 @@
ИмяМакета = МестоположениеМакетаРазделенное.Получить(МестоположениеМакетаРазделенное.ВГраница()); ИмяМакета = МестоположениеМакетаРазделенное.Получить(МестоположениеМакетаРазделенное.ВГраница());
Если МестоположениеМакетаРазделенное.Количество() = 2 Тогда Если МестоположениеМакетаРазделенное.Количество() = 2 Тогда
ДвоичныеДанныеКомпоненты = ПолучитьОбщийМакет(Местоположение); ДвоичныеДанныеКомпоненты = ПолучитьОбщийМакет(ИмяМакета);
Иначе Иначе
МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница()); МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница());
МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница()); МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница());
@@ -383,11 +383,10 @@
// Конструктор коллекции ПараметрыВыполненияФункции для функции ВыполнитьФункцию. // Конструктор коллекции ПараметрыВыполненияФункции для функции ВыполнитьФункцию.
// //
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности. // Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск выполняется сразу в основном потоке при выполнении любого из следующих условий: // Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); // * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации; // * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя; // * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
// * если выполняется функция модуля внешней обработки или внешнего отчета.
// //
// Параметры: // Параметры:
// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы,
@@ -446,11 +445,10 @@
// Конструктор коллекции ПараметрыВыполненияПроцедуры для функции ВыполнитьПроцедуру. // Конструктор коллекции ПараметрыВыполненияПроцедуры для функции ВыполнитьПроцедуру.
// //
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности. // Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск выполняется сразу в основном потоке при выполнении любого из следующих условий: // Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); // * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации; // * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя; // * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
// * если выполняется функция модуля внешней обработки или внешнего отчета.
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - параметры выполнения длительной операции: // Структура - параметры выполнения длительной операции:
@@ -775,11 +773,10 @@
// Возвращает новую структуру для параметра ПараметрыВыполнения функции ВыполнитьВФоне. // Возвращает новую структуру для параметра ПараметрыВыполнения функции ВыполнитьВФоне.
// //
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности. // Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск выполняется сразу в основном потоке при выполнении любого из следующих условий: // Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются); // * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации; // * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя; // * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
// * если выполняется функция модуля внешней обработки или внешнего отчета.
// //
// Параметры: // Параметры:
// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, во временное хранилище которой // ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, во временное хранилище которой
@@ -86,6 +86,7 @@
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
Если ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Справочники.Заметки) Тогда
Команда = Команды.Добавить(); Команда = Команды.Добавить();
Команда.Вид = "Органайзер"; Команда.Вид = "Органайзер";
Команда.Представление = НСтр("ru = 'Создать заметку'"); Команда.Представление = НСтр("ru = 'Создать заметку'");
@@ -96,6 +97,7 @@
Команда.Порядок = 50; Команда.Порядок = 50;
Команда.Обработчик = "ЗаметкиПользователяСлужебныйКлиент.СоздатьЗаметкуПоПредмету"; Команда.Обработчик = "ЗаметкиПользователяСлужебныйКлиент.СоздатьЗаметкуПоПредмету";
Команда.МножественныйВыбор = Ложь; Команда.МножественныйВыбор = Ложь;
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -504,6 +504,11 @@
// См. ОтчетыКлиентПереопределяемый.ПриНачалеВыбораЗначений. // См. ОтчетыКлиентПереопределяемый.ПриНачалеВыбораЗначений.
Процедура ПриНачалеВыбораЗначений(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) Экспорт Процедура ПриНачалеВыбораЗначений(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) Экспорт
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольРаботыПользователей") Тогда
МодульКонтрольРаботыПользователейСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонтрольРаботыПользователейСлужебныйКлиент");
МодульКонтрольРаботыПользователейСлужебныйКлиент.ПриНачалеВыбораЗначений(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка);
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступомСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеДоступомСлужебныйКлиент"); МодульУправлениеДоступомСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеДоступомСлужебныйКлиент");
МодульУправлениеДоступомСлужебныйКлиент.ПриНачалеВыбораЗначений(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка); МодульУправлениеДоступомСлужебныйКлиент.ПриНачалеВыбораЗначений(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка);
@@ -37,6 +37,9 @@
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.АнализЖурналаРегистрации); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.АнализЖурналаРегистрации);
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеУчетныхЗаписей); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеУчетныхЗаписей);
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеУчастниковГруппПользователей); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеУчастниковГруппПользователей);
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеУчастниковГруппДоступа);
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеРазрешенныхЗначенийГруппДоступа);
МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИзменениеРолейПрофилей);
КонецПроцедуры КонецПроцедуры
@@ -46,6 +49,9 @@
Отчеты.АнализЖурналаРегистрации.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка); Отчеты.АнализЖурналаРегистрации.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка);
Отчеты.ИзменениеУчетныхЗаписей.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка); Отчеты.ИзменениеУчетныхЗаписей.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка);
Отчеты.ИзменениеУчастниковГруппПользователей.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка); Отчеты.ИзменениеУчастниковГруппПользователей.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка);
Отчеты.ИзменениеУчастниковГруппДоступа.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка);
Отчеты.ИзменениеРазрешенныхЗначенийГруппДоступа.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка);
Отчеты.ИзменениеРолейПрофилей.ПередДобавлениемКомандОтчетов(КомандыОтчетов, Параметры, СтандартнаяОбработка);
КонецПроцедуры КонецПроцедуры
@@ -170,8 +176,15 @@
// //
Функция РегистрироватьИзмененияПравДоступа() Экспорт Функция РегистрироватьИзмененияПравДоступа() Экспорт
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
Возврат Константы.РегистрироватьИзмененияПравДоступа.Получить();
Результат = Константы.РегистрироватьИзмененияПравДоступа.Получить();
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Возврат Результат;
КонецФункции КонецФункции
@@ -70,6 +70,16 @@
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
// См. ОтчетыКлиентПереопределяемый.ПриНачалеВыбораЗначений
Процедура ПриНачалеВыбораЗначений(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка) Экспорт
Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ИзменениеРолейПрофилей" Тогда
ПриНачалеВыбораЗначенийОтчетаИзменениеРолейПрофилей(ФормаОтчета,
УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
@@ -129,4 +139,46 @@
ОткрытьФорму("Отчет.АнализЖурналаРегистрации.Форма.СведенияОРегламентномЗадании", ПараметрыФормы); ОткрытьФорму("Отчет.АнализЖурналаРегистрации.Форма.СведенияОРегламентномЗадании", ПараметрыФормы);
КонецПроцедуры КонецПроцедуры
// Для процедуры ПриНачалеВыбораЗначений
Процедура ПриНачалеВыбораЗначенийОтчетаИзменениеРолейПрофилей(ФормаОтчета, УсловияВыбора, ОповещениеОЗакрытии, СтандартнаяОбработка)
Если УсловияВыбора.ИмяПоля <> "Роль" Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Выбранные = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(УсловияВыбора.Отмеченные);
УдалитьПустыеЗначения(Выбранные);
Коллекции = Новый СписокЗначений;
Коллекции.Добавить("Роли");
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ВыбиратьСсылки", Истина);
ПараметрыПодбора.Вставить("ВыбранныеОбъектыМетаданных", Выбранные);
ПараметрыПодбора.Вставить("КоллекцииВыбираемыхОбъектовМетаданных", Коллекции);
ПараметрыПодбора.Вставить("СпособГруппировкиОбъектов", "ПоВидам");
ПараметрыПодбора.Вставить("Заголовок", НСтр("ru = 'Подбор ролей'"));
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыПодбора,,,,, ОповещениеОЗакрытии);
КонецПроцедуры
// Для процедуры ПриНачалеВыбораЗначенийОтчетаИзменениеРолейПрофилей.
Процедура УдалитьПустыеЗначения(ОтмеченныеЗначения)
Индекс = ОтмеченныеЗначения.Количество() - 1;
Пока Индекс >= 0 Цикл
Элемент = ОтмеченныеЗначения[Индекс];
Индекс = Индекс - 1;
Если Не ЗначениеЗаполнено(Элемент.Значение) Тогда
ОтмеченныеЗначения.Удалить(Элемент);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -99,9 +99,9 @@
// * ДокументВид - Строка // * ДокументВид - Строка
// * ДокументНомер - Строка // * ДокументНомер - Строка
// * ДокументКемВыдан - Строка // * ДокументКемВыдан - Строка
// * ДокументДатаВыдачи - Строка // * ДокументДатаВыдачи - Дата
// * ДокументКодПодразделения - Строка // * ДокументКодПодразделения - Строка - код подразделения в виде 999-999
// * ДокументСрокДействия - Строка // * ДокументСрокДействия - Дата
// * Гражданство - СправочникСсылка.СтраныМира // * Гражданство - СправочникСсылка.СтраныМира
// * БезГражданства - Булево // * БезГражданства - Булево
// * МестоРождения - Строка // * МестоРождения - Строка
@@ -252,21 +252,40 @@
Процедура ПриЗаполненииРеквизитовОрганизации(Реквизиты) Экспорт Процедура ПриЗаполненииРеквизитовОрганизации(Реквизиты) Экспорт
КопияРеквизитов = ОбщегоНазначения.СкопироватьРекурсивно(Реквизиты);
Если Реквизиты.ЭтоФизическоеЛицо = Истина Тогда Если Реквизиты.ЭтоФизическоеЛицо = Истина Тогда
МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовФизическогоЛица(Реквизиты.Ссылка, Реквизиты); МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовФизическогоЛица(Реквизиты.Ссылка, КопияРеквизитов);
ИначеЕсли Реквизиты.ЭтоКонтрагент = Истина Тогда ИначеЕсли Реквизиты.ЭтоКонтрагент = Истина Тогда
МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовКонтрагента(Реквизиты.Ссылка, Реквизиты); МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовКонтрагента(Реквизиты.Ссылка, КопияРеквизитов);
Иначе Иначе
СтандартнаяОбработка = Истина; СтандартнаяОбработка = Истина;
МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовОрганизации(Реквизиты.Ссылка, Реквизиты, СтандартнаяОбработка); МашиночитаемыеДоверенностиФНСПереопределяемый.ПриЗаполненииРеквизитовОрганизации(Реквизиты.Ссылка, КопияРеквизитов, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда Если СтандартнаяОбработка Тогда
ПриЗаполненииРеквизитовОрганизацииМЧД(Реквизиты); ПриЗаполненииРеквизитовОрганизацииМЧД(КопияРеквизитов);
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
ЗаполнитьЗначенияСвойств(Реквизиты, КопияРеквизитов);
Если Реквизиты.ЭтоФизическоеЛицо = Истина Тогда
ДокументКодПодразделения = Строка(Реквизиты.ДокументКодПодразделения);
Если СтрДлина(ДокументКодПодразделения) = 6 И ДокументКодПодразделения = ТолькоЦифры(ДокументКодПодразделения) Тогда
Реквизиты.ДокументКодПодразделения = Лев(ДокументКодПодразделения, 3) + "-" + Прав(ДокументКодПодразделения, 3);
КонецЕсли;
КонецЕсли;
Если Не Реквизиты.ЭтоФизическоеЛицо И ЗначениеЗаполнено(Реквизиты.РеквизитыЛицаБезДоверенности) Тогда
РеквизитыЛицаБезДоверенности = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
"ФизическоеЛицо", Реквизиты.ЛицоБезДоверенности,
?(Реквизиты.ЭтоИндивидуальныйПредприниматель = Истина, "ИндивидуальныйПредприниматель", "ДолжностноеЛицо"));
ЗаполнитьЗначенияСвойств(РеквизитыЛицаБезДоверенности, Реквизиты.РеквизитыЛицаБезДоверенности);
Реквизиты.РеквизитыЛицаБезДоверенности = РеквизитыЛицаБезДоверенности;
КонецЕсли;
КонецПроцедуры КонецПроцедуры
Функция РеквизитыУчастника(Назначение, ОрганизацияТип, ОрганизацияТипСтрока, ОрганизацияСсылка, ВидУчастника, Функция РеквизитыУчастника(Назначение, ОрганизацияТип, ОрганизацияТипСтрока, ОрганизацияСсылка, ВидУчастника,
@@ -286,7 +305,7 @@
ВидУчастника); ВидУчастника);
Иначе Иначе
Список = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыОрганизацииСписок(Назначение, Ложь, Список = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыОрганизацииСписок(Назначение, Ложь,
ВидУчастника, Назначение); ВидУчастника);
КонецЕсли; КонецЕсли;
ОчиститьНеобязательныеРеквизиты(Реквизиты, Список); ОчиститьНеобязательныеРеквизиты(Реквизиты, Список);
@@ -1863,9 +1882,13 @@
Функция ПроверитьЗаполнениеРеквизитов(Форма, Реквизиты, СведенияОбОрганизации = Неопределено) Экспорт Функция ПроверитьЗаполнениеРеквизитов(Форма, Реквизиты, СведенияОбОрганизации = Неопределено) Экспорт
Отказ = Ложь; Отказ = Ложь;
ВидДокумента = ""; ВидДокумента = Неопределено;
Гражданство = Неопределено; Гражданство = Неопределено;
БезГражданства = Неопределено; БезГражданства = Неопределено;
КодПодразделения = Неопределено;
ДатаВыдачи = Неопределено;
КемВыдан = Неопределено;
СрокДействия = Неопределено;
Сведения = ?(СведенияОбОрганизации = Неопределено, Форма, СведенияОбОрганизации); Сведения = ?(СведенияОбОрганизации = Неопределено, Форма, СведенияОбОрганизации);
@@ -1880,13 +1903,24 @@
Для Каждого Реквизит Из Реквизиты Цикл Для Каждого Реквизит Из Реквизиты Цикл
Если Реквизит.Имя = "ДокументВид" Тогда Если Реквизит.Имя = "ДокументВид" Тогда
Если Реквизит.Значение <> "0" Тогда
ВидДокумента = Реквизит.Значение; ВидДокумента = Реквизит.Значение;
КонецЕсли;
ИначеЕсли Реквизит.Имя = "ДокументНомер" Тогда ИначеЕсли Реквизит.Имя = "ДокументНомер" Тогда
НомерДокумента = Реквизит; НомерДокумента = Реквизит;
Продолжить; Продолжить;
ИначеЕсли Реквизит.Имя = "ДокументДатаВыдачи" Тогда
ДатаВыдачи = Реквизит;
Продолжить;
ИначеЕсли Реквизит.Имя = "ДокументКодПодразделения" Тогда ИначеЕсли Реквизит.Имя = "ДокументКодПодразделения" Тогда
КодПодразделения = Реквизит; КодПодразделения = Реквизит;
Продолжить; Продолжить;
ИначеЕсли Реквизит.Имя = "ДокументКемВыдан" Тогда
КемВыдан = Реквизит;
Продолжить;
ИначеЕсли Реквизит.Имя = "ДокументСрокДействия" Тогда
СрокДействия = Реквизит;
Продолжить;
ИначеЕсли Реквизит.Имя = "Гражданство" Тогда ИначеЕсли Реквизит.Имя = "Гражданство" Тогда
Гражданство = Реквизит; Гражданство = Реквизит;
ИначеЕсли Реквизит.Имя = "БезГражданства" Тогда ИначеЕсли Реквизит.Имя = "БезГражданства" Тогда
@@ -1904,19 +1938,39 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если ВидДокумента = "21" Тогда Если ЗначениеЗаполнено(ВидДокумента) И КодПодразделения <> Неопределено Тогда
ТекстОшибки = ОшибкиПроверкиКодаПодразделения(КодПодразделения.Значение, ВидДокумента <> "10");
ТекстОшибки = ОшибкиПроверкиКодаПодразделения(КодПодразделения.Значение);
Если Не ПустаяСтрока(ТекстОшибки) Тогда Если Не ПустаяСтрока(ТекстОшибки) Тогда
ТекстОшибки = КодПодразделения.ТекстПроверкиЗначения + " " + ТекстОшибки; ТекстОшибки = КодПодразделения.ТекстПроверкиЗначения + " " + ТекстОшибки;
СообщитьПользователю(Форма, ТекстОшибки, КодПодразделения.ПолеСообщения, Отказ); СообщитьПользователю(Форма, ТекстОшибки, КодПодразделения.ПолеСообщения, Отказ);
КонецЕсли; КонецЕсли;
КонецЕсли;
Если ВидДокумента = "21" Тогда
ТекстОшибки = ОшибкиПроверкиНомераПаспорта(НомерДокумента.Значение); ТекстОшибки = ОшибкиПроверкиНомераПаспорта(НомерДокумента.Значение);
Если Не ПустаяСтрока(ТекстОшибки) Тогда Если Не ПустаяСтрока(ТекстОшибки) Тогда
ТекстОшибки = НомерДокумента.ТекстПроверкиЗначения + " " + ТекстОшибки; ТекстОшибки = НомерДокумента.ТекстПроверкиЗначения + " " + ТекстОшибки;
СообщитьПользователю(Форма, ТекстОшибки, НомерДокумента.ПолеСообщения, Отказ); СообщитьПользователю(Форма, ТекстОшибки, НомерДокумента.ПолеСообщения, Отказ);
КонецЕсли; КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(ВидДокумента) Тогда
НомерДокумента.ТекстНезаполненного = НомерДокумента.ТекстПроверкиЗначения;
ПроверитьЗаполнениеРеквизита(Форма, НомерДокумента, Отказ, ЭтоИП, ЭтоФЛ);
КонецЕсли;
Если ВидДокумента = "22" И СрокДействия <> Неопределено Тогда
СрокДействия.ТекстНезаполненного = СрокДействия.ТекстПроверкиЗначения;
ПроверитьЗаполнениеРеквизита(Форма, СрокДействия, Отказ, ЭтоИП, ЭтоФЛ);
КонецЕсли;
Если ЗначениеЗаполнено(ВидДокумента) Тогда
ДатаВыдачи.ТекстНезаполненного = ДатаВыдачи.ТекстПроверкиЗначения;
ПроверитьЗаполнениеРеквизита(Форма, ДатаВыдачи, Отказ, ЭтоИП, ЭтоФЛ);
Если ВидДокумента <> "10" И КемВыдан <> Неопределено Тогда
КемВыдан.ТекстНезаполненного = КемВыдан.ТекстПроверкиЗначения;
ПроверитьЗаполнениеРеквизита(Форма, КемВыдан, Отказ, ЭтоИП, ЭтоФЛ);
КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -2091,10 +2145,14 @@
КонецФункции КонецФункции
Функция ОшибкиПроверкиКодаПодразделения(КодПодразделения) Функция ОшибкиПроверкиКодаПодразделения(КодПодразделения, ПроверятьНаЗаполненность = Ложь)
Если ПустаяСтрока(КодПодразделения) Тогда Если ПустаяСтрока(КодПодразделения) Тогда
Если ПроверятьНаЗаполненность Тогда
Возврат НСтр("ru = 'Не указан код подразделения'"); Возврат НСтр("ru = 'Не указан код подразделения'");
Иначе
Возврат "";
КонецЕсли;
КонецЕсли; КонецЕсли;
СтрокаЦифр = СтрЗаменить(СокрЛП(КодПодразделения), "-", ""); СтрокаЦифр = СтрЗаменить(СокрЛП(КодПодразделения), "-", "");
@@ -2110,6 +2168,10 @@
Возврат НСтр("ru = 'Код подразделения не может быть нулевым.'"); Возврат НСтр("ru = 'Код подразделения не может быть нулевым.'");
КонецЕсли; КонецЕсли;
Если Сред(КодПодразделения, 4, 1) <> "-" Тогда
Возврат НСтр("ru = 'Неправильный формат кода подразделения.'");
КонецЕсли;
Возврат ""; Возврат "";
КонецФункции КонецФункции
@@ -2136,10 +2198,6 @@
Функция ОшибкиПроверкиНомераПаспорта(Знач НомерПаспортаРФ) Функция ОшибкиПроверкиНомераПаспорта(Знач НомерПаспортаРФ)
Если ПустаяСтрока(НомерПаспортаРФ) Тогда
Возврат "";
КонецЕсли;
СтрокаЦифр = СтрЗаменить(НомерПаспортаРФ, ",", ""); СтрокаЦифр = СтрЗаменить(НомерПаспортаРФ, ",", "");
СтрокаЦифр = СтрЗаменить(СтрокаЦифр, " ", ""); СтрокаЦифр = СтрЗаменить(СтрокаЦифр, " ", "");
@@ -2594,6 +2652,7 @@
КонецФункции КонецФункции
Функция ПолучитьИЗаписатьОшибкуМЧДРР(ПараметрыОшибки) Экспорт Функция ПолучитьИЗаписатьОшибкуМЧДРР(ПараметрыОшибки) Экспорт
ЗаголовокОшибки = ПараметрыОшибки.ЗаголовокОшибки; ЗаголовокОшибки = ПараметрыОшибки.ЗаголовокОшибки;
ЗапросHTTP = ПараметрыОшибки.ЗапросHTTP; ЗапросHTTP = ПараметрыОшибки.ЗапросHTTP;
ПараметрыТекстаОшибки = ПараметрыОшибки.ПараметрыТекстаОшибки; ПараметрыТекстаОшибки = ПараметрыОшибки.ПараметрыТекстаОшибки;
@@ -2610,18 +2669,33 @@
СтруктураЗначения = Новый Структура; СтруктураЗначения = Новый Структура;
ТекстОшибкиИзОтвета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОтвета, "title", Неопределено);
Если ТекстОшибкиИзОтвета <> Неопределено Тогда
Если СтрЗаканчиваетсяНа(ТекстОшибки, ".") Тогда
ТекстОшибки = Лев(ТекстОшибки, СтрДлина(ТекстОшибки) - 1);
КонецЕсли;
ТекстОшибки = СтрШаблон("%1 (%2).", ТекстОшибки, ТекстОшибкиИзОтвета)
КонецЕсли;
Если ОтветHTTP <> Неопределено И Строка(ОтветHTTP.КодСостояния) = СтрокаОтвета Тогда Если ОтветHTTP <> Неопределено И Строка(ОтветHTTP.КодСостояния) = СтрокаОтвета Тогда
ОшибкаПоКлассификатору = Новый Структура("Причина, Решение, СпособУстранения, Ссылка"); ОшибкаПоКлассификатору = Новый Структура("Причина, Решение, СпособУстранения, Ссылка");
ОшибкаПоКлассификатору.Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОписаниеОшибкиHTTP(ОтветHTTP.КодСостояния), ОтветHTTP.КодСостояния); ОшибкаПоКлассификатору.Причина = ОписаниеОшибкиHTTP(ОтветHTTP.КодСостояния);
СтруктураЗначения.Вставить("СтрокаПоискаОшибки", ОтветHTTP.КодСостояния); СтруктураЗначения.Вставить("СтрокаПоискаОшибки", ОтветHTTP.КодСостояния);
СтруктураЗначения.Вставить("ОшибкаПоКлассификаторуНайдена", Ложь); СтруктураЗначения.Вставить("ОшибкаПоКлассификаторуНайдена", Ложь);
ОшибкаПоКлассификатору.Решение = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru='Повторите действие позднее или обратитесь в <a href=%1>службу поддержки ФНС России</a>.'"),
"https://www.nalog.gov.ru/rn77/service/service_feedback/?service=101");
МетодикиУстранения = Новый Массив; МетодикиУстранения = Новый Массив;
МетодикиУстранения.Добавить("ПовторнаяОтправка"); МетодикиУстранения.Добавить("ПовторнаяОтправка");
МетодикиУстранения.Добавить("НеЗапрашиватьСтатусДоверенности"); МетодикиУстранения.Добавить("НеЗапрашиватьСтатусДоверенности");
СпособУстранения = Новый Структура("МетодикиУстранения", МетодикиУстранения); СпособУстранения = Новый Структура("МетодикиУстранения", МетодикиУстранения);
ОшибкаПоКлассификатору.СпособУстранения = ОбщегоНазначения.ЗначениеВJSON(СпособУстранения); ОшибкаПоКлассификатору.СпособУстранения = ОбщегоНазначения.ЗначениеВJSON(СпособУстранения);
Иначе Иначе
Если ЗапросHTTP <> Неопределено Тогда Если ЗапросHTTP <> Неопределено Тогда
СтрокаЗапроса = ПолучитьИдентификаторЗапроса(ЗапросHTTP); СтрокаЗапроса = ПолучитьИдентификаторЗапроса(ЗапросHTTP);
@@ -2646,8 +2720,7 @@
ОшибкаПоКлассификатору.Причина = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ОшибкаПоКлассификатору.Причина, ПараметрыТекстаОшибки); ОшибкаПоКлассификатору.Причина = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ОшибкаПоКлассификатору.Причина, ПараметрыТекстаОшибки);
ОшибкаПоКлассификатору.Вставить("ТекстОшибки", ОшибкаПоКлассификатору.Вставить("ТекстОшибки", ТекстОшибки);
ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОтвета, "title", ТекстОшибки));
ОшибкаПоКлассификатору.Вставить("ЗаголовокОшибки", ЗаголовокОшибки); ОшибкаПоКлассификатору.Вставить("ЗаголовокОшибки", ЗаголовокОшибки);
СтруктураЗначения.Вставить("ОшибкаПоКлассификатору", ОшибкаПоКлассификатору); СтруктураЗначения.Вставить("ОшибкаПоКлассификатору", ОшибкаПоКлассификатору);
@@ -2655,6 +2728,7 @@
Если ДополнительныеФайлы = Неопределено Тогда Если ДополнительныеФайлы = Неопределено Тогда
ДополнительныеФайлы = Новый Массив; ДополнительныеФайлы = Новый Массив;
КонецЕсли; КонецЕсли;
ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Ошибка по классификатору'"), "xml"); ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Ошибка по классификатору'"), "xml");
ОшибкаПоКлассификатору.Вставить("ДополнительныеФайлы", ДополнительныеФайлы); ОшибкаПоКлассификатору.Вставить("ДополнительныеФайлы", ДополнительныеФайлы);
@@ -2664,109 +2738,29 @@
Функция ОписаниеОшибкиHTTP(КодСостояния) Функция ОписаниеОшибкиHTTP(КодСостояния)
Если КодСостояния < 300 Тогда Если КодСостояния < 200 Или КодСостояния >= 300 И КодСостояния < 400 Тогда
Возврат "";
ИначеЕсли КодСостояния = 300 Тогда
Возврат НСтр("ru = 'Множественный выбор при отправке ответа сервера'");
ИначеЕсли КодСостояния = 301 Тогда
Возврат НСтр("ru = 'Ресурс перемещен'");
ИначеЕсли КодСостояния = 302 Тогда
Возврат НСтр("ru = 'Ресурс временно перемещен'");
ИначеЕсли КодСостояния = 303 Тогда
Возврат НСтр("ru = 'Ресурс перемещен на другой адрес'");
ИначеЕсли КодСостояния = 304 Тогда
Возврат НСтр("ru = 'Неожиданный ответ об отсутствии изменений страницы'");
ИначеЕсли КодСостояния = 305 Тогда
Возврат НСтр("ru = 'Для доступа к ресурсу требуется прокси'");
ИначеЕсли КодСостояния = 306 Тогда
Возврат НСтр("ru = 'Неиспользуемый код перенаправления запроса'");
ИначеЕсли КодСостояния = 307 Тогда
Возврат НСтр("ru = 'Временное перенаправление'");
ИначеЕсли КодСостояния < 400 Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка по перенаправлению запроса с кодом %1'"), НСтр("ru = 'Неподдерживаемый ответ сервиса Распределенного реестра ФНС России (%1).'"), Формат(
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ=")); КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния = 400 Тогда ИначеЕсли КодСостояния >= 400 И КодСостояния < 500 Тогда
Возврат НСтр("ru = 'Неверный формат запроса'");
ИначеЕсли КодСостояния = 401 Тогда
Возврат НСтр("ru = 'Требуется аутентификация'");
ИначеЕсли КодСостояния = 402 Тогда
Возврат НСтр("ru = 'Требуется оплата'");
ИначеЕсли КодСостояния = 403 Тогда
Возврат НСтр("ru = 'Доступ к ресурсу запрещен'");
ИначеЕсли КодСостояния = 404 Тогда
Возврат НСтр("ru = 'Запрошенная страница не найдена'");
ИначеЕсли КодСостояния = 405 Тогда
Возврат НСтр("ru = 'Используемый метод запрещен'");
ИначеЕсли КодСостояния = 406 Тогда
Возврат НСтр("ru = 'Отсутствуют подходящие ответы'");
ИначеЕсли КодСостояния = 407 Тогда
Возврат НСтр("ru = 'Требуется аутентификация прокси'");
ИначеЕсли КодСостояния = 408 Тогда
Возврат НСтр("ru = 'Лимит времени сервера при ожидании запроса исчерпан'");
ИначеЕсли КодСостояния = 409 Тогда
Возврат НСтр("ru = 'Конфликт с текущим состоянием ресурса, требуется больше информации'");
ИначеЕсли КодСостояния = 410 Тогда
Возврат НСтр("ru = 'Ресурс более недоступен'");
ИначеЕсли КодСостояния = 411 Тогда
Возврат НСтр("ru = 'Требуется задание длины содержимого'");
ИначеЕсли КодСостояния = 412 Тогда
Возврат НСтр("ru = 'Ошибочные условия заголовочных полей'");
ИначеЕсли КодСостояния = 413 Тогда
Возврат НСтр("ru = 'Слишком большая длина запроса'");
ИначеЕсли КодСостояния = 414 Тогда
Возврат НСтр("ru = 'Запрошенный идентификатор слишком велик'");
ИначеЕсли КодСостояния = 415 Тогда
Возврат НСтр("ru = 'Неподдерживаемый тип данных запроса'");
ИначеЕсли КодСостояния = 416 Тогда
Возврат НСтр("ru = 'Запрошенный промежуток невыполним'");
ИначеЕсли КодСостояния = 417 Тогда
Возврат НСтр("ru = 'Несоответствие ожиданиям'");
ИначеЕсли КодСостояния = 422 Тогда
Возврат НСтр("ru = 'Необрабатываемый объект'");
ИначеЕсли КодСостояния = 423 Тогда
Возврат НСтр("ru = 'Заблокировано'");
ИначеЕсли КодСостояния = 424 Тогда
Возврат НСтр("ru = 'Сбой взаимосвязанного вызова'");
ИначеЕсли КодСостояния = 449 Тогда
Возврат НСтр("ru = 'Возврат запроса после необходимого действия'");
ИначеЕсли КодСостояния < 500 Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка клиента с кодом %1'"), НСтр("ru = 'Сервис Распределенного реестра ФНС России не смог выполнить запрос (%1).'"), Формат(
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ=")); КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния = 500 Тогда ИначеЕсли КодСостояния >= 300 Тогда
Возврат НСтр("ru = 'Внутренняя ошибка сервера'");
ИначеЕсли КодСостояния = 501 Тогда
Возврат НСтр("ru = 'Процесс для данного запроса не поддерживается сервером'");
ИначеЕсли КодСостояния = 502 Тогда
Возврат НСтр("ru = 'Gateway-сервер получил ошибочный ответ'");
ИначеЕсли КодСостояния = 503 Тогда
Возврат НСтр("ru = 'Сервер распределенного реестра временно недоступен'");
ИначеЕсли КодСостояния = 504 Тогда
Возврат НСтр("ru = 'Превышено время ожидание ответа на запрос Gateway-сервера'");
ИначеЕсли КодСостояния = 505 Тогда
Возврат НСтр("ru = 'Версия HTTP не поддерживается сервером'");
ИначеЕсли КодСостояния = 506 Тогда
Возврат НСтр("ru = 'Вариантный тип содержит также вариант'");
ИначеЕсли КодСостояния = 507 Тогда
Возврат НСтр("ru = 'Переполнение хранилища'");
ИначеЕсли КодСостояния = 510 Тогда
Возврат НСтр("ru = 'Отсутствует поддержка расширений'");
ИначеЕсли КодСостояния < 600 Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка сервера с кодом %1'"), НСтр(
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ=")); "ru = 'Сервис Распределенного реестра ФНС России перегружен, недоступен или находится на обслуживании (%1).'"),
ИначеЕсли КодСостояния = 999 Тогда Формат(
Возврат НСтр("ru = 'Разрушительный сбой сервера'"); КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
Иначе Иначе
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка с кодом %1'"), НСтр("ru = 'Не удалось получить ответ сервиса Распределенного реестра ФНС России (%1).'"), Формат(
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ=")); КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
КонецЕсли; КонецЕсли;
КонецФункции КонецФункции
// Устанавливает соединение с сервером Интернета по протоколу http(s). // Устанавливает соединение с сервером Интернета по протоколу http(s).
// //
// Параметры: // Параметры:
// URL - Строка - url сервера в формате [Протокол://]<Сервер>/. // URL - Строка - url сервера в формате [Протокол://]<Сервер>/.
@@ -2808,20 +2802,8 @@
КонецФункции КонецФункции
Процедура СброситьДанныеАутентификацииНаПорталеПоддержки()
УстановитьПривилегированныйРежим(Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда
МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей");
Если МодульИнтернетПоддержкаПользователей.ДоступноПодключениеИнтернетПоддержки() Тогда
МодульИнтернетПоддержкаПользователей.СохранитьДанныеАутентификации(Неопределено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьФайлДляРасследования(Файлы, ДанныеФайла, ТипФайла, Расширение = "txt") Процедура ДобавитьФайлДляРасследования(Файлы, ДанныеФайла, ТипФайла, Расширение = "txt")
СведенияОФайле = Новый Структура; СведенияОФайле = Новый Структура;
Если ТипЗнч(ДанныеФайла) = Тип("Строка") Тогда Если ТипЗнч(ДанныеФайла) = Тип("Строка") Тогда
СведенияОФайле.Вставить("Данные", Новый ДвоичныеДанные(ДанныеФайла)); СведенияОФайле.Вставить("Данные", Новый ДвоичныеДанные(ДанныеФайла));
@@ -2833,9 +2815,11 @@
СведенияОФайле.Вставить("Имя", ТипФайла + "." + Расширение); СведенияОФайле.Вставить("Имя", ТипФайла + "." + Расширение);
СведенияОФайле.Вставить("ТипФайла", ТипФайла); СведенияОФайле.Вставить("ТипФайла", ТипФайла);
Файлы.Добавить(СведенияОФайле); Файлы.Добавить(СведенияОФайле);
КонецПроцедуры КонецПроцедуры
Функция ПолучитьИдентификаторЗапроса(ЗапросHTTP) Функция ПолучитьИдентификаторЗапроса(ЗапросHTTP)
Результат = ""; Результат = "";
Словарь = СтрРазделить("poar-webapp/integration/poa/generate-number/transactions/status/poaopen/public/poazip/zip/number/token", "/", Ложь); Словарь = СтрРазделить("poar-webapp/integration/poa/generate-number/transactions/status/poaopen/public/poazip/zip/number/token", "/", Ложь);
Синонимы = Новый Соответствие; Синонимы = Новый Соответствие;
@@ -2853,9 +2837,11 @@
КонецЦикла; КонецЦикла;
Синоним = Синонимы[Результат]; Синоним = Синонимы[Результат];
Возврат ?(Синоним = Неопределено, Результат, Синоним); Возврат ?(Синоним = Неопределено, Результат, Синоним);
КонецФункции КонецФункции
Функция ПолучитьИдентификаторОтвета(ОтветHTTP, СтруктураОтвета) Функция ПолучитьИдентификаторОтвета(ОтветHTTP, СтруктураОтвета)
Если СтруктураОтвета = Неопределено Или ОтветHTTP.КодСостояния = 500 Тогда Если СтруктураОтвета = Неопределено Или ОтветHTTP.КодСостояния = 500 Тогда
Возврат Строка(ОтветHTTP.КодСостояния); Возврат Строка(ОтветHTTP.КодСостояния);
ИначеЕсли СтруктураОтвета.Свойство("error") Тогда ИначеЕсли СтруктураОтвета.Свойство("error") Тогда
@@ -2869,6 +2855,7 @@
КонецЕсли; КонецЕсли;
Возврат КодОшибки; Возврат КодОшибки;
КонецФункции КонецФункции
Функция ПараметрыФайловДляРасследования() Функция ПараметрыФайловДляРасследования()
@@ -3311,11 +3298,6 @@
Результат.ТекстОтвета = ОтветHTTP.ПолучитьТелоКакСтроку(); Результат.ТекстОтвета = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат.ТокенДоступа = ?(ТипЗнч(СтруктураОтвета) = Тип("Структура") И СтруктураОтвета.Свойство("access_token"), Результат.ТокенДоступа = ?(ТипЗнч(СтруктураОтвета) = Тип("Структура") И СтруктураОтвета.Свойство("access_token"),
СтруктураОтвета.access_token, ""); СтруктураОтвета.access_token, "");
КодСостоянияПриНеверномЛогинеИлиПароле = 403;
Если ОтветHTTP.КодСостояния = КодСостоянияПриНеверномЛогинеИлиПароле И СтруктураОтвета.Свойство("message") Тогда
СброситьДанныеАутентификацииНаПорталеПоддержки();
КонецЕсли;
Исключение Исключение
ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ПараметрыФайловДляРасследования = ПараметрыФайловДляРасследования(); ПараметрыФайловДляРасследования = ПараметрыФайловДляРасследования();
@@ -4119,12 +4101,11 @@
Результат.Вставить("Ошибка", ""); Результат.Вставить("Ошибка", "");
Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда
РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки); РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки);
Если РезультатАвторизации.Ошибка <> Неопределено Тогда Если РезультатАвторизации.Ошибка <> Неопределено Тогда
Результат.Ошибка = РезультатАвторизации.Ошибка; Результат.Ошибка = РезультатАвторизации.Ошибка;
КонецЕсли;
Если Результат.Ошибка <> Неопределено Тогда
Возврат Результат; Возврат Результат;
КонецЕсли; КонецЕсли;
@@ -61,21 +61,22 @@
// Реквизиты организации. // Реквизиты организации.
// //
// Параметры: // Параметры:
// СторонаМЧД - ПеречислениеСсылка.ТипыУчастниковМЧД, Неопределено // Назначение - см. НазначениеДоверенностиДляПроверкиРеквизитов
// ДляЗаполнения - Булево - если Истина, полный список реквизитов // ДляЗаполнения - Булево - если Истина, полный список реквизитов
// ВидОрганизации - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ИностраннаяОрганизация", "Филиал" // ВидОрганизации - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ИностраннаяОрганизация", "Филиал"
// Назначение - см. НазначениеДоверенности
// //
// Возвращаемое значение: // Возвращаемое значение:
// СписокЗначений // СписокЗначений
// //
Функция РеквизитыОрганизацииСписок(СторонаМЧД, ДляЗаполнения = Истина, ВидОрганизации = Неопределено, Назначение = Неопределено) Экспорт Функция РеквизитыОрганизацииСписок(Назначение = Неопределено, ДляЗаполнения = Истина, ВидОрганизации = Неопределено) Экспорт
Если Назначение = Неопределено Тогда Если Назначение = Неопределено Тогда
Назначение = НазначениеДоверенностиДляПроверкиРеквизитов(); Назначение = НазначениеДоверенностиДляПроверкиРеквизитов();
КонецЕсли; КонецЕсли;
ЭтоДоверитель = Назначение.ТипУчастника = ПредопределенноеЗначение("Перечисление.ТипыУчастниковМЧД.Доверитель"); ЭтоДоверитель = Назначение.ТипУчастника = ПредопределенноеЗначение("Перечисление.ТипыУчастниковМЧД.Доверитель");
// Пометка списка Истина означает, что поле необязательное
Реквизиты = Новый СписокЗначений; Реквизиты = Новый СписокЗначений;
Реквизиты.Добавить("ЭтоИндивидуальныйПредприниматель", НСтр("ru = 'Индивидуальный предприниматель'"), Истина); Реквизиты.Добавить("ЭтоИндивидуальныйПредприниматель", НСтр("ru = 'Индивидуальный предприниматель'"), Истина);
Реквизиты.Добавить("ЭтоФизическоеЛицо", НСтр("ru = 'Физическое лицо'"), Истина); Реквизиты.Добавить("ЭтоФизическоеЛицо", НСтр("ru = 'Физическое лицо'"), Истина);
@@ -84,15 +85,14 @@
Реквизиты.Добавить("ЭтоФилиал", НСтр("ru = 'Филиал'"), Истина); Реквизиты.Добавить("ЭтоФилиал", НСтр("ru = 'Филиал'"), Истина);
Реквизиты.Добавить("НаименованиеПолное", НСтр("ru = 'Наименование (полное)'")); Реквизиты.Добавить("НаименованиеПолное", НСтр("ru = 'Наименование (полное)'"));
Реквизиты.Добавить("НаименованиеСокращенное", НСтр("ru = 'Наименование (сокращенное)'"), Истина); Реквизиты.Добавить("НаименованиеСокращенное", НСтр("ru = 'Наименование (сокращенное)'"), Истина);
Реквизиты.Добавить("ИНН", НСтр("ru = 'ИНН'")); Реквизиты.Добавить("ИНН", НСтр("ru = 'ИНН'"), ВидОрганизации = "ИностраннаяОрганизация" И ЭтоДоверитель);
Реквизиты.Добавить("ЭлектроннаяПочта", НСтр("ru = 'Электронная почта'"), Истина); Реквизиты.Добавить("ЭлектроннаяПочта", НСтр("ru = 'Электронная почта'"), Истина);
Реквизиты.Добавить("ЭлектроннаяПочтаЗначение", НСтр("ru = 'Электронная почта'"), Истина); Реквизиты.Добавить("ЭлектроннаяПочтаЗначение", НСтр("ru = 'Электронная почта'"), Истина);
Реквизиты.Добавить("Телефон", НСтр("ru = 'Телефон'"), Истина); Реквизиты.Добавить("Телефон", НСтр("ru = 'Телефон'"), Истина);
Реквизиты.Добавить("ТелефонЗначение", НСтр("ru = 'Телефон'"), Истина); Реквизиты.Добавить("ТелефонЗначение", НСтр("ru = 'Телефон'"), Истина);
Если ДляЗаполнения Или ВидОрганизации <> "ИндивидуальныйПредприниматель" Тогда Если ДляЗаполнения Или ВидОрганизации <> "ИндивидуальныйПредприниматель" Тогда
Реквизиты.Добавить("КПП", НСтр("ru = 'КПП'")); Реквизиты.Добавить("КПП", НСтр("ru = 'КПП'"), ВидОрганизации = "ИностраннаяОрганизация" И ЭтоДоверитель);
КонецЕсли; КонецЕсли;
Если ДляЗаполнения Или ВидОрганизации <> "ИностраннаяОрганизация" Тогда Если ДляЗаполнения Или ВидОрганизации <> "ИностраннаяОрганизация" Тогда
@@ -100,15 +100,15 @@
КонецЕсли; КонецЕсли;
Если ДляЗаполнения Или ВидОрганизации = "ИностраннаяОрганизация" Тогда Если ДляЗаполнения Или ВидОрганизации = "ИностраннаяОрганизация" Тогда
Реквизиты.Добавить("НомерЗаписиОбАккредитации", НСтр("ru = 'Номер записи об аккредитации'")); Реквизиты.Добавить("НомерЗаписиОбАккредитации", НСтр("ru = 'Номер записи об аккредитации'"), ЭтоДоверитель);
Реквизиты.Добавить("СтранаРегистрации", НСтр("ru = 'Страна регистрации (инкорпорации)'"), Не ЭтоДоверитель); Реквизиты.Добавить("СтранаРегистрации", НСтр("ru = 'Страна регистрации (инкорпорации)'"), Не ЭтоДоверитель);
Реквизиты.Добавить("СтранаРегистрацииКод", НСтр("ru = 'Код страны регистрации (инкорпорации)'"), Не ЭтоДоверитель); Реквизиты.Добавить("СтранаРегистрацииКод", НСтр("ru = 'Код страны регистрации (инкорпорации)'"), Не ЭтоДоверитель);
Реквизиты.Добавить("РегистрационныйНомерВСтранеРегистрации", НСтр("ru = 'Регистрационный номер в стране регистрации (инкорпорации)'"), Не ЭтоДоверитель); Реквизиты.Добавить("РегистрационныйНомерВСтранеРегистрации", НСтр("ru = 'Регистрационный номер в стране регистрации (инкорпорации)'"), Не ЭтоДоверитель);
Реквизиты.Добавить("НаименованиеРегистрирующегоОргана", НСтр("ru = 'Наименование регистрирующего органа'"), Истина); Реквизиты.Добавить("НаименованиеРегистрирующегоОргана", НСтр("ru = 'Наименование регистрирующего органа'"), Истина);
Реквизиты.Добавить("КодНалогоплательщикаВСтранеРегистрации", НСтр("ru = 'Код налогоплательщика в стране регистрации (инкорпорации) или аналог'")); Реквизиты.Добавить("КодНалогоплательщикаВСтранеРегистрации", НСтр("ru = 'Код налогоплательщика в стране регистрации (инкорпорации) или аналог'"), Истина);
Реквизиты.Добавить("ФактическийАдрес", НСтр("ru = 'Фактический адрес местонахождения'")); Реквизиты.Добавить("ФактическийАдрес", НСтр("ru = 'Фактический адрес местонахождения'"));
Реквизиты.Добавить("ФактическийАдресЗначение", НСтр("ru = 'Фактический адрес местонахождения'"), Истина); Реквизиты.Добавить("ФактическийАдресЗначение", НСтр("ru = 'Фактический адрес местонахождения'"), Истина);
Реквизиты.Добавить("ЮридическийАдресВСтранеРегистрации", НСтр("ru = 'Адрес юридического лица на территории государства, в котором оно Зарегистрирована'"), Не ЭтоДоверитель); Реквизиты.Добавить("ЮридическийАдресВСтранеРегистрации", НСтр("ru = 'Адрес юридического лица на территории государства, в котором оно зарегистрировано'"), Не ЭтоДоверитель);
Реквизиты.Добавить("ЮридическийАдресВСтранеРегистрацииЗначение", НСтр("ru = 'Адрес юридического лица на территории государства'"), Истина); Реквизиты.Добавить("ЮридическийАдресВСтранеРегистрацииЗначение", НСтр("ru = 'Адрес юридического лица на территории государства'"), Истина);
КонецЕсли; КонецЕсли;
@@ -158,9 +158,9 @@
// Реквизиты физического лица. // Реквизиты физического лица.
// //
// Параметры: // Параметры:
// Назначение - см. НазначениеДоверенностиДляПроверкиРеквизитов
// ДляЗаполнения - Булево - если Истина, полный список реквизитов // ДляЗаполнения - Булево - если Истина, полный список реквизитов
// ВидФизическогоЛица - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ДолжностноеЛицо", "ФизическоеЛицо" // ВидФизическогоЛица - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ДолжностноеЛицо", "ФизическоеЛицо"
// Назначение - см. НазначениеДоверенности
// //
// Возвращаемое значение: // Возвращаемое значение:
// СписокЗначений // СписокЗначений
@@ -214,6 +214,7 @@
Представления = ТекущийОбъект.Представления; // ТабличнаяЧасть Представления = ТекущийОбъект.Представления; // ТабличнаяЧасть
Отбор = Новый Структура(); Отбор = Новый Структура();
Если ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда
Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка); Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка);
НайденныеСтроки = Представления.НайтиСтроки(Отбор); НайденныеСтроки = Представления.НайтиСтроки(Отбор);
@@ -242,16 +243,18 @@
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
КонецЕсли;
ЗаполнитьМультиязычныеРеквизитыТабличнойЧастиПредставления(ТекущийОбъект, Реквизиты); ЗаполнитьМультиязычныеРеквизитыТабличнойЧастиПредставления(ТекущийОбъект, Реквизиты);
Отбор.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка(); Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка());
НайденныеСтроки = Представления.НайтиСтроки(Отбор); НайденныеСтроки = Представления.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда Если НайденныеСтроки.Количество() > 0 Тогда
Для каждого ИмяРеквизита Из Реквизиты Цикл Для каждого ИмяРеквизита Из Реквизиты Цикл
Если ИменаМультиязычныхРеквизитовВШапке[ИмяРеквизита] = Неопределено Если ИменаМультиязычныхРеквизитовВШапке[ИмяРеквизита] = Неопределено
Или (ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Или (ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка()
И ПустаяСтрока(СуффиксТекущегоЯзыка)) Тогда И ПустаяСтрока(СуффиксТекущегоЯзыка))
И ТекущийОбъект[ИмяРеквизита] <> Null Тогда
ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита]; ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита];
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -79,6 +79,7 @@
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
Если ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НапоминанияПользователя) Тогда
Команда = Команды.Добавить(); Команда = Команды.Добавить();
Команда.Вид = "Органайзер"; Команда.Вид = "Органайзер";
Команда.Представление = НСтр("ru = 'Напомнить...'"); Команда.Представление = НСтр("ru = 'Напомнить...'");
@@ -89,6 +90,7 @@
Команда.Порядок = 50; Команда.Порядок = 50;
Команда.Обработчик = "НапоминанияПользователяСлужебныйКлиент.Напомнить"; Команда.Обработчик = "НапоминанияПользователяСлужебныйКлиент.Напомнить";
Команда.МножественныйВыбор = Ложь; Команда.МножественныйВыбор = Ложь;
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -4400,21 +4400,6 @@
Обработчик.РежимВыполнения = "Оперативно"; Обработчик.РежимВыполнения = "Оперативно";
Обработчик.ОбщиеДанные = Истина; Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.0.1.91";
Обработчик.Комментарий =
НСтр("ru = 'Перенос настроек подключения обменов данными в новый регистр ""Настройки транспорта обмена данными"".'");
Обработчик.Идентификатор = Новый УникальныйИдентификатор("8d5f1092-f569-4c03-aca9-65625809b853");
Обработчик.Процедура = "РегистрыСведений.НастройкиТранспортаОбменаДанными.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ЧитаемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена";
Обработчик.ИзменяемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена,РегистрСведений.НастройкиТранспортаОбменаДанными";
Обработчик.ОчередьОтложеннойОбработки = 1;
Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.НастройкиТранспортаОбменаДанными.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.БлокируемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена,РегистрСведений.НастройкиТранспортаОбменаДанными";
Обработчик = Обработчики.Добавить(); Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.0.1.91"; Обработчик.Версия = "3.0.1.91";
Обработчик.Комментарий = Обработчик.Комментарий =
@@ -222,7 +222,9 @@
КонецЕсли; КонецЕсли;
Форма.ТолькоПросмотр = Истина; Форма.ТолькоПросмотр = Истина;
Если Форма.Команды.Найти("ОбновлениеВерсииИБ_ОбъектЗаблокирован") = Неопределено Тогда
Форма.Команды.Добавить("ОбновлениеВерсииИБ_ОбъектЗаблокирован"); Форма.Команды.Добавить("ОбновлениеВерсииИБ_ОбъектЗаблокирован");
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(Результат.ТекстИсключения); ОбщегоНазначения.СообщитьПользователю(Результат.ТекстИсключения);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы"; Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.10.174"; Описание.Версия = "3.1.10.206";
Описание.ИдентификаторИнтернетПоддержки = "SSL"; Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно"; Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0"; Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -945,7 +945,23 @@
Подменю = СведенияОПодменю.Подменю; // ГруппаФормы Подменю = СведенияОПодменю.Подменю; // ГруппаФормы
Если Не ЭтоКоманднаяПанель Тогда Если Не ЭтоКоманднаяПанель Тогда
Если Не (СведенияОПодменю.КоличествоКоманд = 1 И КомандаФормы <> Неопределено) Тогда Если СведенияОПодменю.КоличествоКоманд = 1 И КомандаФормы <> Неопределено Тогда
// Превращение подменю в кнопку когда выведена 1 команда с коротким заголовком.
Если Не ЗначениеЗаполнено(КомандаФормы.Картинка) И Подменю.Вид = ВидГруппыФормы.Подменю Тогда
КомандаФормы.Картинка = Подменю.Картинка;
КонецЕсли;
Если Не ЗначениеЗаполнено(КомандаФормы.Картинка) Тогда
КомандаФормы.Картинка = СведенияОПодменю.КартинкаПодменю;
КонецЕсли;
Если СтрДлина(КомандаФормы.Заголовок) <= 35 И Подменю.Отображение <> ОтображениеКнопки.Картинка Тогда
КомандаФормы.Отображение = ОтображениеКнопки.КартинкаИТекст;
Иначе
КомандаФормы.Отображение = ОтображениеКнопки.Картинка;
КонецЕсли;
КомандаФормы.Подсказка = КомандаФормы.Заголовок;
Иначе
// Добавление кнопок-заглушек, которые показываются когда в подменю скрыты все команды. // Добавление кнопок-заглушек, которые показываются когда в подменю скрыты все команды.
ИмяКомандыЗаглушки = Подменю.Имя + "Заглушка"; ИмяКомандыЗаглушки = Подменю.Имя + "Заглушка";
Если Элементы.Найти(ИмяКомандыЗаглушки) = Неопределено Тогда Если Элементы.Найти(ИмяКомандыЗаглушки) = Неопределено Тогда
@@ -0,0 +1,17 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
Процедура ПродолжитьВыполнениеПодключаемойКомандыПослеЗаписиВФорме() Экспорт
ПодключаемыеКомандыКлиент.ПослеЗаписиПродолжение();
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e5687b69-4d9a-4d21-a506-294941f18056">
<name>ПодключаемыеКомандыГлобальный</name>
<synonym>
<key>ru</key>
<value>Подключаемые команды глобальный</value>
</synonym>
<global>true</global>
<clientManagedApplication>true</clientManagedApplication>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -93,8 +93,12 @@
Контекст = ПараметрыЗаписи.ПараметрыВыполненияПодключаемойКоманды; Контекст = ПараметрыЗаписи.ПараметрыВыполненияПодключаемойКоманды;
Контекст.Вставить("Форма", Форма); Контекст.Вставить("Форма", Форма);
Контекст.Вставить("Источник", Объект); Контекст.Вставить("Источник", Объект);
ПродолжитьВыполнениеКоманды(Контекст);
Контекст.Форма.ПараметрыПодключаемыхКоманд.Удалить("КомандаВыполняется") Контекст.Форма.ПараметрыПодключаемыхКоманд.Удалить("КомандаВыполняется");
ИмяПараметра = "СтандартныеПодсистемы.ПодключаемыеКоманды.ПараметрыВыполненияПодключаемойКоманды";
ПараметрыПриложения[ИмяПараметра] = Контекст;
ПодключитьОбработчикОжидания("ПродолжитьВыполнениеПодключаемойКомандыПослеЗаписиВФорме", 0.1, Истина);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -477,4 +481,16 @@
КонецФункции КонецФункции
Процедура ПослеЗаписиПродолжение() Экспорт
ИмяПараметра = "СтандартныеПодсистемы.ПодключаемыеКоманды.ПараметрыВыполненияПодключаемойКоманды";
Контекст = ПараметрыПриложения[ИмяПараметра];
ПараметрыПриложения[ИмяПараметра] = Неопределено;
Если Контекст <> Неопределено Тогда
ПродолжитьВыполнениеКоманды(Контекст);
КонецЕсли;
КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -1378,7 +1378,7 @@
// Возвращаемое значение: // Возвращаемое значение:
// Строка // Строка
// //
Функция ИмяСобытияИзменениеИзменениеУчастниковГруппПользователейДляЖурналаРегистрации() Экспорт Функция ИмяСобытияИзменениеУчастниковГруппПользователейДляЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Пользователи.Изменение участников групп пользователей'", Возврат НСтр("ru = 'Пользователи.Изменение участников групп пользователей'",
ОбщегоНазначения.КодОсновногоЯзыка()); ОбщегоНазначения.КодОсновногоЯзыка());
@@ -1388,13 +1388,60 @@
// Возвращаемое значение: // Возвращаемое значение:
// Строка // Строка
// //
Функция ИмяСобытияИзменениеИзменениеУчастниковГруппВнешнихПользователейДляЖурналаРегистрации() Экспорт Функция ИмяСобытияИзменениеУчастниковГруппВнешнихПользователейДляЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Пользователи.Изменение участников групп внешних пользователей'", Возврат НСтр("ru = 'Пользователи.Изменение участников групп внешних пользователей'",
ОбщегоНазначения.КодОсновногоЯзыка()); ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции КонецФункции
// Для записи в журнал регистрации.
//
// Параметры:
// Ссылка - Null - возвращается Null.
// - Неопределено - возвращается Неопределено.
// - ЛюбаяСсылка - возвращается ЗначениеВСтрокуВнутр(Ссылка).
//
// Возвращаемое значение:
// Строка, Null, Неопределено
//
Функция СериализованнаяСсылка(Ссылка) Экспорт
Если Ссылка = Null Или Ссылка = Неопределено Тогда
Возврат Ссылка;
КонецЕсли;
Возврат ЗначениеВСтрокуВнутр(Ссылка);
КонецФункции
// Для записи в журнал регистрации.
//
// Параметры:
// Ссылка - Null - возвращается "".
// - Неопределено - возвращается "".
// - ЛюбаяСсылка - возвращается Строка(Ссылка).
//
// Возвращаемое значение:
// Строка
//
Функция ПредставлениеСсылки(Ссылка) Экспорт
Если Ссылка = Null Или Ссылка = Неопределено Тогда
Возврат "";
КонецЕсли;
Результат = Строка(Ссылка);
Если Не ЗначениеЗаполнено(Результат) Тогда
Результат = "<" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Пустая ссылка %1'", ОбщегоНазначения.КодОсновногоЯзыка()), ТипЗнч(Ссылка)) + ">";
КонецЕсли;
Возврат Результат;
КонецФункции
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Универсальные процедуры и функции. // Универсальные процедуры и функции.
@@ -4937,14 +4984,8 @@
// группами пользователей для которых есть изменения. // группами пользователей для которых есть изменения.
// * Значение - Неопределено // * Значение - Неопределено
// //
// ДляРегистрации - Неопределено - регистрация не требуется. // ДляРегистрации - см. НовоеИзменениеСоставовГруппДляРегистрации
// - ТаблицаЗначений: // - Неопределено - регистрация не требуется.
// * ГруппаПользователей - СправочникСсылка.ГруппыПользователей
// - СправочникСсылка.ГруппыВнешнихПользователей
// * Пользователь - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи
// * Используется - Булево
// * ВидИзменения - Строка - одна из строк "Добавлен", "Удален", "ИспользованиеИзменено".
// //
Функция НовыеИзмененияСоставовГрупп() Экспорт Функция НовыеИзмененияСоставовГрупп() Экспорт
@@ -4954,20 +4995,38 @@
Результат.Вставить("ДляРегистрации", Неопределено); Результат.Вставить("ДляРегистрации", Неопределено);
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
Измерения = Метаданные.РегистрыСведений.СоставыГруппПользователей.Измерения; Результат.ДляРегистрации = НовоеИзменениеСоставовГруппДляРегистрации();
ДляРегистрации = Новый ТаблицаЗначений;
ДляРегистрации.Колонки.Добавить("ГруппаПользователей", Измерения.ГруппаПользователей.Тип);
ДляРегистрации.Колонки.Добавить("Пользователь", Измерения.Пользователь.Тип);
ДляРегистрации.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
ДляРегистрации.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Строка"));
ДляРегистрации.Индексы.Добавить("Пользователь, ГруппаПользователей");
Результат.ДляРегистрации = ДляРегистрации;
КонецЕсли; КонецЕсли;
Возврат Результат; Возврат Результат;
КонецФункции КонецФункции
// Возвращаемое значение:
// ТаблицаЗначений:
// * ГруппаПользователей - СправочникСсылка.ГруппыПользователей
// - СправочникСсылка.ГруппыВнешнихПользователей
// * Пользователь - СправочникСсылка.Пользователи
// - СправочникСсылка.ВнешниеПользователи
// * Используется - Булево
// * ВидИзменения - Строка - одна из строк "Добавлено", "Удалено", "Изменено".
//
Функция НовоеИзменениеСоставовГруппДляРегистрации() Экспорт
Измерения = Метаданные.РегистрыСведений.СоставыГруппПользователей.Измерения;
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("ГруппаПользователей", Измерения.ГруппаПользователей.Тип);
Результат.Колонки.Добавить("Пользователь", Измерения.Пользователь.Тип);
Результат.Колонки.Добавить("Используется", Новый ОписаниеТипов("Булево"));
Результат.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Строка"));
Результат.Индексы.Добавить("Пользователь, ГруппаПользователей");
Возврат Результат;
КонецФункции
// Обновляет родителей группы пользователей с учетом иерархии // Обновляет родителей группы пользователей с учетом иерархии
// в регистре сведений "Иерархия групп пользователей", // в регистре сведений "Иерархия групп пользователей",
// а также групп пользователей в иерархии указанной группы. // а также групп пользователей в иерархии указанной группы.
@@ -5259,6 +5318,7 @@
Если Не РезультатЗапроса.Пустой() Тогда Если Не РезультатЗапроса.Пустой() Тогда
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Запись = НаборЗаписей.Добавить(); Запись = НаборЗаписей.Добавить();
Выборка = РезультатЗапроса.Выбрать(); Выборка = РезультатЗапроса.Выбрать();
@@ -5516,6 +5576,7 @@
Если Не РезультатыЗапроса[0].Пустой() Тогда Если Не РезультатыЗапроса[0].Пустой() Тогда
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Выборка = РезультатыЗапроса[0].Выбрать(); Выборка = РезультатыЗапроса[0].Выбрать();
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
@@ -5533,6 +5594,7 @@
Если Не РезультатыЗапроса[1].Пустой() Тогда Если Не РезультатыЗапроса[1].Пустой() Тогда
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Запись = НаборЗаписей.Добавить(); Запись = НаборЗаписей.Добавить();
Выборка = РезультатыЗапроса[1].Выбрать(); Выборка = РезультатыЗапроса[1].Выбрать();
@@ -5652,6 +5714,7 @@
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Пользователь", "Пользователь"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Пользователь", "Пользователь");
НаборИзОднойЗаписи = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборИзОднойЗаписи = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборИзОднойЗаписи.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Запись = НаборИзОднойЗаписи.Добавить(); Запись = НаборИзОднойЗаписи.Добавить();
УчастникиИзменений = ИзмененияСоставов.УчастникиИзменений; УчастникиИзменений = ИзмененияСоставов.УчастникиИзменений;
@@ -5730,7 +5793,14 @@
КонецЕсли; КонецЕсли;
ЕстьИзменения = Истина; ЕстьИзменения = Истина;
ЗарегистрироватьИзмененияСоставовГрупп(ИзмененияСоставов);
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ЗарегистрироватьИзмененияСоставовГрупп(ИзмененияСоставов.ДляРегистрации);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
УчастникиИзменений = Новый Массив; УчастникиИзменений = Новый Массив;
Для Каждого КлючИЗначение Из ИзмененияСоставов.УчастникиИзменений Цикл Для Каждого КлючИЗначение Из ИзмененияСоставов.УчастникиИзменений Цикл
@@ -5779,25 +5849,29 @@
КонецЕсли; КонецЕсли;
Если Удален Тогда Если Удален Тогда
Строка.ВидИзменения = "Удален"; Строка.ВидИзменения = "Удалено";
Строка.Используется = Ложь; Строка.Используется = Ложь;
ИначеЕсли Выборка.ИспользуетсяБыло = Null Тогда ИначеЕсли Выборка.ИспользуетсяБыло = Null Тогда
Строка.ВидИзменения = "Добавлен"; Строка.ВидИзменения = "Добавлено";
Строка.Используется = Выборка.Используется; Строка.Используется = Выборка.Используется;
Иначе Иначе
Строка.ВидИзменения = "ИспользованиеИзменено"; Строка.ВидИзменения = "Изменено";
Строка.Используется = Выборка.Используется; Строка.Используется = Выборка.Используется;
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
Процедура ЗарегистрироватьИзмененияСоставовГрупп(ИзмененияСоставов) // Параметры:
// ДляРегистрации - см. НовоеИзменениеСоставовГруппДляРегистрации
//
Процедура ЗарегистрироватьИзмененияСоставовГрупп(ДанныеДляРегистрации) Экспорт
ДанныеДляРегистрации = ИзмененияСоставов.ДляРегистрации;
Если Не ЗначениеЗаполнено(ДанныеДляРегистрации) Тогда Если Не ЗначениеЗаполнено(ДанныеДляРегистрации) Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
ЭтоВнешниеПользователи = ТипЗнч(ДанныеДляРегистрации[0].Пользователь)
= Тип("СправочникСсылка.ВнешниеПользователи");
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИзмененияСоставов", ДанныеДляРегистрации); Запрос.УстановитьПараметр("ИзмененияСоставов", ДанныеДляРегистрации);
@@ -5849,10 +5923,22 @@
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи
| ПО (ВнешниеПользователи.Ссылка = ИзмененияСоставов.Пользователь)"; | ПО (ВнешниеПользователи.Ссылка = ИзмененияСоставов.Пользователь)";
ПодсистемаУправлениеДоступомСуществует = ОбщегоНазначения.ПодсистемаСуществует(
"СтандартныеПодсистемы.УправлениеДоступом");
Если ПодсистемаУправлениеДоступомСуществует Тогда
МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный");
Запрос.УстановитьПараметр("ГруппаВсеПользователи", ?(ЭтоВнешниеПользователи,
ВнешниеПользователи.ГруппаВсеВнешниеПользователи(), Пользователи.ГруппаВсеПользователи()));
Запрос.Текст = Запрос.Текст
+ ОбщегоНазначения.РазделительПакетаЗапросов()
+ МодульУправлениеДоступомСлужебный.ТекстЗапросаГруппДоступаПриИзмененииУчастниковГруппПользователей();
КонецЕсли;
РезультатыЗапроса = Запрос.ВыполнитьПакет(); РезультатыЗапроса = Запрос.ВыполнитьПакет();
Данные = Новый Структура; Данные = Новый Структура;
Данные.Вставить("ВерсияСтруктурыДанных", 1); Данные.Вставить("ВерсияСтруктурыДанных", 2);
Данные.Вставить("ИзмененияСоставов", Новый Массив); Данные.Вставить("ИзмененияСоставов", Новый Массив);
Данные.Вставить("ПредставлениеГрупп", Новый Массив); Данные.Вставить("ПредставлениеГрупп", Новый Массив);
Данные.Вставить("ПредставлениеПользователей", Новый Массив); Данные.Вставить("ПредставлениеПользователей", Новый Массив);
@@ -5883,7 +5969,7 @@
Свойства.Вставить("ИдентификаторГруппы", Свойства.Вставить("ИдентификаторГруппы",
НРег(Выборка.ГруппаПользователей.УникальныйИдентификатор())); НРег(Выборка.ГруппаПользователей.УникальныйИдентификатор()));
Свойства.Вставить("ПредставлениеГруппы", Выборка.ПредставлениеГруппы); Свойства.Вставить("ПредставлениеГруппы", Выборка.ПредставлениеГруппы);
Свойства.Вставить("СсылкаГруппы", ЗначениеВСтрокуВнутр(Выборка.ГруппаПользователей)); Свойства.Вставить("СсылкаГруппы", СериализованнаяСсылка(Выборка.ГруппаПользователей));
Данные.ПредставлениеГрупп.Добавить(Свойства); Данные.ПредставлениеГрупп.Добавить(Свойства);
КонецЦикла; КонецЦикла;
@@ -5893,14 +5979,40 @@
Свойства.Вставить("ИдентификаторПользователя", Свойства.Вставить("ИдентификаторПользователя",
НРег(Выборка.Пользователь.УникальныйИдентификатор())); НРег(Выборка.Пользователь.УникальныйИдентификатор()));
Свойства.Вставить("ПредставлениеПользователя", Выборка.ПредставлениеПользователя); Свойства.Вставить("ПредставлениеПользователя", Выборка.ПредставлениеПользователя);
Свойства.Вставить("СсылкаПользователя", ЗначениеВСтрокуВнутр(Выборка.Пользователь)); Свойства.Вставить("СсылкаПользователя", СериализованнаяСсылка(Выборка.Пользователь));
Данные.ПредставлениеПользователей.Добавить(Свойства); Данные.ПредставлениеПользователей.Добавить(Свойства);
КонецЦикла; КонецЦикла;
Если ТипЗнч(ДанныеДляРегистрации[0].Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Если ПодсистемаУправлениеДоступомСуществует Тогда
ИмяСобытия = ИмяСобытияИзменениеИзменениеУчастниковГруппВнешнихПользователейДляЖурналаРегистрации(); Данные.Вставить("УчастникиГруппДоступа", Новый Массив);
Данные.Вставить("ПредставлениеГруппДоступа", Новый Массив);
Выборка = РезультатыЗапроса[5].Выбрать();
Пока Выборка.Следующий() Цикл
Свойства = Новый Структура;
Свойства.Вставить("ГруппаДоступа", СериализованнаяСсылка(Выборка.ГруппаДоступа));
Свойства.Вставить("Участник", СериализованнаяСсылка(Выборка.Участник));
Свойства.Вставить("СрокДействия", Выборка.СрокДействия);
Данные.УчастникиГруппДоступа.Добавить(Свойства);
КонецЦикла;
Выборка = РезультатыЗапроса[6].Выбрать();
Пока Выборка.Следующий() Цикл
Свойства = Новый Структура;
Свойства.Вставить("ГруппаДоступа", СериализованнаяСсылка(Выборка.ГруппаДоступа));
Свойства.Вставить("Представление", Выборка.Представление);
Свойства.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
Свойства.Вставить("Профиль", СериализованнаяСсылка(Выборка.Профиль));
Свойства.Вставить("ПредставлениеПрофиля", Выборка.ПредставлениеПрофиля);
Свойства.Вставить("ПометкаУдаленияПрофиля", Выборка.ПометкаУдаленияПрофиля);
Данные.ПредставлениеГруппДоступа.Добавить(Свойства);
КонецЦикла;
КонецЕсли;
Если ЭтоВнешниеПользователи Тогда
ИмяСобытия = ИмяСобытияИзменениеУчастниковГруппВнешнихПользователейДляЖурналаРегистрации();
Иначе Иначе
ИмяСобытия = ИмяСобытияИзменениеИзменениеУчастниковГруппПользователейДляЖурналаРегистрации(); ИмяСобытия = ИмяСобытияИзменениеУчастниковГруппПользователейДляЖурналаРегистрации();
КонецЕсли; КонецЕсли;
ЗаписьЖурналаРегистрации(ИмяСобытия, ЗаписьЖурналаРегистрации(ИмяСобытия,
@@ -5910,6 +6022,16 @@
, ,
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
Возврат;
КонецЕсли;
МодульГруппыДоступа = ОбщегоНазначения.ОбщийМодуль("Справочники.ГруппыДоступа");
ОписаниеОбъекта = Новый Структура("ИзменениеСоставовГруппПользователей", ДанныеДляРегистрации);
МодульГруппыДоступа.ЗарегистрироватьИзменениеРазрешенныхЗначений(ОписаниеОбъекта, Неопределено);
КонецПроцедуры КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@@ -6049,6 +6171,7 @@
Если Не РезультатыЗапросов[0].Пустой() Тогда Если Не РезультатыЗапросов[0].Пустой() Тогда
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Выборка = РезультатыЗапросов[0].Выбрать(); Выборка = РезультатыЗапросов[0].Выбрать();
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
@@ -6066,6 +6189,7 @@
Если Не РезультатыЗапросов[1].Пустой() Тогда Если Не РезультатыЗапросов[1].Пустой() Тогда
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Запись = НаборЗаписей.Добавить(); Запись = НаборЗаписей.Добавить();
Выборка = РезультатыЗапросов[1].Выбрать(); Выборка = РезультатыЗапросов[1].Выбрать();
@@ -7461,12 +7585,9 @@
СтарыеКлючи = СтрРазделить(СтарыеКлючиРолейСтрокой, ",", Ложь); СтарыеКлючи = СтрРазделить(СтарыеКлючиРолейСтрокой, ",", Ложь);
НовыеКлючи = СтрРазделить(НовыеКлючиРолейСтрокой, ",", Ложь); НовыеКлючи = СтрРазделить(НовыеКлючиРолейСтрокой, ",", Ложь);
Если СтарыеКлючи.Количество() > НовыеКлючи.Количество() Тогда
Возврат Истина;
КонецЕсли;
Для Каждого КлючРоли Из СтарыеКлючи Цикл Для Каждого КлючРоли Из СтарыеКлючи Цикл
Если НовыеКлючи.Найти(КлючРоли) = Неопределено Тогда Если Не СтрЗаканчиваетсяНа(КлючРоли, "/1") // Это не роль расширения.
И НовыеКлючи.Найти(КлючРоли) = Неопределено Тогда
Возврат Истина; Возврат Истина;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -7479,7 +7600,8 @@
Функция РолиСокращены(СтарыйПользовательИБ, НовыйПользовательИБ) Функция РолиСокращены(СтарыйПользовательИБ, НовыйПользовательИБ)
Для Каждого Роль Из СтарыйПользовательИБ.Роли Цикл Для Каждого Роль Из СтарыйПользовательИБ.Роли Цикл
Если Не НовыйПользовательИБ.Роли.Содержит(Роль) Тогда Если Не НовыйПользовательИБ.Роли.Содержит(Роль)
И Роль.РасширениеКонфигурации() = Неопределено Тогда
Возврат Истина; Возврат Истина;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -7498,6 +7620,7 @@
// //
Функция КлючиРолейПользователяИБ(ПользовательИБ) Функция КлючиРолейПользователяИБ(ПользовательИБ)
РолиРасширений = ПользователиСлужебныйПовтИсп.РолиРасширений();
Список = Новый СписокЗначений; Список = Новый СписокЗначений;
Для Каждого Роль Из ПользовательИБ.Роли Цикл Для Каждого Роль Из ПользовательИБ.Роли Цикл
@@ -7505,6 +7628,9 @@
Если КлючРоли = Неопределено Тогда Если КлючРоли = Неопределено Тогда
КлючРоли = "Неопределено"; КлючРоли = "Неопределено";
КонецЕсли; КонецЕсли;
Если РолиРасширений.Получить(Роль.Имя) <> Неопределено Тогда
КлючРоли = КлючРоли + "/1";
КонецЕсли;
Список.Добавить(КлючРоли); Список.Добавить(КлючРоли);
КонецЦикла; КонецЦикла;
@@ -8715,6 +8841,7 @@
Попытка Попытка
Блокировка.Заблокировать(); Блокировка.Заблокировать();
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
НаборЗаписей.Отбор[ИмяПоля].Установить(ПользовательИлиГруппа); НаборЗаписей.Отбор[ИмяПоля].Установить(ПользовательИлиГруппа);
НаборЗаписей.Прочитать(); НаборЗаписей.Прочитать();
Индекс = НаборЗаписей.Количество(); Индекс = НаборЗаписей.Количество();
@@ -472,6 +472,26 @@
КонецФункции КонецФункции
// Возвращаемое значение:
// ФиксированноеСоответствие из КлючИЗначение:
// * Ключ - Строка - имя роли.
// * Значение - Булево - Истина.
//
Функция РолиРасширений() Экспорт
Результат = Новый Соответствие;
Для Каждого Роль Из Метаданные.Роли Цикл
Если Роль.РасширениеКонфигурации() = Неопределено Тогда
Продолжить;
КонецЕсли;
Результат.Вставить(Роль.Имя, Истина);
КонецЦикла;
Возврат Новый ФиксированноеСоответствие(Результат);
КонецФункции
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Вспомогательные процедуры и функции. // Вспомогательные процедуры и функции.
@@ -1388,7 +1388,7 @@
КонецПроцедуры КонецПроцедуры
Функция ИдентификаторКлассификатора() Функция ИдентификаторКлассификатора() Экспорт
Возврат "Countries"; Возврат "Countries";
КонецФункции КонецФункции
@@ -3172,53 +3172,9 @@
// //
Функция ТаблицаКлассификатора() Экспорт Функция ТаблицаКлассификатора() Экспорт
Классификатор = Неопределено; Результат = РаботаСАдресамиПовтИсп.СтраныМира();
СтраныМира = Результат.СтраныМира.Скопировать();
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда Возврат СтраныМира;
ИдентификаторКлассификатора = ИдентификаторКлассификатора();
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
Идентификаторы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторКлассификатора);
Результат = МодульРаботаСКлассификаторами.ПолучитьФайлыКлассификаторов(Идентификаторы);
Если ПустаяСтрока(Результат.КодОшибки) И Результат.ДанныеКлассификаторов <> Неопределено Тогда
ОписаниеКлассификатора = Результат.ДанныеКлассификаторов.Найти(ИдентификаторКлассификатора, "Идентификатор");
Если ОписаниеКлассификатора <> Неопределено Тогда
Классификатор = ПолучитьИзВременногоХранилища(ОписаниеКлассификатора.АдресФайла);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Классификатор = Неопределено Тогда
Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор");
КлассификаторXML = Макет.ПолучитьТекст();
Иначе
НаборСтрок = Новый Массив;
ЧтениеЧасти = Новый ЧтениеДанных(Классификатор.ОткрытьПотокДляЧтения());
Пока Не ЧтениеЧасти.ЧтениеЗавершено Цикл
НаборСтрок.Добавить(ЧтениеЧасти.ПрочитатьСтроку());
КонецЦикла;
КлассификаторXML = СтрСоединить(НаборСтрок, ЧтениеЧасти.РазделительСтрок);
КонецЕсли;
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(КлассификаторXML);
ТаблицаСтран = СериализаторXDTO.ПрочитатьXML(Чтение); // ТаблицаЗначений
// Старые версии классификаторов не содержат колонку МеждународноеНаименование
Если ТаблицаСтран.Колонки.Найти("МеждународноеНаименование") = Неопределено Тогда
ТаблицаСтран.Колонки.Добавить("МеждународноеНаименование", ОбщегоНазначения.ОписаниеТипаСтрока(100));
КонецЕсли;
Возврат ТаблицаСтран;
КонецФункции КонецФункции
@@ -35,5 +35,70 @@
КонецФункции КонецФункции
// Общероссийский классификатор стран мира
// Возвращает полные данные ОКСМ классификатора.
// Таблица значений в макете проиндексирована по полям "Код", "Наименование".
//
// Возвращаемое значение:
// ТаблицаЗначений - данные классификатора с колонками:
// * Код - Строка - данные страны.
// * Наименование - Строка - данные страны.
// * НаименованиеПолное - Строка - данные страны.
// * КодАльфа2 - Строка - данные страны.
// * КодАльфа3 - Строка - данные страны.
//
Функция СтраныМира() Экспорт
Классификатор = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
ИдентификаторКлассификатора = РаботаСАдресами.ИдентификаторКлассификатора();
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
Идентификаторы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторКлассификатора);
Результат = МодульРаботаСКлассификаторами.ПолучитьФайлыКлассификаторов(Идентификаторы);
Если ПустаяСтрока(Результат.КодОшибки) И Результат.ДанныеКлассификаторов <> Неопределено Тогда
ОписаниеКлассификатора = Результат.ДанныеКлассификаторов.Найти(ИдентификаторКлассификатора, "Идентификатор");
Если ОписаниеКлассификатора <> Неопределено Тогда
Классификатор = ПолучитьИзВременногоХранилища(ОписаниеКлассификатора.АдресФайла);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Классификатор = Неопределено Тогда
Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор");
КлассификаторXML = Макет.ПолучитьТекст();
Иначе
НаборСтрок = Новый Массив;
ЧтениеЧасти = Новый ЧтениеДанных(Классификатор.ОткрытьПотокДляЧтения());
Пока Не ЧтениеЧасти.ЧтениеЗавершено Цикл
НаборСтрок.Добавить(ЧтениеЧасти.ПрочитатьСтроку());
КонецЦикла;
КлассификаторXML = СтрСоединить(НаборСтрок, ЧтениеЧасти.РазделительСтрок);
КонецЕсли;
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(КлассификаторXML);
ТаблицаСтран = СериализаторXDTO.ПрочитатьXML(Чтение); // ТаблицаЗначений
// Старые версии классификаторов не содержат колонку МеждународноеНаименование
Если ТаблицаСтран.Колонки.Найти("МеждународноеНаименование") = Неопределено Тогда
ТаблицаСтран.Колонки.Добавить("МеждународноеНаименование", ОбщегоНазначения.ОписаниеТипаСтрока(100));
КонецЕсли;
Возврат Новый ФиксированнаяСтруктура("СтраныМира", ТаблицаСтран);
КонецФункции
#КонецОбласти #КонецОбласти
@@ -2823,7 +2823,7 @@
Функция АдресФайлаСНастройками() Экспорт Функция АдресФайлаСНастройками() Экспорт
АдресФайла = "https://downloads.v8.1c.eu/content/common/settings/mailservers.json"; АдресФайла = "https://downloads.1c.eu/content/common/settings/mailservers.json";
Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда
МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация");
@@ -2836,7 +2836,7 @@
Функция АдресФайлаСОписаниемОшибок() Функция АдресФайлаСОписаниемОшибок()
АдресФайла = "https://downloads.v8.1c.eu/content/common/settings/mailerrors.json"; АдресФайла = "https://downloads.1c.eu/content/common/settings/mailerrors.json";
Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда
МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация");
@@ -2849,7 +2849,7 @@
Функция АдресВнешнегоРесурса() Функция АдресВнешнегоРесурса()
АдресВнешнегоРесурса = "downloads.v8.1c.eu"; АдресВнешнегоРесурса = "downloads.1c.eu";
Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда Если Метаданные.ОбщиеМодули.Найти("РаботаСПочтовымиСообщениямиСлужебныйЛокализация") <> Неопределено Тогда
МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация"); МодульРаботаСПочтовымиСообщениямиСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениямиСлужебныйЛокализация");
@@ -1705,127 +1705,122 @@
// //
Функция ПолучитьНастройкиСканированияПользователя(ИдентификаторКлиента) Экспорт Функция ПолучитьНастройкиСканированияПользователя(ИдентификаторКлиента) Экспорт
НастройкиСканированияПользователя = РаботаСФайламиКлиентСервер.НастройкиСканированияПользователя(); Результат = РаботаСФайламиКлиентСервер.НастройкиСканированияПользователя();
НастройкиСканированияПользователя.ПоказыватьДиалогСканера = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ПоказыватьДиалогСканера = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ПоказыватьДиалогСканера", "НастройкиСканирования/ПоказыватьДиалогСканера",
ИдентификаторКлиента, Истина); ИдентификаторКлиента, Истина);
НастройкиСканированияПользователя.ИмяУстройства = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ИмяУстройства = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ИмяУстройства", "НастройкиСканирования/ИмяУстройства",
ИдентификаторКлиента, ""); ИдентификаторКлиента, "");
НастройкиСканированияПользователя.ФорматСканированногоИзображения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ФорматСканированногоИзображения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ФорматСканированногоИзображения", "НастройкиСканирования/ФорматСканированногоИзображения",
ИдентификаторКлиента, Перечисления.ФорматыСканированногоИзображения.PNG); ИдентификаторКлиента, Перечисления.ФорматыСканированногоИзображения.PNG);
Если Результат.ФорматСканированногоИзображения = Перечисления.ФорматыСканированногоИзображения.ПустаяСсылка() Тогда
Результат.ФорматСканированногоИзображения = Перечисления.ФорматыСканированногоИзображения.PNG;
КонецЕсли;
НастройкиСканированияПользователя.СохранятьВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.СохранятьВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/СохранятьВPDF", "НастройкиСканирования/СохранятьВPDF",
ИдентификаторКлиента, Ложь); ИдентификаторКлиента, Ложь);
НастройкиСканированияПользователя.ФорматХраненияМногостраничный = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ФорматХраненияМногостраничный = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ФорматХраненияМногостраничный", "НастройкиСканирования/ФорматХраненияМногостраничный",
ИдентификаторКлиента, Перечисления.ФорматыХраненияМногостраничныхФайлов.TIF); ИдентификаторКлиента, Перечисления.ФорматыХраненияМногостраничныхФайлов.TIF);
НастройкиСканированияПользователя.Разрешение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.Разрешение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/Разрешение", "НастройкиСканирования/Разрешение",
ИдентификаторКлиента); ИдентификаторКлиента);
НастройкиСканированияПользователя.Цветность = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.Цветность = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/Цветность", "НастройкиСканирования/Цветность",
ИдентификаторКлиента); ИдентификаторКлиента);
НастройкиСканированияПользователя.Поворот = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.Поворот = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/Поворот", "НастройкиСканирования/Поворот",
ИдентификаторКлиента); ИдентификаторКлиента);
НастройкиСканированияПользователя.РазмерБумаги = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.РазмерБумаги = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/РазмерБумаги", "НастройкиСканирования/РазмерБумаги",
ИдентификаторКлиента); ИдентификаторКлиента);
НастройкиСканированияПользователя.ДвустороннееСканирование = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ДвустороннееСканирование = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ДвустороннееСканирование", "НастройкиСканирования/ДвустороннееСканирование",
ИдентификаторКлиента); ИдентификаторКлиента);
НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ИспользоватьImageMagickДляПреобразованияВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ИспользоватьImageMagickДляПреобразованияВPDF", "НастройкиСканирования/ИспользоватьImageMagickДляПреобразованияВPDF",
ИдентификаторКлиента, Ложь); ИдентификаторКлиента, Ложь);
НастройкиСканированияПользователя.КачествоJPG = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.КачествоJPG = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/КачествоJPG", "НастройкиСканирования/КачествоJPG",
ИдентификаторКлиента, 100); ИдентификаторКлиента, 100);
НастройкиСканированияПользователя.СжатиеTIFF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.СжатиеTIFF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/СжатиеTIFF", "НастройкиСканирования/СжатиеTIFF",
ИдентификаторКлиента, Перечисления.ВариантыСжатияTIFF.БезСжатия); ИдентификаторКлиента, Перечисления.ВариантыСжатияTIFF.БезСжатия);
НастройкиСканированияПользователя.ПутьКПрограммеКонвертации = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ПутьКПрограммеКонвертации = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ПутьКПрограммеКонвертации", "НастройкиСканирования/ПутьКПрограммеКонвертации",
ИдентификаторКлиента, ""); // ImageMagick ИдентификаторКлиента, ""); // ImageMagick
НастройкиСканированияПользователя.КаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.КаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/КаталогЖурналаСканирования", "НастройкиСканирования/КаталогЖурналаСканирования",
ИдентификаторКлиента, ""); ИдентификаторКлиента, "");
НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( Результат.ИспользоватьКаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ИспользоватьКаталогЖурналаСканирования", "НастройкиСканирования/ИспользоватьКаталогЖурналаСканирования",
ИдентификаторКлиента, Ложь); ИдентификаторКлиента, Ложь);
Возврат НастройкиСканированияПользователя; Возврат Результат;
КонецФункции КонецФункции
// Сохраняет настройки сканирования пользователя. // Сохраняет настройки сканирования пользователя.
//
// Параметры: // Параметры:
// НастройкиСканированияПользователя - см. РаботаСФайламиКлиентСервер.НастройкиСканированияПользователя // НастройкиСканированияПользователя - см. РаботаСФайламиКлиентСервер.НастройкиСканированияПользователя
// ИдентификаторКлиента - УникальныйИдентификатор - идентификатор клиента // ИдентификаторКлиента - УникальныйИдентификатор
// //
Процедура СохранитьНастройкиСканированияПользователя(НастройкиСканированияПользователя, ИдентификаторКлиента) Экспорт Процедура СохранитьНастройкиСканированияПользователя(НастройкиСканированияПользователя, ИдентификаторКлиента) Экспорт
НастройкиСканирования = Новый Массив; Результат = Новый Массив;
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ПоказыватьДиалогСканера", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ПоказыватьДиалогСканера",
НастройкиСканированияПользователя.ПоказыватьДиалогСканера, ИдентификаторКлиента)); НастройкиСканированияПользователя.ПоказыватьДиалогСканера, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИмяУстройства", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИмяУстройства",
НастройкиСканированияПользователя.ИмяУстройства, ИдентификаторКлиента)); НастройкиСканированияПользователя.ИмяУстройства, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ФорматСканированногоИзображения", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ФорматСканированногоИзображения",
НастройкиСканированияПользователя.ФорматСканированногоИзображения, ИдентификаторКлиента)); НастройкиСканированияПользователя.ФорматСканированногоИзображения, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("СохранятьВPDF", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("СохранятьВPDF",
НастройкиСканированияПользователя.СохранятьВPDF, ИдентификаторКлиента)); НастройкиСканированияПользователя.СохранятьВPDF, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ФорматХраненияМногостраничный", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ФорматХраненияМногостраничный",
НастройкиСканированияПользователя.ФорматХраненияМногостраничный, ИдентификаторКлиента)); НастройкиСканированияПользователя.ФорматХраненияМногостраничный, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("Разрешение", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("Разрешение",
НастройкиСканированияПользователя.Разрешение, ИдентификаторКлиента)); НастройкиСканированияПользователя.Разрешение, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("Цветность", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("Цветность",
НастройкиСканированияПользователя.Цветность, ИдентификаторКлиента)); НастройкиСканированияПользователя.Цветность, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("Поворот", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("Поворот",
НастройкиСканированияПользователя.Поворот, ИдентификаторКлиента)); НастройкиСканированияПользователя.Поворот, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("РазмерБумаги", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("РазмерБумаги",
НастройкиСканированияПользователя.РазмерБумаги, ИдентификаторКлиента)); НастройкиСканированияПользователя.РазмерБумаги, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ДвустороннееСканирование", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ДвустороннееСканирование",
НастройкиСканированияПользователя.ДвустороннееСканирование, ИдентификаторКлиента)); НастройкиСканированияПользователя.ДвустороннееСканирование, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИспользоватьImageMagickДляПреобразованияВPDF", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьImageMagickДляПреобразованияВPDF",
НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF, ИдентификаторКлиента)); НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("КачествоJPG", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("КачествоJPG",
НастройкиСканированияПользователя.КачествоJPG, ИдентификаторКлиента)); НастройкиСканированияПользователя.КачествоJPG, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("СжатиеTIFF", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("СжатиеTIFF",
НастройкиСканированияПользователя.СжатиеTIFF, ИдентификаторКлиента)); НастройкиСканированияПользователя.СжатиеTIFF, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ПутьКПрограммеКонвертации", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ПутьКПрограммеКонвертации",
НастройкиСканированияПользователя.ПутьКПрограммеКонвертации, ИдентификаторКлиента)); НастройкиСканированияПользователя.ПутьКПрограммеКонвертации, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("КаталогЖурналаСканирования", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("КаталогЖурналаСканирования",
НастройкиСканированияПользователя.КаталогЖурналаСканирования, ИдентификаторКлиента)); НастройкиСканированияПользователя.КаталогЖурналаСканирования, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИспользоватьКаталогЖурналаСканирования", Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьКаталогЖурналаСканирования",
НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования, ИдентификаторКлиента)); НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования, ИдентификаторКлиента));
Если ЗначениеЗаполнено(НастройкиСканированияПользователя.ФорматХраненияОдностраничный) Тогда ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(Результат, Истина);
ФорматХраненияОдностраничный = НастройкиСканированияПользователя.ФорматХраненияОдностраничный;
Иначе
ФорматХраненияОдностраничный = РаботаСФайламиСлужебный.ПреобразоватьФорматСканированияВФорматХранения(НастройкиСканированияПользователя.ФорматСканированногоИзображения,
НастройкиСканированияПользователя.СохранятьВPDF);
КонецЕсли;
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ФорматХраненияОдностраничный", ФорматХраненияОдностраничный, ИдентификаторКлиента));
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(НастройкиСканирования, Истина);
КонецПроцедуры КонецПроцедуры
#Область ДляВызоваИзДругихПодсистем #Область ДляВызоваИзДругихПодсистем
@@ -1839,7 +1834,7 @@
// Параметры: // Параметры:
// Параметры - Структура - параметры выполнения отложенного обработчика обновления. // Параметры - Структура - параметры выполнения отложенного обработчика обновления.
// //
Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт // АПК:530 Обрабатывает таблицы присоединенных файлов, а не данные других подсистем.
РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры); РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры);
@@ -57,10 +57,10 @@
КонецПроцедуры КонецПроцедуры
// Настройки сканирования пользователя. // Возвращает настройки сканирования пользователя.
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура - настройки сканирования пользователя: // Структура:
// * ПоказыватьДиалогСканера - Булево // * ПоказыватьДиалогСканера - Булево
// * ИмяУстройства - Строка - НаименованиеСканера // * ИмяУстройства - Строка - НаименованиеСканера
// * ФорматСканированногоИзображения - ПеречислениеСсылка.ФорматыСканированногоИзображения // * ФорматСканированногоИзображения - ПеречислениеСсылка.ФорматыСканированногоИзображения
@@ -75,28 +75,26 @@
// * КачествоJPG - Число // * КачествоJPG - Число
// * СжатиеTIFF - ПеречислениеСсылка.ВариантыСжатияTIFF // * СжатиеTIFF - ПеречислениеСсылка.ВариантыСжатияTIFF
// * ПутьКПрограммеКонвертации - Строка // * ПутьКПрограммеКонвертации - Строка
// * ФорматХраненияОдностраничный - ПеречислениеСсылка.ФорматыХраненияОдностраничныхФайлов
// //
Функция НастройкиСканированияПользователя() Экспорт Функция НастройкиСканированияПользователя() Экспорт
НастройкиСканированияПользователя = Новый Структура; Результат = Новый Структура;
НастройкиСканированияПользователя.Вставить("ПоказыватьДиалогСканера", Ложь); Результат.Вставить("ПоказыватьДиалогСканера", Ложь);
НастройкиСканированияПользователя.Вставить("ИмяУстройства", ""); Результат.Вставить("ИмяУстройства", "");
НастройкиСканированияПользователя.Вставить("ФорматСканированногоИзображения"); Результат.Вставить("ФорматСканированногоИзображения");
НастройкиСканированияПользователя.Вставить("СохранятьВPDF", Ложь); Результат.Вставить("СохранятьВPDF", Ложь);
НастройкиСканированияПользователя.Вставить("ФорматХраненияМногостраничный"); Результат.Вставить("ФорматХраненияМногостраничный");
НастройкиСканированияПользователя.Вставить("Разрешение"); Результат.Вставить("Разрешение");
НастройкиСканированияПользователя.Вставить("Цветность"); Результат.Вставить("Цветность");
НастройкиСканированияПользователя.Вставить("Поворот"); Результат.Вставить("Поворот");
НастройкиСканированияПользователя.Вставить("РазмерБумаги"); Результат.Вставить("РазмерБумаги");
НастройкиСканированияПользователя.Вставить("ДвустороннееСканирование", Ложь); Результат.Вставить("ДвустороннееСканирование", Ложь);
НастройкиСканированияПользователя.Вставить("ИспользоватьImageMagickДляПреобразованияВPDF", Ложь); Результат.Вставить("ИспользоватьImageMagickДляПреобразованияВPDF", Ложь);
НастройкиСканированияПользователя.Вставить("КачествоJPG", 0); Результат.Вставить("КачествоJPG", 0);
НастройкиСканированияПользователя.Вставить("СжатиеTIFF"); Результат.Вставить("СжатиеTIFF");
НастройкиСканированияПользователя.Вставить("ПутьКПрограммеКонвертации", ""); Результат.Вставить("ПутьКПрограммеКонвертации", "");
НастройкиСканированияПользователя.Вставить("ФорматХраненияОдностраничный"); Результат.Вставить("КаталогЖурналаСканирования");
НастройкиСканированияПользователя.Вставить("КаталогЖурналаСканирования"); Результат.Вставить("ИспользоватьКаталогЖурналаСканирования", Ложь);
НастройкиСканированияПользователя.Вставить("ИспользоватьКаталогЖурналаСканирования", Ложь); Возврат Результат;
Возврат НастройкиСканированияПользователя;
КонецФункции КонецФункции
#КонецОбласти #КонецОбласти
@@ -2180,24 +2180,6 @@
КонецФункции КонецФункции
Функция ПреобразоватьФорматСканированияВФорматХранения(ФорматСканирования, СохранятьВPDF) Экспорт
Если СохранятьВPDF Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.PDF;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.BMP Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.BMP;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.GIF Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.GIF;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.JPG Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.JPG;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.TIF Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.TIF;
КонецЕсли;
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.PNG;
КонецФункции
Функция КомандаСканироватьЛист() Экспорт Функция КомандаСканироватьЛист() Экспорт
Возврат "e1cib/command/Обработка.Сканирование.Команда.СканироватьЛист"; Возврат "e1cib/command/Обработка.Сканирование.Команда.СканироватьЛист";
КонецФункции КонецФункции
@@ -3025,7 +3007,7 @@
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
Функция СформироватьНастройкуСканирования(Имя, Значение, ИдентификаторКлиента) Экспорт Функция НастройкаСканирования(Имя, Значение, ИдентификаторКлиента) Экспорт
Элемент = Новый Структура; Элемент = Новый Структура;
Элемент.Вставить("Объект", "НастройкиСканирования/" + Имя); Элемент.Вставить("Объект", "НастройкиСканирования/" + Имя);
@@ -3227,9 +3227,9 @@
МассивСтруктур = Новый Массив; МассивСтруктур = Новый Массив;
МассивСтруктур.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("КаталогЖурналаСканирования", МассивСтруктур.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("КаталогЖурналаСканирования",
"", ИдентификаторКлиента)); "", ИдентификаторКлиента));
МассивСтруктур.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИспользоватьКаталогЖурналаСканирования", МассивСтруктур.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьКаталогЖурналаСканирования",
Ложь, ИдентификаторКлиента)); Ложь, ИдентификаторКлиента));
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина); ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур, Истина);
@@ -203,7 +203,21 @@
ПараметрыПриложения.Вставить(ИмяПараметраВложенныхПоказателей(), Новый Массив); ПараметрыПриложения.Вставить(ИмяПараметраВложенныхПоказателей(), Новый Массив);
КонецЕсли; КонецЕсли;
Попытка
ПроверитьПолучитьСерверныеОповещенияСПоказателями(СостояниеПолучения, Показатели); ПроверитьПолучитьСерверныеОповещенияСПоказателями(СостояниеПолучения, Показатели);
Исключение
СерверныеВызовыРазрешены = Истина;
Попытка
СтандартныеПодсистемыВызовСервера.ИмяОбъектаМетаданных(Тип("Неопределено"));
Исключение
СерверныеВызовыРазрешены = Ложь;
КонецПопытки;
Если Не СерверныеВызовыРазрешены Тогда
ПодключитьОбработчикПроверкиПолученияСерверныхОповещений(15);
Возврат;
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
ДобавитьОсновнойПоказатель(Показатели, МоментНачала, ДобавитьОсновнойПоказатель(Показатели, МоментНачала,
"СерверныеОповещенияКлиент.ПроверитьПолучитьСерверныеОповещения", Истина); "СерверныеОповещенияКлиент.ПроверитьПолучитьСерверныеОповещения", Истина);
@@ -396,13 +396,7 @@
НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF;
НовыйФормат.Представление = ПредставлениеТипаФайлаТабличногоДокументаPDF(); НовыйФормат.Представление = ПредставлениеТипаФайлаТабличногоДокументаPDF();
// Документ PDF (.pdf) (устаревший формат для ФНС) СтандартныеПодсистемыСерверЛокализация.ПриНастройкеФорматовСохраненияТабличногоДокумента(ТаблицаФорматов);
НовыйФормат = ТаблицаФорматов.Добавить();
НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF;
НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF;
НовыйФормат.Расширение = "PDF";
НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF;
НовыйФормат.Представление = НСтр("ru = 'Документ PDF (устаревший формат)'");
// Табличный документ (.mxl) // Табличный документ (.mxl)
НовыйФормат = ТаблицаФорматов.Добавить(); НовыйФормат = ТаблицаФорматов.Добавить();
@@ -0,0 +1,27 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
// См. СтандартныеПодсистемыСервер.НастройкиФорматовСохраненияТабличногоДокумента
//
Процедура ПриНастройкеФорматовСохраненияТабличногоДокумента(ТаблицаФорматов) Экспорт
// Локализация
// PDF (.pdf) (устаревший формат для ФНС)
НовыйФормат = ТаблицаФорматов.Добавить();
НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF;
НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF;
НовыйФормат.Расширение = "PDF";
НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF;
НовыйФормат.Представление = НСтр("ru = 'Документ PDF (для ФНС)'");
// Конец Локализация
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="91d42c1f-af78-4c21-8071-61a347a94d5d">
<name>СтандартныеПодсистемыСерверЛокализация</name>
<synonym>
<key>ru</key>
<value>Стандартные подсистемы сервер локализация</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -696,7 +696,67 @@
// Булево // Булево
// //
Функция ПоддерживаетсяРегистрацияИзмененийПраваДоступа() Экспорт Функция ПоддерживаетсяРегистрацияИзмененийПраваДоступа() Экспорт
Возврат Ложь; Возврат Истина;
КонецФункции
// Возвращаемое значение:
// Строка
//
Функция ИмяСобытияИзменениеУчастниковГруппДоступаДляЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Управление доступом.Изменение участников групп доступа'",
ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
// Возвращаемое значение:
// Строка
//
Функция ИмяСобытияИзменениеРазрешенныхЗначенийДляЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Управление доступом.Изменение разрешенных значений'",
ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
// Возвращаемое значение:
// Строка
//
Функция ИмяСобытияИзменениеРолейПрофилейДляЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Управление доступом.Изменение ролей профилей'",
ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
// См. СвойстваВидовДоступа
Функция СвойстваВсехВидовДоступа() Экспорт
Возврат СвойстваВидовДоступа();
КонецФункции
// Возвращаемое значение:
// Структура:
// * ПолноеИмяФормыСпискаГруппДоступа - Строка
// * ПолноеИмяФормыЭлементаГруппДоступа - Строка
// * ПолноеИмяФормыСпискаПрофилей - Строка
// * ПолноеИмяФормыЭлементаПрофилей - Строка
// * ТипСправочникСсылкаГруппыДоступа - Тип
// * ТипСправочникСсылкаПрофилиГруппДоступа - Тип
// * ТипыЗначенийДоступа - Массив из Тип
//
Функция ПараметрыДляОтчетов() Экспорт
Результат = Новый Структура;
Результат.Вставить("ПолноеИмяФормыСпискаГруппДоступа", "Справочник.ГруппыДоступа.Форма.ФормаСписка");
Результат.Вставить("ПолноеИмяФормыЭлементаГруппДоступа", "Справочник.ГруппыДоступа.Форма.ФормаЭлемента");
Результат.Вставить("ПолноеИмяФормыСпискаПрофилей", "Справочник.ПрофилиГруппДоступа.Форма.ФормаСписка");
Результат.Вставить("ПолноеИмяФормыЭлементаПрофилей", "Справочник.ПрофилиГруппДоступа.Форма.ФормаЭлемента");
Результат.Вставить("ТипСправочникСсылкаГруппыДоступа", Тип("СправочникСсылка.ГруппыДоступа"));
Результат.Вставить("ТипСправочникСсылкаПрофилиГруппДоступа", Тип("СправочникСсылка.ПрофилиГруппДоступа"));
Результат.Вставить("ТипыЗначенийДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип.Типы());
Возврат Результат;
КонецФункции КонецФункции
#Область УниверсальноеОграничение #Область УниверсальноеОграничение
@@ -2221,6 +2281,7 @@
КонецЕсли; КонецЕсли;
// Параметр "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа". // Параметр "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа".
РегистрыСведений.ИспользуемыеВидыДоступа.ОбновитьДанныеРегистра();
ОбновитьГруппыИНаборыЗначенийДоступаПриИзмененииТиповГруппИЗначений(); ОбновитьГруппыИНаборыЗначенийДоступаПриИзмененииТиповГруппИЗначений();
// Параметр "СтандартныеПодсистемы.УправлениеДоступом.ВозможныеПраваДляНастройкиПравОбъектов". // Параметр "СтандартныеПодсистемы.УправлениеДоступом.ВозможныеПраваДляНастройкиПравОбъектов".
@@ -2570,6 +2631,56 @@
КонецПроцедуры КонецПроцедуры
// Процедуры и функция для подсистемы Пользователи.
Функция ТекстЗапросаГруппДоступаПриИзмененииУчастниковГруппПользователей() Экспорт
Возврат
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| УчастникиГруппДоступа.Ссылка КАК ГруппаДоступа,
| УчастникиГруппДоступа.Пользователь КАК Участник,
| УчастникиГруппДоступа.СрокДействия КАК СрокДействия
|ПОМЕСТИТЬ УчастникиГруппДоступа
|ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа
| ЛЕВОЕ СОЕДИНЕНИЕ ИзмененияСоставов КАК ИзмененияСоставовГрупп
| ПО (ИзмененияСоставовГрупп.ГруппаПользователей = УчастникиГруппДоступа.Пользователь)
| ЛЕВОЕ СОЕДИНЕНИЕ ИзмененияСоставов КАК ИзмененияАктивностиПользователей
| ПО (ИзмененияАктивностиПользователей.Пользователь = УчастникиГруппДоступа.Пользователь)
| И (ИзмененияАктивностиПользователей.ГруппаПользователей = &ГруппаВсеПользователи)
|ГДЕ
| (НЕ ИзмененияСоставовГрупп.ГруппаПользователей ЕСТЬ NULL
| ИЛИ НЕ ИзмененияАктивностиПользователей.Пользователь ЕСТЬ NULL)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчастникиГруппДоступа.ГруппаДоступа КАК ГруппаДоступа,
| УчастникиГруппДоступа.Участник КАК Участник,
| УчастникиГруппДоступа.СрокДействия КАК СрокДействия
|ИЗ
| УчастникиГруппДоступа КАК УчастникиГруппДоступа
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ГруппыДоступа.Ссылка КАК ГруппаДоступа,
| ПРЕДСТАВЛЕНИЕ(ГруппыДоступа.Ссылка) КАК Представление,
| ГруппыДоступа.ПометкаУдаления КАК ПометкаУдаления,
| ГруппыДоступа.Профиль КАК Профиль,
| ПРЕДСТАВЛЕНИЕ(ГруппыДоступа.Профиль) КАК ПредставлениеПрофиля,
| ЕСТЬNULL(ГруппыДоступа.Профиль.ПометкаУдаления, ИСТИНА) КАК ПометкаУдаленияПрофиля
|ИЗ
| Справочник.ГруппыДоступа КАК ГруппыДоступа
|ГДЕ
| ГруппыДоступа.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| УчастникиГруппДоступа.ГруппаДоступа
| ИЗ
| УчастникиГруппДоступа КАК УчастникиГруппДоступа)";
КонецФункции
// Процедуры и функции подсистемы ЦентрМониторинга. // Процедуры и функции подсистемы ЦентрМониторинга.
// Возвращает текст запроса для сбора статистической информации об использовании профилей групп доступа и ролей. // Возвращает текст запроса для сбора статистической информации об использовании профилей групп доступа и ролей.
@@ -3372,14 +3483,14 @@
// //
Процедура ОбновитьГруппыЗначенийДоступаПередЗаписью(Знач Источник, Отказ) Экспорт Процедура ОбновитьГруппыЗначенийДоступаПередЗаписью(Знач Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда // АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Возврат;
КонецЕсли;
Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
Или Не Источник.ОбменДанными.Загрузка Тогда
Если Источник.ЭтоНовый() Если Источник.ЭтоНовый()
И ОбщегоНазначения.ИнформационнаяБазаФайловая() И ОбщегоНазначения.ИнформационнаяБазаФайловая()
И Не ПропуститьПроверкуДоступа(Отказ, Источник) Тогда И Не ПропуститьПроверкуДоступа(Отказ, Источник) Тогда
@@ -3390,17 +3501,38 @@
КонецЕсли; КонецЕсли;
СвойстваВидовДоступа = СвойстваВидовДоступа(); СвойстваВидовДоступа = СвойстваВидовДоступа();
ЗначенияДоступаСГруппами = СвойстваВидовДоступа.ЗначенияДоступаСГруппами; СтарыеЗначения = Новый Структура;
Если ЗначенияДоступаСГруппами.ПоТипамДляОбновления.Получить(ТипЗнч(Источник)) <> Неопределено Тогда
РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыЗначенийДоступа(Источник);
КонецЕсли;
Если СвойстваВидовДоступа.ПоТипамЗначенийСИерархией.Получить(ТипЗнч(Источник)) <> Неопределено Тогда Если СвойстваВидовДоступа.ПоТипамЗначенийСИерархией.Получить(ТипЗнч(Источник)) <> Неопределено Тогда
Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Родитель"); СтарыеЗначения.Вставить("Родитель", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Родитель"));
Если Источник.Родитель <> Родитель Тогда
Источник.ДополнительныеСвойства.Вставить("ОбновитьЗначенияГруппДоступа");
КонецЕсли; КонецЕсли;
Свойства = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипамДляОбновления.Получить(ТипЗнч(Источник));
Если Свойства <> Неопределено
И Свойства.ТипГруппЗначений <> Тип("Неопределено")
И ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
ИмяПоля = ?(Свойства.НесколькоГруппЗначений, "ГруппыДоступа", "ГруппаДоступа");
Попытка
ЗначениеПоля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, ИмяПоля);
Исключение
ИменаТаблиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Источник.Метаданные().ПолноеИмя());
ПоТипамСсылокДляОбновления = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипамСсылокДляОбновления;
РегистрыСведений.ГруппыЗначенийДоступа.ПроверитьМетаданныеТаблиц(ИменаТаблиц, ПоТипамСсылокДляОбновления);
ВызватьИсключение;
КонецПопытки;
СтарыеЗначения.Вставить(ИмяПоля, ЗначениеПоля);
КонецЕсли;
Если ЗначениеЗаполнено(СтарыеЗначения) Тогда
Источник.ДополнительныеСвойства.Вставить("УправлениеДоступомСтарыеЗначения", СтарыеЗначения);
КонецЕсли;
КонецЕсли;
// АПК:75-вкл
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Свойства <> Неопределено Тогда
РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыЗначенийДоступа(Источник);
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -3412,11 +3544,33 @@
// //
Процедура ОбновитьГруппыЗначенийДоступаПриЗаписи(Источник) Экспорт Процедура ОбновитьГруппыЗначенийДоступаПриЗаписи(Источник) Экспорт
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда
Возврат;
КонецЕсли;
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
И Источник.ДополнительныеСвойства.Свойство("УправлениеДоступомСтарыеЗначения") Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеРазрешенныхЗначений(Источник,
Источник.ДополнительныеСвойства.УправлениеДоступомСтарыеЗначения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
// АПК:75-вкл
Если Источник.ОбменДанными.Загрузка Тогда Если Источник.ОбменДанными.Загрузка Тогда
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если Источник.ДополнительныеСвойства.Свойство("ОбновитьЗначенияГруппДоступа") Тогда Если Источник.ДополнительныеСвойства.Свойство("УправлениеДоступомСтарыеЗначения")
И Источник.ДополнительныеСвойства.УправлениеДоступомСтарыеЗначения.Свойство("Родитель")
И Источник.Родитель <> Источник.ДополнительныеСвойства.УправлениеДоступомСтарыеЗначения.Родитель Тогда
ГруппыДоступа = ГруппыДоступаИспользующиеИерархиюЗначенийДоступа(ТипЗнч(Источник.Ссылка)); ГруппыДоступа = ГруппыДоступаИспользующиеИерархиюЗначенийДоступа(ТипЗнч(Источник.Ссылка));
РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(ГруппыДоступа); РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(ГруппыДоступа);
КонецЕсли; КонецЕсли;
@@ -3837,7 +3991,8 @@
|ИЗ |ИЗ
| РегистрСведений.ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа | РегистрСведений.ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа
|ГДЕ |ГДЕ
| ИспользуемыеВидыДоступа.ТипЗначенийДоступа = &ТипЗначенийДоступа"; | ИспользуемыеВидыДоступа.ТипЗначенийДоступа = &ТипЗначенийДоступа
| И ИспользуемыеВидыДоступа.Используется = ИСТИНА";
УстановитьОтключениеБезопасногоРежима(Истина); УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
@@ -3851,16 +4006,20 @@
КонецФункции КонецФункции
// Параметры:
// БезУчетаОграниченияДоступа - Булево
//
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие из КлючИЗначение: // Соответствие из КлючИЗначение:
// * Ключ - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа вида доступа. // * Ключ - ОпределяемыйТип.ЗначениеДоступа - пустая ссылка основного типа вида доступа.
// * Значение - Булево - значение Истина. // * Значение - Булево - значение Истина.
// //
Функция ИспользуемыеВидыДоступа() Экспорт Функция ИспользуемыеВидыДоступа(БезУчетаОграниченияДоступа = Ложь) Экспорт
Результат = Новый Соответствие; Результат = Новый Соответствие;
Если Не УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда Если Не БезУчетаОграниченияДоступа
И Не УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда
Возврат Результат; Возврат Результат;
КонецЕсли; КонецЕсли;
@@ -3869,7 +4028,9 @@
"ВЫБРАТЬ "ВЫБРАТЬ
| ИспользуемыеВидыДоступа.ТипЗначенийДоступа КАК ТипЗначенийДоступа | ИспользуемыеВидыДоступа.ТипЗначенийДоступа КАК ТипЗначенийДоступа
|ИЗ |ИЗ
| РегистрСведений.ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа"; | РегистрСведений.ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа
|ГДЕ
| ИспользуемыеВидыДоступа.Используется = ИСТИНА";
УстановитьОтключениеБезопасногоРежима(Истина); УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
@@ -5215,6 +5376,7 @@
РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистраПоИзменениямКонфигурации(); РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистраПоИзменениямКонфигурации();
// Параметр "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа". // Параметр "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа".
РегистрыСведений.ИспользуемыеВидыДоступа.ОбновитьДанныеРегистра();
ОбновитьГруппыИНаборыЗначенийДоступаПриИзмененииТиповГруппИЗначений(); ОбновитьГруппыИНаборыЗначенийДоступаПриИзмененииТиповГруппИЗначений();
// Параметр "СтандартныеПодсистемы.УправлениеДоступом.ВозможныеПраваДляНастройкиПравОбъектов". // Параметр "СтандартныеПодсистемы.УправлениеДоступом.ВозможныеПраваДляНастройкиПравОбъектов".
@@ -22919,33 +23081,47 @@
Если Условие.Узел = "ЧтениеОбъектаРазрешено" Если Условие.Узел = "ЧтениеОбъектаРазрешено"
Или Условие.Узел = "ИзменениеОбъектаРазрешено" Тогда Или Условие.Узел = "ИзменениеОбъектаРазрешено" Тогда
Результат = Новый Соответствие; Результат = "Ложь";
ПроверятьПравоИзменение = Условие.Узел <> "ЧтениеОбъектаРазрешено"; ПроверятьПравоИзменение = Условие.Узел <> "ЧтениеОбъектаРазрешено";
ПравоИзменение = ПраваНаВедущийКлючДоступа.Получить(Контекст.ПустаяГруппаДоступа);
Если ПравоИзменение <> Неопределено
И (Не ПроверятьПравоИзменение Или ПравоИзменение) Тогда
Результат = "Истина";
Иначе
ПравоИзменение = ПраваНаВедущийКлючДоступа.Получить(Контекст.ГруппаДоступа);
Если ПравоИзменение <> Неопределено
И (Не ПроверятьПравоИзменение Или ПравоИзменение) Тогда
Результат = "Истина";
КонецЕсли;
КонецЕсли;
Если Результат <> "Истина" Тогда
Результат = Новый Соответствие;
Для Каждого КлючИЗначение Из ПраваНаВедущийКлючДоступа Цикл Для Каждого КлючИЗначение Из ПраваНаВедущийКлючДоступа Цикл
Если ПроверятьПравоИзменение И Не КлючИЗначение.Значение Тогда Если ПроверятьПравоИзменение И Не КлючИЗначение.Значение Тогда
Продолжить; Продолжить;
КонецЕсли; КонецЕсли;
Если ТипЗнч(КлючИЗначение.Ключ) <> Контекст.ТипГруппыДоступа Тогда ЗначениеКлюча = КлючИЗначение.Ключ;
Результат.Вставить(КлючИЗначение.Ключ, Истина); ТипКлюча = ТипЗнч(ЗначениеКлюча);
Если ТипКлюча = Контекст.ТипГруппыДоступа Тогда
ИначеЕсли КлючИЗначение.Ключ = Контекст.ГруппаДоступа Тогда Продолжить;
УчастникиГруппыДоступа = Контекст.УчастникиГруппДоступа.Получить( КонецЕсли;
Контекст.ГруппаДоступа); ТекущийРезультат = "Ложь";
Если УчастникиГруппыДоступа <> Неопределено Тогда Если ТипКлюча = Контекст.ТипПользователя Тогда
Если Результат.Количество() = 0 Тогда ЗаполнитьРезультатДляПользователя(ТекущийРезультат, ЗначениеКлюча, Контекст);
Результат = Новый Соответствие( ИначеЕсли ТипКлюча = Контекст.ТипГруппыПользователей Тогда
Новый ФиксированноеСоответствие(УчастникиГруппыДоступа)); ЗаполнитьРезультатДляГруппыПользователей(ТекущийРезультат, ЗначениеКлюча, Контекст);
Иначе КонецЕсли;
Для Каждого ОписаниеУчастника Из УчастникиГруппыДоступа Цикл Если ТекущийРезультат = "Ложь" Тогда
Продолжить;
КонецЕсли;
Для Каждого ОписаниеУчастника Из ТекущийРезультат Цикл
Результат.Вставить(ОписаниеУчастника.Ключ, Истина); Результат.Вставить(ОписаниеУчастника.Ключ, Истина);
КонецЦикла; КонецЦикла;
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючИЗначение.Ключ = Контекст.ПустаяГруппаДоступа Тогда
Результат = "Истина";
Прервать;
КонецЕсли;
КонецЦикла; КонецЦикла;
Если Результат.Количество() = 0 Тогда
Результат = "Ложь";
КонецЕсли;
КонецЕсли;
Иначе Иначе
Результат = "Ложь"; Результат = "Ложь";
КонецЕсли; КонецЕсли;
@@ -22994,16 +23170,7 @@
Или Условие.Узел = "ИзменениеСпискаРазрешено" И ПравоИзменение = Истина Или Условие.Узел = "ИзменениеСпискаРазрешено" И ПравоИзменение = Истина
Или Условие.Узел = "ИзменениеОбъектаРазрешено" И ПравоИзменение = Истина Тогда Или Условие.Узел = "ИзменениеОбъектаРазрешено" И ПравоИзменение = Истина Тогда
Если Контекст.РассчитыватьПраваПользователей Тогда
УчастникиГруппыДоступа = Контекст.УчастникиГруппДоступа.Получить(Контекст.ГруппаДоступа);
Если УчастникиГруппыДоступа <> Неопределено Тогда
Результат = Новый Соответствие(Новый ФиксированноеСоответствие(УчастникиГруппыДоступа));
Иначе
Результат = "Ложь";
КонецЕсли;
Иначе
Результат = "Истина"; Результат = "Истина";
КонецЕсли;
Иначе Иначе
Результат = "Ложь"; Результат = "Ложь";
КонецЕсли; КонецЕсли;
@@ -24675,7 +24842,8 @@
|ИЗ |ИЗ
| РегистрСведений.ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа | РегистрСведений.ИспользуемыеВидыДоступа КАК ИспользуемыеВидыДоступа
|ГДЕ |ГДЕ
| &ОграничиватьДоступНаУровнеЗаписей | ИспользуемыеВидыДоступа.Используется = ИСТИНА
| И &ОграничиватьДоступНаУровнеЗаписей
| |
|УПОРЯДОЧИТЬ ПО |УПОРЯДОЧИТЬ ПО
| ТипЗначенийДоступа | ТипЗначенийДоступа
@@ -26178,8 +26346,9 @@
Процедура ЗапланироватьОбновлениеДоступаПриИзмененииПараметров(СтараяВерсия, Параметры) Процедура ЗапланироватьОбновлениеДоступаПриИзмененииПараметров(СтараяВерсия, Параметры)
НедоступныеСписки = Новый Массив; НедоступныеСписки = Новый Массив;
СтараяВерсияСтруктурыКэша = "0";
Списки = СпискиСИзменениемВерсий(СтараяВерсия, Списки = СпискиСИзменениемВерсий(СтараяВерсия,
Параметры.ВерсииОграниченийСписков, НедоступныеСписки); Параметры.ВерсииОграниченийСписков, НедоступныеСписки, СтараяВерсияСтруктурыКэша);
ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа(); ПараметрыПланирования = ПараметрыПланированияОбновленияДоступа();
ПараметрыПланирования.ВерсииОграниченийСписков = Параметры.ВерсииОграниченийСписков; ПараметрыПланирования.ВерсииОграниченийСписков = Параметры.ВерсииОграниченийСписков;
@@ -26211,6 +26380,15 @@
ПараметрыПланирования); ПараметрыПланирования);
КонецЕсли; КонецЕсли;
Если Списки = Неопределено
Или СтараяВерсияСтруктурыКэша = ВерсияСтруктурыКэша() Тогда
Возврат;
КонецЕсли;
РегистрыСведений.ПараметрыОграниченияДоступа.ПриИзмененииВерсииСтруктурыКэша(
СтараяВерсияСтруктурыКэша,
Параметры.ХранимыеПараметры.ДляЗаписиОбъектовИПроверкиПрав.Получить());
КонецПроцедуры КонецПроцедуры
// Для процедуры ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений и // Для процедуры ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений и
@@ -26367,7 +26545,8 @@
КонецПроцедуры КонецПроцедуры
// Для функции НоваяВерсияПараметровОграниченияДоступа. // Для функции НоваяВерсияПараметровОграниченияДоступа.
Функция СпискиСИзменениемВерсий(Версия, НовыеВерсииОграниченийСписков, НедоступныеСписки) Функция СпискиСИзменениемВерсий(Версия, НовыеВерсииОграниченийСписков, НедоступныеСписки,
СтараяВерсияСтруктурыКэша)
Если Не ЗначениеЗаполнено(Версия) Тогда Если Не ЗначениеЗаполнено(Версия) Тогда
Возврат Неопределено; Возврат Неопределено;
@@ -26387,6 +26566,10 @@
Возврат Неопределено; Возврат Неопределено;
КонецЕсли; КонецЕсли;
Свойства = Новый Структура("ВерсияСтруктурыКэша", СтараяВерсияСтруктурыКэша);
ЗаполнитьЗначенияСвойств(Свойства, ПараметрыЗаписи);
СтараяВерсияСтруктурыКэша = Свойства.ВерсияСтруктурыКэша;
Таблица = Новый ТаблицаЗначений; Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("Список", Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка")); Таблица.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка"));
@@ -26486,11 +26669,11 @@
// Возвращаемое значение: // Возвращаемое значение:
// Строка // Строка
// //
Функция ВерсияСтруктурыКэша() Функция ВерсияСтруктурыКэша() Экспорт
// Число нужно увеличивать при внесении изменений в состав параметров кэша // Число нужно увеличивать при внесении изменений в состав параметров кэша
// (в том числе при изменении версии шаблонов). // (в том числе при изменении версии шаблонов).
Возврат "25" + ВерсияПеревода(); Возврат "27" + ВерсияПеревода();
КонецФункции КонецФункции
@@ -27261,7 +27444,6 @@
ТаблицаСвойств.Колонки.Добавить("Обработан", Новый ОписаниеТипов("Булево")); ТаблицаСвойств.Колонки.Добавить("Обработан", Новый ОписаниеТипов("Булево"));
ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуВозможно", Новый ОписаниеТипов("Булево")); ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуВозможно", Новый ОписаниеТипов("Булево"));
ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуВключено", Новый ОписаниеТипов("Булево")); ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуВключено", Новый ОписаниеТипов("Булево"));
ТаблицаСвойств.Колонки.Добавить("ОграничениеПоВладельцуОтключено", Новый ОписаниеТипов("Булево"));
ТаблицаСвойств.Колонки.Добавить("КлючиДоступаПользователей", Новый ОписаниеТипов("Булево")); ТаблицаСвойств.Колонки.Добавить("КлючиДоступаПользователей", Новый ОписаниеТипов("Булево"));
ТаблицаСвойств.Колонки.Добавить("ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа", Новый ОписаниеТипов("Булево")); ТаблицаСвойств.Колонки.Добавить("ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа", Новый ОписаниеТипов("Булево"));
ТаблицаСвойств.Колонки.Добавить("ЗависимыеСпискиБезЗаписиКлючейДоступа", Новый ОписаниеТипов("Соответствие")); ТаблицаСвойств.Колонки.Добавить("ЗависимыеСпискиБезЗаписиКлючейДоступа", Новый ОписаниеТипов("Соответствие"));
@@ -27408,7 +27590,8 @@
"РассчитыватьПраваПользователей", Истина, Контекст); "РассчитыватьПраваПользователей", Истина, Контекст);
КонецЕсли; КонецЕсли;
СвойстваСписка.КлючиДоступаПользователей = Истина; СвойстваСписка.КлючиДоступаПользователей = Истина;
Если КлючиДоступаГруппДоступа Тогда Если СвойстваСписка.ОграничениеПоВладельцуВключено
И КлючиДоступаГруппДоступа Тогда
СвойстваСписка.КлючиДоступаПользователейИГруппДоступа = Истина; СвойстваСписка.КлючиДоступаПользователейИГруппДоступа = Истина;
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
@@ -27514,7 +27697,6 @@
// * Обработан - Булево // * Обработан - Булево
// * ОграничениеПоВладельцуВозможно - Булево // * ОграничениеПоВладельцуВозможно - Булево
// * ОграничениеПоВладельцуВключено - Булево // * ОграничениеПоВладельцуВключено - Булево
// * ОграничениеПоВладельцуОтключено - Булево
// * КлючиДоступаПользователей - Булево // * КлючиДоступаПользователей - Булево
// * ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа - Булево // * ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа - Булево
// * КлючиДоступаПользователейИГруппДоступа - Булево // * КлючиДоступаПользователейИГруппДоступа - Булево
@@ -27608,7 +27790,7 @@
СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено = СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено =
СвойстваЗависимогоСписка.ОграничениеПоВладельцуВозможно СвойстваЗависимогоСписка.ОграничениеПоВладельцуВозможно
И Не СвойстваЗависимогоСписка.ОграничениеПоВладельцуОтключено; И Не СвойстваЗависимогоСписка.Параметры.ПолеВладельца.Отключено;
ЗависимыйСписокСОптимизацией = СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено; ЗависимыйСписокСОптимизацией = СвойстваЗависимогоСписка.ОграничениеПоВладельцуВключено;
@@ -27641,7 +27823,7 @@
ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, КонтекстОшибки); ТекстОшибки = ТекстОшибкиСЗаголовком(ТекстОшибки, КонтекстОшибки);
ВызватьИсключение ТекстОшибки; ВызватьИсключение ТекстОшибки;
Иначе Иначе
СвойстваВедущегоСписка.ОграничениеПоВладельцуОтключено = Истина; СвойстваВедущегоСписка.ОграничениеПоВладельцуВключено = Ложь;
СвойстваВедущегоСписка.Параметры.ПолеВладельца.Отключено = Истина; СвойстваВедущегоСписка.Параметры.ПолеВладельца.Отключено = Истина;
УстановитьСвойствоОграничения(СвойстваВедущегоСписка.ПолноеИмя, УстановитьСвойствоОграничения(СвойстваВедущегоСписка.ПолноеИмя,
"ПолеВладельца", СвойстваВедущегоСписка.Параметры.ПолеВладельца, Контекст); "ПолеВладельца", СвойстваВедущегоСписка.Параметры.ПолеВладельца, Контекст);
@@ -28950,7 +29132,7 @@
// * ОграничениеДоступаВключено - Булево // * ОграничениеДоступаВключено - Булево
// * ИспользуемыеТипыЗначений - ХранилищеЗначения - смотри функцию ИспользуемыеТипыЗначений. // * ИспользуемыеТипыЗначений - ХранилищеЗначения - смотри функцию ИспользуемыеТипыЗначений.
// //
Функция НоваяСтруктураХранимыхПараметровЗаписи() Функция НоваяСтруктураХранимыхПараметровЗаписи() Экспорт
ХранимыеПараметрыЗаписи = Новый Структура; ХранимыеПараметрыЗаписи = Новый Структура;
ХранимыеПараметрыЗаписи.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша()); ХранимыеПараметрыЗаписи.Вставить("ВерсияСтруктурыКэша", ВерсияСтруктурыКэша());
@@ -241,15 +241,12 @@
Элементы.ТипыВидовДоступа.ТекущаяСтраница = Элементы.ОбычныйВидДоступа; Элементы.ТипыВидовДоступа.ТекущаяСтраница = Элементы.ОбычныйВидДоступа;
КонецЕсли; КонецЕсли;
Если ТекущиеДанные.ВидДоступа = Форма.ВидДоступаПользователи Тогда Если ТекущиеДанные.ВидДоступа = Форма.ВидДоступаПользователи
ШаблонНадписи = ?(ТекущиеДанные.ВсеРазрешены, Или ТекущиеДанные.ВидДоступа = Форма.ВидДоступаВнешниеПользователи Тогда
НСтр("ru = 'Запрещенные значения (%1) - текущий пользователь всегда разрешен'"),
НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") );
ИначеЕсли ТекущиеДанные.ВидДоступа = Форма.ВидДоступаВнешниеПользователи Тогда
ШаблонНадписи = ?(ТекущиеДанные.ВсеРазрешены, ШаблонНадписи = ?(ТекущиеДанные.ВсеРазрешены,
НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), НСтр("ru = 'Запрещенные значения (%1) - авторизованный пользователь и его группы всегда разрешены'"),
НСтр("ru = 'Разрешенные значения (%1) - текущий внешний пользователь всегда разрешен'") ); НСтр("ru = 'Разрешенные значения (%1) - авторизованный пользователь и его группы всегда разрешены'") );
Иначе Иначе
ШаблонНадписи = ?(ТекущиеДанные.ВсеРазрешены, ШаблонНадписи = ?(ТекущиеДанные.ВсеРазрешены,
НСтр("ru = 'Запрещенные значения (%1)'"), НСтр("ru = 'Запрещенные значения (%1)'"),
@@ -22,6 +22,13 @@
КонецФункции КонецФункции
// См. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа
Функция ПредставлениеВидовДоступа() Экспорт
Возврат УправлениеДоступомСлужебный.ПредставлениеВидовДоступа();
КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
@@ -63,13 +70,6 @@
КонецФункции КонецФункции
// См. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа
Функция ПредставлениеВидовДоступа() Экспорт
Возврат УправлениеДоступомСлужебный.ПредставлениеВидовДоступа();
КонецФункции
// Только для внутреннего использования. // Только для внутреннего использования.
// //
// Возвращаемое значение: // Возвращаемое значение:
@@ -3701,8 +3701,6 @@
Процедура УстановитьНастройкиКомандПечати(КомандыПечати, Владелец) Процедура УстановитьНастройкиКомандПечати(КомандыПечати, Владелец)
УстановитьПривилегированныйРежим(Истина);
ТекстЗапроса = ТекстЗапроса =
"ВЫБРАТЬ "ВЫБРАТЬ
| НастройкиКомандПечати.УникальныйИдентификатор КАК УникальныйИдентификатор | НастройкиКомандПечати.УникальныйИдентификатор КАК УникальныйИдентификатор
@@ -1465,8 +1465,8 @@
ВложенноеУсловие.УзелДереваДокумента = УзелСУсловием; ВложенноеУсловие.УзелДереваДокумента = УзелСУсловием;
ВложенноеУсловие.УсловиеОбласти = УсловиеОбласти; ВложенноеУсловие.УсловиеОбласти = УсловиеОбласти;
ВложенноеУсловие.Индекс = ИндексУзла; ВложенноеУсловие.Индекс = ИндексУзла;
КонецЕсли;
ДобавлятьУсловныеОбласти = Ложь; ДобавлятьУсловныеОбласти = Ложь;
КонецЕсли;
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
@@ -3024,7 +3024,26 @@
Представление = Формат(Значение, "Л=" + КодЯзыка); Представление = Формат(Значение, "Л=" + КодЯзыка);
КонецЕсли; КонецЕсли;
Иначе Иначе
ОбъектМетаданных = Значение.Метаданные();
ЕстьРеквизитНаименование = Метаданные.Справочники.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСправочника.ВВидеНаименования
Или Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеВидаРасчета.ВВидеНаименования
Или Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеВидаХарактеристики.ВВидеНаименования
Или Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСчета.ВВидеНаименования
Или Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеПланаОбмена.ВВидеНаименования
Или Метаданные.Задачи.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеЗадачи.ВВидеНаименования;
Если ЕстьРеквизитНаименование Тогда
Представление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Значение, "Наименование", , КодЯзыка); Представление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Значение, "Наименование", , КодЯзыка);
Иначе
Представление = Строка(Значение);
КонецЕсли;
КонецЕсли; КонецЕсли;
Возврат Представление; Возврат Представление;
@@ -117,7 +117,7 @@
Позиция = ИнформацияПоКолонкам.Количество() + 1; Позиция = ИнформацияПоКолонкам.Количество() + 1;
Свойства = УправлениеСвойствами.СвойстваОбъекта(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка()); Свойства = УправлениеСвойствами.СвойстваОбъекта(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка());
ЗначенияСвойств = ДополнительныеЗначенияСвойства(Свойства); ЗначенияСвойств = ДополнительныеЗначенияСвойств(Свойства);
СоответствиеЗначений = Новый Соответствие; СоответствиеЗначений = Новый Соответствие;
Для Каждого ДополнительноеЗначение Из ЗначенияСвойств Цикл Для Каждого ДополнительноеЗначение Из ЗначенияСвойств Цикл
Значение = СоответствиеЗначений[ДополнительноеЗначение.Свойство]; Значение = СоответствиеЗначений[ДополнительноеЗначение.Свойство];
@@ -1752,13 +1752,38 @@
// Параметры: // Параметры:
// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство для // Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство для
// которого нужно получить перечисляемые значения. // которого нужно получить перечисляемые значения.
// - Массив
// //
// Возвращаемое значение: // Возвращаемое значение:
// Массив из СправочникСсылка - значения свойства, если есть. // Массив из СправочникСсылка - значения свойства, если есть.
// //
Функция ДополнительныеЗначенияСвойства(Свойство) Экспорт Функция ДополнительныеЗначенияСвойства(Свойство) Экспорт
ИмяПроцедуры = "УправлениеСвойствамиСлужебный.ДополнительныеЗначенияСвойства";
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Свойство", Свойство,
Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
ЗначенияСвойств = ДополнительныеЗначенияСвойств(Свойство);
Результат = ЗначенияСвойств.ВыгрузитьКолонку("Ссылка");
Возврат Результат;
КонецФункции
// Возвращает таблицу перечисляемых значений указанного свойства.
//
// Параметры:
// Свойство - Массив из ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойства для
// которого нужно получить перечисляемые значения.
// - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Ссылка - СправочникСсылка.ЗначенияСвойствОбъектовИерархия
// - СправочникСсылка.ЗначенияСвойствОбъектов
// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
//
Функция ДополнительныеЗначенияСвойств(Свойство) Экспорт
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.Параметры.Вставить("Свойство", Свойство); Запрос.Параметры.Вставить("Свойство", Свойство);
Запрос.Текст = Запрос.Текст =
@@ -1780,11 +1805,7 @@
|ГДЕ |ГДЕ
| ЗначенияСвойствОбъектов.Владелец В (&Свойство)"; | ЗначенияСвойствОбъектов.Владелец В (&Свойство)";
Если ТипЗнч(Свойство) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Иначе
Результат = Запрос.Выполнить().Выгрузить(); Результат = Запрос.Выполнить().Выгрузить();
КонецЕсли;
Возврат Результат; Возврат Результат;
@@ -586,6 +586,15 @@
// // Простой запуск // // Простой запуск
// ФайловаяСистемаКлиент.ЗапуститьПрограмму("calc"); // ФайловаяСистемаКлиент.ЗапуститьПрограмму("calc");
// //
// Пример:
// // Передача аргументов в виде массива:
// // Для выполнения Setup.exe -args "PIDKEY =***":
// КомандаЗапуска = Новый Массив;
// КомандаЗапуска.Добавить("Setup.exe");
// КомандаЗапуска.Добавить("- args");
// КомандаЗапуска.Добавить("PIDKEY =***");
// ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска);
//
// // Запуск с ожиданием завершения и получения кода возврата: // // Запуск с ожиданием завершения и получения кода возврата:
// ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы(); // ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы();
// ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина; // ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
@@ -979,6 +988,7 @@
| |
|Для этого откройте терминал и введите: |Для этого откройте терминал и введите:
|%2 |%2
|
|Или обратитесь к администратору.'"), |Или обратитесь к администратору.'"),
"https://docs.moodle.org/404/en/Universal_Office_Converter_%28unoconv%29", "https://docs.moodle.org/404/en/Universal_Office_Converter_%28unoconv%29",
"sudo apt update "sudo apt update
@@ -1056,11 +1066,11 @@
Результат.ОписаниеОшибки + Символы.ПС, "") + Результат.ПотокОшибок); Результат.ОписаниеОшибки + Символы.ПС, "") + Результат.ПотокОшибок);
Рекомендация = ""; Рекомендация = "";
Если СтрНайти(ОписаниеОшибки, "no default destination available") > 0 Тогда Если СтрНайти(НРег(ОписаниеОшибки), "no default destination") > 0 Тогда
Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Задайте принтер по умолчанию: НСтр("ru = 'Задайте принтер по умолчанию:
|- Введите в терминале ""%1"" и выберите из списка нужный принтер. |• Введите в терминале ""%1"" и выберите из списка нужный принтер.
|- Затем введите в терминале: %2 ""имя нужного принтера"". |• Затем введите в терминале: %2 ""имя нужного принтера"".
|Или обратитесь к администратору.'"), |Или обратитесь к администратору.'"),
"lpstat -p -d", "lpstat -p -d",
"lpoptions -d"); "lpoptions -d");
@@ -312,7 +312,7 @@
Функция ЕстьДоступныеШаблоны(ТипШаблона, Предмет = Неопределено) Экспорт Функция ЕстьДоступныеШаблоны(ТипШаблона, Предмет = Неопределено) Экспорт
Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ШаблоныСообщений) Тогда Если Не ЕстьПравоЧтенияШаблоновСообщений() Тогда
Возврат Ложь; Возврат Ложь;
КонецЕсли; КонецЕсли;
@@ -320,6 +320,7 @@
Возврат НЕ Запрос.Выполнить().Пустой(); Возврат НЕ Запрос.Выполнить().Пустой();
КонецФункции КонецФункции
// Возвращает список объектов метаданных к которым подключена подсистема Шаблоны сообщений. // Возвращает список объектов метаданных к которым подключена подсистема Шаблоны сообщений.
// //
// Возвращаемое значение: // Возвращаемое значение:
@@ -442,6 +443,13 @@
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
Если Не ЕстьПравоЧтенияШаблоновСообщений() Тогда
Возврат;
КонецЕсли;
ДоступныеВарианты = ДоступныеВариантыОтправкиШаблоновСообщений();
Если ДоступныеВарианты.Почта Тогда
Команда = Команды.Добавить(); Команда = Команды.Добавить();
Команда.Вид = "Отправить"; Команда.Вид = "Отправить";
Команда.Представление = НСтр("ru = 'Почта'"); Команда.Представление = НСтр("ru = 'Почта'");
@@ -451,7 +459,9 @@
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип; Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип;
Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьПисьмо"; Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьПисьмо";
Команда.МножественныйВыбор = Ложь; Команда.МножественныйВыбор = Ложь;
КонецЕсли;
Если ДоступныеВарианты.SMS Тогда
Команда = Команды.Добавить(); Команда = Команды.Добавить();
Команда.Вид = "Отправить"; Команда.Вид = "Отправить";
Команда.Представление = НСтр("ru = 'SMS'"); Команда.Представление = НСтр("ru = 'SMS'");
@@ -460,6 +470,7 @@
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип; Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип;
Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьSMS"; Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьSMS";
Команда.МножественныйВыбор = Ложь; Команда.МножественныйВыбор = Ложь;
КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -474,6 +485,20 @@
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
// Возвращает сведения о доступных вариантах отправки шаблонов сообщений.
//
// Возвращаемое значение:
// ФиксированнаяСтруктура:
// * SMS - Булево - если Истина, то можно формировать SMS сообщение по шаблонам.
// * Почта - Булево - если Истина, то можно создавать письма по шаблонам.
//
Функция ДоступныеВариантыОтправкиШаблоновСообщений() Экспорт
Возврат ШаблоныСообщенийСлужебныйПовтИсп.ДоступныеВариантыОтправкиШаблоновСообщений();
КонецФункции
// Возвращает сведения об сформированном исходящем письме. // Возвращает сведения об сформированном исходящем письме.
// //
// Возвращаемое значение: // Возвращаемое значение:
@@ -1039,8 +1064,13 @@
Функция ВидыШаблонов() Экспорт Функция ВидыШаблонов() Экспорт
ТипыШаблонов = Новый СписокЗначений; ТипыШаблонов = Новый СписокЗначений;
ДоступныеВарианты = ДоступныеВариантыОтправкиШаблоновСообщений();
Если ДоступныеВарианты.Почта Тогда
ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем(), НСтр("ru = 'Электронного письма'")); ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем(), НСтр("ru = 'Электронного письма'"));
КонецЕсли;
Если ДоступныеВарианты.SMS Тогда
ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS(), НСтр("ru = 'Сообщения SMS'")); ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS(), НСтр("ru = 'Сообщения SMS'"));
КонецЕсли;
Возврат ТипыШаблонов; Возврат ТипыШаблонов;
@@ -3038,6 +3068,12 @@
КонецФункции КонецФункции
Функция ЕстьПравоЧтенияШаблоновСообщений()
Возврат ПравоДоступа("Чтение", Метаданные.Справочники.ШаблоныСообщений);
КонецФункции
Процедура ОбработатьДанныеДляПереходаНаПодключаемыеКоманды() Экспорт Процедура ОбработатьДанныеДляПереходаНаПодключаемыеКоманды() Экспорт
ЕстьПодключаемыеКоманды = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды"); ЕстьПодключаемыеКоманды = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды");
@@ -3068,3 +3104,4 @@
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти
@@ -40,4 +40,17 @@
КонецФункции КонецФункции
Функция ДоступныеВариантыОтправкиШаблоновСообщений() Экспорт
Результат = Новый Структура;
Результат.Вставить("SMS",
ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS"));
Результат.Вставить("Почта",
ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"));
Возврат Новый ФиксированнаяСтруктура(Результат);
КонецФункции
#КонецОбласти #КонецОбласти
@@ -1170,6 +1170,7 @@
// //
// Параметры: // Параметры:
// Сертификат - СертификатКриптографии - сертификат криптографии. // Сертификат - СертификатКриптографии - сертификат криптографии.
// - ДвоичныеДанные - двоичные данные сертификата в кодировке DER.
// //
// Возвращаемое значение: // Возвращаемое значение:
// Структура: // Структура:
@@ -1189,16 +1190,20 @@
// //
Функция СвойстваСертификата(Сертификат) Экспорт Функция СвойстваСертификата(Сертификат) Экспорт
ДанныеСертификата = Сертификат;
Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда
ДвоичныеДанныеСертификата = Сертификат.Выгрузить(); ДвоичныеДанныеСертификата = Сертификат.Выгрузить();
ИначеЕсли ТипЗнч(Сертификат) = Тип("ФиксированнаяСтруктура") Тогда ИначеЕсли ТипЗнч(Сертификат) = Тип("ФиксированнаяСтруктура") Тогда
ДвоичныеДанныеСертификата = Сертификат.Сертификат; ДвоичныеДанныеСертификата = Сертификат.Сертификат;
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДвоичныеДанныеСертификата = Сертификат;
ДанныеСертификата = Новый СертификатКриптографии(Сертификат);
Иначе Иначе
ДвоичныеДанныеСертификата = Неопределено; ДвоичныеДанныеСертификата = Неопределено;
КонецЕсли; КонецЕсли;
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата( Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
Сертификат, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата); ДанныеСертификата, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата);
КонецФункции КонецФункции
@@ -1249,6 +1254,7 @@
// Усовершенствует подпись до переданного типа, если подпись позволяет. // Усовершенствует подпись до переданного типа, если подпись позволяет.
// Добавляет архивную метку времени в архивную подпись (CAdES-A). // Добавляет архивную метку времени в архивную подпись (CAdES-A).
// Возвращает только изменившиеся в процессе усовершенствования свойства подписи.
// //
// Параметры: // Параметры:
// Подпись - ДвоичныеДанные - двоичные данные электронной подписи. // Подпись - ДвоичныеДанные - двоичные данные электронной подписи.
@@ -1399,6 +1405,9 @@
СвойстваПодписи.ТипПодписи = ПараметрыПодписиКриптографии.ТипПодписи; СвойстваПодписи.ТипПодписи = ПараметрыПодписиКриптографии.ТипПодписи;
СвойстваПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени; СвойстваПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени;
СвойстваПодписи.ОписаниеСертификата = ПараметрыПодписиКриптографии.ОписаниеСертификата; СвойстваПодписи.ОписаниеСертификата = ПараметрыПодписиКриптографии.ОписаниеСертификата;
СвойстваПодписи.ДатаПодписи =
?(ЗначениеЗаполнено(ПараметрыПодписиКриптографии.НеподтвержденнаяДатаПодписи),
ПараметрыПодписиКриптографии.НеподтвержденнаяДатаПодписи, ПараметрыПодписиКриптографии.ДатаПодписиИзМетки);
Результат.СвойстваПодписи = СвойстваПодписи; Результат.СвойстваПодписи = СвойстваПодписи;
Иначе Иначе
СвойстваСертификата = СвойстваСертификата(ПараметрыПодписиКриптографии.СертификатПоследнейМеткиВремени); СвойстваСертификата = СвойстваСертификата(ПараметрыПодписиКриптографии.СертификатПоследнейМеткиВремени);
@@ -981,6 +981,8 @@
// * НеПоказыватьРезультаты - Булево - если параметр принимает значение Истина и параметр КонтекстОперации // * НеПоказыватьРезультаты - Булево - если параметр принимает значение Истина и параметр КонтекстОперации
// содержит контекст предыдущей операции, результаты проверки не будут показаны // содержит контекст предыдущей операции, результаты проверки не будут показаны
// пользователю. // пользователю.
// * ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии - по умолчанию тип, указанный в настройках,
// если передан КонтекстОперации, возвращенный процедурой Подписать, то тип берется из него.
// * Результат - Неопределено - проверка ни разу не выполнялась. // * Результат - Неопределено - проверка ни разу не выполнялась.
// - Структура - возвращаемое значение. Вставляется перед обработкой результата: // - Структура - возвращаемое значение. Вставляется перед обработкой результата:
// * ПроверкиПройдены - Булево - возвращаемое значение. Устанавливается в процедуре параметра ОбработкаРезультата. // * ПроверкиПройдены - Булево - возвращаемое значение. Устанавливается в процедуре параметра ОбработкаРезультата.
@@ -191,7 +191,6 @@
Результат = Новый Структура("АдресВнешний, АдресВнутренний"); Результат = Новый Структура("АдресВнешний, АдресВнутренний");
// Локализация
ИмяИздателя = СтрЗаменить(ИмяИздателя, " ", "_"); ИмяИздателя = СтрЗаменить(ИмяИздателя, " ", "_");
ИмяИздателя = СокрЛП(СтрСоединить(СтрРазделить(ИмяИздателя, "!*'();:@&=+$,/?%#[]\|<>", Истина), "")); ИмяИздателя = СокрЛП(СтрСоединить(СтрРазделить(ИмяИздателя, "!*'();:@&=+$,/?%#[]\|<>", Истина), ""));
@@ -201,10 +200,6 @@
Возврат Результат; Возврат Результат;
КонецЕсли; КонецЕсли;
Если ИмяИздателя <> "federalnaya_nalogovaya_sluzhba" Тогда
Возврат Результат;
КонецЕсли;
ДополнительныеСвойстваСертификата = ДополнительныеСвойстваСертификата =
ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(Сертификат, 0); ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(Сертификат, 0);
@@ -213,8 +208,16 @@
КонецЕсли; КонецЕсли;
Результат.АдресВнутренний = СтрШаблон("%1/%2", ИмяИздателя, НРег(ДополнительныеСвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра)); Результат.АдресВнутренний = СтрШаблон("%1/%2", ИмяИздателя, НРег(ДополнительныеСвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра));
// Локализация
Если ИмяИздателя <> "federalnaya_nalogovaya_sluzhba" Тогда
Возврат Результат;
КонецЕсли;
Результат.АдресВнешний = СтрШаблон("http://ca.1c.ru/crls/%1.zip", Результат.АдресВнутренний); Результат.АдресВнешний = СтрШаблон("http://ca.1c.ru/crls/%1.zip", Результат.АдресВнутренний);
// Конец локализация
// Конец Локализация
Возврат Результат; Возврат Результат;
@@ -722,8 +725,8 @@
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Причина = НСтр( РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Причина = НСтр(
"ru = 'Сертификаты юридическим лицам и индивидуальным предпринимателям выдают только государственные удостоверяющие центры.'"); "ru = 'Сертификаты юридическим лицам и индивидуальным предпринимателям выдают только государственные удостоверяющие центры.'");
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = НСтр( РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Если это тестовый сертификат, поставьте флажок <b>Разрешить подписание</b> в карточке сертификата.'"); "ru = 'Если это тестовый сертификат, поставьте флажок <b>Разрешить подписание</b> в <a href=""%1"">карточке сертификата</a>.'"), "ОткрытьСертификат");
ИначеЕсли ДатаПрекращенияДействия <> Неопределено И (НаДату >= ДатаПрекращенияДействия ИначеЕсли ДатаПрекращенияДействия <> Неопределено И (НаДату >= ДатаПрекращенияДействия
Или НаДату + 30*24*60*60 >= ДатаПрекращенияДействия И Не КонтекстПроверки.ЭтоПроверкаПодписи) Тогда Или НаДату + 30*24*60*60 >= ДатаПрекращенияДействия И Не КонтекстПроверки.ЭтоПроверкаПодписи) Тогда
@@ -856,6 +856,16 @@
Возврат Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет(ИмяМакета); Возврат Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет(ИмяМакета);
КонецФункции КонецФункции
Функция АдресаСерверовМетокВремениПоУмолчанию() Экспорт
Если Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено Тогда
Возврат Обработки["ПрограммыЭлектроннойПодписиИШифрования"].АдресаСерверовМетокВремениПоУмолчанию();
КонецЕсли;
Возврат "";
КонецФункции
#Область ПоставляемыеДанные #Область ПоставляемыеДанные
// См. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных // См. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных
@@ -1022,10 +1032,10 @@
КонецЕсли; КонецЕсли;
Обработчик = Обработчики.Добавить(); Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.9.234"; Обработчик.Версия = "3.1.10.185";
Обработчик.Комментарий = НСтр( Обработчик.Комментарий = НСтр(
"ru = 'Перенос оповещений об окончании срока действия сертификата, данных заявлений в регистры сведений, заполнение срока действия сертификата с учетом срока действия закрытого ключа.'"); "ru = 'Перенос оповещений об окончании срока действия сертификата, данных заявлений в регистры сведений, заполнение срока действия сертификата с учетом срока действия закрытого ключа, очистка некорректно выбранного приложения электронной подписи.'");
Обработчик.Идентификатор = Новый УникальныйИдентификатор("a17c1765-820e-4886-9423-ffc1267d7ff1"); Обработчик.Идентификатор = Новый УникальныйИдентификатор("a6c42e6b-4824-4f5e-a35d-aa0922b253f3");
Обработчик.Процедура = "Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ОбработатьДанныеДляПереходаНаНовуюВерсию"; Обработчик.Процедура = "Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.РежимВыполнения = "Отложенно"; Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию"; Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
@@ -2338,8 +2348,6 @@
Функция ПроверитьСертификатНаКорректностьПовторно(МенеджерКриптографииДляПроверки, СертификатДляПроверки, Функция ПроверитьСертификатНаКорректностьПовторно(МенеджерКриптографииДляПроверки, СертификатДляПроверки,
РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, ДействияДляУстранения) РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, ДействияДляУстранения)
// Локализация
ТребуетсяУстановкаСпискаОтзыва = Ложь; ТребуетсяУстановкаСпискаОтзыва = Ложь;
Если ТипЗнч(МенеджерКриптографииДляПроверки) = Тип("МенеджерКриптографии") Тогда Если ТипЗнч(МенеджерКриптографииДляПроверки) = Тип("МенеджерКриптографии") Тогда
@@ -2363,11 +2371,15 @@
АдресСпискаОтзываВнутренний.АдресВнешний, АдресСпискаОтзываВнутренний.АдресВнутренний); АдресСпискаОтзываВнутренний.АдресВнешний, АдресСпискаОтзываВнутренний.АдресВнутренний);
Исключение Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось установить список отзыва %1 при проверке сертификата: %2'"),
АдресСпискаОтзываВнутренний.АдресВнутренний, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации( ЗаписьЖурналаРегистрации(
НСтр("ru = 'Электронная подпись.Обновление списков отзыва'", НСтр("ru = 'Электронная подпись.Обновление списков отзыва'",
ОбщегоНазначения.КодОсновногоЯзыка()), ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ТекстОшибки);
Возврат Ложь; Возврат Ложь;
КонецПопытки; КонецПопытки;
@@ -2389,8 +2401,6 @@
КонецЕсли; КонецЕсли;
// Конец Локализация
Возврат Ложь; Возврат Ложь;
КонецФункции КонецФункции
@@ -3272,10 +3282,10 @@
ПодписанныйОбъектМетаданные = Неопределено; ПодписанныйОбъектМетаданные = Неопределено;
КонецЕсли; КонецЕсли;
ИмяСобытия = НСтр("ru = 'Электронная подпись.Ошибка усовершенствования подписи'", ИмяСобытия = НСтр("ru = 'Электронная подпись.Усовершенствование подписи'",
ОбщегоНазначения.КодОсновногоЯзыка()); ОбщегоНазначения.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(ИмяСобытия, ЗаписьЖурналаРегистрации(ИмяСобытия,
УровеньЖурналаРегистрации.Информация, УровеньЖурналаРегистрации.Предупреждение,
ПодписанныйОбъектМетаданные, ПодписанныйОбъектМетаданные,
ПодписанныйОбъект, ПодписанныйОбъект,
ОписаниеОшибки); ОписаниеОшибки);
@@ -6846,6 +6856,10 @@
+ Символы.ПС + ТехническаяИнформацияОКомпьютере() + Символы.ПС + ТехническаяИнформацияОКомпьютере()
+ Символы.ПС + Символы.ПС + ТехническаяИнформацияОКомпоненте() + Символы.ПС + Символы.ПС + ТехническаяИнформацияОКомпоненте()
+ Символы.ПС + ТехническаяИнформацияОПрограммах(); + Символы.ПС + ТехническаяИнформацияОПрограммах();
ТехническаяИнформация = ТехническаяИнформация
+ Символы.ПС + ЭлектроннаяПодписьСлужебныйВызовСервера.РезультатДиагностикиСерверовМетокВремени();
КонецЕсли; КонецЕсли;
ТехническаяИнформация = ТехническаяИнформация + Символы.ПС ТехническаяИнформация = ТехническаяИнформация + Символы.ПС
@@ -7107,7 +7121,7 @@
УстановитьПривилегированныйРежим(Истина); УстановитьПривилегированныйРежим(Истина);
МенеджерЗаписи = РегистрыСведений.СпискиОтзываСертификатов.СоздатьМенеджерЗаписи(); МенеджерЗаписи = РегистрыСведений.СпискиОтзываСертификатов.СоздатьМенеджерЗаписи();
Если ЗначениеЗаполнено(ДанныеИзКэша) И ДанныеИзКэша.ДатаПоследнегоИзменения = ДатаПоследнегоИзменения Тогда Если ЗначениеЗаполнено(ДанныеИзКэша) И ДанныеИзКэша.ДатаПоследнегоИзменения = ДатаПоследнегоИзменения И ДатаПоследнегоИзменения <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ДанныеИзКэша); ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ДанныеИзКэша);
ЗаполнитьРезультатЗагрузкиСпискаОтзываИзДанныхКэша(РезультатЗагрузки, ДанныеИзКэша); ЗаполнитьРезультатЗагрузкиСпискаОтзываИзДанныхКэша(РезультатЗагрузки, ДанныеИзКэша);
@@ -7194,6 +7208,10 @@
Для Каждого ТекущийАдрес Из Адреса Цикл Для Каждого ТекущийАдрес Из Адреса Цикл
Если СтрНачинаетсяС(НРег(ТекущийАдрес), "ldap://") Тогда
Продолжить;
КонецЕсли;
ПараметрыПолученияФайла = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла(); ПараметрыПолученияФайла = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПараметрыПолученияФайла();
Если ЗначениеЗаполнено(ДанныеИзКэша) Если ЗначениеЗаполнено(ДанныеИзКэша)
@@ -7465,7 +7483,8 @@
Возврат Неопределено; Возврат Неопределено;
КонецЕсли; КонецЕсли;
ДатаПоследнегоИзмененияСтрока = Заголовки["Last-Modified"]; Заголовки = СтандартныеПодсистемыСервер.HTTPЗаголовкиВНижнийРегистр(Заголовки);
ДатаПоследнегоИзмененияСтрока = Заголовки["last-modified"];
Если ДатаПоследнегоИзмененияСтрока <> Неопределено Тогда Если ДатаПоследнегоИзмененияСтрока <> Неопределено Тогда
Возврат ОбщегоНазначенияКлиентСервер.ДатаRFC1123(ДатаПоследнегоИзмененияСтрока); Возврат ОбщегоНазначенияКлиентСервер.ДатаRFC1123(ДатаПоследнегоИзмененияСтрока);
КонецЕсли; КонецЕсли;
@@ -7527,6 +7546,44 @@
КонецЕсли; КонецЕсли;
#КонецЕсли #КонецЕсли
Если ОшибкаПоКлассификатору.ДействияДляУстранения.Найти(
"ДиагностикаСерверовМетокВремениСервер") <> Неопределено Тогда
Решение.Добавить(СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru='<a href = ""%1"">Проверьте доступность</a> серверов меток времени на сервере %2.'"),
"ДиагностикаСерверовМетокВремениСервер", ИмяКомпьютера()));
КонецЕсли;
Если ОшибкаПоКлассификатору.ДействияДляУстранения.Найти(
"ДиагностикаСерверовМетокВремениКлиент") <> Неопределено Тогда
Если ОбщегоНазначения.ЭтоВебКлиент() Тогда
АдресаСерверовМетокВремени = ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени;
Массив = Новый Массив;
Для Каждого АдресСервера Из АдресаСерверовМетокВремени Цикл
СтруктураСсылки = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресСервера);
Массив.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='<a href = ""%1"">%1</a>'"), АдресСервера));
КонецЦикла;
Решение.Добавить(СтроковыеФункции.ФорматированнаяСтрока(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Проверьте доступность серверов меток времени на компьютере: %1.'"),
СтрСоединить(Массив, ", "))));
Иначе
Решение.Добавить(СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru='<a href = ""%1"">Проверьте доступность</a> серверов меток времени на компьютере.'"),
"ДиагностикаСерверовМетокВремениКлиент"));
КонецЕсли;
КонецЕсли;
Если Решение.Количество() > 0 Тогда Если Решение.Количество() > 0 Тогда
Результат.ОшибкаПоКлассификатору.Решение = Новый ФорматированнаяСтрока(Решение); Результат.ОшибкаПоКлассификатору.Решение = Новый ФорматированнаяСтрока(Решение);
КонецЕсли; КонецЕсли;
@@ -7612,8 +7669,6 @@
КонецФункции КонецФункции
// Локализация
Процедура УстановитьСписокОтзываСертификата(Сертификат, Адреса = Неопределено, АдресВнутренний = Неопределено) Экспорт Процедура УстановитьСписокОтзываСертификата(Сертификат, Адреса = Неопределено, АдресВнутренний = Неопределено) Экспорт
ОбъектКомпоненты = ОбъектВнешнейКомпонентыExtraCryptoAPI(); ОбъектКомпоненты = ОбъектВнешнейКомпонентыExtraCryptoAPI();
@@ -7667,8 +7722,6 @@
КонецПроцедуры КонецПроцедуры
// Конец Локализация
#КонецОбласти #КонецОбласти
#Область ОбновлениеИнформационнойБазы #Область ОбновлениеИнформационнойБазы
@@ -322,6 +322,27 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
Если Параметры.Операция = "Подписание" Тогда
ДвоичныеДанныеСертификата = СертификатКриптографии.Выгрузить();
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатКриптографии, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата);
СвойстваСертификата.Вставить("ДвоичныеДанные", ДвоичныеДанныеСертификата);
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанныеСертификата, Ложь, Истина);
АлгоритмСоответствует = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
СвойстваСертификата.Представление, АлгоритмСертификата, МенеджерКриптографии.АлгоритмПодписи);
Если АлгоритмСоответствует <> Истина Тогда
ОшибкаНаСервере.Вставить("ОписаниеОшибки", АлгоритмСоответствует);
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Попытка Попытка
Данные = ПолучитьИзВременногоХранилища(Параметры.ЭлементДанныхДляСервера.Данные); Данные = ПолучитьИзВременногоХранилища(Параметры.ЭлементДанныхДляСервера.Данные);
Исключение Исключение
@@ -436,11 +457,6 @@
Если Параметры.Операция = "Подписание" Тогда Если Параметры.Операция = "Подписание" Тогда
ДвоичныеДанныеСертификата = СертификатКриптографии.Выгрузить();
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии);
СвойстваСертификата.Вставить("ДвоичныеДанные", ДвоичныеДанныеСертификата);
Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии( СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии(
ДвоичныеДанныеРезультата, МенеджерКриптографии, Ложь); ДвоичныеДанныеРезультата, МенеджерКриптографии, Ложь);
@@ -1302,4 +1318,19 @@
// Конец Локализация // Конец Локализация
Функция РезультатДиагностикиСерверовМетокВремени() Экспорт
АдресаСерверовМетокВремени = ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени;
Если АдресаСерверовМетокВремени.Количество() = 0 Тогда
Возврат НСтр("ru = 'Адреса серверов меток времени не заполнены в настройках электронной подписи.'");
Иначе
СтрокаПодключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подключение к серверам меток времени на сервере <%1>.'"), ИмяКомпьютера());
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ДиагностикаСерверовМетокВремени(АдресаСерверовМетокВремени, СтрокаПодключения);
КонецЕсли;
КонецФункции
#КонецОбласти #КонецОбласти
@@ -341,6 +341,36 @@
КонецФункции КонецФункции
Процедура ДиагностикаСерверовМетокВремени(Место = Неопределено) Экспорт
РезультатДиагностики = Новый Массив;
АдресаСерверовМетокВремени = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени;
Если АдресаСерверовМетокВремени.Количество() = 0 Тогда
РезультатДиагностики.Добавить(НСтр(
"ru = 'Адреса серверов меток времени не заполнены в настройках электронной подписи.'"));
Иначе
Если Место = "Клиент" Или Место = Неопределено Тогда
РезультатДиагностики.Добавить(РезультатДиагностикиСерверовМетокВремени());
КонецЕсли;
Если Место = "Сервер" Или Место = Неопределено
И ЭлектроннаяПодписьКлиент.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда
Если РезультатДиагностики.Количество() > 0 Тогда
РезультатДиагностики.Добавить(Символы.ПС);
КонецЕсли;
РезультатДиагностики.Добавить(
ЭлектроннаяПодписьСлужебныйВызовСервера.РезультатДиагностикиСерверовМетокВремени());
КонецЕсли;
КонецЕсли;
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(СтрСоединить(РезультатДиагностики, Символы.ПС));
ТекстовыйДокумент.Показать(НСтр("ru = 'Диагностика доступности серверов меток времени'"),);
КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
@@ -2133,8 +2163,6 @@
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке); ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.ОшибкаПоКлассификатору(ОписаниеОшибки); ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.ОшибкаПоКлассификатору(ОписаниеОшибки);
// Локализация
Если ОшибкаПоКлассификатору <> Неопределено И ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда Если ОшибкаПоКлассификатору <> Неопределено И ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда
Действие = Неопределено; Действие = Неопределено;
@@ -2156,16 +2184,17 @@
ИмяИздателя = СтроковыеФункцииКлиент.СтрокаЛатиницей(ИмяИздателя); ИмяИздателя = СтроковыеФункцииКлиент.СтрокаЛатиницей(ИмяИздателя);
АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний( АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний(
ИмяИздателя, Контекст.ДанныеСертификата); ИмяИздателя, Контекст.ДанныеСертификата);
Если ЗначениеЗаполнено(АдресСпискаОтзываВнутренний.АдресВнутренний) Тогда
ПараметрыУстановкиСпискаОтзыва = ПараметрыУстановкиСпискаОтзыва( ПараметрыУстановкиСпискаОтзыва = ПараметрыУстановкиСпискаОтзыва(
Контекст.СертификатКриптографии); Контекст.СертификатКриптографии);
ПараметрыУстановкиСпискаОтзыва.Адреса = АдресСпискаОтзываВнутренний.АдресВнешний;
ПараметрыУстановкиСпискаОтзыва.АдресВнутренний = АдресСпискаОтзываВнутренний.АдресВнутренний;
ПараметрыУстановкиСпискаОтзыва.ОповещениеОЗавершении = Новый ОписаниеОповещения("ПроверитьСертификатПовторно", ПараметрыУстановкиСпискаОтзыва.ОповещениеОЗавершении = Новый ОписаниеОповещения("ПроверитьСертификатПовторно",
ЭтотОбъект, Контекст); ЭтотОбъект, Контекст);
ПараметрыУстановкиСпискаОтзыва.ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ПараметрыУстановкиСпискаОтзыва.ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для проверки сертификата требуется установка списка отзыва с помощью внешней компоненты %1.'"), НСтр("ru = 'Для проверки сертификата требуется установка списка отзыва с помощью внешней компоненты %1.'"),
"ExtraCryptoAPI"); "ExtraCryptoAPI");
Если ЗначениеЗаполнено(АдресСпискаОтзываВнутренний.АдресВнутренний) Тогда
ПараметрыУстановкиСпискаОтзыва.Адреса = АдресСпискаОтзываВнутренний.АдресВнешний;
ПараметрыУстановкиСпискаОтзыва.АдресВнутренний = АдресСпискаОтзываВнутренний.АдресВнутренний;
УстановитьСписокОтзываСертификата(ПараметрыУстановкиСпискаОтзыва); УстановитьСписокОтзываСертификата(ПараметрыУстановкиСпискаОтзыва);
Возврат; Возврат;
КонецЕсли; КонецЕсли;
@@ -2175,8 +2204,6 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
// Конец локализация
Если ОшибкаПоКлассификатору <> Неопределено Тогда Если ОшибкаПоКлассификатору <> Неопределено Тогда
ОбработатьОшибкуПоКлассификатору(ОписаниеОшибки, Контекст.ТребуетПроверкиНаКлиенте, Контекст, ОшибкаПоКлассификатору); ОбработатьОшибкуПоКлассификатору(ОписаниеОшибки, Контекст.ТребуетПроверкиНаКлиенте, Контекст, ОшибкаПоКлассификатору);
КонецЕсли; КонецЕсли;
@@ -4022,6 +4049,7 @@
СерверныеПараметры.Вставить("ЗаголовокФормы"); СерверныеПараметры.Вставить("ЗаголовокФормы");
СерверныеПараметры.Вставить("ПроверкаПриВыборе"); СерверныеПараметры.Вставить("ПроверкаПриВыборе");
СерверныеПараметры.Вставить("ПараметрыДополнительныхПроверок"); СерверныеПараметры.Вставить("ПараметрыДополнительныхПроверок");
СерверныеПараметры.Вставить("ТипПодписи");
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
@@ -4033,6 +4061,12 @@
ДополнительныеПараметры.Вставить("БезПодтверждения"); ДополнительныеПараметры.Вставить("БезПодтверждения");
КонецЕсли; КонецЕсли;
НачалоИмениФормы = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Форма.";
Если ДополнительныеПараметры.КонтекстОперации.ИмяФормы = НачалоИмениФормы + "ПодписаниеДанных" Тогда
ДополнительныеПараметры.Вставить("ТипПодписи", ДополнительныеПараметры.КонтекстОперации.ТипПодписи);
КонецЕсли;
УказанКонтекстДругойОперации = Истина; УказанКонтекстДругойОперации = Истина;
ДополнительныеПараметры.БезПодтверждения = Истина; ДополнительныеПараметры.БезПодтверждения = Истина;
@@ -5224,6 +5258,28 @@
Контекст.СертификатКриптографии)); Контекст.СертификатКриптографии));
Контекст.СвойстваСертификата.Вставить("ДвоичныеДанные", ВыгруженныеДанные); Контекст.СвойстваСертификата.Вставить("ДвоичныеДанные", ВыгруженныеДанные);
Если Контекст.Операция = "Подписание" И ТипЗнч(Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии")
И ЗначениеЗаполнено(Контекст.МенеджерКриптографии.АлгоритмПодписи) Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ВыгруженныеДанные, Ложь, Истина);
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
Контекст.СвойстваСертификата.Представление, АлгоритмСертификата,
Контекст.МенеджерКриптографии.АлгоритмПодписи);
Если Результат <> Истина Тогда
ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", Результат);
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Новый Структура("Ошибка", ОшибкаНаКлиенте));
Возврат;
КонецЕсли;
КонецЕсли;
ВыполнитьНаСторонеЦиклЗапуск(Контекст); ВыполнитьНаСторонеЦиклЗапуск(Контекст);
КонецПроцедуры КонецПроцедуры
@@ -6569,6 +6625,9 @@
СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи); СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи);
СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени); СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени);
СвойстваПодписи.Вставить("ОписаниеСертификата", ПараметрыПодписи.ОписаниеСертификата); СвойстваПодписи.Вставить("ОписаниеСертификата", ПараметрыПодписи.ОписаниеСертификата);
СвойстваПодписи.Вставить("ДатаПодписи",
?(ЗначениеЗаполнено(ПараметрыПодписи.НеподтвержденнаяДатаПодписи),
ПараметрыПодписи.НеподтвержденнаяДатаПодписи, ПараметрыПодписи.ДатаПодписиИзМетки));
ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст); ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст);
КонецЕсли; КонецЕсли;
@@ -6585,6 +6644,9 @@
СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи); СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи);
СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени); СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени);
СвойстваПодписи.Вставить("ОписаниеСертификата", ПараметрыПодписи.ОписаниеСертификата); СвойстваПодписи.Вставить("ОписаниеСертификата", ПараметрыПодписи.ОписаниеСертификата);
СвойстваПодписи.Вставить("ДатаПодписи",
?(ЗначениеЗаполнено(ПараметрыПодписи.НеподтвержденнаяДатаПодписи),
ПараметрыПодписи.НеподтвержденнаяДатаПодписи, ПараметрыПодписи.ДатаПодписиИзМетки));
Если Результат = Истина Тогда Если Результат = Истина Тогда
ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст); ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст);
@@ -6617,23 +6679,19 @@
Если Контекст.НаСторонеКлиента Тогда Если Контекст.НаСторонеКлиента Тогда
НовыеСвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи(); НовыеСвойстваПодписи = ЭлектроннаяПодписьКлиентСервер.НовыеСвойстваПодписи();
ЗаполнитьЗначенияСвойств(НовыеСвойстваПодписи, СвойстваПодписи);
ОбновитьПодпись = Ложь; ОбновитьПодпись = Ложь;
Если Контекст.ЭлементДанных.Свойство("НеТребуетсяПродление") Тогда Если Контекст.ЭлементДанных.Свойство("НеТребуетсяПродление") Тогда
Если ЭлементДанных.ТипПодписи <> СвойстваПодписи.ТипПодписи Тогда Если ЭлементДанных.ТипПодписи <> СвойстваПодписи.ТипПодписи Тогда
ЭлементДанных.ТипПодписи = СвойстваПодписи.ТипПодписи; ЭлементДанных.ТипПодписи = СвойстваПодписи.ТипПодписи;
НовыеСвойстваПодписи.ТипПодписи = СвойстваПодписи.ТипПодписи;
ОбновитьПодпись = Истина; ОбновитьПодпись = Истина;
КонецЕсли; КонецЕсли;
Если ЭлементДанных.СрокДействияПоследнейМеткиВремени <> СвойстваПодписи.СрокДействияПоследнейМеткиВремени Тогда Если ЭлементДанных.СрокДействияПоследнейМеткиВремени <> СвойстваПодписи.СрокДействияПоследнейМеткиВремени Тогда
ЭлементДанных.СрокДействияПоследнейМеткиВремени = СвойстваПодписи.СрокДействияПоследнейМеткиВремени; ЭлементДанных.СрокДействияПоследнейМеткиВремени = СвойстваПодписи.СрокДействияПоследнейМеткиВремени;
НовыеСвойстваПодписи.СрокДействияПоследнейМеткиВремени = СвойстваПодписи.СрокДействияПоследнейМеткиВремени;
ОбновитьПодпись = Истина; ОбновитьПодпись = Истина;
КонецЕсли; КонецЕсли;
Иначе Иначе
НовыеСвойстваПодписи.Подпись = СвойстваПодписи.Подпись;
НовыеСвойстваПодписи.ТипПодписи = СвойстваПодписи.ТипПодписи;
НовыеСвойстваПодписи.СрокДействияПоследнейМеткиВремени = СвойстваПодписи.СрокДействияПоследнейМеткиВремени;
ОбновитьПодпись = Истина; ОбновитьПодпись = Истина;
КонецЕсли; КонецЕсли;
@@ -9243,7 +9301,9 @@
Процедура ПослеСбораТехническойИнформацииОПрограммах(ИнформацияОПрограммах, Контекст) Экспорт Процедура ПослеСбораТехническойИнформацииОПрограммах(ИнформацияОПрограммах, Контекст) Экспорт
Контекст.СопроводительныйТекст = Контекст.СопроводительныйТекст + ИнформацияОПрограммах; Контекст.СопроводительныйТекст = Контекст.СопроводительныйТекст + ИнформацияОПрограммах + Символы.ПС
+ РезультатДиагностикиСерверовМетокВремени() + Символы.ПС;
Если Контекст.ВыгрузитьАрхив Тогда Если Контекст.ВыгрузитьАрхив Тогда
Контекст.Вставить("АдресАрхива", ЭлектроннаяПодписьСлужебныйВызовСервера.АдресАрхиваТехническойИнформации( Контекст.Вставить("АдресАрхива", ЭлектроннаяПодписьСлужебныйВызовСервера.АдресАрхиваТехническойИнформации(
@@ -9626,6 +9686,13 @@
#Область УстановкаСпискаОтзыва #Область УстановкаСпискаОтзыва
// Параметры:
// Контекст - Структура:
// * Сертификат - ДвоичныеДанные
// - Строка - адрес во временном хранилище
// - Строка - Сертификат base64 строка
// - СертификатКриптографии
//
Асинх Процедура УстановитьСписокОтзываСертификатаПослеПодключенияКомпоненты(ОбъектКомпоненты, Контекст) Экспорт Асинх Процедура УстановитьСписокОтзываСертификатаПослеПодключенияКомпоненты(ОбъектКомпоненты, Контекст) Экспорт
Если ТипЗнч(ОбъектКомпоненты) = Тип("Строка") Тогда Если ТипЗнч(ОбъектКомпоненты) = Тип("Строка") Тогда
@@ -9633,8 +9700,18 @@
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Если ТипЗнч(Контекст.Сертификат) = Тип("ДвоичныеДанные") Тогда
ДвоичныеДанныеСертификата = Контекст.Сертификат;
ИначеЕсли ТипЗнч(Контекст.Сертификат) = Тип("СертификатКриптографии") Тогда
ДвоичныеДанныеСертификата = Ждать Контекст.Сертификат.ВыгрузитьАсинх();
ИначеЕсли ЭтоАдресВременногоХранилища(Контекст.Сертификат) Тогда
ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Контекст.Сертификат);
Иначе
ДвоичныеДанныеСертификата = Base64Значение(Контекст.Сертификат);
КонецЕсли;
Если Не ЗначениеЗаполнено(Контекст.Адреса) Тогда Если Не ЗначениеЗаполнено(Контекст.Адреса) Тогда
СвойстваСертификатаРасширенные = Ждать ПолучитьСвойстваСертификатаАсинх(Контекст.Сертификат, ОбъектКомпоненты); СвойстваСертификатаРасширенные = Ждать ПолучитьСвойстваСертификатаАсинх(ДвоичныеДанныеСертификата, ОбъектКомпоненты);
Если ЗначениеЗаполнено(СвойстваСертификатаРасширенные.Ошибка) Тогда Если ЗначениеЗаполнено(СвойстваСертификатаРасширенные.Ошибка) Тогда
ОбработатьОшибкуУстановкиСпискаОтзыва(СвойстваСертификатаРасширенные.Ошибка, Контекст); ОбработатьОшибкуУстановкиСпискаОтзыва(СвойстваСертификатаРасширенные.Ошибка, Контекст);
@@ -9661,7 +9738,7 @@
Контекст.Вставить("ОбъектКомпоненты", ОбъектКомпоненты); Контекст.Вставить("ОбъектКомпоненты", ОбъектКомпоненты);
Контекст.Вставить("АдресРесурса", Параметры.АдресРесурса); Контекст.Вставить("АдресРесурса", Параметры.АдресРесурса);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(Контекст.Сертификат); СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(ДвоичныеДанныеСертификата);
Контекст.Вставить("ИдентификаторКлючаУдостоверяющегоЦентра", СвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра); Контекст.Вставить("ИдентификаторКлючаУдостоверяющегоЦентра", СвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра);
ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.НачатьСкачиваниеФайлаНаСервере(Параметры); ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.НачатьСкачиваниеФайлаНаСервере(Параметры);
@@ -10906,6 +10983,21 @@
УдалитьСертификатИзЛокальногоХранилища(Параметры.ДанныеСертификата); УдалитьСертификатИзЛокальногоХранилища(Параметры.ДанныеСертификата);
КонецЕсли; КонецЕсли;
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ДиагностикаСерверовМетокВремениСервер" Тогда
ДиагностикаСерверовМетокВремени("Сервер");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ДиагностикаСерверовМетокВремениКлиент" Тогда
ДиагностикаСерверовМетокВремени("Клиент");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьНастройкиЭлектроннойПодписи" Тогда
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкиПрограммы") Тогда
МодульНастройкиПрограммыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("НастройкиПрограммыКлиент");
МодульНастройкиПрограммыКлиент.ОткрытьОбщиеНастройки();
КонецЕсли;
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "УстановитьКомпоненту" Тогда ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "УстановитьКомпоненту" Тогда
Оповещение = Новый ОписаниеОповещения("ОповеститьОбУспешномПодключенииКомпоненты", ЭтотОбъект); Оповещение = Новый ОписаниеОповещения("ОповеститьОбУспешномПодключенииКомпоненты", ЭтотОбъект);
@@ -10916,7 +11008,7 @@
ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылкаФорматированнойСтроки, "e1cib") Тогда ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылкаФорматированнойСтроки, "e1cib") Тогда
СтандартнаяОбработка = Истина; СтандартнаяОбработка = Истина;
Иначе Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Действие временно недоступно.'")); ПоказатьПредупреждение(, НСтр("ru = 'Действие будет доступно в следующих обновлениях приложения'"));
КонецЕсли; КонецЕсли;
КонецПроцедуры КонецПроцедуры
@@ -11198,7 +11290,7 @@
КонецПроцедуры КонецПроцедуры
Асинх Функция СвойстваПодписиЧтениеМенеджеромКриптографии(Подпись, МенеджерКриптографии, ПрочитатьСертификаты) Асинх Функция СвойстваПодписиЧтениеМенеджеромКриптографии(Подпись, МенеджерКриптографии, ПрочитатьСертификаты) Экспорт
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатЧтенияСвойствПодписи(); Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатЧтенияСвойствПодписи();
@@ -11458,5 +11550,28 @@
КонецФункции КонецФункции
Функция РезультатДиагностикиСерверовМетокВремени()
АдресаСерверовМетокВремени = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени;
Если АдресаСерверовМетокВремени.Количество() = 0 Тогда
Возврат НСтр("ru = 'Адреса серверов меток времени не заполнены в настройках электронной подписи.'");
Иначе
#Если ВебКлиент Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Диагностика серверов меток времени недоступна при работе в веб-клиенте. Попробуйте в браузере скачать файл по ссылке.
|%1'"), СтрСоединить(АдресаСерверовМетокВремени, Символы.ПС));
#Иначе
СтрокаПодключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подключение к серверам меток времени на компьютере <%1>.'"), ИмяКомпьютера());
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ДиагностикаСерверовМетокВремени(АдресаСерверовМетокВремени, СтрокаПодключения);
#КонецЕсли
КонецЕсли;
КонецФункции
#КонецОбласти #КонецОбласти
@@ -1746,14 +1746,14 @@
Если Подпись.МеткаВремениПодписи <> Неопределено Тогда Если Подпись.МеткаВремениПодписи <> Неопределено Тогда
СертификатПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии СертификатПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания; СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениПодписи.Дата + РазницаСУниверсальнымВременем); ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениПодписи.Дата);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Дата + РазницаСУниверсальнымВременем; ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Дата + РазницаСУниверсальнымВременем;
КонецЕсли; КонецЕсли;
Если Подпись.МеткаВремениДанныхПроверкиПодписи <> Неопределено Тогда Если Подпись.МеткаВремениДанныхПроверкиПодписи <> Неопределено Тогда
СертификатПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии СертификатПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания; СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + РазницаСУниверсальнымВременем); ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениДанныхПроверкиПодписи.Дата);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + РазницаСУниверсальнымВременем; ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + РазницаСУниверсальнымВременем;
КонецЕсли; КонецЕсли;
@@ -1761,8 +1761,8 @@
ИндексПоследнейМетки = Подпись.АрхивныеМеткиВремени.ВГраница(); ИндексПоследнейМетки = Подпись.АрхивныеМеткиВремени.ВГраница();
СертификатПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Подписи[0].СертификатПодписи; // СертификатКриптографии СертификатПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания; СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.АрхивныеМеткиВремени[0].Дата + РазницаСУниверсальнымВременем); ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.АрхивныеМеткиВремени[0].Дата);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Дата; ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Дата + РазницаСУниверсальнымВременем;
КонецЕсли; КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) Тогда Если ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) Тогда
@@ -1776,7 +1776,7 @@
КонецЕсли; КонецЕсли;
Если ДатаПодписиИзМетки <> Дата(3999, 12, 31) Тогда Если ДатаПодписиИзМетки <> Дата(3999, 12, 31) Тогда
ПараметрыПодписи.ДатаПодписиИзМетки = ДатаПодписиИзМетки; ПараметрыПодписи.ДатаПодписиИзМетки = ДатаПодписиИзМетки + РазницаСУниверсальнымВременем;
КонецЕсли; КонецЕсли;
Возврат ПараметрыПодписи; Возврат ПараметрыПодписи;
@@ -1865,9 +1865,18 @@
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.РасширеннаяДолгосрочнаяCAdESXLongType2") Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.РасширеннаяДолгосрочнаяCAdESXLongType2")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда
Граница = Результат.АдресаСерверовМетокВремени.ВГраница();
Для Счетчик = 0 По Граница Цикл
ТекущийИндекс = Граница - Счетчик;
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(Результат.АдресаСерверовМетокВремени[ТекущийИндекс]);
Если СтруктураURI.ИмяСервера = "" Тогда
Результат.АдресаСерверовМетокВремени.Удалить(ТекущийИндекс);
КонецЕсли;
КонецЦикла;
Если Результат.АдресаСерверовМетокВремени.Количество() = 0 Тогда Если Результат.АдресаСерверовМетокВремени.Количество() = 0 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Для создания подписи типа ""%1"" заполните адреса серверов штампов времени.'"), ТипПодписи); НСтр("ru='Для создания подписи с типом ""%1"" заполните адреса серверов меток времени.'"), ТипПодписи);
КонецЕсли; КонецЕсли;
ИначеЕсли ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") ИначеЕсли ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
@@ -3533,7 +3542,7 @@
КонецЕсли; КонецЕсли;
КонецЕсли; КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(Сертификат)); ДанныеСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(Сертификат);
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДанныеСертификата = Сертификат; ДанныеСертификата = Сертификат;
Иначе Иначе
@@ -3567,11 +3576,197 @@
Структура = Новый Структура; Структура = Новый Структура;
Структура.Вставить("ПроверитьСертификатВЛокальномХранилищеКлиента", Ложь); Структура.Вставить("ПроверитьСертификатВЛокальномХранилищеКлиента", Ложь);
Структура.Вставить("ДиагностикаСерверовМетокВремениКлиент", Ложь);
Возврат Структура; Возврат Структура;
КонецФункции КонецФункции
Функция ДиагностикаСерверовМетокВремени(АдресаСерверовМетокВремени, СтрокаПодключения) Экспорт
Массив = Новый Массив;
Массив.Добавить(СтрокаПодключения);
Массив.Добавить(Символы.ПС);
Для Каждого Адрес Из АдресаСерверовМетокВремени Цикл
СообщениеОбОшибке = ДиагностикаСервераМетокВремени(Адрес);
Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда
Массив.Добавить(СообщениеОбОшибке);
Иначе
Массив.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 - доступен.'"), Адрес));
КонецЕсли;
Массив.Добавить(Символы.ПС);
КонецЦикла;
Возврат СтрСоединить(Массив, Символы.ПС);
КонецФункции
// Функция для диагностики сервера меток времени.
//
// Параметры:
// URL - Строка - url файла в формате: [Протокол://]<Сервер>/<Путь к файлу на сервере>.
//
// Возвращаемое значение:
// Структура:
// * СообщениеОбОшибке - Строка
//
Функция ДиагностикаСервераМетокВремени(Знач URL, Перенаправления = Неопределено)
#Если ВебКлиент Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр(
"ru = 'Диагностика недоступна при работе в веб-клиенте. Попробуйте в браузере скачать файл по ссылке %1'"),
URL);
#Иначе
Если Перенаправления = Неопределено Тогда
Перенаправления = Новый Массив;
КонецЕсли;
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(URL);
Сервер = СтруктураURI.Хост;
ПутьНаСервере = СтруктураURI.ПутьНаСервере;
Протокол = СтруктураURI.Схема;
Если ПустаяСтрока(Протокол) Тогда
Протокол = "http";
КонецЕсли;
Если Протокол = "https" Тогда
ЗащищенноеСоединение = Истина;
КонецЕсли;
Если ЗащищенноеСоединение = Истина Тогда
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
ИначеЕсли ЗащищенноеСоединение = Ложь Тогда
ЗащищенноеСоединение = Неопределено;
КонецЕсли;
Порт = СтруктураURI.Порт;
Прокси = Неопределено;
Попытка
Соединение = Новый HTTPСоединение(Сервер, Порт, , , Прокси, 7, ЗащищенноеСоединение);
Сервер = Соединение.Сервер;
Порт = Соединение.Порт;
ЗапросHTTP = Новый HTTPЗапрос(ПутьНаСервере, Новый Соответствие);
ЗапросHTTP.Заголовки.Вставить("Accept-Charset", "UTF-8");
ЗапросHTTP.Заголовки.Вставить("X-1C-Request-UID", Строка(Новый УникальныйИдентификатор));
ОтветHTTP = Соединение.Получить(ЗапросHTTP);
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось установить HTTP-соединение с сервером %1:%2
|по причине:
|%3'"), Сервер, Формат(Порт, "ЧГ="), ОбработкаОшибок.КраткоеПредставлениеОшибки(
ИнформацияОбОшибке()));
Возврат ТекстОшибки;
КонецПопытки;
Попытка
Если ОтветHTTP.КодСостояния = 301 // 301 Moved Permanently
Или ОтветHTTP.КодСостояния = 302 // 302 Found, 302 Moved Temporarily
Или ОтветHTTP.КодСостояния = 303 // 303 See Other by GET
Или ОтветHTTP.КодСостояния = 307 // 307 Temporary Redirect
Или ОтветHTTP.КодСостояния = 308 Тогда // 308 Permanent Redirect
Если Перенаправления.Количество() > 7 Тогда
ВызватьИсключение
НСтр("ru = 'Превышено количество перенаправлений.'");
Иначе
Заголовки = Новый Соответствие;
Для Каждого Заголовок Из ОтветHTTP.Заголовки Цикл
Заголовки.Вставить(НРег(Заголовок.Ключ), Заголовок.Значение);
КонецЦикла;
НовыйURL = Заголовки["location"];
Если НовыйURL = Неопределено Тогда
ВызватьИсключение
НСтр("ru = 'Некорректное перенаправление, отсутствует HTTP-заголовок ответа ""Location"".'");
КонецЕсли;
НовыйURL = СокрЛП(НовыйURL);
Если ПустаяСтрока(НовыйURL) Тогда
ВызватьИсключение
НСтр("ru = 'Некорректное перенаправление, пустой HTTP-заголовок ответа ""Location"".'");
КонецЕсли;
Если Перенаправления.Найти(НовыйURL) <> Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Циклическое перенаправление.
|Попытка перейти на %1 уже выполнялась ранее.'"),
НовыйURL);
КонецЕсли;
Перенаправления.Добавить(URL);
Если Не СтрНачинаетсяС(НовыйURL, "http") Тогда
// <схема>://<хост>:<порт>/<путь>
НовыйURL = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1://%2:%3/%4", Протокол, Сервер, Формат(Порт, "ЧГ="), НовыйURL);
КонецЕсли;
Возврат ДиагностикаСервераМетокВремени(НовыйURL, Перенаправления);
КонецЕсли;
КонецЕсли;
Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда
Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 И ОтветHTTP.КодСостояния < 400 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неподдерживаемый ответ сервера (%1)'"), ОтветHTTP.КодСостояния);
ВызватьИсключение ТекстОшибки;
ИначеЕсли ОтветHTTP.КодСостояния >= 400 И ОтветHTTP.КодСостояния < 500 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка при выполнении запроса (%1)'"), ОтветHTTP.КодСостояния);
ВызватьИсключение ТекстОшибки;
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка сервера при обработке запроса к ресурсу (%1)'"), ОтветHTTP.КодСостояния);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось получить файл %1 с сервера %2:%3 по причине:
|%4'"), URL, Сервер, Формат(Порт, "ЧГ="), ОбработкаОшибок.КраткоеПредставлениеОшибки(
ИнформацияОбОшибке()));
Возврат ТекстОшибки;
КонецПопытки;
Возврат "";
#КонецЕсли
КонецФункции
#Область ОбластьXML #Область ОбластьXML
// Параметры: // Параметры:
@@ -3759,6 +3954,66 @@
#Область СодержимоеСертификата #Область СодержимоеСертификата
Функция ЭтоСертификатГОСТ(АлгоритмСертификата) Экспорт
Возврат СтрНачинаетсяС(АлгоритмСертификата, "1.2.643");
КонецФункции
Функция АлгоритмПодписиСоответствуетСертификату(ПредставлениеСертификата, АлгоритмСертификата, АлгоритмПодписи, АлгоритмХеширования = Неопределено) Экспорт
Если Не ЭтоСертификатГОСТ(АлгоритмСертификата) Тогда
Возврат Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(АлгоритмПодписи) И Не ЗначениеЗаполнено(АлгоритмХеширования) Тогда
Возврат Истина;
КонецЕсли;
НаборыАлгоритмовДляСозданияПодписи = НаборыАлгоритмовДляСозданияПодписи();
АлгоритмыДляПроверки = Неопределено;
Для Каждого НаборАлгоритмов Из НаборыАлгоритмовДляСозданияПодписи Цикл
Если НаборАлгоритмов.ИдентификаторАлгоритмаОткрытогоКлюча = АлгоритмСертификата Тогда
АлгоритмыДляПроверки = НаборАлгоритмов;
Прервать;
КонецЕсли;
КонецЦикла;
Если АлгоритмыДляПроверки <> Неопределено Тогда
Если АлгоритмПодписи <> АлгоритмСертификата И АлгоритмыДляПроверки.ИдентификаторАлгоритмаПодписи <> АлгоритмСертификата Тогда
Если АлгоритмыДляПроверки.ИменаАлгоритмаПодписи.Количество() > 0
И АлгоритмыДляПроверки.ИменаАлгоритмаПодписи.Найти(ВРЕГ(АлгоритмПодписи)) = Неопределено Тогда
Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр(
"ru = 'Сертификат %1 связан с приложением электронной подписи с не соответствующим сертификату алгоритмом подписи %2. Сертификат должен быть связан с приложением с алгоритмом подписания %3.'"),
ПредставлениеСертификата, АлгоритмПодписи, ПредставлениеАлгоритма(
АлгоритмыДляПроверки.ИменаАлгоритмаПодписи));
Возврат Ошибка;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(АлгоритмХеширования) И (АлгоритмХеширования <> АлгоритмыДляПроверки.ИдентификаторАлгоритмаХеширования) Тогда
Если АлгоритмыДляПроверки.ИменаАлгоритмаХеширования.Количество() > 0
И АлгоритмыДляПроверки.ИменаАлгоритмаХеширования.Найти(ВРЕГ(
АлгоритмХеширования)) = Неопределено Тогда
Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр(
"ru = 'Сертификат %1 связан с приложением электронной подписи с не соответствующим сертификату алгоритмом хеширования %2. Сертификат должен быть связан с приложением с алгоритмом хеширования %3.'"),
ПредставлениеСертификата, АлгоритмХеширования, ПредставлениеАлгоритма(
АлгоритмыДляПроверки.ИменаАлгоритмаХеширования));
Возврат Ошибка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
Функция ДополнительныеСвойстваСертификата(Данные, РазницаСУниверсальнымВременем = Неопределено) Экспорт Функция ДополнительныеСвойстваСертификата(Данные, РазницаСУниверсальнымВременем = Неопределено) Экспорт
Структура = Новый Структура; Структура = Новый Структура;
@@ -4936,6 +5191,19 @@
КонецФункции КонецФункции
Функция ПредставлениеАлгоритма(ИменаАлгоритмаПодписи)
ВГраница = ИменаАлгоритмаПодписи.ВГраница();
Если ВГраница = 0 Тогда
Возврат ИменаАлгоритмаПодписи[0];
Иначе
Имена = "";
Для н = 1 По ВГраница Цикл
Имена = Имена + ИменаАлгоритмаПодписи[н] + ?(н = ВГраница, "", ", ");
КонецЦикла;
Возврат ИменаАлгоритмаПодписи[0] + " (" + Имена + ")";
КонецЕсли;
КонецФункции
Функция АлгоритмПодписиСоответствующийАлгоритмуХешированияГОСТ(АлгоритмХеширования) Функция АлгоритмПодписиСоответствующийАлгоритмуХешированияГОСТ(АлгоритмХеширования)
Если Не ЗначениеЗаполнено(АлгоритмХеширования) Тогда Если Не ЗначениеЗаполнено(АлгоритмХеширования) Тогда
@@ -474,7 +474,7 @@
// //
Функция ВерсияКлассификатора() Экспорт Функция ВерсияКлассификатора() Экспорт
Возврат "3.0.1.24"; Возврат "3.0.1.29";
КонецФункции КонецФункции
@@ -326,19 +326,19 @@
Если Действие = "УстановитьСписокОтзываСертификата" Тогда Если Действие = "УстановитьСписокОтзываСертификата" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите список отзыва</a> удостоверяющего центра автоматически. НСтр("ru = '• <a href=%1>Установите список отзыва</a> удостоверяющего центра автоматически.
|%2'"), Действие, Решение); |%2'"), Действие, Решение);
ИначеЕсли Действие = "УстановитьКорневойСертификат" Тогда ИначеЕсли Действие = "УстановитьКорневойСертификат" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите корневой сертификат</a> удостоверяющего центра автоматически. НСтр("ru = '• <a href=%1>Установите корневой сертификат</a> удостоверяющего центра автоматически.
|%2'"), Действие, Решение); |%2'"), Действие, Решение);
ИначеЕсли Действие = "УстановитьСертификат" Тогда ИначеЕсли Действие = "УстановитьСертификат" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите сертификат</a> в Личное хранилище сертификатов пользователя операционной системы автоматически. НСтр("ru = '• <a href=%1>Установите сертификат</a> в Личное хранилище сертификатов пользователя операционной системы автоматически.
|%2'"), Действие, Решение); |%2'"), Действие, Решение);
ИначеЕсли Действие = "УстановитьСертификатВКонтейнер" Тогда ИначеЕсли Действие = "УстановитьСертификатВКонтейнер" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите сертификат в контейнер</a> прямо из приложения. НСтр("ru = '• <a href=%1>Установите сертификат в контейнер</a> прямо из приложения.
|%2'"), Действие, Решение); |%2'"), Действие, Решение);
КонецЕсли; КонецЕсли;
Loaded 100 of 229 files, more files were not shown because too many files have changed in this diff. Show more