11 Commits
Author SHA1 Message Date
Компания 1С f7b9b0c5a6 3_1_9_518 2024-10-02 12:31:00 +03:00
Компания 1С 7c5ea77b0d 3_1_9_487 2024-08-29 14:21:00 +03:00
Компания 1С fcfcb3effc 3_1_9_475 2024-08-16 12:42:00 +03:00
Компания 1С 07ffb5b6a9 3_1_9_460 2024-07-31 22:48:00 +03:00
Компания 1С b3bc470ceb 3_1_9_453 2024-07-24 15:27:00 +03:00
Компания 1С 583ec3a036 3_1_9_434 2024-07-04 14:00:00 +03:00
Компания 1С aa53d09a56 3_1_9_421 2024-06-21 12:19:00 +03:00
Компания 1С 96e874e97f 3_1_9_416 2024-06-17 10:27:00 +03:00
Компания 1С 416a5118dd 3_1_9_389 2024-05-23 17:39:00 +03:00
Компания 1С ef0bf970c7 3_1_9_380 2024-05-16 09:48:00 +03:00
Компания 1С 9c59596c13 3_1_9_357 2024-04-20 22:46:00 +03:00
279 changed files with 47102 additions and 9812 deletions

No files matched your search

@@ -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.327") < 0
Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияПодсистемыНаНачалоОбновления, "3.1.9.389") < 0
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами")
КонецФункции
@@ -125,6 +125,11 @@
// См. УправлениеДоступом.ГруппаДоступаАдминистраторы
Функция ГруппаДоступаАдминистраторы(ПрофильАдминистратор = Неопределено) Экспорт
Если ЗначениеЗаполнено(ПрофильАдминистратор) Тогда
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Справочники.ГруппыДоступа.ГруппаДоступаАдминистраторы");
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
@@ -792,6 +797,9 @@
//
Процедура ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Справочники.ГруппыДоступа.ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы");
ГруппаДоступаАдминистраторы = УправлениеДоступом.ГруппаДоступаАдминистраторы();
Если ЭлементДанных.Ссылка <> ГруппаДоступаАдминистраторы Тогда
Возврат;
@@ -1177,6 +1177,7 @@
Строка.ИмяВЕдЧисле = "ЖурналДокументов";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Журнал документов'");
Строка.БезДанных = Истина;
Строка.ОбъектыРасширений = Истина;
Строка = Результат.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("706cf832-0ae5-45b5-8a4a-1f251d054f3b");
@@ -1258,6 +1259,7 @@
Строка.Синоним = НСтр("ru = 'Бизнес-процессы'");
Строка.ИмяВЕдЧисле = "БизнесПроцесс";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Бизнес-процесс'");
Строка.ОбъектыРасширений = Истина;
Строка = Результат.Добавить();
Строка.Идентификатор = Новый УникальныйИдентификатор("8d9153ad-7cea-4e25-9542-a557ee59fd16");
@@ -1265,6 +1267,7 @@
Строка.Синоним = НСтр("ru = 'Задачи'");
Строка.ИмяВЕдЧисле = "Задача";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'");
Строка.ОбъектыРасширений = Истина;
Для каждого Строка Из Результат Цикл
Строка.ПорядокКоллекции = Результат.Индекс(Строка);
@@ -3,6 +3,10 @@
<items xsi:type="form:Table">
<name>ТаблицаЗначенийОграничений</name>
<id>1</id>
<title>
<key>ru</key>
<value>Таблица</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -23,6 +27,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаЗначенийОграниченийКод</name>
<id>14</id>
<title>
<key>ru</key>
<value>Код</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -64,6 +72,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаЗначенийОграниченийНаименование</name>
<id>17</id>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -104,6 +116,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаЗначенийОграниченийДействуетС</name>
<id>20</id>
<title>
<key>ru</key>
<value>Действует С</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -144,6 +160,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаЗначенийОграниченийОтозвано</name>
<id>23</id>
<title>
<key>ru</key>
<value>Отозвано</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -179,6 +199,10 @@
<items xsi:type="form:Button">
<name>ТаблицаЗначенийОграниченийВыбрать</name>
<id>26</id>
<title>
<key>ru</key>
<value>Выбрать</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -453,6 +477,13 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>КодОграничения</name>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -3,6 +3,10 @@
<items xsi:type="form:Table">
<name>ТаблицаОграничений</name>
<id>1</id>
<title>
<key>ru</key>
<value>Таблица ограничений</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -28,6 +32,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаКод</name>
<id>14</id>
<title>
<key>ru</key>
<value>Код</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -70,6 +78,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаНаименование</name>
<id>17</id>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -136,6 +148,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаОписание</name>
<id>23</id>
<title>
<key>ru</key>
<value>Описание</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -206,6 +222,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаДействуетС</name>
<id>35</id>
<title>
<key>ru</key>
<value>Действует С</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -246,6 +266,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаОтозвано</name>
<id>38</id>
<title>
<key>ru</key>
<value>Отозвано</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -281,6 +305,10 @@
<items xsi:type="form:Button">
<name>ФормаВыбрать</name>
<id>26</id>
<title>
<key>ru</key>
<value>Выбрать</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -3,6 +3,10 @@
<items xsi:type="form:Table">
<name>ТаблицаНастроек</name>
<id>1</id>
<title>
<key>ru</key>
<value>Таблица настроек</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -23,6 +27,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаНастроекИмя</name>
<id>14</id>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -64,6 +72,10 @@
<items xsi:type="form:FormField">
<name>ТаблицаНастроекПользователь</name>
<id>17</id>
<title>
<key>ru</key>
<value>Пользователь</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -108,6 +120,10 @@
<items xsi:type="form:Button">
<name>ТаблицаНастроекВыбрать</name>
<id>22</id>
<title>
<key>ru</key>
<value>Выбрать</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -134,6 +150,10 @@
<items xsi:type="form:Button">
<name>ТаблицаНастроекУдалитьНастройку</name>
<id>20</id>
<title>
<key>ru</key>
<value>Удалить настройку</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -3,6 +3,10 @@
<items xsi:type="form:FormField">
<name>ПричинаОтмены</name>
<id>4</id>
<title>
<key>ru</key>
<value>Причина отмены</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -49,6 +53,10 @@
<items xsi:type="form:Button">
<name>ОтменитьДоверенность</name>
<id>11</id>
<title>
<key>ru</key>
<value>Отменить доверенность</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -20,21 +20,29 @@
&НаКлиенте
Процедура ОтменитьДоверенность(Команда)
Если ПроверитьЗаполнение() Тогда
ДанныеОтмены = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ПолучитьФайлОтменыДоверенности(Доверенность, ПричинаОтмены);
ОписаниеДанных = Новый Структура;
ОписаниеДанных.Вставить("Операция", НСтр("ru='Отмена доверенности'"));
ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru='Доверенность'"));
ОписаниеДанных.Вставить("Данные", ДанныеОтмены.Содержимое);
ЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных,,Новый ОписаниеОповещения("ПослеПодписанияДоверенности", ЭтотОбъект, ДанныеОтмены));
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
ДанныеОтмены = ФайлОтменыДоверенности(Доверенность, ПричинаОтмены);
ОписаниеДанных = Новый Структура;
ОписаниеДанных.Вставить("Операция", НСтр("ru='Отмена доверенности'"));
ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru='Доверенность'"));
ОписаниеДанных.Вставить("Данные", ДанныеОтмены.Содержимое);
ЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных,,Новый ОписаниеОповещения("ПослеПодписанияДоверенности", ЭтотОбъект, ДанныеОтмены));
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервереБезКонтекста
Функция ФайлОтменыДоверенности(Доверенность, ПричинаОтмены)
Возврат МашиночитаемыеДоверенностиФНССлужебный.ФайлОтменыДоверенности(Доверенность, ПричинаОтмены);
КонецФункции
&НаКлиенте
Процедура ПослеПодписанияДоверенности(Результат, ДанныеОтмены) Экспорт
Если Результат.Успех Тогда
@@ -61,7 +69,8 @@
Возврат;
КонецЕсли;
РезультатОтмены = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ОтменитьМЧДРР(ДанныеОтмены.ИмяФайла, ДанныеОтмены.Содержимое, СвойстваПодписи.Подпись, ДанныеОтмены.Доверенность);
РезультатОтмены = ОтменитьМЧДРР(ДанныеОтмены.ИмяФайла, ДанныеОтмены.Содержимое, СвойстваПодписи.Подпись,
ДанныеОтмены.Доверенность);
Если ЗначениеЗаполнено(РезультатОтмены.Ошибка) Тогда
КонтекстОшибки = МашиночитаемыеДоверенностиФНССлужебныйКлиент.КонтекстДляОбработкиОшибкиРР();
@@ -80,7 +89,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" Тогда
СведенияОФизическомЛице.ДокументВид = "";
СведенияОФизическомЛице.ДокументКемВыдан = "";
СведенияОФизическомЛице.ДокументКодПодразделения = "";
@@ -2113,6 +2113,10 @@
<items xsi:type="form:Button">
<name>ФормаЗаполнить</name>
<id>202</id>
<title>
<key>ru</key>
<value>Заполнить все поля</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -7,6 +7,10 @@
<items xsi:type="form:FormField">
<name>ТипНалоговыхОргановДействия</name>
<id>43</id>
<title>
<key>ru</key>
<value>Тип налоговых органов действия</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -66,6 +70,10 @@
<items xsi:type="form:Table">
<name>НалоговыеОрганыДействия</name>
<id>24</id>
<title>
<key>ru</key>
<value>Налоговые органы действия</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -79,6 +87,10 @@
<items xsi:type="form:FormField">
<name>НалоговыеОрганыДействияПометка</name>
<id>52</id>
<title>
<key>ru</key>
<value>Пометка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -112,6 +124,10 @@
<items xsi:type="form:FormField">
<name>НалоговыеОрганыДействияКод</name>
<id>55</id>
<title>
<key>ru</key>
<value>Код</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -153,6 +169,10 @@
<items xsi:type="form:FormField">
<name>НалоговыеОрганыДействияНаименование</name>
<id>58</id>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -275,11 +295,17 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
<extInfo xsi:type="form:ButtonGroupExtInfo">
<representation>Compact</representation>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>НалоговыеОрганыДействияКнопкаДобавить</name>
<id>61</id>
<title>
<key>ru</key>
<value>Добавить</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -22,6 +22,10 @@
<items xsi:type="form:Button">
<name>ПолномочияИзКлассификатора</name>
<id>195</id>
<title>
<key>ru</key>
<value>Полномочия в машиночитаемом виде</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -48,6 +52,10 @@
<items xsi:type="form:Button">
<name>ПолномочияВТекстовомВиде</name>
<id>199</id>
<title>
<key>ru</key>
<value>Полномочия в текстовом виде</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -74,6 +82,10 @@
<items xsi:type="form:Button">
<name>ПолномочияНеОграничены</name>
<id>197</id>
<title>
<key>ru</key>
<value>Полномочия не ограничены</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -122,12 +134,47 @@
<importance>Normal</importance>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ОбновитьКлассификаторыПолномочий</name>
<id>248</id>
<title>
<key>ru</key>
<value>Обновить классификаторы полномочий</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОбновитьКлассификаторыПолномочийРасширеннаяПодсказка</name>
<id>249</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ОбновитьКлассификаторыПолномочий</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаКомпактная</name>
<id>233</id>
<items xsi:type="form:Button">
<name>УстановитьФлажки</name>
<id>98</id>
<title>
<key>ru</key>
<value>Установить флажки</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -154,6 +201,10 @@
<items xsi:type="form:Button">
<name>СнятьФлажки</name>
<id>96</id>
<title>
<key>ru</key>
<value>Снять флажки</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -184,7 +235,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа компактная</value>
<value>Компактная</value>
</title>
<extendedTooltip>
<name>ГруппаКомпактнаяРасширеннаяПодсказка</name>
@@ -206,6 +257,10 @@
<items xsi:type="form:Button">
<name>ПоказатьВыбранные</name>
<id>100</id>
<title>
<key>ru</key>
<value>Показать выбранные</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -258,6 +313,10 @@
<items xsi:type="form:Button">
<name>СохранитьНастройкуПолномочий</name>
<id>227</id>
<title>
<key>ru</key>
<value>Сохранить настройку полномочий</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -284,6 +343,10 @@
<items xsi:type="form:Button">
<name>ЗагрузитьНастройкуПолномочий</name>
<id>229</id>
<title>
<key>ru</key>
<value>Загрузить настройку полномочий</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -314,7 +377,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа сохранение</value>
<value>Сохранение</value>
</title>
<toolTipRepresentation>None</toolTipRepresentation>
<extendedTooltip>
@@ -423,6 +486,10 @@
<items xsi:type="form:Table">
<name>Полномочия</name>
<id>56</id>
<title>
<key>ru</key>
<value>Полномочия</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -443,6 +510,10 @@
<items xsi:type="form:FormField">
<name>ПолномочияПометка</name>
<id>69</id>
<title>
<key>ru</key>
<value>Пометка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -486,6 +557,10 @@
<items xsi:type="form:FormField">
<name>ПолномочияНаименование</name>
<id>75</id>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -527,6 +602,10 @@
<items xsi:type="form:FormField">
<name>ПолномочияКод</name>
<id>72</id>
<title>
<key>ru</key>
<value>Код</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -569,6 +648,10 @@
<items xsi:type="form:FormField">
<name>ПолномочияМнемокод</name>
<id>132</id>
<title>
<key>ru</key>
<value>Мнемокод</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -610,6 +693,10 @@
<items xsi:type="form:FormField">
<name>ПолномочияНетВКлассификаторе</name>
<id>83</id>
<title>
<key>ru</key>
<value>Нет в классификаторе</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -643,6 +730,10 @@
<items xsi:type="form:FormField">
<name>ПолномочияИдентификаторПолномочия</name>
<id>169</id>
<title>
<key>ru</key>
<value>Идентификатор полномочия</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -810,6 +901,10 @@
<items xsi:type="form:Button">
<name>ПолномочияИзКлассификатора1</name>
<id>203</id>
<title>
<key>ru</key>
<value>Полномочия в машиночитаемом виде</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -836,6 +931,10 @@
<items xsi:type="form:Button">
<name>ПолномочияВТекстовомВиде1</name>
<id>205</id>
<title>
<key>ru</key>
<value>Полномочия в текстовом виде</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -862,6 +961,10 @@
<items xsi:type="form:Button">
<name>ПолномочияНеОграничены1</name>
<id>207</id>
<title>
<key>ru</key>
<value>Полномочия не ограничены</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -916,6 +1019,10 @@
<items xsi:type="form:Button">
<name>ВыбратьИзКлассификатора</name>
<id>172</id>
<title>
<key>ru</key>
<value>Выбрать из классификатора</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -949,7 +1056,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа команды таблицы</value>
<value>Команды таблицы</value>
</title>
<extendedTooltip>
<name>ГруппаКомандыТаблицыРасширеннаяПодсказка</name>
@@ -971,6 +1078,10 @@
<items xsi:type="form:Button">
<name>ВыбранныеПолномочияТаблицаСохранитьНастройкуПолномочий</name>
<id>223</id>
<title>
<key>ru</key>
<value>Сохранить настройку полномочий</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -997,6 +1108,10 @@
<items xsi:type="form:Button">
<name>ВыбранныеПолномочияТаблицаЗагрузитьНастройкуПолномочий</name>
<id>225</id>
<title>
<key>ru</key>
<value>Загрузить настройку полномочий</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1027,7 +1142,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа сохранение настроек</value>
<value>Сохранение настроек</value>
</title>
<extendedTooltip>
<name>ГруппаСохранениеНастроекРасширеннаяПодсказка</name>
@@ -1091,6 +1206,10 @@
<items xsi:type="form:Table">
<name>ВыбранныеПолномочияТаблица</name>
<id>138</id>
<title>
<key>ru</key>
<value>Полномочия</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1103,6 +1222,10 @@
<items xsi:type="form:FormField">
<name>ВыбранныеПолномочияТаблицаКод</name>
<id>151</id>
<title>
<key>ru</key>
<value>Код</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1144,6 +1267,10 @@
<items xsi:type="form:FormField">
<name>ВыбранныеПолномочияТаблицаНаименование</name>
<id>154</id>
<title>
<key>ru</key>
<value>Наименование</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1185,6 +1312,10 @@
<items xsi:type="form:FormField">
<name>ВыбранныеПолномочияТаблицаНетВКлассификаторе</name>
<id>157</id>
<title>
<key>ru</key>
<value>Нет в классификаторе</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -1217,6 +1348,10 @@
<items xsi:type="form:FormField">
<name>ВыбранныеПолномочияТаблицаИдентификаторПолномочия</name>
<id>160</id>
<title>
<key>ru</key>
<value>Идентификатор полномочия</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -1252,6 +1387,10 @@
<items xsi:type="form:FormField">
<name>ВыбранныеПолномочияТаблицаМнемокод</name>
<id>163</id>
<title>
<key>ru</key>
<value>Мнемокод</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -1292,6 +1431,10 @@
<items xsi:type="form:FormField">
<name>ВыбранныеПолномочияТаблицаЕстьОграничения</name>
<id>190</id>
<title>
<key>ru</key>
<value>Есть ограничения</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -1336,6 +1479,10 @@
<event>BeforeAddRow</event>
<name>ВыбранныеПолномочияТаблицаПередНачаломДобавления</name>
</handlers>
<handlers>
<event>BeforeDeleteRow</event>
<name>ВыбранныеПолномочияТаблицаПередУдалением</name>
</handlers>
<handlers>
<event>OnActivateRow</event>
<name>ВыбранныеПолномочияТаблицаПриАктивизацииСтроки</name>
@@ -1435,7 +1582,6 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<autoMaxRowsCount>true</autoMaxRowsCount>
<selectionMode>MultiRow</selectionMode>
<header>true</header>
<headerHeight>1</headerHeight>
<footerHeight>1</footerHeight>
@@ -1443,7 +1589,6 @@
<verticalScrollBar>AutoUse</verticalScrollBar>
<horizontalLines>true</horizontalLines>
<verticalLines>true</verticalLines>
<useAlternationRowColorBWA>false</useAlternationRowColorBWA>
<autoInsertNewRow>true</autoInsertNewRow>
<searchOnInput>Auto</searchOnInput>
<initialListView>Auto</initialListView>
@@ -1486,6 +1631,10 @@
<items xsi:type="form:FormField">
<name>ОграниченияПолномочияКод</name>
<id>118</id>
<title>
<key>ru</key>
<value>Код ограничения</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1533,6 +1682,10 @@
<items xsi:type="form:FormField">
<name>ОграниченияПолномочияКодЗначения</name>
<id>127</id>
<title>
<key>ru</key>
<value>Код значения</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1608,6 +1761,10 @@
<items xsi:type="form:FormField">
<name>ОграниченияПолномочияНаименование</name>
<id>121</id>
<title>
<key>ru</key>
<value>Наименование ограничения</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1649,6 +1806,10 @@
<items xsi:type="form:FormField">
<name>ОграниченияПолномочияНаименованиеЗначения</name>
<id>124</id>
<title>
<key>ru</key>
<value>Значение ограничения</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1716,6 +1877,10 @@
<items xsi:type="form:FormField">
<name>ОграниченияПолномочийИдентификаторПолномочия</name>
<id>166</id>
<title>
<key>ru</key>
<value>Идентификатор полномочия</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -1751,6 +1916,10 @@
<items xsi:type="form:FormField">
<name>ОграниченияПолномочийНетВКлассификаторе</name>
<id>245</id>
<title>
<key>ru</key>
<value>Нет в классификаторе</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
@@ -1790,6 +1959,10 @@
<event>BeforeAddRow</event>
<name>ОграниченияПолномочийПередНачаломДобавления</name>
</handlers>
<handlers>
<event>BeforeDeleteRow</event>
<name>ОграниченияПолномочийПередУдалением</name>
</handlers>
<handlers>
<event>AfterDeleteRow</event>
<name>ОграниченияПолномочийПослеУдаления</name>
@@ -1981,6 +2154,10 @@
<items xsi:type="form:Button">
<name>ПолномочияИзКлассификатора2</name>
<id>215</id>
<title>
<key>ru</key>
<value>Полномочия в машиночитаемом виде</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -2007,6 +2184,10 @@
<items xsi:type="form:Button">
<name>ПолномочияВТекстовомВиде2</name>
<id>217</id>
<title>
<key>ru</key>
<value>Полномочия в текстовом виде</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -2033,6 +2214,10 @@
<items xsi:type="form:Button">
<name>ПолномочияНеОграничены2</name>
<id>219</id>
<title>
<key>ru</key>
<value>Полномочия не ограничены</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -2108,6 +2293,10 @@
<items xsi:type="form:FormField">
<name>ТекстПолномочий</name>
<id>80</id>
<title>
<key>ru</key>
<value>Текст полномочий</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -2153,7 +2342,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа текст полномочий</value>
<value>Текст полномочий</value>
</title>
<extendedTooltip>
<name>ГруппаТекстПолномочийРасширеннаяПодсказка</name>
@@ -2270,6 +2459,10 @@
<items xsi:type="form:Button">
<name>ФормаКнопкаСохранить</name>
<id>49</id>
<title>
<key>ru</key>
<value>OK</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -2838,6 +3031,161 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ОграниченияПолномочийРодительскойДоверенности</name>
<id>7</id>
<valueType>
<types>ValueTable</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<savedData>true</savedData>
<columns>
<name>ИдентификаторПолномочия</name>
<id>1</id>
<valueType>
<types>UUID</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Код</name>
<id>2</id>
<valueType>
<types>String</types>
<stringQualifiers>
<length>255</length>
</stringQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Наименование</name>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers>
<length>255</length>
</stringQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>НаименованиеЗначения</name>
<id>4</id>
<valueType>
<types>String</types>
<stringQualifiers>
<length>255</length>
</stringQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>КодЗначения</name>
<id>5</id>
<valueType>
<types>String</types>
<stringQualifiers>
<length>255</length>
</stringQualifiers>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ЭтоТекстовоеЗначение</name>
<id>7</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ОписаниеТипа</name>
<id>8</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>Описание</name>
<id>6</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>НетВКлассификаторе</name>
<id>9</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>НетВКлассификатореКодаЗначения</name>
<id>10</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<formCommands>
<name>УстановитьФлажки</name>
<title>
@@ -3078,6 +3426,24 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОбновитьКлассификаторыПолномочий</name>
<title>
<key>ru</key>
<value>Обновить классификаторы полномочий</value>
</title>
<id>11</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОбновитьКлассификаторыПолномочий</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>ТолькоПросмотр</name>
<valueType>
@@ -3094,6 +3460,14 @@
<types>Boolean</types>
</valueType>
</parameters>
<parameters>
<name>ПолномочияРодительскойДоверенности</name>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<keyParameter>true</keyParameter>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -13,11 +13,11 @@
УстановитьУсловноеОформление();
ЭтоПередоверие = ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности);
ЭтоВыборИзКлассификатора = Параметры.РежимКлассификатора;
Элементы.ГруппаВидПолномочий.ТолькоПросмотр = Параметры.ТолькоПросмотр;
Элементы.ВыбратьИзКлассификатора.Видимость = Не Параметры.ТолькоПросмотр;
РежимКлассификатора = Параметры.РежимКлассификатора;
Если Параметры.ВыбранныеПолномочия = Неопределено Тогда
ВидПолномочий = "0";
Иначе
@@ -35,14 +35,24 @@
КонецЕсли;
СформироватьДеревоПолномочий(Параметры.ВыбранныеПолномочия.Полномочия);
Элементы.ПоказатьВыбранные.Пометка = Элементы.ПоказатьВыбранные.Пометка
И Не РежимКлассификатора;
Элементы.ПоказатьВыбранные.Видимость = Не Параметры.РежимКлассификатора;
Элементы.ГруппаКнопокВидПолномочий.Видимость = Не Параметры.РежимКлассификатора;
Элементы.ГруппаСохранение.Видимость = Не Параметры.РежимКлассификатора;
Элементы.ГруппаОграниченияПолномочий.Видимость = Не Параметры.РежимКлассификатора;
ЭтоВыборИзКлассификатора = Параметры.РежимКлассификатора;
Элементы.ПоказатьВыбранные.Пометка = Не ЭтоВыборИзКлассификатора И Не ЭтоПередоверие И ВыбранныеПолномочияТаблица.Количество() > 0;
Элементы.ПоказатьВыбранные.Видимость = Не ЭтоВыборИзКлассификатора И Не ЭтоПередоверие;
Элементы.ГруппаСохранение.Видимость = Не ЭтоВыборИзКлассификатора;
Элементы.ГруппаОграниченияПолномочий.Видимость = Не ЭтоВыборИзКлассификатора;
Элементы.ВыбранныеПолномочияТаблицаЗагрузитьНастройкуПолномочий.Видимость = Не ЭтоПередоверие;
Элементы.ЗагрузитьНастройкуПолномочий.Видимость = Не ЭтоПередоверие;
КонецЕсли;
Элементы.ТекстПолномочий.ТолькоПросмотр = Параметры.ТолькоПросмотр Или ЭтоПередоверие;
Элементы.ГруппаКнопокВидПолномочий.Видимость = Не ЭтоВыборИзКлассификатора И Не Параметры.ТолькоПросмотр И Не ЭтоПередоверие;
Элементы.ГруппаКнопокВидПолномочий1.Видимость = Элементы.ГруппаКнопокВидПолномочий.Видимость;
Элементы.ГруппаКнопокВидПолномочий2.Видимость = Элементы.ГруппаКнопокВидПолномочий.Видимость;
Элементы.ОбновитьКлассификаторыПолномочий.Видимость = Не ОбщегоНазначения.РазделениеВключено() И Не ЭтоПередоверие;
УправлениеФормой(ЭтотОбъект);
КонецПроцедуры
@@ -155,6 +165,13 @@
&НаКлиенте
Процедура ВыбранныеПолномочияТаблицаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Если ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Нельзя добавлять полномочия у передоверия вручную.'"), , , , Отказ);
Возврат;
КонецЕсли;
Отказ = Истина;
НоваяСтрока = ВыбранныеПолномочияТаблица.Добавить();
@@ -195,6 +212,25 @@
КонецПроцедуры
&НаКлиенте
Процедура ОграниченияПолномочийПередУдалением(Элемент, Отказ)
Если ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности) Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Нельзя удалять ограничения у передоверия.'"), , , , Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбранныеПолномочияТаблицаПередУдалением(Элемент, Отказ)
СнятьОтметкуСтроки(Элементы.ВыбранныеПолномочияТаблица.ТекущиеДанные.ИдентификаторПолномочия);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -310,6 +346,16 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьКлассификаторыПолномочий(Команда)
ОбновитьКлассификаторыПолномочийНаСервере();
ОбновитьПовторноИспользуемыеЗначения();
ОбновитьСписокПолномочий();
ПоказатьПредупреждение(, НСтр("ru = 'Обновление классификаторов полномочий выполнено.'"));
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -337,6 +383,9 @@
Форма.Элементы.ГруппаТекстПолномочий.Видимость = Ложь;
ВидимостьПоказатьВыбранные(Форма);
КонецЕсли;
Форма.КлючСохраненияПоложенияОкна = Форма.ВидПолномочий;
Форма.КлючНазначенияИспользования = Форма.ВидПолномочий;
КонецПроцедуры
@@ -447,15 +496,37 @@
&НаСервере
Процедура СформироватьДеревоПолномочий(АдресПолномочий)
КлассификаторПолномочий = МашиночитаемыеДоверенностиФНСПовтИсп.КлассификаторПолномочий();
ДеревоЗначений = ОбщегоНазначения.СкопироватьРекурсивно(КлассификаторПолномочий);
Если Не ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности) Тогда
КлассификаторПолномочий = МашиночитаемыеДоверенностиФНСПовтИсп.КлассификаторПолномочий();
ДеревоЗначений = ОбщегоНазначения.СкопироватьРекурсивно(КлассификаторПолномочий);
Иначе
ДеревоЗначений = Новый ДеревоЗначений;
ДеревоЗначений.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
ДеревоЗначений.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
КонецЕсли;
ДеревоЗначений.Колонки.Добавить("Мнемокод", ОбщегоНазначения.ОписаниеТипаСтрока(255));
ДеревоЗначений.Колонки.Добавить("НетВКлассификаторе", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("Пометка", ОбщегоНазначения.ОписаниеТипаЧисло(1));
ДеревоЗначений.Колонки.Добавить("Флажок", Новый ОписаниеТипов("Булево"));
ДеревоЗначений.Колонки.Добавить("ИдентификаторПолномочия", Новый ОписаниеТипов("УникальныйИдентификатор"));
Если ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности) Тогда
ПолномочияРодительскойДоверенности = ПолучитьИзВременногоХранилища(Параметры.ПолномочияРодительскойДоверенности);
Для Каждого Полномочие Из ПолномочияРодительскойДоверенности.Полномочия Цикл
НоваяСтрока = ДеревоЗначений.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Полномочие);
КонецЦикла;
Для Каждого Ограничение Из ПолномочияРодительскойДоверенности.Ограничения Цикл
НоваяСтрока = ОграниченияПолномочийРодительскойДоверенности.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Ограничение);
Если Не ЗначениеЗаполнено(НоваяСтрока.КодЗначения) Тогда
НоваяСтрока.ЭтоТекстовоеЗначение = Истина;
НоваяСтрока.НаименованиеЗначения = Ограничение.ТекстовоеЗначение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если АдресПолномочий <> Неопределено Тогда
ВыбранныеПолномочия = ПолучитьИзВременногоХранилища(АдресПолномочий);
@@ -467,9 +538,8 @@
КонецЕсли;
Элементы.ПоказатьВыбранные.Пометка = ВыбранныеПолномочияТаблица.Количество() > 0;
ЗначениеВРеквизитФормы(ДеревоЗначений, "Полномочия");
КонецПроцедуры
&НаСервере
@@ -501,33 +571,28 @@
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьВыбранныеПолномочия(ВыбранныеПолномочия, ДеревоЗначений)
Процедура СнятьОтметкуСтроки(Знач ИдентификаторПолномочия)
СтрокиСПометками = Новый Соответствие;
Для Каждого Полномочие Из ВыбранныеПолномочия.Полномочия Цикл
ДеревоЗначений = РеквизитФормыВЗначение("Полномочия");
Найдено = ДеревоЗначений.Строки.Найти(ИдентификаторПолномочия, "ИдентификаторПолномочия", Истина);
Если Найдено <> Неопределено Тогда
Найдено.Пометка = Ложь;
Найдено = ДеревоЗначений.Строки.НайтиСтроки(
Новый Структура("Код, Наименование", Полномочие.Код, Полномочие.Наименование), Истина);
Если Найдено.Количество() = 0 Тогда
НетВКлассификаторе = Истина;
Иначе
НетВКлассификаторе = Ложь;
НоваяСтрока = Найдено[0];
НоваяСтрока.Пометка = Истина;
НоваяСтрока.ИдентификаторПолномочия = Полномочие.ИдентификаторПолномочия;
Если ЗначениеЗаполнено(НоваяСтрока.Родитель) Тогда
Если СтрокиСПометками[НоваяСтрока.Родитель] = Неопределено Тогда
СтрокиСПометками.Вставить(НоваяСтрока.Родитель, Истина);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Найдено.Родитель) Тогда
СтрокиСПометками = Новый Соответствие;
СтрокиСПометками.Вставить(Найдено.Родитель, Истина);
ОбновитьФлажки(СтрокиСПометками);
КонецЕсли;
СтрокаВыбранные = ВыбранныеПолномочияТаблица.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаВыбранные, Полномочие);
СтрокаВыбранные.НетВКлассификаторе = НетВКлассификаторе;
КонецЦикла;
КонецЕсли;
ЗначениеВРеквизитФормы(ДеревоЗначений, "Полномочия");
КонецПроцедуры
&НаСервере
Процедура ОбновитьФлажки(СтрокиСПометками)
Для Каждого КлючИЗначение Из СтрокиСПометками Цикл
Родитель = КлючИЗначение.Ключ;
@@ -550,6 +615,39 @@
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьВыбранныеПолномочия(ВыбранныеПолномочия, ДеревоЗначений)
СтрокиСПометками = Новый Соответствие;
Для Каждого Полномочие Из ВыбранныеПолномочия.Полномочия Цикл
Найдено = ДеревоЗначений.Строки.НайтиСтроки(
Новый Структура("Код, Наименование", Полномочие.Код, Полномочие.Наименование), Истина);
Если Найдено.Количество() = 0 Тогда
НетВКлассификаторе = Истина;
Иначе
НетВКлассификаторе = Ложь;
НоваяСтрока = Найдено[0];
НоваяСтрока.Пометка = Истина;
НоваяСтрока.ИдентификаторПолномочия = Полномочие.ИдентификаторПолномочия;
Если ЗначениеЗаполнено(НоваяСтрока.Родитель) Тогда
Если СтрокиСПометками[НоваяСтрока.Родитель] = Неопределено Тогда
СтрокиСПометками.Вставить(НоваяСтрока.Родитель, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
СтрокаВыбранные = ВыбранныеПолномочияТаблица.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаВыбранные, Полномочие);
СтрокаВыбранные.НетВКлассификаторе = НетВКлассификаторе;
КонецЦикла;
ОбновитьФлажки(СтрокиСПометками);
ИдентификаторыПолномочийСОграничениями = Новый Соответствие;
Если ВыбранныеПолномочия.Ограничения.Количество() > 0 Тогда
@@ -575,7 +673,7 @@
Иначе
Найдено = ЗначенияОграничений.НайтиСтроки(
Новый Структура("Код", НоваяСтрока.КодЗначения));
Новый Структура("Код", НоваяСтрока.КодЗначения));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока.НетВКлассификатореКодаЗначения = Истина;
КонецЕсли;
@@ -667,12 +765,35 @@
Если Флажок = 1 Тогда
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = ВыбранныеПолномочияТаблица.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
Если ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности) Тогда
НайденыОграничения = ОграниченияПолномочийРодительскойДоверенности.НайтиСтроки(
Новый Структура("ИдентификаторПолномочия", НоваяСтрока.ИдентификаторПолномочия));
НоваяСтрока.ЕстьОграничения = НайденыОграничения.Количество() > 0;
Для Каждого НайденнаяСтрока Из НайденыОграничения Цикл
НоваяСтрокаОграничений = ОграниченияПолномочий.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаОграничений, НайденнаяСтрока);
КонецЦикла;
КонецЕсли;
КонецЕсли;
ИначеЕсли Найдено.Количество() > 0 Тогда
Для Каждого НайденнаяСтрока Из Найдено Цикл
Если ЗначениеЗаполнено(Параметры.ПолномочияРодительскойДоверенности) Тогда
НайденыОграничения = ОграниченияПолномочий.НайтиСтроки(
Новый Структура("ИдентификаторПолномочия", НайденнаяСтрока.ИдентификаторПолномочия));
Для Каждого Ограничение Из НайденыОграничения Цикл
ОграниченияПолномочий.Удалить(ОграниченияПолномочий.Индекс(Ограничение));
КонецЦикла;
КонецЕсли;
ВыбранныеПолномочияТаблица.Удалить(ВыбранныеПолномочияТаблица.Индекс(НайденнаяСтрока));
КонецЦикла;
КонецЕсли;
@@ -828,4 +949,26 @@
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ОбновитьКлассификаторыПолномочийНаСервере()
РегистрыСведений.КлассификаторыМЧД.ОбновитьКлассификаторы();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСписокПолномочий()
КодыПолномочий = Новый Массив;
Для Каждого Полномочие Из ВыбранныеПолномочияТаблица Цикл
Если ЗначениеЗаполнено(Полномочие.Код) И Не Полномочие.НетВКлассификаторе Тогда
КодыПолномочий.Добавить(Полномочие.Код);
КонецЕсли;
КонецЦикла;
СформироватьДеревоПолномочий(ПоместитьВоВременноеХранилище(КодыПолномочий));
КонецПроцедуры
#КонецОбласти
@@ -7,6 +7,10 @@
<items xsi:type="form:FormField">
<name>НомерДоверенности</name>
<id>1</id>
<title>
<key>ru</key>
<value>Номер доверенности</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -49,6 +53,10 @@
<items xsi:type="form:FormField">
<name>ИНН</name>
<id>4</id>
<title>
<key>ru</key>
<value>ИНН доверителя</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -94,6 +102,10 @@
<items xsi:type="form:Button">
<name>Загрузить</name>
<id>7</id>
<title>
<key>ru</key>
<value>Загрузить</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -126,7 +138,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа подвал</value>
<value>Подвал</value>
</title>
<horizontalStretch>true</horizontalStretch>
<extendedTooltip>
@@ -9,6 +9,10 @@
<items xsi:type="form:FormField">
<name>ДоверенностиПоРоли</name>
<id>70</id>
<title>
<key>ru</key>
<value>Доверенности по роли</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -84,6 +88,10 @@
<items xsi:type="form:FormField">
<name>ТолькоДействующие</name>
<id>49</id>
<title>
<key>ru</key>
<value>Только действующие</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -123,6 +131,10 @@
<items xsi:type="form:FormField">
<name>Полномочия</name>
<id>136</id>
<title>
<key>ru</key>
<value>Полномочия представление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -171,6 +183,10 @@
<items xsi:type="form:FormField">
<name>Сертификат</name>
<id>123</id>
<title>
<key>ru</key>
<value>Сертификат</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -231,7 +247,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа отборы первая строка</value>
<value>Отборы первая строка</value>
</title>
<extendedTooltip>
<name>ГруппаОтборыПерваяСтрокаРасширеннаяПодсказка</name>
@@ -296,6 +312,10 @@
<items xsi:type="form:FormField">
<name>ТипДоверителя</name>
<id>107</id>
<title>
<key>ru</key>
<value>Тип доверителя</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -343,6 +363,10 @@
<items xsi:type="form:FormField">
<name>Доверитель</name>
<id>218</id>
<title>
<key>ru</key>
<value>Доверитель</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -465,6 +489,10 @@
<items xsi:type="form:FormField">
<name>ТипПредставителя</name>
<id>120</id>
<title>
<key>ru</key>
<value>Тип представителя</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -512,6 +540,10 @@
<items xsi:type="form:FormField">
<name>Представитель</name>
<id>221</id>
<title>
<key>ru</key>
<value>Представитель</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -605,7 +637,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа отборы вторая строка</value>
<value>Отборы вторая строка</value>
</title>
<extendedTooltip>
<name>ГруппаОтборыВтораяСтрокаРасширеннаяПодсказка</name>
@@ -634,7 +666,7 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа отборы</value>
<value>Отборы</value>
</title>
<extendedTooltip>
<name>ГруппаОтборыРасширеннаяПодсказка</name>
@@ -781,6 +813,10 @@
<items xsi:type="form:FormField">
<name>ДатаВыдачи</name>
<id>22</id>
<title>
<key>ru</key>
<value>С</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -810,8 +846,13 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<width>7</width>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<format>
<key>ru</key>
<value>ДФ=dd.MM.yyyy</value>
</format>
</extInfo>
</items>
<items xsi:type="form:FormField">
@@ -819,7 +860,7 @@
<id>25</id>
<title>
<key>ru</key>
<value>Дата окончания</value>
<value>По</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
@@ -850,8 +891,13 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<width>7</width>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<format>
<key>ru</key>
<value>ДФ=dd.MM.yyyy</value>
</format>
</extInfo>
</items>
<items xsi:type="form:FormField">
@@ -1016,6 +1062,125 @@
<showInCard>true</showInCard>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаПередоверие</name>
<id>239</id>
<items xsi:type="form:FormField">
<name>ВозможностьПередоверия</name>
<id>236</id>
<title>
<key>ru</key>
<value>Возможность передоверия</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.ВозможностьПередоверия</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Возможность передоверия</value>
</toolTip>
<extendedTooltip>
<name>ВозможностьПередоверияРасширеннаяПодсказка</name>
<id>238</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ВозможностьПередоверияКонтекстноеМеню</name>
<id>237</id>
<autoFill>true</autoFill>
</contextMenu>
<type>PictureField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:ImageFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<border xsi:type="core:BorderDef">
<style>Single</style>
<width>1</width>
</border>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Передоверие</name>
<id>241</id>
<title>
<key>ru</key>
<value>Это передоверие</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Список.Передоверие</segments>
</dataPath>
<toolTip>
<key>ru</key>
<value>Это передоверие</value>
</toolTip>
<extendedTooltip>
<name>ПередовериеРасширеннаяПодсказка</name>
<id>243</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПередовериеКонтекстноеМеню</name>
<id>242</id>
<autoFill>true</autoFill>
</contextMenu>
<type>CheckBoxField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:CheckBoxFieldExtInfo"/>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Передоверие</value>
</title>
<extendedTooltip>
<name>ГруппаПередовериеРасширеннаяПодсказка</name>
<id>240</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>ColumnGroup</type>
<extInfo xsi:type="form:ColumnGroupExtInfo">
<showInCard>true</showInCard>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Код</name>
<id>128</id>
@@ -1135,6 +1300,10 @@
<items xsi:type="form:Button">
<name>СписокЗагрузитьИзФайла</name>
<id>92</id>
<title>
<key>ru</key>
<value>Загрузить из файла ...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1162,6 +1331,10 @@
<items xsi:type="form:Button">
<name>СписокВыгрузитьВФайл</name>
<id>88</id>
<title>
<key>ru</key>
<value>Выгрузить в файл...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1289,9 +1462,44 @@
<importance>Normal</importance>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ПодменюСоздатьНаОсновании</name>
<id>234</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Создать на основании</value>
</title>
<extendedTooltip>
<name>ПодменюСоздатьНаОснованииРасширеннаяПодсказка</name>
<id>235</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Popup</type>
<extInfo xsi:type="form:PopupGroupExtInfo">
<picture xsi:type="core:PictureRef">
<picture>StdPicture.InputOnBasis</picture>
</picture>
<representation>Picture</representation>
<importance>Normal</importance>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>СписокЗагрузитьИзРеестраФНС</name>
<id>98</id>
<title>
<key>ru</key>
<value>Загрузить из реестра ФНС ...</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -1345,6 +1553,10 @@
<items xsi:type="form:Button">
<name>СписокПолучитьСтатус</name>
<id>105</id>
<title>
<key>ru</key>
<value>Обновить статус из реестра ФНС</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -2144,9 +2356,15 @@
<edit>
<common>true</common>
</edit>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Список.ВозможностьПередоверия</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Список.Ссылка</segments>
</notDefaultUseAlwaysAttributes>
<notDefaultUseAlwaysAttributes xsi:type="form:DataPath">
<segments>Список.ФайлДоверенности</segments>
</notDefaultUseAlwaysAttributes>
<main>true</main>
<extInfo xsi:type="form:DynamicListExtInfo">
<queryText>ВЫБРАТЬ
@@ -2155,38 +2373,40 @@
СправочникМашиночитаемыеДоверенности.Код КАК Код,
СправочникМашиночитаемыеДоверенности.Наименование КАК Наименование,
СправочникМашиночитаемыеДоверенности.ДатаВыдачи КАК ДатаВыдачи,
СправочникМашиночитаемыеДоверенности.ФайлДоверенности КАК ФайлДоверенности,
КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания, ДЕНЬ) КАК ДатаОкончания,
СправочникМашиночитаемыеДоверенности.ДляНалоговыхОрганов КАК ДляНалоговыхОрганов,
СправочникМашиночитаемыеДоверенности.РегистрироватьВРеестре КАК РегистрироватьВРеестре,
ВЫБОР
КОГДА СправочникМашиночитаемыеДоверенности.РодительскаяДоверенностьНомер = &quot;&quot;
ТОГДА Ложь
ИНАЧЕ Истина
КОНЕЦ КАК Передоверие,
СправочникМашиночитаемыеДоверенности.ВозможностьПередоверия КАК ВозможностьПередоверия,
СправочникМашиночитаемыеДоверенности.Статус КАК Статус,
&amp;СтатусВДругомРеестре КАК СтатусВДругомРеестре,
99 КАК ИндексСтатусаВДругомРеестре,
МашиночитаемыеДоверенностиСтатусы.ТехническийСтатус КАК ТехническийСтатус,
СправочникМашиночитаемыеДоверенности.Верна КАК Верна,
ВЫБОР
КОГДА &amp;ТекущаяДата
МЕЖДУ СправочникМашиночитаемыеДоверенности.ДатаВыдачи И КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания,
ДЕНЬ)
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
КОГДА &amp;ТекущаяДата МЕЖДУ СправочникМашиночитаемыеДоверенности.ДатаВыдачи И КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания, ДЕНЬ)
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК Действует,
ВЫБОР
КОГДА СправочникМашиночитаемыеДоверенности.ПометкаУдаления
ТОГДА 1
КОГДА КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания, ДЕНЬ)
МЕЖДУ &amp;ТекущаяДата И &amp;СрокИстекающихДоверенностей
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
КОГДА КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания, ДЕНЬ) МЕЖДУ &amp;ТекущаяДата И &amp;СрокИстекающихДоверенностей
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
ТОГДА 3
КОГДА &amp;ТекущаяДата > КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания, ДЕНЬ)
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
ТОГДА 4
КОГДА СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Черновик)
ТОГДА 5
КОГДА &amp;ТекущаяДата
МЕЖДУ СправочникМашиночитаемыеДоверенности.ДатаВыдачи И КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания,
ДЕНЬ)
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
КОГДА &amp;ТекущаяДата МЕЖДУ СправочникМашиночитаемыеДоверенности.ДатаВыдачи И КОНЕЦПЕРИОДА(СправочникМашиночитаемыеДоверенности.ДатаОкончания, ДЕНЬ)
И СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.Действует)
ТОГДА 2
КОГДА СправочникМашиночитаемыеДоверенности.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыМЧД.НеДействует)
ТОГДА 4
@@ -2194,159 +2414,140 @@
КОНЕЦ КАК ИндексСтатуса,
СправочникМашиночитаемыеДоверенности.НомерДоверенности КАК НомерДоверенности,
СправочникМашиночитаемыеДоверенности.КодНалоговогоОрганаПредставления КАК КодНалоговогоОрганаПредставления,
МашиночитаемыеДоверенностиСтатусы.Подписана
{ГДЕ
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.ФИО + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.НаименованиеОрганизации
ПОДОБНО &amp;ДоверительСтрокаПоиска СПЕЦСИМВОЛ &quot;~&quot;)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.ФИО + &quot;|&quot; +
МашиночитаемыеДоверенностиПредставителиИДоверители.НаименованиеОрганизации
ПОДОБНО &amp;ПредставительСтрокаПоиска СПЕЦСИМВОЛ &quot;~&quot;)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиДоверители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Доверители КАК МашиночитаемыеДоверенностиДоверители
ГДЕ
МашиночитаемыеДоверенностиДоверители.Доверитель = &amp;Доверитель)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Представители КАК МашиночитаемыеДоверенностиПредставители
ГДЕ
МашиночитаемыеДоверенностиПредставители.Представитель = &amp;Представитель)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиДоверители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Доверители КАК МашиночитаемыеДоверенностиДоверители
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО МашиночитаемыеДоверенностиДоверители.Доверитель = Пользователи.ФизическоеЛицо
ГДЕ
Пользователи.Ссылка = &amp;ДоверительПользователь)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Представители КАК МашиночитаемыеДоверенностиПредставители
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО МашиночитаемыеДоверенностиПредставители.Представитель = Пользователи.ФизическоеЛицо
ГДЕ
Пользователи.Ссылка = &amp;ПредставительПользователь)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПолномочия.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Полномочия КАК МашиночитаемыеДоверенностиПолномочия
ГДЕ
МашиночитаемыеДоверенностиПолномочия.Код + &quot;|&quot; + МашиночитаемыеДоверенностиПолномочия.Мнемокод + &quot;|&quot; +
МашиночитаемыеДоверенностиПолномочия.Наименование ПОДОБНО &amp;ПолномочияСтрокаПоиска)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПолномочия.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Полномочия КАК МашиночитаемыеДоверенностиПолномочия
ГДЕ
МашиночитаемыеДоверенностиПолномочия.Код В (&amp;Полномочия))),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН = &amp;ДоверительИНН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ОГРН = &amp;ДоверительОГРН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ = &amp;ДоверительИННФЛ)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС = &amp;ДоверительСНИЛС)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН = &amp;ПредставительИНН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ОГРН = &amp;ПредставительОГРН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ = &amp;ПредставительИННФЛ)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК
МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС = &amp;ПредставительСНИЛС))}
МашиночитаемыеДоверенностиСтатусы.Подписана КАК Подписана
ИЗ
Справочник.МашиночитаемыеДоверенности КАК СправочникМашиночитаемыеДоверенности
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МашиночитаемыеДоверенностиСтатусы КАК МашиночитаемыеДоверенностиСтатусы
ПО СправочникМашиночитаемыеДоверенности.Ссылка = МашиночитаемыеДоверенностиСтатусы.МашиночитаемаяДоверенность</queryText>
ПО СправочникМашиночитаемыеДоверенности.Ссылка = МашиночитаемыеДоверенностиСтатусы.МашиночитаемаяДоверенность
{ГДЕ
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.ФИО + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.НаименованиеОрганизации ПОДОБНО &amp;ДоверительСтрокаПоиска СПЕЦСИМВОЛ &quot;~&quot;)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.ФИО + &quot;|&quot; + МашиночитаемыеДоверенностиПредставителиИДоверители.НаименованиеОрганизации ПОДОБНО &amp;ПредставительСтрокаПоиска СПЕЦСИМВОЛ &quot;~&quot;)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиДоверители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Доверители КАК МашиночитаемыеДоверенностиДоверители
ГДЕ
МашиночитаемыеДоверенностиДоверители.Доверитель = &amp;Доверитель)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Представители КАК МашиночитаемыеДоверенностиПредставители
ГДЕ
МашиночитаемыеДоверенностиПредставители.Представитель = &amp;Представитель)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиДоверители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Доверители КАК МашиночитаемыеДоверенностиДоверители
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО
МашиночитаемыеДоверенностиДоверители.Доверитель = Пользователи.ФизическоеЛицо
ГДЕ
Пользователи.Ссылка = &amp;ДоверительПользователь)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставители.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Представители КАК МашиночитаемыеДоверенностиПредставители
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО
МашиночитаемыеДоверенностиПредставители.Представитель = Пользователи.ФизическоеЛицо
ГДЕ
Пользователи.Ссылка = &amp;ПредставительПользователь)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПолномочия.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Полномочия КАК МашиночитаемыеДоверенностиПолномочия
ГДЕ
МашиночитаемыеДоверенностиПолномочия.Код + &quot;|&quot; + МашиночитаемыеДоверенностиПолномочия.Мнемокод + &quot;|&quot; + МашиночитаемыеДоверенностиПолномочия.Наименование ПОДОБНО &amp;ПолномочияСтрокаПоиска)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПолномочия.Ссылка КАК Ссылка
ИЗ
Справочник.МашиночитаемыеДоверенности.Полномочия КАК МашиночитаемыеДоверенностиПолномочия
ГДЕ
МашиночитаемыеДоверенностиПолномочия.Код В (&amp;Полномочия))),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН = &amp;ДоверительИНН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ОГРН = &amp;ДоверительОГРН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ = &amp;ДоверительИННФЛ)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Доверитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС = &amp;ДоверительСНИЛС)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИНН = &amp;ПредставительИНН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ОГРН = &amp;ПредставительОГРН)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.ИННФЛ = &amp;ПредставительИННФЛ)),
(СправочникМашиночитаемыеДоверенности.Ссылка В
(ВЫБРАТЬ
МашиночитаемыеДоверенностиПредставителиИДоверители.МашиночитаемаяДоверенность КАК МашиночитаемаяДоверенность
ИЗ
РегистрСведений.МашиночитаемыеДоверенностиПредставителиИДоверители КАК МашиночитаемыеДоверенностиПредставителиИДоверители
ГДЕ
МашиночитаемыеДоверенностиПредставителиИДоверители.ТипУчастника = ЗНАЧЕНИЕ(Перечисление.ТипыУчастниковМЧД.Представитель)
И МашиночитаемыеДоверенностиПредставителиИДоверители.СНИЛС = &amp;ПредставительСНИЛС))}</queryText>
<mainTable>Catalog.МашиночитаемыеДоверенности</mainTable>
<dynamicDataRead>true</dynamicDataRead>
<autoFillAvailableFields>true</autoFillAvailableFields>
@@ -2438,13 +2639,41 @@
<field>Подписана</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>ФайлДоверенности</dataPath>
<field>ФайлДоверенности</field>
<dataPath>СтатусВДругомРеестре</dataPath>
<field>СтатусВДругомРеестре</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>ИндексСтатусаВДругомРеестре</dataPath>
<field>ИндексСтатусаВДругомРеестре</field>
<title>
<localValue>
<content>
<key>ru</key>
<value>Индекс статуса в другом реестре</value>
</content>
</localValue>
</title>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>ТехническийСтатус</dataPath>
<field>ТехническийСтатус</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>ВозможностьПередоверия</dataPath>
<field>ВозможностьПередоверия</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>Передоверие</dataPath>
<field>Передоверие</field>
<title>
<localValue>
<content>
<key>ru</key>
<value>Передоверие</value>
</content>
</localValue>
</title>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>РодительскаяДоверенность</dataPath>
<field>РодительскаяДоверенность</field>
@@ -2501,6 +2730,18 @@
<dataPath>ФайлЗаявленияНаОтмену</dataPath>
<field>ФайлЗаявленияНаОтмену</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>Нотариальная</dataPath>
<field>Нотариальная</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>РеквизитыНотариальнойДоверенности</dataPath>
<field>РеквизитыНотариальнойДоверенности</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>НомерВРеестреНотариальныхДействий</dataPath>
<field>НомерВРеестреНотариальныхДействий</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>Доверители</dataPath>
<field>Доверители</field>
@@ -2530,24 +2771,8 @@
<field>ИмяПредопределенныхДанных</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>СтатусВДругомРеестре</dataPath>
<field>СтатусВДругомРеестре</field>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>ИндексСтатусаВДругомРеестре</dataPath>
<field>ИндексСтатусаВДругомРеестре</field>
<title>
<localValue>
<content>
<key>ru</key>
<value>Индекс статуса в другом реестре</value>
</content>
</localValue>
</title>
</fields>
<fields xsi:type="schema:DataCompositionSchemaDataSetField">
<dataPath>ТехническийСтатус</dataPath>
<field>ТехническийСтатус</field>
<dataPath>ФайлДоверенности</dataPath>
<field>ФайлДоверенности</field>
</fields>
<parameters>
<name>Доверитель</name>
@@ -3101,6 +3326,17 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПараметрыПодключаемыхКоманд</name>
<id>17</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ЗагрузитьИзФайла</name>
<title>
@@ -196,6 +196,19 @@
Возврат;
КонецЕсли;
ЕстьКолонкаСтатус = Ложь;
ЕстьКолонкаИндекс = Ложь;
Для Каждого Строка Из Строки Цикл
ЕстьКолонкаСтатус = Строка.Значение.Данные.Свойство("СтатусВДругомРеестре");
ЕстьКолонкаИндекс = Строка.Значение.Данные.Свойство("ИндексСтатусаВДругомРеестре");
Прервать;
КонецЦикла;
Если Не ЕстьКолонкаСтатус И Не ЕстьКолонкаИндекс Тогда
Возврат;
КонецЕсли;
Доверенности = Новый Соответствие;
МассивДоверенностей = Строки.ПолучитьКлючи();
@@ -211,9 +224,12 @@
Если Статус = Неопределено Тогда
Продолжить;
КонецЕсли;
Строка.Значение.Данные.СтатусВДругомРеестре = Статус.Статус;
Строка.Значение.Данные.ИндексСтатусаВДругомРеестре = Статус.ИндексКартинки;
Если ЕстьКолонкаСтатус Тогда
Строка.Значение.Данные.СтатусВДругомРеестре = Статус.Статус;
КонецЕсли;
Если ЕстьКолонкаИндекс Тогда
Строка.Значение.Данные.ИндексСтатусаВДругомРеестре = Статус.ИндексКартинки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -230,12 +246,12 @@
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
РезультатАвторизации = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.АвторизоватьсяНаСервереМЧДРР();
РезультатАвторизации = АвторизоватьсяНаСервереМЧДРР();
Если ЗначениеЗаполнено(РезультатАвторизации.Ошибка) Тогда
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Картинка = БиблиотекаКартинок.Предупреждение32;
ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыВопроса.Заголовок = НСтр("ru = 'Загрузка доверенности из файла'");
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
@@ -244,7 +260,7 @@
Кнопки.Добавить("Отменить", НСтр("ru = 'Отменить загрузку'"));
Кнопки.Добавить("ПоказатьОшибку", НСтр("ru = 'Подробности...'"));
ТекстОшибки = НСтр("ru = 'Невозможно проверить доверенность в распределенном реестре.'");
ТекстОшибки = НСтр("ru = 'Нет возможности проверить доверенность в распределенном реестре, доверенность будет загружена без признака ""Зарегистрирована в реестре ФНС""'");
Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеДоверенности", ЭтотОбъект, РезультатАвторизации.Ошибка);
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ТекстОшибки, Кнопки, ПараметрыВопроса);
@@ -256,6 +272,11 @@
КонецПроцедуры
&НаСервереБезКонтекста
Функция АвторизоватьсяНаСервереМЧДРР()
Возврат МашиночитаемыеДоверенностиФНССлужебный.АвторизоватьсяНаСервереМЧДРР();
КонецФункции
&НаКлиенте
Процедура ЗагрузитьИзРеестраФНС(Команда)
ПослеЗагрузкиДоверенности = Новый ОписаниеОповещения("ПослеЗагрузкиДоверенности", ЭтотОбъект);
@@ -279,7 +300,7 @@
НСтр("ru = 'Обновление статусов из Реестра ФНС'"),
,
ТекстСообщения,
БиблиотекаКартинок.Информация32,
БиблиотекаКартинок.ДиалогИнформация,
СтатусОповещенияПользователя.Информация);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
@@ -428,7 +449,7 @@
НСтр("ru = 'Загрузка завершена'"),
ПолучитьНавигационнуюСсылку(Результат.Доверенность),
Результат.Доверенность,
БиблиотекаКартинок.Информация32,
БиблиотекаКартинок.ДиалогИнформация,
СтатусОповещенияПользователя.Информация);
КонецЕсли;
@@ -484,7 +505,7 @@
НСтр("ru = 'Получение статуса завершено'"),
ОткрытьСписокСобытий,
ТекстСообщения,
БиблиотекаКартинок.Информация32,
БиблиотекаКартинок.ДиалогИнформация,
СтатусОповещенияПользователя.Информация);
КонецПроцедуры
@@ -612,6 +633,10 @@
КонецЕсли;
Для Каждого ЭлементОтбора Из Отборы Цикл
Если Не ВсеОтборыПоСертификатам.Свойство(ЭлементОтбора.Ключ)Тогда
Продолжить;
КонецЕсли;
ВсеОтборыПоСертификатам[ЭлементОтбора.Ключ] = ?(ЭлементОтбора.Значение = Неопределено, "", ЭлементОтбора.Значение);
КонецЦикла;
КонецЕсли;
@@ -0,0 +1,36 @@
<!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>
<li>В карточке можно увидеть всю <b>цепочку передоверия</b>. При создании передоверия полномочия передаются автоматически из родительской доверенности.</li>
<li>Для того, чтобы внести изменения в подписанную, но еще не зарегистрированную доверенность, подпись нужно <b>Удалить</b>, а после внесения изменений подписать заново. </li></ul><div><br></div>
<div><span style="font-size: 13.4399995803833px; font-weight: bold;">Ввод представителя</span></div>
<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>Для возможности последующего передоверия при создании МЧД необходимо установить флажок <b>Разрешить передоверие</b>:<br></li>
<ul><li><strong>однократное передоверие</strong> - представитель может передавать полномочия один раз, после чего действие доверенности прекращается;</li>
<li><strong>многократное передоверие</strong> - позволяет представителю передавать полномочия нескольким лицам последовательно. </li></ul></ul><ul><li>Руководитель юрлица, глава филиала или представитель юрлица могут самостоятельно выдавать МЧД с правом <b>передоверия</b>. В данном случае заверять доверенность у нотариуса не нужно. В других случаях МЧД, выданную в порядке передоверия, необходимо заверить у нотариуса. </li>
<li>Для того чтобы зарегистрировать МЧД в <strong>Распределенном реестре ФНС России</strong> нажмите на флажок. </li>
<li>В поле <strong>Единый регистрационный номер доверенности</strong> автоматически сгенерируется номер после подписания доверенности.  </li>
<li>Поле <strong>Наименование</strong> заполняется автоматически. </li></ul><h3 style="font-size: 13.4399995803833px;">Нотариальная доверенность</h3>
<ul><li>Для оформления <b>Нотариальной доверенности</b>, например, при передаче полномочий сотрудника другому сотруднику, необходимо обратиться к нотариусу.</li>
<li>Нотариус выгружает подписанную МЧД в <b>Распределенный реестр ФНС</b> и в личный кабинет заявителя на портале нотариуса. Оттуда ее можно загрузить себе на устройство. </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>
@@ -0,0 +1,60 @@
<!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 style="font-size: 13.4399995803833px;">Передоверие</h3>
<div>
<ul><li>Нажмите кнопку <b>Передоверить</b> для того, чтобы передать полномочия по доверенности. Кнопка активна, если доверенность поддерживает однократное или многократное передоверие.  </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>
File diff suppressed because it is too large. Load diff
@@ -17,12 +17,20 @@
СтатусУстановленВручную = Ложь;
НомерДоверенности = Неопределено;
ФайлДоверенности = Неопределено;
ФайлЗаявленияНаОтмену = Неопределено;
ДатаОтмены = Неопределено;
Ответственный = Неопределено;
Верна = Ложь;
СтатусВернаУстановленВручную = Ложь;
УстановившийСтатусВерна = Неопределено;
Подписана = Ложь;
Наименование = Неопределено;
ДатаПроверки = Неопределено;
РодительскаяДоверенностьНомер = Неопределено;
РодительскаяДоверенность = Неопределено;
РеквизитыНотариальнойДоверенности = Неопределено;
НомерВРеестреНотариальныхДействий = Неопределено;
Нотариальная = Неопределено;
КонецПроцедуры
@@ -32,10 +40,14 @@
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ВозможностьПередоверия) Тогда
ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.БезПередоверия");
КонецЕсли;
Если Не ЗначениеЗаполнено(Наименование) Тогда
Наименование = Справочники.МашиночитаемыеДоверенности.АвтоНаименование(ЭтотОбъект);
КонецЕсли;
Если Не ЗначениеЗаполнено(Ответственный) Тогда
Ответственный = Пользователи.ТекущийПользователь();
КонецЕсли;
@@ -118,6 +130,21 @@
КонецЕсли;
КонецЦикла;
Если Нотариальная Тогда
РеквизитыНотариуса = РеквизитыНотариальнойДоверенности.Получить();
НоваяЗапись = НаборЗаписей.Добавить();
Если ЗначениеЗаполнено(РеквизитыНотариуса.ИсполняющийОбязанностиНотариуса) Тогда
НоваяЗапись.ФИО = ФИО(РеквизитыНотариуса.ИсполняющийОбязанностиНотариуса);
Иначе
НоваяЗапись.ФИО = ФИО(РеквизитыНотариуса.Нотариус);
КонецЕсли;
НоваяЗапись.МашиночитаемаяДоверенность = Ссылка;
НоваяЗапись.ТипУчастника = Перечисления.ТипыУчастниковМЧД.Нотариус;
НоваяЗапись.ЭтоФизическоеЛицо = Истина;
КонецЕсли;
НаборЗаписей.Записать();
Если ДополнительныеСвойства.Свойство("ОбновитьСтатус") Тогда
@@ -126,6 +153,95 @@
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) <> Тип("СправочникСсылка.МашиночитаемыеДоверенности") Тогда
Возврат;
КонецЕсли;
РодительскаяДоверенность = ДанныеЗаполнения;
РеквизитыРодительскойДоверенности = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(РодительскаяДоверенность,
"ДатаОкончания, Представители, Полномочия, Ограничения, НомерДоверенности, РегистрироватьВРеестре, ВозможностьПередоверия, ФайлДоверенности, ТекстПолномочий, ПолномочияВТекстовомВиде");
Если Не ЗначениеЗаполнено(РеквизитыРодительскойДоверенности.ВозможностьПередоверия)
Или РеквизитыРодительскойДоверенности.ВозможностьПередоверия = Перечисления.ВозможностьПередоверияМЧД.БезПередоверия Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Доверенность %1 не поддерживает возможность передоверия.'"), РодительскаяДоверенность);
КонецЕсли;
Если Не ЗначениеЗаполнено(РеквизитыРодительскойДоверенности.НомерДоверенности) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не заполнен единый регистрационный номер доверенности %1.'"), РодительскаяДоверенность);
КонецЕсли;
Если Не ЗначениеЗаполнено(РеквизитыРодительскойДоверенности.ФайлДоверенности) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не найден файл доверенности %1.'"), РодительскаяДоверенность);
КонецЕсли;
РодительскаяДоверенностьНомер = РеквизитыРодительскойДоверенности.НомерДоверенности;
РегистрироватьВРеестре = РеквизитыРодительскойДоверенности.РегистрироватьВРеестре;
ТЧПредставители = РеквизитыРодительскойДоверенности.Представители.Выгрузить();
Найдено = ТЧПредставители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
ТолькоФизлица = Неопределено; ТолькоИП = Неопределено;
Для каждого СтрокаОрганизация Из Найдено Цикл
РеквизитыОрганизации = СтрокаОрганизация.ПредставительРеквизиты.Получить();
Если РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
ТолькоФизлица = Истина;
Продолжить;
ИначеЕсли РеквизитыОрганизации.ЭтоИндивидуальныйПредприниматель Тогда
ТолькоИП = Истина;
Продолжить;
Иначе
ТолькоФизлица = Ложь; ТолькоИП = Ложь;
НоваяСтрока = Доверители.Добавить();
НоваяСтрока.Доверитель = СтрокаОрганизация.Представитель;
НоваяСтрока.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыОрганизации);
НоваяСтрока.ЭтоФизЛицо = РеквизитыОрганизации.ЭтоФизическоеЛицо;
НоваяСтрока.Идентификатор = СтрокаОрганизация.Идентификатор;
НайденоФизическиеЛица = ТЧПредставители.НайтиСтроки(Новый Структура("ИдентификаторРодителя",
СтрокаОрганизация.Идентификатор));
Если НайденоФизическиеЛица.Количество() > 0 Тогда
СтрокаФизическоеЛицо = НайденоФизическиеЛица[0];
НоваяСтрокаФизЛицо = Доверители.Добавить();
НоваяСтрокаФизЛицо.Доверитель = СтрокаФизическоеЛицо.Представитель;
ДоверительРеквизиты = СтрокаФизическоеЛицо.ПредставительРеквизиты.Получить();
НоваяСтрокаФизЛицо.Идентификатор = СтрокаФизическоеЛицо.Идентификатор;
НоваяСтрокаФизЛицо.ДоверительРеквизиты = Новый ХранилищеЗначения(ДоверительРеквизиты);
НоваяСтрокаФизЛицо.ЭтоФизЛицо = ДоверительРеквизиты.ЭтоФизическоеЛицо;
НоваяСтрокаФизЛицо.ИдентификаторРодителя = НоваяСтрока.Идентификатор;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Если ТолькоФизлица = Истина Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Передоверие полномочий доверенности %1 от физического лица может быть создано только нотариусом.'"), РодительскаяДоверенность);
КонецЕсли;
Если ТолькоИП = Истина Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Передоверие полномочий доверенности %1 от индивидуального предпринимателя может быть создано только нотариусом.'"), РодительскаяДоверенность);
КонецЕсли;
ДатаОкончания = РеквизитыРодительскойДоверенности.ДатаОкончания;
ПолномочияВТекстовомВиде = РеквизитыРодительскойДоверенности.ПолномочияВТекстовомВиде;
ТекстПолномочий = РеквизитыРодительскойДоверенности.ТекстПолномочий;
Полномочия.Загрузить(РеквизитыРодительскойДоверенности.Полномочия.Выгрузить());
Ограничения.Загрузить(РеквизитыРодительскойДоверенности.Ограничения.Выгрузить());
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -133,7 +249,7 @@
Процедура ОбновитьСтатус()
ТехническийСтатус = МашиночитаемыеДоверенностиФНССлужебный.РассчитатьТехническийСтатус(ЭтотОбъект);
НовыйСтатус = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РасчетныйСтатусДокумента(ТехническийСтатус, Верна);
НовыйСтатус = МашиночитаемыеДоверенностиФНССлужебный.РасчетныйСтатусДокумента(ТехническийСтатус, Верна);
Если НовыйСтатус <> Статус Тогда
Статус = НовыйСтатус;
КонецЕсли;
@@ -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>
@@ -516,6 +521,54 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="93873fe8-10c0-4f7b-ad20-278e887f69e9">
<name>Нотариальная</name>
<synonym>
<key>ru</key>
<value>Нотариальная</value>
</synonym>
<type>
<types>Boolean</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="13b4aa30-d586-4b26-af0e-32f0d691fec9">
<name>РеквизитыНотариальнойДоверенности</name>
<synonym>
<key>ru</key>
<value>Реквизиты нотариальной доверенности</value>
</synonym>
<type>
<types>ValueStorage</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="d6d67cc5-e003-4aaa-88ae-d084dae2dc26">
<name>НомерВРеестреНотариальныхДействий</name>
<synonym>
<key>ru</key>
<value>Номер в реестре нотариальных действий</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>28</length>
</stringQualifiers>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<tabularSections uuid="60f2c9f3-3090-442c-8991-0396b8f8b195">
<producedTypes>
<objectType typeId="f194327c-51ff-4fff-9c2c-df35946c1fa2" valueTypeId="8b5cd3d9-5cac-488d-89dd-ab98b9656a3e"/>
@@ -936,6 +989,11 @@
<key>ru</key>
<value>Форма элемента</value>
</synonym>
<help>
<pages>
<lang>ru</lang>
</pages>
</help>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
@@ -988,6 +988,9 @@
//
Процедура ЗаполнитьПоставляемыйПрофиль(Знач Профиль, Знач ОбновитьГруппыДоступа) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Справочники.ПрофилиГруппДоступа.ЗаполнитьПоставляемыйПрофиль");
ИдентификаторПоставляемыхДанных = Строка(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
Профиль, "ИдентификаторПоставляемыхДанных"));
@@ -1157,6 +1160,9 @@
//
Процедура ПриИзмененииЯзыкаИнформационнойБазы(ИзменениеЯзыков) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Справочники.ПрофилиГруппДоступа.ПриИзмененииЯзыкаИнформационнойБазы");
УправлениеДоступомСлужебный.ПоставляемыеПрофили(); // Проверка актуальности метаданных.
ОписанияПрофилей = ЗаполненныеПоставляемыеПрофили().ОписанияПрофилей;
@@ -1607,6 +1613,9 @@
//
Процедура ВосстановитьСоставРолейРасширений(ЭлементДанных) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Справочники.ПрофилиГруппДоступа.ВосстановитьСоставРолейРасширений");
УдалитьРолиРасширений(ЭлементДанных);
Запрос = Новый Запрос;
@@ -1644,6 +1653,9 @@
// Только для внутреннего использования.
Процедура УдалитьРолиРасширенийВоВсехПрофиляхГруппДоступа() Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Справочники.ПрофилиГруппДоступа.УдалитьРолиРасширенийВоВсехПрофиляхГруппДоступа");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
@@ -845,6 +845,9 @@
ПоказатьВопрос(Обработчик, СтрокаВопроса, Кнопки, 60, КодВозвратаДиалога.Да);
КонецЕсли;
ВидимостьДоступностьКорректность(ЭтотОбъект, "ПолучателиРассылки");
КонецПроцедуры
&НаКлиенте
@@ -935,6 +938,10 @@
ВидимостьДоступностьКорректность(ЭтотОбъект, "ВидРассылки");
ДобавитьКомандыДобавленияДополнительныхПараметровТекста();
Если Объект.Личная Тогда
Объект.Получатели.Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -2871,9 +2878,11 @@
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно отключить пароли.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьПароли";
КонецЕсли;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
Если ДоступноШифрованиеВложений Или Объект.Архивировать Тогда
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
ИначеЕсли Объект.Личная Тогда
@@ -3201,7 +3210,7 @@
Если Объект.Личная Тогда
Элементы.ПолучателиРассылки.Видимость = Ложь;
Иначе
Элементы.ПолучателиРассылки.Видимость = Истина;
Элементы.ПолучателиРассылки.Видимость = ЗначениеЗаполнено(Форма.ТипПолучателейРассылки);
Если Не РассылкаОбщая Тогда
Элементы.ПолучателиРассылки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
Иначе
@@ -3269,6 +3278,7 @@
Если Изменения = "" Или Изменения = "ПолучателиРассылки" Тогда
Если Форма.ВидРассылки <> "Личная" Тогда
Элементы.ПолучателиРассылки.Видимость = Истина;
ПредставлениеПолучателей = ПредставлениеПолучателей(Форма);
Форма.ПолучателиРассылки = ПредставлениеПолучателей.Краткое;
КонецЕсли;
@@ -3707,7 +3717,7 @@
&НаКлиенте
Процедура ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки()
Если НЕ Объект.Персонализирована Тогда
Если НЕ Объект.Персонализирована Или Элементы.Отчеты.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
@@ -142,7 +142,7 @@
Иначе
ЭлектроннаяПодписьКлиент.УстановитьРасширение(Ложь, Новый ОписаниеОповещения(
"ЗаполнитьОписаниеДанныхСертификата", ЭтотОбъект, ТекущиеДанные.АдресСертификата),
НСтр("ru = 'Для продолжения установите расширение для работы с криптографией.'"));
НСтр("ru = 'Для продолжения установите расширение для работы с 1С:Предприятием.'"));
КонецЕсли;
КонецПроцедуры
@@ -35,7 +35,10 @@
Если ЗначениеЗаполнено(ДополнительныеДанныеПроверки) И ТипЗнч(ДополнительныеДанныеПроверки) = Тип("Структура") Тогда
Элементы.ДекорацияСертификат.Заголовок = ДополнительныеДанныеПроверки.ТекстОшибки;
Элементы.ДекорацияСертификат.Заголовок = ?(ЗначениеЗаполнено(ДополнительныеДанныеПроверки.ТекстОшибки),
ДополнительныеДанныеПроверки.ТекстОшибки,
ДополнительныеДанныеПроверки.ДополнительныеСведения);
Если ЗначениеЗаполнено(ДополнительныеДанныеПроверки.Причина) Тогда
Элементы.ДекорацияПричина.Заголовок = ДополнительныеДанныеПроверки.Причина;
Элементы.ДекорацияПричина.Видимость = Истина;
@@ -871,6 +871,10 @@
<event>BeforeAddRow</event>
<name>СписокПередНачаломДобавления</name>
</handlers>
<handlers>
<event>OnActivateRow</event>
<name>СписокПриАктивизацииСтроки</name>
</handlers>
<searchStringAddition>
<name>СписокСтрокаПоиска</name>
<id>7</id>
@@ -35,6 +35,13 @@
ГруппаПользователейПриИзмененииНаСервере();
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -87,6 +94,16 @@
КонецПроцедуры
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
// СтандартныеПодсистемы.ПодключаемыеКоманды
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -109,6 +126,38 @@
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -714,7 +714,7 @@
Если СертификатОтозван Тогда
Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки",
НСтр("ru = 'Сертификат помечен в программе как отозванный.
НСтр("ru = 'Сертификат помечен в приложении как отозванный.
|Выберите другой сертификат.'"));
ДополнительныеДанныеОшибки = Новый Структура("ДополнительныеДанныеПроверокНаКлиенте", ОшибкаСертификатПомеченКакОтозванный());
ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере,,ДополнительныеДанныеОшибки);
@@ -741,26 +741,30 @@
Если ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра)
И Не РезультатПроверкиУдостоверяющегоЦентра.Действует Тогда
ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
Если ПодписаниеРазрешено = Неопределено Тогда
Оповещение = Новый ОписаниеОповещения("ПодписатьДанныеПослеОтветаНаВопросОбУЦ", ЭтотОбъект, Контекст);
Если РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.РазрешитьПодписание Тогда
ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Картинка = БиблиотекаКартинок.Предупреждение32;
ПараметрыВопроса.Заголовок = НСтр("ru = 'Запрос разрешения на подпись'");
ПараметрыВопроса.ТекстФлажка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Запомнить выбор для сертификата ""%1""'"), Сертификат);
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(Истина, НСтр("ru = 'Разрешить подписание'"));
Кнопки.Добавить(Ложь, НСтр("ru = 'Отменить подписание'"));
ПредупреждениеОбОшибке = РезультатПроверкиУдостоверяющегоЦентра.Предупреждение; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ПредупреждениеОбОшибке.ТекстОшибки, Кнопки, ПараметрыВопроса);
Возврат;
Если ПодписаниеРазрешено = Неопределено Тогда
Оповещение = Новый ОписаниеОповещения("ПодписатьДанныеПослеОтветаНаВопросОбУЦ", ЭтотОбъект, Контекст);
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыВопроса.Заголовок = НСтр("ru = 'Запрос разрешения на подпись'");
ПараметрыВопроса.ТекстФлажка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Запомнить выбор для сертификата ""%1""'"), Сертификат);
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(Истина, НСтр("ru = 'Разрешить подписание'"));
Кнопки.Добавить(Ложь, НСтр("ru = 'Отменить подписание'"));
ПредупреждениеОбОшибке = РезультатПроверкиУдостоверяющегоЦентра.Предупреждение; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ПредупреждениеОбОшибке.ТекстОшибки, Кнопки, ПараметрыВопроса);
Возврат;
КонецЕсли;
Иначе
ПодписаниеРазрешено = Ложь;
КонецЕсли;
ПодписатьДанныеПослеОтветаНаВопросОбУЦ(ПодписаниеРазрешено, Контекст);
@@ -1025,7 +1029,15 @@
КонецЕсли;
Если ОповеститьОбОкончанииСрокаДействия Тогда
ПараметрыОткрытияФормы = Новый Структура("Сертификат", Сертификат);
Если РезультатПроверкиУдостоверяющегоЦентра <> Неопределено
И РезультатПроверкиУдостоверяющегоЦентра.Действует
И (ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки)
Или ЗначениеЗаполнено(РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения)) Тогда
ПараметрыОткрытияФормы.Вставить("ДополнительныеДанныеПроверки", РезультатПроверкиУдостоверяющегоЦентра.Предупреждение);
КонецЕсли;
ДействиеПриНажатии = Новый ОписаниеОповещения("ОткрытьФормуОповещенияОНеобходимостиЗаменыСертификата",
ЭлектроннаяПодписьСлужебныйКлиент, ПараметрыОткрытияФормы);
@@ -1034,6 +1046,7 @@
БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное,
Сертификат);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Истина);
@@ -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>
@@ -1273,6 +1277,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1338,6 +1343,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1419,6 +1425,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1484,6 +1491,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1750,6 +1758,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1815,6 +1824,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1896,6 +1906,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -1961,6 +1972,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2178,7 +2190,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">
@@ -2258,6 +2270,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2323,6 +2336,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2404,6 +2418,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2469,6 +2484,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2736,6 +2752,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2801,6 +2818,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2882,6 +2900,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2947,6 +2966,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -2959,6 +2979,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>
@@ -3214,6 +3271,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3279,6 +3337,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3360,6 +3419,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3425,6 +3485,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3691,6 +3752,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3756,6 +3818,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3837,6 +3900,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -3902,6 +3966,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<maxWidth>70</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
@@ -5138,6 +5203,181 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПроверитьСертификатВЛокальномХранилищеКлиента</name>
<id>33</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<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>
@@ -5191,6 +5431,12 @@
<stringQualifiers/>
</valueType>
</parameters>
<parameters>
<name>ТипПодписи</name>
<valueType>
<types>EnumRef.ТипыПодписиКриптографии</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -61,6 +61,10 @@
Параметры.Сертификат, Проверки, Параметры.ПараметрыДополнительныхПроверок,
СтандартныеПроверки, ВводитьПароль);
Если ЗначениеЗаполнено(Параметры.ТипПодписи) Тогда
ТипПодписи = Параметры.ТипПодписи;
КонецЕсли;
Для каждого Проверка Из Проверки Цикл
Группа = ГруппаФормыБезОтображения(
@@ -114,7 +118,7 @@
Элементы[Проверка + "ОшибкаСервер"].Видимость = Ложь;
Элементы[Проверка + "РешениеСерверНадпись"].Видимость = Ложь;
Элементы[Проверка + "Надпись"].Заголовок =
СтандартныйЗаголовокЭлемента(Проверка + "Надпись");
СтандартныйЗаголовокЭлемента(Проверка + "Надпись", ТипПодписи);
Если ПроверкиНаКлиенте <> Неопределено Тогда
ВывестиРезультатПроверки(Проверка);
@@ -234,7 +238,7 @@
ПараметрыПредупреждения = Новый Структура;
ПараметрыПредупреждения.Вставить("ЗаголовокПредупреждения",
СтандартныйЗаголовокЭлемента(Элемент.Имя));
СтандартныйЗаголовокЭлемента(Элемент.Имя, ТипПодписи));
ПараметрыПредупреждения.Вставить("ТекстОшибкиКлиент",
ПроверкиНаКлиенте[ИмяОшибки]);
ПараметрыПредупреждения.Вставить("ТекстОшибкиСервер",
@@ -323,6 +327,14 @@
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСертификатМеткиВремениОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьСертификат(НавигационнаяСсылкаФорматированнойСтроки);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
@@ -344,10 +356,33 @@
// Продолжение процедуры Проверить.
&НаКлиенте
Процедура ПроверитьЗавершение(Неопределен, Контекст) Экспорт
Элементы.ФормаПроверить.Доступность = Истина;
Элементы.ФормаПроверить.Отображение = ОтображениеКнопки.Текст;
Если СертификатыМетокВремени.Количество() = 0 Тогда
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
Иначе
Массив = Новый Массив;
Для Каждого СертификатМеткиВремени Из СертификатыМетокВремени Цикл
Если Не СертификатМеткиВремени.ПолученНаКлиенте Тогда
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат метки времени, полученной на сервере: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
ИначеЕсли Не СертификатМеткиВремени.ПолученНаСервере Тогда
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат метки времени, полученной на компьютере: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
Иначе
Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = 'Сертификат полученной метки времени: <a href = %1>%2</a>.'"),
СертификатМеткиВремени.АдресСертификата, СертификатМеткиВремени.Представление));
КонецЕсли;
КонецЦикла;
Элементы.ДекорацияСертификатМеткиВремени.Заголовок = Новый ФорматированнаяСтрока(Массив);
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Истина;
КонецЕсли;
Если Не ПроверкаПриВыборе Тогда
Возврат;
КонецЕсли;
@@ -466,6 +501,8 @@
ПроверкиНаСервере = Новый Структура;
ДополнительныеДанныеПроверокНаКлиенте = Новый Структура;
ДополнительныеДанныеПроверокНаСервере = Новый Структура;
СертификатыМетокВремени.Очистить();
Элементы.ДекорацияСертификатМеткиВремени.Видимость = Ложь;
// Очистка предыдущих результатов проверки.
Если СтандартныеПроверки Тогда
@@ -498,6 +535,50 @@
&НаКлиенте
Процедура ПроверитьСертификатПослеПроверкиНаКлиенте(Результат, Контекст) Экспорт
Если ЗначениеЗаполнено(ПроверитьСертификатВЛокальномХранилищеКлиента) Тогда
ОшибкаПоКлассификатору = Новый Структура;
ОшибкаПоКлассификатору.Вставить("ТекстОшибки", Элементы[ПроверитьСертификатВЛокальномХранилищеКлиента + "ОшибкаКлиентНадпись"].Заголовок);
ОшибкаПоКлассификатору.Вставить("Причина", "");
ОшибкаПоКлассификатору.Вставить("Решение", Элементы[ПроверитьСертификатВЛокальномХранилищеКлиента + "РешениеКлиентНадпись"].Заголовок);
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(Неопределено);
ДанныеДляДополнения.ДанныеСертификата = ПолучитьИзВременногоХранилища(АдресСертификата);
ПараметрыДополнения = Новый Структура("Результат, Контекст, Элемент",
Результат, Контекст, ПроверитьСертификатВЛокальномХранилищеКлиента);
ПараметрыДополненияТекстаРешения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора();
ПараметрыДополненияТекстаРешения.ПроверитьСертификатВЛокальномХранилищеКлиента = Истина;
ЭлектроннаяПодписьСлужебныйКлиент.ДополнитьРешениеКлассификатораОшибокПодробностями(
Новый ОписаниеОповещения("ПослеДополненияРешенияКлассификатораОшибок", ЭтотОбъект, ПараметрыДополнения),
ОшибкаПоКлассификатору, ПараметрыДополненияТекстаРешения, ДанныеДляДополнения);
ПроверитьСертификатВЛокальномХранилищеКлиента = "";
Возврат;
КонецЕсли;
ПроверитьСертификатПослеПроверкиНаКлиентеИДополнений(Результат, Контекст);
КонецПроцедуры
// Продолжение процедуры ПроверитьСертификат.
&НаКлиенте
Процедура ПослеДополненияРешенияКлассификатораОшибок(ОшибкаПоКлассификатору, ПараметрыДополнения) Экспорт
Если Элементы[ПараметрыДополнения.Элемент + "РешениеКлиентНадпись"].Заголовок <> ОшибкаПоКлассификатору.Решение Тогда
Элементы[ПараметрыДополнения.Элемент + "РешениеКлиентНадпись"].Заголовок = ОшибкаПоКлассификатору.Решение;
КонецЕсли;
ПроверитьСертификатПослеПроверкиНаКлиентеИДополнений(ПараметрыДополнения.Результат, ПараметрыДополнения.Контекст);
КонецПроцедуры
// Продолжение процедуры ПроверитьСертификат.
&НаКлиенте
Процедура ПроверитьСертификатПослеПроверкиНаКлиентеИДополнений(Результат, Контекст)
Если ЭтоВстроенныйКриптопровайдер Или ЭтоУчетнаяЗаписьСервиса Тогда
Если ОперацииНаСервере Тогда
@@ -551,7 +632,7 @@
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
@@ -598,7 +679,7 @@
Если СтандартныеПроверки Тогда
ЭлектроннаяПодписьКлиент.УстановитьРасширение(Ложь, Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодключенияРасширенияРаботыСКриптографией", ЭтотОбъект, Контекст),
НСтр("ru = 'Для продолжения установите расширение для работы с криптографией.'"));
НСтр("ru = 'Для продолжения установите расширение для работы с 1С:Предприятием.'"));
Иначе
Контекст.Вставить("МенеджерКриптографии", Неопределено);
ПроверитьНаСторонеКлиентаДополнительныеПроверки(Контекст);
@@ -932,13 +1013,60 @@
КонецЕсли;
ОписаниеОшибки = Ждать ДополнительнаяПроверкаНаВозможностьПодписания(Контекст.СертификатКриптографии, Ложь);
// Подписание.
Если ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.МенеджерКриптографии.НачатьПодписывание(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПодписания", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПодписания", ЭтотОбъект),
Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
Иначе
ПарольПринят = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени);
Контекст.МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
Попытка
ДанныеПодписи = Ждать Контекст.МенеджерКриптографии.ПодписатьАсинх(Контекст.ДанныеСертификата, Контекст.СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст);
Иначе
ПроверитьНаСторонеКлиентаПослеПодписания(Null, Контекст);
КонецЕсли;
@@ -1009,6 +1137,7 @@
// Проверка подписи.
Если ДанныеПодписи <> Null И ПроверкиНаКлиенте.НаличиеСертификата = Истина И Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Контекст.Вставить("ДанныеПодписи", ДанныеПодписи);
Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения(
"ПроверитьНаСторонеКлиентаПослеПроверкиПодписи", ЭтотОбъект, Контекст,
"ПроверитьНаСторонеКлиентаПослеОшибкиПроверкиПодписи", ЭтотОбъект),
@@ -1068,7 +1197,7 @@
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт
Асинх Процедура ПроверитьНаСторонеКлиентаПослеПроверкиПодписи(Сертификат, Контекст) Экспорт
Если Сертификат <> Null Тогда
Если ТипЗнч(Сертификат) = Тип("Строка") Тогда
@@ -1076,7 +1205,47 @@
Иначе
ОписаниеОшибки = "";
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи
<> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = Ждать ЭлектроннаяПодписьСлужебныйКлиент.СвойстваПодписиЧтениеМенеджеромКриптографии(
Контекст.ДанныеПодписи, Контекст.МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии();
Ждать СертификатМеткиВремени.ИнициализироватьАсинх(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебныйКлиент.ДобавкаВремени());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток",
СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаКлиенте = Истина;
НоваяСтрока.Представление = СвойстваСертификата.Представление;
Иначе
Найдено[0].ПолученНаКлиенте = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Ложь, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецЕсли;
Контекст.МенеджерКриптографии.НачатьШифрование(Новый ОписаниеОповещения(
@@ -1751,6 +1920,29 @@
КонецПопытки;
ПарольПринят = Не ЗначениеЗаполнено(ОписаниеОшибки);
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
НастройкиПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НастройкиСозданияПодписи(ТипПодписи,
ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени);
МенеджерКриптографии.АдресаСерверовМетокВремени = НастройкиПодписи.АдресаСерверовМетокВремени;
ДанныеПодписи = МенеджерКриптографии.Подписать(ДанныеСертификата, СертификатКриптографии,
НастройкиПодписи.ТипПодписи);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДанныеПодписи, ОписаниеОшибки);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ДанныеПодписи;
@@ -1758,13 +1950,49 @@
&НаСервере
Процедура ПроверитьПодписьНаСервере(МенеджерКриптографии, ДанныеСертификата, ДанныеПодписи)
ОписаниеОшибки = "";
Попытка
МенеджерКриптографии.ПроверитьПодпись(ДанныеСертификата, ДанныеПодписи);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(ТипПодписи) И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") И ТипПодписи <> ПредопределенноеЗначение(
"Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Попытка
СвойстваПодписи = ЭлектроннаяПодписьСлужебный.СвойстваПодписиЧтениеМенеджеромКриптографии(
ДанныеПодписи, МенеджерКриптографии, Истина);
Исключение
ОписаниеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) И ЗначениеЗаполнено(СвойстваПодписи.ТекстОшибки) Тогда
ОписаниеОшибки = СвойстваПодписи.ТекстОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ДанныеСертификатаМеткиВремени = СвойстваПодписи.Сертификаты[СвойстваПодписи.Сертификаты.ВГраница()];
СертификатМеткиВремени = Новый СертификатКриптографии(ДанныеСертификатаМеткиВремени);
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
СертификатМеткиВремени, ЭлектроннаяПодписьСлужебный.ДобавкаВремени());
Найдено = СертификатыМетокВремени.НайтиСтроки(Новый Структура("Отпечаток", СвойстваСертификата.Отпечаток));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = СертификатыМетокВремени.Добавить();
НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(ДанныеСертификатаМеткиВремени,
УникальныйИдентификатор);
НоваяСтрока.Отпечаток = СвойстваСертификата.Отпечаток;
НоваяСтрока.ПолученНаСервере = Истина;
Иначе
Найдено[0].ПолученНаСервере = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецПроцедуры
@@ -1994,6 +2222,7 @@
КонецЕсли;
Если Не РезультатПроверки Тогда
ГруппаОшибка = Форма.Элементы[НачалоЭлемента + ?(НаСервере, "ОшибкаСервер", "ОшибкаКлиент")];
ГруппаОшибка.Видимость = Истина;
ЭлементКартинка.Картинка = ?(ЭтоОшибка,
@@ -2005,21 +2234,50 @@
ЭлементНадписьОшибка = Форма.Элементы[НачалоЭлемента + ?(НаСервере, "ОшибкаСервер", "ОшибкаКлиент") + "Надпись"]; // ДекорацияФормы, РасширениеДекорацииФормыДляНадписи
ЭлементНадписьОшибка.Заголовок = ОписаниеОшибки;
Если ПредупреждениеПослеПроверкиУЦ = Неопределено Тогда
ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере);
ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено;
ИмяНадписиРешение = НачалоЭлемента + ?(НаСервере, "РешениеСерверНадпись", "РешениеКлиентНадпись");
Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка;
Если ЭтоИзвестнаяОшибка Тогда
Форма.Элементы[ИмяНадписиРешение].Заголовок = ОписаниеИзвестнойОшибки.Решение;
Если НачалоЭлемента = "Расшифровка" И ЭлементНадписьОшибка.Заголовок = Форма.Элементы["Подписание" + ?(
НаСервере, "ОшибкаСервер", "ОшибкаКлиент") + "Надпись"].Заголовок Тогда
Форма.Элементы[ИмяНадписиРешение].Видимость = Форма.Элементы["Подписание" + ?(НаСервере,
"РешениеСерверНадпись", "РешениеКлиентНадпись")].Видимость;
Форма.Элементы[ИмяНадписиРешение].Заголовок = НСтр("ru = 'См. пункт Подписание данных.'");
Иначе
ОписаниеИзвестнойОшибки = ОшибкаПоКлассификатору(ОписаниеОшибки, НаСервере, НачалоЭлемента = "ПроверкаПодписи");
ЭтоИзвестнаяОшибка = ОписаниеИзвестнойОшибки <> Неопределено;
Форма.Элементы[ИмяНадписиРешение].Видимость = ЭтоИзвестнаяОшибка;
Если ЭтоИзвестнаяОшибка Тогда
Если ЗначениеЗаполнено(Форма.Сертификат) И ЗначениеЗаполнено(
ОписаниеИзвестнойОшибки.ДействияДляУстранения) Тогда
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(
Новый Структура("Сертификат, ДанныеСертификата", Форма.Сертификат, Форма.АдресСертификата));
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора();
Дополнение = ЭлектроннаяПодписьСлужебныйВызовСервера.ДополнитьРешениеКлассификатораОшибокПодробностями(
ОписаниеИзвестнойОшибки, ДанныеДляДополнения,
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, ?(НаСервере, "Сервер", "Клиент"));
ОписаниеИзвестнойОшибки = Дополнение.ОшибкаПоКлассификатору;
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = Дополнение.ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте;
Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора.ПроверитьСертификатВЛокальномХранилищеКлиента Тогда
Форма.ПроверитьСертификатВЛокальномХранилищеКлиента = НачалоЭлемента;
КонецЕсли;
КонецЕсли;
Форма.Элементы[ИмяНадписиРешение].Заголовок = ОписаниеИзвестнойОшибки.Решение;
КонецЕсли;
КонецЕсли;
Иначе
ИмяНадписиРешение = НачалоЭлемента + ?(НаСервере, "РешениеСерверНадпись", "РешениеКлиентНадпись");
Форма.Элементы[ИмяНадписиРешение].Видимость = Истина;
Форма.Элементы[ИмяНадписиРешение].Заголовок = ПредупреждениеПослеПроверкиУЦ.Решение;
КонецЕсли;
КонецЕсли;
Иначе
@@ -2041,7 +2299,7 @@
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка не выполнялась.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
ИначеЕсли ЗначениеПроверки = Неопределено
И ЗначениеПроверкиВторогоКонтекста <> Неопределено Тогда
@@ -2060,7 +2318,7 @@
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
Иначе
РезультатПроверки = ?(ОбъединятьРезультаты = "ОбъединятьПоИ",
ЗначениеПроверки И ЗначениеПроверкиВторогоКонтекста,
@@ -2073,7 +2331,7 @@
ЭлементКартинка.Подсказка = НСтр("ru = 'Проверка выполнена успешно.'");
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли;
КонецЕсли;
Иначе
@@ -2092,7 +2350,7 @@
ЭлементРешение.Видимость = Ложь;
ЭлементНадпись.Гиперссылка = Ложь;
ЭлементНадпись.Заголовок = ЗаголовокЭлемента(
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя);
Форма.ДополнительныеПроверки, ЭлементНадпись.Имя, Форма.ТипПодписи);
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -2104,9 +2362,9 @@
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента)
Функция ЗаголовокЭлемента(ДополнительныеПроверки, ИмяЭлемента, ТипПодписи)
ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента);
ЗаголовокЭлемента = СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи);
Если Не ПустаяСтрока(ЗаголовокЭлемента) Тогда
Возврат ЗаголовокЭлемента;
КонецЕсли;
@@ -2124,7 +2382,7 @@
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента)
Функция СтандартныйЗаголовокЭлемента(ИмяЭлемента, ТипПодписи)
Если ИмяЭлемента = "ЗаконныйСертификатНадпись" Тогда
Возврат НСтр("ru = 'Соответствие законодательству Российской Федерации'");
@@ -2139,7 +2397,17 @@
Возврат НСтр("ru = 'Наличие программы для подписания и расшифровки'");
ИначеЕсли ИмяЭлемента = "ПодписаниеНадпись" Тогда
Возврат НСтр("ru = 'Подписание данных'");
Если ЗначениеЗаполнено(ТипПодписи) Тогда
ТипПодписиСтрока = Строка(ТипПодписи);
ТипПодписиСтрока = НРег(Лев(ТипПодписиСтрока, 1)) + Сред(ТипПодписиСтрока, 2);
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подписание данных типом подписи - %1'"), ТипПодписиСтрока);
Иначе
Возврат НСтр("ru = 'Подписание данных'");
КонецЕсли;
ИначеЕсли ИмяЭлемента = "ПроверкаПодписиНадпись" Тогда
Возврат НСтр("ru = 'Проверка созданной подписи'");
@@ -2186,9 +2454,9 @@
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере)
Функция ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи)
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере);
Возврат ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ОписаниеОшибки, ОшибкаНаСервере, ОшибкаПроверкиПодписи);
КонецФункции
@@ -1795,17 +1795,48 @@
<commandSource>Form</commandSource>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ФормаСертификатОтозван</name>
<id>63</id>
<items xsi:type="form:FormGroup">
<name>ФормаГруппаОтозван</name>
<id>332</id>
<items xsi:type="form:Button">
<name>ФормаСертификатОтозван</name>
<id>63</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСертификатОтозванРасширеннаяПодсказка</name>
<id>94</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.СертификатОтозван</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>PictureAndText</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Форма группа отозван</value>
</title>
<extendedTooltip>
<name>ФормаСертификатОтозванРасширеннаяПодсказка</name>
<id>94</id>
<name>ФормаГруппаОтозванРасширеннаяПодсказка</name>
<id>333</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -1813,14 +1844,7 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.СертификатОтозван</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>PictureAndText</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
</items>
<items xsi:type="form:Button">
<name>ФормаПоказатьАвтозаполняемыеРеквизиты</name>
@@ -56,6 +56,13 @@
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "НестандартныйСертификат");
КонецЕсли;
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -74,6 +81,13 @@
Возврат;
КонецЕсли;
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
ОформитьСписокПользователей();
ПодключитьОбработчикОжидания("ОбработчикОжиданияПоказатьСостояниеСертификата", 0.1, Истина);
@@ -83,6 +97,13 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Если АдресСертификата <> Неопределено Тогда
ПриСозданииНаСервереПриЧтенииНаСервере();
КонецЕсли;
@@ -99,6 +120,13 @@
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
ДополнительныеПараметры = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыОповещенияПриЗаписиСертификата();
Если ПараметрыЗаписи.ЭтоНовый Тогда
ДополнительныеПараметры.ЭтоНовый = Истина;
@@ -331,7 +359,7 @@
КонецЕсли;
ЭлектроннаяПодписьКлиент.ПроверитьСертификатСправочника(Объект.Ссылка,
Новый Структура("БезПодтверждения", Истина));
Новый Структура("БезПодтверждения, ТипПодписи", Истина, ТипПодписиПоУмолчанию()));
КонецПроцедуры
@@ -408,6 +436,37 @@
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -672,7 +731,9 @@
КонецЕсли;
Элементы.Предупреждение.Заголовок = Новый ФорматированнаяСтрока(МассивСтрок);
Если ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда
Если ДанныеПредупреждения.РазрешитьПодписание
И ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда
НастройкаРазрешитьПодписание = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Объект.Ссылка, "РазрешитьПодписание", Неопределено);
Элементы.ПодписаниеРазрешено.Видимость = Истина;
@@ -872,6 +933,7 @@
КонецЕсли;
Результат = Новый СписокЗначений;
Результат.Добавить(Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка(), НСтр("ru = 'По умолчанию'"));
ТекстЗапроса =
"ВЫБРАТЬ
@@ -961,4 +1023,11 @@
КонецФункции
&НаСервереБезКонтекста
Функция ТипПодписиПоУмолчанию()
Возврат Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
КонецФункции
#КонецОбласти
@@ -1224,14 +1224,28 @@
КонецЕсли;
ВсеСертификаты = Новый Массив;
ВсеСертификаты.Добавить(Сертификат);
Для Каждого Строка Из СертификатыШифрования Цикл
Если Не ЗначениеЗаполнено(Строка.Сертификат)
Или ВсеСертификаты.Найти(Строка.Сертификат) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВсеСертификаты.Добавить(Строка.Сертификат);
КонецЦикла;
Если ЗначениеЗаполнено(Сертификат) Тогда
ВсеСертификаты.Добавить(Сертификат);
КонецЕсли;
Если СертификатыШифрования.Количество() > 0 Тогда
Для Каждого Строка Из СертификатыШифрования Цикл
Если Не ЗначениеЗаполнено(Строка.Сертификат)
Или ВсеСертификаты.Найти(Строка.Сертификат) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВсеСертификаты.Добавить(Строка.Сертификат);
КонецЦикла;
ИначеЕсли НаборСертификатов.Количество() > 0 Тогда
Для Каждого Строка Из НаборСертификатов Цикл
Если Не ЗначениеЗаполнено(Строка.АдресДанных)
Или ВсеСертификаты.Найти(Строка.АдресДанных) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВсеСертификаты.Добавить(Строка.АдресДанных);
КонецЦикла;
КонецЕсли;
ДополнительныеПараметры = Новый Структура("Сертификат", ВсеСертификаты);
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
@@ -56,6 +56,56 @@
// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов
// СтандартныеПодсистемы.ВариантыОтчетов
// Определяет список команд отчетов.
//
// Параметры:
// КомандыОтчетов - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
// Параметры - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.СертификатыЭлектроннойПодписи) Тогда
Возврат;
КонецЕсли;
Если Параметры.ИмяФормы = "ОбщаяФорма.НастройкиЭлектроннойПодписиИШифрования" Тогда
Команда = КомандыОтчетов.Добавить();
Команда.КлючВарианта = "СертификатыЭлектроннойПодписи";
Команда.Представление = НСтр("ru = 'Сертификаты электронной подписи'");
Команда.Идентификатор = "СертификатыЭлектроннойПодписи";
Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи";
Команда = КомандыОтчетов.Добавить();
Команда.КлючВарианта = "ЗаканчиваетсяСрокДействия";
Команда.Представление = НСтр("ru = 'Сертификаты, у которых заканчивается срок действия'");
Команда.Идентификатор = "ЗаканчиваетсяСрокДействия";
Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи";
Команда = КомандыОтчетов.Добавить();
Команда.КлючВарианта = "СертификатыСотрудников";
Команда.Представление = НСтр("ru = 'Сертификаты сотрудников'");
Команда.Идентификатор = "СертификатыСотрудников";
Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи";
Команда = КомандыОтчетов.Добавить();
Команда.КлючВарианта = "ТребуетсяВыпускСертификатаФЛ";
Команда.Представление = НСтр("ru = 'Требуется выпуск сертификата физического лица'");
Команда.Идентификатор = "ТребуетсяВыпускСертификатаФЛ";
Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи";
Команда = КомандыОтчетов.Добавить();
Команда.КлючВарианта = "ТребуетсяМЧД";
Команда.Представление = НСтр("ru = 'Сертификаты, для которых требуется МЧД'");
Команда.Идентификатор = "ТребуетсяМЧД";
Команда.Менеджер = "Отчет.СертификатыЭлектроннойПодписи";
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВариантыОтчетов
#КонецОбласти
#КонецОбласти
@@ -163,7 +213,7 @@
ОбработкаЗаявлениеНаВыпускНовогоКвалифицированногоСертификата =
ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(
"Обработка.ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата");
КонецЕсли;
КонецЕсли;
Пока Выборка.Следующий() Цикл
@@ -235,17 +285,46 @@
Исключение
Сертификат = Неопределено;
КонецПопытки;
Если Сертификат <> Неопределено Тогда
СвойстваСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваСертификата(
Сертификат, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ДвоичныеДанныеСертификата);
Если СертификатОбъект.ДействителенДо <> СвойстваСертификата.ДействителенДо Тогда
СтрокаПоиска = Формат(СертификатОбъект.ДействителенДо, "ДФ=MM.yyyy");
СтрокаЗамены = Формат(СвойстваСертификата.ДействителенДо, "ДФ=MM.yyyy");
СертификатОбъект.Наименование = СтрЗаменить(СертификатОбъект.Наименование, СтрокаПоиска, СтрокаЗамены);
СертификатОбъект.Наименование = СтрЗаменить(СертификатОбъект.Наименование, СтрокаПоиска,
СтрокаЗамены);
СертификатОбъект.ДействителенДо = СвойстваСертификата.ДействителенДо;
ЗаписатьОбъект = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(СертификатОбъект.Программа) И ТипЗнч(СертификатОбъект.Программа) = Тип(
"СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования") Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанныеСертификата, Ложь, Истина);
Если ЭлектроннаяПодписьСлужебныйКлиентСервер.ЭтоСертификатГОСТ(АлгоритмСертификата) Тогда
ОписаниеПрограммы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
СертификатОбъект.Программа,
"ЭтоВстроенныйКриптопровайдер, АлгоритмПодписи, АлгоритмХеширования");
Если Не ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
"", АлгоритмСертификата, ОписаниеПрограммы.АлгоритмПодписи, ОписаниеПрограммы.АлгоритмХеширования);
Если Результат <> Истина Тогда
СертификатОбъект.Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
ЗаписатьОбъект = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -28,12 +28,38 @@
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если Программа = Неопределено Тогда
Программа = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка();
КонецЕсли;
Если ЗначениеЗаполнено(Программа) И ТипЗнч(Программа) = Тип(
"СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования") И ЗначениеЗаполнено(Отпечаток) Тогда
ОписаниеПрограммы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Программа,
"ЭтоВстроенныйКриптопровайдер, АлгоритмПодписи, АлгоритмХеширования");
Если Не ОписаниеПрограммы.ЭтоВстроенныйКриптопровайдер Тогда
ДвоичныеДанные = ДанныеСертификата.Получить();
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
АлгоритмСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(
ДвоичныеДанные, Ложь, Истина);
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСоответствуетСертификату(
Наименование, АлгоритмСертификата, ОписаниеПрограммы.АлгоритмПодписи,
ОписаниеПрограммы.АлгоритмХеширования);
Если Результат <> Истина Тогда
ВызватьИсключение Результат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
КонецПроцедуры
@@ -1223,7 +1223,20 @@
Функция РеквизитыТребующиеВводаПароляДляИзменения() Экспорт
Возврат "ИспользоватьДляОтправки,ИспользоватьДляПолучения,СерверВходящейПочты,СерверИсходящейПочты,ВладелецУчетнойЗаписи,ИспользоватьЗащищенноеСоединениеДляВходящейПочты,ИспользоватьЗащищенноеСоединениеДляИсходящейПочты,Пользователь,ПользовательSMTP";
Реквизиты = Новый Массив;
Реквизиты.Добавить("ИспользоватьДляОтправки");
Реквизиты.Добавить("ИспользоватьДляПолучения");
Реквизиты.Добавить("СерверВходящейПочты");
Реквизиты.Добавить("СерверИсходящейПочты");
Реквизиты.Добавить("ВладелецУчетнойЗаписи");
Реквизиты.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты");
Реквизиты.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты");
Реквизиты.Добавить("Пользователь");
Реквизиты.Добавить("ПользовательSMTP");
Реквизиты.Добавить("ПриОтправкеПисемТребуетсяАвторизация");
Реквизиты.Добавить("ИмяПользователя");
Возврат СтрСоединить(Реквизиты, ",");
КонецФункции
@@ -268,7 +268,7 @@
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, ПараметрыСообщения, Ложь);
КонецЕсли;
Если Подписать Тогда
Если Подписать И Результат.Вложения.Количество() > 0 Тогда
ПараметрыОтправки.ДополнительныеПараметры.НастройкиСохранения.УпаковатьВАрхив = УпаковатьВАрхив;
ПодписатьФайлы(Результат, ПараметрыОтправки);
Иначе
@@ -286,7 +286,7 @@
СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДополнительныйРеквизит.Свойство, "Заголовок, ТипЗначения", , ТекущийЯзык().КодЯзыка);
СтрокаРеквизит = РеквизитыОбъекта.Добавить();
СтрокаРеквизит.Реквизит = ДополнительныйРеквизит.Свойство;
СтрокаРеквизит.Представление = СвойстваОбъекта.Заголовок;
СтрокаРеквизит.Представление = Строка(ДополнительныйРеквизит.Свойство);
СтрокаРеквизит.НомерКартинки = 2;
СтрокаРеквизит.ТипЗначения = СвойстваОбъекта.ТипЗначения;
КонецЦикла;
@@ -606,6 +606,10 @@
<metadata>InformationRegister.СообщенияОбменаДаннымиОбластейДанных</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.ОбновлениеКлассификаторовМЧД</metadata>
<use>DontUse</use>
</content>
<content>
<metadata>ScheduledJob.СборИОтправкаСтатистики</metadata>
<use>DontUse</use>
@@ -537,6 +537,37 @@
</picture>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:FormGroup">
<name>ПодменюОтчеты</name>
<id>478</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Отчеты</value>
</title>
<extendedTooltip>
<name>ПодменюОтчетыРасширеннаяПодсказка</name>
<id>479</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Popup</type>
<extInfo xsi:type="form:PopupGroupExtInfo">
<picture xsi:type="core:PictureRef">
<picture>CommonPicture.Отчеты</picture>
</picture>
<representation>PictureAndText</representation>
<importance>Normal</importance>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>СертификатыСтандартныеКоманды</name>
<id>98</id>
@@ -4104,6 +4135,17 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПараметрыПодключаемыхКоманд</name>
<id>5</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Обновить</name>
<title>
@@ -4160,7 +4202,7 @@
<name>УстановитьРасширение</name>
<title>
<key>ru</key>
<value>Установить расширение для работы с криптографией</value>
<value>Установить расширение для работы с 1С:Предприятием</value>
</title>
<id>2</id>
<toolTip>
@@ -1,11 +1,11 @@
<!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> в разделе <strong>Администрирование - Общие настройки</strong>. После этого становятся доступными соответствующие команды в приложении.</p>
<p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для установки подписи необходимо иметь сертификат ключа электронной подписи. Сертификат можно получить в удостоверяющем центре. Например, в удостоверяющем центре фирмы 1С <a href="http://ca.1c.ru/">http://ca.1c.ru/</a>. Только удостоверяющий центр может выдать юридически значимый (квалифицированный сертификат).</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>В случае использования распределенной информационной базы большую часть настроек можно изменить только в главном узле.</p>
<p>Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты <b>ExtraCryptoAPI</b>. Установить компоненту можно<b> </b>через меню <b>Еще - Установить компоненту</b> <b>ExtraCryptoAPI.</b></p>
<p>Для автоматического определения приложения для работы с сертификатом может понадобиться установка компоненты <b>ExtraCryptoAPI</b>. Установить компоненту можно<b> </b>через меню <b>Еще - Установить компоненту</b> <b>ExtraCryptoAPI.</b></p>
<h3>Сертификаты</h3>
<ul><li>Показывает все сертификаты, которые используются для подписания и шифрования данных, а также заявления на выпуск нового сертификата.
</li>
@@ -13,33 +13,31 @@
</li>
<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>.
<li><a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">Сертификат</a> можно <strong>Добавить</strong> из числа <strong>установленных на компьютере</strong>. Также это можно сделать в процессе подписания или шифрования данных. Выберите нужное действие с помощью переключателя, нажмите <b>Добавить</b>.</li>
<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>Для анализа сертификатов сотрудников и контроля своевременного обновления сертификатов можно воспользоваться кнопкой <b>Отчеты</b> для того, чтобы открыть список доступных <a href="Catalog.ВариантыОтчетов/Help">вариантов отчета</a>.</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>
<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>
<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><ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html>
@@ -150,6 +150,18 @@
ЗаполнитьПрограммыИНастройки();
ОбновитьТекущуюВидимостьЭлементов();
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
ПараметрыРазмещения = МодульПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.КоманднаяПанель = Элементы.СертификатыКоманднаяПанельСписка;
ПараметрыРазмещения.Источники = Новый ОписаниеТипов("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования");
ПараметрыРазмещения.ВладелецКоманд = Элементы.Сертификаты;
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -685,6 +697,34 @@
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -1051,10 +1091,7 @@
Процедура ОбработчикОжиданияОпределитьУстановленныеПрограммыПослеПодключенияРасширения(Подключено, Контекст) Экспорт
Если Не Подключено Тогда
Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина;
Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = '<a href = ""%1"">Нажмите здесь</a>, чтобы установить расширение для работы с электронной подписью и увидеть все установленные на компьютере программы для работы с электронной подписью.'"),
"ПроверитьУстановкуПрограммКриптографии");
ПоказатьЗаголовокДляУстановкиРасширения();
ПодключитьОбработчикОжидания("ОбработчикОжиданияОпределитьУстановленныеПрограммы", 3, Истина);
Возврат;
КонецЕсли;
@@ -1082,10 +1119,7 @@
Подключено = Ждать ПодключитьРасширениеРаботыСКриптографиейАсинх();
Если Не Подключено Тогда
Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина;
Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = '<a href = ""%1"">Нажмите здесь</a>, чтобы установить расширение для работы с электронной подписью и увидеть все установленные на компьютере программы для работы с электронной подписью.'"),
"ПроверитьУстановкуПрограммКриптографии");
ПоказатьЗаголовокДляУстановкиРасширения();
КонецЕсли;
Контекст = Новый Структура;
@@ -1096,6 +1130,14 @@
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьЗаголовокДляУстановкиРасширения()
Элементы.ГруппаПодсказкаКриптопровайдеры.Видимость = Истина;
Элементы.ДекорацияПроверкаУстановкиКриптопровайдера.Заголовок = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
НСтр("ru = '<a href = ""%1"">Нажмите здесь</a> для установки расширения для работы с 1С:Предприятием, чтобы работать с электронной подписью.'"),
"ПроверитьУстановкуПрограммКриптографии");
КонецПроцедуры
// Продолжение процедуры ОбработчикОжиданияОпределитьУстановленныеПрограммы.
&НаКлиенте
Процедура ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклНачало(Контекст)
@@ -837,8 +837,8 @@
КлючНастроек = Строка(ИспользуемыеПараметры.ИсточникДанных.УникальныйИдентификатор()) + "-" + ИспользуемыеПараметры.ПараметрыИсточника.ИдентификаторКоманды;
Иначе
ИменаМакетов = ИспользуемыеПараметры.ИменаМакетов;
Если ТипЗнч(ИменаМакетов) = Тип("Массив") Тогда
ИменаМакетов = СтрСоединить(ИменаМакетов, ",");
Если ТипЗнч(ИспользуемыеПараметры.ИменаМакетов) = Тип("Массив") Тогда
ИменаМакетов = СтрСоединить(ИспользуемыеПараметры.ИменаМакетов, ",");
КонецЕсли;
КлючНастроек = ИспользуемыеПараметры.ИмяМенеджераПечати + "-" + ИменаМакетов;
@@ -529,7 +529,7 @@
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Интерактивно = Ложь;
ИмяФайлаДляОткрытия = ИмяКаталога+"\"+ДополнительныеПараметры.ИмяФайлаДляОткрытия;
ИмяФайлаДляОткрытия = ИмяКаталога + ПолучитьРазделительПути() + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ДополнительныеПараметры.ИмяФайлаДляОткрытия);
ФайловаяСистемаКлиент.СохранитьФайл(Оповещение, ДополнительныеПараметры.АдресДокумента, ИмяФайлаДляОткрытия, ПараметрыСохранения);
КонецПроцедуры
@@ -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>
@@ -496,6 +499,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>
@@ -1362,6 +1368,10 @@
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
@@ -1515,6 +1525,30 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ОшибкаПроверкиПодписи</name>
<id>12</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПараметрыДополненияТекстаРешенияОшибкиКлассификатора</name>
<id>11</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>ПерейтиКНастройкеПрограмм</name>
<title>
@@ -13,6 +13,10 @@
ДополнительныеДанные = Параметры.ДополнительныеДанные;
Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда
ОшибкаПроверкиПодписи = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, "ДанныеПодписи", Ложь) = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ИнформацияДляПоддержки) Тогда
Элементы.ИнформацияДляПоддержки.Заголовок = Параметры.ИнформацияДляПоддержки;
Иначе
@@ -65,6 +69,17 @@
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если Не МобильноеПриложениеКлиент И Не МобильныйКлиент Тогда
Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора <> Неопределено Тогда
ПодключитьОбработчикОжидания("ДополнитьРешениеКлассификатораОшибокПодробностями", 0.1, Истина);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
@@ -72,18 +87,26 @@
&НаКлиенте
Процедура ИнструкцияНажатие(Элемент)
ЯкорьОшибки = "";
Если Элемент.Имя = "ИнструкцияКлиент"
И Не ПустаяСтрока(ЯкорьОшибкиКлиент) Тогда
ЯкорьОшибки = ЯкорьОшибкиКлиент;
ИначеЕсли Элемент.Имя = "ИнструкцияСервер"
И Не ПустаяСтрока(ЯкорьОшибкиСервер) Тогда
ЯкорьОшибки = ЯкорьОшибкиСервер;
ЯкорьОшибки = ""; ТекстДляПоиска = "";
Если Элемент.Имя = "ИнструкцияКлиент" Тогда
Если Не ПустаяСтрока(ЯкорьОшибкиКлиент) Тогда
ЯкорьОшибки = ЯкорьОшибкиКлиент;
Иначе
ТекстДляПоиска = ТекстОшибкиКлиент;
КонецЕсли;
ИначеЕсли Элемент.Имя = "ИнструкцияСервер" Тогда
Если Не ПустаяСтрока(ЯкорьОшибкиСервер) Тогда
ЯкорьОшибки = ЯкорьОшибкиСервер;
Иначе
ТекстДляПоиска = ТекстОшибкиСервер;
КонецЕсли;
КонецЕсли;
ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(ЯкорьОшибки);
Если ЗначениеЗаполнено(ТекстДляПоиска) Тогда
ЭлектроннаяПодписьКлиент.ОткрытьПоискПоОшибкамПриРаботеСЭлектроннойПодписью(ТекстДляПоиска);
Иначе
ЭлектроннаяПодписьКлиент.ОткрытьИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами(ЯкорьОшибки);
КонецЕсли;
КонецПроцедуры
@@ -158,6 +181,33 @@
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ДополнитьРешениеКлассификатораОшибокПодробностями()
ОшибкаПоКлассификатору = Новый Структура;
ОшибкаПоКлассификатору.Вставить("ТекстОшибки", Элементы.ТекстОшибкиКлиент.Заголовок);
ОшибкаПоКлассификатору.Вставить("Причина", Элементы.ПричиныКлиентТекст.Заголовок);
ОшибкаПоКлассификатору.Вставить("Решение", Элементы.РешенияКлиентТекст.Заголовок);
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(ДополнительныеДанные);
ЭлектроннаяПодписьСлужебныйКлиент.ДополнитьРешениеКлассификатораОшибокПодробностями(
Новый ОписаниеОповещения("ПослеДополненияРешенияКлассификатораОшибок", ЭтотОбъект),
ОшибкаПоКлассификатору, ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, ДанныеДляДополнения);
КонецПроцедуры
&НаКлиенте
Процедура ПослеДополненияРешенияКлассификатораОшибок(ОшибкаПоКлассификатору, Контекст) Экспорт
Если Элементы.РешенияКлиентТекст.Заголовок <> ОшибкаПоКлассификатору.Решение Тогда
Элементы.РешенияКлиентТекст.Заголовок = ОшибкаПоКлассификатору.Решение;
КонецЕсли;
Если Элементы.ПричиныКлиентТекст.Заголовок <> ОшибкаПоКлассификатору.Причина Тогда
Элементы.ПричиныКлиентТекст.Заголовок = ОшибкаПоКлассификатору.Причина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЭлементы(ТекстОшибки, ДвеОшибки, МестоОшибки)
@@ -207,7 +257,8 @@
ОшибкаПоКлассификатору.Причина = ФорматированнаяСтрока(Причина);
ОшибкаПоКлассификатору.Решение = ФорматированнаяСтрока(ЕстьПричинаИРешение.Решение);
Иначе
ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(ТекстОшибки, МестоОшибки = "Сервер");
ОшибкаПоКлассификатору = ЭлектроннаяПодписьСлужебный.ОшибкаПоКлассификатору(
ТекстОшибки, МестоОшибки = "Сервер", ОшибкаПроверкиПодписи);
КонецЕсли;
ЭтоИзвестнаяОшибка = ОшибкаПоКлассификатору <> Неопределено;
@@ -216,20 +267,17 @@
Если ЭтоИзвестнаяОшибка Тогда
Если ЗначениеЗаполнено(ОшибкаПоКлассификатору.ДействияДляУстранения) Тогда
Если ОшибкаПоКлассификатору.ДействияДляУстранения.Найти(
"УказатьВРешенииСсылкуНаУдостоверяющийЦентр") <> Неопределено Тогда
ИздательСертификата = ИздательСертификата();
Если ЗначениеЗаполнено(ИздательСертификата) Тогда
Решение = Новый Массив;
Решение.Добавить(ОшибкаПоКлассификатору.Решение);
Решение.Добавить(Символы.ПС);
Решение.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Удостоверяющий центр, выдавший сертификат: %1.'"), ИздательСертификата));
ОшибкаПоКлассификатору.Решение = Новый ФорматированнаяСтрока(Решение);
КонецЕсли;
Если ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = Неопределено Тогда
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыДополненияТекстаРешенияОшибкиКлассификатора();
КонецЕсли;
ДанныеДляДополнения = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДанныеДляДополненияОшибкиИзКлассификатора(ДополнительныеДанные);
Дополнение = ЭлектроннаяПодписьСлужебный.ДополнитьРешениеКлассификатораОшибокПодробностями(
ОшибкаПоКлассификатору, ДанныеДляДополнения,
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора, МестоОшибки);
ОшибкаПоКлассификатору = Дополнение.ОшибкаПоКлассификатору;
ПараметрыДополненияТекстаРешенияОшибкиКлассификатора = Дополнение.ПараметрыДополненияТекстаРешенияОшибкиКлассификатораНаКлиенте;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
ЭлементИнструкция.Имя, "Заголовок", НСтр("ru = 'Подробнее'"));
@@ -260,9 +308,12 @@
Иначе
ЯкорьОшибки = ОшибкаПоКлассификатору.Ссылка;
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
ЭлементИнструкция.Имя, "Заголовок", НСтр("ru = 'Подробнее'"));
ТребуемоеКоличествоСтрок = 0;
ШиринаПоля = Цел(?(Ширина < 20, 20, Ширина) * 1.4);
Для НомерСтроки = 1 По СтрЧислоСтрок(ТекстОшибки) Цикл
@@ -283,47 +334,6 @@
КонецПроцедуры
&НаСервере
Функция ИздательСертификата()
Если Не ЗначениеЗаполнено(ДополнительныеДанные) Тогда
Возврат Неопределено;
КонецЕсли;
ДанныеСертификата = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, "ДанныеСертификата", Неопределено);
Если ЗначениеЗаполнено(ДанныеСертификата) Тогда
Если ТипЗнч(ДанныеСертификата) = Тип("Строка") Тогда
ДанныеСертификата = ПолучитьИзВременногоХранилища(ДанныеСертификата);
КонецЕсли;
Иначе
Сертификат = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, "Сертификат", Неопределено);
Если ЗначениеЗаполнено(Сертификат) Тогда
Если ТипЗнч(Сертификат) = Тип("Массив") Тогда
Если Сертификат.Количество() > 0 Тогда
Если ТипЗнч(Сертификат[0]) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДанныеСертификата = ДанныеСертификата(Сертификат[0], Неопределено);
Иначе
ДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат[0]);
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДанныеСертификата = ДанныеСертификата(Сертификат, Неопределено);
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДанныеСертификата = Сертификат;
Иначе
ДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеСертификата) Тогда
СвойстваИздателя = ЭлектроннаяПодпись.СвойстваИздателяСертификата(Новый СертификатКриптографии(ДанныеСертификата));
Возврат СвойстваИздателя.ОбщееИмя;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаКлиенте
Функция ДополнительныеДанные()
@@ -337,18 +347,22 @@
Если ТипЗнч(Сертификат) = Тип("Массив") Тогда
Если Сертификат.Количество() > 0 Тогда
Если ТипЗнч(Сертификат[0]) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат[0];
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат[0], УникальныйИдентификатор);
Иначе
Если ЗначениеЗаполнено(Сертификат[0]) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат[0];
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат[0], УникальныйИдентификатор);
КонецЕсли;
ИначеЕсли ЭтоАдресВременногоХранилища(Сертификат[0]) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = Сертификат[0];
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат;
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат, УникальныйИдентификатор);
Если ЗначениеЗаполнено(Сертификат) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат;
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат, УникальныйИдентификатор);
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ПоместитьВоВременноеХранилище(Сертификат, УникальныйИдентификатор);
Иначе
ИначеЕсли ЭтоАдресВременногоХранилища(Сертификат) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = Сертификат;
КонецЕсли;
КонецЕсли;
@@ -513,10 +513,16 @@
&НаКлиенте
Процедура СохранитьВФайлПродолжение(Результат, ДополнительныеПараметры) Экспорт
Макет = МакетИзВременногоХранилища();
ПодготовитьМакетКСохранению(Макет);
АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет, УникальныйИдентификатор);
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайла();
ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Выберите офисный документ'");
ПараметрыСохранения.Диалог.Заголовок = НСтр("ru = 'Сохранение макета в файл'");
ПараметрыСохранения.Диалог.Фильтр = НСтр("ru = 'Офисный документ'") + " (*.docx)|*.docx";
ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, АдресФайлаМакета,,ПараметрыСохранения);
ФайловаяСистемаКлиент.СохранитьФайл(Неопределено, АдресМакетаВоВременномХранилище, ИмяДокумента, ПараметрыСохранения);
КонецПроцедуры
&НаКлиенте
@@ -2918,11 +2918,22 @@
&НаКлиенте
Процедура ПродолжитьЗагрузкуИзФайлаПослеПолученияДанных(ДвоичныеДанные, ДополнительныеПараметры) Экспорт
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ПрочитатьМакет(ДвоичныеДанные));
ЗакончитьЗагрузкуИзФайла(ДвоичныеДанные);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗакончитьЗагрузкуИзФайла(Знач ДвоичныеДанные)
КодЯзыка = ТабличныйДокумент.КодЯзыка;
Макет = ПрочитатьМакет(ДвоичныеДанные);
ТабличныйДокумент.КодЯзыка = КодЯзыка;
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, Макет);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьТекстВОбластиЯчеек()
@@ -1035,7 +1035,7 @@
ПолеЗначения.РежимВыбораИзСписка = Не ЭтоПолеСписка И (Строка.ДоступныеЗначения <> Неопределено);
ПривестиЗначениеКВидуСравнения(Строка);
УстановитьПредставлениеЗначения(Строка);
УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
КонецПроцедуры
&НаКлиенте
@@ -1152,7 +1152,7 @@
ЭлементНастройки.Значение = Строка.Значение;
УстановитьМодифицированность();
УстановитьПредставлениеЗначения(Строка);
УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
Если НастройкиОтчета.ЗагрузитьНастройкиПриИзмененииПараметров.Найти(ЭлементНастройки.Параметр) <> Неопределено Тогда
ВариантБылМодифицирован = ВариантМодифицирован;
@@ -1199,7 +1199,7 @@
ЗаполнитьЗначенияСвойств(ЭлементНастройки, Строка, "Использование, ПравоеЗначение");
УстановитьМодифицированность();
УстановитьПредставлениеЗначения(Строка);
УстановитьПредставлениеЗначения(Строка, Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора);
КонецПроцедуры
&НаКлиенте
@@ -2449,7 +2449,7 @@
Строка.ЭтоПредопределенныйЗаголовок = (Строка.Заголовок = Строка.ПредставлениеПользовательскойНастройки);
ПривестиЗначениеКВидуСравнения(Строка, ЭлементНастройки);
УстановитьПредставлениеЗначения(Строка);
УстановитьПредставлениеЗначения(Строка, СвойствоЭлементаСтруктуры.ДоступныеПоляОтбора);
Возврат УстановленыУспешно;
КонецФункции
@@ -3648,15 +3648,22 @@
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредставлениеЗначения(Строка)
Процедура УстановитьПредставлениеЗначения(Строка, ДоступныеПоляОтбора)
Строка.ПредставлениеЗначения = "";
ДоступныеЗначения = Строка.ДоступныеЗначения;
Если ДоступныеЗначения = Неопределено Тогда
Значение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение);
Если ДоступныеЗначения = Неопределено Тогда
Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда
ДоступноеПоле = ДоступныеПоляОтбора.НайтиПоле(Значение);
Если ДоступноеПоле <> Неопределено Тогда
Строка.ПредставлениеЗначения = ДоступноеПоле.Заголовок;
КонецЕсли;
КонецЕсли;
Возврат;
КонецЕсли;
Значение = ?(Строка.ЭтоПараметр, Строка.Значение, Строка.ПравоеЗначение);
НайденныйЭлемент = ДоступныеЗначения.НайтиПоЗначению(Значение);
Если НайденныйЭлемент <> Неопределено Тогда
Строка.ПредставлениеЗначения = НайденныйЭлемент.Представление;
@@ -4008,12 +4015,16 @@
Продолжить;
КонецЕсли;
ОписаниеНастройки = СортировкаЭлементаСтруктуры.ДоступныеПоляПорядка.НайтиПоле(ЭлементНастройкиИсточник.Поле);
Если ОписаниеНастройки = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементНастройкиПриемник = СортировкаЭлементаСтруктуры.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ЭлементНастройкиПриемник, ЭлементНастройкиИсточник);
ЭлементНастройкиПриемник.Использование = Истина;
ОписаниеНастройки = СортировкаЭлементаСтруктуры.ДоступныеПоляПорядка.НайтиПоле(ЭлементНастройкиИсточник.Поле);
СтрокаПриемник = Раздел.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ЭлементНастройкиПриемник);
ЗаполнитьЗначенияСвойств(СтрокаПриемник, ОписаниеНастройки);
@@ -3784,7 +3784,6 @@
ФорматыСохранения = ФорматыСохраненияОтчета(ПолноеИмяФайлаОтчета, Контекст.ИндексФорматовСохраненияОтчета);
СвойстваРезультата = НастройкиОтчета.СвойстваРезультата; // см. ВариантыОтчетовСлужебный.СвойстваРезультатаОтчета
РезультатОтчета = РезультатОтчетаДляСохранения(ОтчетТабличныйДокумент, СвойстваРезультата.Заголовки);
РезультатОтчета.НачатьЗапись(Обработчик, ПолноеИмяФайлаОтчета, ФорматыСохранения);
КонецПроцедуры
@@ -37,21 +37,88 @@
</backColor>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ОписаниеОшибки</name>
<id>35</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОшибка</name>
<id>78</id>
<items xsi:type="form:FormField">
<name>ОписаниеОшибки</name>
<id>35</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ОписаниеОшибки</segments>
</dataPath>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>ОписаниеОшибкиРасширеннаяПодсказка</name>
<id>37</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОписаниеОшибкиКонтекстноеМеню</name>
<id>36</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<maxHeight>4</maxHeight>
<wrap>true</wrap>
<multiLine>true</multiLine>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<backColor xsi:type="core:ColorRef">
<color>Style.ЦветФонаВнимание</color>
</backColor>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ОткрытьОписаниеОшибки</name>
<id>80</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОткрытьОписаниеОшибкиРасширеннаяПодсказка</name>
<id>81</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ОткрытьОписаниеОшибки</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ОписаниеОшибки</segments>
</dataPath>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>ОписаниеОшибкиРасширеннаяПодсказка</name>
<id>37</id>
<name>ГруппаОшибкаРасширеннаяПодсказка</name>
<id>79</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -59,26 +126,15 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОписаниеОшибкиКонтекстноеМеню</name>
<id>36</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<maxHeight>4</maxHeight>
<wrap>true</wrap>
<multiLine>true</multiLine>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<backColor xsi:type="core:ColorRef">
<color>Style.ЦветФонаВнимание</color>
</backColor>
<textSize>Normal</textSize>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<representation>WeakSeparation</representation>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
@@ -1265,6 +1321,24 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОткрытьОписаниеОшибки</name>
<title>
<key>ru</key>
<value>Подробнее...</value>
</title>
<id>5</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОткрытьОписаниеОшибки</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>СвойстваПодписи</name>
<valueType/>
@@ -39,8 +39,10 @@
Элементы.ОписаниеОшибки.Видимость = ЗначениеЗаполнено(ОписаниеОшибки);
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "");
Элементы.Инструкция.Видимость = Ложь;
Элементы.ОткрытьОписаниеОшибки.Видимость = Ложь;
Иначе
Элементы.ОписаниеОшибки.Видимость = ЗначениеЗаполнено(ОписаниеОшибки);
Элементы.ОткрытьОписаниеОшибки.Видимость = ЗначениеЗаполнено(ОписаниеОшибки);
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ОписаниеОшибки");
Элементы.Инструкция.Видимость =
ЭлектроннаяПодписьСлужебный.ВидимостьСсылкиНаИнструкциюПоТипичнымПроблемамПриРаботеСПрограммами();
@@ -170,11 +172,36 @@
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОписаниеОшибки(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Ошибка проверки подписи'"));
ПараметрыФормы.Вставить("ТекстОшибкиКлиент", ОписаниеОшибки);
ДополнительныеПараметры = Новый Структура;
Если ЗначениеЗаполнено(АдресСертификата) Тогда
ДополнительныеПараметры.Вставить("ДанныеСертификата",
АдресСертификата);
КонецЕсли;
Если ЗначениеЗаполнено(АдресПодписи) Тогда
ДополнительныеПараметры.Вставить("ДанныеПодписи",
АдресПодписи);
КонецЕсли;
ПараметрыФормы.Вставить("ДополнительныеДанные", ДополнительныеПараметры);
ОткрытьФорму("ОбщаяФорма.РасширенноеПредставлениеОшибки",
ПараметрыФормы, ЭтотОбъект,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьДанныеФормы()
@@ -213,6 +213,19 @@
КонецФункции
// Возвращает разрешение на доступ к веб-сервису адресов через сеть Интернет.
// Если доступ запрещен, то подбор и проверка адресов использует только загруженные данные в приложение.
// Изменение доступа выполняется в разделе Администрирование - Интернет-поддержка и сервисы.
//
// Возвращаемое значение:
// Булево - если Истина, то доступ к веб-сервису разрешен.
//
Функция РазрешенДоступВИнтернет() Экспорт
Возврат Не АдресныйКлассификаторПовтИсп.ИспользоватьТолькоЗагруженныеДанные();
КонецФункции
// Проверяет адреса на соответствие адресному классификатору
// и возвращает подходящие варианты, содержащие сведения об адресе.
// При проверке адреса через веб-сервиса выполнение функции может занимать 20 секунд.
@@ -425,6 +438,41 @@
КонецФункции
// Проверяет корректность ОКМТО бюджетополучателей.
//
// Для проверки ОКТМО бюджетополучателей требуется подключение к Интернет-поддержке пользователей и наличие
// постоянного соединения с интернетом, т.к. адресные сведения, загруженные в приложение, не используются.
// Проверка выполняется порциям по 100 значений за один запросу к веб-сервису, поэтому рекомендуется выполнять
// ее в фоновом режиме.
// При получении ответа от веб-сервиса отличного от успешного (код 200 ОК) выполнение функции прерывается
// и возвращается ошибка. Поэтому если в данных результата отсутствует ОКТМО бюджетополучателя,
// то он не было проверен из-за ошибок работы с веб-сервисом.
//
// Параметры:
// ОКТМОБюджетополучателей - Массив из Строка - список ОКТМО бюджетополучателей.
// - Строка - ОКТМО бюджетополучателя.
//
// Возвращаемое значение:
// Структура:
// * Отказ - Булево - если Истина, то при получении ОКТМО бюджетополучателя через веб-сервис возникла ошибка.
// * ПредставлениеОшибкиДляПользователя - Строка - текст ошибки для отображения пользователю.
// * ИнформацияОбОшибке - ИнформацияОбОшибке - структурированная информация об ошибке.
// * Данные - Соответствие из КлючИЗначение:
// ** Ключ - Строка - ОКТМО бюджетополучателя.
// ** Значение - Структура:
// *** Успешно - Булево - если Истина, то код ОКТМО бюджетополучателей корректный;
// *** ТекстОшибки - Строка - текст ошибки, если ОКТМО некорректный;
// *** МуниципальныеОбразования - Массив из Строка - список муниципальных образований, принадлежащих данному ОКТМО.
//
Функция ПроверитьОКТМОБюджетополучателя(ОКТМОБюджетополучателей) Экспорт
СписокОКТМО = ?(ТипЗнч(ОКТМОБюджетополучателей) = Тип("Строка"),
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОКТМОБюджетополучателей), ОКТМОБюджетополучателей);
Возврат АдресныйКлассификаторСлужебный.ПроверитьОКМТОБюджетополучателя(СписокОКТМО);
КонецФункции
#Область УстаревшиеПроцедурыИФункции
// Возвращает идентификационный код дома и адресного объекта с помощью веб-сервиса фирмы 1С предоставляющего
@@ -118,7 +118,7 @@
// Возвращаемое значение:
// HTTPСоединение - объект для вызовов сервиса.
//
Функция СервисКлассификатора1С(ВремяОжидания = 120) Экспорт
Функция СервисКлассификатора1С(ВремяОжидания = 20) Экспорт
УстановитьПривилегированныйРежим(Истина);
Авторизация = АдресныйКлассификаторСлужебный.ПараметрыАутентификацииНаСайте();
@@ -6470,6 +6470,160 @@
КонецПроцедуры
Функция ПроверитьОКМТОБюджетополучателя(ОКТМОБюджетополучателей) Экспорт
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("АдресныйКлассификаторСлужебный.ПроверитьОКМТОБюджетополучателя",
"ОКТМОБюджетополучателей", ОКТМОБюджетополучателей, Тип("Массив"));
РазмерПорции = 100;
Результат = НовыйРезультатИзВебСервиса();
Порция = Новый Массив;
Для Позиция = 0 По ОКТМОБюджетополучателей.ВГраница() Цикл
ОКТМОБюджетополучателя = СокрЛП(ОКТМОБюджетополучателей.Получить(Позиция));
Если СтрДлина(ОКТМОБюджетополучателя) = 8 Или СтрДлина(ОКТМОБюджетополучателя) = 11 Тогда
Если Результат.Данные[ОКТМОБюджетополучателя] = Неопределено Тогда
Порция.Добавить(ОКТМОБюджетополучателя);
КонецЕсли;
Иначе
ДанныеПоОКТМО = ДанныеПоОКТМО();
ДанныеПоОКТМО.ТекстОшибки = НСтр("ru = 'Указан некорректный код ОКТМО'");
Результат.Данные.Вставить(ОКТМОБюджетополучателя, ДанныеПоОКТМО);
КонецЕсли;
Если (Порция.Количество() = РазмерПорции
Или Позиция = ОКТМОБюджетополучателей.ВГраница())
И Порция.Количество() > 0 Тогда
ОбработатьПорциюОКТМОБюджетополучателей(Результат, Порция);
Если Результат.Отказ Тогда
Возврат Результат;
КонецЕсли;
Порция = Новый Массив;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ДанныеПоОКТМО()
ДанныеПоОКТМО = Новый Структура();
ДанныеПоОКТМО.Вставить("Успешно", Ложь);
ДанныеПоОКТМО.Вставить("ТекстОшибки", "");
ДанныеПоОКТМО.Вставить("МуниципальныеОбразования", Новый Массив);
Возврат ДанныеПоОКТМО;
КонецФункции
// Возвращаемое значение:
// Структура:
// * Данные - Соответствие
// * Отказ - Булево
// * ПредставлениеОшибкиДляПользователя - Строка
// * ИнформацияОбОшибке - ИнформацияОбОшибке
// - Неопределено
//
Функция НовыйРезультатИзВебСервиса()
Результат = Новый Структура;
Результат.Вставить("Данные", Новый Соответствие);
Результат.Вставить("Отказ", Ложь);
Результат.Вставить("ПредставлениеОшибкиДляПользователя", "");
Результат.Вставить("ИнформацияОбОшибке", Неопределено);
Возврат Результат;
КонецФункции
Функция ОбработатьПорциюОКТМОБюджетополучателей(Результат, Порция)
ИдентификаторЗапроса = Строка(Новый УникальныйИдентификатор);
ДанныеДляЗапроса = Новый Структура("oktmoList", Порция);
Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С();
ПрефиксВерсииЗапроса = ПрефиксВерсииЗапросаСервисаОКТМО();
HTTPЗапрос = Новый HTTPЗапрос(ПрефиксВерсииЗапроса + "validateOktmoList");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("X-1C-Request-UID", ИдентификаторЗапроса);
HTTPЗапрос.УстановитьТелоИзСтроки(СтруктураВСтрокуJSON(ДанныеДляЗапроса));
Попытка
РезультатПроверки = Сервис.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
ОбработатьОшибкуОбращенияКВебСервисуПриПолученииОКТМО(Результат);
Возврат Результат;
КонецПопытки;
ПолученныеДанные = РезультатПроверки.ПолучитьТелоКакСтроку("UTF-8");
Если РезультатПроверки.КодСостояния = 200 Тогда
ДанныеПроверки = СтрокуJSONВСоответствие(ПолученныеДанные);
Если ТипЗнч(ДанныеПроверки) = Тип("Соответствие") Тогда
НаборОКТМО = ДанныеПроверки["validateOktmoData"];
Для каждого ДанныеОКТМО Из НаборОКТМО Цикл
ЗначениеОКМТО = ДанныеОКТМО.Значение;
ДанныеПоОКТМО = ДанныеПоОКТМО();
Если ЗначениеОКМТО["validateOktmoStatus"] = "VERIFIED_OKTMO" Тогда
ДанныеПоОКТМО.Успешно = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеОКМТО["validateMessage"]) Тогда
ДанныеПоОКТМО.ТекстОшибки = ЗначениеОКМТО["validateMessage"];
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеОКМТО["oktmoMunValue"]) Тогда
ДанныеПоОКТМО.МуниципальныеОбразования = ЗначениеОКМТО["oktmoMunValue"];
КонецЕсли;
Результат.Данные.Вставить(ДанныеОКТМО.Ключ, ДанныеПоОКТМО)
КонецЦикла;
КонецЕсли;
Иначе
Результат.ПредставлениеОшибкиДляПользователя = НСтр("ru = 'Проверка ОКТМО бюджетополучателя недоступна по причине:
|- не подключена интернет-поддержка пользователей;
|- неполадки у интернет-провайдера;
|- подключение к серверу блокирует межсетевой экран,
| антивирус или другие приложения;
|- веб-сервис отключен или на техническом обслуживании.'");
Результат.Отказ = Истина;
ТекстОшибки = НСтр("ru = 'При проверке ОКМТО бюджетополучателя через веб-сервис возникли проблемы.'");
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, ТекстОшибки, HTTPЗапрос.АдресРесурса
+ " X-1C-Request-UID:" + ИдентификаторЗапроса, РезультатПроверки.КодСостояния);
КонецЕсли;
Возврат Результат;
КонецФункции
Процедура ОбработатьОшибкуОбращенияКВебСервисуПриПолученииОКТМО(Результат)
Результат.Отказ = Истина;
Результат.ИнформацияОбОшибке = ИнформацияОбОшибке();
Результат.ПредставлениеОшибкиДляПользователя = НСтр("ru = 'При проверке ОКМТО бюджетополучателя через веб-сервис возникли проблемы.'");
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(Результат.ИнформацияОбОшибке));
КонецПроцедуры
Процедура ЗаполнитьЗначениеСвойстваЕслиПустое(Приемник, Источник, ИмяСвойстваПриемника, ИмяСвойстваИлиЗначениеИсточника, ЭтоЗначение = Ложь)
ЗначениеСвойства = ?(ЭтоЗначение, ИмяСвойстваИлиЗначениеИсточника, Источник[ИмяСвойстваИлиЗначениеИсточника]);
@@ -6962,7 +7116,7 @@
Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки;
Результат.Отказ = Истина;
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, Результат, HTTPЗапрос.АдресРесурса
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ПолученныеДанные, Результат.ПодробноеПредставлениеОшибки, HTTPЗапрос.АдресРесурса
+ " X-1C-Request-UID:" + ИдентификаторЗапроса, РезультатПроверки.КодСостояния);
Возврат Результат;
@@ -7677,6 +7831,10 @@
Возврат "rest/v4/";
КонецФункции
Функция ПрефиксВерсииЗапросаСервисаОКТМО()
Возврат "rest/oktmo/v1/";
КонецФункции
// Возвращает информацию из классификатора субъектов РФ.
//
// Возвращаемое значение:
@@ -8259,7 +8417,7 @@
Результат.ПодробноеПредставлениеОшибки = ПредставлениеОшибки;
ОтветОтСервера = Ответ.ПолучитьТелоКакСтроку("UTF-8");
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервера, Результат, ТекстURL, Ответ.КодСостояния);
ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервера, ПредставлениеОшибки, ТекстURL, Ответ.КодСостояния);
КонецПроцедуры
@@ -8274,7 +8432,7 @@
КонецПроцедуры
Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, Результат, ТекстURL, КодСостояния)
Процедура ЗаписатьОшибкуЗапросаКВебСервисуВЖурналРегистрации(ОтветОтСервераСтрокой, ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния)
ШаблонТекстОтветаСервера = НСтр("ru = '%1
|Техническая информация. При запросе: %2
@@ -8282,7 +8440,7 @@
|с текстом: %4'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстОтветаСервера,
Результат.ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния, ОтветОтСервераСтрокой);
ПодробноеПредставлениеОшибки, ТекстURL, КодСостояния, ОтветОтСервераСтрокой);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
@@ -8340,6 +8498,19 @@
КонецФункции
Функция СтрокуJSONВСоответствие(Значение)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Значение);
Результат = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
Функция ВосстановлениеПолейКонтактнойИнформации(Свойство, Значение, ДополнительныеПараметрыФункцииПреобразования) Экспорт
Если СтрЗаканчиваетсяНа(ВРег(Свойство), "ID") И СтрДлина(Значение) = 36 Тогда
@@ -5671,8 +5671,11 @@
ИначеЕсли Режим = "РазделенныеДанныеКонфигурации" Тогда
Параметры = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра);
Иначе
РезультатОбщий = ПредставленияЗаполнены("ОбщиеДанныеКонфигурации");
РезультатРазделенный = ПредставленияЗаполнены("РазделенныеДанныеКонфигурации");
Если ОбщегоНазначения.РазделениеВключено() Тогда
Возврат РезультатРазделенный;
КонецЕсли;
РезультатОбщий = ПредставленияЗаполнены("ОбщиеДанныеКонфигурации");
Если РезультатОбщий = "НеЗаполнены" Или РезультатРазделенный = "НеЗаполнены" Тогда
Возврат "НеЗаполнены";
ИначеЕсли РезультатОбщий = "Заполняются" Или РезультатРазделенный = "Заполняются" Тогда
@@ -5296,13 +5296,16 @@
Запрос.УстановитьПараметр("СообщениеSMS", СообщениеSMS.Ссылка);
ЕстьИзменения = Ложь;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Адресаты = Запрос.Выполнить().Выгрузить();
ИдентификаторыСообщений = Адресаты.ВыгрузитьКолонку("ИдентификаторСообщения");
СтатусыДоставки = ОтправкаSMS.СтатусыДоставки(ИдентификаторыСообщений);
Для Каждого Адресат Из Адресаты Цикл
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(ОтправкаSMS.СтатусДоставки(Выборка.ИдентификаторСообщения));
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(СтатусыДоставки[Адресат.ИдентификаторСообщения]);
Если СостояниеСообщения <> Выборка.СостояниеСообщения Тогда
СообщениеSMS.Адресаты[Выборка.НомерСтроки - 1].СостояниеСообщения = СостояниеСообщения;
Если СостояниеСообщения <> Адресат.СостояниеСообщения Тогда
СообщениеSMS.Адресаты[Адресат.НомерСтроки - 1].СостояниеСообщения = СостояниеСообщения;
ЕстьИзменения = Истина;
КонецЕсли;
@@ -5519,20 +5522,27 @@
НомераДляОтправки = ТаблицаАдресатовСообщения.ВыгрузитьКолонку("НомерДляОтправки");
Попытка
РезультатОтправки = ОтправкаSMS.ОтправитьSMS(НомераДляОтправки, ТекстСообщения, "", ОтправлятьВТранслите);
Если РезультатОтправки.ОтправленныеСообщения.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения,
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось отправить %1 по причине:
|%2'"),
ВыборкаДокументы.Ссылка, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
УровеньЖурналаРегистрации.Ошибка, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
ТекстСообщения);
Продолжить;
КонецПопытки;
Если ЗначениеЗаполнено(РезультатОтправки.ОписаниеОшибки) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось отправить %1 по причине:
|%2'"),
РезультатОтправки.ОписаниеОшибки);
ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
ТекстСообщения);
КонецЕсли;
ПредставлениеДокумента = Строка(ВыборкаДокументы.Ссылка);
НачатьТранзакцию();
Попытка
@@ -5608,29 +5618,48 @@
Возврат;
КонецЕсли;
ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ОбрабатываемыеДокументы = Новый Соответствие;
ИдентификаторыСообщений = Новый Массив;
ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокументы.Следующий() Цикл
ОбрабатываемыеДокументы[ВыборкаДокументы.Ссылка] = Новый Массив;
ВыборкаИдентификаторы = ВыборкаДокументы.Выбрать();
Пока ВыборкаИдентификаторы.Следующий() Цикл
Адресаты = Новый Структура;
Адресаты.Вставить("НомерСтроки");
Адресаты.Вставить("ИдентификаторСообщения");
Адресаты.Вставить("СостояниеСообщения");
ЗаполнитьЗначенияСвойств(Адресаты, ВыборкаИдентификаторы);
ОбрабатываемыеДокументы[ВыборкаДокументы.Ссылка].Добавить(Адресаты);
ИдентификаторыСообщений.Добавить(Адресаты.ИдентификаторСообщения);
КонецЦикла;
КонецЦикла;
СтатусыДоставки = ОтправкаSMS.СтатусыДоставки(ИдентификаторыСообщений);
Для Каждого ОбрабатываемыйДокумент Из ОбрабатываемыеДокументы Цикл
Ссылка = ОбрабатываемыйДокумент.Ключ;
Адресаты = ОбрабатываемыйДокумент.Значение;
ТаблицаИзменившихсяСтатусов.Очистить();
ПредставлениеДокумента = ОбщегоНазначения.ПредметСтрокой(ВыборкаДокументы.Ссылка);
ПредставлениеДокумента = ОбщегоНазначения.ПредметСтрокой(Ссылка);
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(МетаданныеДокумента.ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаДокументы.Ссылка);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка);
Блокировка.Заблокировать();
ВыборкаИдентификаторы = ВыборкаДокументы.Выбрать();
Пока ВыборкаИдентификаторы.Следующий() Цикл
Для Каждого Адресат Из Адресаты Цикл
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(ОтправкаSMS.СтатусДоставки(ВыборкаИдентификаторы.ИдентификаторСообщения));
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(СтатусыДоставки[Адресат.ИдентификаторСообщения]);
Если СостояниеСообщения <> ВыборкаИдентификаторы.СостояниеСообщения Тогда
Если СостояниеСообщения <> Адресат.СостояниеСообщения Тогда
НоваяСтрока = ТаблицаИзменившихсяСтатусов.Добавить();
НоваяСтрока.НомерСтроки = ВыборкаИдентификаторы.НомерСтроки;
НоваяСтрока.НомерСтроки = Адресат.НомерСтроки;
НоваяСтрока.СостояниеСообщения = СостояниеСообщения;
КонецЕсли;
@@ -5641,7 +5670,7 @@
Продолжить;
КонецЕсли;
ДокументОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
ДокументОбъект = Ссылка.ПолучитьОбъект();
Для Каждого ИзменившийсяСтатус Из ТаблицаИзменившихсяСтатусов Цикл
ДокументОбъект.Адресаты[ИзменившийсяСтатус.НомерСтроки - 1].СостояниеСообщения = ИзменившийсяСтатус.СостояниеСообщения;
@@ -5660,7 +5689,7 @@
НСтр("ru = 'Не удалось обновить статусы доставки %1 по причине: %2'"),
ПредставлениеДокумента, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
УровеньЖурналаРегистрации.Предупреждение, МетаданныеДокумента, Ссылка,
ТекстСообщения);
КонецПопытки;
@@ -5677,12 +5706,18 @@
//
Процедура ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки)
ОтправленныеСообщения = Новый Соответствие;
Для Каждого ОтправленноеСообщение Из РезультатОтправки.ОтправленныеСообщения Цикл
Для Каждого НайденнаяСтрока Из ДокументОбъект.Адресаты.НайтиСтроки(
Новый Структура("НомерДляОтправки", ОтправленноеСообщение.НомерПолучателя)) Цикл
НайденнаяСтрока.ИдентификаторСообщения = ОтправленноеСообщение.ИдентификаторСообщения;
НайденнаяСтрока.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером;
КонецЦикла;
ОтправленныеСообщения[ОтправленноеСообщение.НомерПолучателя] = ОтправленноеСообщение.ИдентификаторСообщения;
КонецЦикла;
Для Каждого Адресат Из ДокументОбъект.Адресаты Цикл
Адресат.ИдентификаторСообщения = ОтправленныеСообщения[Адресат.НомерДляОтправки];
Если ЗначениеЗаполнено(Адресат.ИдентификаторСообщения) Тогда
Адресат.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером;
Иначе
Адресат.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.НеДоставлено;
КонецЕсли;
КонецЦикла;
ДокументОбъект.Состояние = СостояниеДокументаСообщениеSMS(ДокументОбъект);
@@ -34,7 +34,7 @@
Процедура ОбновитьКомпонентыСПортала(Оповещение, ОбновляемыеКомпоненты) Экспорт
// Локализация
// Локализация
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ОбновляемыеКомпоненты", ОбновляемыеКомпоненты);
ОткрытьФорму("Справочник.ВнешниеКомпоненты.Форма.ОбновлениеКомпонентСПортала1СИТС",
@@ -268,6 +268,7 @@
Иначе
Объект = Справочники.ВнешниеКомпоненты.СоздатьЭлемент();
Объект.ОбновлятьСПортала1СИТС = ОбновлятьАвтоматически;
Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Объект, Информация.Реквизиты); // По данным манифеста.
@@ -472,8 +472,8 @@
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.9.327";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("17c42fa8-2ae2-4a12-8193-8f00861b334b");
Обработчик.Версия = "3.1.9.343";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("7d089b8d-5240-4f0a-a6fb-567caa6b2be1");
Обработчик.Процедура = "Справочники.ВнешниеКомпоненты.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Комментарий = НСтр("ru = 'Заполнение реквизитов совместимости компонент и добавление стандартных компонент в справочник Внешние компоненты.'");
@@ -89,19 +89,9 @@
Результат.Вставить("Версия", Информация.Реквизиты.Версия);
Если ИскатьКомпонентуПоследнейВерсии Тогда
ЧастиВерсии = СтрРазделить(Результат.Версия, ".");
Если ЧастиВерсии.Количество() = 4 Тогда
// Версия внешней компоненты больше, чем версия макета.
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Результат.Версия,
Результат.КомпонентаПоследнейВерсии.Версия) > 0 Тогда
Результат.КомпонентаПоследнейВерсии = Новый Структура("Идентификатор, Версия, Местоположение",
Контекст.Идентификатор, Результат.Версия, Информация.Местоположение);
КонецЕсли;
Иначе
// Если номер версии компоненты не соответствует шаблону, используется компонента из справочника.
Результат.КомпонентаПоследнейВерсии = Новый Структура("Идентификатор, Версия, Местоположение",
Контекст.Идентификатор, Результат.Версия, Информация.Местоположение);
КонецЕсли;
ЗаменитьНаАктуальнуюКомпонентуИзСправочника(Результат, Контекст.Идентификатор, Информация.Местоположение);
КонецЕсли;
@@ -181,19 +171,9 @@
Результат.Вставить("Версия", Информация.Реквизиты.Версия);
Если ИскатьКомпонентуПоследнейВерсии Тогда
ЧастиВерсии = СтрРазделить(Результат.Версия, ".");
Если ЧастиВерсии.Количество() = 4 Тогда
// Версия внешней компоненты больше, чем версия макета.
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Результат.Версия,
Результат.КомпонентаПоследнейВерсии.Версия) > 0 Тогда
Результат.КомпонентаПоследнейВерсии = Новый Структура("Идентификатор, Версия, Местоположение",
Контекст.Идентификатор, Результат.Версия, Информация.Местоположение);
КонецЕсли;
Иначе
// Если номер версии компоненты не соответствует шаблону, используется компонента из справочника.
Результат.КомпонентаПоследнейВерсии = Новый Структура("Идентификатор, Версия, Местоположение",
Контекст.Идентификатор, Результат.Версия, Информация.Местоположение);
КонецЕсли;
ЗаменитьНаАктуальнуюКомпонентуИзСправочника(Результат, Контекст.Идентификатор, Информация.Местоположение)
КонецЕсли;
Если Не Информация.ЗаполненыЦелевыеПлатформы Или ТекущийКлиентПоддерживаетсяКомпонентой(Информация.Реквизиты.ЦелевыеПлатформы) Тогда
@@ -303,6 +283,22 @@
КонецФункции
Процедура ЗаменитьНаАктуальнуюКомпонентуИзСправочника(Результат, Идентификатор, Местоположение)
Если СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(СтрЗаменить(Результат.Версия, ".", "")) Тогда
ЧастиВерсии = СтрРазделить(Результат.Версия, ".");
Если ЧастиВерсии.Количество() = 4 И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Результат.Версия,
Результат.КомпонентаПоследнейВерсии.Версия) <= 0 Тогда
Возврат;
КонецЕсли;
КонецЕсли;
// Используется компонента из справочника, если ее версия больше, чем версия макета, или не соответствует шаблону.
Результат.КомпонентаПоследнейВерсии = Новый Структура("Идентификатор, Версия, Местоположение", Идентификатор,
Результат.Версия, Местоположение);
КонецПроцедуры
// Текущий клиент поддерживается компонентой.
//
// Параметры:
@@ -409,7 +409,7 @@
// внешнего отчета или обработки соответственно.
// Внешний отчет или обработка подключаются с защитой от опасных действий.
// * ПрерватьВыполнениеЕслиОшибка - Булево - если Истина, то при возникновении ошибки в одном из дочерних фоновых
// заданий, выполнение многопоточного фонового задания будет перервано.
// заданий, выполнение многопоточного фонового задания будет прервано.
// Выполнение уже запущенных дочерних фоновых задания будет отменно.
// Параметр только для функции ВыполнитьФункциюВНесколькоПотоков.
//
@@ -460,7 +460,7 @@
// внешнего отчета или обработки соответственно.
// Внешний отчет или обработка подключаются с защитой от опасных действий.
// * ПрерватьВыполнениеЕслиОшибка - Булево - если Истина, то при возникновении ошибки в одном из дочерних фоновых
// заданий, выполнение многопоточного фонового задания будет перервано.
// заданий, выполнение многопоточного фонового задания будет прервано.
// Выполнение уже запущенных дочерних фоновых задания будет отменно.
// Параметр только для функции ВыполнитьПроцедуруВНесколькоПотоков.
//
@@ -65,6 +65,7 @@
ИспользуютсяПрофилиБезопасности = Ложь;
КонецЕсли;
ЕстьРазрешения = Ложь;
Если ИспользуютсяПрофилиБезопасности Тогда
МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный");
@@ -79,6 +80,8 @@
БезопасныйРежим = ПолучитьФункциональнуюОпцию("СтандартныеПодсистемыВМоделиСервиса") Или ПараметрыЗапуска.БезопасныйРежим;
Если БезопасныйРежим Тогда
РежимСовместимости = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "РежимСовместимостиРазрешений");
ЗапросРазрешений = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ДополнительныеОтчетыИОбработкиРазрешения.НомерСтроки,
@@ -88,21 +91,31 @@
|ГДЕ
| ДополнительныеОтчетыИОбработкиРазрешения.Ссылка = &Ссылка");
ЗапросРазрешений.УстановитьПараметр("Ссылка", Ссылка);
ЕстьРазрешений = Не ЗапросРазрешений.Выполнить().Пустой();
ЕстьРазрешения = Не ЗапросРазрешений.Выполнить().Пустой()
И РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2;
РежимСовместимости = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "РежимСовместимостиРазрешений");
Если РежимСовместимости = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_2_2
И ЕстьРазрешений Тогда
Если ЕстьРазрешения Тогда
БезопасныйРежим = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗаписатьПримечание(Ссылка,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, %1 = ""%2"".'"), "БезопасныйРежим", БезопасныйРежим));
ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,
ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , Истина,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
ВнешнийОбъект = Менеджер.Создать(ИмяОбработки);
СведенияОВнешнейОбработке = ВнешнийОбъект.СведенияОВнешнейОбработке();
Если (Не СведенияОВнешнейОбработке.БезопасныйРежим Или ЕстьРазрешения)
И Не БезопасныйРежим Тогда
// Повторное подключение в небезопасном режиме, если разрешено.
ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
КонецЕсли;
ЗаписатьПримечание(Ссылка,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, %1 = ""%2"".'"), "БезопасныйРежим",
СведенияОВнешнейОбработке.БезопасныйРежим Или БезопасныйРежим));
Возврат ИмяОбработки;
КонецФункции
@@ -875,12 +888,10 @@
// Обработчики событий подсистем конфигурации.
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПереименованийОбъектовМетаданных.
Процедура ПриДобавленииПереименованийОбъектовМетаданных(Итог) Экспорт
Процедура ПриДобавленииПереименованийОбъектовМетаданных(Переименования) Экспорт
Библиотека = "СтандартныеПодсистемы";
ОбщегоНазначения.ДобавитьПереименование(
Итог, "2.3.3.3", "Роль.ИспользованиеДополнительныхОтчетовИОбработок", "Роль.ЧтениеДополнительныхОтчетовИОбработок", Библиотека);
ОбщегоНазначения.ДобавитьПереименование(Переименования, "2.3.3.3",
"Роль.ИспользованиеДополнительныхОтчетовИОбработок", "Роль.ЧтениеДополнительныхОтчетовИОбработок", "СтандартныеПодсистемы");
КонецПроцедуры
@@ -185,6 +185,7 @@
НастройкиОжидания.ВыводитьОкноОжидания = Истина;
НастройкиОжидания.ПолучатьРезультат = ПолучатьРезультат; // для обратной совместимости
НастройкиОжидания.ВыводитьСообщения = Истина;
НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина;
ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания);
@@ -432,6 +432,7 @@
ОписаниеИспользованияСобытияДоступа.ПоляРегистрации = ПоляРегистрации;
ОписанияИспользования.Добавить(ОписаниеИспользованияСобытияДоступа);
КонецЦикла;
СвернутьНастройкиДляОдинаковыхТаблиц(ОписанияИспользования);
// "Включение" ("Выключение") использования события "Доступ. Доступ"
// журнала регистрации по созданному описанию.
@@ -1217,6 +1218,16 @@
КонецПроцедуры
Процедура УстановитьПрефиксИнформационнойБазыИОрганизации(Источник, СтандартнаяОбработка, Префикс) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда
МодульПрефиксацияОбъектовСобытия = ОбщегоНазначения.ОбщийМодуль("ПрефиксацияОбъектовСобытия");
МодульПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(Источник, СтандартнаяОбработка,
Префикс);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СрокиХранения
@@ -2576,6 +2587,56 @@
КонецПроцедуры
// Параметры:
// Настройки - Массив из ОписаниеИспользованияСобытияДоступЖурналаРегистрации
//
Процедура СвернутьНастройкиДляОдинаковыхТаблиц(Настройки)
ДобавленныеНастройки = Новый Соответствие;
Результат = Новый Массив;
Для Каждого Настройка Из Настройки Цикл
Описание = ДобавленныеНастройки.Получить(ВРег(Настройка.Объект));
Если Описание = Неопределено Тогда
Описание = Новый Структура("Настройка, ДляПоиска", Настройка);
ДобавленныеНастройки.Вставить(ВРег(Настройка.Объект), Описание);
Результат.Добавить(Настройка);
Продолжить;
КонецЕсли;
Если Описание.ДляПоиска = Неопределено Тогда
ОписаниеДляПоиска = Новый Структура;
ОписаниеДляПоиска.Вставить("ПоляДоступа", Новый Соответствие);
ОписаниеДляПоиска.Вставить("ПоляРегистрации", Новый Соответствие);
Для Каждого ПолеДоступа Из Описание.Настройка.ПоляДоступа Цикл
ОписаниеДляПоиска.ПоляДоступа.Вставить(ВРег(ПолеДоступа), Истина);
КонецЦикла;
Для Каждого ПолеРегистрации Из Описание.Настройка.ПоляРегистрации Цикл
ОписаниеДляПоиска.ПоляРегистрации.Вставить(ВРег(ПолеРегистрации), Истина);
КонецЦикла;
Описание.ДляПоиска = ОписаниеДляПоиска;
Иначе
ОписаниеДляПоиска = Описание.ДляПоиска;
КонецЕсли;
Для Каждого ПолеДоступа Из Настройка.ПоляДоступа Цикл
Если ОписаниеДляПоиска.ПоляДоступа.Получить(ВРег(ПолеДоступа)) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОписаниеДляПоиска.ПоляДоступа.Вставить(ВРег(ПолеДоступа), Истина);
Описание.Настройка.ПоляДоступа.Добавить(ПолеДоступа);
КонецЦикла;
Для Каждого ПолеРегистрации Из Настройка.ПоляРегистрации Цикл
Если ОписаниеДляПоиска.ПоляРегистрации.Получить(ВРег(ПолеРегистрации)) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОписаниеДляПоиска.ПоляРегистрации.Вставить(ВРег(ПолеРегистрации), Истина);
Описание.Настройка.ПоляРегистрации.Добавить(ПолеРегистрации);
КонецЦикла;
КонецЦикла;
Настройки = Результат;
КонецПроцедуры
#Область ИзменениеНастроекСкрытияПерсональныхДанных
Функция ЗапросДанныеДействующихСогласий(Субъекты, Дата = Неопределено, ИсключаемыйРегистратор = Неопределено)
@@ -820,6 +820,11 @@
МодульЭлектроннаяПодписьСлужебный.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSSСлужебный.ПриОпределенииОбработчиковПоставляемыхДанных(Обработчики);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -2202,6 +2207,11 @@
МодульКонтрольРассылкиОтчетов.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульСертификатыЭлектроннойПодписи = ОбщегоНазначения.ОбщийМодуль("Отчеты.СертификатыЭлектроннойПодписи");
МодульСертификатыЭлектроннойПодписи.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
КонецПроцедуры
// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.
@@ -3154,6 +3164,11 @@
МодульКонтрольВеденияУчетаСлужебный.ПриДобавленииОбработчиковОбновления(Обработчики);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный");
МодульМашиночитаемыеДоверенностиФНССлужебный.ПриДобавленииОбработчиковОбновления(Обработчики);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда
МодульМультиязычностьСервер = ОбщегоНазначения.ОбщийМодуль("МультиязычностьСервер");
МодульМультиязычностьСервер.ПриДобавленииОбработчиковОбновления(Обработчики);
@@ -3790,6 +3805,11 @@
МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
МодульЗащитаПерсональныхДанных.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.МашиночитаемыеДоверенности") Тогда
МодульМашиночитаемыеДоверенностиФНССлужебный = ОбщегоНазначения.ОбщийМодуль("МашиночитаемыеДоверенностиФНССлужебный");
МодульМашиночитаемыеДоверенностиФНССлужебный.ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный");
@@ -1482,7 +1482,7 @@
КонецФункции
// Определяет для переданной даты ближайший к ней рабочий день по данным основного производственного календаря РФ,
// заполненного по умолчанию.
// заполненного по умолчанию. Если НачальнаяДата является рабочей датой, то она же и возвращается.
// Используется в случаях, когда производственный календарь еще не заполнен.
//
// Параметры:
@@ -1506,13 +1506,18 @@
Если ДанныеКалендаряПоУмолчанию.Найти(Год, "Год") = Неопределено Тогда
ДополнитьДанныеКалендаряПоУмолчанию(ДанныеКалендаряПоУмолчанию, Год, ПолучатьПредшествующую);
КонецЕсли;
СтрокаТаблицы = ДанныеКалендаряПоУмолчанию.Найти(НачальнаяДата, "Дата");
Если СтрокаТаблицы = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если СтрокаТаблицы.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий
Или СтрокаТаблицы.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный Тогда
Возврат СтрокаТаблицы.Дата;
КонецЕсли;
Индекс = ДанныеКалендаряПоУмолчанию.Индекс(СтрокаТаблицы);
ДобавляемоеЗначение = ?(ПолучатьПредшествующую, -1, 1);
Пока Истина Цикл
Индекс = Индекс + 1;
Если Индекс >= ДанныеКалендаряПоУмолчанию.Количество() Тогда
@@ -2404,33 +2404,23 @@
ИмяПоляПоиска = "ПредставлениеПутиКДанным";
КонецЕсли;
Владелец = Неопределено;
Папки = Новый Массив;
Владельцы = Новый Массив;
Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
Если НРег(Реквизит[ИмяПоляПоиска]) = НРег(ПутьКДанным) Тогда
Возврат Реквизит;
КонецЕсли;
Если Реквизит.Папка Тогда
Папки.Добавить(Реквизит);
Иначе
Если СтрНачинаетсяС(НРег(ПутьКДанным), НРег(Реквизит[ИмяПоляПоиска]) + ".") Тогда
Владелец = Реквизит;
КонецЕсли;
Если Реквизит.Папка Или СтрНачинаетсяС(НРег(ПутьКДанным), НРег(Реквизит[ИмяПоляПоиска]) + ".") Тогда
Владельцы.Добавить(Реквизит);
КонецЕсли;
КонецЦикла;
Если Владелец <> Неопределено Тогда
Для Каждого Владелец Из Владельцы Цикл
РазвернутьРеквизит(Владелец.ПолучитьИдентификатор(), ИмяСписка, Форма);
Возврат НайтиРеквизит(Форма, ИмяСписка, ПутьКДанным, Владелец.ПолучитьЭлементы(), ИскатьПоПредставлению);
КонецЕсли;
Для Каждого Папка Из Папки Цикл
РазвернутьРеквизит(Папка.ПолучитьИдентификатор(), ИмяСписка, Форма);
Реквизит = НайтиРеквизит(Форма, ИмяСписка, ПутьКДанным, Папка.ПолучитьЭлементы(), ИскатьПоПредставлению);
НайденныйРеквизит = НайтиРеквизит(Форма, ИмяСписка, ПутьКДанным, Владелец.ПолучитьЭлементы(), ИскатьПоПредставлению);
Если Реквизит <> Неопределено Тогда
Возврат Реквизит;
Если НайденныйРеквизит <> Неопределено Тогда
Возврат НайденныйРеквизит;
КонецЕсли;
КонецЦикла;
@@ -655,7 +655,10 @@
КонецЕсли;
КонецЕсли;
ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор");
ТекущееДействие = ТаблицаФормы.ПолучитьДействие("Выбор");
Если Не ЗначениеЗаполнено(ТекущееДействие) Тогда
ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор");
КонецЕсли;
КонецЦикла;
@@ -74,19 +74,30 @@
КонецЕсли;
СвойстваСубъекта = ЭлектроннаяПодпись.СвойстваСубъектаСертификата(Сертификат);
Отбор = Новый Структура;
Если ЗначениеЗаполнено(СвойстваСубъекта.ОГРНИП) Тогда
Отбор.Вставить(Префикс + "ОГРН", СвойстваСубъекта.ОГРНИП);
Отбор.Вставить(Префикс + "ИННФЛ", СвойстваСубъекта.ИНН);
ИначеЕсли ЗначениеЗаполнено(СвойстваСубъекта.Организация) Тогда
ИначеЕсли ЗначениеЗаполнено(СвойстваСубъекта.ИННЮЛ) Тогда
Отбор.Вставить(Префикс + "ОГРН", ?(ЗначениеЗаполнено(СвойстваСубъекта.ОГРН), СвойстваСубъекта.ОГРН, ""));
Отбор.Вставить(Префикс + "ИННФЛ", СвойстваСубъекта.ИНН);
Отбор.Вставить(Префикс + "ИНН", СвойстваСубъекта.ИННЮЛ);
Отбор.Вставить(Префикс + "СНИЛС", СвойстваСубъекта.СНИЛС);
Иначе
ИначеЕсли ЗначениеЗаполнено(СвойстваСубъекта.Организация) Тогда // Казначейство
Отбор.Вставить(Префикс + "НаименованиеОрганизации", СвойстваСубъекта.Организация);
Отбор.Вставить(Префикс + "ИННФЛ", СвойстваСубъекта.ИНН);
Отбор.Вставить(Префикс + "СНИЛС", СвойстваСубъекта.СНИЛС);
Иначе
СвойстваИздателя = ЭлектроннаяПодпись.СвойстваИздателяСертификата(Сертификат);
Если МашиночитаемыеДоверенностиФНССлужебный.СертификатНотариуса(СвойстваИздателя, СвойстваСубъекта) Тогда
Отбор.Вставить(Префикс + "ФИО", СвойстваСубъекта.Фамилия + " " + СвойстваСубъекта.Имя + ?(ЗначениеЗаполнено(
СвойстваСубъекта.Отчество), " " + СвойстваСубъекта.Отчество, ""));
Иначе
Отбор.Вставить(Префикс + "ИННФЛ", СвойстваСубъекта.ИНН);
Отбор.Вставить(Префикс + "СНИЛС", СвойстваСубъекта.СНИЛС);
КонецЕсли;
КонецЕсли;
Возврат Отбор;
@@ -156,6 +167,7 @@
| МашиночитаемыеДоверенностиПредставители.КПП КАК ПредставительКПП,
| МашиночитаемыеДоверенностиПредставители.Организация КАК ПредставительОрганизация,
| МашиночитаемыеДоверенностиПредставители.ФизическоеЛицо КАК ПредставительФизическоеЛицо,
| МашиночитаемыеДоверенностиПредставители.НаименованиеОрганизации КАК ПредставительНаименованиеОрганизации,
| МашиночитаемыеДоверенностиДоверители.ИНН КАК ДоверительИНН,
| МашиночитаемыеДоверенностиДоверители.ИННФЛ КАК ДоверительИННФЛ,
| МашиночитаемыеДоверенностиДоверители.ОГРН КАК ДоверительОГРН,
@@ -163,6 +175,7 @@
| МашиночитаемыеДоверенностиДоверители.КПП КАК ДоверительКПП,
| МашиночитаемыеДоверенностиДоверители.Организация КАК ДоверительОрганизация,
| МашиночитаемыеДоверенностиДоверители.ФизическоеЛицо КАК ДоверительФизическоеЛицо,
| МашиночитаемыеДоверенностиДоверители.НаименованиеОрганизации КАК ДоверительНаименованиеОрганизации,
| МашиночитаемыеДоверенности.НомерДоверенности КАК НомерДоверенности,
| МашиночитаемыеДоверенности.Верна КАК Верна,
| МашиночитаемыеДоверенности.Статус КАК Статус,
@@ -99,9 +99,9 @@
// * ДокументВид - Строка
// * ДокументНомер - Строка
// * ДокументКемВыдан - Строка
// * ДокументДатаВыдачи - Строка
// * ДокументКодПодразделения - Строка
// * ДокументСрокДействия - Строка
// * ДокументДатаВыдачи - Дата
// * ДокументКодПодразделения - Строка - код подразделения в виде 999-999
// * ДокументСрокДействия - Дата
// * Гражданство - СправочникСсылка.СтраныМира
// * БезГражданства - Булево
// * МестоРождения - Строка
@@ -8,59 +8,21 @@
#Область СлужебныйПрограммныйИнтерфейс
Функция АвторизоватьсяНаСервереМЧДРР() Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.АвторизоватьсяНаСервереМЧДРР();
КонецФункции
Функция ПолучитьНомерМЧДРР(ТокенДоступа = "") Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ПолучитьНомерМЧДРР(ТокенДоступа);
КонецФункции
Функция ЗарегистрироватьМЧДРР(ИмяФайлаВыгрузки, ДанныеИлиАдресВыгрузки, ДанныеИлиАдресПодписи, ТокенДоступа = "",
НомерДоверенности = "") Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ЗарегистрироватьМЧДРР(
ИмяФайлаВыгрузки, ДанныеИлиАдресВыгрузки, ДанныеИлиАдресПодписи, ТокенДоступа, НомерДоверенности);
КонецФункции
Функция ЗагрузитьДоверенностьИзРеестра(НомерДоверенности, ИННДоверителя, ТокенДоступа = "") Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ЗагрузитьДоверенностьИзРеестра(НомерДоверенности, ИННДоверителя, ТокенДоступа);
КонецФункции
Функция ОтменитьМЧДРР(ИмяФайлаВыгрузки, ДанныеИлиАдресВыгрузки, ДанныеИлиАдресПодписи, Доверенность, ТокенДоступа = "") Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ОтменитьМЧДРР(ИмяФайлаВыгрузки, ДанныеИлиАдресВыгрузки, ДанныеИлиАдресПодписи, Доверенность, ТокенДоступа);
КонецФункции
Функция ПолучитьФайлОтменыДоверенности(Доверенность, ПричинаОтмены) Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ПолучитьФайлОтменыДоверенности(Доверенность, ПричинаОтмены);
КонецФункции
Функция ИспользуетсяРежимТестирования() Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.ИспользуетсяРежимТестирования();
КонецФункции
Процедура УстановитьПараметрСеансаПараметрыАвторизацииВРаспределенномРеестре(
ИмяПараметра = Неопределено,
УстановленныеПараметры = Неопределено) Экспорт
МашиночитаемыеДоверенностиФНССлужебный.УстановитьПараметрСеансаПараметрыАвторизацииВРаспределенномРеестре(ИмяПараметра, УстановленныеПараметры)
КонецПроцедуры
Функция ДоверенностиДляНалоговыхОрганов(Доверенности) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ИСТИНА
|ИЗ
| Справочник.МашиночитаемыеДоверенности КАК МашиночитаемыеДоверенности
|ГДЕ
| МашиночитаемыеДоверенности.Ссылка В(&Доверенности)
| И МашиночитаемыеДоверенности.ДляНалоговыхОрганов";
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ИСТИНА
|ИЗ
| Справочник.МашиночитаемыеДоверенности КАК МашиночитаемыеДоверенности
|ГДЕ
| МашиночитаемыеДоверенности.Ссылка В(&Доверенности)
| И МашиночитаемыеДоверенности.ДляНалоговыхОрганов");
Запрос.УстановитьПараметр("Доверенности", Доверенности);
Результат = Запрос.Выполнить();
Возврат Не Результат.Пустой();
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
@@ -68,16 +30,20 @@
#Область СлужебныеПроцедурыИФункции
Функция РезультатПроверкиДоверенности(Знач Доверенность, Знач ПроверятьВРеестреФНС = Неопределено, Знач ИдентификаторФормы = Неопределено) Экспорт
Функция РезультатПроверкиДоверенности(Знач Доверенность, Знач ПроверятьВРеестреФНС = Неопределено,
Знач ИдентификаторФормы = Неопределено) Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиДанныхДоверенности(МашиночитаемыеДоверенностиФНССлужебный.ДанныеМЧД(Доверенность),
Возврат МашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиДанныхДоверенности(
МашиночитаемыеДоверенностиФНССлужебный.ДанныеМЧД(Доверенность),
ПроверятьВРеестреФНС, ИдентификаторФормы);
КонецФункции
Функция РезультатПроверкиПодписиПоМЧД(Знач Доверенность, Знач ПодписанныйОбъект, Знач Сертификат, Знач НаДату, Знач ГотовыеПроверки) Экспорт
Функция РезультатПроверкиПодписиПоМЧД(Знач Доверенность, Знач ПодписанныйОбъект, Знач Сертификат, Знач НаДату,
Знач ГотовыеПроверки) Экспорт
Возврат МашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(Доверенность, ПодписанныйОбъект, Сертификат, НаДату, ГотовыеПроверки);
Возврат МашиночитаемыеДоверенностиФНССлужебный.РезультатПроверкиПодписиПоМЧД(Доверенность, ПодписанныйОбъект,
Сертификат, НаДату, ГотовыеПроверки);
КонецФункции
@@ -96,12 +62,6 @@
КонецФункции
Функция ФайлыДоверенности(Знач Доверенность, Знач ДляНалоговыхОрганов) Экспорт
Возврат МашиночитаемыеДоверенностиФНС.ФайлыДоверенности(Доверенность, ДляНалоговыхОрганов);
КонецФункции
// Возвращает машиночитаемые доверенности в виде набора файлов.
// Если файлы отдельно взятой доверенности еще не сформированы, то по ней возвращается пустой набор файлов.
//
@@ -111,7 +71,7 @@
// Возвращаемое значение:
// Соответствие из КлючИЗначение:
// * Ключ - СправочникСсылка.МашиночитаемыеДоверенности
// * Значение - см. ФайлыДоверенности
// * Значение - см. МашиночитаемыеДоверенностиФНС.ФайлыДоверенности
//
Функция ФайлыДоверенностей(Знач Доверенности, Знач ДляНалоговыхОрганов) Экспорт
@@ -83,14 +83,14 @@
КонецПроцедуры
Процедура ПриОбработкеНавигационнойСсылкиОшибкиПроверкиПодписи(Форма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт
Процедура ПриОбработкеНавигационнойСсылкиОшибкиПроверкиПодписи(Форма, ИмяЭлементаНадписьОшибка, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(НавигационнаяСсылкаФорматированнойСтроки) Тогда
Если ЗначениеЗаполнено(ИмяЭлементаНадписьОшибка) Тогда
Ошибка = Новый Структура;
Ошибка.Вставить("ОписаниеОшибки", НавигационнаяСсылкаФорматированнойСтроки);
Ошибка.Вставить("ОписаниеОшибки", Строка(Форма.Элементы[ИмяЭлементаНадписьОшибка].Заголовок));
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
НСтр("ru='Проверка доверенности подписи'"), "", Ошибка, Новый Структура);
@@ -104,7 +104,7 @@
Верна = Истина;
Массив = Новый Массив;
Для Каждого Результат Из РезультатПроверки Цикл // см. МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РезультатПроверкиПодписиПоМЧД
Для Каждого Результат Из РезультатПроверки Цикл // см. МашиночитаемыеДоверенностиФНССлужебный.НовыйРезультатПроверкиПодписиПоМЧД
Проверка = "";
МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ТекстПроверкиМЧД(Результат, Верна, Проверка);
@@ -278,7 +278,7 @@
ПараметрыФормы = ПараметрыРасширенногоПредставленияОшибки();
ПараметрыФормы.ЗаголовокПредупреждения = Контекст.ЗаголовокПредупреждения;
ПараметрыФормы.ТекстОшибки = Ошибка.ТекстОшибки;
ПараметрыФормы.ОписаниеОшибки = Ошибка.Решение;
ПараметрыФормы.ОписаниеОшибки = СтрШаблон("%1: %2", Контекст.ЗаголовокПредупреждения, Ошибка.ТекстОшибки);
ПараметрыФормы.ПоказатьТребуетсяПомощь = Истина;
ПараметрыФормы.ПоказатьИнструкцию = Истина;
ПараметрыФормы.ИнформацияДляПоддержки = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
@@ -286,7 +286,6 @@
"ТехническаяИнформация");
ПараметрыФормы.ДополнительныеДанные.Вставить("ДополнительныеДанныеПроверок", Ошибка);
ПараметрыФормы.ДополнительныеДанные.Вставить("ДоверенностьМЧД", Ошибка.ДополнительныеФайлы);
ОткрытьФорму("ОбщаяФорма.РасширенноеПредставлениеОшибки",
ПараметрыФормы, Контекст.Форма,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
@@ -342,9 +341,6 @@
Процедура ПолучитьДоверенностьИзРеестра(ОповещениеОПолучении, НомерДоверенности, ИННДоверителя) Экспорт
Результат = Новый Структура;
Результат.Вставить("Ошибка");
РезультатПолучения = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ЗагрузитьДоверенностьИзРеестра(НомерДоверенности, ИННДоверителя);
Если ЗначениеЗаполнено(РезультатПолучения.Ошибка) Тогда
КонтекстОшибки = КонтекстДляОбработкиОшибкиРР();
@@ -352,8 +348,9 @@
ОбработатьОшибкуВзаимодействияРР(РезультатПолучения.Ошибка, КонтекстОшибки);
Возврат;
КонецЕсли;
ВыполнитьОбработкуОповещения(ОповещениеОПолучении, РезультатПолучения);
КонецПроцедуры
Процедура ВыгрузитьДоверенностьВФайл(Знач Доверенность) Экспорт
@@ -6,50 +6,6 @@
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныйПрограммныйИнтерфейс
// Результат проверки подписи по МЧД.
//
// Параметры:
// Доверенность - СправочникСсылка.МашиночитаемыеДоверенности
//
// Возвращаемое значение:
// Структура:
// * МашиночитаемаяДоверенность - СправочникСсылка.МашиночитаемыеДоверенности
// * Представление - Строка - представление доверенности для отображения пользователям, т.к. может не быть прав на чтение.
// * ТребуетсяПроверка - Булево
// * ДатаПроверки - Дата
// * Верна - Булево
// * ПодписантСоответствуетПредставителю - Булево
// * СовместныеПолномочия - Булево
// * СовместныеПолномочияВерны - Булево
// * СтатусВернаУстановленВручную - Булево
// * УстановившийСтатусВерна - СправочникСсылка.Пользователи
// * ПротоколПроверки - Соответствие из КлючИЗначение:
// ** Ключ - Строка - идентификатор проверки
// ** Значение - см. МашиночитаемыеДоверенностиФНС.РезультатПроверкиДляПротокола
//
Функция РезультатПроверкиПодписиПоМЧД(Доверенность) Экспорт
Структура = Новый Структура;
Структура.Вставить("Представление");
Структура.Вставить("МашиночитаемаяДоверенность", Доверенность);
Структура.Вставить("ТребуетсяПроверка", Истина);
Структура.Вставить("ДатаПроверки");
Структура.Вставить("Верна");
Структура.Вставить("ПодписантСоответствуетПредставителю");
Структура.Вставить("СовместныеПолномочия");
Структура.Вставить("СовместныеПолномочияВерны");
Структура.Вставить("ПротоколПроверки");
Структура.Вставить("СтатусВернаУстановленВручную", Ложь);
Структура.Вставить("УстановившийСтатусВерна");
Возврат Структура;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПерсональныеДанные() Экспорт
@@ -75,29 +31,6 @@
Или СтрНачинаетсяС(КодПолномочия, "FNS_");
КонецФункции
Функция РасчетныйСтатусДокумента(ТехническийСтатус, Верна) Экспорт
Если ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Зарегистрирована")
Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.РегистрацияОтмены")
Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Активна") Тогда
Если Верна Тогда
РасчетныйСтатусДокумента = ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Действует");
Иначе
РасчетныйСтатусДокумента = ПредопределенноеЗначение("Перечисление.СтатусыМЧД.НеДействует");
КонецЕсли;
ИначеЕсли ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Создание")
Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписание")
Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")
Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Регистрация") Тогда
РасчетныйСтатусДокумента = ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Черновик");
Иначе
РасчетныйСтатусДокумента = ПредопределенноеЗначение("Перечисление.СтатусыМЧД.НеДействует");
КонецЕсли;
Возврат РасчетныйСтатусДокумента;
КонецФункции
Функция ВнешниеСтатусы() Экспорт
ВнешниеСтатусы = Новый Соответствие;
@@ -128,21 +61,22 @@
// Реквизиты организации.
//
// Параметры:
// СторонаМЧД - ПеречислениеСсылка.ТипыУчастниковМЧД, Неопределено
// Назначение - см. НазначениеДоверенностиДляПроверкиРеквизитов
// ДляЗаполнения - Булево - если Истина, полный список реквизитов
// ВидОрганизации - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ИностраннаяОрганизация", "Филиал"
// Назначение - см. НазначениеДоверенности
//
// Возвращаемое значение:
// СписокЗначений
//
Функция РеквизитыОрганизацииСписок(СторонаМЧД, ДляЗаполнения = Истина, ВидОрганизации = Неопределено, Назначение = Неопределено) Экспорт
Функция РеквизитыОрганизацииСписок(Назначение = Неопределено, ДляЗаполнения = Истина, ВидОрганизации = Неопределено) Экспорт
Если Назначение = Неопределено Тогда
Назначение = НазначениеДоверенностиДляПроверкиРеквизитов();
КонецЕсли;
ЭтоДоверитель = Назначение.ТипУчастника = ПредопределенноеЗначение("Перечисление.ТипыУчастниковМЧД.Доверитель");
// Пометка списка Истина означает, что поле необязательное
Реквизиты = Новый СписокЗначений;
Реквизиты.Добавить("ЭтоИндивидуальныйПредприниматель", НСтр("ru = 'Индивидуальный предприниматель'"), Истина);
Реквизиты.Добавить("ЭтоФизическоеЛицо", НСтр("ru = 'Физическое лицо'"), Истина);
@@ -151,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 = 'Адрес юридического лица на территории государства'"), Истина);
КонецЕсли;
@@ -225,9 +158,9 @@
// Реквизиты физического лица.
//
// Параметры:
// Назначение - см. НазначениеДоверенностиДляПроверкиРеквизитов
// ДляЗаполнения - Булево - если Истина, полный список реквизитов
// ВидФизическогоЛица - Неопределено, Строка - "ИндивидуальныйПредприниматель", "ДолжностноеЛицо", "ФизическоеЛицо"
// Назначение - см. НазначениеДоверенности
//
// Возвращаемое значение:
// СписокЗначений
@@ -564,13 +497,13 @@
ИначеЕсли Не ЗначениеЗаполнено(Результат.ДатаПроверкиИзДанныхДоверенности) Тогда
ОписаниеОшибки = НовыеСвойстваОшибки();
ОписаниеОшибки.Описание = НСтр("ru='Статус доверенности в программе - требуется проверка'");
ОписаниеОшибки.Описание = НСтр("ru='Статус доверенности - требуется проверка'");
ОписаниеОшибок.Ошибки.Добавить(ОписаниеОшибки);
Ошибки.Добавить(ОписаниеОшибки.Описание);
Иначе
ОписаниеОшибки = НовыеСвойстваОшибки();
ОписаниеОшибки.Описание = НСтр("ru='Статус доверенности в программе - не верна'");
ОписаниеОшибки.Описание = НСтр("ru='Статус доверенности - не верна'");
ОписаниеОшибок.Ошибки.Добавить(ОписаниеОшибки);
Ошибки.Добавить(ОписаниеОшибки.Описание);
@@ -410,7 +410,7 @@
КонецЕсли;
КонецЦикла;
ШаблонЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 20
ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 20
| Таблица.Ссылка КАК Ссылка
|ИЗ
| &ИмяОбъекта КАК Таблица
@@ -2365,7 +2365,16 @@
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
ПоследняяСсылка = ВыборкаДетальныеЗаписи.Ссылка;
ДанныеОбъекта.СсылкаНаПоследнийОбработанныйОбъекты = ПоследняяСсылка;
ОписаниеОшибки = ИнформацияОбОшибке();
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,
МетаданныеОбъекта, Строка(ИзменяемыйОбъект),
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ОписаниеОшибки));
КонецПопытки;
КонецЦикла;
@@ -2594,7 +2603,17 @@
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
Отбор = Новый Структура();
Отбор.Вставить("Регистратор", СтрокаРезультата.РегистраторРеквизитСсылка);
ДанныеОбъекта.СсылкаНаПоследнийОбработанныйОбъекты = Отбор;
ОписаниеОшибки = ИнформацияОбОшибке();
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,
МетаданныеОбъекта,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ОписаниеОшибки));
КонецПопытки;
КонецЦикла;
@@ -2793,7 +2812,23 @@
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
Отбор = Новый Структура();
Для Каждого Измерение Из Измерения Цикл
Отбор.Вставить(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]);
КонецЦикла;
Если Периодический Тогда
Отбор.Вставить("Период", СтрокаРезультата["Период"]);
КонецЕсли;
ДанныеОбъекта.СсылкаНаПоследнийОбработанныйОбъекты = Отбор;
ОписаниеОшибки = ИнформацияОбОшибке();
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,
МетаданныеОбъекта,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ОписаниеОшибки));
КонецПопытки;
КонецЦикла;
@@ -2883,6 +2918,17 @@
КонецФункции
// Имя событие для записи в журнал регистрации.
//
// Возвращаемое значение:
// Строка - событие журнала регистрации
//
Функция СобытиеЖурналаРегистрации()
Возврат НСтр("ru = 'Мультиязычность'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -4213,7 +4213,9 @@
СведенияОбОбновлении.ТекущаяИтерацияОбновления = 1;
ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении);
Константы.ПорядокОбрабатываемыхДанных.Установить(Перечисления.ПорядокОбработчиковОбновления.Критичный);
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Константы.ПорядокОбрабатываемыхДанных.Установить(Перечисления.ПорядокОбработчиковОбновления.Критичный);
КонецЕсли;
Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Ложь);
Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.9.337";
Описание.Версия = "3.1.9.518";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -857,6 +857,7 @@
// * СеансОбновления - Структура
// * ОписаниеПотоков - см. НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления
// * ВерсияУдалениеПатчей - Строка
// * ВерсияПроверкиПатчей - Строка
// * ДлительностьЭтаповОбновления - Структура:
// ** Критичные - Структура:
// *** Начало - Дата
@@ -1689,18 +1690,19 @@
Если Пользователи.ЭтоПолноправныйПользователь(, Истина)
И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()
И Не ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
Значение = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить("ПроверкаПатчей", "НомерВерсии");
Если Значение = Неопределено
Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Метаданные.Версия, Значение) > 0 Тогда
Сведения = СведенияОбОбновленииИнформационнойБазы();
ВерсияПроверкиПатчей = Сведения.ВерсияПроверкиПатчей;
Если ВерсияПроверкиПатчей = Неопределено
Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Метаданные.Версия, ВерсияПроверкиПатчей) > 0 Тогда
МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации");
Результат = МодульОбновлениеКонфигурации.ИсправленияИзменены();
ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("ПроверкаПатчей", "НомерВерсии", Метаданные.Версия);
Сведения.ВерсияПроверкиПатчей = Метаданные.Версия;
Если Результат.ЕстьИзменения Тогда
Сведения = СведенияОбОбновленииИнформационнойБазы();
Сведения.ВерсияУдалениеПатчей = Метаданные.Версия;
ЗаписатьСведенияОбОбновленииИнформационнойБазы(Сведения);
КонецЕсли;
ЗаписатьСведенияОбОбновленииИнформационнойБазы(Сведения);
КонецЕсли;
КонецЕсли;
@@ -10647,6 +10649,7 @@
СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1);
СведенияОбОбновлении.Вставить("СеансОбновления");
СведенияОбОбновлении.Вставить("ВерсияУдалениеПатчей");
СведенияОбОбновлении.Вставить("ВерсияПроверкиПатчей");
СведенияОбОбновлении.Вставить("ЗависимостьГруппОбработчиков", Новый Соответствие);
СведенияОбОбновлении.Вставить("ВерсииПодсистемНаНачалоОбновления", Новый Соответствие);
СведенияОбОбновлении.Вставить("ДатаНачалаСеансаОбновления", Неопределено);
@@ -61,6 +61,30 @@
Блокировка.Заблокировать();
МенеджерЗаписи.Прочитать();
Если СохранятьИзмененияПланаОбновления() Тогда
ПредыдущийПланОбновления = МенеджерЗаписи.ПланОбновления.Получить();
ТекущиеЗвездочныеОбработчики = Новый Массив;
Если ПредыдущийПланОбновления <> Неопределено Тогда
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ВерсияРегистрации", "*");
ТекущиеЗвездочныеОбработчики = ПредыдущийПланОбновления.План.Строки.НайтиСтроки(ПараметрыОтбора, Истина);
КонецЕсли;
Для Каждого Версия Из ОписаниеПлана.План.Строки Цикл
Если Версия.Версия <> "*" Тогда
Продолжить;
КонецЕсли;
Для Каждого Обработчик Из ТекущиеЗвездочныеОбработчики Цикл
НайденныйОбработчик = Версия.Строки.Найти(Обработчик.Процедура, "Процедура");
Если НайденныйОбработчик = Неопределено Тогда
ЗаполнитьЗначенияСвойств(Версия.Строки.Добавить(), Обработчик);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
МенеджерЗаписи.ПланОбновления = Новый ХранилищеЗначения(ОписаниеПлана);
МенеджерЗаписи.Записать();
@@ -1231,6 +1255,34 @@
#КонецОбласти
Функция СохранятьИзмененияПланаОбновления()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя);
Запрос.Текст =
"ВЫБРАТЬ
| ВерсииПодсистем.ПланОбновления КАК ПланОбновления
|ИЗ
| РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем
|ГДЕ
| ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы";
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ПланОбновления = Результат[0].ПланОбновления.Получить();
Если ПланОбновления = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если ПланОбновления.ВерсияНа = Метаданные.Версия Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция РезультатБлокировкиОбластиДанных(КлючЗаписи, НомерПопытки)
Попытка
@@ -2000,8 +2000,9 @@
Функция ИнформационнаяБазаФайловая(Знач СтрокаСоединенияИнформационнойБазы = "") Экспорт
Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
Возврат СтандартныеПодсистемыПовтИсп.ИнформационнаяБазаФайловая();
КонецЕсли;
Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1;
КонецФункции
@@ -6040,6 +6041,8 @@
//
Процедура ВыполнитьВБезопасномРежиме(Знач Алгоритм, Знач Параметры = Неопределено) Экспорт
ПроверитьАлгоритм(Алгоритм);
УстановитьБезопасныйРежим(Истина);
Если ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
@@ -6085,6 +6088,8 @@
//
Функция ВычислитьВБезопасномРежиме(Знач Выражение, Знач Параметры = Неопределено) Экспорт
ПроверитьАлгоритм(Выражение);
УстановитьБезопасныйРежим(Истина);
Если ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
@@ -6154,6 +6159,22 @@
КонецФункции
// Возвращает фрагмент текста запроса, объединяющего результаты запросов в один запрос.
//
// Возвращаемое значение:
// Строка
//
Функция ТекстОбъединитьВсе() Экспорт
Возврат
"
|
|ОБЪЕДИНИТЬ ВСЕ
|
|";
КонецФункции
// Возвращает фрагмент текста запроса, отделяющего один запрос от другого.
//
// Возвращаемое значение:
@@ -6808,47 +6829,49 @@
// ИмяФайла - Строка - имя файла с расширением
//
Процедура СократитьИмяФайла(ИмяФайла) Экспорт
ОграничениеВБайтах = 255;
Если РазмерСтрокиВБайтах(ИмяФайла) <= ОграничениеВБайтах Тогда
ОграничениеВБайтах = 127;
Файл = Новый Файл(ИмяФайла);
Если РазмерСтрокиВБайтах(Файл.Имя) <= ОграничениеВБайтах Тогда
Возврат;
КонецЕсли;
Файл = Новый Файл(ИмяФайла);
ИмяБезРасширения = Файл.ИмяБезРасширения;
Строка = "";
ОстатокСтроки = "";
РазмерСтроки = 0;
МаксимальныйРазмерСтроки = ОграничениеВБайтах - 32;
ОграничениеВБайтах = ОграничениеВБайтах - РазмерСтрокиВБайтах(Файл.Расширение);
РазмерРасширения = РазмерСтрокиВБайтах(Файл.Расширение);
СокращатьВместеСРасширением = РазмерРасширения > 32;
ДлинаСтроки = СтрДлина(ИмяБезРасширения);
ИспользуемоеКоличествоСимволов = ОграничениеВБайтах - 32;
БольшееКоличествоСимволов = Мин(ДлинаСтроки, ОграничениеВБайтах);
МеньшееКоличествоСимволов = Цел((ОграничениеВБайтах - 32)/4);
Уменьшить = Истина;
Пока Истина Цикл
Если Уменьшить Тогда
ИспользуемоеКоличествоСимволов = МеньшееКоличествоСимволов + Цел((ИспользуемоеКоличествоСимволов-МеньшееКоличествоСимволов)/2);
Иначе
ИспользуемоеКоличествоСимволов = ИспользуемоеКоличествоСимволов + Цел((БольшееКоличествоСимволов - ИспользуемоеКоличествоСимволов)/2);
КонецЕсли;
Если СокращатьВместеСРасширением Тогда
СокращаемоеИмя = Файл.Имя;
Иначе
СокращаемоеИмя = Файл.ИмяБезРасширения;
РазмерСтроки = РазмерРасширения;
КонецЕсли;
Для НомерСимвола = 1 По СтрДлина(СокращаемоеИмя) Цикл
Символ = Сред(СокращаемоеИмя, НомерСимвола, 1);
РазмерСимвола = РазмерСтрокиВБайтах(Символ);
РазмерСтрокиВБайтах = РазмерСтрокиВБайтах(ИмяБезРасширения)+32;
Если РазмерСтрокиВБайтах = ОграничениеВБайтах Или БольшееКоличествоСимволов - МеньшееКоличествоСимволов = 1 Тогда
Если РазмерСтроки + РазмерСимвола > МаксимальныйРазмерСтроки Тогда
ОстатокСтроки = Сред(СокращаемоеИмя, НомерСимвола);
Прервать;
КонецЕсли;
Если РазмерСтрокиВБайтах > ОграничениеВБайтах Тогда
Уменьшить = Истина;
БольшееКоличествоСимволов = ИспользуемоеКоличествоСимволов;
Иначе
Уменьшить = Ложь;
МеньшееКоличествоСимволов = ИспользуемоеКоличествоСимволов;
КонецЕсли;
Строка = Строка + Символ;
РазмерСтроки = РазмерСтроки + РазмерСимвола;
КонецЦикла;
СокращеннаяСтрока = СократитьСтрокуКонтрольнойСуммой(ИмяБезРасширения, ИспользуемоеКоличествоСимволов+32);
ИмяФайла = Строка;
ИмяФайла = СокращеннаяСтрока+Файл.Расширение;
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.Добавить(ОстатокСтроки);
ХешСумма = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", "");
ИмяФайла = Файл.Путь + ИмяФайла + ХешСумма + ?(СокращатьВместеСРасширением, "", Файл.Расширение);
КонецПроцедуры
@@ -10049,10 +10072,10 @@
Функция ПоддерживаемыеВерсииПлатформы() Экспорт
ПоддерживаемыеВерсииПлатформы = Новый СписокЗначений;
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.21", "8.3.21.1775; 8.3.22.1923");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.22", "8.3.22.2355; 8.3.23.2011; 8.3.24.1304");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.23", "8.3.23.2011; 8.3.24.1304");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.24", "8.3.24.1304");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.21", "8.3.22.2501; 8.3.23.2137; 8.3.24.1467");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.22", "8.3.22.2501; 8.3.23.2137; 8.3.24.1548; 8.3.25.1286");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.23", "8.3.23.2137; 8.3.24.1548; 8.3.25.1286");
ПоддерживаемыеВерсииПлатформы.Добавить("8.3.24", "8.3.24.1548; 8.3.25.1286");
Возврат ПоддерживаемыеВерсииПлатформы;
@@ -10115,6 +10138,9 @@
Версии = Новый Массив;
Версии.Добавить("8.3.21.1676");
Версии.Добавить("8.3.21.1901");
Версии.Добавить("8.3.24.1440");
Версии.Добавить("8.3.24.1599");
Возврат Версии.Найти(Версия) <> Неопределено;
КонецФункции
@@ -10231,6 +10257,173 @@
#КонецОбласти
#Область ПроверкаАлгоритмов
Процедура ПроверитьАлгоритм(Знач Алгоритм)
ТекстыОшибок = Новый Массив;
Алгоритм = ВРег(Алгоритм);
// Исключение метода объекта Запрос.
Алгоритм = СтрЗаменить(СтрЗаменить(Алгоритм, ВРег("Выполнить()"), ""), ВРег("Execute()"), "");
// Проверка наличия в алгоритме недопустимых методов.
НайденныеВызовы = НайденныеВызовы(Алгоритм, НедопустимыеМетоды(), "(");
Если НайденныеВызовы.Количество() > 0 Тогда
ТекстОшибки = НСтр("ru = 'Вызовы недопустимых методов:
|%1'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, СтрСоединить(НайденныеВызовы, Символы.ПС));
ТекстыОшибок.Добавить(ТекстОшибки);
КонецЕсли;
// Проверка обращений к общим модулям и свойствам глобального контекста.
НайденныеВызовы = НайденныеВызовы(Алгоритм, ЗапрещенныеСвойстваГлобальногоКонтекста(), ".");
НайденныеВызовыАльтернативные = НайденныеВызовы(Алгоритм, ЗапрещенныеСвойстваГлобальногоКонтекста(), "[");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(НайденныеВызовы, НайденныеВызовыАльтернативные, Истина);
Если НайденныеВызовы.Количество() > 0 Тогда
ТекстОшибки = НСтр("ru = 'Вызовы недопустимых свойств глобального контекста:
|%1'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, СтрСоединить(НайденныеВызовы, Символы.ПС));
ТекстыОшибок.Добавить(ТекстОшибки);
КонецЕсли;
НайденныеВызовы = НайденныеВызовы(Алгоритм, ЗапрещенныеМодули(), ".");
Если НайденныеВызовы.Количество() > 0 Тогда
ТекстОшибки = НСтр("ru = 'Вызовы недопустимых модулей:
|%1'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, СтрСоединить(НайденныеВызовы, Символы.ПС));
ТекстыОшибок.Добавить(ТекстОшибки);
КонецЕсли;
Если ТекстыОшибок.Количество() > 0 Тогда
ВызватьИсключение СтрСоединить(ТекстыОшибок, Символы.ПС + "-----------------------" + Символы.ПС);
КонецЕсли;
КонецПроцедуры
Функция НайденныеВызовы(Алгоритм, СтрокиПоиска, Окончание = Неопределено)
НайденныеВызовы = Новый Массив;
ПоискОбращенияЧерезТочку = Ложь;
ПоискТаблицы = Ложь;
Для Каждого Элемент Из СтрокиПоиска Цикл
Если ТипЗнч(Элемент) = Тип("Структура") Тогда
ПоискОбращенияЧерезТочку = Истина;
СтрокаПоиска = Элемент.Коллекция;
Иначе
СтрокаПоиска = Элемент;
КонецЕсли;
ПозицияВызова = СтрНайти(Алгоритм, ВРег(СтрокаПоиска));
НомерВхождения = 1;
Пока ПозицияВызова > 0 Цикл
Если ПоискОбращенияЧерезТочку Тогда
Окончание = ".";
ПоискТаблицы = Ложь;
КонецЕсли;
ЧислоСимволов = СтрДлина(Окончание);
ПозицияСимвола = ПозицияВызова + СтрДлина(СтрокаПоиска);
Пока ПозицияСимвола + ЧислоСимволов < СтрДлина(Алгоритм) Цикл
ЗначениеСимвола = СокрЛП(Сред(Алгоритм, ПозицияСимвола, ЧислоСимволов));
Если ВРег(СтрокаПоиска) = ВРег("Выполнить")
Или ВРег(СтрокаПоиска) = ВРег("Execute") Тогда
Если Не ЗначениеЗаполнено(ЗначениеСимвола) Тогда
НайденныеВызовы.Добавить(СтрокаПоиска);
Прервать;
КонецЕсли;
КонецЕсли;
Если СтрДлина(ЗначениеСимвола) < СтрДлина(Окончание) Тогда
ЧислоСимволов = ЧислоСимволов + 1;
ИначеЕсли ПоискОбращенияЧерезТочку
И ЗначениеСимвола = Окончание
И Не ПоискТаблицы Тогда
ПозицияСимвола = ПозицияСимвола + ЧислоСимволов;
Окончание = ВРег(Элемент.Таблица);
ЧислоСимволов = СтрДлина(Окончание);
ПоискТаблицы = Истина;
ИначеЕсли ЗначениеСимвола = Окончание Тогда
Если ПоискОбращенияЧерезТочку Тогда
НайденныеВызовы.Добавить(Элемент.Коллекция + "." + Элемент.Таблица);
Иначе
НайденныеВызовы.Добавить(СтрокаПоиска);
КонецЕсли;
Прервать;
ИначеЕсли ЗначениеЗаполнено(СокрЛП(ЗначениеСимвола)) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
НомерВхождения = НомерВхождения + 1;
ПозицияВызова = СтрНайти(Алгоритм, ВРег(СтрокаПоиска), , , НомерВхождения);
КонецЦикла;
КонецЦикла;
Возврат НайденныеВызовы;
КонецФункции
Функция НедопустимыеМетоды()
Массив = Новый Массив;
Массив.Добавить("Выполнить"); // @Non-NLS
Массив.Добавить("Вычислить"); // @Non-NLS
Массив.Добавить("ЗафиксироватьТранзакцию"); // @Non-NLS
Массив.Добавить("СократитьЖурналРегистрации"); // @Non-NLS
Массив.Добавить("УстановитьИспользованиеСобытияЖурналаРегистрации"); // @Non-NLS
Массив.Добавить("ЗапуститьПриложение"); // @Non-NLS
Массив.Добавить("УстановитьМаксимальныйСрокДействияПаролейПользователей"); // @Non-NLS
Массив.Добавить("УстановитьМинимальнуюДлинуПаролейПользователей"); // @Non-NLS
Массив.Добавить("УстановитьМинимальныйСрокДействияПаролейПользователей"); // @Non-NLS
Массив.Добавить("УстановитьОграничениеПовторенияПаролейПользователейСредиПоследних"); // @Non-NLS
Массив.Добавить("УстановитьПроверкуСложностиПаролейПользователей"); // @Non-NLS
Массив.Добавить("УстановитьНастройкиВосстановленияПароля"); // @Non-NLS
Массив.Добавить("Execute");
Массив.Добавить("Eval");
Массив.Добавить("CommitTransaction");
Массив.Добавить("TruncateEventLog");
Массив.Добавить("SetEventLogEventUse");
Массив.Добавить("RunApp");
Массив.Добавить("SetUserPasswordMaxEffectivePeriod");
Массив.Добавить("SetUserPasswordMinLength");
Массив.Добавить("SetUserPasswordMinEffectivePeriod");
Массив.Добавить("SetUserPasswordReuseLimit");
Массив.Добавить("SetUserPasswordStrengthCheck");
Массив.Добавить("SetPasswordRecoverySettings");
Возврат Массив;
КонецФункции
Функция ЗапрещенныеСвойстваГлобальногоКонтекста()
Массив = Новый Массив;
Массив.Добавить("ПользователиИнформационнойБазы"); // @Non-NLS
Массив.Добавить("ДополнительныеНастройкиАутентификации"); // @Non-NLS
Массив.Добавить("ПараметрыСеанса"); // @Non-NLS
Массив.Добавить("InfoBaseUsers");
Массив.Добавить("AdditionalAuthenticationSettings");
Массив.Добавить("SessionParameters");
Возврат Массив;
КонецФункции
Функция ЗапрещенныеМодули()
Массив = Новый Массив;
Массив.Добавить("ДлительныеОперации");
Возврат Массив;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли
@@ -168,8 +168,7 @@
КонецФункции
// Возвращает ссылку на общий модуль или модуль менеджера по имени.
//
// Возвращает ссылку на общий модуль по имени.
// См. ОбщегоНазначения.ОбщийМодуль
//
// Параметры:
@@ -177,20 +176,11 @@
//
// Возвращаемое значение:
// ОбщийМодуль
// СправочникМенеджер,
// ДокументМенеджер,
// ОбработкаМенеджер,
// РегистрСведенийМенеджер.
//
// Пример:
// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
// МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации");
// МодульОбновлениеКонфигурации.<Имя метода>();
// КонецЕсли;
//
// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда
// МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер");
// МодульПолнотекстовыйПоискСервер.<Имя метода>();
// Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
// МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент");
// МодульОбновлениеКонфигурацииКлиент.<Имя процедуры>();
// КонецЕсли;
//
Функция ОбщийМодуль(Имя) Экспорт
@@ -199,9 +189,8 @@
#Если Не ВебКлиент Тогда
// В веб-клиенте не проверяется
// В веб-клиенте не проверяется,
// т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует.
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Общий модуль ""%1"" не существует.'"),
@@ -566,47 +566,46 @@
//
Процедура СократитьИмяФайла(ИмяФайла) Экспорт
ОграничениеВБайтах = 255;
Если РазмерСтрокиВБайтах(ИмяФайла) <= ОграничениеВБайтах Тогда
ОграничениеВБайтах = 127;
Файл = Новый Файл(ИмяФайла);
Если РазмерСтрокиВБайтах(Файл.Имя) <= ОграничениеВБайтах Тогда
Возврат;
КонецЕсли;
Файл = Новый Файл(ИмяФайла);
ИмяБезРасширения = Файл.ИмяБезРасширения;
Строка = "";
ОстатокСтроки = "";
РазмерСтроки = 0;
МаксимальныйРазмерСтроки = ОграничениеВБайтах - 32;
ОграничениеВБайтах = ОграничениеВБайтах - РазмерСтрокиВБайтах(Файл.Расширение);
РазмерРасширения = РазмерСтрокиВБайтах(Файл.Расширение);
СокращатьВместеСРасширением = РазмерРасширения > 32;
ДлинаСтроки = СтрДлина(ИмяБезРасширения);
ИспользуемоеКоличествоСимволов = ОграничениеВБайтах - 32;
БольшееКоличествоСимволов = Мин(ДлинаСтроки, ОграничениеВБайтах);
МеньшееКоличествоСимволов = Цел((ОграничениеВБайтах - 32)/4);
Уменьшить = Истина;
Пока Истина Цикл
Если Уменьшить Тогда
ИспользуемоеКоличествоСимволов = МеньшееКоличествоСимволов + Цел((ИспользуемоеКоличествоСимволов-МеньшееКоличествоСимволов)/2);
Иначе
ИспользуемоеКоличествоСимволов = ИспользуемоеКоличествоСимволов + Цел((БольшееКоличествоСимволов - ИспользуемоеКоличествоСимволов)/2);
КонецЕсли;
Если СокращатьВместеСРасширением Тогда
СокращаемоеИмя = Файл.Имя;
Иначе
СокращаемоеИмя = Файл.ИмяБезРасширения;
РазмерСтроки = РазмерРасширения;
КонецЕсли;
Для НомерСимвола = 1 По СтрДлина(СокращаемоеИмя) Цикл
Символ = Сред(СокращаемоеИмя, НомерСимвола, 1);
РазмерСимвола = РазмерСтрокиВБайтах(Символ);
РазмерСтрокиВБайтах = РазмерСтрокиВБайтах(ИмяБезРасширения)+32;
Если РазмерСтрокиВБайтах = ОграничениеВБайтах Или БольшееКоличествоСимволов - МеньшееКоличествоСимволов = 1 Тогда
Если РазмерСтроки + РазмерСимвола > МаксимальныйРазмерСтроки Тогда
ОстатокСтроки = Сред(СокращаемоеИмя, НомерСимвола);
Прервать;
КонецЕсли;
Если РазмерСтрокиВБайтах > ОграничениеВБайтах Тогда
Уменьшить = Истина;
БольшееКоличествоСимволов = ИспользуемоеКоличествоСимволов;
Иначе
Уменьшить = Ложь;
МеньшееКоличествоСимволов = ИспользуемоеКоличествоСимволов;
КонецЕсли;
Строка = Строка + Символ;
РазмерСтроки = РазмерСтроки + РазмерСимвола;
КонецЦикла;
СокращеннаяСтрока = СократитьСтроку(ИмяБезРасширения, ИспользуемоеКоличествоСимволов);
ИмяФайла = СокращеннаяСтрока + Файл.Расширение;
ИмяФайла = Строка;
ХешСумма = ВычислитьХешСтрокиПоАлгоритмуMD5(ОстатокСтроки);
ИмяФайла = Файл.Путь + ИмяФайла + ХешСумма + ?(СокращатьВместеСРасширением, "", Файл.Расширение);
КонецПроцедуры
#Область Прочее
@@ -1193,8 +1192,7 @@
#Если ВебКлиент Тогда
СистемнаяИнформация = Новый СистемнаяИнформация;
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.24.0") >= 0
И Не ОбщегоНазначенияКлиент.РазделениеВключено() Тогда
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.3.24.0") >= 0 Тогда
Ждать ПаузаАсинх(2);
КонецЕсли;
#КонецЕсли
@@ -1718,12 +1716,6 @@
КонецФункции
Функция СократитьСтроку(Строка, ИспользуемоеКоличествоСимволов)
Результат = Лев(Строка, ИспользуемоеКоличествоСимволов);
Результат = Результат + ВычислитьХешСтрокиПоАлгоритмуMD5(Сред(Строка, ИспользуемоеКоличествоСимволов+1));
Возврат Результат;
КонецФункции
Функция РазмерСтрокиВБайтах(Знач Строка)
Возврат ПолучитьДвоичныеДанныеИзСтроки(Строка, "UTF-8").Размер();
@@ -133,9 +133,7 @@
Возврат "НеОтправлялось";
КонецЕсли;
Результат = ОтправкаSMSПовтИсп.СтатусДоставки(ИдентификаторСообщения);
Возврат Результат;
Возврат СтатусыДоставки(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторСообщения))[ИдентификаторСообщения];
КонецФункции
@@ -253,6 +251,33 @@
КонецПроцедуры
// Запрашивает статус доставки сообщения у поставщика услуг.
//
// Параметры:
// ИдентификаторыСообщений - Массив из Строка - идентификаторы, присвоенные SMS при отправке;
//
// Возвращаемое значение:
// Соответствие:
// * Ключ - Строка - идентификатор SMS;
// * Значение - Строка - статус доставки сообщения, который вернул поставщик услуг:
// "НеОтправлялось" - сообщение еще не было обработано поставщиком услуг (в очереди);
// "Отправляется" - сообщение стоит в очереди на отправку у провайдера;
// "Отправлено" - сообщение отправлено, ожидается подтверждение о доставке;
// "НеОтправлено" - сообщение не отправлено (недостаточно средств на счете, перегружена сеть оператора);
// "Доставлено" - сообщение доставлено адресату;
// "НеДоставлено" - сообщение не удалось доставить (абонент недоступен, время ожидания подтверждения
// доставки от абонента истекло);
// "Ошибка" - не удалось получить статус у поставщика услуг (статус неизвестен).
//
Функция СтатусыДоставки(Знач ИдентификаторыСообщений) Экспорт
ПроверитьПрава();
СтатусыДоставки = ОтправкаSMSПовтИсп.СтатусыДоставки(СтрСоединить(ИдентификаторыСообщений, ","));
Возврат Новый Соответствие(СтатусыДоставки);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -393,6 +418,7 @@
Результат.Вставить("ПриОпределенииСпособовАвторизации", Ложь);
Результат.Вставить("ПриОпределенииПолейАвторизации", Ложь);
Результат.Вставить("ПриЗаполненииСпискаТекущихДел", Ложь);
Результат.Вставить("СтатусыДоставкиОднимЗапросом", Ложь);
Возврат Результат;
@@ -8,30 +8,47 @@
#Область СлужебныеПроцедурыИФункции
Функция СтатусДоставки(ИдентификаторСообщения) Экспорт
Функция СтатусыДоставки(ИдентификаторыСообщений) Экспорт
ОтправкаSMS.ПроверитьПрава();
СписокИдентификаторов = СтрРазделить(ИдентификаторыСообщений, ",", Ложь);
СтатусыДоставки = Новый Соответствие();
Если ПустаяСтрока(ИдентификаторСообщения) Тогда
Возврат "НеОтправлялось";
Для Каждого ИдентификаторСообщения Из СписокИдентификаторов Цикл
СтатусыДоставки[ИдентификаторСообщения] = "Ошибка";
КонецЦикла;
Если Не ЗначениеЗаполнено(СписокИдентификаторов) Тогда
Возврат Новый ФиксированноеСоответствие(СтатусыДоставки);
КонецЕсли;
Результат = Неопределено;
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
МодульОтправкаSMSЧерезПровайдера = ОтправкаSMS.МодульОтправкаSMSЧерезПровайдера(НастройкиОтправкиSMS.Провайдер);
Если МодульОтправкаSMSЧерезПровайдера <> Неопределено Тогда
Результат = МодульОтправкаSMSЧерезПровайдера.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS);
НастройкиПровайдера = ОтправкаSMS.НастройкиПровайдера(НастройкиОтправкиSMS.Провайдер);
Если НастройкиПровайдера.СтатусыДоставкиОднимЗапросом Тогда
СтатусыДоставки = МодульОтправкаSMSЧерезПровайдера.СтатусыДоставки(СписокИдентификаторов, НастройкиОтправкиSMS);
Иначе
Для Каждого ИдентификаторСообщения Из СписокИдентификаторов Цикл
СтатусыДоставки[ИдентификаторСообщения] = МодульОтправкаSMSЧерезПровайдера.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS);
КонецЦикла;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(НастройкиОтправкиSMS.Провайдер) Тогда
ОтправкаSMSПереопределяемый.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS.Провайдер,
НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль, Результат);
Иначе // провайдер не выбран
Результат = "Ошибка";
Для Каждого ИдентификаторСообщения Из СписокИдентификаторов Цикл
Результат = Неопределено;
ОтправкаSMSПереопределяемый.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS.Провайдер,
НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль, Результат);
СтатусыДоставки[ИдентификаторСообщения] = Результат;
КонецЦикла;
КонецЕсли;
Возврат Результат;
Возврат Новый ФиксированноеСоответствие(СтатусыДоставки);
КонецФункции
@@ -252,7 +252,7 @@
Процедура ПриОпределенииНастроек(Настройки) Экспорт
Настройки.АдресОписанияУслугиВИнтернете = "http://sms4b.ru";
Настройки.АдресОписанияУслугиВИнтернете = "https://sms4b.ru";
КонецПроцедуры
@@ -24,57 +24,112 @@
Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, "");
// Подготовка строки получателей.
СтрокаПолучателей = МассивПолучателейСтрокой(НомераПолучателей);
ФорматированныеНомераТелефонов = ФорматироватьНомераТелефонов(НомераПолучателей);
Получатели = Новый Массив;
Для Каждого Номер Из НомераПолучателей Цикл
Если ФорматированныеНомераТелефонов[Номер] <> Неопределено Тогда
Получатели.Добавить(ФорматированныеНомераТелефонов[Номер]);
КонецЕсли;
КонецЦикла;
СтрокаПолучателей = СтрСоединить(Получатели, ",");
// Проверка на заполнение обязательных параметров.
Если ПустаяСтрока(СтрокаПолучателей) Или ПустаяСтрока(Текст) Тогда
Результат.ОписаниеОшибки = НСтр("ru = 'Неверные параметры сообщения'");
Возврат Результат;
КонецЕсли;
// Подготовка параметров запроса.
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Истина);
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоИдентификатору" Тогда
ПараметрыЗапроса.Вставить("api_id", Пароль);
Иначе
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
КонецЕсли;
ПараметрыЗапроса.Вставить("text", Текст);
ПараметрыЗапроса.Вставить("to", СтрокаПолучателей);
ПараметрыЗапроса.Вставить("from", ИмяОтправителя);
ПараметрыЗапроса.Вставить("json", 1);
// отправка запроса
ТекстОтвета = ВыполнитьЗапрос("sms/send", ПараметрыЗапроса);
Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда
Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'");
Возврат Результат;
КонецЕсли;
ИдентификаторыСообщений = СтрРазделить(ТекстОтвета, Символы.ПС);
РезультатЗапроса = ОбщегоНазначения.JSONВЗначение(ТекстОтвета);
ОтветСервера = ИдентификаторыСообщений[0];
ИдентификаторыСообщений.Удалить(0);
ЗапросПринят = РезультатЗапроса["status"] = "OK";
ТекстСостояния = РезультатЗапроса["status_text"];
КодСостояния = РезультатЗапроса["status_code"];
Если ОтветСервера = "100" Тогда
НомераПолучателей = СтрРазделить(СтрокаПолучателей, ",", Ложь);
Если ИдентификаторыСообщений.Количество() < НомераПолучателей.Количество() Тогда
Результат.ОписаниеОшибки = НСтр("ru = 'Ответ сервера не распознан'");
Возврат Результат;
КонецЕсли;
Для Индекс = 0 По НомераПолучателей.ВГраница() Цикл
НомерПолучателя = НомераПолучателей[Индекс];
ИдентификаторСообщения = ИдентификаторыСообщений[Индекс];
Если Не ПустаяСтрока(НомерПолучателя) Тогда
ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения",
НомерПолучателя,ИдентификаторСообщения);
Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение);
КонецЕсли;
КонецЦикла;
Иначе
Результат.ОписаниеОшибки = ОписаниеОшибкиОтправки(ОтветСервера);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки);
Если ЗапросПринят И ЗначениеЗаполнено(РезультатЗапроса["sms"]["empty_phone"]) Тогда
ЗапросПринят = Ложь;
ТекстСостояния = РезультатЗапроса["sms"]["empty_phone"]["real_status_text"];
КодСостояния = РезультатЗапроса["sms"]["empty_phone"]["real_status"];
КонецЕсли;
Если Не ЗапросПринят Тогда
Если ЗначениеЗаполнено(ТекстСостояния) Тогда
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (код состояния: %2)'"), ТекстСостояния, КодСостояния);
Иначе
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код состояния: %1'"), КодСостояния);
КонецЕсли;
Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отправка SMS не выполнена по причине:
|%1'"), Причина);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки);
Возврат Результат;
КонецЕсли;
ТекстыОшибок = Новый Массив;
Для Каждого НомерПолучателя Из НомераПолучателей Цикл
ИдентификаторСообщения = "";
СтатусОтправкиПолучателю = РезультатЗапроса["sms"][ФорматированныеНомераТелефонов[НомерПолучателя]];
Если СтатусОтправкиПолучателю <> Неопределено Тогда
ИдентификаторСообщения = СтатусОтправкиПолучателю["sms_id"];
Если СтатусОтправкиПолучателю["status_text"] = "ERROR" Тогда
ТекстСостояния = СтатусОтправкиПолучателю["status_text"];
КодСостояния = СтатусОтправкиПолучателю["status_code"];
ТекстыОшибок.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1: %2 (код состояния: %3)'"),
НомерПолучателя,
ТекстСостояния,
КодСостояния));
Продолжить;
КонецЕсли;
КонецЕсли;
Если Не ПустаяСтрока(НомерПолучателя) И ЗначениеЗаполнено(ИдентификаторСообщения) Тогда
ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения",
НомерПолучателя,ИдентификаторСообщения);
Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение);
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ТекстыОшибок) Тогда
Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отправка SMS не выполнена следующим получателям:
|%1'"), СтрСоединить(ТекстыОшибок, Символы.ПС));
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -90,35 +145,13 @@
//
Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт
Логин = НастройкиОтправкиSMS.Логин;
Пароль = НастройкиОтправкиSMS.Пароль;
// Подготовка параметров запроса.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
ПараметрыЗапроса.Вставить("id", ИдентификаторСообщения);
// отправка запроса
КодСостояния = ВыполнитьЗапрос("sms/status", ПараметрыЗапроса);
Если Не ЗначениеЗаполнено(КодСостояния) Тогда
Возврат "Ошибка";
КонецЕсли;
Результат = СтатусДоставкиSMS(КодСостояния);
Если Результат = "Ошибка" Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не удалось получить статус доставки SMS (id: ""%3""):
|%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(КодСостояния), КодСостояния, ИдентификаторСообщения);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
КонецЕсли;
Возврат Результат;
ИдентификаторыСообщений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторСообщения);
Возврат СтатусыДоставки(ИдентификаторыСообщений, НастройкиОтправкиSMS)[ИдентификаторСообщения];
КонецФункции
Функция СтатусДоставкиSMS(КодСостояния)
СоответствиеСтатусов = Новый Соответствие;
СоответствиеСтатусов.Вставить("-1", "НеОтправлялось");
СоответствиеСтатусов.Вставить("100", "НеОтправлялось");
@@ -130,9 +163,11 @@
СоответствиеСтатусов.Вставить("106", "НеДоставлено");
СоответствиеСтатусов.Вставить("107", "НеДоставлено");
СоответствиеСтатусов.Вставить("108", "НеДоставлено");
СоответствиеСтатусов.Вставить("150", "НеДоставлено");
Результат = СоответствиеСтатусов[НРег(КодСостояния)];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции
Функция ОписанияОшибок()
@@ -159,16 +194,6 @@
Возврат ОписанияОшибок;
КонецФункции
Функция ОписаниеОшибкиОтправки(КодОшибки)
ОписанияОшибок = ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
Если ТекстСообщения = Неопределено Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сообщение не отправлено (код ошибки: %1).'"), КодОшибки);
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
Функция ОписаниеОшибкиПолученияСтатуса(КодОшибки)
ОписанияОшибок =ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
@@ -191,6 +216,7 @@
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат Неопределено;
КонецПопытки;
Если HTTPОтвет <> Неопределено Тогда
@@ -200,6 +226,7 @@
+ HTTPОтвет.ПолучитьТелоКакСтроку();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
Возврат Неопределено;
КонецЕсли;
Возврат HTTPОтвет.ПолучитьТелоКакСтроку();
@@ -209,33 +236,28 @@
КонецФункции
Функция МассивПолучателейСтрокой(Массив)
Получатели = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Получатели, Массив, Истина);
Функция ФорматироватьНомер(Знач Номер)
ДопустимыеСимволы = "1234567890";
ЛишниеСимволы = СтрСоединить(СтрРазделить(Номер, ДопустимыеСимволы, Ложь), "");
Возврат СтрСоединить(СтрРазделить(Номер, ЛишниеСимволы, Ложь), "");
Результат = "";
Для Каждого Получатель Из Получатели Цикл
Номер = ФорматироватьНомер(Получатель);
Если НЕ ПустаяСтрока(Номер) Тогда
Если Не ПустаяСтрока(Результат) Тогда
Результат = Результат + ",";
КонецЕсли;
Результат = Результат + Номер;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ФорматироватьНомер(Номер)
Результат = "";
ДопустимыеСимволы = "+1234567890";
Для Позиция = 1 По СтрДлина(Номер) Цикл
Символ = Сред(Номер,Позиция,1);
Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда
Результат = Результат + Символ;
Функция ФорматироватьНомераТелефонов(Знач НомераТелефонов)
Результат = Новый Соответствие;
Для Каждого НомерТелефона Из НомераТелефонов Цикл
ФорматированныйНомер = ФорматироватьНомер(НомерТелефона);
Если ЗначениеЗаполнено(ФорматированныйНомер) Тогда
Результат.Вставить(НомерТелефона, ФорматированныйНомер);
КонецЕсли;
КонецЦикла;
Возврат Результат;
Возврат Результат;
КонецФункции
// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров.
@@ -261,9 +283,112 @@
Процедура ПриОпределенииНастроек(Настройки) Экспорт
Настройки.АдресОписанияУслугиВИнтернете = "http://sms.ru";
Настройки.АдресОписанияУслугиВИнтернете = "https://sms.ru";
Настройки.ПриОпределенииСпособовАвторизации = Истина;
Настройки.ПриОпределенииПолейАвторизации = Истина;
Настройки.СтатусыДоставкиОднимЗапросом = Истина;
КонецПроцедуры
Процедура ПриОпределенииСпособовАвторизации(СпособыАвторизации) Экспорт
СпособыАвторизации.Очистить();
СпособыАвторизации.Добавить("ПоИдентификатору", НСтр("ru = 'По ключу (рекомендуется)'"));
СпособыАвторизации.Добавить("ПоЛогинуИПаролю", НСтр("ru = 'По логину и паролю'"));
КонецПроцедуры
Процедура ПриОпределенииПолейАвторизации(СпособыАвторизации) Экспорт
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'api_id'"));
СпособыАвторизации.Вставить("ПоИдентификатору", ПоляАвторизации);
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Логин", НСтр("ru = 'Логин'"));
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'Пароль'"));
СпособыАвторизации.Вставить("ПоЛогинуИПаролю", ПоляАвторизации);
КонецПроцедуры
// Запрашивает статус доставки сообщения у поставщика услуг.
//
// Параметры:
// ИдентификаторыСообщений - см. ОтправкаSMS.СтатусыДоставки.ИдентификаторыСообщений
// НастройкиОтправкиSMS - см. ОтправкаSMS.НастройкиОтправкиSMS
//
// Возвращаемое значение:
// См. ОтправкаSMS.СтатусыДоставки
//
Функция СтатусыДоставки(ИдентификаторыСообщений, НастройкиОтправкиSMS) Экспорт
СтатусыДоставки = Новый Соответствие;
Для Каждого ИдентификаторСообщения Из ИдентификаторыСообщений Цикл
СтатусыДоставки[ИдентификаторСообщения] = "Ошибка";
КонецЦикла;
Логин = НастройкиОтправкиSMS.Логин;
Пароль = НастройкиОтправкиSMS.Пароль;
ПараметрыЗапроса = Новый Структура;
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоИдентификатору" Тогда
ПараметрыЗапроса.Вставить("api_id", Пароль);
Иначе
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
КонецЕсли;
ПараметрыЗапроса.Вставить("id", СтрСоединить(ИдентификаторыСообщений, ","));
ПараметрыЗапроса.Вставить("json", 1);
ТекстОтвета = ВыполнитьЗапрос("sms/status", ПараметрыЗапроса);
Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда
Возврат СтатусыДоставки;
КонецЕсли;
РезультатЗапроса = ОбщегоНазначения.JSONВЗначение(ТекстОтвета);
Если РезультатЗапроса["status"] <> "OK" Тогда
ТекстСостояния = РезультатЗапроса["status_text"];
КодСостояния = РезультатЗапроса["status_code"];
Если ЗначениеЗаполнено(ТекстСостояния) Тогда
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (код состояния: %2)'"), ТекстСостояния, КодСостояния);
Иначе
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код состояния: %1'"), КодСостояния);
КонецЕсли;
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось проверить статус доставки SMS по причине:
|%1'"), Причина);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
Возврат СтатусыДоставки;
КонецЕсли;
Для Каждого ИдентификаторСообщения Из ИдентификаторыСообщений Цикл
КодСостояния = РезультатЗапроса["sms"][ИдентификаторСообщения]["status_code"];
СтатусДоставки = СтатусДоставкиSMS(КодСостояния);
СтатусыДоставки[ИдентификаторСообщения] = СтатусДоставкиSMS(КодСостояния);
Если СтатусДоставки = "Ошибка" Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не удалось получить статус доставки SMS (id: ""%3""):
|%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(РезультатЗапроса), КодСостояния, ИдентификаторСообщения);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
КонецЕсли;
КонецЦикла;
Возврат СтатусыДоставки;
КонецФункции
#КонецОбласти
@@ -180,18 +180,18 @@
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Истина);
Протокол = "http";
Протокол = "https";
Сервер = "beeline.amega-inform.ru";
АдресРесурса = "/sendsms/";
ЗащищенноеСоединение = Неопределено;
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоЛогинуИПаролюA2P" Тогда
Протокол = "https";
Сервер = "a2p-sms-https.beeline.ru";
АдресРесурса = "/public/http/";
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
КонецЕсли;
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
HTTPЗапрос = ОтправкаSMS.ПодготовитьHTTPЗапрос(АдресРесурса, ПараметрыЗапроса);
HTTPОтвет = Неопределено;
@@ -180,9 +180,8 @@
HTTPОтвет = Неопределено;
Попытка
Соединение = Новый HTTPСоединение("lcab.sms-uslugi.ru",,,,
ПолучениеФайловИзИнтернета.ПолучитьПрокси("http"),
60);
Соединение = Новый HTTPСоединение("lcab.sms-uslugi.ru", , , , ПолучениеФайловИзИнтернета.ПолучитьПрокси("http"),
60, ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение());
HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
@@ -279,7 +278,7 @@
Процедура ПриОпределенииНастроек(Настройки) Экспорт
Настройки.АдресОписанияУслугиВИнтернете = "http://sms-uslugi.ru";
Настройки.АдресОписанияУслугиВИнтернете = "https://sms-uslugi.ru";
КонецПроцедуры
@@ -40,7 +40,8 @@
ТипЗначения = ОписаниеЭлементаНастройки.ТипЗначения;
КонецЕсли;
Если ТипЗначения = Новый ОписаниеТипов("Дата") И Не ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементНастройки.ВидСравнения) Тогда
Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") И ТипЗначения = Новый ОписаниеТипов("Дата")
И Не ОтчетыКлиентСервер.ЭтоВидСравненияСписка(ЭлементНастройки.ВидСравнения) Тогда
ТипЗначения = Новый ОписаниеТипов("СтандартнаяДатаНачала");
КонецЕсли;
@@ -3144,7 +3144,8 @@
ЗаголовокКоманды = НСтр("ru = 'Подбор'");
ДобавитьКомандуСписка(Форма, ГруппаЗаголовка, ИмяКоманды, ЗаголовокКоманды, "Подключаемый_Список_Подбор");
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда
Если ТипЗнч(ЭлементНастройки.ТипЗначения) <> Тип("ОписаниеТипов")
Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда
Возврат;
КонецЕсли;
@@ -0,0 +1,17 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 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 @@
КонецФункции
Процедура ПослеЗаписиПродолжение() Экспорт
ИмяПараметра = "СтандартныеПодсистемы.ПодключаемыеКоманды.ПараметрыВыполненияПодключаемойКоманды";
Контекст = ПараметрыПриложения[ИмяПараметра];
ПараметрыПриложения[ИмяПараметра] = Неопределено;
Если Контекст <> Неопределено Тогда
ПродолжитьВыполнениеКоманды(Контекст);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -674,6 +674,8 @@
//
Функция СоздатьАдминистратора(ПользовательИБ = Неопределено) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.СоздатьАдминистратора");
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ТекстОшибки = НСтр("ru = 'Справочник Пользователи недоступен в неразделенном режиме.'");
ВызватьИсключение ТекстОшибки;
@@ -1001,6 +1003,8 @@
//
Функция СвойстваПользователяИБ(Знач ИмяИлиИдентификатор) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.СвойстваПользователяИБ");
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("Пользователи.СвойстваПользователяИБ", "ИмяИлиИдентификатор",
ИмяИлиИдентификатор, Новый ОписаниеТипов("Строка, УникальныйИдентификатор"));
@@ -1045,6 +1049,8 @@
ИмяПроцедуры = "Пользователи.УстановитьСвойстваПользователяИБ";
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(ИмяПроцедуры);
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяИлиИдентификатор",
ИмяИлиИдентификатор, Новый ОписаниеТипов("Строка, УникальныйИдентификатор"));
@@ -1136,8 +1142,15 @@
ТекстОшибкиПароля);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ПользовательИБ.СохраняемоеЗначениеПароля =
ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(ОбновляемыеСвойства.Пароль, Истина);
Если ПользователиСлужебный.ДоступныНастройки8_3_26() Тогда
// АПК:488-выкл Поддержка новых методов платформы (исполняемый код безопасен)
ПользовательИБ.СохраняемоеЗначениеПароля =
Вычислить("ВычислитьСохраняемоеЗначениеПароляПользователя(ОбновляемыеСвойства.Пароль)");
// АПК:488-вкл
Иначе
ПользовательИБ.СохраняемоеЗначениеПароля =
ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(ОбновляемыеСвойства.Пароль, Истина);
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено() Тогда
@@ -1180,7 +1193,10 @@
//
Процедура УдалитьПользователяИБ(Знач ИмяИлиИдентификатор) Экспорт
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("Пользователи.УдалитьПользователяИБ", "ИмяИлиИдентификатор",
ИмяПроцедуры = "Пользователи.УдалитьПользователяИБ";
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(ИмяПроцедуры);
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяПроцедуры, "ИмяИлиИдентификатор",
ИмяИлиИдентификатор, Новый ОписаниеТипов("Строка, УникальныйИдентификатор"));
СвойстваУдаляемогоПользователяИБ = СвойстваПользователяИБ(ИмяИлиИдентификатор);
@@ -1511,6 +1527,8 @@
//
Функция НайтиПоИмени(Знач ИмяДляВхода) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.НайтиПоИмени");
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяДляВхода);
@@ -1543,6 +1561,8 @@
//
Функция НайтиПоИдентификатору(Знач ИдентификаторПользователяИБ) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.НайтиПоИдентификатору");
Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда
Возврат Неопределено;
КонецЕсли;
@@ -1571,6 +1591,8 @@
//
Функция НайтиПоСсылке(Пользователь) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.НайтиПоСсылке");
УстановитьПривилегированныйРежим(Истина);
ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь,
"ИдентификаторПользователяИБ");
@@ -1829,7 +1851,12 @@
КонецПроцедуры
// Возвращает сохраняемое значение пароля для указанного пароля.
// Возвращает сохраняемое значение пароля для указанного пароля по алгоритму SHA-1.
// Начиная с версии платформы 8.3.26 следует использовать метод
// платформы ВычислитьСохраняемоеЗначениеПароляПользователя.
// Для проверки пароля необходимо использовать метод платформы
// ПроверитьСоответствиеПароляПользователяСохраняемомуЗначению
// (сравнение на равно подходит только для сохраняемого значения пароля по алгоритму SHA-1).
//
// Параметры:
// Пароль - Строка - пароль, для которого нужно получить сохраняемое значение.
@@ -1837,6 +1864,18 @@
// Возвращаемое значение:
// Строка - сохраняемое значение пароля.
//
// Пример:
// Свойства = Новый Структура("ТипАлгоритмаХешированияПароля", Null);
// ЗаполнитьЗначенияСвойств(Свойства, ПользователиИнформационнойБазы.ТекущийПользователь());
// Если Свойства.ТипАлгоритмаХешированияПароля <> Null Тогда
// // АПК:488-выкл Поддержка новых методов платформы (исполняемый код безопасен)
// ПарольСовпадает = Вычислить("ПроверитьСоответствиеПароляПользователяСохраняемомуЗначению(Пароль, ПользовательИБ)");
// // АПК:488-вкл
// Иначе
// ПарольСовпадает = ПользовательИБ.СохраняемоеЗначениеПароля
// = Пользователи.СохраняемоеЗначениеСтрокиПароля(Пароль);
// КонецЕсли;
//
Функция СохраняемоеЗначениеСтрокиПароля(Знач Пароль) Экспорт
Возврат ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(Пароль);
@@ -2028,6 +2067,9 @@
Возврат;
КонецЕсли;
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Пользователи.УстановитьПравоОткрытияВнешнихОтчетовИОбработок");
ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования();
ПараметрыАдминистрирования.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина);
СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования);
@@ -2086,6 +2128,8 @@
//
Процедура УстановитьОбщиеНастройкиВхода(ОбщиеСохраняемыеНастройки) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.УстановитьОбщиеНастройкиВхода");
Блокировка = Новый БлокировкаДанных();
Блокировка.Добавить("Константа.НастройкиВходаПользователей");
@@ -2155,6 +2199,8 @@
//
Процедура УстановитьНастройкиВхода(СохраняемыеНастройки, ДляВнешнихПользователей = Ложь) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен("Пользователи.УстановитьНастройкиВхода");
Блокировка = Новый БлокировкаДанных();
Блокировка.Добавить("Константа.НастройкиВходаПользователей");
@@ -2337,6 +2383,9 @@
//
Функция СвойстваПроверяемогоПользователяИБ(Пользователь) Экспорт
ПользователиСлужебный.ПроверитьБезопасныйРежимОтключен(
"Пользователи.СвойстваПроверяемогоПользователяИБ");
СвойстваТекущегоПользовательИБ = ПользователиСлужебныйПовтИсп.СвойстваТекущегоПользователяИБ();
ПользовательИБ = Неопределено;
@@ -256,6 +256,9 @@
//
Процедура УстановитьНачальныеНастройки(Знач ИмяПользователя, ЭтоВнешнийПользователь = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.УстановитьНачальныеНастройки");
НастройкиКлиента = Новый НастройкиКлиентскогоПриложения;
НастройкиКлиента.ОтображатьПанелиНавигацииИДействий = Ложь;
НастройкиКлиента.ОтображатьПанельРазделов = Истина;
@@ -616,6 +619,9 @@
НайденныйПользователь = Неопределено,
ИдентификаторПользователяСервиса = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПользовательПоИдентификаторуСуществует");
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
@@ -662,6 +668,9 @@
//
Функция ПользовательИБПоИдентификатору(ИдентификаторПользователяИБ) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПользовательИБПоИдентификатору");
Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда
Возврат Неопределено;
КонецЕсли;
@@ -751,6 +760,9 @@
Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ, ЭтоВнешнийПользователь = Ложь,
Пользователь = Неопределено, Знач СообщатьВМенеджерСервиса = Истина) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы");
ИнтеграцияПодсистемБСП.ПередЗаписьюПользователяИБ(ПользовательИБ);
СообщатьВМенеджерСервиса = СообщатьВМенеджерСервиса
@@ -923,6 +935,9 @@
//
Процедура СкопироватьГруппыПользователя(Источник, Приемник) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.СкопироватьГруппыПользователя");
ВнешнийПользователь = (ТипЗнч(Источник) = Тип("СправочникСсылка.ВнешниеПользователи"));
Запрос = Новый Запрос;
@@ -1145,6 +1160,40 @@
КонецФункции
// Возвращаемое значение:
// Булево
//
Функция ДоступныНастройки8_3_26() Экспорт
Свойства = Новый Структура("ТипАлгоритмаХешированияПароля", Null);
ЗаполнитьЗначенияСвойств(Свойства, ПользователиИнформационнойБазы.ТекущийПользователь());
Возврат Свойства.ТипАлгоритмаХешированияПароля <> Null;
КонецФункции
// Параметры:
// ИмяПроцедурыИлиФункции - Строка
//
Процедура ПроверитьБезопасныйРежимОтключен(ИмяПроцедурыИлиФункции) Экспорт
Если БезопасныйРежим() = Ложь Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если ПривилегированныйРежим() Тогда
Возврат;
КонецЕсли;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выполнение ""%1"" недоступно в безопасном режиме.'"),
ИмяПроцедурыИлиФункции);
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий подсистем конфигурации.
@@ -1271,6 +1320,9 @@
// См. СтандартныеПодсистемыСервер.ПриОтправкеСерверногоОповещения
Процедура ПриОтправкеСерверногоОповещения(ИмяОповещения, ВариантыПараметров) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПриОтправкеСерверногоОповещения");
ОбновитьДатуПоследнейАктивностиПользователей(ВариантыПараметров);
ОтключитьНеактивныхИПросроченныхПользователей();
@@ -1337,6 +1389,9 @@
Возврат;
КонецЕсли;
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПриСбореПоказателейСтатистикиКонфигурации");
МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга");
АутентификацияСтандартная = 0;
@@ -1445,6 +1500,9 @@
// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных.
Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПослеЗагрузкиДанных");
// Сброс решения, принятого администратором в форме "Предупреждение безопасности".
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования();
@@ -1721,6 +1779,9 @@
// См. ОбменДаннымиПереопределяемый.ПриНастройкеПодчиненногоУзлаРИБ.
Процедура ПриНастройкеПодчиненногоУзлаРИБ() Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПриНастройкеПодчиненногоУзлаРИБ");
ОчиститьИдентификаторыНесуществующихПользователейИБ();
КонецПроцедуры
@@ -1842,6 +1903,9 @@
//
Функция НастройкиВхода() Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.НастройкиВхода");
Настройки = Новый Структура;
Настройки.Вставить("Общие", Пользователи.НовоеОписаниеОбщихНастроекВхода());
Настройки.Вставить("Пользователи", Пользователи.НовоеОписаниеНастроекВхода());
@@ -1930,6 +1994,9 @@
//
Процедура ЗаполнитьОбщиеНастройкиИзОбщейПолитикиПаролей(Настройки)
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗаполнитьОбщиеНастройкиИзОбщейПолитикиПаролей");
НастройкиБлокировки = БлокировкаАутентификации.ПолучитьНастройки();
Настройки.ДлительностьБлокировкиВводаПароля =
@@ -1945,6 +2012,9 @@
//
Процедура ОбновитьОбщуюПолитикуПаролей(Настройки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОбновитьОбщуюПолитикуПаролей");
НастройкиБлокировки = БлокировкаАутентификации.ПолучитьНастройки();
Записать = Ложь;
@@ -1975,6 +2045,9 @@
//
Процедура ЗаполнитьНастройкиИзПолитикиПаролейПользователей(Настройки)
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗаполнитьНастройкиИзПолитикиПаролейПользователей");
СекундВДне = 24*60*60;
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
@@ -2007,6 +2080,9 @@
//
Процедура ОбновитьПолитикуПаролейПользователей(Настройки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОбновитьПолитикуПаролейПользователей");
СекундВДне = 24*60*60;
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
@@ -2065,6 +2141,9 @@
//
Процедура ЗаполнитьНастройкиИзПолитикиПаролейВнешнихПользователей(Настройки)
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗаполнитьНастройкиИзПолитикиПаролейВнешнихПользователей");
ПолитикаПаролей = ПолитикиПаролейПользователей.НайтиПоИмени(
ИмяПолитикиПаролейВнешнихПользователей());
@@ -2104,6 +2183,9 @@
//
Процедура ОбновитьПолитикуПаролейВнешнихПользователей(Настройки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОбновитьПолитикуПаролейВнешнихПользователей");
ИмяПолитики = ИмяПолитикиПаролейВнешнихПользователей();
ПолитикаПаролей = ПолитикиПаролейПользователей.НайтиПоИмени(ИмяПолитики);
@@ -2165,6 +2247,9 @@
//
Процедура УстановитьПолитикуПаролей(ПользовательИБ, ЭтоВнешнийПользователь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.УстановитьПолитикуПаролей");
ИмяПолитикиПаролей = ИмяПолитикиПаролей(ЭтоВнешнийПользователь);
Если ПользовательИБ.ИмяПолитикиПаролей <> ИмяПолитикиПаролей Тогда
ПользовательИБ.ИмяПолитикиПаролей = ИмяПолитикиПаролей;
@@ -2197,6 +2282,9 @@
//
Процедура УстановитьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ(Показывать) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.УстановитьРеквизитПоказыватьВСпискеВыбораУВсехПользователейИБ");
Скрытые = Новый Соответствие;
Если Показывать Тогда
@@ -2432,6 +2520,9 @@
//
Функция ВозможноИзменитьПароль(Пользователь, ДополнительныеПараметры = Неопределено) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ВозможноИзменитьПароль");
Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда
ДополнительныеПараметры = Новый Структура;
КонецЕсли;
@@ -2598,6 +2689,9 @@
//
Функция ОбработатьНовыйПароль(Параметры) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОбработатьНовыйПароль");
НовыйПароль = Параметры.НовыйПароль;
СтарыйПароль = Параметры.СтарыйПароль;
@@ -2840,7 +2934,7 @@
КонецФункции
// Возвращает сохраняемое значение пароля для указанного пароля.
// Возвращает сохраняемое значение пароля для указанного пароля по алгоритму SHA-1.
//
// Параметры:
// Пароль - Строка - пароль для которого нужно получить сохраняемое значение.
@@ -2852,6 +2946,9 @@
//
Функция СохраняемоеЗначениеСтрокиПароля(Пароль, ДляЗаписи = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля");
Если Пароль = "" И Не ДляЗаписи Тогда
СохраняемоеЗначениеПароля = "";
Иначе
@@ -2885,6 +2982,9 @@
//
Функция СтарыйПарольСовпадаетССохраненным(Пароль, ИдентификаторПользователяИБ) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.СтарыйПарольСовпадаетССохраненным");
Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда
Возврат Ложь;
КонецЕсли;
@@ -2896,8 +2996,16 @@
Возврат Ложь;
КонецЕсли;
Возврат ХешСуммаПароляСовпадает(СохраняемоеЗначениеСтрокиПароля(Пароль),
ПользовательИБ.СохраняемоеЗначениеПароля);
Если ДоступныНастройки8_3_26() Тогда
// АПК:488-выкл Поддержка новых методов платформы (исполняемый код безопасен)
Результат = Вычислить("ПроверитьСоответствиеПароляПользователяСохраняемомуЗначению(Пароль, ПользовательИБ)");
// АПК:488-вкл
Иначе
Результат = ХешСуммаПароляСовпадает(СохраняемоеЗначениеСтрокиПароля(Пароль),
ПользовательИБ.СохраняемоеЗначениеПароля);
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -3085,6 +3193,9 @@
ПараметрыОбработки,
УдалениеПользователяИзСправочника = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.НачатьОбработкуПользователяИБ");
ПараметрыОбработки = Новый Структура;
ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства;
@@ -3366,6 +3477,9 @@
//
Процедура ЗавершитьОбработкуПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ");
ПроверитьИзмененияРеквизитовПользователя(ПользовательОбъект, ПараметрыОбработки);
// ПередЗавершениемОбработкиПользователяИБ - поддержка модели сервиса.
@@ -3427,6 +3541,9 @@
//
Функция ХранимыеСвойстваПользователяИБ(ОписаниеПользователя, ВходВПрограммуРазрешен = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ХранимыеСвойстваПользователяИБ");
Свойства = Новый Структура;
Свойства.Вставить("ВходВПрограммуРазрешен", Ложь);
Свойства.Вставить("АутентификацияСтандартная", Ложь);
@@ -4085,6 +4202,9 @@
//
Процедура ОбновитьРолиВнешнихПользователей(Знач МассивВнешнихПользователей = Неопределено) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОбновитьРолиВнешнихПользователей");
Если ЗапретРедактированияРолей() Тогда
// Роли устанавливаются другим механизмом, например, механизмом подсистемы УправлениеДоступом.
Возврат;
@@ -4459,6 +4579,9 @@
//
Процедура СкопироватьНастройкиПользователя(ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.СкопироватьНастройкиПользователя");
// Перенос пользовательских настроек отчетов.
СкопироватьНастройки(ХранилищеПользовательскихНастроекОтчетов, ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить);
// Перенос настроек внешнего вида.
@@ -4493,6 +4616,9 @@
Функция ПеремещениеПользователяВНовуюГруппу(МассивПользователей, ГруппаИсточник,
ГруппаПриемник, Перемещение) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПеремещениеПользователяВНовуюГруппу");
Если ГруппаПриемник = Неопределено
Или ГруппаПриемник = ГруппаИсточник Тогда
Возврат Неопределено;
@@ -4612,6 +4738,9 @@
Процедура ДобавитьПользователяВГруппу(ГруппаВладелец, ПользовательСсылка, ИмяКолонкиСостава, Добавлен) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ДобавитьПользователяВГруппу");
Если ГруппаВладелец = Справочники.ГруппыПользователей.ВсеПользователи
Или ГруппаВладелец = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
Возврат;
@@ -4656,6 +4785,9 @@
Процедура УдалитьПользователяИзГруппы(ГруппаВладелец, ПользовательСсылка, ИмяКолонкиСостава, Удален = Ложь) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.УдалитьПользователяИзГруппы");
Если ГруппаВладелец = Справочники.ГруппыПользователей.ВсеПользователи
Или ГруппаВладелец = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
Возврат;
@@ -4830,6 +4962,9 @@
Процедура ЗаполнитьПочтуДляВосстановленияПароляУПользователейВФоне(ДополнительныеПараметры, АдресВоВременномХранилище) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗаполнитьПочтуДляВосстановленияПароляУПользователейВФоне");
СписокПользователей = ПользователиДляВключенияВосстановленияПароля();
Для каждого ПользовательСсылка Из СписокПользователей Цикл
ОбновитьПочтуДляВосстановленияПароля(ПользовательСсылка);
@@ -4914,6 +5049,9 @@
Функция ПользователиДляВключенияВосстановленияПароля() Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПользователиДляВключенияВосстановленияПароля");
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
Возврат Новый Массив;
КонецЕсли;
@@ -4955,6 +5093,9 @@
Функция ПользователиДляВключенияВосстановленияПароляСУчетомВнешнихПользователей(ПользователиИБСПочтой)
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПользователиДляВключенияВосстановленияПароляСУчетомВнешнихПользователей");
ТипыВнешнихПользователей = Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы();
Если ТипыВнешнихПользователей.Количество() = 0 Тогда
@@ -5073,6 +5214,9 @@
Функция ВнешниеПользователиДляВключенияВосстановленияПароля() Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ВнешниеПользователиДляВключенияВосстановленияПароля");
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда
Возврат Новый Массив;
КонецЕсли;
@@ -5163,6 +5307,9 @@
Функция ОбновитьПочтуДляВосстановленияПароля(ПользовательСсылка, ОбъектАвторизации = Неопределено) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОбновитьПочтуДляВосстановленияПароля");
Результат = Новый Структура;
Результат.Вставить("Статус", "ОбновлениеНеТребуется");
Результат.Вставить("ТекстОшибки", "");
@@ -5687,6 +5834,9 @@
//
Процедура ЗаполнитьСпискиНастроек(Параметры, АдресХранилища) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ЗаполнитьСпискиНастроек");
Если Параметры.ПользовательИнформационнойБазы <> ИмяПользователя()
И Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда
@@ -5713,6 +5863,9 @@
// См. ПользователиПереопределяемый.ПриПолученииПрочихНастроек
Процедура ПриПолученииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПриПолученииПрочихНастроекПользователя");
ИнтеграцияПодсистемБСП.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки);
ПользователиПереопределяемый.ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки);
@@ -5720,6 +5873,9 @@
Процедура ПриСохраненииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПриСохраненииПрочихНастроекПользователя");
ИнтеграцияПодсистемБСП.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки);
ПользователиПереопределяемый.ПриСохраненииПрочихНастроек(СведенияОПользователе, Настройки);
@@ -5727,6 +5883,9 @@
Процедура ПриУдаленииПрочихНастроекПользователя(СведенияОПользователе, Настройки) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ПриУдаленииПрочихНастроекПользователя");
ИнтеграцияПодсистемБСП.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки);
ПользователиПереопределяемый.ПриУдаленииПрочихНастроек(СведенияОПользователе, Настройки);
@@ -7706,6 +7865,9 @@
//
Функция ОшибкаСоответствияПароляТребованиям(Пароль, ПользовательИБ) Экспорт
ПроверитьБезопасныйРежимОтключен(
"ПользователиСлужебный.ОшибкаСоответствияПароляТребованиям");
ПолитикаПаролей = ПолитикиПаролейПользователей.НайтиПоИмени(ПользовательИБ.ИмяПолитикиПаролей);
Ошибки = ПолитикиПаролейПользователей.ПроверитьСоответствиеПароляПолитике(Пароль,
@@ -1388,7 +1388,7 @@
КонецПроцедуры
Функция ИдентификаторКлассификатора()
Функция ИдентификаторКлассификатора() Экспорт
Возврат "Countries";
КонецФункции
@@ -3172,53 +3172,9 @@
//
Функция ТаблицаКлассификатора() Экспорт
Классификатор = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.РаботаСКлассификаторами") Тогда
ИдентификаторКлассификатора = ИдентификаторКлассификатора();
МодульРаботаСКлассификаторами = ОбщегоНазначения.ОбщийМодуль("РаботаСКлассификаторами");
Идентификаторы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторКлассификатора);
Результат = МодульРаботаСКлассификаторами.ПолучитьФайлыКлассификаторов(Идентификаторы);
Если ПустаяСтрока(Результат.КодОшибки) И Результат.ДанныеКлассификаторов <> Неопределено Тогда
ОписаниеКлассификатора = Результат.ДанныеКлассификаторов.Найти(ИдентификаторКлассификатора, "Идентификатор");
Если ОписаниеКлассификатора <> Неопределено Тогда
Классификатор = ПолучитьИзВременногоХранилища(ОписаниеКлассификатора.АдресФайла);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Классификатор = Неопределено Тогда
Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор");
КлассификаторXML = Макет.ПолучитьТекст();
Иначе
НаборСтрок = Новый Массив;
ЧтениеЧасти = Новый ЧтениеДанных(Классификатор.ОткрытьПотокДляЧтения());
Пока Не ЧтениеЧасти.ЧтениеЗавершено Цикл
НаборСтрок.Добавить(ЧтениеЧасти.ПрочитатьСтроку());
КонецЦикла;
КлассификаторXML = СтрСоединить(НаборСтрок, ЧтениеЧасти.РазделительСтрок);
КонецЕсли;
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(КлассификаторXML);
ТаблицаСтран = СериализаторXDTO.ПрочитатьXML(Чтение); // ТаблицаЗначений
// Старые версии классификаторов не содержат колонку МеждународноеНаименование
Если ТаблицаСтран.Колонки.Найти("МеждународноеНаименование") = Неопределено Тогда
ТаблицаСтран.Колонки.Добавить("МеждународноеНаименование", ОбщегоНазначения.ОписаниеТипаСтрока(100));
КонецЕсли;
Возврат ТаблицаСтран;
Результат = РаботаСАдресамиПовтИсп.СтраныМира();
СтраныМира = Результат.СтраныМира.Скопировать();
Возврат СтраныМира;
КонецФункции
Loaded 100 of 279 files, more files were not shown because too many files have changed in this diff. Show more