3_1_2_396

This commit is contained in:
Компания 1С committed 2020-05-28 22:48:00 +03:00
1 parent 0b08705d91
commit b69abc958d
49 files changed
+1867 -859

No files matched your search

@@ -151,6 +151,45 @@
КонецФункции
// Структура - со свойствами:
// * Расширения - Структура со свойствами:
// * Добавлено - Число
// * Удалено - Число
// * Изменено - Число
// * СписокНовых - Массив из Строка
// * Исправления - Структура со свойствами:
// * Добавлено - Число
// * Удалено - Число
// * Изменено - Число
// * СписокНовых - Массив из Строка
//
Функция ДинамическиИзмененныеРасширения() Экспорт
УстановитьПривилегированныйРежим(Истина);
Если ПараметрыСеанса.УстановленныеРасширения.Свойство("РасширенияНедоступны") Тогда
Возврат Неопределено;
КонецЕсли;
УстановленныеРасширения = УстановленныеРасширения();
Результат = Новый Структура;
Результат.Вставить("Расширения", Неопределено);
Результат.Вставить("Исправления", Неопределено);
Если ПараметрыСеанса.УстановленныеРасширения.ИсправленияСостояние <> УстановленныеРасширения.ИсправленияСостояние Тогда
Изменения = ИзмененияВСоставеРасширений(ПараметрыСеанса.УстановленныеРасширения.Исправления, УстановленныеРасширения.Исправления);
Результат.Исправления = Изменения;
КонецЕсли;
Если ПараметрыСеанса.УстановленныеРасширения.ОсновныеСостояние <> УстановленныеРасширения.ОсновныеСостояние Тогда
Изменения = ИзмененияВСоставеРасширений(ПараметрыСеанса.УстановленныеРасширения.ОсновныеСостояние, УстановленныеРасширения.ОсновныеСостояние);
Результат.Расширения = Изменения;
КонецЕсли;
Возврат Результат;
КонецФункции
// Добавляет сведения, что сеанс начал использование версии метаданных.
Процедура ЗарегистрироватьИспользованиеВерсииРасширений() Экспорт
@@ -871,6 +910,52 @@
КонецПроцедуры
// Для функции ДинамическиИзмененныеРасширения.
Функция ИзмененияВСоставеРасширений(ТекущийСостав, НовыйСостав)
СоответствиеНовых = Новый Соответствие;
Для Каждого Расширение Из СтрРазделить(НовыйСостав, Символы.ПС) Цикл
Если СтрНачинаетсяС(Расширение, "#") Или Не ЗначениеЗаполнено(Расширение) Тогда
Продолжить;
КонецЕсли;
ИмяИХеш = СтрРазделить(Расширение, " ");
СоответствиеНовых.Вставить(ИмяИХеш[0], ИмяИХеш[1]);
КонецЦикла;
СоответствиеТекущих = Новый Соответствие;
Для Каждого Расширение Из СтрРазделить(ТекущийСостав, Символы.ПС) Цикл
Если СтрНачинаетсяС(Расширение, "#") Или Не ЗначениеЗаполнено(Расширение) Тогда
Продолжить;
КонецЕсли;
ИмяИХеш = СтрРазделить(Расширение, " ");
СоответствиеТекущих.Вставить(ИмяИХеш[0], ИмяИХеш[1]);
КонецЦикла;
Добавлено = 0;
Изменено = 0;
СписокНовых = Новый Массив;
Для Каждого НовоеРасширение Из СоответствиеНовых Цикл
НайденныйЭлемент = СоответствиеТекущих[НовоеРасширение.Ключ];
Если НайденныйЭлемент = Неопределено Тогда
Добавлено = Добавлено + 1;
СписокНовых.Добавить(НовоеРасширение.Ключ);
ИначеЕсли НайденныйЭлемент <> НовоеРасширение.Значение Тогда
Изменено = Изменено + 1;
СоответствиеТекущих.Удалить(НовоеРасширение.Ключ);
Иначе
СоответствиеТекущих.Удалить(НовоеРасширение.Ключ);
КонецЕсли;
КонецЦикла;
Удалено = СоответствиеТекущих.Количество();
Результат = Новый Структура;
Результат.Вставить("Добавлено", Добавлено);
Результат.Вставить("Изменено", Изменено);
Результат.Вставить("Удалено", Удалено);
Результат.Вставить("СписокНовых", СписокНовых);
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецЕсли
@@ -879,7 +879,7 @@
КлючОбъектаМетаданных = Объект.КлючОбъектаМетаданных.Получить();
Если КлючОбъектаМетаданных = Неопределено
ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных
И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
<> (КлючОбъектаМетаданных = Тип("Неопределено")) Тогда
Объект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя));
КонецЕсли;
@@ -1626,7 +1626,7 @@
ИЛИ Свойства.ПометкаУдаления
ИЛИ КлючОбъектаМетаданных = Неопределено
ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных
И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
<> (КлючОбъектаМетаданных = Тип("Неопределено")) Тогда
Если ВРег(Свойства.ПолноеИмя) <> ВРег(СвойстваОбъекта.ПолноеИмя) Тогда
ЕстьКритичныеИзменения = Истина;
@@ -1642,7 +1642,7 @@
Если КлючОбъектаМетаданных = Неопределено
ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных
И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
<> (КлючОбъектаМетаданных = Тип("Неопределено")) Тогда
Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя);
КонецЕсли;
@@ -16,6 +16,50 @@
<segments>Ошибки</segments>
</dataPath>
<titleLocation>None</titleLocation>
<items xsi:type="form:FormField">
<name>ОшибкиКартинка</name>
<id>66</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>68</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОшибкиКартинкаКонтекстноеМеню</name>
<id>67</id>
<autoFill>true</autoFill>
</contextMenu>
<type>PictureField</type>
<editMode>Auto</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>48</id>
@@ -495,7 +539,7 @@
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<width>90</width>
<width>55</width>
<height>20</height>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
@@ -576,6 +620,37 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>Картинка</name>
<title>
<key>ru</key>
<value>Картинка</value>
</title>
<id>4</id>
<valueType>
<types>Picture</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ОписаниеСЗаголовком</name>
<id>5</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>ОписаниеОшибки</name>
@@ -17,7 +17,7 @@
Если ШиринаЗаголовка > 80 Тогда
ШиринаЗаголовка = 80;
КонецЕсли;
Если ШиринаЗаголовка > 35 Тогда
Если ШиринаЗаголовка > Ширина Тогда
Ширина = ШиринаЗаголовка;
КонецЕсли;
@@ -29,10 +29,16 @@
ДобавитьОшибки(ОшибкаНаКлиенте);
ДобавитьОшибки(ОшибкаНаСервере, Истина);
Элементы.ОшибкиКартинка.Видимость =
Ошибки.НайтиСтроки(Новый Структура("ОшибкаНаСервере", Ложь)).Количество() <> 0
И Ошибки.НайтиСтроки(Новый Структура("ОшибкаНаСервере", Истина)).Количество() <> 0;
Элементы.Ошибки.ВысотаВСтрокахТаблицы = Мин(Ошибки.Количество(), 3);
Если ЗначениеЗаполнено(ОшибкаНаКлиенте)
И ЗначениеЗаполнено(ОшибкаНаСервере) Тогда
И ЗначениеЗаполнено(ОшибкаНаКлиенте.ОписаниеОшибки)
И ЗначениеЗаполнено(ОшибкаНаСервере)
И ЗначениеЗаполнено(ОшибкаНаСервере.ОписаниеОшибки) Тогда
ОписаниеОшибки = НСтр("ru = 'НА СЕРВЕРЕ:'")
+ Символы.ПС + Символы.ПС + ОшибкаНаСервере.ОписаниеОшибки
@@ -111,7 +117,7 @@
ПараметрыОшибки = Новый Структура;
ПараметрыОшибки.Вставить("ЗаголовокПредупреждения", Заголовок);
ПараметрыОшибки.Вставить(?(ТекущиеДанные.ОшибкаНаСервере,
"ТекстОшибкиСервер", "ТекстОшибкиКлиент"), ТекущиеДанные.Причина);
"ТекстОшибкиСервер", "ТекстОшибкиКлиент"), ТекущиеДанные.ОписаниеСЗаголовком);
ОткрытьФорму("ОбщаяФорма.РасширенноеПредставлениеОшибки", ПараметрыОшибки, ЭтотОбъект);
@@ -149,7 +155,7 @@
ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
Если ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда
ХранилищеСистемныхНастроек.Удалить("ОбщаяФорма.Вопрос", "", ИмяПользователя);
ХранилищеСистемныхНастроек.Удалить(ИмяФормы, "", ИмяПользователя);
КонецЕсли;
КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
@@ -192,8 +198,8 @@
Инструкция = Истина;
КонецЕсли;
Если Ошибка.Свойство("Расширение")
И Ошибка.Расширение = Истина Тогда
Если Ошибка.Свойство("НетРасширения")
И Ошибка.НетРасширения = Истина Тогда
Расширение = Истина;
КонецЕсли;
@@ -201,32 +207,50 @@
КонецПроцедуры
&НаСервере
Процедура ДобавитьОшибки(ОписаниеОшибки, ОшибкиНаСервере = Ложь)
Процедура ДобавитьОшибки(ОписаниеОшибок, ОшибкаНаСервере = Ложь)
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Если Не ЗначениеЗаполнено(ОписаниеОшибок) Тогда
Возврат;
КонецЕсли;
Если ОписаниеОшибок.Свойство("Ошибки")
И ТипЗнч(ОписаниеОшибок.Ошибки) = Тип("Массив")
И ОписаниеОшибок.Ошибки.Количество() > 0 Тогда
Если ОписаниеОшибки.Свойство("Ошибки")
И ТипЗнч(ОписаниеОшибки.Ошибки) = Тип("Массив")
И ОписаниеОшибки.Ошибки.Количество() > 0 Тогда
Для Каждого СвойстваОшибки Из ОписаниеОшибок.Ошибки Цикл
Для Каждого Ошибка Из ОписаниеОшибки.Ошибки Цикл
СтрокаОшибки = Ошибки.Добавить();
СтрокаОшибки.Причина = Ошибка.Описание;
СтрокаОшибки.Подробнее = НСтр("ru = 'Подробнее'") + "...";
СтрокаОшибки.ОшибкаНаСервере = ОшибкиНаСервере;
КонецЦикла;
Иначе
ОписаниеСЗаголовком = "";
Если ЗначениеЗаполнено(СвойстваОшибки.ЗаголовокОшибки) Тогда
ОписаниеСЗаголовком = СвойстваОшибки.ЗаголовокОшибки + Символы.ПС;
ИначеЕсли ЗначениеЗаполнено(ОписаниеОшибок.ЗаголовокОшибки) Тогда
ОписаниеСЗаголовком = ОписаниеОшибок.ЗаголовокОшибки + Символы.ПС;
КонецЕсли;
Описание = "";
Если ЗначениеЗаполнено(СвойстваОшибки.Программа) Тогда
Описание = Описание + Строка(СвойстваОшибки.Программа) + ":" + Символы.ПС;
КонецЕсли;
Описание = Описание + СвойстваОшибки.Описание;
ОписаниеСЗаголовком = ОписаниеСЗаголовком + Описание;
СтрокаОшибки = Ошибки.Добавить();
СтрокаОшибки.Причина = ОписаниеОшибки.ОписаниеОшибки;
СтрокаОшибки.Причина = Описание;
СтрокаОшибки.ОписаниеСЗаголовком = ОписаниеСЗаголовком;
СтрокаОшибки.Подробнее = НСтр("ru = 'Подробнее'") + "...";
СтрокаОшибки.ОшибкаНаСервере = ОшибкиНаСервере;
СтрокаОшибки.ОшибкаНаСервере = ОшибкаНаСервере;
СтрокаОшибки.Картинка = ?(ОшибкаНаСервере,
БиблиотекаКартинок.КомпьютерСервер,
БиблиотекаКартинок.КомпьютерКлиент);
КонецЕсли;
КонецЦикла;
Иначе
СтрокаОшибки = Ошибки.Добавить();
СтрокаОшибки.Причина = ОписаниеОшибок.ОписаниеОшибки;
СтрокаОшибки.ОписаниеСЗаголовком = ОписаниеОшибок.ОписаниеОшибки;
СтрокаОшибки.Подробнее = НСтр("ru = 'Подробнее'") + "...";
СтрокаОшибки.ОшибкаНаСервере = ОшибкаНаСервере;
СтрокаОшибки.Картинка = ?(ОшибкаНаСервере,
БиблиотекаКартинок.КомпьютерСервер,
БиблиотекаКартинок.КомпьютерКлиент);
КонецЕсли;
КонецПроцедуры
@@ -167,7 +167,10 @@
Процедура СертификатыНедоступныНаКлиентеНадписьНажатие(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
НСтр("ru = 'Сертификаты на компьютере'"), "", ОшибкаПолученияСертификатовНаКлиенте, Новый Структура);
НСтр("ru = 'Сертификаты недоступны на компьютере'"),
"",
ОшибкаПолученияСертификатовНаКлиенте,
Новый Структура);
КонецПроцедуры
@@ -175,7 +178,10 @@
Процедура СертификатыНедоступныНаСервереНадписьНажатие(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
НСтр("ru = 'Сертификаты на сервере'"), "", ОшибкаПолученияСертификатовНаСервере, Новый Структура);
НСтр("ru = 'Сертификаты недоступны на сервере'"),
"",
ОшибкаПолученияСертификатовНаСервере,
Новый Структура);
КонецПроцедуры
@@ -636,7 +642,7 @@
Если ТипЗнч(РезультатПоиска) <> Тип("СертификатКриптографии") Тогда
Если РезультатПоиска.Свойство("СертификатНеНайден") Тогда
Контекст.Результат.ОписаниеОшибки = НСтр("ru = 'Сертификат не найден на компьютере (возможно удален).'");
Контекст.Результат.ОписаниеОшибки = НСтр("ru = 'Сертификат не установлен на компьютере (возможно удален).'");
Иначе
Контекст.Результат.ОписаниеОшибки = РезультатПоиска.ОписаниеОшибки;
КонецЕсли;
@@ -126,7 +126,10 @@
Процедура СертификатыНедоступныНаКлиентеНадписьНажатие(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
НСтр("ru = 'Сертификаты на компьютере'"), "", ОшибкаПолученияСертификатовНаКлиенте, Новый Структура);
НСтр("ru = 'Сертификаты недоступны на компьютере'"),
"",
ОшибкаПолученияСертификатовНаКлиенте,
Новый Структура);
КонецПроцедуры
@@ -134,7 +137,10 @@
Процедура СертификатыНедоступныНаСервереНадписьНажатие(Элемент)
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
НСтр("ru = 'Сертификаты на сервере'"), "", ОшибкаПолученияСертификатовНаСервере, Новый Структура);
НСтр("ru = 'Сертификаты недоступны на сервере'"),
"",
ОшибкаПолученияСертификатовНаСервере,
Новый Структура);
КонецПроцедуры
@@ -243,7 +249,7 @@
Контекст = Новый Структура;
Если Результат.Свойство("СертификатНеНайден") Тогда
Контекст.Вставить("ОписаниеОшибки", НСтр("ru = 'Сертификат не найден на компьютере (возможно удален).'"));
Контекст.Вставить("ОписаниеОшибки", НСтр("ru = 'Сертификат не установлен на компьютере (возможно удален).'"));
Иначе
Контекст.Вставить("ОписаниеОшибки", Результат.ОписаниеОшибки);
КонецЕсли;
@@ -447,10 +453,12 @@
КонецЕсли;
Элементы.ГруппаСертификатыНедоступныНаКлиенте.Видимость =
ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаКлиенте);
ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаКлиенте)
И ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаКлиенте.ОписаниеОшибки);
Элементы.ГруппаСертификатыНедоступныНаСервере.Видимость =
ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаСервере);
ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаСервере)
И ЗначениеЗаполнено(ОшибкаПолученияСертификатовНаСервере.ОписаниеОшибки);
КонецПроцедуры
@@ -3629,6 +3629,7 @@
<dataPath xsi:type="form:DataPath">
<segments>Пароль</segments>
</dataPath>
<defaultItem>true</defaultItem>
<handlers>
<event>OnChange</event>
<name>ПарольПриИзменении</name>
@@ -589,6 +589,7 @@
КонецЕсли;
ПараметрыСоздания = ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи;
ПараметрыСоздания.ПоказатьОшибку = Ложь;
// Проверка данных сертификата.
@@ -1110,9 +1111,8 @@
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = Программа;
ПараметрыСоздания.АлгоритмПодписи = АлгоритмПодписи;
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("", ПараметрыСоздания);
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("ПроверкаСертификата", ПараметрыСоздания);
ОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
@@ -1191,26 +1191,29 @@
&НаСервере
Процедура ПроверитьПодписьНаСервере(МенеджерКриптографии, ДанныеСертификата, ДанныеПодписи)
ОписаниеОшибки = "";
Попытка
МенеджерКриптографии.ПроверитьПодпись(ДанныеСертификата, ДанныеПодписи);
Исключение
ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
УстановитьЭлемент(ЭтотОбъект, "ПроверкаПодписи", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
КонецПроцедуры
&НаСервере
Функция ПроверитьШифрованиеНаСервере(МенеджерКриптографии, ДанныеСертификата, СертификатКриптографии, ОписаниеОшибки)
Попытка
ЗашифрованныеДанные = МенеджерКриптографии.Зашифровать(ДанныеСертификата, СертификатКриптографии);
Исключение
ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
УстановитьЭлемент(ЭтотОбъект, "Шифрование", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Возврат ЗашифрованныеДанные;
КонецФункции
&НаСервере
@@ -1236,7 +1239,6 @@
ОписаниеОшибки = "";
ЭтоПредупреждение = Ложь;
Попытка
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("Сертификат", Сертификат);
ПараметрыВыполнения.Вставить("Проверка", ЭлементСписка.Имя);
@@ -1248,6 +1250,8 @@
ЭлектроннаяПодписьПереопределяемый.ПриДополнительнойПроверкеСертификата(ПараметрыВыполнения);
ОписаниеОшибки = ПараметрыВыполнения.ОписаниеОшибки;
ЭтоПредупреждение = ПараметрыВыполнения.ЭтоПредупреждение;
Исключение
ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
@@ -1268,11 +1268,11 @@
<Value>Macao</Value>
</row>
<row>
<Value>РЕСПУБЛИКА МАКЕДОНИЯ</Value>
<Value>СЕВЕРНАЯ МАКЕДОНИЯ</Value>
<Value>MK</Value>
<Value>MKD</Value>
<Value>807</Value>
<Value>Республика Македония</Value>
<Value>Республика Северная Македония</Value>
<Value>false</Value>
<Value>false</Value>
<Value>North Macedonia</Value>
@@ -44,8 +44,10 @@
Элементы.ПодписиКомментарий.Видимость = Ложь;
КонецЕсли;
МенеджерКриптографииНаСервереОписаниеОшибки = Новый Структура;
Если ЭлектроннаяПодпись.ПроверятьЭлектронныеПодписиНаСервере()
Или ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Или ЭлектроннаяПодпись.СоздаватьЭлектронныеПодписиНаСервере() Тогда
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ОписаниеОшибки = Новый Структура;
@@ -0,0 +1,326 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form">
<title>
<key>ru</key>
<value>Установлено обновление программы</value>
</title>
<items xsi:type="form:FormGroup">
<name>Содержимое</name>
<id>13</id>
<items xsi:type="form:Decoration">
<name>Картинка</name>
<id>10</id>
<title>
<key>ru</key>
<value>Картинка</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>КартинкаРасширеннаяПодсказка</name>
<id>12</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>КартинкаКонтекстноеМеню</name>
<id>11</id>
<autoFill>true</autoFill>
</contextMenu>
<width>4</width>
<autoMaxWidth>true</autoMaxWidth>
<height>2</height>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:PictureDecorationExtInfo">
<picture xsi:type="core:PictureRef">
<picture>StdPicture.DialogInformation</picture>
</picture>
<pictureSize>Proportionally</pictureSize>
<fileDragMode>AsFileRef</fileDragMode>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>Текст</name>
<id>1</id>
<title>
<key>ru</key>
<value>Версия программы обновлена (внесены изменения в конфигурацию информационной базы).
Для дальнейшей работы рекомендуется перезапустить программу</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ТекстРасширеннаяПодсказка</name>
<id>3</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТекстКонтекстноеМеню</name>
<id>2</id>
<autoFill>true</autoFill>
</contextMenu>
<formatted>true</formatted>
<type>Label</type>
<autoMaxHeight>true</autoMaxHeight>
<skipOnInput>true</skipOnInput>
<groupVerticalAlign>Center</groupVerticalAlign>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<handlers>
<event>URLProcessing</event>
<name>ТекстОбработкаНавигационнойСсылки</name>
</handlers>
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Содержимое</value>
</title>
<extendedTooltip>
<name>СодержимоеРасширеннаяПодсказка</name>
<id>14</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:Button">
<name>ФормаПерезапустить</name>
<id>4</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаПерезапуститьРасширеннаяПодсказка</name>
<id>5</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.Перезапустить</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаНапомнитьПозже</name>
<id>6</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<defaultItem>true</defaultItem>
<extendedTooltip>
<name>ФормаНапомнитьПозжеРасширеннаяПодсказка</name>
<id>7</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.НапомнитьПозже</commandName>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаБольшеНеПоказывать</name>
<id>8</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаБольшеНеПоказыватьРасширеннаяПодсказка</name>
<id>9</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.БольшеНеНапоминать</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<horizontalAlign>Right</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<windowOpeningMode>LockOwner</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>БольшеНеПоказывать</name>
<id>1</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПараметрыПроверки</name>
<id>2</id>
<valueType/>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ОписаниеНовыхПатчей</name>
<id>3</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Перезапустить</name>
<title>
<key>ru</key>
<value>Перезапустить</value>
</title>
<id>1</id>
<toolTip>
<key>ru</key>
<value>Перезапустить</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>Перезапустить</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>НапомнитьПозже</name>
<title>
<key>ru</key>
<value>Напомнить позже</value>
</title>
<id>2</id>
<toolTip>
<key>ru</key>
<value>Напомнить позже</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>НапомнитьПозже</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>БольшеНеНапоминать</name>
<title>
<key>ru</key>
<value>Больше не напоминать</value>
</title>
<id>3</id>
<toolTip>
<key>ru</key>
<value>Больше не напоминать</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>БольшеНеНапоминать</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
</form:Form>
@@ -0,0 +1,98 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2020, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПараметрыПроверки = Справочники.ВерсииРасширений.ДинамическиИзмененныеРасширения();
ПараметрыПроверки.Вставить("КонфигурацияБазыДанныхИзмененаДинамически", КонфигурацияБазыДанныхИзмененаДинамически());
Сообщение = СтандартныеПодсистемыСервер.ТекстСообщенияПриДинамическомОбновлении(ПараметрыПроверки);
Если ПараметрыПроверки.Исправления <> Неопределено И ПараметрыПроверки.Исправления.СписокНовых.Количество() > 0 Тогда
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПараметрыМетода = Новый Массив;
ПараметрыМетода.Добавить(АдресХранилища);
ПараметрыМетода.Добавить(ПараметрыПроверки.Исправления.СписокНовых);
ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(
"ОбновлениеКонфигурации.ОписанияНовыхПатчей",
ПараметрыМетода);
ФоновоеЗадание.ОжидатьЗавершенияВыполнения(Неопределено);
ОписаниеНовыхПатчей = ПолучитьИзВременногоХранилища(АдресХранилища);
Сообщение = СтрЗаменить(Сообщение, "Ссылка", " " + НСтр("ru = '<a href = ""ПереходПоСсылке"">Подробно</a>'"));
КонецЕсли;
Элементы.Текст.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(Сообщение);
Ключ = "";
Если ПараметрыПроверки.КонфигурацияБазыДанныхИзмененаДинамически Тогда
Ключ = "Конфигурация";
КонецЕсли;
Если ПараметрыПроверки.Исправления <> Неопределено Тогда
Ключ = Ключ + "Исправления";
КонецЕсли;
Если ПараметрыПроверки.Расширения <> Неопределено Тогда
Ключ = Ключ + "Расширения";
КонецЕсли;
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, Ключ);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ТекстОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Документ = Новый ТекстовыйДокумент;
Документ.УстановитьТекст(ОписаниеНовыхПатчей);
Документ.Показать(НСтр("ru = 'Новые исправления ошибок'"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Перезапустить(Команда)
СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы();
ЗавершитьРаботуСистемы(Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НапомнитьПозже(Команда)
ИмяПараметра = "СтандартныеПодсистемы.ПриВыполненииСтандартныхПериодическихПроверок";
ПараметрыПриложения.Вставить(ИмяПараметра, ОбщегоНазначенияКлиент.ДатаСеанса());
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура БольшеНеНапоминать(Команда)
БольшеНеНапоминатьНаСервере();
Закрыть();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура БольшеНеНапоминатьНаСервере()
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя",
"ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы",
Ложь);
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a5902ed4-a8f1-460e-aced-0094b2c384a3">
<name>КонтрольДинамическогоОбновления</name>
<synonym>
<key>ru</key>
<value>Контроль динамического обновления</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</mdclass:CommonForm>
@@ -785,19 +785,21 @@
ОписанияПрограмм = Новый Массив;
ОписанияПрограмм.Добавить(Контекст.ОписаниеПрограммы);
ОписаниеОшибок = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок();
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ОписанияПрограмм", ОписанияПрограмм);
ПараметрыВыполнения.Вставить("Индекс", -1);
ПараметрыВыполнения.Вставить("ПоказатьОшибку", Неопределено);
ПараметрыВыполнения.Вставить("СвойстваОшибки", Новый Структура("Ошибки", Новый Массив));
ПараметрыВыполнения.Вставить("ОписаниеОшибок", ОписаниеОшибок);
ПараметрыВыполнения.Вставить("АлгоритмПодписи", "");
ПараметрыВыполнения.Вставить("ИнтерактивныйРежим", Ложь);
ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент());
ПараметрыВыполнения.Вставить("Менеджер", Неопределено);
ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения(
"ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклПродолжение", ЭтотОбъект, Контекст));
Контекст.Вставить("ПараметрыВыполнения",
Новый Структура("СвойстваОшибки", ПараметрыВыполнения.СвойстваОшибки));
Контекст.Вставить("ПараметрыВыполнения", Новый Структура("ОписаниеОшибок", ОписаниеОшибок));
ЭлектроннаяПодписьСлужебныйКлиент.СоздатьМенеджерКриптографииЦиклНачало(ПараметрыВыполнения);
@@ -808,7 +810,7 @@
Процедура ОбработчикОжиданияОпределитьУстановленныеПрограммыЦиклПродолжение(Менеджер, Контекст) Экспорт
ОписаниеПрограммы = Контекст.ОписаниеПрограммы;
Ошибки = Контекст.ПараметрыВыполнения.СвойстваОшибки.Ошибки;
Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки;
Если Менеджер <> Неопределено Тогда
ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверки, НСтр("ru = 'Установлена на компьютере.'"));
@@ -43,10 +43,6 @@
Если ДлительнаяОперация.ФормаВладелец <> Неопределено И Не ДлительнаяОперация.ФормаВладелец.Открыта() Тогда
ОперацияОтменена = Истина;
КонецЕсли;
Если ДлительнаяОперация.ОповещениеОЗавершении <> Неопределено И ТипЗнч(ДлительнаяОперация.ОповещениеОЗавершении.Модуль) = Тип("ФормаКлиентскогоПриложения")
И Не ДлительнаяОперация.ОповещениеОЗавершении.Модуль.Открыта() Тогда
ОперацияОтменена = Истина;
КонецЕсли;
Если ОперацияОтменена Тогда
@@ -41,7 +41,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.2.387";
Описание.Версия = "3.1.2.396";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -471,6 +471,27 @@
КонецЕсли;
КонецПроцедуры
Функция ОписанияНовыхПатчей(АдресХранилища, ТекущиеИсправления) Экспорт
Описания = Новый Массив;
Для Каждого Исправление Из ТекущиеИсправления Цикл
Если Метаданные.ОбщиеМакеты.Найти(Исправление) = Неопределено Тогда
Продолжить;
КонецЕсли;
Макет = ПолучитьОбщийМакет(Исправление);
Для НомерСтроки = 1 По Макет.КоличествоСтрок() Цикл
Строка = Макет.ПолучитьСтроку(НомерСтроки);
Если Не СтрНачинаетсяС(СокрЛП(Строка), "<Description>") Тогда
Продолжить;
КонецЕсли;
ОписаниеПатча = СтрЗаменить(СтрЗаменить(СокрЛП(Строка), "<Description>", ""), "</Description>", "");
Описания.Добавить(Исправление + ": " + ОписаниеПатча);
Прервать;
КонецЦикла;
КонецЦикла;
ОписаниеСтрокой = СтрСоединить(Описания, Символы.ПС);
ПоместитьВоВременноеХранилище(ОписаниеСтрокой, АдресХранилища);
КонецФункции
// Вызывается при завершении обновления конфигурации через COM-соединение.
//
// Параметры:
@@ -5207,13 +5207,16 @@
// Сохраняет персональные настройки пользователя, относящиеся к подсистеме БазоваяФункциональность.
// Для получения настроек предусмотрены следующие функции:
// - ОбщегоНазначенияКлиент.ПредлагатьУстановкуРасширенияРаботыСФайлами(),
// - СтандартныеПодсистемыСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы().
// - СтандартныеПодсистемыСервер.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы(),
// - СтандартныеПодсистемыСервер.ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы().
//
// Параметры:
// Настройки - Структура - коллекция настроек:
// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - признак необходимости
// Настройки - Структура:
// * НапоминатьОбУстановкеРасширенияРаботыСФайлами - Булево - признак необходимости
// напоминания об установке расширения.
// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - запрашивать подтверждение по завершении работы.
// * ЗапрашиватьПодтверждениеПриЗавершенииПрограммы - Булево - запрашивать подтверждение по завершении работы.
// * ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы - Булево - показывать оповещение при
// динамическом обновлении программы.
//
Процедура СохранитьПерсональныеНастройки(Настройки) Экспорт
@@ -5233,6 +5236,12 @@
Настройки.ЗапрашиватьПодтверждениеПриЗавершенииПрограммы);
КонецЕсли;
Если Настройки.Свойство("ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы") Тогда
ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя",
"ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы",
Настройки.ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы);
КонецЕсли;
КонецПроцедуры
// Выполняет пропорциональное распределение суммы в соответствии
@@ -386,12 +386,29 @@
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульТехнологияСервиса = ОбщегоНазначения.ОбщийМодуль("ТехнологияСервиса");
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(МодульТехнологияСервиса.ВерсияБиблиотеки(), "2.0.2.15") >= 0 Тогда
Предупреждение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выгрузка файла %1 (тип %2) пропущена по причине
|%3'"),
Объект,
Объект.Метаданные().ПолноеИмя(),
КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Контейнер.ДобавитьПредупреждение(Предупреждение);
КонецЕсли;
КонецЕсли;
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Файлы.Выгрузка данных для перехода в сервис'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
Объект.Метаданные(),
Объект.Ссылка,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
Контейнер.ИсключитьФайл(ИмяФайла);
@@ -2848,11 +2848,9 @@
КонецЕсли;
МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись");
МенеджерКриптографии = МодульЭлектроннаяПодпись.МенеджерКриптографии("ПроверкаПодписи");
Для каждого СтрокаПодписи Из ДанныеСтрок Цикл
Для Каждого СтрокаПодписи Из ДанныеСтрок Цикл
ОписаниеОшибки = "";
ПодписьВерна = МодульЭлектроннаяПодпись.ПроверитьПодпись(МенеджерКриптографии,
ПодписьВерна = МодульЭлектроннаяПодпись.ПроверитьПодпись(Неопределено,
ИсходныеДанные, СтрокаПодписи.АдресПодписи, ОписаниеОшибки, СтрокаПодписи.ДатаПодписи);
СтрокаПодписи.ДатаПроверкиПодписи = ТекущаяДатаСеанса();
@@ -1846,9 +1846,8 @@
Продолжить;
КонецЕсли;
ПолноеИмяФайла = КаталогПолучателя + ПривестиИмяФайла(
СтрокаОтчет.Ключ + " (" + ПараметрыФормата.Имя + ")"
+ ?(ПараметрыФормата.Расширение = Неопределено, "", ПараметрыФормата.Расширение), ПараметрыДоставки.ТранслитерироватьИменаФайлов);
ПолноеИмяФайла = ПолноеИмяФайлаПоШаблону(
КаталогПолучателя, СтрокаОтчет.Ключ, ПараметрыФормата, ПараметрыДоставки.ТранслитерироватьИменаФайлов);
НайтиСвободноеИмяФайла(ПолноеИмяФайла);
@@ -2557,6 +2556,22 @@
Возврат Результат;
КонецФункции
Функция ПолноеИмяФайлаПоШаблону(Каталог, НаименованиеОтчета, Формат, Транслитерировать)
ШаблонИмениФайла = "[НаименованиеОтчета] ([ФорматОтчета]) [ДатаРассылки][РасширениеФайла]"; // АПК:1297 Это шаблон.
ПараметрыИмениФайла = Новый Структура("НаименованиеОтчета, ФорматОтчета, ДатаРассылки, РасширениеФайла");
ПараметрыИмениФайла.НаименованиеОтчета = НаименованиеОтчета;
ПараметрыИмениФайла.ФорматОтчета = Формат.Имя;
ПараметрыИмениФайла.ДатаРассылки = Формат(ТекущаяДатаСеанса(), НСтр("ru = 'ДФ=yyyy-MM-dd'"));
ПараметрыИмениФайла.РасширениеФайла = ?(Формат.Расширение = Неопределено, "", Формат.Расширение);
ИмяФайла = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонИмениФайла, ПараметрыИмениФайла);
Возврат Каталог + ПривестиИмяФайла(ИмяФайла, Транслитерировать);
КонецФункции
// Преобразует недопустимые символы файлов в похожие допустимые.
// Работает только с именем файла, путь не поддерживается.
//
@@ -215,9 +215,18 @@
//
Процедура ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры) Экспорт
Параметры.Вставить("КонфигурацияБазыДанныхИзмененаДинамически", КонфигурацияБазыДанныхИзмененаДинамически()
КонфигурацияБазыДанныхИзмененаДинамически = КонфигурацияБазыДанныхИзмененаДинамически();
Параметры.Вставить("КонфигурацияБазыДанныхИзмененаДинамически", КонфигурацияБазыДанныхИзмененаДинамически
Или Справочники.ВерсииРасширений.РасширенияИзмененыДинамически());
ДинамическиеИзменения = Справочники.ВерсииРасширений.ДинамическиИзмененныеРасширения();
ДинамическиеИзменения.Вставить("КонфигурацияБазыДанныхИзмененаДинамически", КонфигурацияБазыДанныхИзмененаДинамически);
СообщениеПользователю = СтандартныеПодсистемыСервер.ТекстСообщенияПриДинамическомОбновлении(ДинамическиеИзменения);
ОповещатьПользователя = СтандартныеПодсистемыСервер.ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы();
ДинамическиеИзменения.Вставить("СообщениеПользователю", СообщениеПользователю);
ДинамическиеИзменения.Вставить("ОповещатьПользователя", ОповещатьПользователя);
Параметры.Вставить("ДинамическиеИзмененияКонфигурации", ДинамическиеИзменения);
ПользователиСлужебный.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
@@ -1804,10 +1804,8 @@
ОбработкаПродолжения = Новый ОписаниеОповещения(
"ПриВыполненииСтандартныхПериодическихПроверокПодсистемаПользователи", ЭтотОбъект, Контекст);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОбработкаПродолжения", ОбработкаПродолжения);
Если Не Параметры.КонфигурацияБазыДанныхИзмененаДинамически Тогда
Если Не Параметры.ДинамическиеИзмененияКонфигурации.ОповещатьПользователя
Или Не Параметры.КонфигурацияБазыДанныхИзмененаДинамически Тогда
ВыполнитьОбработкуОповещения(ОбработкаПродолжения);
Возврат;
КонецЕсли;
@@ -1821,38 +1819,11 @@
КонецЕсли;
КонецЕсли;
ТекстВопроса =
НСтр("ru = 'Версия программы обновлена (внесены изменения в конфигурацию информационной базы).
|Для дальнейшей работы рекомендуется перезапустить программу.'");
ПоказатьОповещениеПользователя(НСтр("ru = 'Требуется перезапуск'"),,
ТекстВопроса, БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное);
СообщениеПользователю = СтрЗаменить(Параметры.ДинамическиеИзмененияКонфигурации.СообщениеПользователю, "Ссылка", "");
ПоказатьОповещениеПользователя(НСтр("ru = 'Установлено обновление программы'"), "e1cib/app/ОбщаяФорма.КонтрольДинамическогоОбновления",
СообщениеПользователю, БиблиотекаКартинок.Предупреждение32, СтатусОповещенияПользователя.Важное);
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'"));
КнопкиВопроса.Добавить("НапомнитьПозже", НСтр("ru = 'Напомнить позже'"));
КнопкиВопроса.Добавить("НеСегодня", НСтр("ru = 'Не напоминать сегодня'"));
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПриВыполненииСтандартныхПериодическихПроверокЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, КнопкиВопроса,, "НапомнитьПозже", КлиентскоеПриложение.ПолучитьЗаголовок());
КонецПроцедуры
// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок.
Процедура ПриВыполненииСтандартныхПериодическихПроверокЗавершение(Ответ, Контекст) Экспорт
Если Ответ = "Перезапустить" Тогда
ПропуститьПредупреждениеПередЗавершениемРаботыСистемы();
ЗавершитьРаботуСистемы(Истина, Истина);
Возврат;
КонецЕсли;
Если Ответ = "НеСегодня" Тогда
ИмяПараметра = "СтандартныеПодсистемы.ПриВыполненииСтандартныхПериодическихПроверок";
ПараметрыПриложения.Вставить(ИмяПараметра, ОбщегоНазначенияКлиент.ДатаСеанса());
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.ОбработкаПродолжения);
ВыполнитьОбработкуОповещения(ОбработкаПродолжения);
КонецПроцедуры
@@ -313,6 +313,26 @@
КонецФункции
// Возвращает признак необходимости показа всплывающего уведомления об установленных
// обновлениях программы - динамическом обновлении программы, новых патчей и расширений.
//
// Возвращаемое значение:
// Булево - если Истина, то всплывающие уведомления включены.
//
Функция ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы() Экспорт
Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"ОбщиеНастройкиПользователя",
"ПоказыватьПредупреждениеОбУстановленныхОбновленияхПрограммы");
Если Результат = Неопределено Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращает описания форматов сохранения табличного документа.
//
// Возвращаемое значение:
@@ -1328,6 +1348,62 @@
КонецФункции
// Формирует текст для вывода пользователю при необходимости динамического обновления.
//
Функция ТекстСообщенияПриДинамическомОбновлении(ДинамическиеИзмененияКонфигурации) Экспорт
Сообщения = Новый Массив;
ДинамическиеИзмененияКонфигурации = ДинамическиеИзмененияКонфигурации;
Если ДинамическиеИзмененияКонфигурации.КонфигурацияБазыДанныхИзмененаДинамически Тогда
ТекстСообщенияКонфигурация = НСтр("ru = 'Версия программы обновлена (внесены изменения в конфигурацию информационной базы).'");
Сообщения.Добавить(ТекстСообщенияКонфигурация);
КонецЕсли;
Если ДинамическиеИзмененияКонфигурации.Исправления <> Неопределено Тогда
Если ДинамическиеИзмененияКонфигурации.Исправления.Добавлено > 0
И ДинамическиеИзмененияКонфигурации.Исправления.Удалено > 0 Тогда
ТекстСообщенияПатчи = НСтр("ru = 'Установлены новые исправления (патчи): %1, удалены: %2.'") + "Ссылка";
ИначеЕсли ДинамическиеИзмененияКонфигурации.Исправления.Добавлено > 0 Тогда
ТекстСообщенияПатчи = НСтр("ru = 'Установлены новые исправления (патчи): %1.'") + "Ссылка";
ИначеЕсли ДинамическиеИзмененияКонфигурации.Исправления.Удалено > 0 Тогда
ТекстСообщенияПатчи = НСтр("ru = 'Удалены исправления (патчи): %2.'");
КонецЕсли;
ТекстСообщенияПатчи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияПатчи,
ДинамическиеИзмененияКонфигурации.Исправления.Добавлено,
ДинамическиеИзмененияКонфигурации.Исправления.Удалено);
Сообщения.Добавить(ТекстСообщенияПатчи);
КонецЕсли;
Если ДинамическиеИзмененияКонфигурации.Расширения <> Неопределено Тогда
Если ДинамическиеИзмененияКонфигурации.Расширения.Добавлено > 0 Тогда
ТекстСообщенияРасширения = НСтр("ru = 'Установлены новые расширения: %1.'");
ТекстСообщенияРасширения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияРасширения,
ДинамическиеИзмененияКонфигурации.Расширения.Добавлено);
Сообщения.Добавить(ТекстСообщенияРасширения);
КонецЕсли;
Если ДинамическиеИзмененияКонфигурации.Расширения.Удалено > 0 Тогда
ТекстСообщенияРасширения = НСтр("ru = 'Удалены расширения: %1.'");
ТекстСообщенияРасширения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияРасширения,
ДинамическиеИзмененияКонфигурации.Расширения.Удалено);
Сообщения.Добавить(ТекстСообщенияРасширения);
КонецЕсли;
Если ДинамическиеИзмененияКонфигурации.Расширения.Изменено > 0 Тогда
ТекстСообщенияРасширения = НСтр("ru = 'Изменены расширения: %1.'");
ТекстСообщенияРасширения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияРасширения,
ДинамическиеИзмененияКонфигурации.Расширения.Изменено);
Сообщения.Добавить(ТекстСообщенияРасширения);
КонецЕсли;
КонецЕсли;
Сообщения.Добавить(НСтр("ru = 'Для того чтобы применить, рекомендуется перезапустить программу и продолжить работу.'"));
Сообщения.Добавить(" ");
Возврат СтрСоединить(Сообщения, Символы.ПС);
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий подсистем конфигурации.
@@ -1445,7 +1521,16 @@
Дело.Важное = Истина;
Дело.Представление = НСтр("ru = 'Скорость работы снижена'");
Дело.Форма = "Обработка.РекомендацияПоПовышениюСкоростиРаботы.Форма.Форма";
Дело.Владелец = НСтр("ru = 'Скорость работы программы'");
Дело.Владелец = НСтр("ru = 'Работа программы'");
Идентификатор = "КонтрольДинамическогоОбновленияПрограммы";
Дело = ТекущиеДела.Добавить();
Дело.Идентификатор = Идентификатор;
Дело.ЕстьДела = КонфигурацияБазыДанныхИзмененаДинамически() Или Справочники.ВерсииРасширений.РасширенияИзмененыДинамически();
Дело.Важное = Ложь;
Дело.Представление = НСтр("ru = 'Установлено обновление программы'");
Дело.Форма = "ОбщаяФорма.КонтрольДинамическогоОбновления";
Дело.Владелец = НСтр("ru = 'Работа программы'");
КонецПроцедуры
@@ -640,28 +640,6 @@
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
ДвоичныеДанный = Новый ДвоичныеДанные(ПолноеИмяФайла);
ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанный);
ЗаписьДанных = Новый ЗаписьДанных(ПолноеИмяФайла);
ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт());
ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт());
ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт());
ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт());
ЗаписьДанных.ЗаписатьБайт(ЧтениеДанных.ПрочитатьБайт());
ЗаписьДанных.ЗаписатьБайт(0);
ЗаписьДанных.ЗаписатьБайт(6);
ЗаписьДанных.ЗаписатьБайт(0);
ЧтениеДанных.ПрочитатьБайт();
ЧтениеДанных.ПрочитатьБайт();
ЧтениеДанных.ПрочитатьБайт();
РезультатЧтенияДанных = ЧтениеДанных.Прочитать();
ЗаписьДанных.Записать(РезультатЧтенияДанных.ПолучитьДвоичныеДанные());
ЗаписьДанных.Закрыть();
КонецПроцедуры
Функция СобратьФайлДокументаDOCX(ПечатнаяФорма)
@@ -1434,6 +1412,7 @@
Функция ИнициализироватьЗаписьXML(КорневойТэг, ПутьКФайлу = "", Кодировка = "UTF-8", ЗаписатьОбъявление = Истина)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.Отступ = Ложь;
Если ПустаяСтрока(ПутьКФайлу) Тогда
ЗаписьXML.УстановитьСтроку(Кодировка);
Иначе
@@ -806,9 +806,9 @@
|ИЗ
| НаборыСвойств КАК НаборыСвойств
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
| ПО (СвойстваНаборов.Свойство = Свойства.Ссылка)
| ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
| ПО (СвойстваНаборов.Свойство = Свойства.Ссылка)
|ГДЕ
| НЕ СвойстваНаборов.ПометкаУдаления
| И НЕ Свойства.ПометкаУдаления
@@ -993,25 +993,41 @@
ЭтоCMS = ТипЗнч(ИсходныеДанныеДляПроверки) = Тип("Структура")
И ИсходныеДанныеДляПроверки.Свойство("ПараметрыCMS");
Если ТипЗнч(Подпись) = Тип("Строка") И ЭтоАдресВременногоХранилища(Подпись) Тогда
ПодписьДляПроверки = ПолучитьИзВременногоХранилища(Подпись);
Иначе
ПодписьДляПроверки = Подпись;
КонецЕсли;
МенеджерКриптографииДляПроверки = МенеджерКриптографии;
Если МенеджерКриптографииДляПроверки = Неопределено Тогда
ИспользоватьЭлектроннуюПодписьВМоделиСервиса = Не ЭтоXMLDSig И Не ЭтоCMS
И ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса();
МенеджерКриптографииДляПроверки = МенеджерКриптографии("ПроверкаПодписи",
ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса, ОписаниеОшибки);
Если МенеджерКриптографииДляПроверки = Неопределено
И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса Тогда
Возврат Ложь;
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ПоказатьОшибку = ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса;
Если ТипЗнч(ПодписьДляПроверки) = Тип("ДвоичныеДанные") Тогда
ПараметрыСоздания.АлгоритмПодписи =
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(ПодписьДляПроверки);
ИначеЕсли ЭтоXMLDSig Тогда
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатИзКонвертаSOAP(
ИсходныеДанныеДляПроверки.КонвертSOAP, Ложь);
ПараметрыСоздания.АлгоритмПодписи =
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата);
КонецЕсли;
КонецЕсли;
ПодписьДляПроверки = Подпись;
Если ТипЗнч(Подпись) = Тип("Строка") И ЭтоАдресВременногоХранилища(Подпись) Тогда
ПодписьДляПроверки = ПолучитьИзВременногоХранилища(Подпись);
МенеджерКриптографииДляПроверки = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии(
"ПроверкаПодписи", ПараметрыСоздания);
Если МенеджерКриптографииДляПроверки = Неопределено Тогда
ОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
Если Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЭтоXMLDSig Тогда
@@ -1127,19 +1143,6 @@
ВызыватьИсключение = ОписаниеОшибки = Null;
МенеджерКриптографииДляПроверки = МенеджерКриптографии;
Если МенеджерКриптографииДляПроверки = Неопределено Тогда
ИспользоватьЭлектроннуюПодписьВМоделиСервиса =
ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса();
МенеджерКриптографииДляПроверки = МенеджерКриптографии("ПроверкаСертификата",
ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса, ОписаниеОшибки);
Если МенеджерКриптографииДляПроверки = Неопределено
И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
СертификатДляПроверки = Сертификат;
Если ТипЗнч(Сертификат) = Тип("Строка") Тогда
@@ -1153,6 +1156,29 @@
ДанныеСертификата = СертификатДляПроверки.Выгрузить();
КонецЕсли;
Если МенеджерКриптографииДляПроверки = Неопределено Тогда
ИспользоватьЭлектроннуюПодписьВМоделиСервиса =
ЭлектроннаяПодписьСлужебный.ИспользоватьЭлектроннуюПодписьВМоделиСервиса();
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ПоказатьОшибку = ВызыватьИсключение И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса;
Если ТипЗнч(ДанныеСертификата) = Тип("ДвоичныеДанные") Тогда
ПараметрыСоздания.АлгоритмПодписи =
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата);
КонецЕсли;
МенеджерКриптографииДляПроверки = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии(
"ПроверкаСертификата", ПараметрыСоздания);
Если МенеджерКриптографииДляПроверки = Неопределено Тогда
ОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
Если Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата(
ЗначениеЗаполнено(НаДату));
@@ -1277,12 +1277,12 @@
Контекст.Вставить("ДляШифрования", ДляШифрования);
Контекст.Вставить("ДополнительныеПараметры", ?(ДополнительныеПараметры = Неопределено,
ПараметрыЗаписиСертификата(), ДополнительныеПараметры));
Контекст.Вставить("ЗаголовокОшибки", ?(Контекст.ДляШифрования = Истина,
НСтр("ru = 'Не удалось пройти проверку шифрования по причине:'"),
НСтр("ru = 'Не удалось пройти проверку подписания по причине:'")));
Контекст.Вставить("ЗаголовокФормы", ?(Контекст.ДляШифрования = Истина,
НСтр("ru = 'Проверка шифрования и расшифровки'"),
НСтр("ru = 'Проверка установки электронной подписи'")));
НСтр("ru = 'Не удалось проверить шифрование и расшифровку'"),
НСтр("ru = 'Не удалось проверить установку электронной подписи'")));
Контекст.Вставить("ЗаголовокОшибкиПрограммы",
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиДобавленияСертификата(
?(Контекст.ДляШифрования = Истина, "Шифрование", "Подписание")));
Контекст.Вставить("ДанныеСертификата", Сертификат);
Контекст.Вставить("АлгоритмПодписи",
@@ -1296,9 +1296,6 @@
Если ОбщиеНастройки().ПроверятьЭлектронныеПодписиНаСервере Тогда
Контекст.Вставить("ОшибкаНаСервере",
Новый Структура("ОписаниеОшибки, Ошибки", "", Новый Массив));
СсылкаНаСертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатПослеПроверки(Контекст);
Если СсылкаНаСертификат <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ОбработчикЗавершения, СсылкаНаСертификат);
@@ -366,20 +366,7 @@
// * ПоказатьОшибку - Булево - если Истина, тогда будет вызвано исключение, содержащее описание ошибки.
//
// * ОписаниеОшибки - Строка - возвращаемое описание ошибки, когда функция возвратила значение Неопределено.
// - Структура - содержит ошибки обращения к программам, если возвращено Неопределено.
// ** ОписаниеОшибки - Строка - полное описание ошибки, когда оно возвращается строкой.
// ** ЗаголовокОшибки - Строка - заголовок ошибки, который соответствует операции.
// ** ИмяКомпьютера - Строка - имя компьютера при получении менеджера криптографии.
// ** Описание - Строка - описание общей ошибки.
// ** Общая - Булево - если Истина, то содержит описание ошибки для всех программ,
// иначе альтернативное описание массиву Ошибки.
// ** КАдминистратору - Булево - для исправления общей ошибки требуются права администратора.
// ** Ошибки - Массив - содержит структуры описания ошибок программ со свойствами:
// *** Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования.
// *** Описание - Строка - содержит представление ошибки.
// *** ИзИсключения - Булево - описание содержит краткое представление информации об ошибке.
// *** НеУказанПуть - Булево - описание содержит ошибку о неуказанном пути для ОС Linux.
// *** КАдминистратору - Булево - для исправления ошибки требуются права администратора.
// - Структура - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок
//
// * Программа - Неопределено - возвращает менеджер криптографии первой
// программы из справочника для которой удалось его создать.
@@ -422,9 +409,8 @@
АлгоритмПодписи = ПараметрыСозданияМенеджераКриптографии.АлгоритмПодписи;
ИмяКомпьютера = ИмяКомпьютера();
Ошибки = Новый Массив;
Менеджер = НовыйМенеджерКриптографии(Программа, Ошибки, ИмяКомпьютера, АлгоритмПодписи);
ОписаниеОшибок = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок(ИмяКомпьютера);
Менеджер = НовыйМенеджерКриптографии(Программа, ОписаниеОшибок.Ошибки, ИмяКомпьютера, АлгоритмПодписи);
Если Менеджер <> Неопределено Тогда
Возврат Менеджер;
@@ -462,43 +448,23 @@
КонецЕсли;
ЗаголовокОшибки = СтрЗаменить(ЗаголовокОшибки, "%1", ИмяКомпьютера);
ОписаниеОшибок.ЗаголовокОшибки = ЗаголовокОшибки;
СвойстваОшибки = Новый Структура;
СвойстваОшибки.Вставить("ЗаголовокОшибки", ЗаголовокОшибки);
СвойстваОшибки.Вставить("ИмяКомпьютера", ИмяКомпьютера);
СвойстваОшибки.Вставить("КАдминистратору", Истина);
СвойстваОшибки.Вставить("Общая", Ложь);
СвойстваОшибки.Вставить("Ошибки", Ошибки);
Если Ошибки.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru = 'Не предусмотрено использование ни одной программы.'");
СвойстваОшибки.Общая = Истина;
СвойстваОшибки.Вставить("Инструкция", Истина);
СвойстваОшибки.Вставить("НастройкаПрограмм", Истина);
ИначеЕсли Программа <> Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Программа ""%1"" не доступна или не установлена.'"), Программа);
Иначе
ТекстОшибки = НСтр("ru = 'Ни одна из программ не доступна или не установлена.'");
КонецЕсли;
СвойстваОшибки.Вставить("Описание", ТекстОшибки);
Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Обратитесь к администратору.'");
КонецЕсли;
СвойстваОшибки.Вставить("ОписаниеОшибки", ЗаголовокОшибки + Символы.ПС + ТекстОшибки);
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииЗаполнитьПредставлениеОшибок(
ОписаниеОшибок,
Программа,
АлгоритмПодписи,
Пользователи.ЭтоПолноправныйПользователь(,, Ложь),
Истина);
Если ТипЗнч(ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки) = Тип("Структура") Тогда
ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки = СвойстваОшибки;
ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки = ОписаниеОшибок;
Иначе
ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки = СвойстваОшибки.ОписаниеОшибки;
ПараметрыСозданияМенеджераКриптографии.ОписаниеОшибки = ОписаниеОшибок.ОписаниеОшибки;
КонецЕсли;
Если ПоказатьОшибку Тогда
ВызватьИсключение ТекстОшибки;
ВызватьИсключение ОписаниеОшибок.ОписаниеОшибки;
КонецЕсли;
Возврат Неопределено;
@@ -572,12 +538,12 @@
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат не найден на сервере по причине:
НСтр("ru = 'Сертификат не установлен на сервере по причине:
|%1'")
+ Символы.ПС,
ПредставлениеОшибки);
Иначе
ТекстОшибки = НСтр("ru = 'Сертификат не найден на сервере.'");
ТекстОшибки = НСтр("ru = 'Сертификат не установлен на сервере.'");
КонецЕсли;
Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда
@@ -892,30 +858,49 @@
//
Функция ЗаписатьСертификатПослеПроверки(Контекст) Экспорт
ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ОписаниеОшибки = Новый Структура;
ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи;
МенеджерКриптографии = МенеджерКриптографии("", ПараметрыСоздания);
Контекст.Вставить("ОшибкаНаСервере",
ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок());
ЗаголовокОшибкиПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиДобавленияСертификата(
?(Контекст.ДляШифрования = Истина, "Шифрование", "Подписание"), ИмяКомпьютера());
Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии")
И ПараметрыСоздания.ОписаниеОшибки.Общая Тогда
Контекст.ОшибкаНаСервере = ПараметрыСоздания.ОписаниеОшибки;
Контекст.ОшибкаНаСервере.ЗаголовокОшибки = ЗаголовокОшибкиПрограммы;
Возврат Неопределено;
КонецЕсли;
ОписанияПрограмм = ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм;
СертификатКриптографии = Новый СертификатКриптографии(Контекст.ДанныеСертификата);
Контекст.Вставить("АлгоритмПодписи",
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(Контекст.ДанныеСертификата));
ОписанияПрограмм = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииОписанияПрограмм(
Неопределено, Новый Массив, ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм,
Контекст.АлгоритмПодписи);
ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(,, Ложь);
Сертификат = Неопределено;
ОписаниеОшибки = "";
Для каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = ОписаниеПрограммы.Ссылка;
ПараметрыСоздания.ОписаниеОшибки = Новый Структура;
ПараметрыСоздания.АлгоритмПодписи = Контекст.АлгоритмПодписи;
МенеджерКриптографии = МенеджерКриптографии("", ПараметрыСоздания);
ОшибкаМенеджера = ПараметрыСоздания.ОписаниеОшибки;
Если МенеджерКриптографии = Неопределено Тогда
Ошибки = ПараметрыСоздания.ОписаниеОшибки.Ошибки;
Если ОшибкаМенеджера.Ошибки.Количество() > 0 Тогда
Контекст.ОшибкаНаСервере.Ошибки.Добавить(ОшибкаМенеджера.Ошибки[0]);
Если Ошибки.Количество() > 0
И Не (ЗначениеЗаполнено(Контекст.АлгоритмПодписи)
И Ошибки[0].НетАлгоритма) Тогда
Ошибки[0].ЗаголовокОшибки = ЗаголовокОшибкиПрограммы;
Контекст.ОшибкаНаСервере.Ошибки.Добавить(Ошибки[0]);
КонецЕсли;
Продолжить;
@@ -926,32 +911,20 @@
Если Контекст.ДляШифрования = Истина Тогда
Успех = ПроверитьШифрованиеИРасшифровку(МенеджерКриптографии, Контекст.ДанныеСертификата,
СертификатКриптографии, ОписаниеПрограммы, Контекст.ОшибкаНаСервере, Контекст.ОшибкаНаСервере.ОписаниеОшибки);
СертификатКриптографии, ОписаниеПрограммы, Контекст.ОшибкаНаСервере, ЭтоПолноправныйПользователь);
Иначе
Успех = ПроверитьПодписание(МенеджерКриптографии, Контекст.ДанныеСертификата,
СертификатКриптографии, ОписаниеПрограммы, Контекст.ОшибкаНаСервере, Контекст.ОшибкаНаСервере.ОписаниеОшибки);
СертификатКриптографии, ОписаниеПрограммы, Контекст.ОшибкаНаСервере, ЭтоПолноправныйПользователь);
КонецЕсли;
Если Не Успех Тогда
Продолжить;
КонецЕсли;
Контекст.ДополнительныеПараметры.Программа = ОписаниеПрограммы.Ссылка;
Контекст.Вставить("ОписаниеПрограммы", ОписаниеПрограммы);
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаписатьСертификатВСправочник(Контекст,
Контекст.ОшибкаНаСервере);
Попытка
Возврат ЭлектроннаяПодпись.ЗаписатьСертификатВСправочник(
Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры);
Исключение
Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'");
Контекст.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить сертификат по причине:'");
Контекст.ОшибкаНаСервере.Ошибки = Новый Массив;
Контекст.ОшибкаНаСервере.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Возврат Неопределено;
КонецПопытки;
КонецЦикла;
Возврат Неопределено;
@@ -1153,6 +1126,7 @@
ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.АлгоритмПодписи = АлгоритмПодписи;
ПараметрыСоздания.ОписаниеОшибки = Новый Структура;
МенеджерКриптографии("ПолучениеСертификатов", ПараметрыСоздания);
Форма.МенеджерКриптографииНаСервереОписаниеОшибки = ПараметрыСоздания.ОписаниеОшибки;
@@ -1527,7 +1501,7 @@
СвойстваКриптопровайдера = СвойстваКриптопровайдера(МенеджерКриптографии);
ОбъектКомпоненты.ПутьККриптопровайдеру = СвойстваКриптопровайдера.Путь;
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken");
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатИзКонвертаSOAP(КонвертSOAP);
ПроверитьВыбратьАлгоритмПодписи(ОбъектКомпоненты, СертификатКриптографииBase64, ДанныеАлгоритмаПодписания);
@@ -2218,7 +2192,7 @@
Функция НовыйМенеджерКриптографии(Программа, Ошибки, ИмяКомпьютера, АлгоритмПодписи = "")
ОписанияПрограмм = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииОписанияПрограмм(
Программа, Ошибки, ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм, АлгоритмПодписи);
Программа, Ошибки, ЭлектроннаяПодпись.ОбщиеНастройки().ОписанияПрограмм);
Если ОписанияПрограмм = Неопределено Тогда
Возврат Неопределено;
@@ -2233,7 +2207,7 @@
КонецЕсли;
Менеджер = Неопределено;
Для каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
СвойстваПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииСвойстваПрограммы(
ОписаниеПрограммы, ЭтоLinux, Ошибки, Истина, ПутиКПрограммамНаСерверахLinux);
@@ -2274,6 +2248,17 @@
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(АлгоритмПодписи) Тогда
АлгоритмПодписиПоддерживается =
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииАлгоритмПодписиПоддерживается(ОписаниеПрограммы,
ИнформацияМодуля.АлгоритмыПодписи, АлгоритмПодписи, Ошибки, Истина, Программа <> Неопределено);
Если Не АлгоритмПодписиПоддерживается Тогда
Менеджер = Неопределено;
Продолжить;
КонецЕсли;
КонецЕсли;
Попытка
Менеджер = Новый МенеджерКриптографии(
СвойстваПрограммы.ИмяПрограммы,
@@ -2382,7 +2367,7 @@
// Для процедуры ЗаписатьСертификатПослеПроверки.
Функция ПроверитьШифрованиеИРасшифровку(МенеджерКриптографии, ДвоичныеДанныеСертификата,
СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки)
СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ЭтоПолноправныйПользователь)
ПредставлениеОшибки = "";
Попытка
@@ -2393,27 +2378,19 @@
КонецПопытки;
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ТекстТекущейОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1:
|Не удалось пройти проверку шифрования по причине:
|%2'"),
ОписаниеПрограммы.Наименование,
ПредставлениеОшибки);
ТекущаяОшибка = Новый Структура;
ТекущаяОшибка.Вставить("Описание", ТекстТекущейОшибки);
ТекущаяОшибка.Вставить("Инструкция", Истина);
ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина);
ОшибкаНаСервере.Ошибки.Добавить(ТекущаяОшибка);
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + ТекстТекущейОшибки;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
ОшибкаНаСервере,
ОписаниеПрограммы,
"Шифрование",
ПредставлениеОшибки,
ЭтоПолноправныйПользователь,
Ложь,
ИмяКомпьютера());
Возврат Ложь;
КонецЕсли;
ИнформацияОбОшибке = Неопределено;
ПредставлениеОшибки = "";
Попытка
РасшифрованныеДанные = МенеджерКриптографии.Расшифровать(ЗашифрованныеДанные);
@@ -2424,25 +2401,16 @@
КонецПопытки;
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ТекстТекущейОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1:
|Не удалось пройти проверку расшифровки по причине:
|%2'"),
ОписаниеПрограммы.Наименование,
ПредставлениеОшибки);
ТекущаяОшибка = Новый Структура;
ТекущаяОшибка.Вставить("Описание", ТекстТекущейОшибки);
ТекущаяОшибка.Вставить("Инструкция", Истина);
ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина);
ОшибкаНаСервере.Ошибки.Добавить(ТекущаяОшибка);
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + ТекстТекущейОшибки;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
ОшибкаНаСервере,
ОписаниеПрограммы,
"Расшифровка",
ПредставлениеОшибки,
ЭтоПолноправныйПользователь,
ИнформацияОбОшибке = Неопределено,
ИмяКомпьютера());
Возврат Ложь;
КонецЕсли;
Возврат Истина;
@@ -2450,7 +2418,7 @@
КонецФункции
Функция ПроверитьПодписание(МенеджерКриптографии, ДвоичныеДанныеСертификата,
СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ОписаниеОшибки)
СертификатКриптографии, ОписаниеПрограммы, ОшибкаНаСервере, ЭтоПолноправныйПользователь)
ИнформацияОбОшибке = Неопределено;
ПредставлениеОшибки = "";
@@ -2463,27 +2431,16 @@
КонецПопытки;
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ТекстТекущейОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1:
|Не удалось пройти проверку подписания по причине:
|%2'"),
ОписаниеПрограммы.Наименование,
ПредставлениеОшибки);
ТекущаяОшибка = Новый Структура;
ТекущаяОшибка.Вставить("Описание", ТекстТекущейОшибки);
Если ИнформацияОбОшибке = Неопределено Тогда
ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина);
ТекущаяОшибка.Вставить("Инструкция", Истина);
КонецЕсли;
ОшибкаНаСервере.Ошибки.Добавить(ТекущаяОшибка);
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС + ТекстТекущейОшибки;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
ОшибкаНаСервере,
ОписаниеПрограммы,
"Подписание",
ПредставлениеОшибки,
ЭтоПолноправныйПользователь,
ИнформацияОбОшибке = Неопределено,
ИмяКомпьютера());
Возврат Ложь;
КонецЕсли;
Возврат Истина;
@@ -189,6 +189,7 @@
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.Программа = Параметры.СертификатПрограмма;
ПараметрыСоздания.ОписаниеОшибки = Новый Структура;
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии(Параметры.Операция, ПараметрыСоздания);
@@ -408,11 +409,13 @@
ОписанияПрограмм = Новый Массив;
ОписанияПрограмм.Добавить(Контекст.ОписаниеПрограммы);
ОписаниеОшибок = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок();
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ОписанияПрограмм", ОписанияПрограмм);
ПараметрыВыполнения.Вставить("Индекс", -1);
ПараметрыВыполнения.Вставить("ПоказатьОшибку", Ложь);
ПараметрыВыполнения.Вставить("СвойстваОшибки", Новый Структура("Ошибки", Новый Массив));
ПараметрыВыполнения.Вставить("ОписаниеОшибок", ОписаниеОшибок);
ПараметрыВыполнения.Вставить("ЭтоLinux", ОбщегоНазначения.ЭтоLinuxСервер());
ПараметрыВыполнения.Вставить("Менеджер", Неопределено);
@@ -428,7 +431,7 @@
СвойстваПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииСвойстваПрограммы(
Контекст.ОписаниеПрограммы,
Контекст.ЭтоLinux,
Контекст.СвойстваОшибки.Ошибки,
Контекст.ОписаниеОшибок.Ошибки,
Ложь,
ЭлектроннаяПодпись.ПерсональныеНастройки().ПутиКПрограммамЭлектроннойПодписиИШифрования);
@@ -443,10 +446,10 @@
СвойстваПрограммы.ПутьКПрограмме,
СвойстваПрограммы.ТипПрограммы);
Исключение
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку(Контекст.СвойстваОшибки.Ошибки,
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку(Контекст.ОписаниеОшибок.Ошибки,
Неопределено, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),
Истина, Истина, Истина);
ТекстОшибки = НСтр("ru = 'Не установлена на сервере.'") + " " + Контекст.СвойстваОшибки.Ошибки[0].Описание;
ТекстОшибки = НСтр("ru = 'Не установлена на сервере.'") + " " + Контекст.ОписаниеОшибок.Ошибки[0].Описание;
ОбновитьЗначение(Контекст.ОписаниеПрограммы.РезультатПроверкиНаСервере, ТекстОшибки);
НайтиУстановленныеПрограммыНаСервереЦиклНачало(ПараметрыВыполнения);
Возврат;
@@ -465,7 +468,7 @@
ИмяПрограммыПолученное = ИнформацияМодуля.Имя;
ИмяПрограммыСовпадает = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииИмяПрограммыСовпадает(
Контекст.ОписаниеПрограммы, ИмяПрограммыПолученное, Контекст.СвойстваОшибки.Ошибки, Истина);
Контекст.ОписаниеПрограммы, ИмяПрограммыПолученное, Контекст.ОписаниеОшибок.Ошибки, Истина);
Если Не ИмяПрограммыСовпадает Тогда
Менеджер = Неопределено;
@@ -480,7 +483,7 @@
СвойстваПрограммы.ПутьКПрограмме,
СвойстваПрограммы.ТипПрограммы);
Исключение
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку(Контекст.СвойстваОшибки.Ошибки,
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку(Контекст.ОписаниеОшибок.Ошибки,
Неопределено, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),
Истина, Истина, Истина);
НайтиУстановленныеПрограммыНаСервереЦиклНачало(ПараметрыВыполнения);
@@ -488,7 +491,7 @@
КонецПопытки;
АлгоритмыУстановлены = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииАлгоритмыУстановлены(
Контекст.ОписаниеПрограммы, Менеджер, Контекст.СвойстваОшибки.Ошибки);
Контекст.ОписаниеПрограммы, Менеджер, Контекст.ОписаниеОшибок.Ошибки);
Если Не АлгоритмыУстановлены Тогда
НайтиУстановленныеПрограммыНаСервереЦиклНачало(ПараметрыВыполнения);
@@ -639,7 +642,9 @@
ТекстСостояния.Записать(ВременныеФайлы[0]);
АрхивИнформации.Добавить(ВременныеФайлы[0]);
АдресАрхива = ПоместитьВоВременноеХранилище(АрхивИнформации.ПолучитьДвоичныеДанные());
АдресАрхива = ПоместитьВоВременноеХранилище(АрхивИнформации.ПолучитьДвоичныеДанные(),
Новый УникальныйИдентификатор);
Для Каждого ВременныйФайл Из ВременныеФайлы Цикл
ФайловаяСистема.УдалитьВременныйФайл(ВременныйФайл);
КонецЦикла;
@@ -138,19 +138,20 @@
ОписанияПрограмм = Новый Массив;
ОписанияПрограмм.Добавить(Контекст.ОписаниеПрограммы);
ОписаниеОшибок = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок();
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ОписанияПрограмм", ОписанияПрограмм);
ПараметрыВыполнения.Вставить("Индекс", -1);
ПараметрыВыполнения.Вставить("ПоказатьОшибку", Ложь);
ПараметрыВыполнения.Вставить("СвойстваОшибки", Новый Структура("Ошибки", Новый Массив));
ПараметрыВыполнения.Вставить("ОписаниеОшибок", ОписаниеОшибок);
ПараметрыВыполнения.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент());
ПараметрыВыполнения.Вставить("Менеджер", Неопределено);
ПараметрыВыполнения.Вставить("ИнтерактивныйРежим", Ложь);
ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения(
"НайтиУстановленныеПрограммыЦиклПродолжение", ЭтотОбъект, Контекст));
Контекст.Вставить("ПараметрыВыполнения",
Новый Структура("СвойстваОшибки", ПараметрыВыполнения.СвойстваОшибки));
Контекст.Вставить("ПараметрыВыполнения", Новый Структура("ОписаниеОшибок", ОписаниеОшибок));
СоздатьМенеджерКриптографииЦиклНачало(ПараметрыВыполнения);
@@ -160,7 +161,7 @@
Процедура НайтиУстановленныеПрограммыЦиклПродолжение(Менеджер, Контекст) Экспорт
ОписаниеПрограммы = Контекст.ОписаниеПрограммы;
Ошибки = Контекст.ПараметрыВыполнения.СвойстваОшибки.Ошибки;
Ошибки = Контекст.ПараметрыВыполнения.ОписаниеОшибок.Ошибки;
Если Менеджер <> Неопределено Тогда
ОбновитьЗначение(ОписаниеПрограммы.РезультатПроверкиНаКлиенте, "");
@@ -572,11 +573,11 @@
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат не найден на компьютере по причине:
НСтр("ru = 'Сертификат не установлен на компьютере по причине:
|%1'"),
ПредставлениеОшибки);
Иначе
ТекстОшибки = НСтр("ru = 'Сертификат не найден на компьютере.'");
ТекстОшибки = НСтр("ru = 'Сертификат не установлен на компьютере.'");
КонецЕсли;
Если Контекст.ПоказатьОшибку = Неопределено Тогда
@@ -677,12 +678,33 @@
Контекст.Вставить("Оповещение", Оповещение);
Контекст.Вставить("ИсходныеДанные", ИсходныеДанные);
Контекст.Вставить("Подпись", Подпись);
Контекст.Вставить("АдресПодписи", "");
Контекст.Вставить("НаДату", НаДату);
Контекст.Вставить("ПроверятьНаСервере",
ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере());
Контекст.Вставить("АлгоритмПодписи",
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(Подпись));
Если ТипЗнч(Контекст.Подпись) = Тип("Строка")
И ЭтоАдресВременногоХранилища(Контекст.Подпись) Тогда
Контекст.АдресПодписи = Контекст.Подпись;
Контекст.Подпись = ПолучитьИзВременногоХранилища(Подпись);
КонецЕсли;
Если ТипЗнч(Контекст.Подпись) = Тип("ДвоичныеДанные") Тогда
Контекст.Вставить("АлгоритмПодписи",
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(Контекст.Подпись));
ИначеЕсли ТипЗнч(ИсходныеДанные) = Тип("Структура")
И ИсходныеДанные.Свойство("ПараметрыXMLDSig") Тогда // ЭтоXMLDSig.
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатИзКонвертаSOAP(
ИсходныеДанные.КонвертSOAP, Ложь);
Контекст.Вставить("АлгоритмПодписи",
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата));
Иначе
Контекст.Вставить("АлгоритмПодписи", "");
КонецЕсли;
Если МенеджерКриптографии = Неопределено Тогда
ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии();
@@ -760,23 +782,24 @@
И ЭтоАдресВременногоХранилища(Контекст.ИсходныеДанные) Тогда
АдресИсходныхДанных = Контекст.ИсходныеДанные;
ИначеЕсли ТипЗнч(Контекст.ИсходныеДанные) = Тип("ДвоичныеДанные") Тогда
Иначе
Если ТипЗнч(Контекст.ИсходныеДанные) = Тип("Структура")
И Контекст.ИсходныеДанные.Свойство("ПараметрыCMS") Тогда
Контекст.ИсходныеДанные.ПараметрыCMS.ВключениеСертификатовВПодпись =
ВключениеСертификатовВПодписьСтрокой(
Контекст.ИсходныеДанные.ПараметрыCMS.ВключениеСертификатовВПодпись);
КонецЕсли;
АдресИсходныхДанных = ПоместитьВоВременноеХранилище(Контекст.ИсходныеДанные);
КонецЕсли;
Если ТипЗнч(Контекст.Подпись) = Тип("Строка")
И ЭтоАдресВременногоХранилища(Контекст.Подпись) Тогда
АдресПодписи = Контекст.Подпись;
ИначеЕсли ТипЗнч(Контекст.Подпись) = Тип("ДвоичныеДанные") Тогда
АдресПодписи = ПоместитьВоВременноеХранилище(Контекст.Подпись);
Если Не ЗначениеЗаполнено(Контекст.АдресПодписи) Тогда
Контекст.АдресПодписи = ПоместитьВоВременноеХранилище(Контекст.Подпись);
КонецЕсли;
ОписаниеОшибки = "";
Результат = ЭлектроннаяПодписьСлужебныйВызовСервера.ПроверитьПодпись(
АдресИсходныхДанных, АдресПодписи, ОписаниеОшибки);
АдресИсходныхДанных, Контекст.АдресПодписи, ОписаниеОшибки);
Если Результат <> Истина Тогда
Результат = ОписаниеОшибки;
@@ -791,13 +814,7 @@
// Продолжение процедуры ПроверитьПодпись.
Процедура ПроверитьПодписьНаКлиенте(Контекст)
Подпись = Контекст.Подпись;
Если ТипЗнч(Подпись) = Тип("Строка") И ЭтоАдресВременногоХранилища(Подпись) Тогда
Подпись = ПолучитьИзВременногоХранилища(Подпись);
КонецЕсли;
Контекст.Вставить("ДанныеПодписи", Подпись);
Контекст.Вставить("ДанныеПодписи", Контекст.Подпись);
ЭтоXMLDSig = (ТипЗнч(Контекст) = Тип("Структура")
И ТипЗнч(Контекст.ИсходныеДанные) = Тип("Структура")
@@ -1012,7 +1029,7 @@
Процедура ПроверитьСертификатПослеОпределенияАлгоритмаПодписания(ДанныеСертификата, Контекст) Экспорт
Контекст.Вставить("АлгоритмПодписи",
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(Контекст.Сертификат));
ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписиСертификата(ДанныеСертификата));
ПродолжитьПроверкуСертификатаНаКлиенте(Контекст);
@@ -1236,25 +1253,14 @@
// Оповещение - ОписаниеОповещения - оповещение о результате выполнения следующих типов:
// МенеджерКриптографии - инициализированный менеджер криптографии.
// Строка - описание ошибки при создании менеджера криптографии.
// Структура - если ПоказатьОшибку = Неопределено. Содержит ошибки обращения к программам.
// * ОписаниеОшибки - Строка - описание ошибки, когда оно возвращается строкой.
// * ЗаголовокОшибки - Строка - заголовок ошибки, который соответствует операции.
// * Описание - Строка - описание общей ошибки.
// * Общая - Булево - если Истина, то содержит описание ошибки для всех программ,
// иначе альтернативное описание массиву Ошибки.
// * КАдминистратору - Булево - для исправления общей ошибки требуются права администратора.
// * Ошибки - Массив - содержит структуры описания ошибок программ со свойствами:
// * Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования.
// * Описание - Строка - содержит представление ошибки.
// * ИзИсключения - Булево - описание содержит краткое представление информации об ошибке.
// * НеУказанПуть - Булево - описание содержит ошибку о неуказанном пути для ОС Linux.
// * КАдминистратору - Булево - для исправления ошибки требуются права администратора.
// Структура - см. ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок
// если ПоказатьОшибку = Неопределено.
//
// Операция - Строка - если не пустая, то должна содержать одну из строк, которые определяют
// операцию для вставки в описание ошибки: Подписание, ПроверкаПодписи, Шифрование,
// Расшифровка, ПроверкаСертификата, ПолучениеСертификатов.
// ПараметрыСозданияМенеджераКриптографии - см. ЭлектроннаяПодписьСлужебныйКлиент.ПараметрыСозданияМенеджераКриптографии.
//
Процедура СоздатьМенеджерКриптографии(Оповещение, Операция, ПараметрыСозданияМенеджераКриптографии = Неопределено) Экспорт
Если ПараметрыСозданияМенеджераКриптографии = Неопределено Тогда
@@ -1313,46 +1319,42 @@
ЗаголовокОшибки = НСтр("ru = 'Не удалось выполнить операцию по причине:'");
КонецЕсли;
СвойстваОшибки = Новый Структура;
СвойстваОшибки.Вставить("ЗаголовокОшибки", ЗаголовокОшибки);
СвойстваОшибки.Вставить("Общая", Ложь);
СвойстваОшибки.Вставить("КАдминистратору", Ложь);
ОписаниеОшибок = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок();
ОписаниеОшибок.ЗаголовокОшибки = ЗаголовокОшибки;
Если Не Подключено Тогда
ТекстОшибки =
НСтр("ru = 'В браузере требуется установить расширение
|для работы с электронной подписью и шифрованием.'");
СвойстваОшибки.Вставить("Описание", ТекстОшибки);
СвойстваОшибки.Вставить("Общая", Истина);
СвойстваОшибки.Вставить("Ошибки", Новый Массив);
СвойстваОшибки.Вставить("Расширение", Истина);
СвойстваОшибки = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваОшибки();
СвойстваОшибки.Описание = ТекстОшибки;
СвойстваОшибки.НетРасширения = Истина;
ОписаниеОшибок.Общая = Истина;
ОписаниеОшибок.Ошибки.Добавить(СвойстваОшибки);
ОписаниеОшибок.ОписаниеОшибки = СокрЛП(ЗаголовокОшибки + Символы.ПС + ТекстОшибки);
СвойстваОшибки.Вставить("ОписаниеОшибки", СокрЛП(ЗаголовокОшибки + Символы.ПС + ТекстОшибки));
Если Контекст.ПоказатьОшибку = Неопределено Тогда
ОписаниеОшибки = СвойстваОшибки;
ОписаниеОшибки = ОписаниеОшибок;
Иначе
ОписаниеОшибки = СвойстваОшибки.ОписаниеОшибки;
ОписаниеОшибки = ОписаниеОшибок.ОписаниеОшибки;
КонецЕсли;
Если Контекст.ПоказатьОшибку = Истина Тогда
ПоказатьОшибкуОбращенияКПрограмме(
ЗаголовокФормы, ЗаголовокОшибки, СвойстваОшибки, Новый Структура);
ПоказатьОшибкуОбращенияКПрограмме(ЗаголовокФормы, "", ОписаниеОшибок, Новый Структура);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.Оповещение, ОписаниеОшибки);
Возврат;
КонецЕсли;
Контекст.Вставить("ЗаголовокФормы", ЗаголовокФормы);
Контекст.Вставить("ЗаголовокОшибки", ЗаголовокОшибки);
Контекст.Вставить("СвойстваОшибки", СвойстваОшибки);
Контекст.Вставить("ЗаголовокФормы", ЗаголовокФормы);
Контекст.Вставить("ОписаниеОшибок", ОписаниеОшибок);
// Здесь проверяется что это Linux или macOS клиент.
Контекст.Вставить("ЭтоLinux", Не ОбщегоНазначенияКлиент.ЭтоWindowsКлиент());
СвойстваОшибки.Вставить("Ошибки", Новый Массив);
ОписанияПрограмм = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииОписанияПрограмм(
Контекст.Программа, СвойстваОшибки.Ошибки, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм,
Контекст.АлгоритмПодписи);
Контекст.Программа, ОписаниеОшибок.Ошибки, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм);
Контекст.Вставить("Менеджер", Неопределено);
@@ -1383,7 +1385,7 @@
СвойстваПрограммы = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииСвойстваПрограммы(
Контекст.ОписаниеПрограммы,
Контекст.ЭтоLinux,
Контекст.СвойстваОшибки.Ошибки,
Контекст.ОписаниеОшибок.Ошибки,
Ложь,
ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().ПутиКПрограммамЭлектроннойПодписиИШифрования);
@@ -1415,7 +1417,7 @@
Если ИнформацияМодуля = Неопределено Тогда
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииПрограммаНеНайдена(
Контекст.ОписаниеПрограммы, Контекст.СвойстваОшибки.Ошибки, Ложь);
Контекст.ОписаниеПрограммы, Контекст.ОписаниеОшибок.Ошибки, Ложь);
Контекст.Менеджер = Неопределено;
СоздатьМенеджерКриптографииЦиклНачало(Контекст);
@@ -1426,7 +1428,7 @@
ИмяПрограммыПолученное = ИнформацияМодуля.Имя;
ИмяПрограммыСовпадает = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииИмяПрограммыСовпадает(
Контекст.ОписаниеПрограммы, ИмяПрограммыПолученное, Контекст.СвойстваОшибки.Ошибки, Ложь);
Контекст.ОписаниеПрограммы, ИмяПрограммыПолученное, Контекст.ОписаниеОшибок.Ошибки, Ложь);
Если Не ИмяПрограммыСовпадает Тогда
Контекст.Менеджер = Неопределено;
@@ -1435,6 +1437,23 @@
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.АлгоритмПодписи) Тогда
АлгоритмПодписиПоддерживается =
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииАлгоритмПодписиПоддерживается(
Контекст.ОписаниеПрограммы,
ИнформацияМодуля.АлгоритмыПодписи,
Контекст.АлгоритмПодписи,
Контекст.ОписаниеОшибок.Ошибки,
Ложь,
Контекст.Программа <> Неопределено);
Если Не АлгоритмПодписиПоддерживается Тогда
Контекст.Менеджер = Неопределено;
СоздатьМенеджерКриптографииЦиклНачало(Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
Контекст.Менеджер = Новый МенеджерКриптографии;
Если Не Контекст.ИнтерактивныйРежим
@@ -1465,7 +1484,7 @@
Контекст.Менеджер = Неопределено;
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииДобавитьОшибку(
Контекст.СвойстваОшибки.Ошибки,
Контекст.ОписаниеОшибок.Ошибки,
Контекст.ОписаниеПрограммы.Ссылка,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке),
Ложь, Истина, Истина);
@@ -1480,7 +1499,7 @@
АлгоритмыУстановлены = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииАлгоритмыУстановлены(
Контекст.ОписаниеПрограммы,
Контекст.Менеджер,
Контекст.СвойстваОшибки.Ошибки);
Контекст.ОписаниеОшибок.Ошибки);
Если Не АлгоритмыУстановлены Тогда
СоздатьМенеджерКриптографииЦиклНачало(Контекст);
@@ -1495,54 +1514,27 @@
// Продолжение процедуры СоздатьМенеджерКриптографии.
Процедура СоздатьМенеджерКриптографииПослеЦикла(Контекст)
Если Контекст.Менеджер <> Неопределено Или Не Контекст.Свойство("ЗаголовокОшибки") Тогда
Если Контекст.Менеджер <> Неопределено Или Не Контекст.Свойство("ЗаголовокФормы") Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Контекст.Менеджер);
Возврат;
КонецЕсли;
СвойстваОшибки = Контекст.СвойстваОшибки;
ОписаниеОшибок = Контекст.ОписаниеОшибок;
ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииЗаполнитьПредставлениеОшибок(
ОписаниеОшибок,
Контекст.Программа,
Контекст.АлгоритмПодписи,
СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоПолноправныйПользователь,
Ложь);
Если СвойстваОшибки.Ошибки.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru = 'Не предусмотрено использование ни одной программы.'");
СвойстваОшибки.Вставить("Описание", ТекстОшибки);
СвойстваОшибки.Общая = Истина;
СвойстваОшибки.КАдминистратору = Истина;
Если Не СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоПолноправныйПользователь Тогда
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + НСтр("ru = 'Обратитесь к администратору.'");
КонецЕсли;
СвойстваОшибки.Вставить("Инструкция", Истина);
СвойстваОшибки.Вставить("НастройкаПрограмм", Истина);
Иначе
Если Контекст.Программа <> Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Программа ""%1"" не доступна или не установлена на компьютере по причине:
|%2'"),
Контекст.Программа,
СвойстваОшибки.Ошибки[0].Описание);
Иначе
ТекстОшибки = НСтр("ru = 'Ни одна из программ не доступна или не установлена на компьютере.'");
Для Каждого Ошибка Из СвойстваОшибки.Ошибки Цикл
ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Программу ""%1"" не удалось использовать по причине:
|%2'"),
Ошибка.Программа,
Ошибка.Описание);
КонецЦикла;
КонецЕсли;
СвойстваОшибки.Вставить("Описание", ТекстОшибки);
КонецЕсли;
СвойстваОшибки.Вставить("ОписаниеОшибки", Контекст.ЗаголовокОшибки + Символы.ПС + ТекстОшибки);
Если Контекст.ПоказатьОшибку = Неопределено Тогда
ОписаниеОшибки = СвойстваОшибки;
ОписаниеОшибки = ОписаниеОшибок;
Иначе
ОписаниеОшибки = СвойстваОшибки.ОписаниеОшибки;
ОписаниеОшибки = ОписаниеОшибок.ОписаниеОшибки;
КонецЕсли;
Если Контекст.ПоказатьОшибку = Истина Тогда
ПоказатьОшибкуОбращенияКПрограмме(
Контекст.ЗаголовокФормы, Контекст.ЗаголовокОшибки, СвойстваОшибки, Новый Структура);
ПоказатьОшибкуОбращенияКПрограмме(Контекст.ЗаголовокФормы, "", ОписаниеОшибок, Новый Структура);
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.Оповещение, ОписаниеОшибки);
@@ -2808,7 +2800,8 @@
// Продолжение процедуры ПродолжитьОткрытиеНачало.
Процедура ПродолжитьОткрытиеНачалоПослеСозданияМенеджераКриптографии(Результат, Контекст) Экспорт
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии")
И Не ИспользоватьЭлектроннуюПодписьВМоделиСервиса() Тогда
ПоказатьОшибкуОбращенияКПрограмме(
НСтр("ru = 'Требуется программа электронной подписи и шифрования'"),
@@ -3845,13 +3838,9 @@
ИначеЕсли ЭтоCMS Тогда
Если Данные.ПараметрыCMS.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.НеВключать Тогда
Данные.ПараметрыCMS.ВключениеСертификатовВПодпись = "НеВключать";
ИначеЕсли Данные.ПараметрыCMS.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.ВключатьСертификатСубъекта Тогда
Данные.ПараметрыCMS.ВключениеСертификатовВПодпись = "ВключатьСертификатСубъекта";
Иначе
Данные.ПараметрыCMS.ВключениеСертификатовВПодпись = "ВключатьПолнуюЦепочку";
КонецЕсли;
Данные.ПараметрыCMS.ВключениеСертификатовВПодпись =
ВключениеСертификатовВПодписьСтрокой(
Данные.ПараметрыCMS.ВключениеСертификатовВПодпись);
ВыполнитьОбработкуОповещения(Контекст.Оповещение,
ПоместитьВоВременноеХранилище(Данные, Контекст.Форма.УникальныйИдентификатор));
@@ -3955,7 +3944,7 @@
//
Процедура НачатьИнициализациюСертификатаКриптографииДляПроверкиПодписиXMLDSig(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии)
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken");
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатИзКонвертаSOAP(КонвертSOAP);
ДвоичныеДанные = Base64Значение(СертификатКриптографииBase64);
Контекст = Новый Структура;
@@ -4553,7 +4542,7 @@
КонецЕсли;
АтрибутSignatureValue = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, "SignatureValue");
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, "wsse:BinarySecurityToken");
СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатИзКонвертаSOAP(Контекст.КонвертSOAP);
Попытка
@@ -4979,6 +4968,25 @@
КонецПроцедуры
// Для процедур ПроверитьПодписьПослеСозданияМенеджераКриптографии,
// ПолучитьДанныеИзОписанияДанныхПродолжение.
//
Функция ВключениеСертификатовВПодписьСтрокой(ВключениеСертификатовВПодпись)
Если ТипЗнч(ВключениеСертификатовВПодпись) <> Тип("РежимВключенияСертификатовКриптографии") Тогда
Возврат ВключениеСертификатовВПодпись;
КонецЕсли;
Если ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.НеВключать Тогда
Возврат "НеВключать";
ИначеЕсли ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.ВключатьСертификатСубъекта Тогда
Возврат "ВключатьСертификатСубъекта";
Иначе
Возврат "ВключатьПолнуюЦепочку";
КонецЕсли;
КонецФункции
// Для процедур СохранитьСертификатПродолжение, СохранитьЗапросНаСертификатПослеУстановкиРасширения.
// Готовит строку для использования в качестве имени файла.
@@ -5219,6 +5227,7 @@
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии")
И Результат.Общая Тогда
Результат.ЗаголовокОшибки = Контекст.ЗаголовокОшибкиПрограммы;
Контекст.Вставить("ОшибкаНаКлиенте", Результат);
ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено);
СообщитьОбОшибкеДобавленияСертификата(Контекст);
@@ -5239,21 +5248,18 @@
Контекст.Вставить("СертификатКриптографии", СертификатКриптографии);
Контекст.Вставить("ОписаниеОшибки", "");
Контекст.Вставить("ОшибкаНаКлиенте", Новый Структура);
Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", "");
Контекст.ОшибкаНаКлиенте.Вставить("Ошибки", Новый Массив);
Контекст.Вставить("ОшибкаНаКлиенте",
ЭлектроннаяПодписьСлужебныйКлиентСервер.НовоеОписаниеОшибок());
Если Не Контекст.Свойство("АлгоритмПодписи") Тогда
Контекст.Вставить("АлгоритмПодписи", "");
КонецЕсли;
ОписанияПрограмм = ЭлектроннаяПодписьСлужебныйКлиентСервер.МенеджерКриптографииОписанияПрограмм(
Неопределено, Контекст.ОшибкаНаКлиенте.Ошибки, ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм,
Контекст.АлгоритмПодписи);
ОписанияПрограмм = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ОписанияПрограмм;
ЭтоПолноправныйПользователь = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().ЭтоПолноправныйПользователь;
Контекст.Вставить("ОписанияПрограмм", ОписанияПрограмм);
Контекст.Вставить("ЭтоПолноправныйПользователь", ЭтоПолноправныйПользователь);
Контекст.Вставить("ОписаниеПрограммы", Неопределено);
Контекст.Вставить("Индекс", -1);
@@ -5299,7 +5305,11 @@
Если ТипЗнч(Результат) <> Тип("МенеджерКриптографии") Тогда
Если Результат.Ошибки.Количество() > 0 Тогда
Если Результат.Ошибки.Количество() > 0
И Не (ЗначениеЗаполнено(Контекст.АлгоритмПодписи)
И Результат.Ошибки[0].НетАлгоритма) Тогда
Результат.Ошибки[0].ЗаголовокОшибки = Контекст.ЗаголовокОшибкиПрограммы;
Контекст.ОшибкаНаКлиенте.Ошибки.Добавить(Результат.Ошибки[0]);
КонецЕсли;
@@ -5348,22 +5358,12 @@
СтандартнаяОбработка = Ложь;
ТекстТекущейОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1:
|Не удалось пройти проверку шифрования по причине:
|%2'"),
Контекст.ОписаниеПрограммы.Наименование,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ТекущаяОшибка = Новый Структура;
ТекущаяОшибка.Вставить("Описание", ТекстТекущейОшибки);
ТекущаяОшибка.Вставить("Инструкция", Истина);
ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина);
Контекст.ОшибкаНаКлиенте.Ошибки.Добавить(ТекущаяОшибка);
Контекст.ОшибкаНаКлиенте.ОписаниеОшибки = Контекст.ОшибкаНаКлиенте.ОписаниеОшибки
+ Символы.ПС + Символы.ПС + ТекстТекущейОшибки;
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
Контекст.ОшибкаНаКлиенте,
Контекст.ОписаниеПрограммы,
"Шифрование",
КраткоеПредставлениеОшибки(ИнформацияОбОшибке),
Контекст.ЭтоПолноправныйПользователь);
ДобавитьСертификатЦиклНачало(Контекст);
@@ -5386,32 +5386,26 @@
КонецПопытки;
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
Контекст.ОшибкаНаКлиенте,
Контекст.ОписаниеПрограммы,
"Подписание",
ПредставлениеОшибки,
Контекст.ЭтоПолноправныйПользователь,
ИнформацияОбОшибке = Неопределено);
ЗаполнитьОшибкуПодписания(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы,
ПредставлениеОшибки, ИнформацияОбОшибке = Неопределено);
ДобавитьСертификатЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Контекст.ДополнительныеПараметры.Программа = Контекст.ОписаниеПрограммы.Ссылка;
Попытка
Сертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатВСправочник(
Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры);
Исключение
Сертификат = Неопределено;
Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'");
Контекст.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить сертификат по причине:'");
Контекст.ОшибкаНаКлиенте.Ошибки = Новый Массив;
Контекст.ОшибкаНаКлиенте.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
СообщитьОбОшибкеДобавленияСертификата(Контекст);
КонецПопытки;
Сертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаписатьСертификатВСправочник(Контекст,
Контекст.ОшибкаНаКлиенте);
ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Сертификат);
Если Сертификат = Неопределено Тогда
СообщитьОбОшибкеДобавленияСертификата(Контекст);
Иначе
ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Сертификат);
КонецЕсли;
КонецПроцедуры
@@ -5420,8 +5414,12 @@
СтандартнаяОбработка = Ложь;
ЗаполнитьОшибкуПодписания(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки, Контекст.ОписаниеПрограммы,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке), Ложь);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
Контекст.ОшибкаНаКлиенте,
Контекст.ОписаниеПрограммы,
"Подписание",
КраткоеПредставлениеОшибки(ИнформацияОбОшибке),
Контекст.ЭтоПолноправныйПользователь);
ДобавитьСертификатЦиклНачало(Контекст);
@@ -5434,6 +5432,7 @@
//
Процедура ДобавитьСертификатЦиклПослеРасшифровки(РасшифрованныеДанные, Контекст) Экспорт
ИнформацияОбОшибке = Неопределено;
ПредставлениеОшибки = "";
Попытка
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеРасшифрованныеДанные(РасшифрованныеДанные, ПредставлениеОшибки);
@@ -5443,32 +5442,26 @@
КонецПопытки;
Если ЗначениеЗаполнено(ПредставлениеОшибки) Тогда
ЗаполнитьОшибкуРасшифровки(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки,
Контекст.ОписаниеПрограммы, ПредставлениеОшибки);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
Контекст.ОшибкаНаКлиенте,
Контекст.ОписаниеПрограммы,
"Расшифровка",
ПредставлениеОшибки,
Контекст.ЭтоПолноправныйПользователь,
ИнформацияОбОшибке = Неопределено);
ДобавитьСертификатЦиклНачало(Контекст);
Возврат;
КонецЕсли;
Контекст.ДополнительныеПараметры.Программа = Контекст.ОписаниеПрограммы.Ссылка;
Попытка
Сертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатВСправочник(
Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры);
Исключение
Сертификат = Неопределено;
Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'");
Контекст.ЗаголовокОшибки = НСтр("ru = 'Не удалось добавить сертификат по причине:'");
Контекст.ОшибкаНаКлиенте.Ошибки = Новый Массив;
Контекст.ОшибкаНаКлиенте.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
СообщитьОбОшибкеДобавленияСертификата(Контекст);
КонецПопытки;
Сертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаписатьСертификатВСправочник(Контекст,
Контекст.ОшибкаНаКлиенте);
ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Сертификат);
Если Сертификат = Неопределено Тогда
СообщитьОбОшибкеДобавленияСертификата(Контекст);
Иначе
ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Сертификат);
КонецЕсли;
КонецПроцедуры
@@ -5476,8 +5469,13 @@
Процедура ДобавитьСертификатЦиклПослеОшибкиРасшифровки(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт
СтандартнаяОбработка = Ложь;
ЗаполнитьОшибкуРасшифровки(Контекст.ОшибкаНаКлиенте, Контекст.ОписаниеОшибки,
Контекст.ОписаниеПрограммы, КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаполнитьОшибкуДобавленияСертификата(
Контекст.ОшибкаНаКлиенте,
Контекст.ОписаниеПрограммы,
"Расшифровка",
КраткоеПредставлениеОшибки(ИнформацияОбОшибке),
Контекст.ЭтоПолноправныйПользователь);
ДобавитьСертификатЦиклНачало(Контекст);
@@ -5491,61 +5489,7 @@
КонтекстДобавления.ОшибкаНаСервере, Новый Структура);
ПоказатьОшибкуОбращенияКПрограмме(КонтекстДобавления.ЗаголовокФормы,
КонтекстДобавления.ЗаголовокОшибки, ОшибкаНаКлиенте, ОшибкаНаСервере, Новый Структура);
КонецПроцедуры
// Параметры:
// Ошибка - Структура - со свойствами:
// * Ошибки - Массив - .
//
Процедура ЗаполнитьОшибкуПодписания(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки, ПустыеДанные)
ТекстТекущейОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1:
|Не удалось пройти проверку подписания по причине:
|%2'"),
ОписаниеПрограммы.Наименование,
ПредставлениеОшибки);
ТекущаяОшибка = Новый Структура;
ТекущаяОшибка.Вставить("Описание", ТекстТекущейОшибки);
Если Не ПустыеДанные Тогда
ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина);
ТекущаяОшибка.Вставить("Инструкция", Истина);
КонецЕсли;
Ошибка.Ошибки.Добавить(ТекущаяОшибка);
Ошибка.ОписаниеОшибки = Ошибка.ОписаниеОшибки
+ Символы.ПС + Символы.ПС + ТекстТекущейОшибки;
КонецПроцедуры
// Параметры:
// Ошибка - Структура - со свойствами:
// * Ошибки - Массив - .
//
Процедура ЗаполнитьОшибкуРасшифровки(Ошибка, ОписаниеОшибки, ОписаниеПрограммы, ПредставлениеОшибки)
ТекстТекущейОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1:
|Не удалось пройти проверку расшифровки по причине:
|%2'"),
ОписаниеПрограммы.Наименование,
ПредставлениеОшибки);
ТекущаяОшибка = Новый Структура;
ТекущаяОшибка.Вставить("Описание", ТекстТекущейОшибки);
ТекущаяОшибка.Вставить("Инструкция", Истина);
ТекущаяОшибка.Вставить("НастройкаПрограмм", Истина);
Ошибка.Ошибки.Добавить(ТекущаяОшибка);
Ошибка.ОписаниеОшибки = Ошибка.ОписаниеОшибки
+ Символы.ПС + Символы.ПС + ТекстТекущейОшибки;
"", ОшибкаНаКлиенте, ОшибкаНаСервере);
КонецПроцедуры
@@ -5643,17 +5587,20 @@
Процедура ПослеСбораТехническойИнформации(ИнформацияОПрограммах, Контекст) Экспорт
Контекст.СопроводительныйТекст = Контекст.СопроводительныйТекст + ИнформацияОПрограммах;
Контекст.Вставить("АдресАрхива", ЭлектроннаяПодписьСлужебныйВызовСервера.АдресАрхиваТехническойИнформации(
Контекст.СопроводительныйТекст, Контекст.ДополнительныеФайлы));
ФайловаяСистемаКлиент.СохранитьФайл(Новый ОписаниеОповещения(
"СформироватьТехническуюИнформациюПослеСохраненияФайла", ЭтотОбъект, Контекст.ОбработчикЗавершения),
ЭлектроннаяПодписьСлужебныйВызовСервера.АдресАрхиваТехническойИнформации(
Контекст.СопроводительныйТекст, Контекст.ДополнительныеФайлы), "service_info.zip");
"СформироватьТехническуюИнформациюПослеСохраненияФайла", ЭтотОбъект, Контекст),
Контекст.АдресАрхива, "service_info.zip");
КонецПроцедуры
Процедура СформироватьТехническуюИнформациюПослеСохраненияФайла(СохраненныеФайлы, ОповещениеОЗавершении) Экспорт
Процедура СформироватьТехническуюИнформациюПослеСохраненияФайла(СохраненныеФайлы, Контекст) Экспорт
Если ОповещениеОЗавершении <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, СохраненныеФайлы <> Неопределено);
УдалитьИзВременногоХранилища(Контекст.АдресАрхива);
Если Контекст.ОбработчикЗавершения <> Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, СохраненныеФайлы <> Неопределено);
КонецЕсли;
КонецПроцедуры
@@ -63,55 +63,90 @@
КонецФункции
// Возвращаемое значение:
// Структура - содержит ошибки выполнения операций программами.
// * ОписаниеОшибки - Строка - полное описание ошибки, когда оно возвращается строкой.
// * ЗаголовокОшибки - Строка - заголовок ошибки, который соответствует операции
// когда операция одна (не заполнен, когда операций несколько).
// * Общая - Булево - если Истина, то одна ошибка общая для всех программ.
// * ИмяКомпьютера - Строка - имя компьютера при выполнении операции на стороне сервера.
// * Ошибки - Массив Из см. НовыеСвойстваОшибки
//
Функция НовоеОписаниеОшибок(ИмяКомпьютера = "") Экспорт
Описание = Новый Структура;
Описание.Вставить("ОписаниеОшибки", "");
Описание.Вставить("ЗаголовокОшибки", "");
Описание.Вставить("Общая", Ложь);
Описание.Вставить("ИмяКомпьютера", ИмяКомпьютера);
Описание.Вставить("Ошибки", Новый Массив);
Возврат Описание;
КонецФункции
// Возвращает свойства ошибки выполнения одной операции одной программой.
//
// Возвращаемое значение:
// Структура:
// * ЗаголовокОшибки - Строка - заголовок ошибки, который соответствует операции
// когда операций несколько (не заполнен, когда операция одна).
// * Описание - Строка - краткое представление ошибки.
// * ИзИсключения - Булево - описание ошибки содержит краткое представление информации об ошибке.
// * НетРасширения - Булево - не подключилось расширение для работы с ЭП (требуется установить).
// * КАдминистратору - Булево - для исправления ошибки требуются права администратора.
// * Инструкция - Булево - для исправления требуется инструкция по работе с программами ЭП.
// * НастройкаПрограмм - Булево - для исправления ошибки требуется настройка программ.
// * Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - если не
// заполнено, значит ошибка, общая для всех программ.
// * НетАлгоритма - Булево - менеджер криптографии не поддерживает алгоритм, указанный
// для его создании в дополнение к указанной программе.
// * НеУказанПуть - Булево - для программы не указан путь, необходимый для ОС Linux.
//
Функция НовыеСвойстваОшибки() Экспорт
ПустаяПрограмма = ПредопределенноеЗначение("Справочник.ПрограммыЭлектроннойПодписиИШифрования.ПустаяСсылка");
СвойстваОшибки = Новый Структура;
СвойстваОшибки.Вставить("ЗаголовокОшибки", "");
СвойстваОшибки.Вставить("Описание", "");
СвойстваОшибки.Вставить("ИзИсключения", Ложь);
СвойстваОшибки.Вставить("НетРасширения", Ложь);
СвойстваОшибки.Вставить("КАдминистратору", Ложь);
СвойстваОшибки.Вставить("Инструкция", Ложь);
СвойстваОшибки.Вставить("НастройкаПрограмм", Ложь);
СвойстваОшибки.Вставить("Программа", ПустаяПрограмма);
СвойстваОшибки.Вставить("НетАлгоритма", Ложь);
СвойстваОшибки.Вставить("НеУказанПуть", Ложь);
Возврат СвойстваОшибки;
КонецФункции
// Только для внутреннего использования.
Функция МенеджерКриптографииОписанияПрограмм(Программа, Ошибки, Знач ОписанияПрограмм, АлгоритмПодписи = "") Экспорт
Функция МенеджерКриптографииОписанияПрограмм(Программа, Ошибки, Знач ОписанияПрограмм) Экспорт
Если Программа <> Неопределено Тогда
ПрограммаНеНайдена = Истина;
ПрограммаНайдена = Ложь;
Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
Если ОписаниеПрограммы.Ссылка = Программа Тогда
ПрограммаНеНайдена = Ложь;
ПрограммаНайдена = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПрограммаНеНайдена Тогда
Если Не ПрограммаНайдена Тогда
МенеджерКриптографииДобавитьОшибку(Ошибки, Программа,
НСтр("ru = 'Не предусмотрена для использования.'"), Истина);
НСтр("ru = 'Программа не предусмотрена для использования.'"), Истина);
Возврат Неопределено;
КонецЕсли;
ОписанияПрограмм = Новый Массив;
ОписанияПрограмм.Добавить(ОписаниеПрограммы);
ИначеЕсли Не ПустаяСтрока(АлгоритмПодписи) Тогда
Если СтрНайти(АлгоритмПодписи, ",") > 0 Тогда
ВозможныеАлгоритмы = СтрРазделить(АлгоритмПодписи, ",", Ложь);
Для СчетчикАлгоритмов = 0 По ВозможныеАлгоритмы.Количество() - 1 Цикл
ВозможныеАлгоритмы[СчетчикАлгоритмов] = СокрЛП(ВозможныеАлгоритмы[СчетчикАлгоритмов]);
КонецЦикла;
Иначе
ВозможныеАлгоритмы = Новый Массив;
ВозможныеАлгоритмы.Добавить(СокрЛП(АлгоритмПодписи));
КонецЕсли;
ПрограммыСУказаннымАлгоритмом = Новый Массив;
Для Каждого ОписаниеПрограммы Из ОписанияПрограмм Цикл
Если ВозможныеАлгоритмы.Найти(ОписаниеПрограммы.АлгоритмПодписи) <> Неопределено Тогда
ПрограммыСУказаннымАлгоритмом.Добавить(ОписаниеПрограммы);
КонецЕсли;
КонецЦикла;
Возврат ПрограммыСУказаннымАлгоритмом;
КонецЕсли;
Возврат ОписанияПрограмм;
@@ -157,6 +192,37 @@
КонецФункции
// Только для внутреннего использования.
Функция МенеджерКриптографииАлгоритмПодписиПоддерживается(ОписаниеПрограммы, АлгоритмыПодписи,
АлгоритмПодписи, Ошибки, ЭтоСервер, ДобавлятьОшибку) Экспорт
ВозможныеАлгоритмы = СтрРазделить(АлгоритмПодписи, ",", Ложь);
Для Каждого ВозможныйАлгоритм Из ВозможныеАлгоритмы Цикл
ВозможныйАлгоритм = СокрЛП(ВозможныйАлгоритм);
Если АлгоритмыПодписи.Найти(ВозможныйАлгоритм) <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Если Не ДобавлятьОшибку Тогда
Возврат Ложь;
КонецЕсли;
Если ВозможныеАлгоритмы.Количество() = 1 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Программа не поддерживает алгоритм подписи %1.'"), АлгоритмПодписи);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Программа не поддерживает ни один из алгоритмов подписи %1.'"), АлгоритмПодписи);
КонецЕсли;
МенеджерКриптографииДобавитьОшибку(Ошибки, ОписаниеПрограммы.Ссылка, ТекстОшибки, ЭтоСервер, Истина);
Ошибки[Ошибки.ВГраница()].НетАлгоритма = Истина;
Возврат Ложь;
КонецФункции
// Только для внутреннего использования.
Функция МенеджерКриптографииАлгоритмыУстановлены(ОписаниеПрограммы, Менеджер, Ошибки) Экспорт
@@ -286,24 +352,210 @@
// Только для внутреннего использования.
//
// Параметры:
// Ошибки - Массив - .
// Ошибки - Массив Из см. НовыеСвойстваОшибки
// Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
// Описание - Строка
// КАдминистратору - Булево
// Инструкция - Булево
// ИзИсключения - Булево
// НеУказанПуть - Булево
//
Процедура МенеджерКриптографииДобавитьОшибку(Ошибки, Программа, Описание,
КАдминистратору, Инструкция = Ложь, ИзИсключения = Ложь, НеУказанПуть = Ложь) Экспорт
СвойстваОшибки = Новый Структура;
СвойстваОшибки.Вставить("Программа", Программа);
СвойстваОшибки.Вставить("Описание", Описание);
СвойстваОшибки.Вставить("КАдминистратору", КАдминистратору);
СвойстваОшибки.Вставить("Инструкция", Инструкция);
СвойстваОшибки.Вставить("ИзИсключения", ИзИсключения);
СвойстваОшибки.Вставить("НеУказанПуть", НеУказанПуть);
СвойстваОшибки.Вставить("НастройкаПрограмм", Истина);
СвойстваОшибки = НовыеСвойстваОшибки();
Если ЗначениеЗаполнено(Программа) Тогда
СвойстваОшибки.Программа = Программа;
КонецЕсли;
СвойстваОшибки.Описание = Описание;
СвойстваОшибки.КАдминистратору = КАдминистратору;
СвойстваОшибки.Инструкция = Инструкция;
СвойстваОшибки.ИзИсключения = ИзИсключения;
СвойстваОшибки.НеУказанПуть = НеУказанПуть;
СвойстваОшибки.НастройкаПрограмм = Истина;
Ошибки.Добавить(СвойстваОшибки);
КонецПроцедуры
// Только для внутреннего использования.
//
// Параметры:
// ОписаниеОшибок - см. НовоеОписаниеОшибок
// Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
// АлгоритмПодписи - Строка
// ЭтоПолноправныйПользователь - Булево
// ЭтоСервер - Булево
//
Процедура МенеджерКриптографииЗаполнитьПредставлениеОшибок(ОписаниеОшибок,
Программа, АлгоритмПодписи, ЭтоПолноправныйПользователь, ЭтоСервер) Экспорт
Если ОписаниеОшибок.Ошибки.Количество() = 0 Тогда
Если Не ЗначениеЗаполнено(АлгоритмПодписи) Тогда
ТекстОшибки = НСтр("ru = 'Не предусмотрено использование ни одной программы.'");
Иначе
ШаблонОшибки = НСтр("ru = 'Не предусмотрено использование ни одной программы
|с алгоритмом подписи %1.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки,
СтрЗаменить(АлгоритмПодписи, ", ", " " + НСтр("ru = 'или'") + " "));
КонецЕсли;
ОписаниеОшибок.Общая = Истина;
МенеджерКриптографииДобавитьОшибку(ОписаниеОшибок.Ошибки,
Неопределено, ТекстОшибки, Истина, Истина);
КонецЕсли;
ЗаполнитьОбщееПредставлениеОшибок(ОписаниеОшибок, ЭтоПолноправныйПользователь);
КонецПроцедуры
// Только для внутреннего использования.
//
// Параметры:
// ОписаниеОшибок - см. НовоеОписаниеОшибок
// ЭтоПолноправныйПользователь - Булево
//
Процедура ЗаполнитьОбщееПредставлениеОшибок(ОписаниеОшибок, ЭтоПолноправныйПользователь)
ЧастиОписания = Новый Массив;
Если ЗначениеЗаполнено(ОписаниеОшибок.ЗаголовокОшибки) Тогда
ЧастиОписания.Добавить(ОписаниеОшибок.ЗаголовокОшибки);
КонецЕсли;
КАдминистратору = Ложь;
Для Каждого СвойстваОшибки Из ОписаниеОшибок.Ошибки Цикл
Описание = "";
Если ЗначениеЗаполнено(СвойстваОшибки.ЗаголовокОшибки) Тогда
Описание = Описание + СвойстваОшибки.ЗаголовокОшибки + Символы.ПС;
КонецЕсли;
Если ЗначениеЗаполнено(СвойстваОшибки.Программа) Тогда
Описание = Описание + Строка(СвойстваОшибки.Программа) + ":" + Символы.ПС;
КонецЕсли;
ЧастиОписания.Добавить(Описание + СвойстваОшибки.Описание);
КАдминистратору = КАдминистратору Или СвойстваОшибки.КАдминистратору;
КонецЦикла;
ОписаниеОшибки = СтрСоединить(ЧастиОписания, Символы.ПС);
Если КАдминистратору И Не ЭтоПолноправныйПользователь Тогда
ОписаниеОшибки = ОписаниеОшибки + Символы.ПС + Символы.ПС
+ НСтр("ru = 'Обратитесь к администратору.'");
КонецЕсли;
ОписаниеОшибок.ОписаниеОшибки = ОписаниеОшибки;
КонецПроцедуры
// Только для внутреннего использования.
//
// Параметры:
// Контекст - Структура:
// * ОписаниеПрограммы - Структура:
// * Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
// Ошибка - см. НовоеОписаниеОшибок
//
Функция ЗаписатьСертификатВСправочник(Контекст, Ошибка) Экспорт
Контекст.ДополнительныеПараметры.Программа = Контекст.ОписаниеПрограммы.Ссылка;
Попытка
Сертификат = ЭлектроннаяПодписьСлужебныйВызовСервера.ЗаписатьСертификатВСправочник(
Контекст.ДанныеСертификата, Контекст.ДополнительныеПараметры);
Исключение
Сертификат = Неопределено;
Контекст.ЗаголовокФормы = НСтр("ru = 'Ошибка добавления сертификата'");
Ошибка.Общая = Истина;
Ошибка.ЗаголовокОшибки = НСтр("ru = 'Не удалось записать сертификат по причине:'");
СвойстваОшибки = НовыеСвойстваОшибки();
СвойстваОшибки.Описание = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Ошибка.Ошибки.Добавить(СвойстваОшибки);
КонецПопытки;
Возврат Сертификат;
КонецФункции
// Только для внутреннего использования.
Функция ЗаголовокОшибкиДобавленияСертификата(Операция, ИмяКомпьютера = "") Экспорт
Если ЗначениеЗаполнено(ИмяКомпьютера) Тогда // Признак ЭтоСервер.
Если Операция = "Подписание" Тогда
ШаблонЗаголовка = НСтр("ru = 'Не удалось пройти проверку подписания на сервере %1 по причине:'");
ИначеЕсли Операция = "Шифрование" Тогда
ШаблонЗаголовка = НСтр("ru = 'Не удалось пройти проверку шифрования на сервере %1 по причине:'");
ИначеЕсли Операция = "Расшифровка" Тогда
ШаблонЗаголовка = НСтр("ru = 'Не удалось пройти проверку расшифровки на сервере %1 по причине:'");
КонецЕсли;
ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗаголовка, ИмяКомпьютера);
Иначе
Если Операция = "Подписание" Тогда
ЗаголовокОшибки = НСтр("ru = 'Не удалось пройти проверку подписания на компьютере по причине:'");
ИначеЕсли Операция = "Шифрование" Тогда
ЗаголовокОшибки = НСтр("ru = 'Не удалось пройти проверку шифрования на компьютере по причине:'");
ИначеЕсли Операция = "Расшифровка" Тогда
ЗаголовокОшибки = НСтр("ru = 'Не удалось пройти проверку расшифровки на компьютере по причине:'");
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ЗаголовокОшибки) Тогда
ТекущийТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Некорректное значение параметра Операция ""%1"" в процедуре %2'"),
Операция,
"ЗаполнитьОшибкуДобавленияСертификата");
ВызватьИсключение ТекущийТекстОшибки;
КонецЕсли;
Возврат ЗаголовокОшибки;
КонецФункции
// Только для внутреннего использования.
//
// Параметры:
// ОписаниеОшибок - см. НовоеОписаниеОшибок
// ОписаниеПрограммы - Структура:
// * Ссылка - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования
// Операция - Строка
// ТекстОшибки - Строка
// ЭтоПолноправныйПользователь - Булево
// ПустыеДанные - Булево
// ИмяКомпьютера - Строка
//
Процедура ЗаполнитьОшибкуДобавленияСертификата(ОписаниеОшибок, ОписаниеПрограммы, Операция,
ТекстОшибки, ЭтоПолноправныйПользователь, ПустыеДанные = Ложь, ИмяКомпьютера = "") Экспорт
ЗаголовокОшибки = ЗаголовокОшибкиДобавленияСертификата(Операция, ИмяКомпьютера);
СвойстваОшибки = НовыеСвойстваОшибки();
СвойстваОшибки.Описание = ТекстОшибки;
СвойстваОшибки.Программа = ОписаниеПрограммы.Ссылка;
Если Не ПустыеДанные Тогда
СвойстваОшибки.ИзИсключения = Истина;
СвойстваОшибки.Инструкция = Истина;
СвойстваОшибки.НастройкаПрограмм = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибок.Ошибки) Тогда
ОписаниеОшибок.ЗаголовокОшибки = ЗаголовокОшибки;
ИначеЕсли Не ЗначениеЗаполнено(ОписаниеОшибок.ЗаголовокОшибки) Тогда
СвойстваОшибки.ЗаголовокОшибки = ЗаголовокОшибки;
ИначеЕсли ОписаниеОшибок.ЗаголовокОшибки <> ЗаголовокОшибки Тогда
Для Каждого ТекущиеСвойства Из ОписаниеОшибок.Ошибки Цикл
ТекущиеСвойства.ЗаголовокОшибки = ОписаниеОшибок.ЗаголовокОшибки;
КонецЦикла;
ОписаниеОшибок.ЗаголовокОшибки = "";
СвойстваОшибки.ЗаголовокОшибки = ЗаголовокОшибки;
КонецЕсли;
ОписаниеОшибок.Ошибки.Добавить(СвойстваОшибки);
ЗаполнитьОбщееПредставлениеОшибок(ОписаниеОшибок, ЭтоПолноправныйПользователь);
КонецПроцедуры
// Только для внутреннего использования.
Функция РежимыПроверкиСертификата(ИгнорироватьВремяДействия = Ложь) Экспорт
@@ -605,6 +857,19 @@
КонецФункции
// Только для внутреннего использования.
Функция СертификатИзКонвертаSOAP(КонвертSOAP, ВФорматеBase64 = Истина) Экспорт
СертификатBase64 = НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken");
Если ВФорматеBase64 Тогда
Возврат СертификатBase64;
КонецЕсли;
Возврат Base64Значение(СертификатBase64);
КонецФункции
// См. ЭлектроннаяПодписьКлиент.ПредставлениеСертификата.
Функция ПредставлениеСертификата(Сертификат, ДобавкаВремени, МодульЭлектроннаяПодписьЛокализацияКлиентСервер) Экспорт
@@ -1049,135 +1314,172 @@
Функция АлгоритмПодписи(Данные, ЭтоДанныеСертификата = Ложь)
Если ТипЗнч(Данные) = Тип("Строка")
И ЭтоАдресВременногоХранилища(Данные) Тогда
ЧтениеДанных = Новый ЧтениеДанных(
ПолучитьИзВременногоХранилища(Данные));
ИначеЕсли ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
ЧтениеДанных = Новый ЧтениеДанных(Данные);
Если ТипЗнч(Данные) = Тип("Строка") Тогда
Если ЭтоАдресВременногоХранилища(Данные) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Данные);
Иначе
ОбщегоНазначенияКлиентСервер.Проверить(Ложь,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недопустимый адрес временного хранилища в параметре Данные:
|%1'"), Данные),
"ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписи");
КонецЕсли;
Иначе
Возврат "";
ДвоичныеДанные = Данные;
КонецЕсли;
Попытка
Если ЭтоДанныеСертификата Тогда
ПропуститьНачалоБлока(ЧтениеДанных, 3);
ПропуститьБлок(ЧтениеДанных, 2);
ПропуститьНачалоБлока(ЧтениеДанных, 1);
Иначе
ПропуститьНачалоБлока(ЧтениеДанных, 1);
ПропуститьБлок(ЧтениеДанных, 1);
ПропуститьНачалоБлока(ЧтениеДанных, 2);
ПропуститьБлок(ЧтениеДанных, 3);
ПропуститьНачалоБлока(ЧтениеДанных, 3);
ПропуститьБлок(ЧтениеДанных, 2);
ПропуститьНачалоБлока(ЧтениеДанных, 1);
КонецЕсли;
ЧтениеДанных.ПрочитатьБайт();
РазмерБлока = ЧтениеДанных.ПрочитатьБайт();
Идентификатор = Новый Массив;
БайтSID1 = ЧтениеДанных.ПрочитатьБайт();
Если БайтSID1 < 40 Тогда
SID1 = 0;
ИначеЕсли БайтSID1 < 80 Тогда
SID1 = 1;
Иначе
SID1 = 2;
КонецЕсли;
Идентификатор.Добавить(Формат(SID1, "ЧН=0"));
Идентификатор.Добавить(Формат(БайтSID1 - SID1 * 40, "ЧН=0"));
СоставноеЗначение = Новый Массив;
Для Индекс = 1 По РазмерБлока - 1 Цикл
ТекущийБайт = ЧтениеДанных.ПрочитатьБайт();
Если ТекущийБайт <= 128 Тогда
Если СоставноеЗначение.Количество() > 0 Тогда
СоставноеЗначение.Добавить(ТекущийБайт);
ЭлементИдентификатора = 0;
РазмерСоставногоЗначения = СоставноеЗначение.Количество() - 1;
Для СоставнаяЧасть = 0 По РазмерСоставногоЗначения Цикл
ЭлементИдентификатора = ЭлементИдентификатора
+ СоставноеЗначение[СоставнаяЧасть]
* Pow(128, (РазмерСоставногоЗначения - СоставнаяЧасть));
КонецЦикла;
Идентификатор.Добавить(Формат(ЭлементИдентификатора, "ЧН=0; ЧГ="));
СоставноеЗначение.Очистить();
Иначе
Идентификатор.Добавить(Формат(ТекущийБайт, "ЧН=0"));
КонецЕсли;
Иначе
СоставноеЗначение.Добавить(ТекущийБайт - 128);
КонецЕсли;
КонецЦикла;
OIDАлгоритмаПодписи = СтрСоединить(Идентификатор, ".");
ЧтениеДанных.Закрыть();
Исключение
Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда
АнализДанных = Новый Структура;
АнализДанных.Вставить("ЕстьОшибка", Ложь);
АнализДанных.Вставить("Индекс", 0);
АнализДанных.Вставить("Буфер",
ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные));
Иначе
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(
"ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмПодписи",
"Данные",
Данные, Новый ОписаниеТипов("Строка, ДвоичныеДанные"));
КонецЕсли;
Если ЭтоДанныеСертификата Тогда
ПропуститьНачалоБлока(АнализДанных, 3);
ПропуститьБлок(АнализДанных, 2);
ПропуститьНачалоБлока(АнализДанных, 1);
Иначе
ПропуститьНачалоБлока(АнализДанных, 1);
ПропуститьБлок(АнализДанных, 1);
ПропуститьНачалоБлока(АнализДанных, 2);
ПропуститьБлок(АнализДанных, 3);
ПропуститьНачалоБлока(АнализДанных, 3);
ПропуститьБлок(АнализДанных, 2);
ПропуститьНачалоБлока(АнализДанных, 1);
КонецЕсли;
РазмерБлока = ПрочитатьБайт(АнализДанных, 2);
Если АнализДанных.ЕстьОшибка Тогда
Возврат "";
КонецПопытки;
КонецЕсли;
Идентификатор = Новый Массив;
БайтSID1 = ПрочитатьБайт(АнализДанных);
Если АнализДанных.ЕстьОшибка Тогда
Возврат "";
КонецЕсли;
Если БайтSID1 < 40 Тогда
SID1 = 0;
ИначеЕсли БайтSID1 < 80 Тогда
SID1 = 1;
Иначе
SID1 = 2;
КонецЕсли;
Идентификатор.Добавить(Формат(SID1, "ЧН=0"));
Идентификатор.Добавить(Формат(БайтSID1 - SID1 * 40, "ЧН=0"));
СоставноеЗначение = Новый Массив;
Для Индекс = 1 По РазмерБлока - 1 Цикл
ТекущийБайт = ПрочитатьБайт(АнализДанных);
Если АнализДанных.ЕстьОшибка Тогда
Возврат "";
КонецЕсли;
Если ТекущийБайт > 128 Тогда
СоставноеЗначение.Добавить(ТекущийБайт - 128);
Продолжить;
КонецЕсли;
Если СоставноеЗначение.Количество() > 0 Тогда
СоставноеЗначение.Добавить(ТекущийБайт);
ЭлементИдентификатора = 0;
РазмерСоставногоЗначения = СоставноеЗначение.Количество() - 1;
Для СоставнаяЧасть = 0 По РазмерСоставногоЗначения Цикл
ЭлементИдентификатора = ЭлементИдентификатора
+ СоставноеЗначение[СоставнаяЧасть]
* Pow(128, (РазмерСоставногоЗначения - СоставнаяЧасть));
КонецЦикла;
Идентификатор.Добавить(Формат(ЭлементИдентификатора, "ЧН=0; ЧГ="));
СоставноеЗначение.Очистить();
Иначе
Идентификатор.Добавить(Формат(ТекущийБайт, "ЧН=0"));
КонецЕсли;
КонецЦикла;
OIDАлгоритмаПодписи = СтрСоединить(Идентификатор, ".");
ПредставлениеАлгоритма = ИдентификаторыАлгоритмовПодписи().Получить(OIDАлгоритмаПодписи);
Возврат ?(ПредставлениеАлгоритма = Неопределено, "", ПредставлениеАлгоритма);
Если ПредставлениеАлгоритма = Неопределено Тогда
Возврат "";
Иначе
Возврат ПредставлениеАлгоритма;
КонецЕсли;
КонецФункции
Процедура ПропуститьНачалоБлока(ЧтениеДанных, КоличествоИтераций)
Процедура ПропуститьНачалоБлока(АнализДанных, КоличествоИтераций)
Для СчетчикПоследовательностей = 1 По КоличествоИтераций Цикл
ЧтениеДанных.ПрочитатьБайт();
РазмерБлока = ЧтениеДанных.ПрочитатьБайт();
РазмерБлока = ПрочитатьБайт(АнализДанных, 2);
Если АнализДанных.ЕстьОшибка Тогда
Возврат;
КонецЕсли;
Если РазмерБлока > 128 Тогда
ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(РазмерБлока - 128);
ПрочитатьБайт(АнализДанных, РазмерБлока - 128);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПропуститьБлок(ЧтениеДанных,КоличествоИтераций)
Процедура ПропуститьБлок(АнализДанных,КоличествоИтераций)
Для СчетчикДанных = 1 По КоличествоИтераций Цикл
ЧтениеДанных.ПрочитатьБайт();
РазмерБлока = ЧтениеДанных.ПрочитатьБайт();
РазмерБлока = ПрочитатьБайт(АнализДанных, 2);
Если АнализДанных.ЕстьОшибка Тогда
Возврат;
КонецЕсли;
Если РазмерБлока <= 128 Тогда
ДлинаБлокаДанных = РазмерБлока;
Иначе
Буфер = ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(РазмерБлока - 128);
ДлинаБлокаДанных = 0;
РазмерБуфера = Буфер.Размер - 1;
Для ТекущийБайт = 0 По РазмерБуфера Цикл
РазмерЗаголовка = РазмерБлока - 129;
Для ТекущийИндекс = 0 По РазмерЗаголовка Цикл
ТекущийБайт = ПрочитатьБайт(АнализДанных);
Если АнализДанных.ЕстьОшибка Тогда
Возврат;
КонецЕсли;
ДлинаБлокаДанных = ДлинаБлокаДанных
+ Буфер[ТекущийБайт] * Pow(16, 2*(РазмерБуфера - ТекущийБайт));
+ ТекущийБайт * Pow(16, 2*(РазмерЗаголовка - ТекущийИндекс));
КонецЦикла;
КонецЕсли;
ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных(ДлинаБлокаДанных);
ПрочитатьБайт(АнализДанных, ДлинаБлокаДанных);
КонецЦикла;
КонецПроцедуры
Функция ПрочитатьБайт(АнализДанных, КоличествоРаз = 1)
Если АнализДанных.Индекс + КоличествоРаз <= АнализДанных.Буфер.Размер Тогда
Байт = АнализДанных.Буфер.Получить(АнализДанных.Индекс + КоличествоРаз - 1);
АнализДанных.Индекс = АнализДанных.Индекс + КоличествоРаз;
Иначе
Байт = Неопределено;
АнализДанных.Индекс = АнализДанных.Буфер.Размер;
АнализДанных.ЕстьОшибка = Истина;
КонецЕсли;
Возврат Байт;
КонецФункции
Функция ИдентификаторыАлгоритмовПодписи()
ИдентификаторыАлгоритмов = Новый Соответствие;
@@ -1185,6 +1487,7 @@
ИдентификаторыАлгоритмов.Вставить("1.2.643.2.2.3", "GOST R 34.10-2001");
ИдентификаторыАлгоритмов.Вставить("1.2.643.7.1.1.3.2", "GR 34.10-2012 256, GOST 34.10-2012 256");
ИдентификаторыАлгоритмов.Вставить("1.2.643.7.1.1.3.3", "GR 34.10-2012 512, GOST 34.10-2012 512");
ИдентификаторыАлгоритмов.Вставить("1.2.840.113549.1.1.5", "RSA_SIGN");
Возврат ИдентификаторыАлгоритмов;
+10 -9
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c1c9f3af-6471-43d6-9ca7-293f5e4b7d46">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b5d0e798-bd95-497a-be7d-213e9bbe2c4b">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="370eb625-8855-4ebf-9ee7-486eea4e910f"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="b4bc3552-d623-42a5-938b-35fdd8d90ce4"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="e4fb3b83-4f74-4c95-8fc9-7bdb773c3660"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="7bddc54c-bd49-49b9-ba63-c69e4d64ee25"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="36c801d5-a4d7-4e94-ae63-c12e8da47988"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="1338c1b1-0e9e-465c-8a7a-50043fce3862"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="7e9f14b1-203a-4d3d-9149-b4dfb06d2f32"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="ed99b474-e6eb-4998-ac47-7d94e3ebcb69"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="0244c957-b76c-4026-8efd-daaeb6836e14"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="e6c1d39d-b4da-4f66-a06c-0029a1cd8433"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="b1c6b474-a5c3-4457-bde0-4a14452b0160"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="2e0fff63-12f3-46f1-82d5-4788acde587e"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="94a51e71-33ee-450b-aae4-8121d01b952e"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="1c892d25-a5a1-4440-a2bd-b878ec611dde"/>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
@@ -19,7 +19,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor>
<version>3.1.2.387</version>
<version>3.1.2.396</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1543,6 +1543,7 @@
<commonForms>CommonForm.ДополнительныеОтчетыИОбработки</commonForms>
<commonForms>CommonForm.ДополнительныеПараметрыПроксиСервера</commonForms>
<commonForms>CommonForm.ИнформацияНеразделенногоПользователя</commonForms>
<commonForms>CommonForm.КонтрольДинамическогоОбновления</commonForms>
<commonForms>CommonForm.МастерАнкетыПоРазделам</commonForms>
<commonForms>CommonForm.МониторСинхронизацииДанныхВМоделиСервиса</commonForms>
<commonForms>CommonForm.НапоминаниеПриРедактировании</commonForms>
@@ -1 +1 @@
{6,1,1,2d6b2313-2d14-4e87-8717-ef020ec96907,1,8eb29226-794c-4ed8-9fc2-02b43d69006d,"3.1.2.387","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5933,1,0,c1c9f3af-6471-43d6-9ca7-293f5e4b7d46,c1c9f3af-6471-43d6-9ca7-293f5e4b7d46,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5Line truncated
{6,1,1,49cf05a2-226b-4d83-b9cd-b804b693d1f7,1,ed0440f8-e748-45fa-9386-c3abd2e419ab,"3.1.2.396","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5934,1,0,b5d0e798-bd95-497a-be7d-213e9bbe2c4b,b5d0e798-bd95-497a-be7d-213e9bbe2c4b,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7-49aa-aa63-45da087e0d0a,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5Line truncated
@@ -375,13 +375,15 @@
|
|ИНДЕКСИРОВАТЬ ПО
| БИК";
Запрос.УстановитьПараметр("НедействующиеБанки", НедействующиеБанки);
Запрос.УстановитьПараметр("БИК", ДействующиеБанки.ВыгрузитьКолонку("БИК"));
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| КлассификаторБанков.Ссылка
| КлассификаторБанков.Ссылка КАК Ссылка,
| КлассификаторБанков.Код КАК Код
|ИЗ
| НедействующиеБанки КАК НедействующиеБанки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторБанков КАК КлассификаторБанков
@@ -392,24 +394,37 @@
|СГРУППИРОВАТЬ ПО
| КлассификаторБанков.Ссылка";
НачатьТранзакцию();
Попытка
ВыборкаБанков = Запрос.Выполнить().Выбрать();
Пока ВыборкаБанков.Следующий() Цикл
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.КлассификаторБанков");
Блокировка.Заблокировать();
ВыборкаБанков = Запрос.Выполнить().Выбрать();
Пока ВыборкаБанков.Следующий() Цикл
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаБанков.Ссылка);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
БанкОбъект = ВыборкаБанков.Ссылка.ПолучитьОбъект();
Если БанкОбъект = Неопределено Или БанкОбъект.Код <> ВыборкаБанков.Код Тогда
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
БанкОбъект.ДеятельностьПрекращена = Истина;
БанкОбъект.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписатьОшибкуВЖурналРегистрации(
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не удалось обновить сведения о банке ""%1"" (БИК %2):
|%3'"),
ВыборкаБанков.Ссылка,
ВыборкаБанков.Код,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
КонецЦикла;
Возврат ВыборкаБанков.Количество();
@@ -45,19 +45,19 @@
Функция ВерсияКалендарей() Экспорт
Возврат 4;
Возврат 5;
КонецФункции
Функция ВерсияОбновленияПроизводственныхКалендарей() Экспорт
Возврат "3.1.2.383";
Возврат "3.1.2.395";
КонецФункции
Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт
Возврат "3.1.2.366";
Возврат "3.1.2.395";
КонецФункции
@@ -19,7 +19,8 @@
<Item Calendar="01" Year="2019" DayType="Суббота" Date="20191007" SwapDate="20191005"/>
<Item Calendar="01" Year="2020" DayType="Нерабочий" Date="20200328" SwapDate=""/>
<Item Calendar="01" Year="2020" DayType="Нерабочий" Date="20200329" SwapDate=""/>
<Item Calendar="01" Year="2020" DayType="Праздник" Date="20200525" SwapDate=""/>
<Item Calendar="01" Year="2020" DayType="Праздник" Date="20200524" SwapDate="20200525"/>
<Item Calendar="01" Year="2020" DayType="Воскресенье" Date="20200525" SwapDate="20200524"/>
<Item Calendar="01" Year="2020" DayType="Праздник" Date="20201005" SwapDate=""/>
<Item Calendar="02" Year="2014" DayType="Праздник" Date="20140728" SwapDate=""/>
<Item Calendar="02" Year="2014" DayType="Предпраздничный" Date="20141003" SwapDate=""/>
@@ -128,6 +129,7 @@
<Item Calendar="05" Year="2020" DayType="Нерабочий" Date="20200328" SwapDate=""/>
<Item Calendar="05" Year="2020" DayType="Нерабочий" Date="20200329" SwapDate=""/>
<Item Calendar="05" Year="2020" DayType="Праздник" Date="20200525" SwapDate=""/>
<Item Calendar="05" Year="2020" DayType="Праздник" Date="20200526" SwapDate=""/>
<Item Calendar="05" Year="2020" DayType="Праздник" Date="20200726" SwapDate="20200727"/>
<Item Calendar="05" Year="2020" DayType="Воскресенье" Date="20200727" SwapDate="20200726"/>
<Item Calendar="05" Year="2020" DayType="Предпраздничный" Date="20200730" SwapDate=""/>
@@ -157,6 +159,7 @@
<Item Calendar="06" Year="2020" DayType="Нерабочий" Date="20200328" SwapDate=""/>
<Item Calendar="06" Year="2020" DayType="Нерабочий" Date="20200329" SwapDate=""/>
<Item Calendar="06" Year="2020" DayType="Праздник" Date="20200525" SwapDate=""/>
<Item Calendar="06" Year="2020" DayType="Праздник" Date="20200526" SwapDate=""/>
<Item Calendar="06" Year="2020" DayType="Предпраздничный" Date="20200730" SwapDate=""/>
<Item Calendar="06" Year="2020" DayType="Праздник" Date="20200731" SwapDate=""/>
<Item Calendar="07" Year="2016" DayType="Праздник" Date="20160328" SwapDate=""/>
@@ -444,7 +447,12 @@
<Item Calendar="20" Year="2020" DayType="Нерабочий" Date="20200329" SwapDate=""/>
<Item Calendar="20" Year="2020" DayType="Предпраздничный" Date="20200415" SwapDate=""/>
<Item Calendar="20" Year="2020" DayType="Праздник" Date="20200416" SwapDate=""/>
<Item Calendar="20" Year="2020" DayType="Праздник" Date="20200523" SwapDate="20200527"/>
<Item Calendar="20" Year="2020" DayType="Праздник" Date="20200524" SwapDate="20200528"/>
<Item Calendar="20" Year="2020" DayType="Праздник" Date="20200525" SwapDate=""/>
<Item Calendar="20" Year="2020" DayType="Праздник" Date="20200526" SwapDate=""/>
<Item Calendar="20" Year="2020" DayType="Суббота" Date="20200527" SwapDate="20200523"/>
<Item Calendar="20" Year="2020" DayType="Воскресенье" Date="20200528" SwapDate="20200524"/>
<Item Calendar="20" Year="2020" DayType="Предпраздничный" Date="20200730" SwapDate=""/>
<Item Calendar="20" Year="2020" DayType="Праздник" Date="20200731" SwapDate=""/>
<Item Calendar="21" Year="2016" DayType="Предпраздничный" Date="20160623" SwapDate=""/>
@@ -548,7 +556,6 @@
<Item Calendar="91" Year="2020" DayType="Праздник" Date="20200318" SwapDate=""/>
<Item Calendar="91" Year="2020" DayType="Нерабочий" Date="20200328" SwapDate=""/>
<Item Calendar="91" Year="2020" DayType="Нерабочий" Date="20200329" SwapDate=""/>
<Item Calendar="91" Year="2020" DayType="Праздник" Date="20200420" SwapDate=""/>
<Item Calendar="91" Year="2020" DayType="Праздник" Date="20200525" SwapDate=""/>
<Item Calendar="91" Year="2020" DayType="Праздник" Date="20200608" SwapDate=""/>
<Item Calendar="91" Year="2020" DayType="Предпраздничный" Date="20200730" SwapDate=""/>
@@ -6,7 +6,7 @@
<Item Code="04" Description="Республика Алтай" Base="РФ"/>
<Item Code="05" Description="Республика Дагестан" Base="РФ"/>
<Item Code="06" Description="Республика Ингушетия" Base="РФ"/>
<Item Code="07" Description="Кабардино-Балкарская республика" Base="РФ"/>
<Item Code="07" Description="Кабардино-Балкарская Республика" Base="РФ"/>
<Item Code="08" Description="Республика Калмыкия" Base="РФ"/>
<Item Code="09" Description="Карачаево-Черкесская Республика" Base="РФ"/>
<Item Code="11" Description="Республика Коми" Base="РФ"/>
@@ -260,20 +260,18 @@
ИначеЕсли ИмяРеквизита = "ЮридическийАдрес"
Или ИмяРеквизита = "ФактическийАдрес" Тогда
ПродолжитьПриОшибке = Истина;
ТекстОшибки = ОшибкиПроверкиАдреса(ЗначениеРеквизита);
Если ПустаяСтрока(ТекстОшибки) Тогда
ПродолжитьПриОшибке = Истина;
ТекстОшибки = ПроверитьАдрес(ЗначениеРеквизита);
Если Не ПустаяСтрока(ТекстОшибки) Тогда
КонецЕсли;
Если Не ПустаяСтрока(ТекстОшибки) Тогда
Если СтрНайти(ТекстНезаполненного, "%1") > 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстНезаполненного, ТекстОшибки);
Иначе
ТекстСообщения = ТекстНезаполненного + ". " + ТекстОшибки;
КонецЕсли;
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстНезаполненного, ТекстОшибки);
КонецЕсли;
ИначеЕсли ИмяРеквизита = "Телефон" Тогда
@@ -3308,9 +3308,6 @@
МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент");
МодульАдресныйКлассификаторКлиент.АвторизоватьНаСайтеПоддержкиПользователей(Оповещение, ЭтотОбъект);
КонецЕсли;
Иначе
УстановитьНаселенныйПунктПослеВыбора(ДанныеОбАдресе);
КонецЕсли;
КонецПроцедуры
@@ -154,7 +154,7 @@
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВЫБОР
КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.Встреча
ТОГДА ВЫБОР
@@ -107,7 +107,7 @@
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВЫБОР
КОГДА Взаимодействия.Ссылка ССЫЛКА Документ.Встреча
ТОГДА ВЫБОР
@@ -70,7 +70,7 @@
Попытка
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.Файлы");
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Строка.Файл.Метаданные().ПолноеИмя());
ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Строка.Файл);
ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Разделяемый;
@@ -90,9 +90,9 @@
КонецЦикла;
ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей);
ЗафиксироватьТранзакцию();
ОбъектовОбработано = ОбъектовОбработано + 1;
ОбъектовОбработано = ОбъектовОбработано + 1;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
@@ -101,7 +101,7 @@
|%2'"),
Строка.Файл, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,
Строка.Ссылка.Метаданные(), Строка.Ссылка, ТекстСообщения);
Строка.Файл.Метаданные(), Строка.Файл, ТекстСообщения);
КонецПопытки;
@@ -111,7 +111,7 @@
Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедуре РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые файлы файлов (пропущены): %1'"),
НСтр("ru = 'Процедуре РегистрыСведений.СведенияОФайлах.ОбработатьДанныеДляПереходаНаНовуюВерсию не удалось обработать некоторые файлы (пропущены): %1'"),
ПроблемныхОбъектов);
ВызватьИсключение ТекстСообщения;
Иначе
@@ -89,8 +89,7 @@
Команда.Важность = "СмТакже";
Команда.ТипПараметра = ОписаниеТипаПараметраКоманды;
Команда.Менеджер = "Отчет.ДвиженияДокумента";
Команда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.L, Ложь, Истина, Истина);
Команда.ТолькоВоВсехДействиях = Истина;
Команда.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.A, Ложь, Истина, Истина);
Возврат Команда;
@@ -3756,91 +3756,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Constant.СписокЗапрещенныхРасширений</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.СвязиАдресныхОбъектов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
<right>
<name>ReadDataHistory</name>
<value>true</value>
</right>
<right>
<name>ReadDataHistoryOfMissingData</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistory</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistoryOfMissingData</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistorySettings</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistoryVersionComment</name>
<value>true</value>
</right>
<right>
<name>ViewDataHistory</name>
<value>true</value>
</right>
<right>
<name>EditDataHistoryVersionComment</name>
<value>true</value>
</right>
<right>
<name>SwitchToDataHistoryVersion</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -3928,6 +3843,91 @@
<value>true</value>
</right>
</object>
<object>
<name>Constant.СписокЗапрещенныхРасширений</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.СвязиАдресныхОбъектов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
<right>
<name>ReadDataHistory</name>
<value>true</value>
</right>
<right>
<name>ReadDataHistoryOfMissingData</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistory</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistoryOfMissingData</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistorySettings</name>
<value>true</value>
</right>
<right>
<name>UpdateDataHistoryVersionComment</name>
<value>true</value>
</right>
<right>
<name>ViewDataHistory</name>
<value>true</value>
</right>
<right>
<name>EditDataHistoryVersionComment</name>
<value>true</value>
</right>
<right>
<name>SwitchToDataHistoryVersion</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.СообщениеОбменаДаннымиИзГлавногоУзла</name>
<right>
@@ -1548,6 +1548,13 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonForm.КонтрольДинамическогоОбновления</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально</name>
<right>
@@ -1364,6 +1364,13 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonForm.КонтрольДинамическогоОбновления</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ОграничиватьДоступНаУровнеЗаписейУниверсально</name>
<right>
@@ -5206,6 +5206,45 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>Constant.СписокЗапрещенныхРасширений</name>
<right>
@@ -5330,45 +5369,6 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>Constant.СообщениеОбменаДаннымиИзГлавногоУзла</name>
<right>
@@ -267,5 +267,6 @@
<content>CommonModule.МультиязычностьПереопределяемый</content>
<content>SessionParameter.ОсновнойЯзык</content>
<content>CommonModule.МультиязычностьПовтИсп</content>
<content>CommonForm.КонтрольДинамическогоОбновления</content>
<parentSubsystem>Subsystem.СтандартныеПодсистемы</parentSubsystem>
</mdclass:Subsystem>