3_1_10_206

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

No files matched your search

@@ -39,7 +39,7 @@
КонецЕсли;
НоваяСтрока = Языки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ЯзыкКонфигурации);
НоваяСтрока.Имя = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
НоваяСтрока.Имя = "Язык_" + ЯзыкКонфигурации.КодЯзыка;
КонецЦикла;
СформироватьПоляВводаНаРазныхЯзыках(Ложь, Параметры.ТолькоПросмотр);
@@ -138,7 +138,9 @@
Добавлять = Новый Массив;
ТипСтрока = Новый ОписаниеТипов("Строка");
Для Каждого ЯзыкКонфигурации Из Языки Цикл
Добавлять.Добавить(Новый РеквизитФормы(ЯзыкКонфигурации.Имя, ТипСтрока, , ЯзыкКонфигурации.Представление));
Добавлять.Добавить(Новый РеквизитФормы(ЯзыкКонфигурации.Имя, ТипСтрока, ,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Параметры прописи для языка %1'"),
ЯзыкКонфигурации.Представление)));
Добавлять.Добавить(Новый РеквизитФормы("ПодсказкаВвода" + ЯзыкКонфигурации.Имя, ТипСтрока, ,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подсказка ввода для языка %1'"),
ЯзыкКонфигурации.Представление)));
@@ -128,11 +128,11 @@
| Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты
|ГДЕ
| ВнешниеКомпоненты.Идентификатор = &Идентификатор
| ИЛИ ВнешниеКомпоненты.Версия = &Версия";
| ИЛИ ВнешниеКомпоненты.Идентификатор = &Идентификатор2 И ВнешниеКомпоненты.Версия ПОДОБНО ""3.1.0.%""";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Идентификатор", "AddInNativeExtension");
Запрос.УстановитьПараметр("Версия", "3.1.0.1013");
Запрос.УстановитьПараметр("Идентификатор2", "ImageScan");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
@@ -264,38 +264,37 @@
ОбновитьПоддерживаемыеПлатформыКомпоненты = Истина;
ЦелевыеПлатформы = РеквизитыКомпоненты.ЦелевыеПлатформы.Получить();
ДвоичныеДанныеКомпоненты = РеквизитыКомпоненты.ХранилищеКомпоненты.Получить();
Если ТипЗнч(ДвоичныеДанныеКомпоненты) <> Тип("ДвоичныеДанные") Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
Иначе
ИнформацияОКомпонентеИзФайла = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(
ДвоичныеДанныеКомпоненты, Ложь);
Если Не ИнформацияОКомпонентеИзФайла.Разобрано Тогда
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
Иначе
Реквизиты = ИнформацияОКомпонентеИзФайла.Реквизиты;
ЦелевыеПлатформы = РеквизитыКомпоненты.ЦелевыеПлатформы.Получить();
Если ЦелевыеПлатформы <> Неопределено И ОбщегоНазначения.КоллекцииИдентичны(ЦелевыеПлатформы,
Реквизиты.ЦелевыеПлатформы) Тогда
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИнформацияОКомпонентеИзФайла = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(
ДвоичныеДанныеКомпоненты, Ложь);
Если Не ИнформацияОКомпонентеИзФайла.Разобрано Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли;
Реквизиты = ИнформацияОКомпонентеИзФайла.Реквизиты;
Если ЦелевыеПлатформы <> Неопределено И ОбщегоНазначения.КоллекцииИдентичны(ЦелевыеПлатформы, Реквизиты.ЦелевыеПлатформы) Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли;
Иначе
ОбновитьПоддерживаемыеПлатформыКомпоненты = Ложь;
КонецЕсли;
Если Не ОбновитьПоддерживаемыеПлатформыКомпоненты
И Не (ОбновитьПараметрыКомпонентыСканирования И (РеквизитыКомпоненты.Идентификатор = "AddInNativeExtension")
Или РеквизитыКомпоненты.Версия = "3.1.0.1013") Тогда
И Не (ОбновитьПараметрыКомпонентыСканирования И (РеквизитыКомпоненты.Идентификатор = "AddInNativeExtension"
Или РеквизитыКомпоненты.Идентификатор = ИдентификаторКомпонентыСканирования
И СтрНачинаетсяС(РеквизитыКомпоненты.Версия, "3.1.0."))) Тогда
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
ОбъектовОбработано = ОбъектовОбработано + 1;
Продолжить;
КонецЕсли;
@@ -318,8 +317,8 @@
КомпонентаОбъект.Идентификатор = ИдентификаторКомпонентыСканирования;
КонецЕсли;
Если ОбновитьПараметрыКомпонентыСканирования И РеквизитыКомпоненты.Версия = "3.1.0.1013" Тогда
КомпонентаОбъект.Версия = "3.0.1.1013";
Если ОбновитьПараметрыКомпонентыСканирования И СтрНачинаетсяС(РеквизитыКомпоненты.Версия, "3.1.0.") Тогда
КомпонентаОбъект.Версия = СтрЗаменить(РеквизитыКомпоненты.Версия, "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>
<ul><li>В ряде случаев для упрощения настройки прав доступа, в списке разрешенных или запрещенных значений можно указывать не отдельные элементы, а целые группы элементов. Например, для вида доступа <strong>Демо: Группы Партнеров</strong> можно ограничить доступ в разрезе групп доступа партнеров, а не по каждому партнеру в отдельности. Для этого необходимо определить список групп доступа партнеров, и у каждого партнера задать принадлежность к той или иной группе. Эти действия могут быть выполнены не только администратором, но и любым пользователем с соответствующими правами на редактирование списка партнеров.</li></ul></li>
<li>В некоторых группах доступа предусмотрена настройка прав с помощью вида доступа <strong>Пользователи</strong> (аналогично, вид доступа <strong>Внешние пользователи</strong> для внешних пользователей). Настройка может учитываться только в тех документах (и других объектах приложения), в полях которых могут быть указаны пользователи, получающие доступ к этим документам ("Ответственный", "Автор", "Исполнитель" и т.п.).
<ul><li>Для того чтобы дать участникам группы права доступа ко всем ограниченным данным, с которыми работает тот или иной пользователь, необходимо включить его в список разрешенных значений для вида доступа <strong>Пользователи</strong>.
</li>
<li>Например, если доступ к документам <strong>Поступление товаров и услуг </strong>зависит от того, кто указан в поле <strong>Ответственный</strong>, тогда пользователь сможет записывать документы, у которых <strong>Ответственный</strong> совпадает с пользователем, или добавлен в список разрешенных для вида доступа <strong>Пользователи</strong>. Аналогично действует запрещающая настройка.</li></ul></li></ul><h3 style="font-size: 13.4399995803833px;">Отчеты</h3>
<ul><li>Для того чтобы участникам группы доступа дать права доступа ко всем ограниченным данным, с которыми работает тот или иной пользователь, необходимо включить его в список разрешенных значений для вида доступа <strong>Пользователи</strong>.</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>
<ul><li>
<div>Просмотреть участников групп доступа можно с помощью отчета <b>Участники групп доступа</b>. Отчет может быть полезен, если в приложении большое количество пользователей и групп.  </div></li></ul><h3>См. также:</h3>
<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>
<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.ГруппыДоступа.Form.ФормаЭлемента/Help">группе доступа</a>, может изменять состав участников своей группы доступа.</p>
<p>Набор прав (ролей) и возможности по их ограничению определяются заданным <a href="Catalog.ПрофилиГруппДоступа/Help">профилем групп доступа</a>. </p>
<p>Например, группа доступа "Менеджеры по продажам ПО делового назначения" с пользователями Иванов и Петров может ссылаться на профиль "Менеджер по продажам", в котором предусмотрена возможность ограничения по виду доступа <strong>Виды номенклатуры</strong>. Тогда если по этому виду доступа для всех значений указать вариант "Запрещены", а в список добавить вид номенклатуры "ПО делового назначения", то Иванову и Петрову будут доступны только те данные и операции, которые связаны с ПО делового назначения.</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>
<ul><li>Состав ролей пользователя определяется приложением автоматически, исходя из того, в какие <a href="Catalog.ГруппыДоступа.Form.ФормаСписка/Help">группы доступа</a> он входит явно или косвенно (посредством групп пользователей), и обновляется каждый раз при изменении состава группы доступа или состава <a href="Catalog.ГруппыПользователей/Help">группы пользователей</a> (<a href="Catalog.ГруппыВнешнихПользователей.Form.ФормаЭлемента/Help">группы внешних пользователей</a>).
</li>
@@ -13,7 +13,7 @@
</li>
<li>В этом случае его совокупные <a href="CommonForm.ПраваДоступа/Help">права доступа</a> складываются (объединяются по "или") из прав доступа каждой группы. Например, в группе доступа "Менеджеры по закупкам" пользователю разрешен просмотр документов "Поступления товаров" по организации "Далекая перспектива". В группе доступа "Менеджеры по продажам" ему разрешен ввод документов "Заказ покупателя" по организации "Новые технологии".
</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>Не следует для настройки прав доступа использовать режим конфигурирования 1С:Предприятия.</li></ul><h3>См. также</h3>
<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,43 +90,46 @@
|у предопределенной группы доступа Администраторы.'");
КонецЕсли;
Если Не ЭтоГруппа Тогда
// Автоматическая установка реквизитов для персональной группы доступа.
Если ЗначениеЗаполнено(Пользователь) Тогда
Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа();
Иначе
Пользователь = Неопределено;
Если Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина) Тогда
Родитель = Неопределено;
КонецЕсли;
КонецЕсли;
// При снятии пометки удаления с группы доступа выполняется
// снятие пометки удаления с профиля этой группы доступа.
Если Не ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Истина
И Профиль = СтарыеЗначения.Профиль Тогда
// Автоматическая установка реквизитов для персональной группы доступа.
Если ЗначениеЗаполнено(Пользователь) Тогда
Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа();
Иначе
Пользователь = Неопределено;
Если Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(Истина) Тогда
Родитель = Неопределено;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа");
ЭлементБлокировки.УстановитьЗначение("Ссылка", Профиль);
Блокировка.Заблокировать();
ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления");
ПометкаУдаленияПрофиля = ?(ТипЗнч(ПометкаУдаленияПрофиля) = Тип("Булево"), ПометкаУдаленияПрофиля, Ложь);
Если ПометкаУдаленияПрофиля Тогда
УправлениеДоступом.ПроверитьИзменениеРазрешено(Профиль);
ЗаблокироватьДанныеДляРедактирования(Профиль);
УстановитьПривилегированныйРежим(Истина);
ПрофильОбъект = Профиль.ПолучитьОбъект();
ПрофильОбъект.ДополнительныеСвойства.Вставить("СнятиеПометкиУдаленияПрофиляПриСнятииПометкиУдаленияГруппыДоступа", Ссылка);
ПрофильОбъект.ПометкаУдаления = Ложь;
ПрофильОбъект.Записать();
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
КонецЕсли;
// При снятии пометки удаления с группы доступа выполняется
// снятие пометки удаления с профиля этой группы доступа.
Если Не ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Истина Тогда
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрофилиГруппДоступа");
ЭлементБлокировки.УстановитьЗначение("Ссылка", Профиль);
Блокировка.Заблокировать();
ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления");
ПометкаУдаленияПрофиля = ?(ПометкаУдаленияПрофиля = Неопределено, Ложь, ПометкаУдаленияПрофиля);
Если ПометкаУдаленияПрофиля Тогда
ЗаблокироватьДанныеДляРедактирования(Профиль);
ПрофильОбъект = Профиль.ПолучитьОбъект();
ПрофильОбъект.ПометкаУдаления = Ложь;
ПрофильОбъект.Записать();
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
КонецПроцедуры
@@ -133,11 +141,24 @@
//
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ЭтоГруппа Тогда
Возврат;
КонецЕсли;
Если ЭтоГруппа Тогда
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеУчастниковГруппДоступа(ЭтотОбъект, СтарыеЗначения);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеРазрешенныхЗначений(ЭтотОбъект, СтарыеЗначения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -200,6 +221,35 @@
#Область СлужебныеПроцедурыИФункции
// Значения некоторых реквизитов и табличных частей группы доступа
// до ее изменения для использования в обработчике события ПриЗаписи.
//
// Возвращаемое значение:
// Структура:
// * Ссылка - СправочникСсылка.ГруппыДоступа
// * ПометкаУдаления - Булево
// * Профиль - СправочникСсылка.ПрофилиГруппДоступа
// * ПометкаУдаленияПрофиля - Булево
// * Пользователи - РезультатЗапроса
// * ВидыДоступа - РезультатЗапроса
// * ЗначенияДоступа - РезультатЗапроса
//
Функция СтарыеЗначения()
Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка,
"Ссылка, Профиль, ПометкаУдаления, Пользователи, ВидыДоступа, ЗначенияДоступа");
Результат.Вставить("ПометкаУдаленияПрофиля", Неопределено);
Если ЗначениеЗаполнено(Результат.Профиль) Тогда
Результат.ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
Результат.Профиль, "ПометкаУдаления");
КонецЕсли;
Возврат Результат;
КонецФункции
// Параметры:
// НовыеУчастники - СправочникТабличнаяЧасть.ГруппыДоступа.Пользователи
// СтарыеУчастники - РезультатЗапроса
@@ -1219,6 +1219,7 @@
Строка.ИмяВЕдЧисле = "ЖурналДокументов";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Журнал документов'");
Строка.БезДанных = Истина;
Строка.ОбъектыРасширений = Истина;
Строка = Результат.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("706cf832-0ae5-45b5-8a4a-1f251d054f3b");
@@ -1300,6 +1301,7 @@
Строка.Синоним = НСтр("ru = 'Бизнес-процессы'");
Строка.ИмяВЕдЧисле = "БизнесПроцесс";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Бизнес-процесс'");
Строка.ОбъектыРасширений = Истина;
Строка = Результат.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("8d9153ad-7cea-4e25-9542-a557ee59fd16");
@@ -1307,6 +1309,7 @@
Строка.Синоним = НСтр("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"
Или Форма.ДокументВид = "91" Тогда
Или Форма.ДокументВид = "0" Тогда
Форма.ДокументНомер = "";
Форма.ДокументКемВыдан = "";
Форма.ДокументДатаВыдачи = "";
Форма.ДокументКодПодразделения = "";
Форма.ДокументСрокДействия = "";
Форма.ДокументСрокДействия = "";
Элементы.ДокументНомер.Маска = "";
ИначеЕсли Форма.ДокументВид = "21" Тогда
Элементы.ДокументНомер.Заголовок = НСтр("ru = 'Серия и номер'");
Элементы.ДокументНомер.Маска = "99 99 999999";
@@ -373,7 +373,6 @@
&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьВидаДокумента(Форма)
Форма.Элементы.ДокументКодПодразделения.Видимость = Форма.ПоказыватьПерсональныеДанные И Форма.ДокументВид = "21";
Форма.Элементы.ДокументСрокДействия.Видимость = Форма.ПоказыватьПерсональныеДанные И Форма.ДокументВид <> "21";
КонецПроцедуры
@@ -529,7 +528,7 @@
СведенияОФизическомЛице = РеквизитыУчастникаДляХранения;
СведенияОФизическомЛице.Вставить("Ссылка", Ссылка);
Если ДокументВид = "00" Тогда
Если ДокументВид = "0" Тогда
СведенияОФизическомЛице.ДокументВид = "";
СведенияОФизическомЛице.ДокументКемВыдан = "";
СведенияОФизическомЛице.ДокументКодПодразделения = "";
@@ -8277,7 +8277,6 @@
<name>Отправить</name>
</handler>
</action>
<modifiesStoredData>true</modifiesStoredData>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</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,15 +1143,10 @@
Для Каждого Строка Из Объект.Представители Цикл
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
СтрокаОшибки = НСтр("ru = 'Организация %1 - %2'");
Иначе
СтрокаОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
КонецЕсли;
ПредставлениеПредставителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Представитель, РеквизитыОрганизации);
ШаблонОшибки = ПредставлениеПредставителя + " - %1:";
ШаблонОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки,
Строка.Представитель, " %1: ");
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Представитель";
Иначе
@@ -1194,7 +1185,7 @@
Если ЗначениеЗаполнено(Объект.РодительскаяДоверенность) Тогда
РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.РодительскаяДоверенность, "Представители, ДатаОкончания");
РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.РодительскаяДоверенность, "Представители, ДатаВыдачи, ДатаОкончания");
ПредставителиРодительскойДоверенности = РеквизитыРодительскойДоверенности.Представители.Выгрузить();
Если Объект.ДатаОкончания > РеквизитыРодительскойДоверенности.ДатаОкончания Тогда
@@ -1204,6 +1195,13 @@
Формат(РеквизитыРодительскойДоверенности.ДатаОкончания, "ДЛФ=D")),, "ДатаОкончания",, Отказ);
КонецЕсли;
Если Объект.ДатаВыдачи < РеквизитыРодительскойДоверенности.ДатаВыдачи Тогда
ОбщегоНазначения.СообщитьПользователю(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Дата начала действия не должна быть меньше, чем у родительской доверенности (%1)'"),
Формат(РеквизитыРодительскойДоверенности.ДатаВыдачи, "ДЛФ=D")),, "ДатаВыдачи",, Отказ);
КонецЕсли;
Для Каждого Строка Из ПредставителиРодительскойДоверенности Цикл
РеквизитыОрганизации = Строка.ПредставительРеквизиты.Получить();
@@ -1212,17 +1210,12 @@
КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ШаблонОшибки = НСтр("ru = 'Организация %1 - %2'");
ИНН = РеквизитыОрганизации.ИНН;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
ШаблонОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
@@ -1244,27 +1237,9 @@
Для Каждого Строка Из Объект.Доверители Цикл
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
ИНН = "";
КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ШаблонОшибки = НСтр("ru = 'Организация %1 - %2'");
ИНН = РеквизитыОрганизации.ИНН;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
ШаблонОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
КонецЕсли;
ПредставлениеДоверителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Доверитель, ИНН, КПП);
ИНН = "";КПП = "";
ПредставлениеДоверителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Доверитель, РеквизитыОрганизации, ИНН, КПП);
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Доверитель";
@@ -1274,7 +1249,7 @@
Если ТаблицаДляПроверкиПервоначальнойДоверенности.НайтиСтроки(
Новый Структура("ИНН, КПП", ИНН, КПП)).Количество() = 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеДоверителя, НСтр(
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2", ПредставлениеДоверителя, НСтр(
"ru = 'отсутствует в представителях первоначальной доверенности.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
@@ -1293,7 +1268,7 @@
СтруктураОтбора.Вставить("ТабличнаяЧасть", "Доверители");
Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеДоверителя, НСтр(
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2", ПредставлениеДоверителя, НСтр(
"ru = 'указано несколько доверителей с одним ИНН.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
Иначе
@@ -1309,25 +1284,8 @@
Для Каждого Строка Из Объект.Представители Цикл
РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
ИНН = "";
КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ШаблонОшибки = НСтр("ru = 'Организация %1 - %2'");
ИНН = РеквизитыОрганизации.ИНН;
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
ШаблонОшибки = НСтр("ru = 'Физическое лицо %1 - %2'");
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
КонецЕсли;
ИНН = "";КПП = "";
ПредставлениеПредставителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Представитель, РеквизитыОрганизации, ИНН, КПП);
Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
Поле = "Представитель";
@@ -1335,8 +1293,6 @@
Поле = "ЛицоПредставителя";
КонецЕсли;
ПредставлениеПредставителя = ПредставлениеДоверителяПредставителяДляОшибки(Строка.Представитель, ИНН, КПП);
Если ЗначениеЗаполнено(ИНН) Тогда
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ИНН", ИНН);
@@ -1345,7 +1301,7 @@
Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки,
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2",
ПредставлениеПредставителя, НСтр(
"ru = 'указано несколько представителей с одним ИНН.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
@@ -1359,7 +1315,7 @@
СтруктураОтбора.Вставить("ТабличнаяЧасть", "Доверители");
Если ТаблицаДляПроверкиДублей.НайтиСтроки(СтруктураОтбора).Количество() > 0 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки,
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 - %2",
ПредставлениеПредставителя, НСтр(
"ru = 'указан представитель и доверитель с одним и тем же ИНН.'"));
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,, Поле,, Отказ);
@@ -1373,26 +1329,37 @@
КонецФункции
&НаСервере
Функция ПредставлениеДоверителяПредставителяДляОшибки(Ссылка, ИНН, КПП)
Если ЗначениеЗаполнено(Ссылка) Тогда
Функция ПредставлениеДоверителяПредставителяДляОшибки(Ссылка, РеквизитыОрганизации, ИНН = Неопределено, КПП = Неопределено)
ИНН = "";
КПП = "";
Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ИНН = РеквизитыОрганизации.ИНН;
Наименование = РеквизитыОрганизации.НаименованиеПолное;
Если ЗначениеЗаполнено(КПП) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (ИНН: %2, КПП %3)'"), Ссылка, ИНН, КПП);
Иначе
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (ИНН: %2)'"), Ссылка, ИНН);
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
КПП = РеквизитыОрганизации.КПП;
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(КПП) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с ИНН: %1, КПП %2'"), ИНН, КПП);
Иначе
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с ИНН: %1'"), ИНН);
Наименование = СтрШаблон("%1 %2 %3",
РеквизитыОрганизации.Фамилия, РеквизитыОрганизации.Имя, РеквизитыОрганизации.Отчество);
Если Не РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ИНН = РеквизитыОрганизации.ИННФЛ;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(КПП) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (ИНН: %2, КПП %3)'"), ?(ЗначениеЗаполнено(Ссылка), Ссылка, Наименование), ИНН, КПП);
ИначеЕсли ЗначениеЗаполнено(ИНН) Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (ИНН: %2)'"), ?(ЗначениеЗаполнено(Ссылка), Ссылка, Наименование), ИНН);
Иначе
Возврат ?(ЗначениеЗаполнено(Ссылка), Строка(Ссылка), Строка(Наименование));
КонецЕсли;
КонецФункции
&НаКлиенте
@@ -1677,6 +1644,11 @@
&НаКлиентеНаСервереБезКонтекста
Функция ВнешнийСтатус(Форма)
Если Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Просрочена") Тогда
Возврат Форма.Объект.Статус <> ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Черновик") Или Форма.ЗарегистрированаВДругомРеестре;
КонецЕсли;
Возврат МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ВнешниеСтатусы()[Форма.ТехническийСтатус] = Истина
Или Форма.ЗарегистрированаВДругомРеестре;
КонецФункции
@@ -1883,11 +1855,11 @@
Если Не Форма.Просрочена И (Форма.Подписана Или Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")) Тогда
Если Не Форма.Объект.РегистрироватьВРеестре Тогда
Форма.Элементы.ФормаОтправить.Видимость = Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре;
Форма.Элементы.ФормаОтправить.Видимость = Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре И Не Форма.ТолькоПросмотр;
Форма.Элементы.ФормаОтправить.Заголовок = НСтр("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 - штучные запросы в количестве загружаемых доверенностей
ЗаполнитьПередовериеИзОбъектаXDTO(Объект, ОписаниеДоверенности);
ПредыдущаяДоверенность = РеквизитыДоверенностиОснования(ОписаниеДоверенности);
ПредыдущаяДоверенность = РеквизитыДоверенностиОснования(ОписаниеДоверенности, Истина);
Иначе
ЗаполнитьДоверенность(Объект, ОписаниеДоверенности);
КонецЕсли;
@@ -1970,7 +1978,7 @@
Функция ДобавитьОрганизациюДоверителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице)
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, Истина);
РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация());
@@ -1993,7 +2001,7 @@
Функция ДобавитьОрганизациюПредставителя(Объект, СвязаннаяОрганизация, СведенияОЮридическомЛице)
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, Истина);
РеквизитыУчастника = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
ТипЭлементаОрганизация(), Неопределено, ВидУчастникаРоссийскаяОрганизация());
@@ -3372,7 +3380,7 @@
КонецФункции
Функция РеквизитыДоверенностиОснования(ОписаниеДоверенности)
Функция РеквизитыДоверенностиОснования(ОписаниеДоверенности, ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям = Ложь)
Документ = ОписаниеДоверенности.Документ;
Передоверие = Документ.Передов;
@@ -3400,7 +3408,7 @@
Если ТипДоверителя = "1" Тогда
СведенияОЮридическомЛице = Доверитель.РосОргДовер;
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице);
Параметры = РеквизитыЮридическогоЛица(СведенияОЮридическомЛице, ВычислятьЗначенияКонтактнойИнформацииПоПредставлениям);
ИначеЕсли ТипДоверителя = "2" Тогда
@@ -161,7 +161,7 @@
РодительскаяДоверенность = ДанныеЗаполнения;
РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РодительскаяДоверенность,
"Представители, Полномочия, Ограничения, НомерДоверенности, РегистрироватьВРеестре, ВозможностьПередоверия, ФайлДоверенности, ТекстПолномочий, ПолномочияВТекстовомВиде");
"ДатаОкончания, Представители, Полномочия, Ограничения, НомерДоверенности, РегистрироватьВРеестре, ВозможностьПередоверия, ФайлДоверенности, ТекстПолномочий, ПолномочияВТекстовомВиде");
Если Не ЗначениеЗаполнено(РеквизитыРодительскойДоверенности.ВозможностьПередоверия)
Или РеквизитыРодительскойДоверенности.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.БезПередоверия Тогда
@@ -234,6 +234,7 @@
НСтр("ru = 'Передоверие полномочий доверенности %1 от индивидуального предпринимателя может быть создано только нотариусом.'"), РодительскаяДоверенность);
КонецЕсли;
ДатаОкончания = РеквизитыРодительскойДоверенности.ДатаОкончания;
ПолномочияВТекстовомВиде = РеквизитыРодительскойДоверенности.ПолномочияВТекстовомВиде;
ТекстПолномочий = РеквизитыРодительскойДоверенности.ТекстПолномочий;
Полномочия.Загрузить(РеквизитыРодительскойДоверенности.Полномочия.Выгрузить());
@@ -97,6 +97,11 @@
<maxValue xsi:type="core:UndefinedValue"/>
</standardAttributes>
<createOnInput>Use</createOnInput>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<objectPresentation>
@@ -984,6 +989,11 @@
<key>ru</key>
<value>Форма элемента</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
@@ -1124,6 +1124,8 @@
&НаСервере
Процедура ИзменитьПометкуУдаленияИВладельцаЗначений(ТекущееСвойство, ПометкаУдаленияСвойства)
// АПК:1328-выкл Блокировка устанавливается выше по стеку.
// АПК:1327-выкл Блокировка устанавливается выше по стеку.
СтарыйВладелецЗначений = ТекущееСвойство;
НоваяПометкаЗначений = Неопределено;
@@ -1263,6 +1265,9 @@
КонецЕсли;
КонецЦикла;
// АПК:1327-вкл
// АПК:1328-вкл
КонецПроцедуры
#КонецОбласти
@@ -290,7 +290,7 @@
<name>ПрименяемыеПравилаКоманднаяПанель</name>
<id>3</id>
<items xsi:type="form:Button">
<name>ПрименяемыеПравилаПрименить</name>
<name>Применить</name>
<id>13</id>
<title>
<key>ru</key>
@@ -302,7 +302,7 @@
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ПрименяемыеПравилаПрименитьРасширеннаяПодсказка</name>
<name>ПрименитьРасширеннаяПодсказка</name>
<id>26</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -1599,6 +1599,211 @@
УправлениеДоступомСлужебный.ДобавитьСвойстваВерсии(Контекст, Структура, ИменаПолей);
КонецПроцедуры
// Только для внутреннего использования.
//
// Параметры:
// Объект - СправочникОбъект.ПрофилиГруппДоступа
// - СправочникОбъект.ИдентификаторыОбъектовМетаданных
// - СправочникОбъект.ИдентификаторыОбъектовРасширений
// СтарыеЗначения - Структура
//
Процедура ЗарегистрироватьИзменениеРолейПрофилей(Объект, СтарыеЗначения) Экспорт
Данные = Новый Структура;
Данные.Вставить("ВерсияСтруктурыДанных", 1);
Данные.Вставить("ИзменениеРолей", Новый Массив);
Данные.Вставить("ПредставлениеРолей", Новый Массив);
Данные.Вставить("ПредставлениеПрофилей", Новый Массив);
Если ТипЗнч(Объект) = Тип("СправочникОбъект.ПрофилиГруппДоступа") Тогда
АктивностьПрофиляИзменена = Объект.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления;
ИзменениеРолей = Объект.Роли.Выгрузить();
ИзменениеРолей.Свернуть("Роль");
ИзменениеРолей.Колонки.Добавить("ВидИзменения", Новый ОписаниеТипов("Строка"));
ИзменениеРолей.ЗаполнитьЗначения("Добавлено", "ВидИзменения");
Если ТипЗнч(СтарыеЗначения.Роли) = Тип("РезультатЗапроса")
И Не СтарыеЗначения.Роли.Пустой() Тогда
СтарыеРоли = СтарыеЗначения.Роли.Выгрузить();
СтарыеРоли.Индексы.Добавить("Роль");
Индекс = ИзменениеРолей.Количество();
Пока Индекс > 0 Цикл
Индекс = Индекс - 1;
НоваяРоль = ИзменениеРолей.Получить(Индекс);
СтараяРоль = СтарыеРоли.Найти(НоваяРоль.Роль, "Роль");
Если СтараяРоль = Неопределено Тогда
Продолжить;
КонецЕсли;
Если АктивностьПрофиляИзменена Тогда
НоваяРоль.ВидИзменения = "Изменено";
Иначе
ИзменениеРолей.Удалить(НоваяРоль);
КонецЕсли;
СтарыеРоли.Удалить(СтараяРоль);
КонецЦикла;
Для Каждого СтараяРоль Из СтарыеРоли Цикл
НоваяСтрока = ИзменениеРолей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтараяРоль);
НоваяСтрока.ВидИзменения = "Удалено";
КонецЦикла;
КонецЕсли;
Если Не АктивностьПрофиляИзменена
И Не ЗначениеЗаполнено(ИзменениеРолей) Тогда
Возврат;
КонецЕсли;
СериализованнаяСсылкаПрофиля = СериализованнаяСсылка(Объект.Ссылка);
ИдентификаторыРолей = ИзменениеРолей.ВыгрузитьКолонку("Роль");
СвойстваРолей = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ИдентификаторыРолей,
"ПометкаУдаления, Имя, Синоним");
МетаданныеРолей = ОбщегоНазначения.ОбъектыМетаданныхПоИдентификаторам(ИдентификаторыРолей, Ложь);
Для Каждого Строка Из ИзменениеРолей Цикл
Если Не ЗначениеЗаполнено(Строка.Роль) Тогда
Продолжить;
КонецЕсли;
СериализованнаяСсылкаРоли = СериализованнаяСсылка(Строка.Роль);
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылкаПрофиля);
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ВидИзменения", Строка.ВидИзменения);
Данные.ИзменениеРолей.Добавить(Свойства);
МетаданныеРоли = МетаданныеРолей.Получить(Строка.Роль);
СвойстваРоли = СвойстваРолей.Получить(Строка.Роль);
ИмяРоли = Неопределено;
СинонимРоли = Неопределено;
Если ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных") Тогда
ИмяРоли = МетаданныеРоли.Имя;
СинонимРоли = МетаданныеРоли.Синоним;
ИначеЕсли СвойстваРоли <> Неопределено Тогда
ИмяРоли = СвойстваРоли.Имя;
СинонимРоли = СвойстваРоли.Синоним;
КонецЕсли;
ПометкаУдаленияРоли = ?(СвойстваРоли = Неопределено,
Неопределено, СвойстваРоли.ПометкаУдаления);
Свойства = Новый Структура;
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ПометкаУдаления", ПометкаУдаленияРоли);
Свойства.Вставить("ЕстьВМетаданных", ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"));
Свойства.Вставить("Имя", ИмяРоли);
Свойства.Вставить("Синоним", СинонимРоли);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Данные.ПредставлениеРолей.Добавить(Свойства);
КонецЦикла;
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылка(Объект.Ссылка));
Свойства.Вставить("Представление", ПредставлениеСсылки(Объект.Ссылка));
Свойства.Вставить("ПометкаУдаления", Объект.ПометкаУдаления);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Если Объект.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("ПометкаУдаления", СтарыеЗначения.ПометкаУдаления);
КонецЕсли;
Данные.ПредставлениеПрофилей.Добавить(Свойства);
Иначе
Если Объект.ПометкаУдаления = СтарыеЗначения.ПометкаУдаления Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Роль", Объект.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| ПрофилиГруппДоступа.Ссылка КАК Ссылка,
| ПрофилиГруппДоступа.ПометкаУдаления КАК ПометкаУдаления,
| ПрофилиГруппДоступа.Представление КАК Представление
|ИЗ
| Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа
|ГДЕ
| ПрофилиГруппДоступа.Ссылка В
| (ВЫБРАТЬ
| РолиПрофилей.Ссылка
| ИЗ
| Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофилей
| ГДЕ
| РолиПрофилей.Роль = &Роль)";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
СериализованнаяСсылкаРоли = СериализованнаяСсылка(Объект.Ссылка);
МетаданныеРоли = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Объект.Ссылка, Ложь);
ИмяРоли = ?(ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"), МетаданныеРоли.Имя, Объект.Имя);
СинонимРоли = ?(ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"), МетаданныеРоли.Синоним, Объект.Синоним);
Свойства = Новый Структура;
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ПометкаУдаления", Объект.ПометкаУдаления);
Свойства.Вставить("ЕстьВМетаданных", ТипЗнч(МетаданныеРоли) = Тип("ОбъектМетаданных"));
Свойства.Вставить("Имя", ИмяРоли);
Свойства.Вставить("Синоним", СинонимРоли);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Если Объект.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("ПометкаУдаления", СтарыеЗначения.ПометкаУдаления);
КонецЕсли;
Если Объект.Имя <> СтарыеЗначения.Имя Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("Имя",
?(ТипЗнч(СтарыеЗначения.Имя) = Тип("Строка"), СтарыеЗначения.Имя, ""));
КонецЕсли;
Если Объект.Синоним <> СтарыеЗначения.Синоним Тогда
Свойства.СтарыеЗначенияСвойств.Вставить("Синоним",
?(ТипЗнч(СтарыеЗначения.Синоним) = Тип("Строка"), СтарыеЗначения.Синоним, ""));
КонецЕсли;
Данные.ПредставлениеРолей.Добавить(Свойства);
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СериализованнаяСсылкаПрофиля = СериализованнаяСсылка(Выборка.Ссылка);
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылкаПрофиля);
Свойства.Вставить("Роль", СериализованнаяСсылкаРоли);
Свойства.Вставить("ВидИзменения", "Изменено");
Данные.ИзменениеРолей.Добавить(Свойства);
Свойства = Новый Структура;
Свойства.Вставить("Профиль", СериализованнаяСсылкаПрофиля);
Свойства.Вставить("Представление", Выборка.Представление);
Свойства.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
Свойства.Вставить("СтарыеЗначенияСвойств", Новый Структура);
Данные.ПредставлениеПрофилей.Добавить(Свойства);
КонецЦикла;
КонецЕсли;
ИмяСобытия = УправлениеДоступомСлужебный.ИмяСобытияИзменениеРолейПрофилейДляЖурналаРегистрации();
ЗаписьЖурналаРегистрации(ИмяСобытия,
УровеньЖурналаРегистрации.Информация,
Объект.Метаданные(),
ОбщегоНазначения.ЗначениеВСтрокуXML(Данные),
,
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
КонецПроцедуры
// См. ПользователиСлужебный.СериализованнаяСсылка
Функция СериализованнаяСсылка(Ссылка)
Возврат ПользователиСлужебный.СериализованнаяСсылка(Ссылка);
КонецФункции
// См. ПользователиСлужебный.ПредставлениеСсылки
Функция ПредставлениеСсылки(Ссылка)
Возврат ПользователиСлужебный.ПредставлениеСсылки(Ссылка);
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции для поддержки обмена данными в РИБ.
@@ -18,18 +18,24 @@
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ЭтоГруппа Тогда
Возврат;
КонецЕсли;
Если ЭтоГруппа Тогда
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
Или Не ОбменДанными.Загрузка Тогда
СтарыеЗначения = СтарыеЗначения();
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
РегистрыСведений.ПраваРолей.ПроверитьДанныеРегистра();
СтарыеЗначения = СтарыеЗначения();
Если Не Справочники.ВерсииРасширений.ВсеРасширенияПодключены() Тогда
Справочники.ПрофилиГруппДоступа.ВосстановитьНесуществующиеВидыИЗначенияДоступа(СтарыеЗначения, ЭтотОбъект);
КонецЕсли;
@@ -123,18 +129,32 @@
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если ЭтоГруппа Тогда
Возврат;
КонецЕсли;
Если ЭтоГруппа Тогда
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Справочники.ПрофилиГруппДоступа.ЗарегистрироватьИзменениеРолейПрофилей(ЭтотОбъект, СтарыеЗначения);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеУчастниковГруппДоступа(ЭтотОбъект, СтарыеЗначения);
Справочники.ГруппыДоступа.ЗарегистрироватьИзменениеРазрешенныхЗначений(ЭтотОбъект, СтарыеЗначения);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроверитьОднозначностьПоставляемыхДанных();
// При установке пометки удаления нужно установить пометку удаления у групп доступа профиля.
Если ПометкаУдаления И СтарыеЗначения.ПометкаУдаления = Ложь Тогда
Если Справочники.ГруппыДоступа.УстановленаПометкаУдаленияПрофиля(ЭтотОбъект, СтарыеЗначения) Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Профиль", Ссылка);
Запрос.Текст =
@@ -158,17 +178,20 @@
КонецЦикла;
Блокировка.Заблокировать();
Для каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл
УстановитьПривилегированныйРежим(Истина);
Для Каждого ГруппаДоступаСсылка Из ИзмененныеГруппыДоступа Цикл
ГруппаДоступаОбъект = ГруппаДоступаСсылка.ПолучитьОбъект();
ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить("УстановкаПометкиУдаленияГруппыДоступаПриУстановкеПометкиУдаленияПрофиля");
ГруппаДоступаОбъект.ПометкаУдаления = Истина;
ГруппаДоступаОбъект.Записать();
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПопытки;
КонецЕсли;
Если ДополнительныеСвойства.Свойство("ОбновитьГруппыДоступаПрофиля") Тогда
@@ -629,8 +629,10 @@
КонецЕсли;
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
ПреобразоватьПараметрыТекста(ТекущийОбъект, "ПредставлениеВПараметры");
ПреобразоватьПараметрыНастроекОтчетов(ТекущийОбъект, "ПредставлениеВПараметры");
Если Не Отказ Тогда
ПреобразоватьПараметрыТекста(ТекущийОбъект, "ПредставлениеВПараметры");
ПреобразоватьПараметрыНастроекОтчетов(ТекущийОбъект, "ПредставлениеВПараметры");
КонецЕсли;
КонецПроцедуры
@@ -3719,7 +3721,7 @@
&НаКлиенте
Процедура ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки()
Если НЕ Объект.Персонализирована Тогда
Если НЕ Объект.Персонализирована Или Элементы.Отчеты.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
@@ -790,6 +790,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -855,6 +856,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -936,6 +938,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1001,6 +1004,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1272,6 +1276,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1337,6 +1342,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1418,6 +1424,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1483,6 +1490,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1749,6 +1757,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1814,6 +1823,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1895,6 +1905,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1960,6 +1971,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2177,7 +2189,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<maxWidth>70</maxWidth>
<height>1</height>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
@@ -2257,6 +2269,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2322,6 +2335,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2403,6 +2417,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2468,6 +2483,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2735,6 +2751,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2800,6 +2817,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2881,6 +2899,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2946,6 +2965,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2958,6 +2978,43 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</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>
<enabled>true</enabled>
<userVisible>
@@ -3213,6 +3270,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3278,6 +3336,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3359,6 +3418,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3424,6 +3484,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3690,6 +3751,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3755,6 +3817,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3836,6 +3899,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3901,6 +3965,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -5168,6 +5233,167 @@
<common>true</common>
</edit>
</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>
<name>Проверить</name>
<title>
@@ -5221,6 +5447,12 @@
<stringQualifiers/>
</valueType>
</parameters>
<parameters>
<name>ТипПодписи</name>
<valueType>
<types>EnumRef.ТипыПодписиКриптографии</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<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 @@
ПроверкиНаСервере = Новый Структура;
ДополнительныеДанныеПроверокНаКлиенте = Новый Структура;
ДополнительныеДанныеПроверокНаСервере = Новый Структура;
СертификатыМетокВремени.Очистить();
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
// Очистка предыдущих результатов проверки.
Если СтандартныеПроверки Тогда
@@ -976,13 +1013,60 @@
КонецЕсли;
ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Ложь);
// Подписание.
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.МенеджерКриптографии.НачатьПодписывание(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодписания", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПодписания", ЭтотОбъект),
Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
Иначе
ПарольПринят = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени);
Контекст.МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст);
Иначе
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
КонецЕсли;
@@ -1053,6 +1137,7 @@
// Проверка подписи.
Если ДанныеПодписи <> Null И ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.Вставить("ДанныеПодписи", ДанныеПодписи);
Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписи", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект),
@@ -1112,7 +1197,7 @@
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт
Асинх Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт
Если Сертификат <> Null Тогда
Если ТипЗнч(Сертификат) = Тип("Строка") Тогда
@@ -1120,7 +1205,47 @@
Иначе
ОписаниеОшибки = "";
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи
<> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваПодписиЧтениеМенеджеромКриптографии(
Контекст.ДанныеПодписи, Контекст.МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии();
Ждать СертификатМеткиВремени.ИнициализироватьАсинх(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебныйКлиент.РазницаСУниверсальнымВременем());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток",
СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаКлиенте = Истина;
НоваяСтрока.Представление = СвойстваСертификата.Представление;
Иначе
Найдено[0].ПолученНаКлиенте = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения(
@@ -1795,6 +1920,29 @@
КонецПопытки;
ПарольПринят = Не ЗначениеЗаполнено(ОписаниеОшибки);
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени);
МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ДанныеПодписи = МенеджерКриптографии.Подписать(ДанныеСертификата, СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
@@ -1802,13 +1950,49 @@
&НаСервере
Процедура ПроверитьПодписьНаСервере(МенеджерКриптографии, ДанныеСертификата, ДанныеПодписи)
ОписаниеОшибки = "";
Попытка
МенеджерКриптографии.ПроверитьПодпись(ДанныеСертификата, ДанныеПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии(
ДанныеПодписи, МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток", СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаСервере = Истина;
Иначе
Найдено[0].ПолученНаСервере = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецПроцедуры
@@ -2085,7 +2269,7 @@
ЭлементФормыНадписьРешение.Заголовок = НСтр("ru = 'См. пункт Подписание данных.'");
Возврат;
КонецЕсли;
ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере);
ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере, Действие = "ПроверкаПодписи");
ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено;
Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка;
@@ -2093,10 +2277,10 @@
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ОписаниеИзвестнойОшибки.ДействияДляУстранения) Тогда
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(Неопределено);
ДанныеДляДополнения.ДанныеСертификата = ПолучитьИзВременногоХранилища(Форма.АдресСертификата);
Если ЗначениеЗаполнено(Форма.Сертификат) И ЗначениеЗаполнено(ОписаниеИзвестнойОшибки.ДействияДляУстранения) Тогда
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(
Новый Структура("Сертификат, ДанныеСертификата", Форма.Сертификат, Форма.АдресСертификата));
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора();
Дополнение = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями(
@@ -2124,21 +2308,21 @@
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаНеВыполнялась;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки <> Неопределено И ЗначениеПроверкиВторогоКонтекста = Неопределено Тогда
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки <> Неопределено И РезультатПроверки Тогда
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементКартинка.Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли;
Возврат;
@@ -2158,15 +2342,15 @@
ГруппаОшибка.Видимость = Ложь;
ЭлементРешение.Видимость = Ложь;
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента)
Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента, ТипПодписи)
ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента);
ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи);
Если Не ПустаяСтрока(ЗаголовокЭлемента) Тогда
Возврат ЗаголовокЭлемента;
КонецЕсли;
@@ -2181,7 +2365,7 @@
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента)
Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи)
Если ИмяЭлемента = "ЗаконныйСертификатНадпись" Тогда
Возврат НСтр("ru = 'Соответствие законодательству Российской Федерации'");
@@ -2196,7 +2380,17 @@
Возврат НСтр("ru = 'Наличие приложения для подписания и расшифровки'");
ИначеЕсли ИмяЭлемента = "ПодписаниеНадпись" Тогда
Возврат НСтр("ru = 'Подписание данных'");
Если ЗначениеЗаполнено(ТипПодписи) Тогда
ТипПодписиСтрока = Строка(ТипПодписи);
ТипПодписиСтрока = НРег(Лев(ТипПодписиСтрока, 1)) + Сред(ТипПодписиСтрока, 2);
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подписание данных типом подписи - %1'"), ТипПодписиСтрока);
Иначе
Возврат НСтр("ru = 'Подписание данных'");
КонецЕсли;
ИначеЕсли ИмяЭлемента = "ПроверкаПодписиНадпись" Тогда
Возврат НСтр("ru = 'Проверка созданной подписи'");
@@ -2243,9 +2437,9 @@
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере)
Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи)
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере);
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи);
КонецФункции
@@ -1214,6 +1214,20 @@
</edit>
</columns>
</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>
<name>Обновить</name>
<title>
@@ -31,11 +31,15 @@
ВариантУстановки = СписокВыбора[0].Значение;
Элементы.ВариантУстановки.ТолькоПросмотр = СписокВыбора.Количество() = 1;
СертификатДвоичныеДанные = Неопределено;
Если ЭтоАдресВременногоХранилища(Параметры.Сертификат) Тогда
СертификатДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.Сертификат);
АдресСертификата = Параметры.Сертификат;
ИначеЕсли ЗначениеЗаполнено(Параметры.Сертификат) Тогда
СертификатДвоичныеДанные = Base64Значение(Параметры.Сертификат);
АдресСертификата = ПоместитьВоВременноеХранилище(СертификатДвоичныеДанные, УникальныйИдентификатор);
КонецЕсли;
Если СертификатДвоичныеДанные <> Неопределено Тогда
@@ -45,6 +49,7 @@
СертификатОписаниеДанных, СвойстваСертификата);
КонецЕсли;
Элементы.ПоказатьДанныеСертификата.Видимость = ЗначениеЗаполнено(АдресСертификата);
Элементы.ДекорацияТекущийКонтейнер.Видимость = Ложь;
КонецПроцедуры
@@ -127,7 +132,7 @@
&НаКлиенте
Процедура ПоказатьДанныеСертификата(Команда)
ЭлектроннаяПодписьКлиент.ОткрытьСертификат(Параметры.Сертификат, Истина);
ЭлектроннаяПодписьКлиент.ОткрытьСертификат(АдресСертификата, Истина);
КонецПроцедуры
@@ -332,7 +332,7 @@
КонецЕсли;
ЭлектроннаяПодписьКлиент.ПроверитьСертификатСправочника(Объект.Ссылка,
Новый Структура("БезПодтверждения", Истина));
Новый Структура("БезПодтверждения, ТипПодписи", Истина, ТипПодписиПоУмолчанию()));
КонецПроцедуры
@@ -873,6 +873,7 @@
КонецЕсли;
Результат = Новый СписокЗначений;
Результат.Добавить(Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка(), НСтр("ru = 'По умолчанию'"));
ТекстЗапроса =
"ВЫБРАТЬ
@@ -962,4 +963,11 @@
КонецФункции
&НаСервереБезКонтекста
Функция ТипПодписиПоУмолчанию()
Возврат Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
КонецФункции
#КонецОбласти
@@ -163,7 +163,7 @@
ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата =
ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(
"Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата");
КонецЕсли;
КонецЕсли;
Пока Выборка.Следующий() Цикл
@@ -235,17 +235,47 @@
Исключение
Сертификат = Неопределено;
КонецПопытки;
Если Сертификат <> Неопределено Тогда
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
Сертификат, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата);
Сертификат, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(),
ДвоичныеДанныеСертификата);
Если СертификатОбъект.ДействителенДо <> СвойстваСертификата.ДействителенДо Тогда
СтрокаПоиска = Формат(СертификатОбъект.ДействителенДо, "ДФ=MM.yyyy");
СтрокаЗамены = Формат(СвойстваСертификата.ДействителенДо, "ДФ=MM.yyyy");
СертификатОбъект.Наименование = СтрЗаменить(СертификатОбъект.Наименование, СтрокаПоиска, СтрокаЗамены);
СертификатОбъект.Наименование = СтрЗаменить(СертификатОбъект.Наименование, СтрокаПоиска,
СтрокаЗамены);
СертификатОбъект.ДействителенДо = СвойстваСертификата.ДействителенДо;
ЗаписатьОбъект = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(СертификатОбъект.Программа) И ТипЗнч(СертификатОбъект.Программа) = Тип(
"СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования") Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанныеСертификата, Ложь, Истина);
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ЭтоСертификатГОСТ(АлгоритмСертификата) Тогда
ОписаниеПрограммы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
СертификатОбъект.Программа,
"ЭтоВстроенныйКриптопровайдер, АлгоритмПодписи, АлгоритмХеширования");
Если Не ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
"", АлгоритмСертификата, ОписаниеПрограммы.АлгоритмПодписи, ОписаниеПрограммы.АлгоритмХеширования);
Если Результат <> Истина Тогда
СертификатОбъект.Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
ЗаписатьОбъект = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -28,12 +28,38 @@
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если Программа = Неопределено Тогда
Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
КонецЕсли;
Если ЗначениеЗаполнено(Программа) И ТипЗнч(Программа) = Тип(
"СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования") И ЗначениеЗаполнено(Отпечаток) Тогда
ОписаниеПрограммы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Программа,
"ЭтоВстроенныйКриптопровайдер, АлгоритмПодписи, АлгоритмХеширования");
Если Не ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
ДвоичныеДанные = ДанныеСертификата.Получить();
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанные, Ложь, Истина);
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
Наименование, АлгоритмСертификата, ОписаниеПрограммы.АлгоритмПодписи,
ОписаниеПрограммы.АлгоритмХеширования);
Если Результат <> Истина Тогда
ВызватьИсключение Результат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
КонецПроцедуры
@@ -72,9 +72,8 @@
<li><strong>Дата подписи</strong> - дата подписания файла;
</li>
<li><b>Тип подписи</b> - существует несколько типов подписей в зависимости от срока действия;</li>
<li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи;
</li>
<li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки.</li></ul><p>С помощью кнопок панели навигации можно:</p>
<li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки;</li>
<li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи.</li></ul><p>С помощью кнопок панели навигации можно:</p>
<ul><li><strong>Подписать</strong> файл;
</li>
<li><strong>Открыть </strong>- открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись;
@@ -83,10 +82,11 @@
</li>
<li><strong>Проверить все</strong> - проверить все подписи;
</li>
<li><strong>Удалить</strong> у файла электронную подпись.</li>
<li><strong>Сохранить</strong> электронную подпись <strong>в файл </strong>на устройство;
</li>
<li><strong>Удалить</strong> у файла электронную подпись.</li>
<li><b>Продлить действие</b> - Если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает <a href="CommonForm.ПродлениеСрокаДействияЭлектронныхПодписей/Help">способы усовершенствования</a> подписи. Для этого выберите нужный тип подписи из списка.</li></ul><h3>Разрешено расшифровывать</h3>
<li><b>Проверена вручную </b>- ввести обоснование достоверности подписи, если подпись не проходит автоматическую проверку. Например, когда недоступен список отзыва, но известно, что сертификат не отозван;</li>
<li><b>Продлить действие</b> - если в приложении применяются подписи с доверенной меткой времени, то можно усовершенствовать выбранную подпись - добавить доверенную метку времени. Приложение предлагает <a href="CommonForm.ПродлениеСрокаДействияЭлектронныхПодписей/Help">способы усовершенствования</a> подписи. Для этого выберите нужный тип подписи из списка.</li></ul><h3>Разрешено расшифровывать</h3>
<ul><li>
<div>На вкладке размещаются сведения о шифровании файла:</div>
</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.Видимость = Ложь;
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Заголовок = НСтр("ru='Создать'");
КонецЕсли;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда
Если Не ДоступныеВарианты.Почта Тогда
Элементы.ФормаГруппаСоздать.Вид = ВидГруппыФормы.ГруппаКнопок;
Элементы.ФормаСоздатьШаблонЭлектронногоПисьма.Видимость = Ложь;
Элементы.ФормаСоздатьШаблонСообщенияSMS.Заголовок = НСтр("ru='Создать'");
@@ -192,8 +186,13 @@
НСтр("ru = 'Всех сообщений'"),
НСтр("ru = 'Всех сообщений'"));
Список.Параметры.УстановитьЗначениеПараметра("СообщениеSMS", ВидыШаблонов.НайтиПоЗначению("SMS").Представление);
Список.Параметры.УстановитьЗначениеПараметра("ЭлектроннаяПочта", ВидыШаблонов.НайтиПоЗначению("Email").Представление);
ДоступныеВарианты = ШаблоныСообщенийСлужебный.ДоступныеВариантыОтправкиШаблоновСообщений();
Если ДоступныеВарианты.SMS Тогда
Список.Параметры.УстановитьЗначениеПараметра("СообщениеSMS", ВидыШаблонов.НайтиПоЗначению("SMS").Представление);
КонецЕсли;
Если ДоступныеВарианты.Почта Тогда
Список.Параметры.УстановитьЗначениеПараметра("ЭлектроннаяПочта", ВидыШаблонов.НайтиПоЗначению("Email").Представление);
КонецЕсли;
Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьКонтекстныеШаблоны", ПоказыватьКонтекстныеШаблоны);
Список.Параметры.УстановитьЗначениеПараметра("Произвольный", НСтр("ru = 'Произвольного сообщения'"));
@@ -5,7 +5,7 @@
<ul><li>Для удобства поиска шаблонов в списке предусмотрены отборы.
</li>
<li>Можно отобрать с помощью поля <strong>Шаблон для</strong>:
<ul><li><strong>Электронных писем и SMS</strong>;
<ul><li><strong>Всех сообщений</strong>;
</li>
<li><strong>Электронного письма</strong>;
</li>
@@ -285,7 +285,7 @@
СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДополнительныйРеквизит.Свойство, "Заголовок, ТипЗначения", , ТекущийЯзык().КодЯзыка);
СтрокаРеквизит = РеквизитыОбъекта.Добавить();
СтрокаРеквизит.Реквизит = ДополнительныйРеквизит.Свойство;
СтрокаРеквизит.Представление = СвойстваОбъекта.Заголовок;
СтрокаРеквизит.Представление = Строка(ДополнительныйРеквизит.Свойство);
СтрокаРеквизит.НомерКартинки = 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>
<p>Настройка параметров для использования средств электронной подписи и шифрования (криптографии). </p>
<p>Открывается по команде <strong>Настройки электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p>
<p>Настройка параметров для использования средств электронной подписи и шифрования (криптографии). </p>
<p>Открывается по команде <strong>Настройки электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p>
<p>Для электронной подписи и шифрования требуется установить специальное стороннее приложение (криптопровайдер).</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>Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты <b>ExtraCryptoAPI</b>. Установить компоненту можно<b> </b>через меню <b>Еще - Установить компоненту</b> <b>ExtraCryptoAPI.</b></p>
<h3>Сертификаты</h3>
@@ -14,32 +14,29 @@
<li>Предусмотрен отбор по полю <strong>Состояние заявления</strong> ("Любое", "Не подготовлено", "Подготовлено", "Отправлено", "Отклонено", "Исполнено, сертификат не установлен", "Исполнено").
</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>Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Приложения</h3>
<ul><li>Содержит список настроенных приложений, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ). </li>
<li>Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними.
<li>Выпустить повторно сертификат, у которого закончился срок действия можно с помощью кнопки <strong>Перевыпустить (cкопировать, F9)</strong>.</li>
<li>Просмотреть сертификат или заявление на выпуск нового сертификата можно, дважды щелкнув по нему мышью. Также можно это сделать с помощью команды <strong>Изменить</strong> контекстного меню по правой кнопке мыши или меню <strong>Еще</strong>.</li></ul><h3>Приложения</h3>
<ul><li>Содержит список настроенных приложений, которые будут использованы в информационной базе (в том числе во всех узлах распределенной ИБ). </li>
<li>Данные приложения не обязательно должны быть установлены на всех компьютерах. Более того, установка более одного приложения на одном компьютере может вызвать конфликты между ними.
</li>
<li>Если приложение не установлена, то после установки компоненты будет предложена гиперссылка на загрузку дистрибутива <b>ViPNet CSP</b> или <b>КриптоПро CSP</b>, поддерживающие ГОСТ. </li>
<li>По гиперссылке также можно перейти на домашние страницы других приложений, соответствующих стандартам безопасности (например, <b>ЛИССИ CSP, Сигнал-КОМ CSP</b>). </li>
<li>Если требуется использовать приложение отличную от известных, тогда нужно указать ее имя, тип и алгоритмы, как указано в инструкции, поставляемой ее производителем.</li>
<li>В колонке <strong>Результат проверки</strong> отражаются сведения, по которым можно понять установлено ли приложение на компьютере или нет или же установлена, но некорректно.</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>
<li>
<div>Напишите <strong>Расширение для файлов подписи</strong> (по умолчанию <strong>.p7s</strong>).</div>
</li>
<li>
<div>С помощью переключателя <strong>При сохранении данных в файл вместе с электронной подписью</strong> задайте поведение приложения при выполнении команды <strong>Сохранить вместе с электронной подписью</strong>: </div>
<ul><li>
<div><strong>Сохранять все подписи</strong> - все подписи сохраняются; </div>
</li>
<li>
<div><strong>Спрашивать</strong> - выбор сохраняемых подписей осуществляется из <a href="CommonForm.СохранениеВместеСЭлектроннойПодписью/Help">списка</a>.</div></li></ul></li>
<li>
<div>Включите флажок <strong>Сохранять сертификат</strong> для сохранения на компьютер сертификата вместе с файлом и электронной подписью.</div></li></ul><h3>Машиночитаемые доверенности (единый формат) </h3>
<ul><li>Для того чтобы попасть в<a href="Catalog.МашиночитаемыеДоверенности/Help"> список машиночитаемых доверенностей (МЧД)</a> перейдите по гиперссылке. </li></ul><h3>Легенда</h3>
<li>Если приложение не установлена, то после установки компоненты будет предложена гиперссылка на загрузку дистрибутива <b>ViPNet CSP</b> или <b>КриптоПро CSP</b>, поддерживающие ГОСТ. </li>
<li>По гиперссылке также можно перейти на домашние страницы других приложений, соответствующих стандартам безопасности (например, <b>ЛИССИ CSP, Сигнал-КОМ CSP</b>). </li>
<li>Если требуется использовать приложение отличную от известных, тогда нужно указать ее имя, тип и алгоритмы, как указано в инструкции, поставляемой ее производителем.</li>
<li>В колонке <strong>Результат проверки</strong> отражаются сведения, по которым можно понять установлено ли приложение на компьютере или нет или же установлена, но некорректно.</li>
<li>Linux: <strong>Путь к приложению (&lt;Имя приложения, соответствующей выделенной строке в списке&gt;)</strong> - поле, которое требуется обязательно заполнять на компьютерах под управлением ОС Linux.</li>
<li>В нижней части списка расположена ссылка <a href="http://its.1c.ru/db/metod81#content:5784:1">Инструкция по работе с приложениями электронной подписи и шифрования</a>.</li></ul><h3>Дополнительно</h3>
<h3>
<ul style="font-size: 11.199999809265137px; font-weight: normal;"><li>Задайте расширение для зашифрованных файлов при отправке по почте, при выполнении команды <strong>Сохранить как</strong> и при экспорте папки (по умолчанию <strong>.p7m</strong>);</li>
<li>Напишите расширение для файлов подписи (по умолчанию <strong>.p7s</strong>);</li>
<li>С помощью переключателя <strong>При сохранении данных в файл вместе с электронной подписью</strong> задайте поведение приложения:</li>
<ul><li><strong>Сохранять все подписи</strong> - все подписи сохраняются </li>
<li><strong>Спрашивать</strong> - выбор сохраняемых подписей осуществляется из <a href="Сохранение вместе с электронной подписью">списка</a>.</li>
<li>Включите флажок <strong>Сохранить сертификат</strong> для сохранения на компьютер сертификата вместе с файлом и электронной подписью. </li></ul></ul></h3>
<h3>
</h3>
<h3>Машиночитаемые доверенности (единый формат) </h3>
<ul><li>Для того чтобы попасть в <a href="Catalog.МашиночитаемыеДоверенности/Help"> список машиночитаемых доверенностей (МЧД)</a> перейдите по гиперссылке. </li></ul><h3>Легенда</h3>
<ul><li>Для того чтобы посмотреть состояние сертификатов нажмите раздел <strong>Легенда</strong> в нижней части списка. </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>Перейдите по этой ссылке в соответствующий раздел 1С:ИТС, если имеются вопросы.</li></ul><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, Истина);
@@ -682,7 +682,6 @@
ТекстОшибки = "";
Справочники.ВерсииРасширений.УдалитьРасширения(ИдентификаторыРасширений, ТекстОшибки);
УдалитьСвойстваРасширений(ИдентификаторыРасширений);
ОбновитьСписок();
@@ -692,15 +691,6 @@
КонецПроцедуры
&НаСервере
Процедура УдалитьСвойстваРасширений(ИдентификаторыРасширений)
Для каждого ИдентификаторРасширения Из ИдентификаторыРасширений Цикл
РегистрыСведений.СвойстваРасширений.УдалитьСвойстваРасширенияПоИдентификатору(ИдентификаторРасширения);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьРасширениеПослеПодтверждения(Результат, Контекст) Экспорт
@@ -74,6 +74,9 @@
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<font xsi:type="core:FontRef">
<font>Style.ВажнаяНадписьШрифт</font>
</font>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
@@ -500,6 +503,9 @@
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<font xsi:type="core:FontRef">
<font>Style.ВажнаяНадписьШрифт</font>
</font>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</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 секунд.
@@ -425,6 +438,41 @@
КонецФункции
// Проверяет корректность ОКМТО бюджетополучателей.
//
// Для проверки ОКТМО бюджетополучателей требуется подключение к Интернет-поддержке пользователей и наличие
// постоянного соединения с интернетом, т.к. адресные сведения, загруженные в приложение, не используются.
// Проверка выполняется порциям по 100 значений за один запросу к веб-сервису, поэтому рекомендуется выполнять
// ее в фоновом режиме.
// При получении ответа от веб-сервиса отличного от успешного (код 200 ОК) выполнение функции прерывается
// и возвращается ошибка. Поэтому если в данных результата отсутствует ОКТМО бюджетополучателя,
// то он не было проверен из-за ошибок работы с веб-сервисом.
//
// Параметры:
// ОКТМОБюджетополучателей - Массив из Строка - список ОКТМО бюджетополучателей.
// - Строка - ОКТМО бюджетополучателя.
//
// Возвращаемое значение:
// Структура:
// * Отказ - Булево - если Истина, то при получении ОКТМО бюджетополучателя через веб-сервис возникла ошибка.
// * ПредставлениеОшибкиДляПользователя - Строка - текст ошибки для отображения пользователю.
// * ИнформацияОбОшибке - ИнформацияОбОшибке - структурированная информация об ошибке.
// * Данные - Соответствие из КлючИЗначение:
// ** Ключ - Строка - ОКТМО бюджетополучателя.
// ** Значение - Структура:
// *** Успешно - Булево - если Истина, то код ОКТМО бюджетополучателей корректный;
// *** ТекстОшибки - Строка - текст ошибки, если ОКТМО некорректный;
// *** МуниципальныеОбразования - Массив из Строка - список муниципальных образований, принадлежащих данному ОКТМО.
//
Функция ПроверитьОКТМОБюджетополучателя(ОКТМОБюджетополучателей) Экспорт
СписокОКТМО = ?(ТипЗнч(ОКТМОБюджетополучателей) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОКТМОБюджетополучателей), ОКТМОБюджетополучателей);
Возврат АдресныйКлассификаторСлужебный.ПроверитьОКМТОБюджетополучателя(СписокОКТМО);
КонецФункции
#Область УстаревшиеПроцедурыИФункции
// Возвращает идентификационный код дома и адресного объекта с помощью веб-сервиса фирмы 1С предоставляющего
@@ -157,9 +157,9 @@
//
// Возвращаемое значение:
// Структура:
// * HTTPСоединение - объект для вызовов сервиса.
// * СервисКлассификатора - HTTPСоединение - объект для вызовов сервиса.
//
Функция СервисКлассификатора1С(ВремяОжидания = 120) Экспорт
Функция СервисКлассификатора1С(ВремяОжидания = 20) Экспорт
Возврат Новый Структура("СервисКлассификатора", АдресныйКлассификаторСлужебный.СервисКлассификатора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Запрос);
@@ -6983,7 +7147,7 @@
Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки;
Результат.Отказ = Истина;
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, Результат, HTTPЗапрос.АдресРесурса
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, Результат.ПодробноеПредставлениеОшибки, HTTPЗапрос.АдресРесурса
+ " X-1C-Request-UID:" + ИдентификаторЗапроса, РезультатПроверки.КодСостояния);
Возврат Результат;
@@ -7096,6 +7260,26 @@
КонецФункции
// Возвращаемое значение:
// Структура:
// * Данные - Соответствие
// * Отказ - Булево
// * ПредставлениеОшибкиДляПользователя - Строка
// * ИнформацияОбОшибке - ИнформацияОбОшибке
// - Неопределено
//
Функция НовыйРезультатИзВебСервиса()
Результат = Новый Структура;
Результат.Вставить("Данные", Новый Соответствие);
Результат.Вставить("Отказ", Ложь);
Результат.Вставить("ПредставлениеОшибкиДляПользователя", "");
Результат.Вставить("ИнформацияОбОшибке", Неопределено);
Возврат Результат;
КонецФункции
Функция ПредставлениеДомаИСтроений(ОписаниеДома)
СписокСтроений = Новый Массив;
@@ -7698,6 +7882,10 @@
Возврат "rest/v4/";
КонецФункции
Функция ПрефиксВерсииЗапросаСервисаОКТМО()
Возврат "rest/oktmo/v1/";
КонецФункции
// Возвращает информацию из классификатора субъектов РФ.
//
// Возвращаемое значение:
@@ -7989,7 +8177,7 @@
// Строка - путь к файлу описания данных.
//
Функция АдресВебСервисаКонтактнойИнформации()
Возврат "https://api.orgaddress.1c.ru";
КонецФункции
@@ -8198,7 +8386,7 @@
// Возвращаемое значение:
// HTTPСоединение - объект для вызовов сервиса.
//
Функция СервисКлассификатора1С(ВремяОжидания = 120) Экспорт
Функция СервисКлассификатора1С(ВремяОжидания = 20) Экспорт
URLПорталаПоддержки = "https://portal.1c.ru/";
СохраненныйТекущийURLПорталаПоддержки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АдресныйКлассификатор", "URLПорталаПоддержки");
@@ -8322,10 +8510,9 @@
КонецПопытки;
Если Ответ.КодСостояния <> 200 Тогда
Если ТребуетсяОбновитьТикетАвторизации(Ответ.КодСостояния) Тогда
ОписаниеСервиса.СервисКлассификатора = СервисКлассификатора1С(ВремяОжидания);
Сервис = ОписаниеСервиса.СервисКлассификатора;
Сервис = ОбновитьОписаниеСервисаКлассификатора(ОписаниеСервиса);
Попытка
Ответ = Сервис.Получить(HTTPЗапрос);
@@ -8402,7 +8589,7 @@
Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки;
ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8");
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервера, Результат, ТекстURL, Ответ.КодСостояния);
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервера, Результат.ПодробноеПредставлениеОшибки, ТекстURL, Ответ.КодСостояния);
КонецПроцедуры
@@ -8417,7 +8604,7 @@
КонецПроцедуры
Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, Результат, ТекстURL, КодСостояния)
Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния)
ШаблонТекстОтветаСервера = НСтр("ru = '%1
|Техническая информация. При запросе: %2
@@ -8425,7 +8612,7 @@
|с текстом: %4'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстОтветаСервера,
Результат.ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния, ОтветОтСервераСтрокой);
ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния, ОтветОтСервераСтрокой);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
@@ -8512,6 +8699,19 @@
КонецФункции
Функция СтрокуJSONВСоответствие(Значение)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Значение);
Результат = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
// Описание национальных полей структуры контактной информации для хранения ее в формате JSON.
// Основной список полей определяется в одноименной функции общего модуля .
//
@@ -7543,9 +7543,9 @@
Запрос.УстановитьПараметр("НазначенияВариантовОтчетов", ПараметрыЗаполнения.НазначенияВариантовОтчетов);
Запрос.УстановитьПараметр("ИскатьВоВсехРазделах", ПараметрыЗаполнения.ИскатьВоВсехРазделах);
Если ПараметрыЗаполнения.ОтображатьВсеВариантыОтчетов Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Параметр1", "ИСТИНА");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоНазначениюВариантовОтчетов", "ИСТИНА");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Параметр1", "ВариантыОтчетов.Назначение В (&НазначенияВариантовОтчетов)");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеПоНазначениюВариантовОтчетов", "ВариантыОтчетов.Назначение В (&НазначенияВариантовОтчетов)");
КонецЕсли;
ТаблицаРезультат = Запрос.Выполнить().Выгрузить();
@@ -7657,7 +7657,7 @@
|
|ГДЕ
| НЕ ВариантыОтчетов.ПометкаУдаления
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
|
|ОБЪЕДИНИТЬ ВСЕ
|
@@ -7706,7 +7706,7 @@
|ГДЕ
| (НЕ ВариантыОтчетов.ПометкаУдаления
| ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL)
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
|;
|
|////////////////////////////////////////////////////////////////////////////////
@@ -7773,7 +7773,7 @@
| ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)
| И (ВариантыОтчетов.Пользовательский
| ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
|";
Если ЗначениеЗаполнено(СуффиксТекущегоЯзыка) Тогда
@@ -7846,7 +7846,7 @@
| И (ПредставленияВариантов.КодЯзыка = &КодЯзыка)
|ГДЕ
| НЕ ВариантыОтчетов.ПометкаУдаления
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
|
|ОБЪЕДИНИТЬ ВСЕ
|
@@ -7906,7 +7906,7 @@
|ГДЕ
| (НЕ ВариантыОтчетов.ПометкаУдаления
| ИЛИ НЕ ДоступныеВариантыРасширений.Вариант ЕСТЬ NULL)
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
|;
|
|////////////////////////////////////////////////////////////////////////////////
@@ -7994,7 +7994,7 @@
| ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)
| И (ВариантыОтчетов.Пользовательский
| ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
|";
КонецЕсли;
@@ -8083,7 +8083,7 @@
| ИЛИ НЕ ВариантыОтчетов.ИнтерактивнаяПометкаУдаления)
| И (ВариантыОтчетов.Пользовательский
| ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)
| И &Параметр1
| И &УсловиеПоНазначениюВариантовОтчетов
| И втВсеВариантыСПодсистемами.Ссылка ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
@@ -1378,9 +1378,17 @@
Настройки = ИспользуемыеНастройки(Форма, СвойстваЗаголовка.ИдентификаторНастроек);
Фильтры = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрыРазделаОтчета(Настройки, СвойстваЗаголовка, ЭтоГруппировка);
Фильтры = Настройки.Отбор;
Фильтр = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрРазделаОтчета(Фильтры, СвойстваЗаголовка.Поле);
Если Настройки.Структура.Количество() > 1 Тогда
Если Фильтр = Неопределено
Или Фильтр <> Неопределено И Фильтр.ВидСравнения <> ВидСравнения Или Фильтр.ПравоеЗначение <> ДанныеРасшифровки.Значение Тогда
Фильтры = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрыРазделаОтчета(Настройки, СвойстваЗаголовка, ЭтоГруппировка);
Фильтр = ВариантыОтчетовСлужебныйКлиентСервер.ФильтрРазделаОтчета(Фильтры, СвойстваЗаголовка.Поле);
КонецЕсли;
КонецЕсли;
Если Фильтр = Неопределено Тогда
Фильтр = Фильтры.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
@@ -34,7 +34,7 @@
Процедура ОбновитьКомпонентыСПортала(Оповещение, ОбновляемыеКомпоненты) Экспорт
// Локализация
// Локализация
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОбновляемыеКомпоненты", ОбновляемыеКомпоненты);
ОткрытьФорму("Справочник.ВнешниеКомпоненты.Форма.ОбновлениеКомпонентСПортала1СИТС",
@@ -841,7 +841,7 @@
ИмяМакета = МестоположениеМакетаРазделенное.Получить(МестоположениеМакетаРазделенное.ВГраница());
Если МестоположениеМакетаРазделенное.Количество() = 2 Тогда
ДвоичныеДанныеКомпоненты = ПолучитьОбщийМакет(Местоположение);
ДвоичныеДанныеКомпоненты = ПолучитьОбщийМакет(ИмяМакета);
Иначе
МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница());
МестоположениеМакетаРазделенное.Удалить(МестоположениеМакетаРазделенное.ВГраница());
@@ -383,11 +383,10 @@
// Конструктор коллекции ПараметрыВыполненияФункции для функции ВыполнитьФункцию.
//
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск выполняется сразу в основном потоке при выполнении любого из следующих условий:
// Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя;
// * если выполняется функция модуля внешней обработки или внешнего отчета.
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
//
// Параметры:
// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы,
@@ -446,11 +445,10 @@
// Конструктор коллекции ПараметрыВыполненияПроцедуры для функции ВыполнитьПроцедуру.
//
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск выполняется сразу в основном потоке при выполнении любого из следующих условий:
// Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя;
// * если выполняется функция модуля внешней обработки или внешнего отчета.
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
//
// Возвращаемое значение:
// Структура - параметры выполнения длительной операции:
@@ -775,11 +773,10 @@
// Возвращает новую структуру для параметра ПараметрыВыполнения функции ВыполнитьВФоне.
//
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск выполняется сразу в основном потоке при выполнении любого из следующих условий:
// Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
// * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
// * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя;
// * если выполняется функция модуля внешней обработки или внешнего отчета.
// * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
//
// Параметры:
// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, во временное хранилище которой
@@ -86,16 +86,18 @@
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
Команда = Команды.Добавить();
Команда.Вид = "Органайзер";
Команда.Представление = НСтр("ru = 'Создать заметку'");
Команда.ФункциональныеОпции = "ИспользоватьЗаметки";
Команда.Картинка = БиблиотекаКартинок.Заметка;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметЗаметок.Тип;
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 50;
Команда.Обработчик = "ЗаметкиПользователяСлужебныйКлиент.СоздатьЗаметкуПоПредмету";
Команда.МножественныйВыбор = Ложь;
Если ПравоДоступа("ИнтерактивноеДобавление", Метаданные.Справочники.Заметки) Тогда
Команда = Команды.Добавить();
Команда.Вид = "Органайзер";
Команда.Представление = НСтр("ru = 'Создать заметку'");
Команда.ФункциональныеОпции = "ИспользоватьЗаметки";
Команда.Картинка = БиблиотекаКартинок.Заметка;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметЗаметок.Тип;
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 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 = 'Код подразделения не может быть нулевым.'");
КонецЕсли;
Если Сред(КодПодразделения, 4, 1) <> "-" Тогда
Возврат НСтр("ru = 'Неправильный формат кода подразделения.'");
КонецЕсли;
Возврат "";
КонецФункции
@@ -2136,10 +2198,6 @@
Функция ОшибкиПроверкиНомераПаспорта(Знач НомерПаспортаРФ)
Если ПустаяСтрока(НомерПаспортаРФ) Тогда
Возврат "";
КонецЕсли;
СтрокаЦифр = СтрЗаменить(НомерПаспортаРФ, ",", "");
СтрокаЦифр = СтрЗаменить(СтрокаЦифр, " ", "");
@@ -2594,6 +2652,7 @@
КонецФункции
Функция ПолучитьИЗаписатьОшибкуМЧДРР(ПараметрыОшибки) Экспорт
ЗаголовокОшибки = ПараметрыОшибки.ЗаголовокОшибки;
ЗапросHTTP = ПараметрыОшибки.ЗапросHTTP;
ПараметрыТекстаОшибки = ПараметрыОшибки.ПараметрыТекстаОшибки;
@@ -2610,18 +2669,33 @@
СтруктураЗначения = Новый Структура;
ТекстОшибкиИзОтвета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОтвета, "title", Неопределено);
Если ТекстОшибкиИзОтвета <> Неопределено Тогда
Если СтрЗаканчиваетсяНа(ТекстОшибки, ".") Тогда
ТекстОшибки = Лев(ТекстОшибки, СтрДлина(ТекстОшибки) - 1);
КонецЕсли;
ТекстОшибки = СтрШаблон("%1 (%2).", ТекстОшибки, ТекстОшибкиИзОтвета)
КонецЕсли;
Если Ответ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(СпособУстранения);
Иначе
Если ЗапросHTTP <> Неопределено Тогда
СтрокаЗапроса = ПолучитьИдентификаторЗапроса(ЗапросHTTP);
@@ -2646,8 +2720,7 @@
ОшибкаПоКлассификатору.Причина = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ОшибкаПоКлассификатору.Причина, ПараметрыТекстаОшибки);
ОшибкаПоКлассификатору.Вставить("ТекстОшибки",
ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОтвета, "title", ТекстОшибки));
ОшибкаПоКлассификатору.Вставить("ТекстОшибки", ТекстОшибки);
ОшибкаПоКлассификатору.Вставить("ЗаголовокОшибки", ЗаголовокОшибки);
СтруктураЗначения.Вставить("ОшибкаПоКлассификатору", ОшибкаПоКлассификатору);
@@ -2655,6 +2728,7 @@
Если ДополнительныеФайлы = Неопределено Тогда
ДополнительныеФайлы = Новый Массив;
КонецЕсли;
ДобавитьФайлДляРасследования(ДополнительныеФайлы, ДанныеФайла, НСтр("ru='Ошибка по классификатору'"), "xml");
ОшибкаПоКлассификатору.Вставить("ДополнительныеФайлы", ДополнительныеФайлы);
@@ -2664,109 +2738,29 @@
Функция ОписаниеОшибкиHTTP(КодСостояния)
Если КодСостояния < 300 Тогда
Возврат "";
ИначеЕсли КодСостояния = 300 Тогда
Возврат НСтр("ru = 'Множественный выбор при отправке ответа сервера'");
ИначеЕсли КодСостояния = 301 Тогда
Возврат НСтр("ru = 'Ресурс перемещен'");
ИначеЕсли КодСостояния = 302 Тогда
Возврат НСтр("ru = 'Ресурс временно перемещен'");
ИначеЕсли КодСостояния = 303 Тогда
Возврат НСтр("ru = 'Ресурс перемещен на другой адрес'");
ИначеЕсли КодСостояния = 304 Тогда
Возврат НСтр("ru = 'Неожиданный ответ об отсутствии изменений страницы'");
ИначеЕсли КодСостояния = 305 Тогда
Возврат НСтр("ru = 'Для доступа к ресурсу требуется прокси'");
ИначеЕсли КодСостояния = 306 Тогда
Возврат НСтр("ru = 'Неиспользуемый код перенаправления запроса'");
ИначеЕсли КодСостояния = 307 Тогда
Возврат НСтр("ru = 'Временное перенаправление'");
ИначеЕсли КодСостояния < 400 Тогда
Если КодСостояния < 200 Или КодСостояния >= 300 И КодСостояния < 400 Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка по перенаправлению запроса с кодом %1'"),
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния = 400 Тогда
Возврат НСтр("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).'"), Формат(
КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния >= 400 И КодСостояния < 500 Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка клиента с кодом %1'"),
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния = 500 Тогда
Возврат НСтр("ru = 'Внутренняя ошибка сервера'");
ИначеЕсли КодСостояния = 501 Тогда
Возврат НСтр("ru = 'Процесс для данного запроса не поддерживается сервером'");
ИначеЕсли КодСостояния = 502 Тогда
Возврат НСтр("ru = 'Gateway-сервер получил ошибочный ответ'");
ИначеЕсли КодСостояния = 503 Тогда
Возврат НСтр("ru = 'Сервер распределенного реестра временно недоступен'");
ИначеЕсли КодСостояния = 504 Тогда
Возврат НСтр("ru = 'Превышено время ожидание ответа на запрос Gateway-сервера'");
ИначеЕсли КодСостояния = 505 Тогда
Возврат НСтр("ru = 'Версия HTTP не поддерживается сервером'");
ИначеЕсли КодСостояния = 506 Тогда
Возврат НСтр("ru = 'Вариантный тип содержит также вариант'");
ИначеЕсли КодСостояния = 507 Тогда
Возврат НСтр("ru = 'Переполнение хранилища'");
ИначеЕсли КодСостояния = 510 Тогда
Возврат НСтр("ru = 'Отсутствует поддержка расширений'");
ИначеЕсли КодСостояния < 600 Тогда
НСтр("ru = 'Сервис Распределенного реестра ФНС России не смог выполнить запрос (%1).'"), Формат(
КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния >= 300 Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка сервера с кодом %1'"),
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
ИначеЕсли КодСостояния = 999 Тогда
Возврат НСтр("ru = 'Разрушительный сбой сервера'");
НСтр(
"ru = 'Сервис Распределенного реестра ФНС России перегружен, недоступен или находится на обслуживании (%1).'"),
Формат(
КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
Иначе
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка с кодом %1'"),
Формат(КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
НСтр("ru = 'Не удалось получить ответ сервиса Распределенного реестра ФНС России (%1).'"), Формат(
КодСостояния, "ЧДЦ=; ЧН=; ЧГ="));
КонецЕсли;
КонецФункции
// Устанавливает соединение с сервером Интернета по протоколу http(s).
// Устанавливает соединение с сервером Интернета по протоколу http(s).
//
// Параметры:
// URL - Строка - url сервера в формате [Протокол://]<Сервер>/.
@@ -2808,20 +2802,8 @@
КонецФункции
Процедура СброситьДанныеАутентификацииНаПорталеПоддержки()
УстановитьПривилегированныйРежим(Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда
МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей");
Если МодульИнтернетПоддержкаПользователей.ДоступноПодключениеИнтернетПоддержки() Тогда
МодульИнтернетПоддержкаПользователей.СохранитьДанныеАутентификации(Неопределено);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьФайлДляРасследования(Файлы, ДанныеФайла, ТипФайла, Расширение = "txt")
СведенияОФайле = Новый Структура;
Если ТипЗнч(ДанныеФайла) = Тип("Строка") Тогда
СведенияОФайле.Вставить("Данные", Новый ДвоичныеДанные(ДанныеФайла));
@@ -2832,10 +2814,12 @@
КонецЕсли;
СведенияОФайле.Вставить("Имя", ТипФайла + "." + Расширение);
СведенияОФайле.Вставить("ТипФайла", ТипФайла);
Файлы.Добавить(СведенияОФайле);
КонецПроцедуры
Файлы.Добавить(СведенияОФайле);
КонецПроцедуры
Функция ПолучитьИдентификаторЗапроса(ЗапросHTTP)
Результат = "";
Словарь = СтрРазделить("poar-webapp/integration/poa/generate-number/transactions/status/poaopen/public/poazip/zip/number/token", "/", Ложь);
Синонимы = Новый Соответствие;
@@ -2853,9 +2837,11 @@
КонецЦикла;
Синоним = Синонимы[Результат];
Возврат ?(Синоним = Неопределено, Результат, Синоним);
КонецФункции
Функция ПолучитьИдентификаторОтвета(ОтветHTTP, СтруктураОтвета)
Если СтруктураОтвета = Неопределено Или ОтветHTTP.КодСостояния = 500 Тогда
Возврат Строка(ОтветHTTP.КодСостояния);
ИначеЕсли СтруктураОтвета.Свойство("error") Тогда
@@ -2869,6 +2855,7 @@
КонецЕсли;
Возврат КодОшибки;
КонецФункции
Функция ПараметрыФайловДляРасследования()
@@ -3311,11 +3298,6 @@
Результат.ТекстОтвета = ОтветHTTP.ПолучитьТелоКакСтроку();
Результат.ТокенДоступа = ?(ТипЗнч(СтруктураОтвета) = Тип("Структура") И СтруктураОтвета.Свойство("access_token"),
СтруктураОтвета.access_token, "");
КодСостоянияПриНеверномЛогинеИлиПароле = 403;
Если ОтветHTTP.КодСостояния = КодСостоянияПриНеверномЛогинеИлиПароле И СтруктураОтвета.Свойство("message") Тогда
СброситьДанныеАутентификацииНаПорталеПоддержки();
КонецЕсли;
Исключение
ПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ПараметрыФайловДляРасследования = ПараметрыФайловДляРасследования();
@@ -4119,15 +4101,14 @@
Результат.Вставить("Ошибка", "");
Если НЕ ЗначениеЗаполнено(ТокенДоступа) Тогда
РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР(ЗаголовокОшибки);
Если РезультатАвторизации.Ошибка <> Неопределено Тогда
Результат.Ошибка = РезультатАвторизации.Ошибка;
КонецЕсли;
Если Результат.Ошибка <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
ТокенДоступа = РезультатАвторизации.ТокенДоступа;
КонецЕсли;
@@ -61,21 +61,22 @@
// Реквизиты организации.
//
// Параметры:
// СторонаМЧД - ПеречислениеСсылка.ТипыУчастниковМЧД, Неопределено
// Назначение - см. НазначениеДоверенностиДляПроверкиРеквизитов
// ДляЗаполнения - Булево - если Истина, полный список реквизитов
// ВидОрганизации - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ИностраннаяОрганизация", "Филиал"
// Назначение - см. НазначениеДоверенности
//
// Возвращаемое значение:
// СписокЗначений
//
Функция РеквизитыОрганизацииСписок(СторонаМЧД, ДляЗаполнения = Истина, ВидОрганизации = Неопределено, Назначение = Неопределено) Экспорт
Функция РеквизитыОрганизацииСписок(Назначение = Неопределено, ДляЗаполнения = Истина, ВидОрганизации = Неопределено) Экспорт
Если Назначение = Неопределено Тогда
Назначение = НазначениеДоверенностиДляПроверкиРеквизитов();
КонецЕсли;
ЭтоДоверитель = Назначение.ТипУчастника = ПредопределенноеЗначение("Перечисление.ТипыУчастниковМЧД.Доверитель");
// Пометка списка Истина означает, что поле необязательное
Реквизиты = Новый СписокЗначений;
Реквизиты.Добавить("ЭтоИндивидуальныйПредприниматель", НСтр("ru = 'Индивидуальный предприниматель'"), Истина);
Реквизиты.Добавить("ЭтоФизическоеЛицо", НСтр("ru = 'Физическое лицо'"), Истина);
@@ -84,31 +85,30 @@
Реквизиты.Добавить("ЭтоФилиал", НСтр("ru = 'Филиал'"), Истина);
Реквизиты.Добавить("НаименованиеПолное", НСтр("ru = 'Наименование (полное)'"));
Реквизиты.Добавить("НаименованиеСокращенное", НСтр("ru = 'Наименование (сокращенное)'"), Истина);
Реквизиты.Добавить("ИНН", НСтр("ru = 'ИНН'"));
Реквизиты.Добавить("ИНН", НСтр("ru = 'ИНН'"), ВидОрганизации = "ИностраннаяОрганизация" И ЭтоДоверитель);
Реквизиты.Добавить("ЭлектроннаяПочта", НСтр("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,45 +214,48 @@
Представления = ТекущийОбъект.Представления; // ТабличнаяЧасть
Отбор = Новый Структура();
Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка);
НайденныеСтроки = Представления.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
Представление = НайденныеСтроки[0];
Иначе
Представление = Представления.Добавить();
Представление.КодЯзыка = ТекущийЯзык().КодЯзыка;
КонецЕсли;
Для каждого ИмяРеквизита Из Реквизиты Цикл
Если ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда
Отбор.Вставить("КодЯзыка", ТекущийЯзык().КодЯзыка);
НайденныеСтроки = Представления.НайтиСтроки(Отбор);
Если ИменаМультиязычныхРеквизитовВШапке[ИмяРеквизита] <> Неопределено Тогда
ЗначениеНаТекущемЯзыке = ТекущийОбъект[ИмяРеквизита + СуффиксТекущегоЯзыка];
Если ПустаяСтрока(ЗначениеНаТекущемЯзыке) Тогда
Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита];
Иначе
Представление[ИмяРеквизита] = ЗначениеНаТекущемЯзыке;
КонецЕсли;
Если НайденныеСтроки.Количество() > 0 Тогда
Представление = НайденныеСтроки[0];
Иначе
Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита];
Представление = Представления.Добавить();
Представление.КодЯзыка = ТекущийЯзык().КодЯзыка;
КонецЕсли;
КонецЦикла;
Для каждого ИмяРеквизита Из Реквизиты Цикл
Если ИменаМультиязычныхРеквизитовВШапке[ИмяРеквизита] <> Неопределено Тогда
ЗначениеНаТекущемЯзыке = ТекущийОбъект[ИмяРеквизита + СуффиксТекущегоЯзыка];
Если ПустаяСтрока(ЗначениеНаТекущемЯзыке) Тогда
Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита];
Иначе
Представление[ИмяРеквизита] = ЗначениеНаТекущемЯзыке;
КонецЕсли;
Иначе
Представление[ИмяРеквизита] = ТекущийОбъект[ИмяРеквизита];
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЗаполнитьМультиязычныеРеквизитыТабличнойЧастиПредставления(ТекущийОбъект, Реквизиты);
Отбор.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
Отбор.Вставить("КодЯзыка", ОбщегоНазначения.КодОсновногоЯзыка());
НайденныеСтроки = Представления.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
Для каждого ИмяРеквизита Из Реквизиты Цикл
Если ИменаМультиязычныхРеквизитовВШапке[ИмяРеквизита] = Неопределено
Или (ТекущийЯзык().КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка()
И ПустаяСтрока(СуффиксТекущегоЯзыка)) Тогда
ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита];
И ПустаяСтрока(СуффиксТекущегоЯзыка))
И ТекущийОбъект[ИмяРеквизита] <> Null Тогда
ТекущийОбъект[ИмяРеквизита] = НайденныеСтроки[0][ИмяРеквизита];
КонецЕсли;
КонецЦикла;
Представления.Удалить(НайденныеСтроки[0]);
@@ -79,16 +79,18 @@
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
Команда = Команды.Добавить();
Команда.Вид = "Органайзер";
Команда.Представление = НСтр("ru = 'Напомнить...'");
Команда.ФункциональныеОпции = "ИспользоватьНапоминанияПользователя";
Команда.Картинка = БиблиотекаКартинок.Напоминание;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметНапоминания.Тип;
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 50;
Команда.Обработчик = "НапоминанияПользователяСлужебныйКлиент.Напомнить";
Команда.МножественныйВыбор = Ложь;
Если ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.НапоминанияПользователя) Тогда
Команда = Команды.Добавить();
Команда.Вид = "Органайзер";
Команда.Представление = НСтр("ru = 'Напомнить...'");
Команда.ФункциональныеОпции = "ИспользоватьНапоминанияПользователя";
Команда.Картинка = БиблиотекаКартинок.Напоминание;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметНапоминания.Тип;
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 50;
Команда.Обработчик = "НапоминанияПользователяСлужебныйКлиент.Напомнить";
Команда.МножественныйВыбор = Ложь;
КонецЕсли;
КонецПроцедуры
@@ -4400,21 +4400,6 @@
Обработчик.РежимВыполнения = "Оперативно";
Обработчик.ОбщиеДанные = Истина;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.0.1.91";
Обработчик.Комментарий =
НСтр("ru = 'Перенос настроек подключения обменов данными в новый регистр ""Настройки транспорта обмена данными"".'");
Обработчик.Идентификатор = Новый УникальныйИдентификатор("8d5f1092-f569-4c03-aca9-65625809b853");
Обработчик.Процедура = "РегистрыСведений.НастройкиТранспортаОбменаДанными.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ЧитаемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена";
Обработчик.ИзменяемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена,РегистрСведений.НастройкиТранспортаОбменаДанными";
Обработчик.ОчередьОтложеннойОбработки = 1;
Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "РегистрыСведений.НастройкиТранспортаОбменаДанными.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.БлокируемыеОбъекты = "РегистрСведений.УдалитьНастройкиТранспортаОбмена,РегистрСведений.НастройкиТранспортаОбменаДанными";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.0.1.91";
Обработчик.Комментарий =
@@ -222,7 +222,9 @@
КонецЕсли;
Форма.ТолькоПросмотр = Истина;
Форма.Команды.Добавить("ОбновлениеВерсииИБ_ОбъектЗаблокирован");
Если Форма.Команды.Найти("ОбновлениеВерсииИБ_ОбъектЗаблокирован") = Неопределено Тогда
Форма.Команды.Добавить("ОбновлениеВерсииИБ_ОбъектЗаблокирован");
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(Результат.ТекстИсключения);
Возврат;
КонецЕсли;
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.10.174";
Описание.Версия = "3.1.10.206";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "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,12 +93,16 @@
Контекст = ПараметрыЗаписи.ПараметрыВыполненияПодключаемойКоманды;
Контекст.Вставить("Форма", Форма);
Контекст.Вставить("Источник", Объект);
ПродолжитьВыполнениеКоманды(Контекст);
Контекст.Форма.ПараметрыПодключаемыхКоманд.Удалить("КомандаВыполняется")
Контекст.Форма.ПараметрыПодключаемыхКоманд.Удалить("КомандаВыполняется");
ИмяПараметра = "СтандартныеПодсистемы.ПодключаемыеКоманды.ПараметрыВыполненияПодключаемойКоманды";
ПараметрыПриложения[ИмяПараметра] = Контекст;
ПодключитьОбработчикОжидания("ПродолжитьВыполнениеПодключаемойКомандыПослеЗаписиВФорме", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
// Свойства второго параметра обработчика подключаемой команды, выполняемой на клиенте.
//
// Возвращаемое значение:
@@ -477,4 +481,16 @@
КонецФункции
Процедура ПослеЗаписиПродолжение() Экспорт
ИмяПараметра = "СтандартныеПодсистемы.ПодключаемыеКоманды.ПараметрыВыполненияПодключаемойКоманды";
Контекст = ПараметрыПриложения[ИмяПараметра];
ПараметрыПриложения[ИмяПараметра] = Неопределено;
Если Контекст <> Неопределено Тогда
ПродолжитьВыполнениеКоманды(Контекст);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -1378,7 +1378,7 @@
// Возвращаемое значение:
// Строка
//
Функция ИмяСобытияИзменениеИзменениеУчастниковГруппПользователейДляЖурналаРегистрации() Экспорт
Функция ИмяСобытияИзменениеУчастниковГруппПользователейДляЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Пользователи.Изменение участников групп пользователей'",
ОбщегоНазначения.КодОсновногоЯзыка());
@@ -1388,13 +1388,60 @@
// Возвращаемое значение:
// Строка
//
Функция ИмяСобытияИзменениеИзменениеУчастниковГруппВнешнихПользователейДляЖурналаРегистрации() Экспорт
Функция ИмяСобытияИзменениеУчастниковГруппВнешнихПользователейДляЖурналаРегистрации() Экспорт
Возврат НСтр("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].Выбрать();
Пока Выборка.Следующий() Цикл
@@ -5533,6 +5594,7 @@
Если Не РезультатыЗапроса[1].Пустой() Тогда
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Запись = НаборЗаписей.Добавить();
Выборка = РезультатыЗапроса[1].Выбрать();
@@ -5652,6 +5714,7 @@
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Пользователь", "Пользователь");
НаборИзОднойЗаписи = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборИзОднойЗаписи.ДополнительныеСвойства.Вставить("ЭтоСтандартноеОбновлениеРегистра");
Запись = НаборИзОднойЗаписи.Добавить();
УчастникиИзменений = ИзмененияСоставов.УчастникиИзменений;
@@ -5730,7 +5793,14 @@
КонецЕсли;
ЕстьИзменения = Истина;
ЗарегистрироватьИзмененияСоставовГрупп(ИзмененияСоставов);
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ЗарегистрироватьИзмененияСоставовГрупп(ИзмененияСоставов.ДляРегистрации);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
УчастникиИзменений = Новый Массив;
Для Каждого КлючИЗначение Из ИзмененияСоставов.УчастникиИзменений Цикл
@@ -5779,25 +5849,29 @@
КонецЕсли;
Если Удален Тогда
Строка.ВидИзменения = "Удален";
Строка.ВидИзменения = "Удалено";
Строка.Используется = Ложь;
ИначеЕсли Выборка.ИспользуетсяБыло = 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].Выбрать();
Пока Выборка.Следующий() Цикл
@@ -6066,6 +6189,7 @@
Если Не РезультатыЗапросов[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";
КонецФункции
@@ -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;
КонецЕсли;
НастройкиСканированияПользователя.СохранятьВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.СохранятьВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/СохранятьВPDF",
ИдентификаторКлиента, Ложь);
НастройкиСканированияПользователя.ФорматХраненияМногостраничный = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.ФорматХраненияМногостраничный = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ФорматХраненияМногостраничный",
ИдентификаторКлиента, Перечисления.ФорматыХраненияМногостраничныхФайлов.TIF);
НастройкиСканированияПользователя.Разрешение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.Разрешение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/Разрешение",
ИдентификаторКлиента);
НастройкиСканированияПользователя.Цветность = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.Цветность = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/Цветность",
ИдентификаторКлиента);
НастройкиСканированияПользователя.Поворот = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.Поворот = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/Поворот",
ИдентификаторКлиента);
НастройкиСканированияПользователя.РазмерБумаги = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.РазмерБумаги = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/РазмерБумаги",
ИдентификаторКлиента);
НастройкиСканированияПользователя.ДвустороннееСканирование = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.ДвустороннееСканирование = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ДвустороннееСканирование",
ИдентификаторКлиента);
НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.ИспользоватьImageMagickДляПреобразованияВPDF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ИспользоватьImageMagickДляПреобразованияВPDF",
ИдентификаторКлиента, Ложь);
НастройкиСканированияПользователя.КачествоJPG = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.КачествоJPG = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/КачествоJPG",
ИдентификаторКлиента, 100);
НастройкиСканированияПользователя.СжатиеTIFF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.СжатиеTIFF = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/СжатиеTIFF",
ИдентификаторКлиента, Перечисления.ВариантыСжатияTIFF.БезСжатия);
НастройкиСканированияПользователя.ПутьКПрограммеКонвертации = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.ПутьКПрограммеКонвертации = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ПутьКПрограммеКонвертации",
ИдентификаторКлиента, ""); // ImageMagick
НастройкиСканированияПользователя.КаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.КаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/КаталогЖурналаСканирования",
ИдентификаторКлиента, "");
НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Результат.ИспользоватьКаталогЖурналаСканирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиСканирования/ИспользоватьКаталогЖурналаСканирования",
ИдентификаторКлиента, Ложь);
Возврат НастройкиСканированияПользователя;
Возврат Результат;
КонецФункции
// Сохраняет настройки сканирования пользователя.
//
// Параметры:
// НастройкиСканированияПользователя - см. РаботаСФайламиКлиентСервер.НастройкиСканированияПользователя
// ИдентификаторКлиента - УникальныйИдентификатор - идентификатор клиента
// ИдентификаторКлиента - УникальныйИдентификатор
//
Процедура СохранитьНастройкиСканированияПользователя(НастройкиСканированияПользователя, ИдентификаторКлиента) Экспорт
НастройкиСканирования = Новый Массив;
Результат = Новый Массив;
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ПоказыватьДиалогСканера",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ПоказыватьДиалогСканера",
НастройкиСканированияПользователя.ПоказыватьДиалогСканера, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИмяУстройства",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИмяУстройства",
НастройкиСканированияПользователя.ИмяУстройства, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ФорматСканированногоИзображения",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ФорматСканированногоИзображения",
НастройкиСканированияПользователя.ФорматСканированногоИзображения, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("СохранятьВPDF",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("СохранятьВPDF",
НастройкиСканированияПользователя.СохранятьВPDF, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ФорматХраненияМногостраничный",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ФорматХраненияМногостраничный",
НастройкиСканированияПользователя.ФорматХраненияМногостраничный, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("Разрешение",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("Разрешение",
НастройкиСканированияПользователя.Разрешение, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("Цветность",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("Цветность",
НастройкиСканированияПользователя.Цветность, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("Поворот",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("Поворот",
НастройкиСканированияПользователя.Поворот, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("РазмерБумаги",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("РазмерБумаги",
НастройкиСканированияПользователя.РазмерБумаги, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ДвустороннееСканирование",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ДвустороннееСканирование",
НастройкиСканированияПользователя.ДвустороннееСканирование, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИспользоватьImageMagickДляПреобразованияВPDF",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьImageMagickДляПреобразованияВPDF",
НастройкиСканированияПользователя.ИспользоватьImageMagickДляПреобразованияВPDF, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("КачествоJPG",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("КачествоJPG",
НастройкиСканированияПользователя.КачествоJPG, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("СжатиеTIFF",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("СжатиеTIFF",
НастройкиСканированияПользователя.СжатиеTIFF, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ПутьКПрограммеКонвертации",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ПутьКПрограммеКонвертации",
НастройкиСканированияПользователя.ПутьКПрограммеКонвертации, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("КаталогЖурналаСканирования",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("КаталогЖурналаСканирования",
НастройкиСканированияПользователя.КаталогЖурналаСканирования, ИдентификаторКлиента));
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ИспользоватьКаталогЖурналаСканирования",
Результат.Добавить(РаботаСФайламиСлужебный.НастройкаСканирования("ИспользоватьКаталогЖурналаСканирования",
НастройкиСканированияПользователя.ИспользоватьКаталогЖурналаСканирования, ИдентификаторКлиента));
Если ЗначениеЗаполнено(НастройкиСканированияПользователя.ФорматХраненияОдностраничный) Тогда
ФорматХраненияОдностраничный = НастройкиСканированияПользователя.ФорматХраненияОдностраничный;
Иначе
ФорматХраненияОдностраничный = РаботаСФайламиСлужебный.ПреобразоватьФорматСканированияВФорматХранения(НастройкиСканированияПользователя.ФорматСканированногоИзображения,
НастройкиСканированияПользователя.СохранятьВPDF);
КонецЕсли;
НастройкиСканирования.Добавить(РаботаСФайламиСлужебный.СформироватьНастройкуСканирования("ФорматХраненияОдностраничный", ФорматХраненияОдностраничный, ИдентификаторКлиента));
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(НастройкиСканирования, Истина);
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранитьМассив(Результат, Истина);
КонецПроцедуры
#Область ДляВызоваИзДругихПодсистем
@@ -1839,7 +1834,7 @@
// Параметры:
// Параметры - Структура - параметры выполнения отложенного обработчика обновления.
//
Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт
Процедура ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры) Экспорт // АПК:530 Обрабатывает таблицы присоединенных файлов, а не данные других подсистем.
РаботаСФайламиСлужебный.ПеренестиЭлектронныеПодписиИСертификатыШифрованияВРегистрыСведений(Параметры);
@@ -57,10 +57,10 @@
КонецПроцедуры
// Настройки сканирования пользователя.
// Возвращает настройки сканирования пользователя.
//
// Возвращаемое значение:
// Структура - настройки сканирования пользователя:
// Структура:
// * ПоказыватьДиалогСканера - Булево
// * ИмяУстройства - Строка - НаименованиеСканера
// * ФорматСканированногоИзображения - ПеречислениеСсылка.ФорматыСканированногоИзображения
@@ -75,28 +75,26 @@
// * КачествоJPG - Число
// * СжатиеTIFF - ПеречислениеСсылка.ВариантыСжатияTIFF
// * ПутьКПрограммеКонвертации - Строка
// * ФорматХраненияОдностраничный - ПеречислениеСсылка.ФорматыХраненияОдностраничныхФайлов
//
Функция НастройкиСканированияПользователя() Экспорт
НастройкиСканированияПользователя = Новый Структура;
НастройкиСканированияПользователя.Вставить("ПоказыватьДиалогСканера", Ложь);
НастройкиСканированияПользователя.Вставить("ИмяУстройства", "");
НастройкиСканированияПользователя.Вставить("ФорматСканированногоИзображения");
НастройкиСканированияПользователя.Вставить("СохранятьВPDF", Ложь);
НастройкиСканированияПользователя.Вставить("ФорматХраненияМногостраничный");
НастройкиСканированияПользователя.Вставить("Разрешение");
НастройкиСканированияПользователя.Вставить("Цветность");
НастройкиСканированияПользователя.Вставить("Поворот");
НастройкиСканированияПользователя.Вставить("РазмерБумаги");
НастройкиСканированияПользователя.Вставить("ДвустороннееСканирование", Ложь);
НастройкиСканированияПользователя.Вставить("ИспользоватьImageMagickДляПреобразованияВPDF", Ложь);
НастройкиСканированияПользователя.Вставить("КачествоJPG", 0);
НастройкиСканированияПользователя.Вставить("СжатиеTIFF");
НастройкиСканированияПользователя.Вставить("ПутьКПрограммеКонвертации", "");
НастройкиСканированияПользователя.Вставить("ФорматХраненияОдностраничный");
НастройкиСканированияПользователя.Вставить("КаталогЖурналаСканирования");
НастройкиСканированияПользователя.Вставить("ИспользоватьКаталогЖурналаСканирования", Ложь);
Возврат НастройкиСканированияПользователя;
Результат = Новый Структура;
Результат.Вставить("ПоказыватьДиалогСканера", Ложь);
Результат.Вставить("ИмяУстройства", "");
Результат.Вставить("ФорматСканированногоИзображения");
Результат.Вставить("СохранятьВPDF", Ложь);
Результат.Вставить("ФорматХраненияМногостраничный");
Результат.Вставить("Разрешение");
Результат.Вставить("Цветность");
Результат.Вставить("Поворот");
Результат.Вставить("РазмерБумаги");
Результат.Вставить("ДвустороннееСканирование", Ложь);
Результат.Вставить("ИспользоватьImageMagickДляПреобразованияВPDF", Ложь);
Результат.Вставить("КачествоJPG", 0);
Результат.Вставить("СжатиеTIFF");
Результат.Вставить("ПутьКПрограммеКонвертации", "");
Результат.Вставить("КаталогЖурналаСканирования");
Результат.Вставить("ИспользоватьКаталогЖурналаСканирования", Ложь);
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -2180,24 +2180,6 @@
КонецФункции
Функция ПреобразоватьФорматСканированияВФорматХранения(ФорматСканирования, СохранятьВPDF) Экспорт
Если СохранятьВPDF Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.PDF;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.BMP Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.BMP;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.GIF Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.GIF;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.JPG Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.JPG;
ИначеЕсли ФорматСканирования = Перечисления.ФорматыСканированногоИзображения.TIF Тогда
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.TIF;
КонецЕсли;
Возврат Перечисления.ФорматыХраненияОдностраничныхФайлов.PNG;
КонецФункции
Функция КомандаСканироватьЛист() Экспорт
Возврат "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;
НовыйФормат.Представление = НСтр("ru = 'Документ PDF (устаревший формат)'");
СтандартныеПодсистемыСерверЛокализация.ПриНастройкеФорматовСохраненияТабличногоДокумента(ТаблицаФорматов);
// Табличный документ (.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,35 +3483,56 @@
//
Процедура ОбновитьГруппыЗначенийДоступаПередЗаписью(Знач Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после записи изменений в журнал.
Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда
Возврат;
КонецЕсли;
Если Источник.ЭтоНовый()
И ОбщегоНазначения.ИнформационнаяБазаФайловая()
И Не ПропуститьПроверкуДоступа(Отказ, Источник) Тогда
Если ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа()
Или Не Источник.ОбменДанными.Загрузка Тогда
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.ПараметрыРаботыВерсийРасширений");
Блокировка.Заблокировать();
КонецЕсли;
СвойстваВидовДоступа = СвойстваВидовДоступа();
ЗначенияДоступаСГруппами = СвойстваВидовДоступа.ЗначенияДоступаСГруппами;
Если ЗначенияДоступаСГруппами.ПоТипамДляОбновления.Получить(ТипЗнч(Источник)) <> Неопределено Тогда
РегистрыСведений.ГруппыЗначенийДоступа.ОбновитьГруппыЗначенийДоступа(Источник);
КонецЕсли;
Если СвойстваВидовДоступа.ПоТипамЗначенийСИерархией.Получить(ТипЗнч(Источник)) <> Неопределено Тогда
Родитель = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Родитель");
Если Источник.Родитель <> Родитель Тогда
Источник.ДополнительныеСвойства.Вставить("ОбновитьЗначенияГруппДоступа");
Если Источник.ЭтоНовый()
И ОбщегоНазначения.ИнформационнаяБазаФайловая()
И Не ПропуститьПроверкуДоступа(Отказ, Источник) Тогда
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.ПараметрыРаботыВерсийРасширений");
Блокировка.Заблокировать();
КонецЕсли;
СвойстваВидовДоступа = СвойстваВидовДоступа();
СтарыеЗначения = Новый Структура;
Если СвойстваВидовДоступа.ПоТипамЗначенийСИерархией.Получить(ТипЗнч(Источник)) <> Неопределено Тогда
СтарыеЗначения.Вставить("Родитель", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "Родитель"));
КонецЕсли;
Свойства = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипамДляОбновления.Получить(ТипЗнч(Источник));
Если Свойства <> Неопределено
И Свойства.ТипГруппЗначений <> Тип("Неопределено")
И ПользователиСлужебныйПовтИсп.РегистрироватьИзмененияПравДоступа() Тогда
ИмяПоля = ?(Свойства.НесколькоГруппЗначений, "ГруппыДоступа", "ГруппаДоступа");
Попытка
ЗначениеПоля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, ИмяПоля);
Исключение
ИменаТаблиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Источник.Метаданные().ПолноеИмя());
ПоТипамСсылокДляОбновления = СвойстваВидовДоступа.ЗначенияДоступаСГруппами.ПоТипамСсылокДляОбновления;
РегистрыСведений.ГруппыЗначенийДоступа.ПроверитьМетаданныеТаблиц(ИменаТаблиц, ПоТипамСсылокДляОбновления);
ВызватьИсключение;
КонецПопытки;
СтарыеЗначения.Вставить(ИмяПоля, ЗначениеПоля);
КонецЕсли;
Если ЗначениеЗаполнено(СтарыеЗначения) Тогда
Источник.ДополнительныеСвойства.Вставить("УправлениеДоступомСтарыеЗначения", СтарыеЗначения);
КонецЕсли;
КонецЕсли;
// АПК: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)'"),
@@ -22,6 +22,13 @@
КонецФункции
// См. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа
Функция ПредставлениеВидовДоступа() Экспорт
Возврат УправлениеДоступомСлужебный.ПредставлениеВидовДоступа();
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -63,13 +70,6 @@
КонецФункции
// См. УправлениеДоступомСлужебный.ПредставлениеВидовДоступа
Функция ПредставлениеВидовДоступа() Экспорт
Возврат УправлениеДоступомСлужебный.ПредставлениеВидовДоступа();
КонецФункции
// Только для внутреннего использования.
//
// Возвращаемое значение:
@@ -3701,8 +3701,6 @@
Процедура УстановитьНастройкиКомандПечати(КомандыПечати, Владелец)
УстановитьПривилегированныйРежим(Истина);
ТекстЗапроса =
"ВЫБРАТЬ
| НастройкиКомандПечати.УникальныйИдентификатор КАК УникальныйИдентификатор
@@ -3719,7 +3717,7 @@
СписокОтключенных = Новый Соответствие;
Пока Выборка.Следующий() Цикл
СписокОтключенных.Вставить(Выборка.УникальныйИдентификатор, Истина);
КонецЦикла;
КонецЦикла;
ПроверкаПроведенияПередПечатью = НастройкиПечати().ПроверкаПроведенияПередПечатью;
@@ -1465,8 +1465,8 @@
ВложенноеУсловие.УзелДереваДокумента = УзелСУсловием;
ВложенноеУсловие.УсловиеОбласти = УсловиеОбласти;
ВложенноеУсловие.Индекс = ИндексУзла;
ДобавлятьУсловныеОбласти = Ложь;
КонецЕсли;
ДобавлятьУсловныеОбласти = Ложь;
КонецЦикла;
КонецЕсли;
КонецЦикла;
@@ -3024,7 +3024,26 @@
Представление = Формат(Значение, "Л=" + КодЯзыка);
КонецЕсли;
Иначе
Представление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Значение, "Наименование", , КодЯзыка);
ОбъектМетаданных = Значение.Метаданные();
ЕстьРеквизитНаименование = Метаданные.Справочники.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСправочника.ВВидеНаименования
Или Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеВидаРасчета.ВВидеНаименования
Или Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеВидаХарактеристики.ВВидеНаименования
Или Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСчета.ВВидеНаименования
Или Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеПланаОбмена.ВВидеНаименования
Или Метаданные.Задачи.Содержит(ОбъектМетаданных)
И ОбъектМетаданных.ОсновноеПредставление = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеЗадачи.ВВидеНаименования;
Если ЕстьРеквизитНаименование Тогда
Представление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Значение, "Наименование", , КодЯзыка);
Иначе
Представление = Строка(Значение);
КонецЕсли;
КонецЕсли;
Возврат Представление;
@@ -117,7 +117,7 @@
Позиция = ИнформацияПоКолонкам.Количество() + 1;
Свойства = УправлениеСвойствами.СвойстваОбъекта(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка());
ЗначенияСвойств = ДополнительныеЗначенияСвойства(Свойства);
ЗначенияСвойств = ДополнительныеЗначенияСвойств(Свойства);
СоответствиеЗначений = Новый Соответствие;
Для Каждого ДополнительноеЗначение Из ЗначенияСвойств Цикл
Значение = СоответствиеЗначений[ДополнительноеЗначение.Свойство];
@@ -1752,13 +1752,38 @@
// Параметры:
// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойство для
// которого нужно получить перечисляемые значения.
// - Массив
//
// Возвращаемое значение:
// Массив из СправочникСсылка - значения свойства, если есть.
//
Функция ДополнительныеЗначенияСвойства(Свойство) Экспорт
ИмяПроцедуры = "УправлениеСвойствамиСлужебный.ДополнительныеЗначенияСвойства";
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "Свойство", Свойство,
Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
ЗначенияСвойств = ДополнительныеЗначенияСвойств(Свойство);
Результат = ЗначенияСвойств.ВыгрузитьКолонку("Ссылка");
Возврат Результат;
КонецФункции
// Возвращает таблицу перечисляемых значений указанного свойства.
//
// Параметры:
// Свойство - Массив из ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - свойства для
// которого нужно получить перечисляемые значения.
// - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Ссылка - СправочникСсылка.ЗначенияСвойствОбъектовИерархия
// - СправочникСсылка.ЗначенияСвойствОбъектов
// * Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
//
Функция ДополнительныеЗначенияСвойств(Свойство) Экспорт
Запрос = Новый Запрос;
Запрос.Параметры.Вставить("Свойство", Свойство);
Запрос.Текст =
@@ -1780,11 +1805,7 @@
|ГДЕ
| ЗначенияСвойствОбъектов.Владелец В (&Свойство)";
Если ТипЗнч(Свойство) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда
Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Иначе
Результат = Запрос.Выполнить().Выгрузить();
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат;
@@ -585,6 +585,15 @@
// Пример:
// // Простой запуск
// ФайловаяСистемаКлиент.ЗапуститьПрограмму("calc");
//
// Пример:
// // Передача аргументов в виде массива:
// // Для выполнения Setup.exe -args "PIDKEY =***":
// КомандаЗапуска = Новый Массив;
// КомандаЗапуска.Добавить("Setup.exe");
// КомандаЗапуска.Добавить("- args");
// КомандаЗапуска.Добавить("PIDKEY =***");
// ФайловаяСистемаКлиент.ЗапуститьПрограмму(КомандаЗапуска);
//
// // Запуск с ожиданием завершения и получения кода возврата:
// ПараметрыЗапускаПрограммы = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы();
@@ -979,6 +988,7 @@
|
|Для этого откройте терминал и введите:
|%2
|
|Или обратитесь к администратору.'"),
"https://docs.moodle.org/404/en/Universal_Office_Converter_%28unoconv%29",
"sudo apt update
@@ -1056,11 +1066,11 @@
Результат.ОписаниеОшибки + Символы.ПС, "") + Результат.ПотокОшибок);
Рекомендация = "";
Если СтрНайти(ОписаниеОшибки, "no default destination available") > 0 Тогда
Если СтрНайти(НРег(ОписаниеОшибки), "no default destination") > 0 Тогда
Рекомендация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Задайте принтер по умолчанию:
|- Введите в терминале ""%1"" и выберите из списка нужный принтер.
|- Затем введите в терминале: %2 ""имя нужного принтера"".
|• Введите в терминале ""%1"" и выберите из списка нужный принтер.
|• Затем введите в терминале: %2 ""имя нужного принтера"".
|Или обратитесь к администратору.'"),
"lpstat -p -d",
"lpoptions -d");
@@ -312,7 +312,7 @@
Функция ЕстьДоступныеШаблоны(ТипШаблона, Предмет = Неопределено) Экспорт
Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ШаблоныСообщений) Тогда
Если Не ЕстьПравоЧтенияШаблоновСообщений() Тогда
Возврат Ложь;
КонецЕсли;
@@ -320,6 +320,7 @@
Возврат НЕ Запрос.Выполнить().Пустой();
КонецФункции
// Возвращает список объектов метаданных к которым подключена подсистема Шаблоны сообщений.
//
// Возвращаемое значение:
@@ -442,24 +443,34 @@
// См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.
Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт
Команда = Команды.Добавить();
Команда.Вид = "Отправить";
Команда.Представление = НСтр("ru = 'Почта'");
Команда.Картинка = БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо;
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 40;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип;
Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьПисьмо";
Команда.МножественныйВыбор = Ложь;
Если Не ЕстьПравоЧтенияШаблоновСообщений() Тогда
Возврат;
КонецЕсли;
Команда = Команды.Добавить();
Команда.Вид = "Отправить";
Команда.Представление = НСтр("ru = 'SMS'");
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 50;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип;
Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьSMS";
Команда.МножественныйВыбор = Ложь;
ДоступныеВарианты = ДоступныеВариантыОтправкиШаблоновСообщений();
Если ДоступныеВарианты.Почта Тогда
Команда = Команды.Добавить();
Команда.Вид = "Отправить";
Команда.Представление = НСтр("ru = 'Почта'");
Команда.Картинка = БиблиотекаКартинок.ОтправитьЭлектронноеПисьмо;
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 40;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип;
Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьПисьмо";
Команда.МножественныйВыбор = Ложь;
КонецЕсли;
Если ДоступныеВарианты.SMS Тогда
Команда = Команды.Добавить();
Команда.Вид = "Отправить";
Команда.Представление = НСтр("ru = 'SMS'");
Команда.РежимЗаписи = "НеЗаписывать";
Команда.Порядок = 50;
Команда.ТипПараметра = Метаданные.ОпределяемыеТипы.ПредметШаблонаСообщения.Тип;
Команда.Обработчик = "ШаблоныСообщенийКлиент.ОтправитьSMS";
Команда.МножественныйВыбор = Ложь;
КонецЕсли;
КонецПроцедуры
@@ -474,6 +485,20 @@
#Область СлужебныеПроцедурыИФункции
// Возвращает сведения о доступных вариантах отправки шаблонов сообщений.
//
// Возвращаемое значение:
// ФиксированнаяСтруктура:
// * SMS - Булево - если Истина, то можно формировать SMS сообщение по шаблонам.
// * Почта - Булево - если Истина, то можно создавать письма по шаблонам.
//
Функция ДоступныеВариантыОтправкиШаблоновСообщений() Экспорт
Возврат ШаблоныСообщенийСлужебныйПовтИсп.ДоступныеВариантыОтправкиШаблоновСообщений();
КонецФункции
// Возвращает сведения об сформированном исходящем письме.
//
// Возвращаемое значение:
@@ -1039,8 +1064,13 @@
Функция ВидыШаблонов() Экспорт
ТипыШаблонов = Новый СписокЗначений;
ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем(), НСтр("ru = 'Электронного письма'"));
ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS(), НСтр("ru = 'Сообщения SMS'"));
ДоступныеВарианты = ДоступныеВариантыОтправкиШаблоновСообщений();
Если ДоступныеВарианты.Почта Тогда
ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаЭлектронныхПисем(), НСтр("ru = 'Электронного письма'"));
КонецЕсли;
Если ДоступныеВарианты.SMS Тогда
ТипыШаблонов.Добавить(ШаблоныСообщенийКлиентСервер.ИмяШаблонаSMS(), НСтр("ru = 'Сообщения SMS'"));
КонецЕсли;
Возврат ТипыШаблонов;
@@ -3038,6 +3068,12 @@
КонецФункции
Функция ЕстьПравоЧтенияШаблоновСообщений()
Возврат ПравоДоступа("Чтение", Метаданные.Справочники.ШаблоныСообщений);
КонецФункции
Процедура ОбработатьДанныеДляПереходаНаПодключаемыеКоманды() Экспорт
ЕстьПодключаемыеКоманды = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды");
@@ -3067,4 +3103,5 @@
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -40,4 +40,17 @@
КонецФункции
Функция ДоступныеВариантыОтправкиШаблоновСообщений() Экспорт
Результат = Новый Структура;
Результат.Вставить("SMS",
ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS"));
Результат.Вставить("Почта",
ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями"));
Возврат Новый ФиксированнаяСтруктура(Результат);
КонецФункции
#КонецОбласти
@@ -1170,6 +1170,7 @@
//
// Параметры:
// Сертификат - СертификатКриптографии - сертификат криптографии.
// - ДвоичныеДанные - двоичные данные сертификата в кодировке DER.
//
// Возвращаемое значение:
// Структура:
@@ -1189,16 +1190,20 @@
//
Функция СвойстваСертификата(Сертификат) Экспорт
ДанныеСертификата = Сертификат;
Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда
ДвоичныеДанныеСертификата = Сертификат.Выгрузить();
ИначеЕсли ТипЗнч(Сертификат) = Тип("ФиксированнаяСтруктура") Тогда
ДвоичныеДанныеСертификата = Сертификат.Сертификат;
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДвоичныеДанныеСертификата = Сертификат;
ДанныеСертификата = Новый СертификатКриптографии(Сертификат);
Иначе
ДвоичныеДанныеСертификата = Неопределено;
КонецЕсли;
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
Сертификат, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата);
ДанныеСертификата, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем(), ДвоичныеДанныеСертификата);
КонецФункции
@@ -1248,7 +1253,8 @@
КонецФункции
// Усовершенствует подпись до переданного типа, если подпись позволяет.
// Добавляет архивную метку времени в архивную подпись (CAdES-A).
// Добавляет архивную метку времени в архивную подпись (CAdES-A).
// Возвращает только изменившиеся в процессе усовершенствования свойства подписи.
//
// Параметры:
// Подпись - ДвоичныеДанные - двоичные данные электронной подписи.
@@ -1399,6 +1405,9 @@
СвойстваПодписи.ТипПодписи = ПараметрыПодписиКриптографии.ТипПодписи;
СвойстваПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени;
СвойстваПодписи.ОписаниеСертификата = ПараметрыПодписиКриптографии.ОписаниеСертификата;
СвойстваПодписи.ДатаПодписи =
?(ЗначениеЗаполнено(ПараметрыПодписиКриптографии.НеподтвержденнаяДатаПодписи),
ПараметрыПодписиКриптографии.НеподтвержденнаяДатаПодписи, ПараметрыПодписиКриптографии.ДатаПодписиИзМетки);
Результат.СвойстваПодписи = СвойстваПодписи;
Иначе
СвойстваСертификата = СвойстваСертификата(ПараметрыПодписиКриптографии.СертификатПоследнейМеткиВремени);
@@ -981,6 +981,8 @@
// * НеПоказыватьРезультаты - Булево - если параметр принимает значение Истина и параметр КонтекстОперации
// содержит контекст предыдущей операции, результаты проверки не будут показаны
// пользователю.
// * ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии - по умолчанию тип, указанный в настройках,
// если передан КонтекстОперации, возвращенный процедурой Подписать, то тип берется из него.
// * Результат - Неопределено - проверка ни разу не выполнялась.
// - Структура - возвращаемое значение. Вставляется перед обработкой результата:
// * ПроверкиПройдены - Булево - возвращаемое значение. Устанавливается в процедуре параметра ОбработкаРезультата.
@@ -191,7 +191,6 @@
Результат = Новый Структура("АдресВнешний, АдресВнутренний");
// Локализация
ИмяИздателя = СтрЗаменить(ИмяИздателя, " ", "_");
ИмяИздателя = СокрЛП(СтрСоединить(СтрРазделить(ИмяИздателя, "!*'();:@&=+$,/?%#[]\|<>", Истина), ""));
@@ -201,10 +200,6 @@
Возврат Результат;
КонецЕсли;
Если ИмяИздателя <> "federalnaya_nalogovaya_sluzhba" Тогда
Возврат Результат;
КонецЕсли;
ДополнительныеСвойстваСертификата =
ЭлектроннаяПодписьСлужебныйКлиентСервер.ДополнительныеСвойстваСертификата(Сертификат, 0);
@@ -213,8 +208,16 @@
КонецЕсли;
Результат.АдресВнутренний = СтрШаблон("%1/%2", ИмяИздателя, НРег(ДополнительныеСвойстваСертификата.ИдентификаторКлючаУдостоверяющегоЦентра));
// Локализация
Если ИмяИздателя <> "federalnaya_nalogovaya_sluzhba" Тогда
Возврат Результат;
КонецЕсли;
Результат.АдресВнешний = СтрШаблон("http://ca.1c.ru/crls/%1.zip", Результат.АдресВнутренний);
// Конец локализация
// Конец Локализация
Возврат Результат;
@@ -722,8 +725,8 @@
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Причина = НСтр(
"ru = 'Сертификаты юридическим лицам и индивидуальным предпринимателям выдают только государственные удостоверяющие центры.'");
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = НСтр(
"ru = 'Если это тестовый сертификат, поставьте флажок <b>Разрешить подписание</b> в карточке сертификата.'");
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Если это тестовый сертификат, поставьте флажок <b>Разрешить подписание</b> в <a href=""%1"">карточке сертификата</a>.'"), "ОткрытьСертификат");
ИначеЕсли ДатаПрекращенияДействия <> Неопределено И (НаДату >= ДатаПрекращенияДействия
Или НаДату + 30*24*60*60 >= ДатаПрекращенияДействия И Не КонтекстПроверки.ЭтоПроверкаПодписи) Тогда
@@ -856,6 +856,16 @@
Возврат Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолучитьМакет(ИмяМакета);
КонецФункции
Функция АдресаСерверовМетокВремениПоУмолчанию() Экспорт
Если Метаданные.Обработки.Найти("ПрограммыЭлектроннойПодписиИШифрования") <> Неопределено Тогда
Возврат Обработки["ПрограммыЭлектроннойПодписиИШифрования"].АдресаСерверовМетокВремениПоУмолчанию();
КонецЕсли;
Возврат "";
КонецФункции
#Область ПоставляемыеДанные
// См. ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных
@@ -1022,10 +1032,10 @@
КонецЕсли;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.9.234";
Обработчик.Версия = "3.1.10.185";
Обработчик.Комментарий = НСтр(
"ru = 'Перенос оповещений об окончании срока действия сертификата, данных заявлений в регистры сведений, заполнение срока действия сертификата с учетом срока действия закрытого ключа.'");
Обработчик.Идентификатор = Новый УникальныйИдентификатор("a17c1765-820e-4886-9423-ffc1267d7ff1");
"ru = 'Перенос оповещений об окончании срока действия сертификата, данных заявлений в регистры сведений, заполнение срока действия сертификата с учетом срока действия закрытого ключа, очистка некорректно выбранного приложения электронной подписи.'");
Обработчик.Идентификатор = Новый УникальныйИдентификатор("a6c42e6b-4824-4f5e-a35d-aa0922b253f3");
Обработчик.Процедура = "Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
@@ -2338,8 +2348,6 @@
Функция ПроверитьСертификатНаКорректностьПовторно(МенеджерКриптографииДляПроверки, СертификатДляПроверки,
РежимыПроверкиСертификата, ОписаниеОшибки, ВызыватьИсключение, ДействияДляУстранения)
// Локализация
ТребуетсяУстановкаСпискаОтзыва = Ложь;
Если ТипЗнч(МенеджерКриптографииДляПроверки) = Тип("МенеджерКриптографии") Тогда
@@ -2363,11 +2371,15 @@
АдресСпискаОтзываВнутренний.АдресВнешний, АдресСпискаОтзываВнутренний.АдресВнутренний);
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось установить список отзыва %1 при проверке сертификата: %2'"),
АдресСпискаОтзываВнутренний.АдресВнутренний, ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(
НСтр("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(ДатаПоследнегоИзмененияСтрока);
КонецЕсли;
@@ -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 Тогда
Результат.ОшибкаПоКлассификатору.Решение = Новый ФорматированнаяСтрока(Решение);
КонецЕсли;
@@ -7612,8 +7669,6 @@
КонецФункции
// Локализация
Процедура УстановитьСписокОтзываСертификата(Сертификат, Адреса = Неопределено, АдресВнутренний = Неопределено) Экспорт
ОбъектКомпоненты = ОбъектВнешнейКомпоненты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 = 'Диагностика доступности серверов меток времени'"),);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -1928,7 +1958,7 @@
Контекст.Вставить("ДляПроверкиПодписи", Ложь);
Контекст.Вставить("ДействияДляУстраненияОшибок", Новый Соответствие);
Контекст.Вставить("СвойстваСертификата");
Возврат Контекст;
КонецФункции
@@ -2132,9 +2162,7 @@
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебныйКлиентПовтИсп.ОшибкаПоКлассификатору(ОписаниеОшибки);
// Локализация
Если ОшибкаПоКлассификатору <> Неопределено И ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда
Действие = Неопределено;
@@ -2156,16 +2184,17 @@
ИмяИздателя = СтроковыеФункцииКлиент.СтрокаЛатиницей(ИмяИздателя);
АдресСпискаОтзываВнутренний = ЭлектроннаяПодписьСлужебныйКлиентСервер.АдресСпискаОтзываВнутренний(
ИмяИздателя, Контекст.ДанныеСертификата);
Если ЗначениеЗаполнено(АдресСпискаОтзываВнутренний.АдресВнутренний) Тогда
ПараметрыУстановкиСпискаОтзыва = ПараметрыУстановкиСпискаОтзыва(
ПараметрыУстановкиСпискаОтзыва = ПараметрыУстановкиСпискаОтзыва(
Контекст.СертификатКриптографии);
ПараметрыУстановкиСпискаОтзыва.ОповещениеОЗавершении = Новый ОписаниеОповещения("ПроверитьСертификатПовторно",
ЭтотОбъект, Контекст);
ПараметрыУстановкиСпискаОтзыва.ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для проверки сертификата требуется установка списка отзыва с помощью внешней компоненты %1.'"),
"ExtraCryptoAPI");
Если ЗначениеЗаполнено(АдресСпискаОтзываВнутренний.АдресВнутренний) Тогда
ПараметрыУстановкиСпискаОтзыва.Адреса = АдресСпискаОтзываВнутренний.АдресВнешний;
ПараметрыУстановкиСпискаОтзыва.АдресВнутренний = АдресСпискаОтзываВнутренний.АдресВнутренний;
ПараметрыУстановкиСпискаОтзыва.ОповещениеОЗавершении = Новый ОписаниеОповещения("ПроверитьСертификатПовторно",
ЭтотОбъект, Контекст);
ПараметрыУстановкиСпискаОтзыва.ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для проверки сертификата требуется установка списка отзыва с помощью внешней компоненты %1.'"),
"ExtraCryptoAPI");
УстановитьСписокОтзываСертификата(ПараметрыУстановкиСпискаОтзыва);
Возврат;
КонецЕсли;
@@ -2174,9 +2203,7 @@
КонецЕсли;
КонецЕсли;
// Конец локализация
Если ОшибкаПоКлассификатору <> Неопределено Тогда
ОбработатьОшибкуПоКлассификатору(ОписаниеОшибки, Контекст.ТребуетПроверкиНаКлиенте, Контекст, ОшибкаПоКлассификатору);
КонецЕсли;
@@ -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,17 +10983,32 @@
УдалитьСертификатИзЛокальногоХранилища(Параметры.ДанныеСертификата);
КонецЕсли;
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ДиагностикаСерверовМетокВремениСервер" Тогда
ДиагностикаСерверовМетокВремени("Сервер");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ДиагностикаСерверовМетокВремениКлиент" Тогда
ДиагностикаСерверовМетокВремени("Клиент");
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ОткрытьНастройкиЭлектроннойПодписи" Тогда
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкиПрограммы") Тогда
МодульНастройкиПрограммыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("НастройкиПрограммыКлиент");
МодульНастройкиПрограммыКлиент.ОткрытьОбщиеНастройки();
КонецЕсли;
ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "УстановитьКомпоненту" Тогда
Оповещение = Новый ОписаниеОповещения("ОповеститьОбУспешномПодключенииКомпоненты", ЭтотОбъект);
ВыполнитьПослеПроверкиРасширенияИКомпоненты(Оповещение);
ВыполнитьПослеПроверкиРасширенияИКомпоненты(Оповещение);
ИначеЕсли СтрНайти(НавигационнаяСсылкаФорматированнойСтроки, "http") Тогда
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(НавигационнаяСсылкаФорматированнойСтроки, );
ИначеЕсли СтрНачинаетсяС(НавигационнаяСсылкаФорматированнойСтроки, "e1cib") Тогда
СтандартнаяОбработка = Истина;
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Действие временно недоступно.'"));
ПоказатьПредупреждение(, НСтр("ru = 'Действие будет доступно в следующих обновлениях приложения'"));
КонецЕсли;
КонецПроцедуры
@@ -11198,7 +11290,7 @@
КонецПроцедуры
Асинх Функция СвойстваПодписиЧтениеМенеджеромКриптографии(Подпись, МенеджерКриптографии, ПрочитатьСертификаты)
Асинх Функция СвойстваПодписиЧтениеМенеджеромКриптографии(Подпись, МенеджерКриптографии, ПрочитатьСертификаты) Экспорт
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатЧтенияСвойствПодписи();
@@ -11458,5 +11550,28 @@
КонецФункции
Функция РезультатДиагностикиСерверовМетокВремени()
АдресаСерверовМетокВремени = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени;
Если АдресаСерверовМетокВремени.Количество() = 0 Тогда
Возврат НСтр("ru = 'Адреса серверов меток времени не заполнены в настройках электронной подписи.'");
Иначе
#Если ВебКлиент Тогда
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Диагностика серверов меток времени недоступна при работе в веб-клиенте. Попробуйте в браузере скачать файл по ссылке.
|%1'"), СтрСоединить(АдресаСерверовМетокВремени, Символы.ПС));
#Иначе
СтрокаПодключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подключение к серверам меток времени на компьютере <%1>.'"), ИмяКомпьютера());
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ДиагностикаСерверовМетокВремени(АдресаСерверовМетокВремени, СтрокаПодключения);
#КонецЕсли
КонецЕсли;
КонецФункции
#КонецОбласти
@@ -1746,14 +1746,14 @@
Если Подпись.МеткаВремениПодписи <> Неопределено Тогда
СертификатПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениПодписи.Дата + РазницаСУниверсальнымВременем);
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениПодписи.Дата);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Дата + РазницаСУниверсальнымВременем;
КонецЕсли;
Если Подпись.МеткаВремениДанныхПроверкиПодписи <> Неопределено Тогда
СертификатПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + РазницаСУниверсальнымВременем);
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениДанныхПроверкиПодписи.Дата);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + РазницаСУниверсальнымВременем;
КонецЕсли;
@@ -1761,8 +1761,8 @@
ИндексПоследнейМетки = Подпись.АрхивныеМеткиВремени.ВГраница();
СертификатПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.АрхивныеМеткиВремени[0].Дата + РазницаСУниверсальнымВременем);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Дата;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.АрхивныеМеткиВремени[0].Дата);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[ИндексПоследнейМетки].Дата + РазницаСУниверсальнымВременем;
КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) Тогда
@@ -1776,7 +1776,7 @@
КонецЕсли;
Если ДатаПодписиИзМетки <> Дата(3999, 12, 31) Тогда
ПараметрыПодписи.ДатаПодписиИзМетки = ДатаПодписиИзМетки;
ПараметрыПодписи.ДатаПодписиИзМетки = ДатаПодписиИзМетки + РазницаСУниверсальнымВременем;
КонецЕсли;
Возврат ПараметрыПодписи;
@@ -1865,9 +1865,18 @@
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.РасширеннаяДолгосрочнаяCAdESXLongType2")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда
Граница = Результат.АдресаСерверовМетокВремени.ВГраница();
Для Счетчик = 0 По Граница Цикл
ТекущийИндекс = Граница - Счетчик;
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(Результат.АдресаСерверовМетокВремени[ТекущийИндекс]);
Если СтруктураURI.ИмяСервера = "" Тогда
Результат.АдресаСерверовМетокВремени.Удалить(ТекущийИндекс);
КонецЕсли;
КонецЦикла;
Если Результат.АдресаСерверовМетокВремени.Количество() = 0 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Для создания подписи типа ""%1"" заполните адреса серверов штампов времени.'"), ТипПодписи);
НСтр("ru='Для создания подписи с типом ""%1"" заполните адреса серверов меток времени.'"), ТипПодписи);
КонецЕсли;
ИначеЕсли ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.Базовая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
// Параметры:
@@ -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'"), Действие, Решение);
ИначеЕсли Действие = "УстановитьКорневойСертификат" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите корневой сертификат</a> удостоверяющего центра автоматически.
НСтр("ru = '• <a href=%1>Установите корневой сертификат</a> удостоверяющего центра автоматически.
|%2'"), Действие, Решение);
ИначеЕсли Действие = "УстановитьСертификат" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите сертификат</a> в Личное хранилище сертификатов пользователя операционной системы автоматически.
НСтр("ru = '• <a href=%1>Установите сертификат</a> в Личное хранилище сертификатов пользователя операционной системы автоматически.
|%2'"), Действие, Решение);
ИначеЕсли Действие = "УстановитьСертификатВКонтейнер" Тогда
Решение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '- <a href=%1>Установите сертификат в контейнер</a> прямо из приложения.
НСтр("ru = '• <a href=%1>Установите сертификат в контейнер</a> прямо из приложения.
|%2'"), Действие, Решение);
КонецЕсли;
Loaded 100 of 230 files, more files were not shown because too many files have changed in this diff. Show more