3_1_10_277

This commit is contained in:
Компания 1С committed 2024-08-16 16:30:00 +03:00
1 parent 5d53ce27de
commit 10a6064cd2
198 files changed
+6973 -3284

No files matched your search

@@ -315,8 +315,8 @@
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентыПослеПредупрежденияБезопасности", ЭтотОбъект, ПомещенныеФайлы);
ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемВнешнейКомпоненты");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередДобавлениемВнешнейКомпоненты);
КонецПроцедуры
@@ -200,8 +200,8 @@
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеПредупрежденияБезопасности", ЭтотОбъект);
ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемВнешнейКомпоненты");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередДобавлениемВнешнейКомпоненты);
КонецПроцедуры
@@ -625,8 +625,8 @@
&НаКлиенте
Процедура ОбновитьИзФайла()
Оповещение = Новый ОписаниеОповещения("ОбновитьИзФайлаПослеПодтверждения", ЭтотОбъект);
ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемДополнительногоОтчетаИлиОбработки");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередДобавлениемДополнительногоОтчетаИлиОбработки);
КонецПроцедуры
&НаКлиенте
@@ -1228,8 +1228,8 @@
КонецЕсли;
Если СтрокаТаблицы.Пометка И СтрокаТаблицы.Имя = "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" Тогда
Оповещение = Новый ОписаниеОповещения("РолиПометкаПриИзмененииПослеПодтверждения", ЭтотОбъект);
ПараметрыФормы = Новый Структура("Ключ", "ПередВыборомРоли");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередВыборомРоли);
Иначе
Если СтрокаТаблицы.Имя = "ПолныеПрава" Тогда
УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект);
@@ -310,10 +310,10 @@
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="80641554-046e-4c4a-8544-a35b4c554dad">
<name>ПрограммаОпределеннаяАвтоматически</name>
<name>ПриложениеОпределенноеАвтоматически</name>
<synonym>
<key>ru</key>
<value>Программа, определенная автоматически</value>
<value>Приложение, определенное автоматически</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
@@ -556,7 +556,15 @@
ЗаполнитьЗначенияСвойств(ОтборСтрок, Сочетание);
СтрокиДанныхКалендаря = КлассификаторТаблица.НайтиСтроки(ОтборСтрок);
Для Каждого СтрокаКлассификатора Из СтрокиДанныхКалендаря Цикл
НоваяСтрока = НоваяСтрокаДанныхКалендаряИзКлассификатора(ТаблицаДанных, СтрокаКлассификатора);
НоваяСтрока = ТаблицаДанных.Добавить();
НоваяСтрока.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar;
НоваяСтрока.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря[СтрокаКлассификатора.DayType];
НоваяСтрока.Год = Число(СтрокаКлассификатора.Year);
НоваяСтрока.Дата = Дата(СтрокаКлассификатора.Date);
Если ЗначениеЗаполнено(СтрокаКлассификатора.SwapDate) Тогда
НоваяСтрока.ДатаПереноса = Дата(СтрокаКлассификатора.SwapDate);
КонецЕсли;
ДатыГода.Вставить(НоваяСтрока.Дата, Истина);
КонецЦикла;
КодБазовогоКалендаря = КодБазовогоКалендаря(Сочетание.Calendar, ТаблицаКалендарей);
@@ -565,7 +573,28 @@
СтрокиДанныхКалендаря = КлассификаторТаблица.НайтиСтроки(ОтборСтрок);
Для Каждого СтрокаКлассификатора Из СтрокиДанныхКалендаря Цикл
СтрокаКлассификатора.Calendar = Сочетание.Calendar;
НоваяСтрока = НоваяСтрокаДанныхКалендаряИзКлассификатора(ТаблицаДанных, СтрокаКлассификатора, Истина, Ложь);
ПараметрыОтбора = Новый Структура("КодПроизводственногоКалендаря,Дата");
ПараметрыОтбора.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar;
ПараметрыОтбора.Дата = Дата(СтрокаКлассификатора.Date);
НайденныеСтроки = ТаблицаДанных.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
СтрокаКлассификатора.Calendar = КодБазовогоКалендаря;
Если НоваяСтрока <> Неопределено Тогда
ДатыГода.Вставить(НоваяСтрока.Дата, Истина);
КонецЕсли;
Продолжить;
КонецЕсли;
НоваяСтрока = ТаблицаДанных.Добавить();
НоваяСтрока.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar;
НоваяСтрока.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря[СтрокаКлассификатора.DayType];
НоваяСтрока.Год = Число(СтрокаКлассификатора.Year);
НоваяСтрока.Дата = Дата(СтрокаКлассификатора.Date);
Если ЗначениеЗаполнено(СтрокаКлассификатора.SwapDate) Тогда
НоваяСтрока.ДатаПереноса = Дата(СтрокаКлассификатора.SwapDate);
КонецЕсли;
СтрокаКлассификатора.Calendar = КодБазовогоКалендаря;
Если НоваяСтрока <> Неопределено Тогда
ДатыГода.Вставить(НоваяСтрока.Дата, Истина);
@@ -1272,36 +1301,6 @@
КлассификаторКалендарей.НайтиСтроки(Новый Структура("Base", КодБазовогоКалендаря)), "Code");
КонецФункции
Функция НоваяСтрокаДанныхКалендаряИзКлассификатора(ДанныеКалендаря, СтрокаКлассификатора, Проверять = Ложь, Замещать = Ложь)
Если Проверять Тогда
ОтборСтрок = Новый Структура("КодПроизводственногоКалендаря,Дата");
ОтборСтрок.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar;
ОтборСтрок.Дата = Дата(СтрокаКлассификатора.Date);
НайденныеСтроки = ДанныеКалендаря.НайтиСтроки(ОтборСтрок);
Если НайденныеСтроки.Количество() > 0 Тогда
Если Не Замещать Тогда
Возврат Неопределено;
КонецЕсли;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ДанныеКалендаря.Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЕсли;
КонецЕсли;
НоваяСтрока = ДанныеКалендаря.Добавить();
НоваяСтрока.КодПроизводственногоКалендаря = СтрокаКлассификатора.Calendar;
НоваяСтрока.ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря[СтрокаКлассификатора.DayType];
НоваяСтрока.Год = Число(СтрокаКлассификатора.Year);
НоваяСтрока.Дата = Дата(СтрокаКлассификатора.Date);
Если ЗначениеЗаполнено(СтрокаКлассификатора.SwapDate) Тогда
НоваяСтрока.ДатаПереноса = Дата(СтрокаКлассификатора.SwapDate);
КонецЕсли;
Возврат НоваяСтрока;
КонецФункции
Процедура ЗаполнитьПроизводственныйКалендарь(СправочникОбъект, Выборка)
СправочникОбъект.Код = СокрЛП(Выборка.Код);
@@ -441,8 +441,8 @@
Если СтрокаТаблицы.Пометка И СтрокаТаблицы.Имя = "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" Тогда
Оповещение = Новый ОписаниеОповещения("РолиПометкаПриИзмененииПослеПодтверждения", ЭтотОбъект);
ПараметрыФормы = Новый Структура("Ключ", "ПередВыборомРоли");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередВыборомРоли);
ИначеЕсли СтандартныеРолиРасширений.Получить(СтрокаТаблицы.Имя) <> Неопределено Тогда
СтрокаТаблицы.Пометка = Не СтрокаТаблицы.Пометка;
@@ -44,7 +44,7 @@
<id>181</id>
<title>
<key>ru</key>
<value>Рассылки отчетов могут работать быстрее</value>
<value>Рассылки отчетов могут работать быстрее.</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
@@ -55,7 +55,7 @@
<key>ru</key>
<value>Для рассылки отчетов в несколько потоков, необходимо указать каталог временных файлов кластера серверов 1С:Предприятие.</value>
</toolTip>
<toolTipRepresentation>ShowRight</toolTipRepresentation>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ЗаголовокУскорениеРассылокРасширеннаяПодсказка</name>
<id>183</id>
@@ -35,7 +35,9 @@
Если ЗначениеЗаполнено(ДополнительныеДанныеПроверки) И ТипЗнч(ДополнительныеДанныеПроверки) = Тип("Структура") Тогда
Элементы.ДекорацияСертификат.Заголовок = ДополнительныеДанныеПроверки.ТекстОшибки;
Элементы.ДекорацияСертификат.Заголовок = ?(ЗначениеЗаполнено(ДополнительныеДанныеПроверки.ТекстОшибки),
ДополнительныеДанныеПроверки.ТекстОшибки,
ДополнительныеДанныеПроверки.ДополнительныеСведения);
Если ЗначениеЗаполнено(ДополнительныеДанныеПроверки.Причина) Тогда
Элементы.ДекорацияПричина.Заголовок = ДополнительныеДанныеПроверки.Причина;
Элементы.ДекорацияПричина.Видимость = Истина;
@@ -1789,6 +1789,20 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПроверятьСертификат</name>
<id>30</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Подписать</name>
<title>
@@ -356,20 +356,26 @@
&НаСервере
Процедура УстановитьТипПодписи(Знач ПараметрТипПодписи)
НовыйПараметрТипПодписи = Новый Структура;
НовыйПараметрТипПодписи.Вставить("ТипыПодписи", Новый Массив);
НовыйПараметрТипПодписи.Вставить("Видимость", Ложь);
НовыйПараметрТипПодписи.Вставить("Доступность", Ложь);
НовыйПараметрТипПодписи.Вставить("ВыборДоверенности", Ложь);
НовыйПараметрТипПодписи.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Если Не ТипЗнч(ПараметрТипПодписи) = Тип("Структура") Тогда
НовыйПараметрТипПодписи = Новый Структура;
НовыйПараметрТипПодписи.Вставить("ТипыПодписи", Новый Массив);
НовыйПараметрТипПодписи.Вставить("Видимость", Ложь);
НовыйПараметрТипПодписи.Вставить("Доступность", Ложь);
НовыйПараметрТипПодписи.Вставить("ВыборДоверенности", Ложь);
Если ЗначениеЗаполнено(ПараметрТипПодписи) Тогда
НовыйПараметрТипПодписи.ТипыПодписи.Добавить(ПараметрТипПодписи);
КонецЕсли;
ПараметрТипПодписи = НовыйПараметрТипПодписи;
Иначе
ЗаполнитьЗначенияСвойств(НовыйПараметрТипПодписи, ПараметрТипПодписи);
КонецЕсли;
ПараметрТипПодписи = НовыйПараметрТипПодписи;
ПроверятьСертификат = ПараметрТипПодписи.ПроверятьСертификат;
Если ПараметрТипПодписи.ТипыПодписи.Количество() = 0 Тогда
СписокТипов = Новый СписокЗначений;
@@ -797,24 +803,28 @@
КонецЕсли;
Если Результат = Неопределено Или Не Результат Тогда
ПредупреждениеОбОшибке = РезультатПроверкиУдостоверяющегоЦентра.Предупреждение; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата
Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", ПредупреждениеОбОшибке.ТекстОшибки);
ДополнительныеДанныеОшибки = Новый Структура("ДополнительныеДанныеПроверокНаКлиенте", ПредупреждениеОбОшибке);
ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере, ,
ДополнительныеДанныеОшибки);
Возврат;
КонецЕсли;
Если ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПодписатьДанныеПослеПроверкиВыбранногоСертификата(Истина, Контекст);
Иначе
Если Результат = Неопределено Или Не Результат Тогда
ПредупреждениеОбОшибке = РезультатПроверкиУдостоверяющегоЦентра.Предупреждение; // см. ЭлектроннаяПодписьСлужебныйКлиентСервер.ПредупреждениеПриПроверкеУдостоверяющегоЦентраСертификата
Контекст.ОшибкаНаКлиенте.Вставить("ОписаниеОшибки", ПредупреждениеОбОшибке.ТекстОшибки);
ДополнительныеДанныеОшибки = Новый Структура("ДополнительныеДанныеПроверокНаКлиенте", ПредупреждениеОбОшибке);
ОбработатьОшибку(Контекст.Оповещение, Контекст.ОшибкаНаКлиенте, Контекст.ОшибкаНаСервере, ,
ДополнительныеДанныеОшибки);
Возврат;
КонецЕсли;
ДополнительныеПараметрыПроверок = ЭлектроннаяПодписьСлужебныйКлиент.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметрыПроверок.ПоказатьОшибку = Ложь;
ДополнительныеПараметрыПроверок.ДляПроверкиПодписи = Истина;
ДополнительныеПараметрыПроверок.ОбъединитьОшибкиДанныхСертификата = Ложь;
ДополнительныеПараметрыПроверок.ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат();
ДополнительныеПараметрыПроверок = ЭлектроннаяПодписьСлужебныйКлиент.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметрыПроверок.ПоказатьОшибку = Ложь;
ДополнительныеПараметрыПроверок.ДляПроверкиПодписи = Истина;
ДополнительныеПараметрыПроверок.ОбъединитьОшибкиДанныхСертификата = Ложь;
ДополнительныеПараметрыПроверок.ВыполнятьПроверкуУдостоверяющегоЦентра = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Новый ОписаниеОповещения(
"ПодписатьДанныеПослеПроверкиВыбранногоСертификата", ЭтотОбъект, Контекст),
СертификатАдрес,,, ДополнительныеПараметрыПроверок);
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Новый ОписаниеОповещения(
"ПодписатьДанныеПослеПроверкиВыбранногоСертификата", ЭтотОбъект, Контекст),
СертификатАдрес,,, ДополнительныеПараметрыПроверок);
КонецЕсли;
КонецПроцедуры
@@ -5394,6 +5394,33 @@
</edit>
</columns>
</attributes>
<attributes>
<name>ИгнорироватьПроверкуВСпискеОтозванныхСертификатов</name>
<id>48</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ВыполнятьПроверкуУдостоверяющегоЦентра</name>
<id>49</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Проверить</name>
<title>
@@ -5453,6 +5480,19 @@
<types>EnumRef.ТипыПодписиКриптографии</types>
</valueType>
</parameters>
<parameters>
<name>ВыполнятьПроверкуУдостоверяющегоЦентра</name>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
</parameters>
<parameters>
<name>ИгнорироватьПроверкуВСпискеОтозванныхСертификатов</name>
<valueType>
<types>Boolean</types>
</valueType>
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -71,6 +71,11 @@
Если ЗначениеЗаполнено(Параметры.ТипПодписи) Тогда
ТипПодписи = Параметры.ТипПодписи;
КонецЕсли;
ИгнорироватьПроверкуВСпискеОтозванныхСертификатов = Параметры.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов;
ВыполнятьПроверкуУдостоверяющегоЦентра = Параметры.ВыполнятьПроверкуУдостоверяющегоЦентра;
Если ПустаяСтрока(ВыполнятьПроверкуУдостоверяющегоЦентра) Тогда
ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные();
КонецЕсли;
Для каждого Проверка Из Проверки Цикл
@@ -887,7 +892,7 @@
Если ТипЗнч(Результат) = Тип("МенеджерКриптографии") Тогда
ДополнительныеПараметрыПроверок = ЭлектроннаяПодписьСлужебныйКлиент.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметрыПроверок.ВыполнятьПроверкуУдостоверяющегоЦентра = Ложь;
ДополнительныеПараметрыПроверок.ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат();
ДополнительныеПараметрыПроверок.ОбъединитьОшибкиДанныхСертификата = Ложь;
ДополнительныеПараметрыПроверок.ПроверитьВСервисеПослеОшибки = Ложь;
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Новый ОписаниеОповещения(
@@ -1120,7 +1125,7 @@
// Продолжение процедуры ПроверитьНаСторонеКлиента.
&НаКлиенте
Процедура ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст) Экспорт
Процедура ПроверитьНаСторонеКлиентаПослеПодписания(ДанныеПодписи, Контекст)
Если ДанныеПодписи <> Null Тогда
Если ТипЗнч(ДанныеПодписи) = Тип("Строка") Тогда
@@ -1864,15 +1869,27 @@
ОписаниеОшибки = ЭлектроннаяПодписьСлужебный.ОшибкаСертификатПомеченКакОтозванный();
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, ОписаниеОшибки, Истина, ОбъединятьРезультаты);
Иначе
РезультатПроверкиУЦ = ЭлектроннаяПодписьСлужебный.РезультатПроверкиУдостоверяющегоЦентраСертификата(
СертификатКриптографии);
Если Не РезультатПроверкиУЦ.Действует Тогда
ПодписаниеРазрешено = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
Если ПодписаниеРазрешено = Неопределено Или Не ПодписаниеРазрешено Тогда
ОписаниеОшибки = РезультатПроверкиУЦ.Предупреждение.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, РезультатПроверкиУЦ.Предупреждение, Истина,
ОбъединятьРезультаты);
Если ВыполнятьПроверкуУдостоверяющегоЦентра <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", Ложь);
ПараметрыПроверки.Вставить("ПроверятьСертификат", ВыполнятьПроверкуУдостоверяющегоЦентра);
РезультатПроверкиУЦ = ЭлектроннаяПодписьСлужебный.РезультатПроверкиУдостоверяющегоЦентраСертификата(
СертификатКриптографии,, ПараметрыПроверки);
Если Не РезультатПроверкиУЦ.Действует Тогда
Если ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда
ПодписаниеРазрешено = Ложь;
Иначе
ПодписаниеРазрешено = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
КонецЕсли;
Если ПодписаниеРазрешено = Неопределено Или Не ПодписаниеРазрешено Тогда
ОписаниеОшибки = РезультатПроверкиУЦ.Предупреждение.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", Истина, РезультатПроверкиУЦ.Предупреждение, Истина,
ОбъединятьРезультаты);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -2487,21 +2504,30 @@
ОшибкаСертификатПомеченКакОтозванный = ОшибкаСертификатПомеченКакОтозванный();
ОписаниеОшибки = ОшибкаСертификатПомеченКакОтозванный.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", СторонаВыполнения, ОшибкаСертификатПомеченКакОтозванный, Истина, ОбъединятьРезультаты);
Иначе
ИначеЕсли ВыполнятьПроверкуУдостоверяющегоЦентра <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
РезультатПроверкиУдостоверяющегоЦентраСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатКриптографии);
Если Не РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует Тогда
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", Ложь);
ПараметрыПроверки.Вставить("ПроверятьСертификат", ВыполнятьПроверкуУдостоверяющегоЦентра);
ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
РезультатПроверкиУдостоверяющегоЦентраСертификата = Ждать ЭлектроннаяПодписьСлужебныйКлиент.РезультатПроверкиУдостоверяющегоЦентраСертификата(
СертификатКриптографии,, ПараметрыПроверки);
Если Не РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует Тогда
Если ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда
ПодписаниеРазрешено = Ложь;
Иначе
ПодписаниеРазрешено = ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(
Сертификат, "РазрешитьПодписание", Неопределено);
КонецЕсли;
Если ПодписаниеРазрешено = Неопределено Или Не ПодписаниеРазрешено Тогда
ОписаниеОшибки = РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение.ТекстОшибки;
УстановитьЭлемент(ЭтотОбъект, "Подписание", СторонаВыполнения, РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение, Истина,
ОбъединятьРезультаты);
УстановитьЭлемент(ЭтотОбъект, "Подписание", СторонаВыполнения,
РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение, Истина, ОбъединятьРезультаты);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ОписаниеОшибки;
@@ -1224,14 +1224,28 @@
КонецЕсли;
ВсеСертификаты = Новый Массив;
ВсеСертификаты.Добавить(Сертификат);
Для Каждого Строка Из СертификатыШифрования Цикл
Если Не ЗначениеЗаполнено(Строка.Сертификат)
Или ВсеСертификаты.Найти(Строка.Сертификат) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВсеСертификаты.Добавить(Строка.Сертификат);
КонецЦикла;
Если ЗначениеЗаполнено(Сертификат) Тогда
ВсеСертификаты.Добавить(Сертификат);
КонецЕсли;
Если СертификатыШифрования.Количество() > 0 Тогда
Для Каждого Строка Из СертификатыШифрования Цикл
Если Не ЗначениеЗаполнено(Строка.Сертификат)
Или ВсеСертификаты.Найти(Строка.Сертификат) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВсеСертификаты.Добавить(Строка.Сертификат);
КонецЦикла;
ИначеЕсли НаборСертификатов.Количество() > 0 Тогда
Для Каждого Строка Из НаборСертификатов Цикл
Если Не ЗначениеЗаполнено(Строка.АдресДанных)
Или ВсеСертификаты.Найти(Строка.АдресДанных) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ВсеСертификаты.Добавить(Строка.АдресДанных);
КонецЦикла;
КонецЕсли;
ДополнительныеПараметры = Новый Структура("Сертификат", ВсеСертификаты);
ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
@@ -836,7 +836,7 @@
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаExtraCryptoAPI_3_0_2_30</name>
<name>КомпонентаExtraCryptoAPI_3_0_3_11</name>
<synonym>
<key>ru</key>
<value>Компонента ExtraCryptoAPI</value>
@@ -92,32 +92,6 @@
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>54</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>55</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Help</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>75</id>
@@ -590,6 +564,10 @@
<id>3</id>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnActivateRow</event>
<name>СписокПриАктивизацииСтроки</name>
</handlers>
<searchStringAddition>
<name>СписокСтрокаПоиска</name>
<id>66</id>
@@ -11,13 +11,37 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ПеренестиВсеФайлыВТома.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами");
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.СписокКомментарий.Видимость = Ложь;
Элементы.СписокМаксимальныйРазмер.Видимость = Ложь;
КонецЕсли;
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Элементы.ПроверитьЦелостность.Видимость = Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды")
Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
#КонецОбласти
@@ -58,6 +82,38 @@
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -610,32 +610,6 @@
<commandSource>Form</commandSource>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>40</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>41</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Help</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>48</id>
@@ -696,8 +670,38 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>40</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>41</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Help</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<horizontalAlign>Left</horizontalAlign>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<handlers>
<event>BeforeClose</event>
<name>ПередЗакрытием</name>
@@ -858,6 +862,10 @@
<event>AfterWrite</event>
<name>ПослеЗаписи</name>
</handlers>
<handlers>
<event>OnReadAtServer</event>
<name>ПриЧтенииНаСервере</name>
</handlers>
<handlers>
<event>BeforeWrite</event>
<name>ПередЗаписью</name>
@@ -24,7 +24,11 @@
<li>После этого в пути к тому указываем <strong>folder</strong>, например <strong>/home/shared</strong>.</li></ul><h3>Просмотр списка файлов в томе</h3>
<ul><li>В каждом томе файлы хранятся в подкаталогах. На каждую дату создания версии файла создается свой подкаталог. Все файлы хранятся с оригинальным именем и расширением, между ними добавляется номер версии, например "Приказ.2.txt".
</li>
<li>Для того чтобы просмотреть <a href="CommonForm.ФайлыВТоме/Help">список файлов в томе</a>, выполните команду <strong>Файлы в томе</strong> на панели навигации тома. </li></ul><h3>См. также:</h3>
<li>Для того чтобы просмотреть <a href="CommonForm.ФайлыВТоме/Help">список файлов в томе</a>, выполните команду <strong>Файлы в томе</strong> на панели навигации тома. </li></ul><h3>Удаление лишних файлов из тома</h3>
<ul><li>С помощью кнопки панели навигации можно <b>Удалить лишние файлы</b>, которые есть на устройстве, но сведения о них в базе отсутствуют. При этом предусмотрена возможность сохранить такие файлы в указанный каталог. </li>
<li>Операция является необратимой. Если необходимо сохранить файлы перед удалением, включите флажок <b>Скопировать файлы перед удалением в папку</b> и укажите путь к папке на компьютере. </li></ul><h3>Проверка целостности тома</h3>
<ul><li>Для <a href="Report.ПроверкаЦелостностиТома/Help">проверки целостности данных в томе</a>, а также для поиска пропавших данных предусмотрен соответствующий отчет. Отчет можно открыть с помощью кнопки панели навигации <b>Отчеты</b> - <b>Проверка целостности тома</b>.</li>
<li>С помощью отчета выводится общее количество файлов в томе, процент целостных данных, отсутствующих данных и лишних файлов - в числовом виде и в виде диаграммы для наглядности.</li></ul><h3>См. также:</h3>
<ul><li>
<div><a href="Catalog.ТомаХраненияФайлов/Help">Тома хранения файлов</a>;</div>
</li>
@@ -15,6 +15,18 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
@@ -48,6 +60,28 @@
Элементы.Наименование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
КонецЕсли;
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Элементы.ФормаПроверитьЦелостностьТома.Видимость = Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды")
Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов");
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
@@ -81,6 +115,13 @@
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
// СтандартныеПодсистемы.ПодключаемыеКоманды
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
Если ПараметрыЗаписи.Свойство("ЗаписатьИЗакрыть") Тогда
Закрыть();
КонецЕсли;
@@ -190,6 +231,37 @@
ОткрытьФорму("Справочник.ТомаХраненияФайлов.Форма.УдалениеЛишнихФайловИзТома", ПараметрыОткрытия, ЭтотОбъект);
КонецПроцедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -39,6 +39,7 @@
</li>
<li>После переключения режима хранения файлов (например, в значение <strong>В томах на сервере</strong>) все ранее накопленные файлы не перемещаются в тома - только вновь добавленные файлы будут размещаться в соответствии с настройкой. Для того чтобы <a href="DataProcessor.ПереносФайлов/Help">перенести ранее накопленные файлы</a> из информационной базы в тома, воспользуйтесь командой <strong>Перенос файлов в тома</strong>.
</li>
<li>Для <a href="Report.ПроверкаЦелостностиТома/Help">проверки целостности данных в томе</a>, а также для поиска пропавших данных предусмотрен соответствующий отчет. С помощью отчета выводится общее количество файлов в томе, процент целостных данных, отсутствующих данных и лишних файлов - в числовом виде и в виде диаграммы для наглядности.</li>
<li>При работе в распределенной информационной базе (РИБ) способ хранения файлов настраивается независимо в каждом узле. Например, в главном узле могут быть включены тома, а в подчиненных узлах файлы хранятся в информационной базе, или наоборот.</li>
<li>Если настраивать в разных узлах одни и те же тома хранения файлов (сетевые каталоги), то это приведет к конфликтам. Также файлы в томе, относящиеся к другим узлам, будут считаться "лишними" и могут быть очищены. </li>
<li>Если в главном узле файлы хранятся в томах, то при создании нового узла РИБ вместе с <a href="CommonForm.СозданиеНачальногоОбразаСФайлами/Help">созданием начального образа</a> будет выгружен архив с хранимыми файлами (для этого необходимо указать полное имя архива с файлами томов).
@@ -31,6 +31,31 @@
// Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов
// СтандартныеПодсистемы.ВариантыОтчетов
// Определяет список команд отчетов.
//
// Параметры:
// КомандыОтчетов - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
// Параметры - см. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Если Не ПравоДоступа("Просмотр", Метаданные.Отчеты.ПроверкаЦелостностиТома) Тогда
Возврат;
КонецЕсли;
Команда = КомандыОтчетов.Добавить();
Команда.КлючВарианта = "Основной";
Команда.Представление = НСтр("ru = 'Проверка целостности тома'");
Команда.Идентификатор = "ПроверкаЦелостностиТома";
Команда.Менеджер = "Отчет.ПроверкаЦелостностиТома";
Команда.МножественныйВыбор = Ложь;
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВариантыОтчетов
#КонецОбласти
#КонецОбласти
@@ -207,6 +207,8 @@
ПодписатьФайлыДляОтправкиСохранения(ВыбранноеЗначение, "ОтправкаПисьма");
Иначе
ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение);
ОтключитьВыборПолучателей = ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПодготовкаНовогоПисьма");
ПараметрыОтправки.Вставить("ОтключитьВыборПолучателей", ОтключитьВыборПолучателей);
МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки);
@@ -825,8 +827,8 @@
КлючНастроек = Строка(ИспользуемыеПараметры.ИсточникДанных.УникальныйИдентификатор()) + "-" + ИспользуемыеПараметры.ПараметрыИсточника.ИдентификаторКоманды;
Иначе
ИменаМакетов = ИспользуемыеПараметры.ИменаМакетов;
Если ТипЗнч(ИменаМакетов) = Тип("Массив") Тогда
ИменаМакетов = СтрСоединить(ИменаМакетов, ",");
Если ТипЗнч(ИспользуемыеПараметры.ИменаМакетов) = Тип("Массив") Тогда
ИменаМакетов = СтрСоединить(ИспользуемыеПараметры.ИменаМакетов, ",");
КонецЕсли;
КлючНастроек = ИспользуемыеПараметры.ИмяМенеджераПечати + "-" + ИменаМакетов;
@@ -1879,8 +1881,9 @@
ПараметрыФормы.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ПараметрыФормы.Вставить("ТипМакета", "MXL");
ПараметрыФормы.Вставить("КодЯзыка", СтрРазделить(ТекущийЯзык, "_", Истина)[0]);
ПараметрыФормы.Вставить("ЭтоПечатнаяФорма", Параметры.ИмяМенеджераПечати = "УправлениеПечатью");
СтандартныеПодсистемыКлиент.ПоказатьРедакторТабличногоДокумента(Неопределено, ПараметрыФормы);
СтандартныеПодсистемыКлиент.ПоказатьРедакторТабличногоДокумента(Неопределено, ПараметрыФормы, , ЭтотОбъект);
КонецПроцедуры
@@ -912,6 +912,8 @@
ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение, Вложения);
ОповещениеОЗакрытииФормы = Неопределено;
КонецЕсли;
ОтключитьВыборПолучателей = ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПодготовкаНовогоПисьма");
ПараметрыОтправки.Вставить("ОтключитьВыборПолучателей", ОтключитьВыборПолучателей);
МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент");
МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки, ОповещениеОЗакрытииФормы);
@@ -57,7 +57,7 @@
могут нанести вред вашему компьютеру и данным в приложении.
Вместо открытия внешних отчетов и обработок рекомендуется использовать
&lt;link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки>дополнительные&lt;/>&lt;link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки> отчеты&lt;/>&lt;link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки> и обработки&lt;/> и &lt;link e1cib/app/ОбщаяФорма.Расширения>расширения&lt;/>, полученные из надежных источников.
&lt;link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки>дополнительные отчеты и обработки&lt;/> и &lt;link e1cib/app/ОбщаяФорма.Расширения>расширения&lt;/>, полученные из надежных источников.
См. также: &lt;link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке&lt;/>.</value>
</title>
@@ -1460,7 +1460,7 @@
<title>
<key>ru</key>
<value>Если требуется...
• обновить расширение, то вместо удаления и добавления нажмите кнопку &lt;b>Обновить&lt;/>;
• обновить расширение, то вместо удаления и добавления нажмите кнопку &lt;b>Обновить из файла...&lt;/>;
• временно отключить расширение, следует снять флажок &lt;b>Подключать расширение при входе&lt;/>.</value>
</title>
<formatted>true</formatted>
@@ -1723,7 +1723,7 @@
<key>ru</key>
<value>Ознакомьтесь с документацией по расширению, которую можно получить от поставщика расширения.
Если требуется...
• обновить расширение, то вместо удаления и добавления нажмите кнопку &lt;b>Обновить&lt;/>;
• обновить расширение, то вместо удаления и добавления нажмите кнопку &lt;b>Обновить из файла...&lt;/>;
• временно отключить расширение, следует снять флажок &lt;b>Подключать расширение при входе&lt;/>.</value>
</title>
<formatted>true</formatted>
@@ -2417,17 +2417,8 @@
<keyParameter>true</keyParameter>
</parameters>
<parameters>
<name>ИмяФайла</name>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
</parameters>
<parameters>
<name>МножественныйВыбор</name>
<valueType>
<types>Boolean</types>
</valueType>
<name>ДополнительныйПараметр</name>
<valueType/>
</parameters>
<commandInterface>
<navigationPanel/>
@@ -10,12 +10,23 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Параметры.Ключ) Тогда
ТекстОшибки =
ТекстОшибки =
НСтр("ru = 'Общая форма ""Предупреждение безопасности"" является вспомогательной и открывается из служебных механизмов приложения.'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если Не ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().Свойство(Параметры.Ключ) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Указан некорректный вид предупреждения безопасности ""%1"".'"),
Параметры.Ключ);
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
КлючНазначенияИспользования = Параметры.Ключ;
КлючСохраненияПоложенияОкна = Параметры.Ключ;
ТекущаяСтраница = Элементы.Найти(Параметры.Ключ);
Для Каждого Страница Из Элементы.Страницы.ПодчиненныеЭлементы Цикл
Страница.Видимость = (Страница = ТекущаяСтраница);
@@ -24,43 +35,46 @@
Если ТекущаяСтраница = Элементы.ПослеОбновления Тогда
Элементы.ЗапретитьОткрытиеВнешнихОтчетовИОбработок.КнопкаПоУмолчанию = Истина;
ИначеЕсли ТекущаяСтраница = Элементы.ПослеПоявленияПрава Тогда
Элементы.ЯОзнакомлен.КнопкаПоУмолчанию = Истина;
КонецЕсли;
ИначеЕсли ТекущаяСтраница = Элементы.ПередОткрытиемФайла Тогда
Если ЗначениеЗаполнено(Параметры.ДополнительныйПараметр) Тогда
Элементы.ПредупреждениеПриОткрытииФайла.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Элементы.ПредупреждениеПриОткрытииФайла.Заголовок,
Параметры.ДополнительныйПараметр);
КонецЕсли;
КлючНазначенияИспользования = Параметры.Ключ;
КлючСохраненияПоложенияОкна = Параметры.Ключ;
Если Не ПустаяСтрока(Параметры.ИмяФайла) Тогда
Элементы.ПредупреждениеПриОткрытииФайла.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Элементы.ПредупреждениеПриОткрытииФайла.Заголовок, Параметры.ИмяФайла);
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование.Видимость = Ложь;
Элементы.ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопирование.Видимость = Ложь;
ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ") Тогда
МодульРезервноеКопированиеИБСервер = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеИБСервер");
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование.Заголовок =
СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Перед удалением расширения рекомендуется
|<a href=""%1"">выполнить резервное копирование информационной базы</a>.'"),
МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования());
Элементы.ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопирование.Заголовок =
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование.Заголовок;
КонецЕсли;
Если Параметры.МножественныйВыбор Тогда
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиТекстУдалить.Заголовок = НСтр("ru = 'Удалить выделенные расширения?'");
Иначе
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиТекстУдалить.Заголовок = НСтр("ru = 'Удалить расширение?'");
КонецЕсли;
Элементы.ПредупреждениеПередУдалениемРасширенияБезДанныхТекстУдалить.Заголовок =
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиТекстУдалить.Заголовок;
Если ТекущаяСтраница = Элементы.ПередУдалениемРасширенияСДанными
Или ТекущаяСтраница = Элементы.ПередУдалениемРасширенияБезДанных
Или ТекущаяСтраница = Элементы.ПередОтключениемРасширенияСДанными Тогда
ИначеЕсли ТекущаяСтраница = Элементы.ПередУдалениемРасширенияСДанными
Или ТекущаяСтраница = Элементы.ПередУдалениемРасширенияБезДанных
Или ТекущаяСтраница = Элементы.ПередОтключениемРасширенияСДанными Тогда
Если ОбщегоНазначения.РазделениеВключено() Тогда
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование.Видимость = Ложь;
Элементы.ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопирование.Видимость = Ложь;
ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РезервноеКопированиеИБ") Тогда
МодульРезервноеКопированиеИБСервер = ОбщегоНазначения.ОбщийМодуль("РезервноеКопированиеИБСервер");
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование.Заголовок =
СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru = 'Перед удалением расширения рекомендуется
|<a href=""%1"">выполнить резервное копирование информационной базы</a>.'"),
МодульРезервноеКопированиеИБСервер.НавигационнаяСсылкаОбработкиРезервногоКопирования());
Элементы.ПредупреждениеПередУдалениемРасширенияБезДанныхРезервноеКопирование.Заголовок =
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиРезервноеКопирование.Заголовок;
КонецЕсли;
Если Параметры.ДополнительныйПараметр = Истина Тогда
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиТекстУдалить.Заголовок =
НСтр("ru = 'Удалить выделенные расширения?'");
Иначе
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиТекстУдалить.Заголовок =
НСтр("ru = 'Удалить расширение?'");
КонецЕсли;
Элементы.ПредупреждениеПередУдалениемРасширенияБезДанныхТекстУдалить.Заголовок =
Элементы.ПредупреждениеПередУдалениемРасширенияСДаннымиТекстУдалить.Заголовок;
Заголовок = НСтр("ru = 'Предупреждение'");
КонецЕсли;
@@ -155,11 +155,8 @@
И ЭтоРасширениеСДанными(ТекущееРасширение.ИдентификаторРасширения) Тогда
Оповещение = Новый ОписаниеОповещения("ОтключитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", "ПередОтключениемРасширенияСДанными");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОтключениемРасширенияСДанными);
Иначе
СписокРасширенийПодключатьПриИзмененииПродолжение(Контекст);
КонецЕсли;
@@ -296,7 +293,10 @@
ПараметрыФормыВопроса.Картинка = БиблиотекаКартинок.ДиалогИнформация;
ПараметрыФормыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
ПараметрыФормыВопроса.Заголовок = НСтр("ru = 'Результат проверки возможности применения всех расширений'");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, НСтр("ru = 'Проверка возможности применения всех расширений пройдена успешно.'"),РежимДиалогаВопрос.ОК, ПараметрыФормыВопроса);
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено,
НСтр("ru = 'Проверка возможности применения всех расширений пройдена успешно.'"),
РежимДиалогаВопрос.ОК,
ПараметрыФормыВопроса);
Иначе
Результат.ИнформацияОПроблемах.Показать(НСтр("ru = 'Результат проверки расширений.'"));
КонецЕсли;
@@ -616,17 +616,12 @@
Контекст.Вставить("ИдентификаторыРасширений", ИдентификаторыРасширений);
Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ВидПредупреждения = ?(ЕстьРасширениеСДанными(ИдентификаторыРасширений),
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередУдалениемРасширенияСДанными,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередУдалениемРасширенияБезДанных);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("МножественныйВыбор", ИдентификаторыРасширений.Количество() > 1);
Если ЕстьРасширениеСДанными(ИдентификаторыРасширений) Тогда
ПараметрыФормы.Вставить("Ключ", "ПередУдалениемРасширенияСДанными");
Иначе
ПараметрыФормы.Вставить("Ключ", "ПередУдалениемРасширенияБезДанных");
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение)
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ВидПредупреждения, ИдентификаторыРасширений.Количество() > 1);
КонецПроцедуры
@@ -783,11 +778,10 @@
Контекст.Вставить("ИдентификаторРасширения", ИдентификаторРасширения);
Контекст.Вставить("МножественныйВыбор", МножественныйВыбор);
Контекст.Вставить("ВыделенныеСтроки", ИдентификаторРасширения);
Оповещение = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемРасширений");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередДобавлениемРасширений);
КонецПроцедуры
@@ -1748,7 +1742,10 @@
ПараметрыФормыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыФормыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
ПараметрыФормыВопроса.Заголовок = НСтр("ru = 'Не все расширения удалось перенастроить'");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ИнформацияОбОшибках,РежимДиалогаВопрос.ОК, ПараметрыФормыВопроса);
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено,
ИнформацияОбОшибках,
РежимДиалогаВопрос.ОК,
ПараметрыФормыВопроса);
КонецПроцедуры
@@ -1832,32 +1829,27 @@
Контекст.Вставить("ИдентификаторСтроки", ТекущееРасширение.ПолучитьИдентификатор());
Оповещение = Новый ОписаниеОповещения("ОтключитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", "ПередОтключениемРасширенияСДанными");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОтключениемРасширенияСДанными);
ИначеЕсли СинонимыРасширений.СДанными.Количество() > 0 Тогда
Если СинонимыРасширений.СДанными.Количество() = 1 Тогда
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Среди отключаемых расширений есть расширение, хранящее данные в приложении,
|которые станут недоступными. Кроме того, некоторые данные самого приложения
|могут тоже стать недоступными для изменения.
|
|Расширение с данными:
| - %1'"),
НСтр("ru = 'Среди отключаемых расширений есть расширение, хранящее данные в приложении, которые станут недоступными.
|Кроме того, некоторые данные самого приложения могут тоже стать недоступными для изменения.
|
|Расширение с данными:
| - %1'"),
СинонимыРасширений.СДанными[0]);
Иначе
РасширенияСДаннымиТекст = СтрСоединить(СинонимыРасширений.СДанными, Символы.ПС + " - ");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Среди отключаемых расширений есть расширения, хранящие данные в приложении,
|которые станут недоступными. Кроме того, некоторые данные самого приложения
|могут тоже стать недоступными для изменения.
|
|Расширения с данными:
| - %1'"),
НСтр("ru = 'Среди отключаемых расширений есть расширения, хранящие данные в приложении, которые станут недоступными.
|Кроме того, некоторые данные самого приложения могут тоже стать недоступными для изменения.
|
|Расширения с данными:
| - %1'"),
РасширенияСДаннымиТекст);
КонецЕсли;
@@ -14,7 +14,7 @@
ДополнительныеДанные = Параметры.ДополнительныеДанные;
Если ЗначениеЗаполнено(ДополнительныеДанные) Тогда
ОшибкаПроверкиПодписи = ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, "ДанныеПодписи", Ложь));
ОшибкаПроверкиПодписи = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеДанные, "ДанныеПодписи", Ложь) = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ИнформацияДляПоддержки) Тогда
@@ -393,18 +393,22 @@
Если ТипЗнч(Сертификат) = Тип("Массив") Тогда
Если Сертификат.Количество() > 0 Тогда
Если ТипЗнч(Сертификат[0]) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат[0];
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат[0], УникальныйИдентификатор);
Иначе
Если ЗначениеЗаполнено(Сертификат[0]) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат[0];
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат[0], УникальныйИдентификатор);
КонецЕсли;
ИначеЕсли ЭтоАдресВременногоХранилища(Сертификат[0]) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = Сертификат[0];
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат;
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат, УникальныйИдентификатор);
Если ЗначениеЗаполнено(Сертификат) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.Сертификат = Сертификат;
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ДанныеСертификата(Сертификат, УникальныйИдентификатор);
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = ПоместитьВоВременноеХранилище(Сертификат, УникальныйИдентификатор);
Иначе
ИначеЕсли ЭтоАдресВременногоХранилища(Сертификат) Тогда
ДополнительныеДанныеДляКлассификатораОшибок.ДанныеСертификата = Сертификат;
КонецЕсли;
КонецЕсли;
@@ -139,8 +139,7 @@
//
// Параметры:
// Индекс - Число - почтовый индекс, для которого необходимо получать данные.
// ДополнительныеПараметры - Структура - описание настроек поиска. Поля:
// * ФорматАдреса - Строка - тип используемого классификатора.
// ДополнительныеПараметры - Структура - см. ПараметрыПоискаАдресовПоПочтовомуИндексу
//
// Возвращаемое значение:
// Структура - найденные варианты. Содержит поля:
@@ -155,20 +154,24 @@
// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска вариантов по индексу.
// ** Представление - Строка - представление варианта.
//
Функция АдресаПоПочтовомуИндексуКлассификатора(Индекс, ДополнительныеПараметры) Экспорт
Функция АдресаПоПочтовомуИндексу(Индекс, ДополнительныеПараметры) Экспорт
Результат = Новый Структура;
Результат.Вставить("Данные", ТаблицаДанныхДляВыбораПоПочтовомуИндексу());
Результат.Вставить("ОбщаяЧастьПредставления", "");
Результат.Вставить("ЭтоДанныеСВебСервиса", Ложь);
СтруктураОписанияОшибкиПоставщика(Результат);
ЗаполнитьАдресаПоПочтовомуИндексуИзЗагруженныхДанных(Результат, Индекс, ДополнительныеПараметры);
Если Не ДополнительныеПараметры.ПоискТолькоВВебСервисе Тогда
ЗаполнитьАдресаПоПочтовомуИндексуИзЗагруженныхДанных(Результат, Индекс, ДополнительныеПараметры);
КонецЕсли;
Если Результат.Данные.Количество() = 0 И Не Результат.Отказ Тогда
Попытка
ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс);
ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс, ДополнительныеПараметры.ПодстрокаПоиска);
Результат.ЭтоДанныеСВебСервиса = Истина;
Исключение
СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , ,
@@ -180,6 +183,25 @@
Возврат Результат;
КонецФункции
// Возвращает настройки по умолчанию для поиска адресов по почтовому индексу классификатора.
//
// Возвращаемое значение:
// Структура - описание настроек поиска. Содержит поля:
// * ТипАдреса - Строка - тип используемого классификатора.
// * ПодстрокаПоиска - Строка - для уточнения поиска адресов.
// * ПоискТолькоВВебСервисе - Булево - если Истина, то поиск будет происходить только по данным из веб сервиса.
//
Функция ПараметрыПоискаАдресовПоПочтовомуИндексу() Экспорт
Настройки = Новый Структура;
Настройки.Вставить("ТипАдреса", "");
Настройки.Вставить("ПодстрокаПоиска", "");
Настройки.Вставить("ПоискТолькоВВебСервисе", Ложь);
Возврат Настройки;
КонецФункции
// Определить регион по индексу.
//
// Параметры:
@@ -6839,11 +6861,13 @@
// Заполнение адреса по данным сервиса 1С.
//
Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс)
Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораСервис1С(Результат, Индекс, ПодстрокаПоиска)
ТекстGETЗапроса = "selectByCode?code=%ZipCode%&text=%Text%&codeType=POSTAL_CODE";
ТекстGETЗапроса = "selectByCode?code=%ZipCode%&codeType=POSTAL_CODE";
ТекстGETЗапроса = СтрЗаменить(ТекстGETЗапроса, "%ZipCode%", Формат(Индекс, "ЧГ=0"));
ТекстGETЗапроса = СтрЗаменить(ТекстGETЗапроса, "%Text%", ПодстрокаПоиска);
РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса);
Если РезультатВебСервис.Отказ Тогда
@@ -1739,9 +1739,10 @@
//
Процедура УдалитьЭлементыФормыЗаполнения(Форма, УдаляемыеРеквизиты)
КоличествоСимволовДоПостфикса = АнкетированиеКлиентСервер.КоличествоСимволовВИмениВопросаБезПостфикса();
Для Каждого УдаляемыйРеквизит Из УдаляемыеРеквизиты Цикл
ИмяВопроса = Лев(УдаляемыйРеквизит.Значение, 43);
ИмяВопроса = Лев(УдаляемыйРеквизит.Значение, КоличествоСимволовДоПостфикса);
НайденныйЭлементФормы = Форма.Элементы.Найти(ИмяВопроса + "_Группа");
@@ -203,9 +203,10 @@
КонецПроцедуры
Процедура ПриИзмененииВопросаСВариантамиОтветов(Форма, ИмяВопроса)
НайденныеСтроки = Форма.ТаблицаВопросовРаздела.НайтиСтроки(Новый Структура("КлючСтроки",
Новый УникальныйИдентификатор(СтрЗаменить(Прав(Лев(ИмяВопроса, 43), 36), "_", "-"))));
КоличествоСимволовДоПостфикса = АнкетированиеКлиентСервер.КоличествоСимволовВИмениВопросаБезПостфикса();
ИдентификаторСтроки = Новый УникальныйИдентификатор(СтрЗаменить(Прав(Лев(ИмяВопроса, КоличествоСимволовДоПостфикса), 36), "_", "-"));
НайденныеСтроки = Форма.ТаблицаВопросовРаздела.НайтиСтроки(Новый Структура("КлючСтроки", ИдентификаторСтроки));
Если НайденныеСтроки.Количество() > 0 Тогда
Вопрос = НайденныеСтроки[0];
@@ -221,16 +222,20 @@
Процедура ПриИзмененииВопросаСВыборомОдногоВариантаОтвета(Форма, Вопрос, ИмяВопроса)
ВариантыОтветов = Форма.ВариантыОтветовНаВопросы.НайтиСтроки(Новый Структура("Вопрос", Вопрос.ЭлементарныйВопрос));
КоличествоСимволовДоПостфикса = АнкетированиеКлиентСервер.КоличествоСимволовВИмениВопросаБезПостфикса();
Для инд = 1 По ВариантыОтветов.Количество() Цикл
Если Форма[ИмяВопроса] = ВариантыОтветов[инд - 1].Ответ Тогда
Форма.Элементы[Лев(ИмяВопроса, 43) + "_РасшифровкаПодсказки"].Заголовок = ВариантыОтветов[инд - 1].Подсказка;
ИмяЭлемента = Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_РасшифровкаПодсказки";
Форма.Элементы[ИмяЭлемента].Заголовок = ВариантыОтветов[инд - 1].Подсказка;
Иначе
Форма[Лев(ИмяВопроса, 43) + "_Реквизит_" + инд] = Неопределено;
ИмяРеквизита = Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_Реквизит_" + инд;
Форма[ИмяРеквизита] = Неопределено;
КонецЕсли;
КонецЦикла;
Если Вопрос.Обязательный Тогда
НаименованиеГруппы = Лев(ИмяВопроса, 43) + "_Группа";
НаименованиеГруппы = Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_Группа";
ИзменитьЦветФонаГруппыОбязательногоВопроса(Форма.Элементы[НаименованиеГруппы].ЦветФона, Истина);
КонецЕсли;
@@ -239,16 +244,17 @@
Процедура ПриИзмененииВопросаСВыборомНесколькихВариантовОтвета(Форма, Вопрос, ИмяВопроса)
ВариантыОтветов = Форма.ВариантыОтветовНаВопросы.НайтиСтроки(Новый Структура("Вопрос", Вопрос.ЭлементарныйВопрос));
КоличествоСимволовДоПостфикса = АнкетированиеКлиентСервер.КоличествоСимволовВИмениВопросаБезПостфикса();
ЕстьОтвет = Ложь;
Для инд = 1 По ВариантыОтветов.Количество() Цикл
Если Форма[Лев(ИмяВопроса, 43) + "_Реквизит_" + инд] Тогда
Если Форма[Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_Реквизит_" + инд] Тогда
ЕстьОтвет = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Вопрос.Обязательный Тогда
НаименованиеГруппы = Лев(ИмяВопроса, 43) + "_Группа";
НаименованиеГруппы = Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_Группа";
ИзменитьЦветФонаГруппыОбязательногоВопроса(Форма.Элементы[НаименованиеГруппы].ЦветФона, ЕстьОтвет);
КонецЕсли;
@@ -312,18 +318,20 @@
Функция ЕстьОтветНаВопросСВыборомОтветов(Форма, Вопрос, ИмяВопроса)
ВариантыОтветов = Форма.ВариантыОтветовНаВопросы.НайтиСтроки(Новый Структура("Вопрос", Вопрос.ЭлементарныйВопрос));
КоличествоСимволовДоПостфикса = АнкетированиеКлиентСервер.КоличествоСимволовВИмениВопросаБезПостфикса();
Если Вопрос.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз") Тогда
Для инд = 1 По ВариантыОтветов.Количество() Цикл
Если ЗначениеЗаполнено(Форма[ИмяВопроса + "_Реквизит_" + инд]) Тогда
Форма.Элементы[Лев(ИмяВопроса, 43) + "_РасшифровкаПодсказки"].Заголовок = ВариантыОтветов[инд
ИмяЭлемента = Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_РасшифровкаПодсказки";
Форма.Элементы[ИмяЭлемента].Заголовок = ВариантыОтветов[инд
- 1].Подсказка;
Возврат Истина;
КонецЕсли;
КонецЦикла;
ИначеЕсли Вопрос.ТипОтвета = ПредопределенноеЗначение("Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз") Тогда
Для инд = 1 По ВариантыОтветов.Количество() Цикл
Если Форма[Лев(ИмяВопроса, 43) + "_Реквизит_" + инд] Тогда
ИмяРеквизита = Лев(ИмяВопроса, КоличествоСимволовДоПостфикса) + "_Реквизит_" + инд;
Если Форма[ИмяРеквизита] Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
@@ -50,6 +50,15 @@
КонецФункции
Функция КоличествоСимволовВИмениВопросаБезПостфикса() Экспорт
КоличествоСимволовВПрефиксе = СтрДлина(ИмяВопроса(""));
КоличествоСимволовВИдентификаторе = 36;
Возврат КоличествоСимволовВПрефиксе + КоличествоСимволовВИдентификаторе;
КонецФункции
Процедура СформироватьНумерациюДерева(ДеревоАнкеты, ПреобразовыватьФормулировку = Ложь) Экспорт
Если ДеревоАнкеты.ПолучитьЭлементы()[0].ТипСтроки = "Корень" Тогда
@@ -1244,8 +1244,8 @@
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок.
Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт
ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ИсполнителиЗадач.ПолноеИмя());
ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ДанныеБизнесПроцессов.ПолноеИмя());
ИсключенияПоискаСсылок.Добавить(Метаданные.Справочники.ГруппыИсполнителейЗадач.ПолноеИмя());
КонецПроцедуры
@@ -5312,13 +5312,16 @@
Запрос.УстановитьПараметр("СообщениеSMS", СообщениеSMS.Ссылка);
ЕстьИзменения = Ложь;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Адресаты = Запрос.Выполнить().Выгрузить();
ИдентификаторыСообщений = Адресаты.ВыгрузитьКолонку("ИдентификаторСообщения");
СтатусыДоставки = ОтправкаSMS.СтатусыДоставки(ИдентификаторыСообщений);
Для Каждого Адресат Из Адресаты Цикл
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(ОтправкаSMS.СтатусДоставки(Выборка.ИдентификаторСообщения));
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(СтатусыДоставки[Адресат.ИдентификаторСообщения]);
Если СостояниеСообщения <> Выборка.СостояниеСообщения Тогда
СообщениеSMS.Адресаты[Выборка.НомерСтроки - 1].СостояниеСообщения = СостояниеСообщения;
Если СостояниеСообщения <> Адресат.СостояниеСообщения Тогда
СообщениеSMS.Адресаты[Адресат.НомерСтроки - 1].СостояниеСообщения = СостояниеСообщения;
ЕстьИзменения = Истина;
КонецЕсли;
@@ -5535,20 +5538,27 @@
НомераДляОтправки = ТаблицаАдресатовСообщения.ВыгрузитьКолонку("НомерДляОтправки");
Попытка
РезультатОтправки = ОтправкаSMS.ОтправитьSMS(НомераДляОтправки, ТекстСообщения, "", ОтправлятьВТранслите);
Если РезультатОтправки.ОтправленныеСообщения.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения,
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось отправить %1 по причине:
|%2'"),
ВыборкаДокументы.Ссылка, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
УровеньЖурналаРегистрации.Ошибка, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
ТекстСообщения);
Продолжить;
КонецПопытки;
Если ЗначениеЗаполнено(РезультатОтправки.ОписаниеОшибки) Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось отправить %1 по причине:
|%2'"),
РезультатОтправки.ОписаниеОшибки);
ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Ошибка, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
ТекстСообщения);
КонецЕсли;
ПредставлениеДокумента = Строка(ВыборкаДокументы.Ссылка);
НачатьТранзакцию();
Попытка
@@ -5624,29 +5634,48 @@
Возврат;
КонецЕсли;
ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ОбрабатываемыеДокументы = Новый Соответствие;
ИдентификаторыСообщений = Новый Массив;
ВыборкаДокументы = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокументы.Следующий() Цикл
ОбрабатываемыеДокументы[ВыборкаДокументы.Ссылка] = Новый Массив;
ВыборкаИдентификаторы = ВыборкаДокументы.Выбрать();
Пока ВыборкаИдентификаторы.Следующий() Цикл
Адресаты = Новый Структура;
Адресаты.Вставить("НомерСтроки");
Адресаты.Вставить("ИдентификаторСообщения");
Адресаты.Вставить("СостояниеСообщения");
ЗаполнитьЗначенияСвойств(Адресаты, ВыборкаИдентификаторы);
ОбрабатываемыеДокументы[ВыборкаДокументы.Ссылка].Добавить(Адресаты);
ИдентификаторыСообщений.Добавить(Адресаты.ИдентификаторСообщения);
КонецЦикла;
КонецЦикла;
СтатусыДоставки = ОтправкаSMS.СтатусыДоставки(ИдентификаторыСообщений);
Для Каждого ОбрабатываемыйДокумент Из ОбрабатываемыеДокументы Цикл
Ссылка = ОбрабатываемыйДокумент.Ключ;
Адресаты = ОбрабатываемыйДокумент.Значение;
ТаблицаИзменившихсяСтатусов.Очистить();
ПредставлениеДокумента = ОбщегоНазначения.ПредметСтрокой(ВыборкаДокументы.Ссылка);
ПредставлениеДокумента = ОбщегоНазначения.ПредметСтрокой(Ссылка);
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(МетаданныеДокумента.ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", ВыборкаДокументы.Ссылка);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка);
Блокировка.Заблокировать();
ВыборкаИдентификаторы = ВыборкаДокументы.Выбрать();
Пока ВыборкаИдентификаторы.Следующий() Цикл
Для Каждого Адресат Из Адресаты Цикл
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(ОтправкаSMS.СтатусДоставки(ВыборкаИдентификаторы.ИдентификаторСообщения));
СостояниеСообщения = СостояниеСообщенияSMSСогласноСтатусуДоставки(СтатусыДоставки[Адресат.ИдентификаторСообщения]);
Если СостояниеСообщения <> ВыборкаИдентификаторы.СостояниеСообщения Тогда
Если СостояниеСообщения <> Адресат.СостояниеСообщения Тогда
НоваяСтрока = ТаблицаИзменившихсяСтатусов.Добавить();
НоваяСтрока.НомерСтроки = ВыборкаИдентификаторы.НомерСтроки;
НоваяСтрока.НомерСтроки = Адресат.НомерСтроки;
НоваяСтрока.СостояниеСообщения = СостояниеСообщения;
КонецЕсли;
@@ -5657,7 +5686,7 @@
Продолжить;
КонецЕсли;
ДокументОбъект = ВыборкаДокументы.Ссылка.ПолучитьОбъект();
ДокументОбъект = Ссылка.ПолучитьОбъект();
Для Каждого ИзменившийсяСтатус Из ТаблицаИзменившихсяСтатусов Цикл
ДокументОбъект.Адресаты[ИзменившийсяСтатус.НомерСтроки - 1].СостояниеСообщения = ИзменившийсяСтатус.СостояниеСообщения;
@@ -5676,7 +5705,7 @@
НСтр("ru = 'Не удалось обновить статусы доставки %1 по причине: %2'"),
ПредставлениеДокумента, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(УправлениеЭлектроннойПочтой.СобытиеЖурналаРегистрации(),
УровеньЖурналаРегистрации.Предупреждение, МетаданныеДокумента, ВыборкаДокументы.Ссылка,
УровеньЖурналаРегистрации.Предупреждение, МетаданныеДокумента, Ссылка,
ТекстСообщения);
КонецПопытки;
@@ -5693,12 +5722,18 @@
//
Процедура ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки)
ОтправленныеСообщения = Новый Соответствие;
Для Каждого ОтправленноеСообщение Из РезультатОтправки.ОтправленныеСообщения Цикл
Для Каждого НайденнаяСтрока Из ДокументОбъект.Адресаты.НайтиСтроки(
Новый Структура("НомерДляОтправки", ОтправленноеСообщение.НомерПолучателя)) Цикл
НайденнаяСтрока.ИдентификаторСообщения = ОтправленноеСообщение.ИдентификаторСообщения;
НайденнаяСтрока.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером;
КонецЦикла;
ОтправленныеСообщения[ОтправленноеСообщение.НомерПолучателя] = ОтправленноеСообщение.ИдентификаторСообщения;
КонецЦикла;
Для Каждого Адресат Из ДокументОбъект.Адресаты Цикл
Адресат.ИдентификаторСообщения = ОтправленныеСообщения[Адресат.НомерДляОтправки];
Если ЗначениеЗаполнено(Адресат.ИдентификаторСообщения) Тогда
Адресат.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.ОтправляетсяПровайдером;
Иначе
Адресат.СостояниеСообщения = Перечисления.СостоянияСообщенияSMS.НеДоставлено;
КонецЕсли;
КонецЦикла;
ДокументОбъект.Состояние = СостояниеДокументаСообщениеSMS(ДокументОбъект);
@@ -726,9 +726,19 @@
// Выполнить в фоне.
БезопасныйРежим = БезопасныйРежим();
УстановитьОтключениеБезопасногоРежима(Истина);
Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры,
ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры, БезопасныйРежим,
ПараметрыВыполнения.ОжидатьЗавершение <> Неопределено);
Попытка
Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры,
ПараметрыВыполнения, ПараметрыЭкспортнойПроцедуры, БезопасныйРежим,
ПараметрыВыполнения.ОжидатьЗавершение <> Неопределено);
Исключение
Результат.Статус = "Ошибка";
Если Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено Тогда
УстановитьСвойстваОшибки(Результат, Задание.ИнформацияОбОшибке);
Иначе
УстановитьСвойстваОшибки(Результат, ИнформацияОбОшибке());
КонецЕсли;
Возврат Результат;
КонецПопытки;
УстановитьОтключениеБезопасногоРежима(Ложь);
Если Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено Тогда
@@ -173,6 +173,7 @@
НастройкиОжидания.ВыводитьОкноОжидания = Истина;
НастройкиОжидания.ПолучатьРезультат = ПолучатьРезультат; // для обратной совместимости
НастройкиОжидания.ВыводитьСообщения = Истина;
НастройкиОжидания.ВыводитьПрогрессВыполнения = Истина;
ДлительныеОперацииКлиент.ОжидатьЗавершение(Задание, Обработчик, НастройкиОжидания);
@@ -2236,22 +2236,30 @@
МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП");
МодульИнтеграцияПодсистемБИП.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульСертификатыЭлектроннойПодписи = ОбщегоНазначения.ОбщийМодуль("Отчеты.СертификатыЭлектроннойПодписи");
МодульСертификатыЭлектроннойПодписи.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSSСлужебный.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульПроверкаЦелостностиТома = ОбщегоНазначения.ОбщийМодуль("Отчеты.ПроверкаЦелостностиТома");
МодульПроверкаЦелостностиТома.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
МодульОбъемНенужныхФайлов = ОбщегоНазначения.ОбщийМодуль("Отчеты.ОбъемНенужныхФайлов");
МодульОбъемНенужныхФайлов.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда
МодульКонтрольРассылкиОтчетов = ОбщегоНазначения.ОбщийМодуль("Отчеты.КонтрольРассылкиОтчетов");
МодульКонтрольРассылкиОтчетов.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульСертификатыЭлектроннойПодписи = ОбщегоНазначения.ОбщийМодуль("Отчеты.СертификатыЭлектроннойПодписи");
МодульСертификатыЭлектроннойПодписи.ПриОпределенииОбъектовСКомандамиОтчетов(Объекты);
КонецЕсли;
КонецПроцедуры
// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.
@@ -4918,6 +4926,8 @@
МодульЗащитаПерсональныхДанных.ПриОпределенииНастроекРегламентныхЗаданий(Настройки);
КонецЕсли;
ОбновлениеИнформационнойБазыСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
МодульОбменДаннымиСервер.ПриОпределенииНастроекРегламентныхЗаданий(Настройки);
@@ -721,7 +721,8 @@
ДанныеПроизводственныхКалендарей = Новый Структура(Новый ФиксированнаяСтруктура(ПроизводственныеКалендари));
ПериодыНерабочихДней = Новый Структура(Новый ФиксированнаяСтруктура(ПроизводственныеКалендари));
ДанныеКлассификатора.Вставить("ДанныеПроизводственныхКалендарей", ДанныеПроизводственныхКалендарей);
ДанныеКлассификатора.Вставить("ПроизводственныеКалендари", ПроизводственныеКалендари);
ДанныеКлассификатора.Вставить("ПериодыНерабочихДней", ПериодыНерабочихДней);
@@ -657,7 +657,10 @@
КонецЕсли;
КонецЕсли;
ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор");
ТекущееДействие = ТаблицаФормы.ПолучитьДействие("Выбор");
Если Не ЗначениеЗаполнено(ТекущееДействие) Тогда
ТаблицаФормы.УстановитьДействие("Выбор", "Подключаемый_Выбор");
КонецЕсли;
КонецЦикла;
@@ -2867,12 +2867,14 @@
Если ЗначениеЗаполнено(СтрокаОтвета) Тогда
СтрокаПоискаОшибки = СтрокаЗапроса + "|" + СтрокаОтвета;
Иначе
СтрокаПоискаОшибки = ТекстОшибки;
ОшибкаПоКлассификатору = ЭлектроннаяПодпись.ОшибкаПоКлассификатору(СтрокаПоискаОшибки, Истина);
КонецЕсли;
ОшибкаПоКлассификатору = ЭлектроннаяПодпись.ОшибкаПоКлассификатору(СтрокаПоискаОшибки, Истина);
Если ОшибкаПоКлассификатору = Неопределено Тогда
СтрокаПоискаОшибки = ТекстОшибки;
ОшибкаПоКлассификатору = ЭлектроннаяПодпись.ОшибкаПоКлассификатору(СтрокаПоискаОшибки, Истина);
КонецЕсли;
СтруктураЗначения.Вставить("СтрокаПоискаОшибки", СтрокаПоискаОшибки);
СтруктураЗначения.Вставить("ОшибкаПоКлассификаторуНайдена", ОшибкаПоКлассификатору <> Неопределено);
КонецЕсли;
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.10.256";
Описание.Версия = "3.1.10.277";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -386,6 +386,8 @@
Схема.Параметры.Найти("ПервыйОбменВРИБ").Значение = ПараметрыОтбора.ПервыйОбменВРИБ;
Схема.Параметры.Найти("ЭтоРИБСФильтром").Значение = СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром");
КонецЕсли;
Схема.Параметры.Найти("ИдентификаторОбработчикаОчисткиУстаревшихДанных").Значение =
ИдентификаторОбработчикаОчисткиУстаревшихДанных();
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = Компоновщик.Выполнить(Схема, Схема.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
@@ -857,6 +859,7 @@
// * СеансОбновления - Структура
// * ОписаниеПотоков - см. НовоеОписаниеПотоковРегистрацииДанныхОтложенногоОбновления
// * ВерсияУдалениеПатчей - Строка
// * ВерсияПроверкиПатчей - Строка
// * ДлительностьЭтаповОбновления - Структура:
// ** Критичные - Структура:
// *** Начало - Дата
@@ -1615,6 +1618,15 @@
КонецПроцедуры
// См. РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихДанных;
Настройка.Параметризуется = Истина;
КонецПроцедуры
// См. ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации.
Процедура ПриСбореПоказателейСтатистикиКонфигурации() Экспорт
@@ -1689,18 +1701,19 @@
Если Пользователи.ЭтоПолноправныйПользователь(, Истина)
И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()
И Не ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
Значение = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить("ПроверкаПатчей", "НомерВерсии");
Если Значение = Неопределено
Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Метаданные.Версия, Значение) > 0 Тогда
Сведения = СведенияОбОбновленииИнформационнойБазы();
ВерсияПроверкиПатчей = Сведения.ВерсияПроверкиПатчей;
Если ВерсияПроверкиПатчей = Неопределено
Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Метаданные.Версия, ВерсияПроверкиПатчей) > 0 Тогда
МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации");
Результат = МодульОбновлениеКонфигурации.ИсправленияИзменены();
ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("ПроверкаПатчей", "НомерВерсии", Метаданные.Версия);
Сведения.ВерсияПроверкиПатчей = Метаданные.Версия;
Если Результат.ЕстьИзменения Тогда
Сведения = СведенияОбОбновленииИнформационнойБазы();
Сведения.ВерсияУдалениеПатчей = Метаданные.Версия;
ЗаписатьСведенияОбОбновленииИнформационнойБазы(Сведения);
КонецЕсли;
ЗаписатьСведенияОбОбновленииИнформационнойБазы(Сведения);
КонецЕсли;
КонецЕсли;
@@ -1733,6 +1746,19 @@
Обработчик.РежимВыполнения = "Оперативно";
КонецЕсли;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); // Не влияет на выбор для выполнения.
Обработчик.Процедура = "ОбновлениеИнформационнойБазыСлужебный.ОчиститьУстаревшиеДанныеПолностью";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина;
Обработчик.Идентификатор = ИдентификаторОбработчикаОчисткиУстаревшихДанных();
Обработчик.ПроцедураЗаполненияДанныхОбновления = "ОбновлениеИнформационнойБазыСлужебный.ПустаяПроцедураРегистрации";
Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Некритичный;
Обработчик.ЧитаемыеОбъекты = "РегистрСведений.ОбработчикиОбновления";
Обработчик.ИзменяемыеОбъекты = "РегистрСведений.ОбработчикиОбновления";
Обработчик.Комментарий =
НСтр("ru = 'Очищает устаревшие данные, чтобы переход на следующую версию при реструктуризации был без ошибки ""Записи регистра стали неуникальными"".'");
КонецПроцедуры
// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов.
@@ -1808,7 +1834,7 @@
КонецЕсли;
ИтерацииОбновления = ИтерацииОбновления();
Обработки.ОписаниеОбработчиковОбновления.ЗаполнитьНомерОчереди(ИтерацииОбновления);
ЗаполнитьНомерОчередиОбработчиков(ИтерацииОбновления);
ОбновитьСписокВыполняемыхОбработчиковОбновления(ИтерацииОбновления, Истина);
ПеререгистрироватьДанныеДляОтложенногоОбновления();
Если ИнформационнаяБазаФайловая Тогда
@@ -2747,7 +2773,7 @@
КонецПопытки;
ОбновлениеИнформационнойБазыПереопределяемый.ПередФормированиеСпискаОтложенныхОбработчиков(ИтерацииОбновления);
Обработки.ОписаниеОбработчиковОбновления.ЗаполнитьНомерОчереди(ИтерацииОбновления);
ЗаполнитьНомерОчередиОбработчиков(ИтерацииОбновления);
ОбновитьСписокВыполняемыхОбработчиковОбновления(ИтерацииОбновления);
СброситьПрогрессВыполненияОбработчиков();
ОчиститьЗарегистрированныеПроблемыСДанными();
@@ -2906,10 +2932,31 @@
Возврат;
КонецЕсли;
Если СинхронноеОбновление Тогда
ОчиститьПолностьюПослеУспешногоОтложенногоОбновления();
Иначе
НастроитьЗаданиеОчисткаУстаревшихДанных(Истина);
КонецПроцедуры
Процедура ЗаполнитьНомерОчередиОбработчиков(ИтерацииОбновления)
Обработки.ОписаниеОбработчиковОбновления.ЗаполнитьНомерОчереди(ИтерацииОбновления);
ОбработчикОчисткиУстаревшихДанных = Неопределено;
МаксимальнаяОчередь = 0;
Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл
ТекущиеОчереди = ИтерацияОбновления.Обработчики.Скопировать(, "ОчередьОтложеннойОбработки");
ТекущиеОчереди.Сортировать("ОчередьОтложеннойОбработки УБЫВ");
Если ЗначениеЗаполнено(ТекущиеОчереди) Тогда
ТекущаяОчередь = ТекущиеОчереди[0].ОчередьОтложеннойОбработки;
МаксимальнаяОчередь = ?(МаксимальнаяОчередь < ТекущаяОчередь,
ТекущаяОчередь, МаксимальнаяОчередь);
КонецЕсли;
Если ИтерацияОбновления.Подсистема <> "СтандартныеПодсистемы" Тогда
Продолжить;
КонецЕсли;
ОбработчикОчисткиУстаревшихДанных = ИтерацияОбновления.Обработчики.Найти(
ИдентификаторОбработчикаОчисткиУстаревшихДанных(), "Идентификатор");
КонецЦикла;
Если ОбработчикОчисткиУстаревшихДанных <> Неопределено Тогда
ОбработчикОчисткиУстаревшихДанных.ОчередьОтложеннойОбработки = МаксимальнаяОчередь + 1;
КонецЕсли;
КонецПроцедуры
@@ -2965,6 +3012,14 @@
КонецФункции
Функция ИдентификаторОбработчикаОчисткиУстаревшихДанных()
Возврат Новый УникальныйИдентификатор("724850c1-7de4-4d18-8d99-33d0c6b46afa");
КонецФункции
Функция ЭтоОбработчикОчисткиУстаревшихДанных(Обработчик) Экспорт
Возврат Обработчик.Идентификатор = ИдентификаторОбработчикаОчисткиУстаревшихДанных();
КонецФункции
// Для внутреннего использования.
//
// Параметры:
@@ -4704,6 +4759,11 @@
Продолжить;
КонецЕсли;
Если ЭтоОбработчикОчисткиУстаревшихДанных(Обработчик)
И Обработчики.Количество() > 1 Тогда
Продолжить;
КонецЕсли;
Если Обработчик.ИтерацияЗапуска = ТекущаяИтерация Тогда
// Обработчик в этой итерации обновления уже запускался.
ЕстьНевыполненные = Истина;
@@ -7633,15 +7693,16 @@
УровеньЖурналаРегистрации.Информация,,, Комментарий);
Возврат;
КонецЕсли;
ИначеЕсли Не ОтложенноеОбновлениеЗавершено() Тогда
Иначе
НастроитьЗаданиеОчисткаУстаревшихДанныхБезПопытки(Ложь);
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Очистка устаревших данных недопустима до успешного завершения
|отложенного обновления на новую версию приложения.
|1. Посмотреть результаты обновления: %1
|2. Запустить очистку: %2'"),
"e1cib/app/Обработка.РезультатыОбновленияПрограммы",
"e1cib/app/Обработка.РезультатыОбновленияПрограммы.Форма.ОчисткаУстаревшихДанных");
НСтр("ru = 'Очистка устаревших данных выполняется
|в последнем отложенном обработчике обновления.
|Посмотреть результаты: %1
|
|Регламентное задание используется только в модели сервиса
|для очистки устаревших неразделенных данных.'"),
"e1cib/app/Обработка.РезультатыОбновленияПрограммы");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
@@ -7784,15 +7845,20 @@
КонецЕсли;
НайденныеЗадания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
Если НайденныеЗадания.Количество() > 1 Тогда
Количество = ?(ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных(), 0, 1);
Если НайденныеЗадания.Количество() > Количество Тогда
Для Каждого НайденноеЗадание Из НайденныеЗадания Цикл
Если НайденноеЗадание = НайденныеЗадания[0] Тогда
Если НайденноеЗадание = НайденныеЗадания[0] И Количество > 0 Тогда
Продолжить;
КонецЕсли;
РегламентныеЗаданияСервер.УдалитьЗадание(НайденноеЗадание);
КонецЦикла;
КонецЕсли;
Если Количество = 0 Тогда
Возврат;
КонецЕсли;
Если НайденныеЗадания.Количество() = 0 Тогда
НачатьТранзакцию();
Попытка
@@ -7876,8 +7942,11 @@
КонецПроцедуры
// Для вызова после отложенного обновления.
Процедура ОчиститьПолностьюПослеУспешногоОтложенногоОбновления()
Процедура ПустаяПроцедураРегистрации(Параметры) Экспорт
Возврат;
КонецПроцедуры
Процедура ОчиститьУстаревшиеДанныеПолностью(Параметры) Экспорт
ЗаголовокОшибки = НСтр("ru = 'Не удалось выполнить очистку устаревших данных.'")
+ Символы.ПС + Символы.ПС;
@@ -7895,14 +7964,14 @@
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне();
ПараметрыВыполнения.ОжидатьЗавершение = Неопределено;
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Очистка устаревших данных (синхронно)'");
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Очистка устаревших данных (отложенно)'");
ПараметрыВыполнения.АдресРезультата = АдресРезультатаОчистки;
ПараметрыВыполнения.КлючФоновогоЗадания = КлючЗаданияОчисткиУстаревшихДанных();
ПараметрыВыполнения.ЗапуститьНеВФоне = МонопольныйРежим();
НаборПараметровПроцедуры = Новый Структура;
НаборПараметровПроцедуры.Вставить("Контекст",
Новый Структура("ЧиститьУдаляемые, СинхронноеОбновление", Ложь, Истина));
Новый Структура("ЧиститьУдаляемые, ОтложенноеОбновление", Ложь, Истина));
НаборПараметровПроцедуры.Вставить("ИмяМетодаПолученияПорций",
"ОбновлениеИнформационнойБазыСлужебный.УстаревшиеДанныеПриЗапросеПорцийВФоне");
@@ -7935,6 +8004,8 @@
УдалитьИзВременногоХранилища(АдресРезультатаОчистки);
Параметры.ОбработкаЗавершена = Истина;
КонецПроцедуры
// Для вызова из формы и процедуры ОчиститьПолностьюПослеУспешногоОтложенногоОбновления.
@@ -7990,7 +8061,8 @@
Процедура УстаревшиеДанныеПриЗапросеПорцийВФоне(НовыеПорции, Контекст) Экспорт
Если Не Контекст.Свойство("ОчищаемыеТаблицы") Тогда
Если Не Контекст.Свойство("ЭтоРегламентноеЗадание") Тогда
Если Не Контекст.Свойство("ЭтоРегламентноеЗадание")
И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ВыполняетсяРегламентноеЗаданиеОчисткаУстаревшихДанных(Истина);
КонецЕсли;
Контекст.Вставить("ИндексТекущейТаблицы", -1);
@@ -8049,7 +8121,7 @@
КонецЦикла;
Если Контекст.Свойство("Процент")
И Не Контекст.Свойство("СинхронноеОбновление") Тогда
И Не Контекст.Свойство("ОтложенноеОбновление") Тогда
Контекст.Процент = ?(Контекст.ОчищаемыеТаблицы.Количество() = 0, 100,
Окр((Контекст.ИндексТекущейТаблицы + 1) * 100 / Контекст.ОчищаемыеТаблицы.Количество()));
КонецЕсли;
@@ -8776,11 +8848,12 @@
"НЕ %1.ПустаяСсылка ЕСТЬ NULL", ИмяПараметра);
ПустыеСсылки = Новый Массив;
ТипыСсылок = Новый Массив;
ЗначениеПараметра = Новый ТаблицаЗначений;
Для Каждого ОписаниеТипа Из ОчищаемыеТипы Цикл
ПустыеСсылки.Добавить(ПредопределенноеЗначение(ОписаниеТипа.Значение + ".ПустаяСсылка"));
ТипыСсылок.Добавить(ОписаниеТипа.Ключ);
ЗначениеПараметра.Добавить();
КонецЦикла;
ЗначениеПараметра = Новый ТаблицаЗначений;
ЗначениеПараметра.Колонки.Добавить("ПустаяСсылка", Новый ОписаниеТипов(ТипыСсылок));
ЗначениеПараметра.ЗагрузитьКолонку(ПустыеСсылки, "ПустаяСсылка");
Запрос.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра);
@@ -10891,6 +10964,7 @@
СведенияОбОбновлении.Вставить("ТекущаяИтерацияОбновления", 1);
СведенияОбОбновлении.Вставить("СеансОбновления");
СведенияОбОбновлении.Вставить("ВерсияУдалениеПатчей");
СведенияОбОбновлении.Вставить("ВерсияПроверкиПатчей");
СведенияОбОбновлении.Вставить("ЗависимостьГруппОбработчиков", Новый Соответствие);
СведенияОбОбновлении.Вставить("ВерсииПодсистемНаНачалоОбновления", Новый Соответствие);
СведенияОбОбновлении.Вставить("ДатаНачалаСеансаОбновления", Неопределено);
@@ -985,7 +985,6 @@
КонецФункции
// Определяет, указаны ли места использования в исключениях поиска ссылок.
//
// Параметры:
@@ -1432,23 +1431,14 @@
ИсключенияПоискаСсылок = ИсключенияПоискаСсылок();
ДополнительныеИсключенияПоискаСсылок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
ДополнительныеПараметры,
"ДополнительныеИсключенияПоискаСсылок",
Новый Соответствие);
ДополнительныеПараметры, "ДополнительныеИсключенияПоискаСсылок", Новый Соответствие);
Для каждого МетаданныеРеквизитыИсключения Из ДополнительныеИсключенияПоискаСсылок Цикл
ЗначениеИсключения = ИсключенияПоискаСсылок[МетаданныеРеквизитыИсключения.Ключ];
Если ЗначениеИсключения = Неопределено Тогда
ИсключенияПоискаСсылок.Вставить(МетаданныеРеквизитыИсключения.Ключ,
МетаданныеРеквизитыИсключения.Значение);
Иначе
Если ТипЗнч(ЗначениеИсключения) = Тип("Массив") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначениеИсключения,
МетаданныеРеквизитыИсключения.Значение);
КонецЕсли;
КонецЕсли;
ИсключенияПоискаСсылок.Вставить(МетаданныеРеквизитыИсключения.Ключ, МетаданныеРеквизитыИсключения.Значение);
ИначеЕсли ТипЗнч(ЗначениеИсключения) = Тип("Массив") Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ЗначениеИсключения, МетаданныеРеквизитыИсключения.Значение);
КонецЕсли;
КонецЦикла;
ОтменаИсключенийПоискаСсылок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеПараметры,
@@ -125,28 +125,48 @@
Если Не Контекст.ВыполненПоискНовойВерсии Тогда
Если Контекст.Кэшировать Тогда
ПодключаемыйМодуль = ПолучитьОбъектКомпонентыИзКэша(Контекст.Местоположение);
Если ПодключаемыйМодуль <> Неопределено Тогда
Результат = РезультатПодключенияКомпоненты();
Результат.Подключено = Истина;
Результат.ПодключаемыйМодуль = ПодключаемыйМодуль;
Возврат Результат;
КонецЕсли;
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
Если СимволическоеИмя <> Неопределено Тогда
// Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась.
Подключено = Истина;
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
Возврат Ждать ПодключитьКомпонентуПослеПопыткиПодключенияАсинх(Подключено, Контекст);
ПодключаемыйМодуль = ПолучитьОбъектКомпонентыИзКэша(Контекст.Местоположение);
ПровереноПодключение = Неопределено;
Если ПодключаемыйМодуль <> Неопределено Тогда
ПровереноПодключение = ПроверитьПодключениеВнешнейКомпоненты(Контекст.Местоположение,
Контекст.Идентификатор);
Если ПровереноПодключение Тогда
Результат = РезультатПодключенияКомпоненты();
Результат.Подключено = Истина;
Результат.ПодключаемыйМодуль = ПодключаемыйМодуль;
Возврат Результат;
КонецЕсли;
КонецЕсли;
Если ПровереноПодключение <> Ложь Тогда
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
Если СимволическоеИмя <> Неопределено Тогда
// Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась.
Если ПровереноПодключение = Неопределено Тогда
ПровереноПодключение = ПроверитьПодключениеВнешнейКомпоненты(Контекст.Местоположение,
Контекст.Идентификатор);
КонецЕсли;
Если ПровереноПодключение Тогда
Подключено = Истина;
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
Возврат Ждать ПодключитьКомпонентуПослеПопыткиПодключенияАсинх(Подключено, Контекст);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ПровереноПодключение = Ложь Тогда
ОчиститьОбъектКомпонентыВКэше(Контекст.Местоположение);
КонецЕсли;
КонецЕсли;
// Поиск более свежей версии компоненты в макетах и справочнике.
Если ЭтоМакет(Контекст.Местоположение) Тогда
@@ -250,22 +270,41 @@
ПодключаемыйМодуль = ПолучитьОбъектКомпонентыИзКэша(Контекст.Местоположение);
ПровереноПодключение = Неопределено;
Если ПодключаемыйМодуль <> Неопределено Тогда
ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст);
Возврат;
ПровереноПодключение = ПроверитьПодключениеВнешнейКомпоненты(Контекст.Местоположение,
Контекст.Идентификатор);
Если ПровереноПодключение Тогда
ПодключитьКомпонентуОповеститьОПодключении(ПодключаемыйМодуль, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
Если ПровереноПодключение <> Ложь Тогда
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
Если СимволическоеИмя <> Неопределено Тогда
Если ПровереноПодключение = Неопределено Тогда
ПровереноПодключение = ПроверитьПодключениеВнешнейКомпоненты(Контекст.Местоположение,
Контекст.Идентификатор);
КонецЕсли;
Если ПровереноПодключение Тогда
// Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась.
Подключено = Истина;
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Проверка факта подключения внешней компоненты в этом сеансе ранее.
СимволическоеИмя = ПолучитьСимволическоеИмяКомпонентыИзКэша(Контекст.Местоположение);
Если СимволическоеИмя <> Неопределено Тогда
// Если в кэше уже есть символическое имя - значит к этому сеансу ранее компонента уже подключалась.
Подключено = Истина;
Контекст.Вставить("СимволическоеИмя", СимволическоеИмя);
ПодключитьКомпонентуПослеПопыткиПодключения(Подключено, Контекст);
Возврат;
Если ПровереноПодключение = Ложь Тогда
ОчиститьОбъектКомпонентыВКэше(Контекст.Местоположение);
КонецЕсли;
КонецЕсли;
// Поиск более свежей версии компоненты в макетах и справочнике.
@@ -1426,6 +1465,43 @@
КонецПроцедуры
Процедура ОчиститьОбъектКомпонентыВКэше(КлючОбъекта)
КэшированныеОбъекты = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.Объекты"];
Если ТипЗнч(КэшированныеОбъекты) = Тип("ФиксированноеСоответствие")
И КэшированныеОбъекты.Получить(КлючОбъекта) <> Неопределено Тогда
Соответствие = Новый Соответствие;
Для каждого Элемент Из КэшированныеОбъекты Цикл
Если Элемент.Ключ = КлючОбъекта Тогда
Продолжить;
КонецЕсли;
Соответствие.Вставить(Элемент.Ключ, Элемент.Значение);
КонецЦикла;
ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.Объекты",
Новый ФиксированноеСоответствие(Соответствие));
КонецЕсли;
КэшированныеСимволическоеИмена = ПараметрыПриложения["СтандартныеПодсистемы.ВнешниеКомпоненты.СимволическиеИмена"];
Если ТипЗнч(КэшированныеСимволическоеИмена) = Тип("ФиксированноеСоответствие")
И КэшированныеСимволическоеИмена.Получить(КлючОбъекта) <> Неопределено Тогда
Соответствие = Новый Соответствие;
Для каждого Элемент Из КэшированныеСимволическоеИмена Цикл
Если Элемент.Ключ = КлючОбъекта Тогда
Продолжить;
КонецЕсли;
Соответствие.Вставить(Элемент.Ключ, Элемент.Значение);
КонецЦикла;
ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.СимволическиеИмена",
Новый ФиксированноеСоответствие(Соответствие));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ВнешнееСоединение
@@ -133,9 +133,7 @@
Возврат "НеОтправлялось";
КонецЕсли;
Результат = ОтправкаSMSПовтИсп.СтатусДоставки(ИдентификаторСообщения);
Возврат Результат;
Возврат СтатусыДоставки(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторСообщения))[ИдентификаторСообщения];
КонецФункции
@@ -253,6 +251,33 @@
КонецПроцедуры
// Запрашивает статус доставки сообщения у поставщика услуг.
//
// Параметры:
// ИдентификаторыСообщений - Массив из Строка - идентификаторы, присвоенные SMS при отправке;
//
// Возвращаемое значение:
// Соответствие:
// * Ключ - Строка - идентификатор SMS;
// * Значение - Строка - статус доставки сообщения, который вернул поставщик услуг:
// "НеОтправлялось" - сообщение еще не было обработано поставщиком услуг (в очереди);
// "Отправляется" - сообщение стоит в очереди на отправку у провайдера;
// "Отправлено" - сообщение отправлено, ожидается подтверждение о доставке;
// "НеОтправлено" - сообщение не отправлено (недостаточно средств на счете, перегружена сеть оператора);
// "Доставлено" - сообщение доставлено адресату;
// "НеДоставлено" - сообщение не удалось доставить (абонент недоступен, время ожидания подтверждения
// доставки от абонента истекло);
// "Ошибка" - не удалось получить статус у поставщика услуг (статус неизвестен).
//
Функция СтатусыДоставки(Знач ИдентификаторыСообщений) Экспорт
ПроверитьПрава();
СтатусыДоставки = ОтправкаSMSПовтИсп.СтатусыДоставки(СтрСоединить(ИдентификаторыСообщений, ","));
Возврат Новый Соответствие(СтатусыДоставки);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -391,6 +416,7 @@
Результат.Вставить("ПриОпределенииСпособовАвторизации", Ложь);
Результат.Вставить("ПриОпределенииПолейАвторизации", Ложь);
Результат.Вставить("ПриЗаполненииСпискаТекущихДел", Ложь);
Результат.Вставить("СтатусыДоставкиОднимЗапросом", Ложь);
Возврат Результат;
@@ -8,30 +8,47 @@
#Область СлужебныеПроцедурыИФункции
Функция СтатусДоставки(ИдентификаторСообщения) Экспорт
Функция СтатусыДоставки(ИдентификаторыСообщений) Экспорт
ОтправкаSMS.ПроверитьПрава();
СписокИдентификаторов = СтрРазделить(ИдентификаторыСообщений, ",", Ложь);
СтатусыДоставки = Новый Соответствие();
Если ПустаяСтрока(ИдентификаторСообщения) Тогда
Возврат "НеОтправлялось";
Для Каждого ИдентификаторСообщения Из СписокИдентификаторов Цикл
СтатусыДоставки[ИдентификаторСообщения] = "Ошибка";
КонецЦикла;
Если Не ЗначениеЗаполнено(СписокИдентификаторов) Тогда
Возврат Новый ФиксированноеСоответствие(СтатусыДоставки);
КонецЕсли;
Результат = Неопределено;
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Ложь);
МодульОтправкаSMSЧерезПровайдера = ОтправкаSMS.МодульОтправкаSMSЧерезПровайдера(НастройкиОтправкиSMS.Провайдер);
Если МодульОтправкаSMSЧерезПровайдера <> Неопределено Тогда
Результат = МодульОтправкаSMSЧерезПровайдера.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS);
НастройкиПровайдера = ОтправкаSMS.НастройкиПровайдера(НастройкиОтправкиSMS.Провайдер);
Если НастройкиПровайдера.СтатусыДоставкиОднимЗапросом Тогда
СтатусыДоставки = МодульОтправкаSMSЧерезПровайдера.СтатусыДоставки(СписокИдентификаторов, НастройкиОтправкиSMS);
Иначе
Для Каждого ИдентификаторСообщения Из СписокИдентификаторов Цикл
СтатусыДоставки[ИдентификаторСообщения] = МодульОтправкаSMSЧерезПровайдера.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS);
КонецЦикла;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(НастройкиОтправкиSMS.Провайдер) Тогда
ОтправкаSMSПереопределяемый.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS.Провайдер,
НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль, Результат);
Иначе // провайдер не выбран
Результат = "Ошибка";
Для Каждого ИдентификаторСообщения Из СписокИдентификаторов Цикл
Результат = Неопределено;
ОтправкаSMSПереопределяемый.СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS.Провайдер,
НастройкиОтправкиSMS.Логин, НастройкиОтправкиSMS.Пароль, Результат);
СтатусыДоставки[ИдентификаторСообщения] = Результат;
КонецЦикла;
КонецЕсли;
Возврат Результат;
Возврат Новый ФиксированноеСоответствие(СтатусыДоставки);
КонецФункции
@@ -24,57 +24,112 @@
Результат = Новый Структура("ОтправленныеСообщения,ОписаниеОшибки", Новый Массив, "");
// Подготовка строки получателей.
СтрокаПолучателей = МассивПолучателейСтрокой(НомераПолучателей);
ФорматированныеНомераТелефонов = ФорматироватьНомераТелефонов(НомераПолучателей);
Получатели = Новый Массив;
Для Каждого Номер Из НомераПолучателей Цикл
Если ФорматированныеНомераТелефонов[Номер] <> Неопределено Тогда
Получатели.Добавить(ФорматированныеНомераТелефонов[Номер]);
КонецЕсли;
КонецЦикла;
СтрокаПолучателей = СтрСоединить(Получатели, ",");
// Проверка на заполнение обязательных параметров.
Если ПустаяСтрока(СтрокаПолучателей) Или ПустаяСтрока(Текст) Тогда
Результат.ОписаниеОшибки = НСтр("ru = 'Неверные параметры сообщения'");
Возврат Результат;
КонецЕсли;
// Подготовка параметров запроса.
УстановитьПривилегированныйРежим(Истина);
НастройкиОтправкиSMS = ОтправкаSMS.НастройкиОтправкиSMS();
УстановитьПривилегированныйРежим(Истина);
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоИдентификатору" Тогда
ПараметрыЗапроса.Вставить("api_id", Пароль);
Иначе
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
КонецЕсли;
ПараметрыЗапроса.Вставить("text", Текст);
ПараметрыЗапроса.Вставить("to", СтрокаПолучателей);
ПараметрыЗапроса.Вставить("from", ИмяОтправителя);
ПараметрыЗапроса.Вставить("json", 1);
// отправка запроса
ТекстОтвета = ВыполнитьЗапрос("sms/send", ПараметрыЗапроса);
Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда
Результат.ОписаниеОшибки = Результат.ОписаниеОшибки + НСтр("ru = 'Соединение не установлено'");
Возврат Результат;
КонецЕсли;
ИдентификаторыСообщений = СтрРазделить(ТекстОтвета, Символы.ПС);
РезультатЗапроса = ОбщегоНазначения.JSONВЗначение(ТекстОтвета);
ОтветСервера = ИдентификаторыСообщений[0];
ИдентификаторыСообщений.Удалить(0);
ЗапросПринят = РезультатЗапроса["status"] = "OK";
ТекстСостояния = РезультатЗапроса["status_text"];
КодСостояния = РезультатЗапроса["status_code"];
Если ОтветСервера = "100" Тогда
НомераПолучателей = СтрРазделить(СтрокаПолучателей, ",", Ложь);
Если ИдентификаторыСообщений.Количество() < НомераПолучателей.Количество() Тогда
Результат.ОписаниеОшибки = НСтр("ru = 'Ответ сервера не распознан'");
Возврат Результат;
КонецЕсли;
Для Индекс = 0 По НомераПолучателей.ВГраница() Цикл
НомерПолучателя = НомераПолучателей[Индекс];
ИдентификаторСообщения = ИдентификаторыСообщений[Индекс];
Если Не ПустаяСтрока(НомерПолучателя) Тогда
ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения",
НомерПолучателя,ИдентификаторСообщения);
Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение);
КонецЕсли;
КонецЦикла;
Иначе
Результат.ОписаниеОшибки = ОписаниеОшибкиОтправки(ОтветСервера);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки);
Если ЗапросПринят И ЗначениеЗаполнено(РезультатЗапроса["sms"]["empty_phone"]) Тогда
ЗапросПринят = Ложь;
ТекстСостояния = РезультатЗапроса["sms"]["empty_phone"]["real_status_text"];
КодСостояния = РезультатЗапроса["sms"]["empty_phone"]["real_status"];
КонецЕсли;
Если Не ЗапросПринят Тогда
Если ЗначениеЗаполнено(ТекстСостояния) Тогда
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (код состояния: %2)'"), ТекстСостояния, КодСостояния);
Иначе
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код состояния: %1'"), КодСостояния);
КонецЕсли;
Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отправка SMS не выполнена по причине:
|%1'"), Причина);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ОписаниеОшибки);
Возврат Результат;
КонецЕсли;
ТекстыОшибок = Новый Массив;
Для Каждого НомерПолучателя Из НомераПолучателей Цикл
ИдентификаторСообщения = "";
СтатусОтправкиПолучателю = РезультатЗапроса["sms"][ФорматированныеНомераТелефонов[НомерПолучателя]];
Если СтатусОтправкиПолучателю <> Неопределено Тогда
ИдентификаторСообщения = СтатусОтправкиПолучателю["sms_id"];
Если СтатусОтправкиПолучателю["status_text"] = "ERROR" Тогда
ТекстСостояния = СтатусОтправкиПолучателю["status_text"];
КодСостояния = СтатусОтправкиПолучателю["status_code"];
ТекстыОшибок.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1: %2 (код состояния: %3)'"),
НомерПолучателя,
ТекстСостояния,
КодСостояния));
Продолжить;
КонецЕсли;
КонецЕсли;
Если Не ПустаяСтрока(НомерПолучателя) И ЗначениеЗаполнено(ИдентификаторСообщения) Тогда
ОтправленноеСообщение = Новый Структура("НомерПолучателя,ИдентификаторСообщения",
НомерПолучателя,ИдентификаторСообщения);
Результат.ОтправленныеСообщения.Добавить(ОтправленноеСообщение);
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ТекстыОшибок) Тогда
Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отправка SMS не выполнена следующим получателям:
|%1'"), СтрСоединить(ТекстыОшибок, Символы.ПС));
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -90,35 +145,13 @@
//
Функция СтатусДоставки(ИдентификаторСообщения, НастройкиОтправкиSMS) Экспорт
Логин = НастройкиОтправкиSMS.Логин;
Пароль = НастройкиОтправкиSMS.Пароль;
// Подготовка параметров запроса.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
ПараметрыЗапроса.Вставить("id", ИдентификаторСообщения);
// отправка запроса
КодСостояния = ВыполнитьЗапрос("sms/status", ПараметрыЗапроса);
Если Не ЗначениеЗаполнено(КодСостояния) Тогда
Возврат "Ошибка";
КонецЕсли;
Результат = СтатусДоставкиSMS(КодСостояния);
Если Результат = "Ошибка" Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не удалось получить статус доставки SMS (id: ""%3""):
|%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(КодСостояния), КодСостояния, ИдентификаторСообщения);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
КонецЕсли;
Возврат Результат;
ИдентификаторыСообщений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИдентификаторСообщения);
Возврат СтатусыДоставки(ИдентификаторыСообщений, НастройкиОтправкиSMS)[ИдентификаторСообщения];
КонецФункции
Функция СтатусДоставкиSMS(КодСостояния)
СоответствиеСтатусов = Новый Соответствие;
СоответствиеСтатусов.Вставить("-1", "НеОтправлялось");
СоответствиеСтатусов.Вставить("100", "НеОтправлялось");
@@ -130,9 +163,11 @@
СоответствиеСтатусов.Вставить("106", "НеДоставлено");
СоответствиеСтатусов.Вставить("107", "НеДоставлено");
СоответствиеСтатусов.Вставить("108", "НеДоставлено");
СоответствиеСтатусов.Вставить("150", "НеДоставлено");
Результат = СоответствиеСтатусов[НРег(КодСостояния)];
Возврат ?(Результат = Неопределено, "Ошибка", Результат);
КонецФункции
Функция ОписанияОшибок()
@@ -159,16 +194,6 @@
Возврат ОписанияОшибок;
КонецФункции
Функция ОписаниеОшибкиОтправки(КодОшибки)
ОписанияОшибок = ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
Если ТекстСообщения = Неопределено Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сообщение не отправлено (код ошибки: %1).'"), КодОшибки);
КонецЕсли;
Возврат ТекстСообщения;
КонецФункции
Функция ОписаниеОшибкиПолученияСтатуса(КодОшибки)
ОписанияОшибок =ОписанияОшибок();
ТекстСообщения = ОписанияОшибок[КодОшибки];
@@ -209,33 +234,28 @@
КонецФункции
Функция МассивПолучателейСтрокой(Массив)
Получатели = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Получатели, Массив, Истина);
Функция ФорматироватьНомер(Знач Номер)
ДопустимыеСимволы = "1234567890";
ЛишниеСимволы = СтрСоединить(СтрРазделить(Номер, ДопустимыеСимволы, Ложь), "");
Возврат СтрСоединить(СтрРазделить(Номер, ЛишниеСимволы, Ложь), "");
Результат = "";
Для Каждого Получатель Из Получатели Цикл
Номер = ФорматироватьНомер(Получатель);
Если НЕ ПустаяСтрока(Номер) Тогда
Если Не ПустаяСтрока(Результат) Тогда
Результат = Результат + ",";
КонецЕсли;
Результат = Результат + Номер;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ФорматироватьНомер(Номер)
Результат = "";
ДопустимыеСимволы = "+1234567890";
Для Позиция = 1 По СтрДлина(Номер) Цикл
Символ = Сред(Номер,Позиция,1);
Если СтрНайти(ДопустимыеСимволы, Символ) > 0 Тогда
Результат = Результат + Символ;
Функция ФорматироватьНомераТелефонов(Знач НомераТелефонов)
Результат = Новый Соответствие;
Для Каждого НомерТелефона Из НомераТелефонов Цикл
ФорматированныйНомер = ФорматироватьНомер(НомерТелефона);
Если ЗначениеЗаполнено(ФорматированныйНомер) Тогда
Результат.Вставить(НомерТелефона, ФорматированныйНомер);
КонецЕсли;
КонецЦикла;
Возврат Результат;
Возврат Результат;
КонецФункции
// Возвращает список разрешений для отправки SMS с использованием всех доступных провайдеров.
@@ -262,8 +282,111 @@
Процедура ПриОпределенииНастроек(Настройки) Экспорт
Настройки.АдресОписанияУслугиВИнтернете = "https://sms.ru";
Настройки.ПриОпределенииСпособовАвторизации = Истина;
Настройки.ПриОпределенииПолейАвторизации = Истина;
Настройки.СтатусыДоставкиОднимЗапросом = Истина;
КонецПроцедуры
Процедура ПриОпределенииСпособовАвторизации(СпособыАвторизации) Экспорт
СпособыАвторизации.Очистить();
СпособыАвторизации.Добавить("ПоИдентификатору", НСтр("ru = 'По ключу (рекомендуется)'"));
СпособыАвторизации.Добавить("ПоЛогинуИПаролю", НСтр("ru = 'По логину и паролю'"));
КонецПроцедуры
Процедура ПриОпределенииПолейАвторизации(СпособыАвторизации) Экспорт
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'api_id'"));
СпособыАвторизации.Вставить("ПоИдентификатору", ПоляАвторизации);
ПоляАвторизации = Новый СписокЗначений;
ПоляАвторизации.Добавить("Логин", НСтр("ru = 'Логин'"));
ПоляАвторизации.Добавить("Пароль", НСтр("ru = 'Пароль'"));
СпособыАвторизации.Вставить("ПоЛогинуИПаролю", ПоляАвторизации);
КонецПроцедуры
// Запрашивает статус доставки сообщения у поставщика услуг.
//
// Параметры:
// ИдентификаторыСообщений - см. ОтправкаSMS.СтатусыДоставки.ИдентификаторыСообщений
// НастройкиОтправкиSMS - см. ОтправкаSMS.НастройкиОтправкиSMS
//
// Возвращаемое значение:
// См. ОтправкаSMS.СтатусыДоставки
//
Функция СтатусыДоставки(ИдентификаторыСообщений, НастройкиОтправкиSMS) Экспорт
СтатусыДоставки = Новый Соответствие;
Для Каждого ИдентификаторСообщения Из ИдентификаторыСообщений Цикл
СтатусыДоставки[ИдентификаторСообщения] = "Ошибка";
КонецЦикла;
Логин = НастройкиОтправкиSMS.Логин;
Пароль = НастройкиОтправкиSMS.Пароль;
ПараметрыЗапроса = Новый Структура;
Если НастройкиОтправкиSMS.Свойство("СпособАвторизации") И НастройкиОтправкиSMS.СпособАвторизации = "ПоИдентификатору" Тогда
ПараметрыЗапроса.Вставить("api_id", Пароль);
Иначе
ПараметрыЗапроса.Вставить("login", Логин);
ПараметрыЗапроса.Вставить("password", Пароль);
КонецЕсли;
ПараметрыЗапроса.Вставить("id", СтрСоединить(ИдентификаторыСообщений, ","));
ПараметрыЗапроса.Вставить("json", 1);
ТекстОтвета = ВыполнитьЗапрос("sms/status", ПараметрыЗапроса);
Если Не ЗначениеЗаполнено(ТекстОтвета) Тогда
Возврат СтатусыДоставки;
КонецЕсли;
РезультатЗапроса = ОбщегоНазначения.JSONВЗначение(ТекстОтвета);
Если РезультатЗапроса["status"] <> "OK" Тогда
ТекстСостояния = РезультатЗапроса["status_text"];
КодСостояния = РезультатЗапроса["status_code"];
Если ЗначениеЗаполнено(ТекстСостояния) Тогда
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (код состояния: %2)'"), ТекстСостояния, КодСостояния);
Иначе
Причина = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код состояния: %1'"), КодСостояния);
КонецЕсли;
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось проверить статус доставки SMS по причине:
|%1'"), Причина);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
Возврат СтатусыДоставки;
КонецЕсли;
Для Каждого ИдентификаторСообщения Из ИдентификаторыСообщений Цикл
КодСостояния = РезультатЗапроса["sms"][ИдентификаторСообщения]["status_code"];
СтатусДоставки = СтатусДоставкиSMS(КодСостояния);
СтатусыДоставки[ИдентификаторСообщения] = СтатусДоставкиSMS(КодСостояния);
Если СтатусДоставки = "Ошибка" Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не удалось получить статус доставки SMS (id: ""%3""):
|%1 (код ошибки: %2)'"), ОписаниеОшибкиПолученияСтатуса(РезультатЗапроса), КодСостояния, ИдентификаторСообщения);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Отправка SMS'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки);
КонецЕсли;
КонецЦикла;
Возврат СтатусыДоставки;
КонецФункции
#КонецОбласти
@@ -428,7 +428,8 @@
КонецЕсли;
КонецЦикла;
Источник.ТипСсылкиДанных = Новый ОписаниеТипов(МассивТипов);
ИначеЕсли Не Метаданные.Обработки.Содержит(ОбъектМетаданных) И Не Метаданные.Отчеты.Содержит(ОбъектМетаданных) Тогда
ИначеЕсли Не Метаданные.Обработки.Содержит(ОбъектМетаданных) И Не Метаданные.Отчеты.Содержит(ОбъектМетаданных)
И Не Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда
Источник.ТипСсылкиДанных = Тип(Источник.Вид + "Ссылка." + ОбъектМетаданных.Имя);
КонецЕсли;
@@ -101,7 +101,7 @@
|""%2"".
|
|Обратитесь к администратору.'"),
"ТекущийПользователь");
"ТекущийПользователь", "%1");
Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале(ИнформацияОбОшибке,
ШаблонОшибки, РегистрироватьВЖурнале);
КонецПопытки;
@@ -9410,7 +9410,7 @@
ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь);
Если ЭтоАдминистраторСистемы И Не РешениеПринято Тогда
Возврат "ПослеОбновления";
Возврат ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПослеОбновления;
КонецЕсли;
Если РешениеПринято Тогда
@@ -9421,7 +9421,7 @@
"ПредупреждениеБезопасности", "ПользовательОзнакомлен", Ложь);
Если Не ПользовательОзнакомлен Тогда
Возврат "ПослеПоявленияПрава";
Возврат ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПослеПоявленияПрава;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -1312,29 +1312,34 @@
//
Процедура ОбновитьИдентификаторыПользователейИБ(Знач СоответствиеИдентификаторов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка КАК Ссылка,
| Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ,
| Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяСервиса
|ИЗ
| Справочник.Пользователи КАК Пользователи";
ПустойИдентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Справочник.Пользователи");
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Справочник.Пользователи");
Блокировка.Заблокировать();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка КАК Ссылка,
| Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификатор";
Запрос.УстановитьПараметр("ПустойИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НовыйИдентификаторПользователяИБ = СоответствиеИдентификаторов[Выборка.ИдентификаторПользователяИБ];
СоответствиеИдентификаторов.Удалить(Выборка.ИдентификаторПользователяИБ);
Если Выборка.ИдентификаторПользователяИБ = ПустойИдентификатор
И Выборка.ИдентификаторПользователяСервиса = ПустойИдентификатор
И Не ЗначениеЗаполнено(НовыйИдентификаторПользователяИБ) Тогда
Продолжить;
КонецЕсли;
ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект();
ПользовательОбъект.ИдентификаторПользователяСервиса = Неопределено;
ПользовательОбъект.ИдентификаторПользователяИБ
= СоответствиеИдентификаторов[Выборка.ИдентификаторПользователяИБ];
ПользовательОбъект.ИдентификаторПользователяИБ = НовыйИдентификаторПользователяИБ;
Если ПользовательОбъект.Служебный Тогда
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
ПользовательОбъект.ИдентификаторПользователяИБ);
@@ -93,16 +93,47 @@
КонецПроцедуры
// Открывает окно предупреждения безопасности указанного вида.
//
// Параметры:
// Оповещение - ОписаниеОповещения - оповещение о закрытии формы, в результат передается Неопределено
// или Строка, которая соответствует имени нажатой кнопки в зависимости от вида предупреждения.
// - Неопределено - оповещение не требуется.
//
// ВидПредупреждения - см. ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности
//
// ДополнительныйПараметр - Произвольный - параметр, соответствующий виду предупреждения.
//
Процедура ПоказатьПредупреждениеБезопасности(Оповещение, ВидПредупреждения, ДополнительныйПараметр = Неопределено) Экспорт
Если Не ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().Свойство(ВидПредупреждения) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверное значение параметра %1 в процедуре %2:
|""%3"".'"),
"ВидПредупреждения",
"ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности",
ВидПредупреждения);
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", ВидПредупреждения);
ПараметрыФормы.Вставить("ДополнительныйПараметр", ДополнительныйПараметр);
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение);
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// Обработчики ожидания.
// Открывает окно предупреждения безопасности.
Процедура ПоказатьПредупреждениеБезопасности() Экспорт
// Открывает окно предупреждения безопасности после запуска, если нужно.
Процедура ПоказатьПредупреждениеБезопасностиПослеЗапускаЕслиНужно() Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске();
Ключ = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыРаботыКлиента, "КлючПредупрежденияБезопасности");
Если ЗначениеЗаполнено(Ключ) Тогда
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", Новый Структура("Ключ", Ключ));
ПоказатьПредупреждениеБезопасности(Неопределено, Ключ);
КонецЕсли;
КонецПроцедуры
@@ -32,6 +32,47 @@
КонецФункции
// Возвращает структуру имен видов предупреждений безопасности.
// Каждое свойство содержит имя ключа структуры.
//
// Возвращаемое значение:
// Структура:
// * ПослеОбновления - Строка
// * ПередДобавлениемДополнительногоОтчетаИлиОбработки - Строка
// * ПередДобавлениемРасширений - Строка
// * ПередВыборомФайлаОбновления - Строка
// * ПередВыборомРоли - Строка
// * ПриИзмененииСпискаЗапрещенныхРасширений - Строка
// * ПередОткрытиемФайла - Строка
// * ПередДобавлениемВнешнейКомпоненты - Строка
// * ПередУдалениемРасширенияБезДанных - Строка
// * ПередУдалениемРасширенияСДанными - Строка
// * ПередОтключениемРасширенияСДанными - Строка
//
Функция ВидыПредупрежденийБезопасности() Экспорт
Результат = Новый Структура;
Результат.Вставить("ПослеОбновления");
Результат.Вставить("ПослеПоявленияПрава");
Результат.Вставить("ПередДобавлениемДополнительногоОтчетаИлиОбработки");
Результат.Вставить("ПередДобавлениемРасширений");
Результат.Вставить("ПередВыборомФайлаОбновления");
Результат.Вставить("ПередВыборомРоли");
Результат.Вставить("ПриИзмененииСпискаЗапрещенныхРасширений");
Результат.Вставить("ПередОткрытиемФайла");
Результат.Вставить("ПередДобавлениемВнешнейКомпоненты");
Результат.Вставить("ПередУдалениемРасширенияБезДанных");
Результат.Вставить("ПередУдалениемРасширенияСДанными");
Результат.Вставить("ПередОтключениемРасширенияСДанными");
Для Каждого КлючИЗначение Из Результат Цикл
Результат[КлючИЗначение.Ключ] = КлючИЗначение.Ключ;
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -82,7 +82,9 @@
//
// * УдалятьФайлыПослеОтправки - Булево - удалять временные файлы после отправки сообщения.
// * Предмет - ЛюбаяСсылка - предмет письма.
// * ИнтерактивныйВыборПолучателей - Булево - по умолчанию Ложь.
// * ИнтерактивныйВыборПолучателей - Булево - если указать Истина, то при подготовке нового письма всегда
// запрашивать выбор контактов. В противном случае в исходящее письмо автоматически подбираются все
// подходящие контакты из документа, что может быть неудобно, когда контактов очень много.
//
Функция ПараметрыОтправкиПисьма() Экспорт
ПараметрыПисьма = Новый Структура;
@@ -219,8 +221,9 @@
ПараметрыФормы.Вставить("Получатели", ПараметрыОтправки.Получатель);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать")
И ПараметрыОтправки.ИнтерактивныйВыборПолучателей И ЗначениеЗаполнено(ПараметрыОтправки.Получатель)
И ПараметрыОтправки.Получатель.Количество() > 1 Тогда
И ПараметрыОтправки.ИнтерактивныйВыборПолучателей
И (ПараметрыОтправки.Свойство("ОтключитьВыборПолучателей") = Ложь Или ПараметрыОтправки.ОтключитьВыборПолучателей = Ложь)
И ЗначениеЗаполнено(ПараметрыОтправки.Получатель) И ПараметрыОтправки.Получатель.Количество() > 1 Тогда
ПараметрыФормы.Вставить("ПропуститьВыборФорматаВложений", Истина);
@@ -243,14 +246,16 @@
Возврат;
КонецЕсли;
ОповещениеОЗакрытииФормы = ПараметрыОтправки.ОповещениеОЗакрытииФормы;
ПараметрыОтправки.Удалить("ОповещениеОЗакрытииФормы");
ПараметрыОтправки.Получатель = Результат.Получатели;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия")
И СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента().СозданиеИсходящихПисемДоступно Тогда
МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент");
МодульВзаимодействияКлиент.ОткрытьФормуОтправкиПисьма(ПараметрыОтправки, ПараметрыОтправки.ОповещениеОЗакрытииФормы);
МодульВзаимодействияКлиент.ОткрытьФормуОтправкиПисьма(ПараметрыОтправки, ОповещениеОЗакрытииФормы);
Иначе
ОткрытьПростуюФормуОтправкиПочтовогоСообщения(ПараметрыОтправки, ПараметрыОтправки.ОповещениеОЗакрытииФормы);
ОткрытьПростуюФормуОтправкиПочтовогоСообщения(ПараметрыОтправки, ОповещениеОЗакрытииФормы);
КонецЕсли;
КонецПроцедуры
@@ -269,13 +274,6 @@
ВыполнитьОбработкуОповещения(ОбработчикРезультата, Ложь);
КонецПроцедуры
Процедура ПроверитьНастройкиУчетнойЗаписи(УчетнаяЗапись, Форма) Экспорт
Параметры = Новый Структура("УчетнаяЗапись", УчетнаяЗапись);
ОткрытьФорму("Справочник.УчетныеЗаписиЭлектроннойПочты.Форма.ПроверкаНастроекУчетнойЗаписи", Параметры, Форма);
КонецПроцедуры
Функция СписокПолучателейИзСтроки(Знач Получатели)
Результат = Новый СписокЗначений;
@@ -694,15 +694,20 @@
ПараметрыЗапроса.Вставить("username", НастройкиПользователя.Логин);
ПараметрыЗапроса.Вставить("resource", НастройкиПользователя.Подключение.ИдентификаторПодписи);
ПараметрыЗапроса.Вставить("grant_type", "password");
СекретСервисногоКлиента = СервисКриптографииDSSСлужебный.ПолучитьЗакрытыеДанные(КлючСервисногоКлиента(НастройкиПользователя),
"СекретСервисногоКлиента", Истина).Значение;
Если НастройкиПользователя.ПервичнаяАутентификация = Перечисления.СпособыАвторизацииDSS.Первичный_СервисныйКлиент Тогда
СекретСервисногоКлиента = СервисКриптографииDSSСлужебный.ПолучитьЗакрытыеДанные(КлючСервисногоКлиента(НастройкиПользователя),
"СекретСервисногоКлиента", Истина).Значение;
ПараметрыЗапроса.Вставить("password", "");
ЗаголовкиЗапроса.Вставить("Authorization",
ПолучитьПредставлениеСекрета(НастройкиПользователя.Подключение.СервисныйКлиент, СекретСервисногоКлиента));
Иначе
ИначеЕсли ПустаяСтрока(СекретСервисногоКлиента) ИЛИ ПустаяСтрока(НастройкиПользователя.Подключение.СервисныйКлиент) Тогда
ПараметрыЗапроса.Вставить("client_id", НастройкиПользователя.Подключение.ИдентификаторКлиента);
ПараметрыЗапроса.Вставить("password", ПолучитьЗначениеПароля(НастройкиПользователя.Пароль, НастройкиПользователя));
Иначе
ПараметрыЗапроса.Вставить("password", ПолучитьЗначениеПароля(НастройкиПользователя.Пароль, НастройкиПользователя));
ЗаголовкиЗапроса.Вставить("Authentication",
ПолучитьПредставлениеСекрета(НастройкиПользователя.Подключение.СервисныйКлиент, СекретСервисногоКлиента));
КонецЕсли;
СвойстваПодключения = СервисКриптографииDSSСлужебный.ПодготовитьСвойстваПодключения(НастройкиПользователя.Подключение, АдресПодключения);
@@ -763,18 +768,27 @@
ВременныйФайл = ПолучитьИмяВременногоФайла("pfx");
СертификатАвторизации.Записать(ВременныйФайл);
СекретСервисногоКлиента = СервисКриптографииDSSСлужебный.ПолучитьЗакрытыеДанные(КлючСервисногоКлиента(НастройкиПользователя),
"СекретСервисногоКлиента", Истина).Значение;
СертификатКлиента = Новый СертификатКлиентаФайл(ВременныйФайл, ПолучитьЗначениеПароля(НастройкиПользователя.ПарольСертификата, НастройкиПользователя));
ЗаголовкиЗапроса = Новый Соответствие;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("client_id", НастройкиПользователя.Подключение.ИдентификаторКлиента);
ПараметрыЗапроса.Вставить("response_type", "code");
ПараметрыЗапроса.Вставить("scope", "dss+offline_access");
ПараметрыЗапроса.Вставить("redirect_uri", НастройкиПользователя.Подключение.Заглушка);
ПараметрыЗапроса.Вставить("resource", НастройкиПользователя.Подключение.ИдентификаторПодписи);
ПараметрыЗапроса.Вставить("promt", "none");
Если ПустаяСтрока(СекретСервисногоКлиента) ИЛИ (НастройкиПользователя.Подключение.СервисныйКлиент) Тогда
ПараметрыЗапроса.Вставить("client_id", НастройкиПользователя.Подключение.ИдентификаторКлиента);
Иначе
ЗаголовкиЗапроса.Вставить("Authentication",
ПолучитьПредставлениеСекрета(НастройкиПользователя.Подключение.СервисныйКлиент, СекретСервисногоКлиента));
КонецЕсли;
СвойстваПодключения = СервисКриптографииDSSСлужебный.ПодготовитьСвойстваПодключения(НастройкиПользователя.Подключение, АдресПодключения);
Соединение = СервисКриптографииDSSСлужебный.ПодготовитьПодключение(СвойстваПодключения, СертификатКлиента, ПараметрыОперации);
РезультатЗапроса = СервисКриптографииDSSСлужебный.ВыполнитьМетодСервиса(Соединение, СвойстваПодключения.АдресПодключения, ПараметрыЗапроса, "GET" , , , ПараметрыОперации);
РезультатЗапроса = СервисКриптографииDSSСлужебный.ВыполнитьМетодСервиса(Соединение, СвойстваПодключения.АдресПодключения, ПараметрыЗапроса, "GET", ЗаголовкиЗапроса, , ПараметрыОперации);
УдалитьФайлы(ВременныйФайл);
@@ -1839,10 +1853,16 @@
//
Функция ВыполнитьЗапросКСервису(НастройкиПользователя, АдресПодключения, ПараметрыЗапроса, HTTPМетод, ТипСодержания, ПараметрыОперации = Неопределено) Экспорт
Заголовки = Новый Соответствие;
СекретПользователя = ПолучитьПредставлениеСекрета(НастройкиПользователя, ПолучитьЗначениеПароля(НастройкиПользователя.Пароль, НастройкиПользователя));
Заголовки = Новый Соответствие;
СекретПользователя = ПолучитьПредставлениеСекрета(НастройкиПользователя, ПолучитьЗначениеПароля(НастройкиПользователя.Пароль, НастройкиПользователя));
СекретСервисногоКлиента = СервисКриптографииDSSСлужебный.ПолучитьЗакрытыеДанные(КлючСервисногоКлиента(НастройкиПользователя),
"СекретСервисногоКлиента", Истина).Значение;
Заголовки.Вставить("Authorization", СекретПользователя);
Если ЗначениеЗаполнено(СекретСервисногоКлиента) И ЗначениеЗаполнено(НастройкиПользователя.Подключение.СервисныйКлиент) Тогда
Заголовки.Вставить("Authentication",
ПолучитьПредставлениеСекрета(НастройкиПользователя.Подключение.СервисныйКлиент, СекретСервисногоКлиента));
КонецЕсли;
СвойстваПодключения = СервисКриптографииDSSСлужебный.ПодготовитьСвойстваПодключения(НастройкиПользователя.Подключение, АдресПодключения);
Соединение = СервисКриптографииDSSСлужебный.ПодготовитьПодключение(СвойстваПодключения, Неопределено, ПараметрыОперации);
РезультатЗапроса = СервисКриптографииDSSСлужебный.ВыполнитьМетодСервиса(Соединение,
@@ -7275,7 +7275,7 @@
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_УчетныеДанные"),
НСтр("ru = 'Логин и пароль'"));
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент"),
НСтр("ru = 'Логин'"));
НСтр("ru = 'Сервисный клиент'"));
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_ДвухФакторная"),
НСтр("ru = 'Логин и пароль с дополнительным подтверждением'"));
Варианты.Вставить(ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СертификатАвторизации"),
@@ -840,7 +840,7 @@
ВызватьФоновоеЗадание = НЕ ВызватьДиалог;
ИначеЕсли ВидАутентификации = ПредопределенноеЗначение("Перечисление.СпособыАвторизацииDSS.Первичный_СервисныйКлиент") Тогда
ВызватьДиалог = ЭтоОшибка;
ВызватьФоновоеЗадание = Ложь;
ВызватьФоновоеЗадание = НЕ ВызватьДиалог;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -39,7 +39,7 @@
// Вызывается после запуска конфигурации, открывает окно предупреждения безопасности.
Процедура ПоказатьПредупреждениеБезопасностиПослеЗапуска() Экспорт
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности();
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасностиПослеЗапускаЕслиНужно();
КонецПроцедуры
// Показывает сообщение пользователю о недостаточном объеме оперативной памяти.
@@ -1258,14 +1258,14 @@
// ПараметрыФормы - см. СтандартныеПодсистемыКлиент.ПараметрыРедактораТабличногоДокумента
//
Процедура ПоказатьРедакторТабличногоДокумента(Знач ТабличныйДокумент, Знач ПараметрыФормы = Неопределено,
Знач ОписаниеОповещенияОЗакрытии = Неопределено) Экспорт
Знач ОписаниеОповещенияОЗакрытии = Неопределено, Владелец = Неопределено) Экспорт
Если ПараметрыФормы = Неопределено Тогда
ПараметрыФормы = ПараметрыРедактораТабличногоДокумента();
КонецЕсли;
ПараметрыФормы.ТабличныйДокумент = ТабличныйДокумент;
ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыФормы);
ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыФормы, Владелец);
КонецПроцедуры
@@ -597,7 +597,7 @@
Функция ОписаниеТипаВсеСсылки() Экспорт
ВсеСсылки = Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(
Возврат Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(
Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(
Справочники.ТипВсеСсылки(),
Документы.ТипВсеСсылки().Типы()),
@@ -609,14 +609,7 @@
БизнесПроцессы.ТипВсеСсылки().Типы()),
БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы()),
Задачи.ТипВсеСсылки().Типы());
Для Каждого ВнешнийИсточник Из Метаданные.ВнешниеИсточникиДанных Цикл
ВсеСсылки = Новый ОписаниеТипов(ВсеСсылки,
ВнешниеИсточникиДанных[ВнешнийИсточник.Имя].Таблицы.ТипВсеСсылки().Типы());
КонецЦикла;
Возврат ВсеСсылки;
КонецФункции
Функция ЭтоСеансДлительнойОперации() Экспорт
@@ -1873,6 +1873,11 @@
НастройкиВнедрения = НастройкиВнедрения();
СвойстваВидовДоступа = СвойстваВидовДоступа();
СлужебныеТипы = Новый Массив;
СлужебныеТипы.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"));
СлужебныеТипы.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений"));
СлужебныеТипы.Добавить(Тип("ПеречислениеСсылка.ДополнительныеЗначенияДоступа"));
// ОпределяемыйТип.ЗначениеДоступа
ТипыГруппИЗначений = Новый Массив;
Для Каждого КлючИЗначение Из СвойстваВидовДоступа.ПоТипамГруппИЗначений Цикл
@@ -1881,6 +1886,7 @@
ТребуемыйТипЗначенияДоступа = Новый ОписаниеТипов(
СтрСоединить(НастройкиВнедрения.ЗначенияДоступа, ","));
ТребуемыйТипЗначенияДоступа = Новый ОписаниеТипов(ТребуемыйТипЗначенияДоступа, ТипыГруппИЗначений);
ТребуемыйТипЗначенияДоступа = Новый ОписаниеТипов(ТребуемыйТипЗначенияДоступа, СлужебныеТипы);
ДобавитьОбъектПланируемыйКУдалению(Объекты, ТребуемыйТипЗначенияДоступа,
Метаданные.РегистрыСведений.ЗначенияГруппДоступа.Измерения.ЗначениеДоступа);
@@ -1928,6 +1934,7 @@
МетаданныеРегистраКлючей = Метаданные.РегистрыСведений[ИмяРегистраКлючей];
КоличествоПолей = УправлениеДоступомСлужебныйПовтИсп.КоличествоОпорныхПолейРегистра(ИмяРегистраКлючей);
ТребуемыйТипПоля = Новый ОписаниеТипов(СтрСоединить(ОписаниеРегистровКлючей.Значение.ИменаТипов, ","));
ТребуемыйТипПоля = Новый ОписаниеТипов(ТребуемыйТипПоля, СлужебныеТипы);
Для НомерПоля = 1 По КоличествоПолей Цикл
ИмяПоля = СтрШаблон("Поле%1", НомерПоля);
ДобавитьОбъектПланируемыйКУдалению(Объекты, ТребуемыйТипПоля,
@@ -1945,7 +1952,8 @@
ПустаяСсылка = МенеджерОбъекта.ПустаяСсылка();
ТипыСсылокОбъектовПодписок.Добавить(ТипЗнч(ПустаяСсылка));
КонецЦикла;
ТребуемыйТипТаблицСЗаписьюНаборовЗначенийДоступа = Новый ОписаниеТипов(ТипыСсылокОбъектовПодписок);
ТребуемыйТипТаблицСЗаписьюНаборовЗначенийДоступа = Новый ОписаниеТипов(
Новый ОписаниеТипов(ТипыСсылокОбъектовПодписок),, СлужебныеТипы);
ДобавитьОбъектПланируемыйКУдалению(Объекты, ТребуемыйТипТаблицСЗаписьюНаборовЗначенийДоступа,
Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект);
@@ -2309,6 +2317,20 @@
КонецПроцедуры
// Параметры:
// * Задание - РегламентноеЗадание
//
Процедура ПередЗапускомРегламентногоЗаданияНеВФоне(Задание) Экспорт
Если Задание.Метаданные <> Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей Тогда
Возврат;
КонецЕсли;
Задание.Параметры.Добавить(Истина);
Задание.Параметры.Добавить(Истина);
КонецПроцедуры
// Обработчики событий подсистемы Пользователи.
// См. ПользователиПереопределяемый.ПриОпределенииНастроек.
@@ -14480,8 +14502,8 @@
Процедура ОбработатьЗаданияСОшибками(Контекст)
Отбор = Новый Структура("БылаОшибка", Истина);
ЗаданияСОшибкам = Контекст.Задания.НайтиСтроки(Отбор);
Если Не ЗначениеЗаполнено(ЗаданияСОшибкам) Тогда
ЗаданияСОшибками = Контекст.Задания.НайтиСтроки(Отбор);
Если Не ЗначениеЗаполнено(ЗаданияСОшибками) Тогда
Возврат;
КонецЕсли;
Контекст.ОбработкаЗавершена = Ложь;
@@ -14491,7 +14513,7 @@
ТекстыОшибок.Добавить(Контекст.ТекстОшибкиЗавершения);
КонецЕсли;
Для Каждого Задание Из ЗаданияСОшибкам Цикл
Для Каждого Задание Из ЗаданияСОшибками Цикл
Контекст.ОбработкаЗавершена = Ложь;
ТекстыОшибок.Добавить(Задание.ТекстОшибки);
КонецЦикла;
@@ -517,6 +517,24 @@
КонецПроцедуры
// Открывает форму ОбновлениеДоступаНаУровнеЗаписей.
//
// Параметры:
// ВыключитьАвтообновлениеПрогресса - Булево
// ПоказатьПрогрессПоОтдельнымСпискам - Булево
//
Процедура ОткрытьФормуОбновлениеДоступаНаУровнеЗаписей(ВыключитьАвтообновлениеПрогресса = Ложь,
ПоказатьПрогрессПоОтдельнымСпискам = Ложь) Экспорт
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВыключитьАвтообновлениеПрогресса", ВыключитьАвтообновлениеПрогресса);
ПараметрыФормы.Вставить("ПоказатьПрогрессПоОтдельнымСпискам", ПоказатьПрогрессПоОтдельнымСпискам);
ОткрытьФорму("РегистрСведений.ОбновлениеКлючейДоступаКДанным.Форма.ОбновлениеДоступаНаУровнеЗаписей",
ПараметрыФормы);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -190,6 +190,11 @@
ПараметрыОткрытия.Вставить("КоллекцияПечатныхФорм", КоллекцияПечатныхФорм);
ПараметрыОткрытия.Вставить("ОбъектыПечати", ОбъектыПечати);
ПараметрыОткрытия.Вставить("ПараметрыПечати", ПараметрыПечати);
ПараметрыОткрытия.Вставить("ИменаМакетов", Новый Массив);
Для Каждого ОписаниеПечатнойФормы Из КоллекцияПечатныхФорм Цикл
ПараметрыОткрытия.ИменаМакетов.Добавить(ОписаниеПечатнойФормы.ИмяМакета);
КонецЦикла;
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, КлючУникальности);
@@ -3206,12 +3206,12 @@
ВыводТекста = Истина;
ВыводКартинки = Ложь;
ЗначениеПараметра = Неопределено;
РазмерыКартинки = Новый Структура("Ширина,Высота",0,0);
Для Каждого ПараметрТекст Из ПараметрыИзТекста Цикл
Если ДанныеОбъекта.Свойство(ПараметрТекст, ЗначениеПараметра) Тогда
Если ТипЗнч(ЗначениеПараметра) = Тип("Структура") Тогда
РазмерыКартинки = Новый Структура("Ширина,Высота",0,0);
ЗаполнитьЗначенияСвойств(РазмерыКартинки, ЗначениеПараметра);
ЗначениеПараметра = СокрЛП(ЗначениеПараметра.АдресКартинки);
Иначе
@@ -23,10 +23,9 @@
ДополнительныеПараметры.Вставить("ДляРедактирования", ДляРедактирования);
Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", "ПередОткрытиемФайла");
ПараметрыФормы.Вставить("ИмяФайла", ДанныеФайла.ИмяФайла);
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОткрытиемФайла,
ДанныеФайла.ИмяФайла);
Возврат;
КонецЕсли;
@@ -1415,7 +1415,7 @@
СвойстваСертификата);
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Не действует сертификат полученной метки времени: %1
НСтр("ru='Не прошел проверку сертификат полученной метки времени: %1
|%2'"), ОписаниеОшибки, СведенияОСертификате);
ВызватьИсключение ОписаниеОшибки;
@@ -1714,6 +1714,15 @@
// или произошла ошибка указанная в параметре ОписаниеОшибки.
//
Функция ПроверитьПодпись(МенеджерКриптографии, ИсходныеДанные, Подпись, ОписаниеОшибки = Null, НаДату = Неопределено, РезультатСтруктура = Неопределено) Экспорт
Если РезультатСтруктура <> Неопределено Тогда
ОжидаемыеЗначения = Новый Массив;
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодпись.ПроверитьПодпись",
"РезультатСтруктура.ПараметрыПроверкиСертификата", РезультатСтруктура.ПараметрыПроверкиСертификата, Тип("Строка"),, ОжидаемыеЗначения);
КонецЕсли;
РезультатПроверки = Ложь;
НеверныйХеш = Неопределено;
@@ -1967,16 +1976,29 @@
ОписаниеОшибки = Null;
КонецЕсли;
ДополнительныеПараметры = ЭлектроннаяПодписьСлужебный.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметры.ДляПроверкиПодписи = Истина;
Если РезультатСтруктура = Неопределено
Или РезультатСтруктура.ПараметрыПроверкиСертификата <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ДополнительныеПараметры = ЭлектроннаяПодписьСлужебный.ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметры.ДляПроверкиПодписи = Истина;
Если РезультатСтруктура = Неопределено Тогда
ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные();
Иначе
ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра = РезультатСтруктура.ПараметрыПроверкиСертификата;
КонецЕсли;
РезультатПроверкиСертификата = ЭлектроннаяПодписьСлужебный.ПроверитьСертификат(
МенеджерКриптографииДляПроверки, Сертификат, ОписаниеОшибки, ДатаДляПроверкиСертификатаПодписи, ДополнительныеПараметры);
Если РезультатПроверкиСертификата = Истина Тогда
ЗаполнитьРезультатПроверкиПодписи(Истина, РезультатСтруктура);
Иначе
ЗаполнитьРезультатПроверкиПодписи(ОписаниеОшибки, РезультатСтруктура, Неопределено, Ложь);
КонецЕсли;
РезультатПроверкиСертификата = ЭлектроннаяПодписьСлужебный.ПроверитьСертификат(
МенеджерКриптографииДляПроверки, Сертификат, ОписаниеОшибки, ДатаДляПроверкиСертификатаПодписи, ДополнительныеПараметры);
Если РезультатПроверкиСертификата = Истина Тогда
ЗаполнитьРезультатПроверкиПодписи(Истина, РезультатСтруктура);
Иначе
ЗаполнитьРезультатПроверкиПодписи(ОписаниеОшибки, РезультатСтруктура, Неопределено, Ложь);
РезультатПроверкиСертификата = Истина;
ЗаполнитьРезультатПроверкиПодписи(Истина, РезультатСтруктура);
КонецЕсли;
Возврат РезультатПроверкиСертификата;
@@ -2000,14 +2022,15 @@
// НаДату - Дата - проверить сертификат на указанную дату.
// Если параметр не указан или указана пустая дата,
// тогда проверять на текущую дату сеанса.
// ПараметрыПроверки - см. ЭлектроннаяПодписьКлиент.ПараметрыПроверкиСертификата
//
// Возвращаемое значение:
// Булево - Истина, если проверка выполнена успешно,
// Ложь, если не удалось получить менеджер криптографии (когда не указан).
//
Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null, НаДату = Неопределено) Экспорт
Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null, НаДату = Неопределено, ПараметрыПроверки = Неопределено) Экспорт
Возврат ЭлектроннаяПодписьСлужебный.ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки, НаДату);
Возврат ЭлектроннаяПодписьСлужебный.ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки, НаДату, ПараметрыПроверки);
КонецФункции
@@ -2242,8 +2265,14 @@
// Параметры:
// Сертификат - СертификатКриптографии
// НаДату - Неопределено, Дата - если не указана, то проверка выполняется на дату сеанса.
// ЭтоПроверкаПодписи - Булево - это проверка подписи, предупреждение (не ошибка) не будет заполнено.
//
// ПараметрыПроверки - Структура:
// * ЭтоПроверкаПодписи - Булево - это проверка подписи, предупреждение (не ошибка) не будет заполнено.
// * ПроверятьСертификат - Строка -
// "ПроверятьКвалифицированные" - (по умолчанию) разрешать подписывать НЭП и проверять КЭП на действительность
// с учетом списка разрешенных неаккредитованных УЦ.
// "ТолькоКвалифицированные" - разрешать подписывать только КЭП и не учитывать список разрешенных
// неаккредитованных УЦ.
//
// Возвращаемое значение:
// Структура - результат проверки удостоверяющего центра по умолчанию:
// * Действует - Булево - аккредитованный УЦ действует на дату проверки или проверка не выполнялась (сертификат
@@ -2259,9 +2288,9 @@
// ** Причина - Строка - причина ошибки для отображения в расширенной форме ошибки.
// ** Решение - Строка - рекомендация для отображения в расширенной форме ошибки.
//
Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(Сертификат, НаДату = Неопределено, ЭтоПроверкаПодписи = Ложь) Экспорт
Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(Сертификат, НаДату = Неопределено, ПараметрыПроверки = Неопределено) Экспорт
Возврат ЭлектроннаяПодписьСлужебный.РезультатПроверкиУдостоверяющегоЦентраСертификата(Сертификат, НаДату, ЭтоПроверкаПодписи);
Возврат ЭлектроннаяПодписьСлужебный.РезультатПроверкиУдостоверяющегоЦентраСертификата(Сертификат, НаДату, ПараметрыПроверки);
КонецФункции
@@ -254,6 +254,12 @@
// * Видимость - Булево - видимость типа подписи на форме подписания.
// * Доступность - Булево - доступность типа подписи на форме подписания.
// * ВыборДоверенности - Булево - показывать поле выбора доверенности.
// * ПроверятьСертификат - Строка - режим проверки квалифицированности ЭП:
// "ПроверятьКвалифицированные" - (по умолчанию) разрешать подписывать НЭП и проверять КЭП на действительность
// с учетом списка разрешенных неаккредитованных УЦ.
// "ТолькоКвалифицированные" - разрешать подписывать только КЭП и не учитывать список разрешенных
// неаккредитованных УЦ.
// "НеПроверятьСертификат" - не выполнять проверку сертификата.
//
Функция НовыйТипПодписи(ТипПодписи = Неопределено) Экспорт
@@ -262,6 +268,7 @@
Структура.Вставить("Видимость", Ложь);
Структура.Вставить("Доступность", Ложь);
Структура.Вставить("ВыборДоверенности", Ложь);
Структура.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Если ЗначениеЗаполнено(ТипПодписи) Тогда
Структура.ТипыПодписи.Добавить(ТипПодписи);
@@ -491,12 +498,21 @@
// создания менеджера криптографии (когда не указан).
// * РезультатВВидеСтруктуры - Булево - если Истина, результат будет в виде
// см. ЭлектроннаяПодписьКлиентСервер.РезультатПроверкиПодписи
// * ПроверятьСертификат - Строка - режим проверки квалифицированности ЭП, применяется, если РезультатВВидеСтруктуры =
// Истина иначе проверка работает в режиме "ПроверятьКвалифицированные".
// "ПроверятьКвалифицированные" - (по умолчанию) разрешать подписывать НЭП и проверять КЭП на действительность
// с учетом списка разрешенных неаккредитованных УЦ.
// "ТолькоКвалифицированные" - разрешать подписывать только КЭП и не учитывать список разрешенных
// неаккредитованных УЦ.
// "НеПроверятьСертификат" - не выполнять проверку сертификата подписи.
//
Функция ПараметрыПроверкиПодписи() Экспорт
Структура = Новый Структура;
Структура.Вставить("ПоказатьОшибкуСозданияМенеджераКриптографии", Истина);
Структура.Вставить("РезультатВВидеСтруктуры", Ложь);
Структура.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Возврат Структура;
КонецФункции
@@ -945,13 +961,35 @@
// НаДату - Дата - проверить сертификат на указанную дату.
// Если параметр не указан или указана пустая дата,
// тогда проверять на текущую дату сеанса.
// ПараметрыПроверки - см. ПараметрыПроверкиСертификата.
//
Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт
Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено, ПараметрыПроверки = Неопределено) Экспорт
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии, НаДату);
ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии, НаДату, ПараметрыПроверки);
КонецПроцедуры
// Дополнительные параметры проверки сертификата.
//
// Возвращаемое значение:
// Структура - дополнительные параметры проверки сертификата:
// * ВыполнятьПроверкуУдостоверяющегоЦентра - Строка - режим проверки квалифицированности ЭП:
// "ПроверятьКвалифицированные" - (по умолчанию) разрешать подписывать НЭП и проверять КЭП на действительность
// с учетом списка разрешенных неаккредитованных УЦ.
// "ТолькоКвалифицированные" - разрешать подписывать только КЭП и не учитывать список разрешенных
// неаккредитованных УЦ.
// "НеПроверятьСертификат" - не выполнять проверку удостоверяющего центра сертификата.
// * ИгнорироватьПроверкуВСпискеОтозванныхСертификатов - Булево - не проверять сертификат в списке отзыва.
//
Функция ПараметрыПроверкиСертификата() Экспорт
Структура = Новый Структура;
Структура.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь);
Структура.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Возврат Структура;
КонецФункции
// Открывает форму ПроверкаСертификата и возвращает результат проверки.
//
// Параметры:
@@ -983,6 +1021,8 @@
// пользователю.
// * ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии - по умолчанию тип, указанный в настройках,
// если передан КонтекстОперации, возвращенный процедурой Подписать, то тип берется из него.
// * ВыполнятьПроверкуУдостоверяющегоЦентра - см. ПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра
// * ИгнорироватьПроверкуВСпискеОтозванныхСертификатов - см. ПараметрыПроверкиСертификата.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов
// * Результат - Неопределено - проверка ни разу не выполнялась.
// - Структура - возвращаемое значение. Вставляется перед обработкой результата:
// * ПроверкиПройдены - Булево - возвращаемое значение. Устанавливается в процедуре параметра ОбработкаРезультата.
@@ -125,6 +125,7 @@
// ПроверитьДополнительныеАтрибуты = Ложь
// * ОшибкаПроверкиДополнительныхАтрибутов - Строка - ошибка при проверке сертификата и атрибутов усовершенствованной
// подписи, таких как метка времени.
// * ПараметрыПроверкиСертификата - см. ЭлектроннаяПодписьКлиент.ПараметрыПроверкиПодписи.ПроверятьСертификат
//
// * ТипПодписи - ПеречислениеСсылка.ТипыПодписиКриптографии - не заполнен при проверке подписей конверта XML.
// * СрокДействияПоследнейМеткиВремени - Дата - срок действия сертификата, которым подписана
@@ -149,6 +150,7 @@
Структура.Вставить("ПодписьМатематическиВерна");
Структура.Вставить("ОшибкаМатематическойПроверкиПодписи");
Структура.Вставить("ОшибкаПроверкиДополнительныхАтрибутов");
Структура.Вставить("ПараметрыПроверкиСертификата", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(
Структура, ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписиПриЧтенииИПроверке());
@@ -529,6 +529,7 @@
Структура.Вставить("НаДату");
Структура.Вставить("ЭтоПроверкаПодписи", Ложь);
Структура.Вставить("СвойстваСертификата");
Структура.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Возврат Структура;
@@ -574,17 +575,33 @@
КонецФункции
// Только для внутреннего использования.
//
// Параметры:
// Сертификат - СертификатКриптографии
// КонтекстПроверки - см. КонтекстПроверкиУдостоверяющегоЦентраСертификата
//
// Возвращаемое значение:
// см. ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию
// См. ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию
//
Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(Сертификат, КонтекстПроверки) Экспорт
РезультатПроверкиУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию();
ДанныеУдостоверяющегоЦентра = КонтекстПроверки.ДанныеУдостоверяющегоЦентра;
Если ДанныеУдостоверяющегоЦентра = Неопределено Тогда
Возврат ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию();
Если КонтекстПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Сертификат неквалифицированный, так как выпущен удостоверяющим центром %1, не аккредитованным на момент выпуска сертификата.'"),
КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
РезультатПроверкиУдостоверяющегоЦентра.Действует = Ложь;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки = ТекстОшибки;
Возврат РезультатПроверкиУдостоверяющегоЦентра;
КонецЕсли;
Возврат РезультатПроверкиУдостоверяющегоЦентра;
КонецЕсли;
РезультатПроверкиУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию();
РезультатПроверкиУдостоверяющегоЦентра.НайденВСпискеУдостоверяющихЦентров = Истина;
РезультатПроверкиУдостоверяющегоЦентра.Государственный = ДанныеУдостоверяющегоЦентра.Государственный;
@@ -611,20 +628,26 @@
КонецЦикла;
Если Не ЭтоКвалифицированныйСертификат Тогда
Если КонтекстПроверки.ЭтоПроверкаПодписи Тогда
РезультатПроверкиУдостоверяющегоЦентра.Действует = ДанныеУдостоверяющегоЦентра.РазрешенныйНеаккредитованный;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Сертификат неквалифицированный, так как выпущен удостоверяющим центром %1, не аккредитованным на момент выпуска сертификата.'"),
КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
Если КонтекстПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные() Тогда
РезультатПроверкиУдостоверяющегоЦентра.Действует = Ложь;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки = ТекстОшибки;
Возврат РезультатПроверкиУдостоверяющегоЦентра;
КонецЕсли;
Если КонтекстПроверки.ЭтоПроверкаПодписи Тогда
РезультатПроверкиУдостоверяющегоЦентра.Действует = ДанныеУдостоверяющегоЦентра.РазрешенныйНеаккредитованный;
Если ДанныеУдостоверяющегоЦентра.РазрешенныйНеаккредитованный Тогда
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения = ТекстОшибки;
Иначе
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки = ТекстОшибки;
КонецЕсли;
Иначе
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Неквалифицированный сертификат: выпущен удостоверяющим центром %1, не аккредитованным на момент выпуска сертификата.'"),
КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения = ТекстОшибки;
КонецЕсли;
Возврат РезультатПроверкиУдостоверяющегоЦентра;
КонецЕсли;
@@ -681,9 +704,9 @@
// Аккредитация удостоверяющего центра прекращена.
Если Не РезультатПроверкиУдостоверяющегоЦентра.Действует Тогда
Если СтрНачинаетсяС(КонтекстПроверки.ЗначенияПоиска, "1024001434049")
И ЗначениеЗаполнено(ДатаПрекращенияАккредитацииУЦ)
И ДатаПрекращенияАккредитацииУЦ - КонтекстПроверки.РазницаСУниверсальнымВременем = Дата(2024, 7, 20, 21, 0, 0) Тогда
Если ЗначениеЗаполнено(ДатаПрекращенияАккредитацииУЦ)
И (СтрНачинаетсяС(КонтекстПроверки.ЗначенияПоиска, "1024001434049") И ДатаПрекращенияАккредитацииУЦ - КонтекстПроверки.РазницаСУниверсальнымВременем = Дата(2024, 7, 20, 21, 0, 0)
Или СтрНачинаетсяС(КонтекстПроверки.ЗначенияПоиска, "1197746000000") И ДатаПрекращенияАккредитацииУЦ - КонтекстПроверки.РазницаСУниверсальнымВременем = Дата(2024, 8, 15, 21, 0, 0)) Тогда
РезультатПроверкиУдостоверяющегоЦентра.Действует = Ложь;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.РазрешитьПодписание = Ложь;
@@ -815,9 +838,9 @@
ДатаПредупреждения = ДатаОкончанияДействия;
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'С %1 нельзя будет подписывать документы этим сертификатом, так как аккредитация удостоверяющего центра %2, выдавшего сертификат, будет прекращена.'"),
Формат(ДатаОкончанияДействия, "ДЛФ=DT"), КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
Формат(ДатаОкончанияДействия, "ДЛФ=D"), КонтекстПроверки.НаименованиеУдостоверяющегоЦентра);
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ВозможенПеревыпуск = ВозможенПеревыпуск;
@@ -837,9 +860,9 @@
Если СвойстваСертификата.ДействителенДо <= НаДату + КоличествоДнейДляОповещенияОбОкончанииСрокаДействия()*24*60*60
И (ДатаПредупреждения = Неопределено Или СвойстваСертификата.ДействителенДо < ДатаПредупреждения)Тогда
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ДополнительныеСведения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'С %1 нельзя будет подписывать документы этим сертификатом, так как срок действия сертификата закончится.'"),
Формат(СвойстваСертификата.ДействителенДо, "ДЛФ=DT"));
Формат(СвойстваСертификата.ДействителенДо, "ДЛФ=D"));
РезультатПроверкиУдостоверяющегоЦентра.Предупреждение.ВозможенПеревыпуск = ВозможенПеревыпуск;
@@ -26,13 +26,13 @@
// НаДату - Дата - проверить сертификат на указанную дату.
// Если параметр не указан или указана пустая дата,
// тогда проверять на текущую дату сеанса.
// ДополнительныеПараметры -см. ДополнительныеПараметрыПроверкиСертификата
// ДополнительныеПараметрыПроверки - см. ДополнительныеПараметрыПроверкиСертификата
//
// Возвращаемое значение:
// Булево - Истина, если проверка выполнена успешно,
// Ложь, если не удалось получить менеджер криптографии (когда не указан).
//
Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null, НаДату = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
Функция ПроверитьСертификат(МенеджерКриптографии, Сертификат, ОписаниеОшибки = Null, НаДату = Неопределено, ДополнительныеПараметрыПроверки = Неопределено) Экспорт
ВызыватьИсключение = ОписаниеОшибки = Null;
МенеджерКриптографииДляПроверки = МенеджерКриптографии;
@@ -73,8 +73,28 @@
КонецЕсли;
КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыПроверкиСертификата();
Если ДополнительныеПараметрыПроверки <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ДополнительныеПараметры, ДополнительныеПараметрыПроверки);
Если ТипЗнч(ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра) = Тип("Булево") Тогда // Для совместимости
ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра = ?(
ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра,
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные(),
ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
КонецЕсли;
ОжидаемыеЗначения = Новый Массив;
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодписьСлужебный.ПроверитьСертификат",
"ДополнительныеПараметрыПроверки.ВыполнятьПроверкуУдостоверяющегоЦентра", ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра,
Тип("Строка"),, ОжидаемыеЗначения);
КонецЕсли;
РежимыПроверкиСертификата = ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата(
ЗначениеЗаполнено(НаДату));
ЗначениеЗаполнено(НаДату), ДополнительныеПараметры.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов);
Если МенеджерКриптографииДляПроверки = Неопределено
Или МенеджерКриптографииДляПроверки = "СервисКриптографии" Тогда
@@ -127,10 +147,6 @@
Возврат Ложь;
КонецЕсли;
Если ДополнительныеПараметры = Неопределено Тогда
ДополнительныеПараметры = ДополнительныеПараметрыПроверкиСертификата();
КонецЕсли;
СвойстваСертификата = Неопределено;
Если ДополнительныеПараметры.ДляПроверкиПодписи Тогда
@@ -148,12 +164,16 @@
КонецЕсли;
КонецЕсли;
Если ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра Тогда
Если ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПараметрыПроверкиУдостоверяющегоЦентра = Новый Структура;
ПараметрыПроверкиУдостоверяющегоЦентра.Вставить("ЭтоПроверкаПодписи", ДополнительныеПараметры.ДляПроверкиПодписи);
ПараметрыПроверкиУдостоверяющегоЦентра.Вставить("ПроверятьСертификат", ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра);
Результат = РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатДляПроверки, НаДату,
ДополнительныеПараметры.ДляПроверкиПодписи, СвойстваСертификата);
ПараметрыПроверкиУдостоверяющегоЦентра, СвойстваСертификата);
Если Не Результат.Действует Или ДополнительныеПараметры.Свойство("Сертификат") И ЗначениеЗаполнено(Результат.Предупреждение.ТекстОшибки)
Если Не Результат.Действует Или ЗначениеЗаполнено(ДополнительныеПараметры.Сертификат) И ЗначениеЗаполнено(Результат.Предупреждение.ТекстОшибки)
И Не ДополнительныеПараметры.ДляПроверкиПодписи Тогда
ПользовательскиеНастройкиСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ПользовательскиеНастройкиСертификата(
@@ -164,6 +184,7 @@
Если ПользовательскиеНастройкиСертификата.ПодписаниеРазрешено <> Истина Тогда
ОписаниеОшибки = Результат.Предупреждение.ТекстОшибки;
ДополнительныеПараметры.Предупреждение = Результат.Предупреждение;
ДополнительныеПараметры.Сертификат = ПользовательскиеНастройкиСертификата.СсылкаНаСертификат;
Если ВызыватьИсключение Тогда
ВызватьИсключение ОписаниеОшибки;
КонецЕсли;
@@ -172,7 +193,8 @@
КонецЕсли;
Если ДополнительныеПараметры.Свойство("Сертификат") И ЗначениеЗаполнено(Результат.Предупреждение.ТекстОшибки)
Если ЗначениеЗаполнено(ДополнительныеПараметры.Сертификат)
И ЗначениеЗаполнено(Результат.Предупреждение.ТекстОшибки)
И Не ДополнительныеПараметры.ДляПроверкиПодписи Тогда
Если ПользовательскиеНастройкиСертификата.Оповещен
@@ -200,9 +222,11 @@
Функция ДополнительныеПараметрыПроверкиСертификата() Экспорт
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", Истина);
ДополнительныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные());
ДополнительныеПараметры.Вставить("ДляПроверкиПодписи", Ложь);
ДополнительныеПараметры.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь);
ДополнительныеПараметры.Вставить("Предупреждение");
ДополнительныеПараметры.Вставить("Сертификат");
Возврат ДополнительныеПараметры;
@@ -643,12 +667,16 @@
// Параметры:
// СертификатКриптографии
// НаДату - Неопределено, Дата
// ЭтоПроверкаПодписи - Булево - это проверка подписи, предупреждение (не ошибка) не будет показано.
// ПараметрыПроверки - Структура
// * ЭтоПроверкаПодписи - это проверка подписи, предупреждение (не ошибка) не будет показано.
// * ПроверятьСертификат - Строка - "ТолькоКвалифицированные", "ПроверятьКвалифицированные", "НеПроверятьСертификат".
// СвойстваСертификата - см. ЭлектроннаяПодпись.СвойстваСертификата
//
// Возвращаемое значение:
// см. ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию
//
Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатКриптографии, НаДату = Неопределено, ЭтоПроверкаПодписи = Ложь, СвойстваСертификата = Неопределено) Экспорт
Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатКриптографии, НаДату = Неопределено,
Знач ПараметрыПроверки = Неопределено, СвойстваСертификата = Неопределено) Экспорт
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию();
@@ -658,6 +686,17 @@
Возврат Результат;
КонецЕсли;
Если ПараметрыПроверки = Неопределено Или ПараметрыПроверки = Ложь Или ПараметрыПроверки = Истина Тогда // для совместимости
НовыеПараметрыПроверки = Новый Структура;
НовыеПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", ?(ПараметрыПроверки = Неопределено, Ложь, ПараметрыПроверки));
НовыеПараметрыПроверки.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
ПараметрыПроверки = НовыеПараметрыПроверки;
КонецЕсли;
Если ПараметрыПроверки.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
Возврат Результат;
КонецЕсли;
МодульЭлектроннаяПодписьКлиентСерверЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьКлиентСерверЛокализация");
ДанныеДляПроверкиУдостоверяющегоЦентра = МодульЭлектроннаяПодписьКлиентСерверЛокализация.ДанныеДляПроверкиУдостоверяющегоЦентра(
СертификатКриптографии);
@@ -679,7 +718,8 @@
КонтекстПроверки.ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска;
КонтекстПроверки.НаДату = ?(НаДату = Неопределено, ТекущаяДатаСеанса(), НаДату);
КонтекстПроверки.РазницаСУниверсальнымВременем = РазницаСУниверсальнымВременем();
КонтекстПроверки.ЭтоПроверкаПодписи = ЭтоПроверкаПодписи;
КонтекстПроверки.ЭтоПроверкаПодписи = ПараметрыПроверки.ЭтоПроверкаПодписи;
КонтекстПроверки.ПроверятьСертификат = ПараметрыПроверки.ПроверятьСертификат;
Если СвойстваСертификата = Неопределено Тогда
КонтекстПроверки.СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии);
@@ -433,7 +433,7 @@
ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.ФормаОбъекта", Новый Структура("Программа",
ПараметрыПрограммы), ФормаВладелец,,,,ОповещениеОЗавершении, РежимОткрытияОкна);
Иначе
ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.ПрограммаОпределеннаяАвтоматически",
ОткрытьФорму("Справочник.ПрограммыЭлектроннойПодписиИШифрования.Форма.ПриложениеОпределенноеАвтоматически",
Новый Структура("Программа", ПараметрыПрограммы), ФормаВладелец,,,, ОповещениеОЗавершении, РежимОткрытияОкна);
КонецЕсли;
@@ -1495,6 +1495,14 @@
ПараметрыДляПроверки.ПоказатьОшибкуСозданияМенеджераКриптографии = ПараметрыПроверки;
ИначеЕсли ТипЗнч(ПараметрыПроверки) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(ПараметрыДляПроверки, ПараметрыПроверки);
ОжидаемыеЗначения = Новый Массив;
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Если ПараметрыДляПроверки.РезультатВВидеСтруктуры Тогда
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись",
"ПараметрыПроверки.ПроверятьСертификат", ПараметрыДляПроверки.ПроверятьСертификат, Тип("Строка"),, ОжидаемыеЗначения);
КонецЕсли;
Контекст = Новый Структура;
@@ -1505,11 +1513,14 @@
Контекст.Вставить("НаДату", НаДату);
Контекст.Вставить("ПроверятьНаСервере",
ЭлектроннаяПодписьКлиент.ПроверятьЭлектронныеПодписиНаСервере());
Если ПараметрыДляПроверки.РезультатВВидеСтруктуры Тогда
Контекст.Вставить("РезультатПроверки", ЭлектроннаяПодписьКлиентСервер.РезультатПроверкиПодписи());
Контекст.РезультатПроверки.ПараметрыПроверкиСертификата = ПараметрыДляПроверки.ПроверятьСертификат;
Контекст.Вставить("ПроверятьСертификат", ПараметрыДляПроверки.ПроверятьСертификат);
Иначе
Контекст.Вставить("РезультатПроверки", Неопределено);
Контекст.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
КонецЕсли;
Если ТипЗнч(Контекст.Подпись) = Тип("Строка")
@@ -1769,20 +1780,27 @@
// Продолжение процедуры ПроверитьПодпись.
Процедура ПроверитьПодписьНаКлиентеПослеПроверкиПодписиXMLDSig(Данные, Контекст) Экспорт
Если Контекст.Свойство("ПроверитьСертификатНаКлиенте") Тогда
МенеджерКриптографии = Контекст.МенеджерКриптографии;
Если Контекст.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПроверитьПодписьПослеПроверкиСертификатаПодписи(Истина, Контекст);
Иначе
Если Контекст.Свойство("ПроверитьСертификатНаКлиенте") Тогда
МенеджерКриптографии = Контекст.МенеджерКриптографии;
Иначе
// Проверка сертификата на сервере и на клиенте.
МенеджерКриптографии = Неопределено;
МенеджерКриптографии = Неопределено;
КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметры.ДляПроверкиПодписи = Истина;
ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра = Контекст.ПроверятьСертификат;
Оповещение = Новый ОписаниеОповещения("ПроверитьПодписьПослеПроверкиСертификатаПодписи", ЭтотОбъект, Контекст);
ПроверитьСертификат(Оповещение, Данные.Сертификат, МенеджерКриптографии, Данные.ДатаПодписания,
ДополнительныеПараметры);
КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметры.ДляПроверкиПодписи = Истина;
Оповещение = Новый ОписаниеОповещения("ПроверитьПодписьПослеПроверкиСертификатаПодписи", ЭтотОбъект, Контекст);
ПроверитьСертификат(Оповещение, Данные.Сертификат, МенеджерКриптографии, Данные.ДатаПодписания, ДополнительныеПараметры);
КонецПроцедуры
// Продолжение процедуры ПроверитьПодпись.
@@ -1873,16 +1891,22 @@
Контекст.Вставить("Сертификат", Сертификат);
ДатаПодписания = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаДляПроверкиСертификатаПодписи(СвойстваПодписи);
Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда
ДатаПодписания = Контекст.НаДату;
Если Контекст.ПроверятьСертификат = ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПроверитьПодписьПослеПроверкиСертификатаПодписи(Истина, Контекст);
Иначе
ДатаПодписания = ЭлектроннаяПодписьСлужебныйКлиентСервер.ДатаДляПроверкиСертификатаПодписи(СвойстваПодписи);
Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда
ДатаПодписания = Контекст.НаДату;
КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметры.ДляПроверкиПодписи = Истина;
ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра = Контекст.ПроверятьСертификат;
Оповещение = Новый ОписаниеОповещения("ПроверитьПодписьПослеПроверкиСертификатаПодписи", ЭтотОбъект, Контекст);
ПроверитьСертификат(Оповещение, Контекст.Сертификат, Контекст.МенеджерКриптографии, ДатаПодписания,
ДополнительныеПараметры);
КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыПроверкиСертификата();
ДополнительныеПараметры.ДляПроверкиПодписи = Истина;
Оповещение = Новый ОписаниеОповещения("ПроверитьПодписьПослеПроверкиСертификатаПодписи", ЭтотОбъект, Контекст);
ПроверитьСертификат(Оповещение, Контекст.Сертификат, Контекст.МенеджерКриптографии, ДатаПодписания, ДополнительныеПараметры);
КонецПроцедуры
@@ -1960,12 +1984,32 @@
Контекст.МенеджерКриптографии = МенеджерКриптографии;
Контекст.НаДату = НаДату;
ДополнительныеПараметрыПроверкиСертификата = ДополнительныеПараметрыПроверкиСертификата();
Если ДополнительныеПараметры <> Неопределено Тогда
Контекст.ПоказатьОшибку = ДополнительныеПараметры.ПоказатьОшибку;
Контекст.ОбъединитьОшибкиДанныхСертификата = ДополнительныеПараметры.ОбъединитьОшибкиДанныхСертификата;
Контекст.ПроверитьВСервисеПослеОшибки = ДополнительныеПараметры.ПроверитьВСервисеПослеОшибки;
Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра = ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра;
Контекст.ДляПроверкиПодписи = ДополнительныеПараметры.ДляПроверкиПодписи;
ЗаполнитьЗначенияСвойств(ДополнительныеПараметрыПроверкиСертификата, ДополнительныеПараметры);
Если ТипЗнч(ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра) = Тип("Булево") Тогда // Для совместимости
ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра = ?(
ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра,
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные(),
ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
КонецЕсли;
ОжидаемыеЗначения = Новый Массив;
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные());
ОжидаемыеЗначения.Добавить(ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат());
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат",
"ДополнительныеПараметры.ВыполнятьПроверкуУдостоверяющегоЦентра", ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра,
Тип("Строка"),, ОжидаемыеЗначения);
Контекст.ПоказатьОшибку = ДополнительныеПараметрыПроверкиСертификата.ПоказатьОшибку;
Контекст.ОбъединитьОшибкиДанныхСертификата = ДополнительныеПараметрыПроверкиСертификата.ОбъединитьОшибкиДанныхСертификата;
Контекст.ПроверитьВСервисеПослеОшибки = ДополнительныеПараметрыПроверкиСертификата.ПроверитьВСервисеПослеОшибки;
Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра = ДополнительныеПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра;
Контекст.ДляПроверкиПодписи = ДополнительныеПараметрыПроверкиСертификата.ДляПроверкиПодписи;
Контекст.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов = ДополнительныеПараметрыПроверкиСертификата.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов;
КонецЕсли;
Контекст.ОписаниеОшибкиНаКлиенте = Неопределено;
@@ -2004,6 +2048,8 @@
// * Оповещение - см. ПроверитьСертификат.Оповещение
// * ОбъединитьОшибкиДанныхСертификата - Булево
// * ПроверитьВСервисеПослеОшибки - Булево
// * ВыполнятьПроверкуУдостоверяющегоЦентра - Строка
// * ИгнорироватьПроверкуВСпискеОтозванныхСертификатов - Булево
//
Функция КонтекстПроверкиСертификата()
@@ -2022,10 +2068,11 @@
Контекст.Вставить("ПоказатьОшибку", Истина);
Контекст.Вставить("ОбъединитьОшибкиДанныхСертификата", Истина);
Контекст.Вставить("ПроверитьВСервисеПослеОшибки", Истина);
Контекст.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", Истина);
Контекст.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Контекст.Вставить("ДляПроверкиПодписи", Ложь);
Контекст.Вставить("ДействияДляУстраненияОшибок", Новый Соответствие);
Контекст.Вставить("СвойстваСертификата");
Контекст.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь);
Возврат Контекст;
@@ -2039,7 +2086,8 @@
// * ОбъединитьОшибкиДанныхСертификата - Булево - объединить ошибки проверки данных сертификата на клиенте и сервере в
// строку.
// * ПроверитьВСервисеПослеОшибки - Булево - в случае ошибки при проверке данных сертификата на клиенте, проверить в сервисе.
// * ВыполнятьПроверкуУдостоверяющегоЦентра - Булево - проверять юридическую значимость в зависимости от издателя.
// * ВыполнятьПроверкуУдостоверяющегоЦентра - см. ЭлектроннаяПодписьКлиент.ПараметрыПроверкиСертификата.ВыполнятьПроверкуУдостоверяющегоЦентра.
//
// * ДляПроверкиПодписи - Булево - не показывать оповещения для сертификатов, возвращать результат,
// как указано в вызывающей процедуре проверки подписи.
//
@@ -2049,8 +2097,9 @@
Структура.Вставить("ПоказатьОшибку", Истина);
Структура.Вставить("ОбъединитьОшибкиДанныхСертификата", Истина);
Структура.Вставить("ПроверитьВСервисеПослеОшибки", Истина);
Структура.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", Истина);
Структура.Вставить("ДляПроверкиПодписи", Ложь);
Структура.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
Структура.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь);
Возврат Структура;
@@ -2067,10 +2116,11 @@
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Контекст.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов);
ДополнительныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра);
ДополнительныеПараметры.Вставить("ДляПроверкиПодписи", Контекст.ДляПроверкиПодписи);
ДополнительныеПараметры.Вставить("Предупреждение");
ДополнительныеПараметры.Вставить("Сертификат");
ДополнительныеПараметры.Вставить("Сертификат", АдресСертификата);
Если ЭлектроннаяПодписьСлужебныйВызовСервера.ПроверитьСертификат(АдресСертификата,
Контекст.ОписаниеОшибкиНаСервере, Контекст.НаДату, ДополнительныеПараметры) Тогда
@@ -2140,7 +2190,7 @@
Контекст.Вставить("СертификатКриптографии", СертификатКриптографии);
Контекст.Вставить("РежимыПроверкиСертификата",
ЭлектроннаяПодписьСлужебныйКлиентСервер.РежимыПроверкиСертификата(
ЗначениеЗаполнено(Контекст.НаДату)));
ЗначениеЗаполнено(Контекст.НаДату), Контекст.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов));
Если ТипЗнч(Контекст.СертификатДляПроверки) = Тип("СертификатКриптографии") Тогда
Контекст.СертификатДляПроверки.НачатьВыгрузку(Новый ОписаниеОповещения(
@@ -2351,10 +2401,14 @@
// Продолжение процедуры ПроверитьСертификат.
Асинх Процедура ДополнительнаяПроверкаСертификата(СертификатКриптографии, ПроверкаНаСервере, Контекст)
Если Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра Тогда
Если Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра <> ЭлектроннаяПодписьСлужебныйКлиентСервер.НеПроверятьСертификат() Тогда
ПараметрыПроверки = Новый Структура;
ПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", Контекст.ДляПроверкиПодписи);
ПараметрыПроверки.Вставить("ПроверятьСертификат", Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра);
РезультатПроверкиУдостоверяющегоЦентраСертификата = Ждать РезультатПроверкиУдостоверяющегоЦентраСертификата(
СертификатКриптографии, Контекст.НаДату, Контекст.ДляПроверкиПодписи, Контекст.СвойстваСертификата);
СертификатКриптографии, Контекст.НаДату, ПараметрыПроверки, Контекст.СвойстваСертификата);
Если Не РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует Или ЗначениеЗаполнено(
РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение.ТекстОшибки)
@@ -2363,8 +2417,9 @@
ПользовательскиеНастройкиСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ПользовательскиеНастройкиСертификата(
СертификатКриптографии.Отпечаток);
Если Не РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует
И ПользовательскиеНастройкиСертификата.ПодписаниеРазрешено <> Истина Тогда
Если Не РезультатПроверкиУдостоверяющегоЦентраСертификата.Действует
И (Контекст.ВыполнятьПроверкуУдостоверяющегоЦентра = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТолькоКвалифицированные()
Или ПользовательскиеНастройкиСертификата.ПодписаниеРазрешено <> Истина) Тогда
Если ПроверкаНаСервере Тогда
Контекст.ОписаниеОшибкиНаСервере = РезультатПроверкиУдостоверяющегоЦентраСертификата.Предупреждение.ТекстОшибки;
@@ -2403,7 +2458,7 @@
КонецПроцедуры
Асинх Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатКриптографии, НаДату = Неопределено, ЭтоПроверкаПодписи = Ложь, СвойстваСертификата = Неопределено) Экспорт
Асинх Функция РезультатПроверкиУдостоверяющегоЦентраСертификата(СертификатКриптографии, НаДату = Неопределено, ПараметрыПроверки = Неопределено, СвойстваСертификата = Неопределено) Экспорт
Результат = ЭлектроннаяПодписьСлужебныйКлиентСервер.РезультатПроверкиУдостоверяющегоЦентраПоУмолчанию();
@@ -2413,6 +2468,17 @@
Возврат Результат;
КонецЕсли;
Если ПараметрыПроверки = Неопределено Или ПараметрыПроверки = Ложь Или ПараметрыПроверки = Истина Тогда
НовыеПараметрыПроверки = Новый Структура;
НовыеПараметрыПроверки.Вставить("ЭтоПроверкаПодписи", ?(ПараметрыПроверки = Неопределено, Ложь, ПараметрыПроверки));
НовыеПараметрыПроверки.Вставить("ПроверятьСертификат", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
ПараметрыПроверки = НовыеПараметрыПроверки;
КонецЕсли;
Если ПараметрыПроверки.ПроверятьСертификат = "НеПроверятьСертификат" Тогда
Возврат Результат;
КонецЕсли;
МодульЭлектроннаяПодписьКлиентСерверЛокализация = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ЭлектроннаяПодписьКлиентСерверЛокализация");
@@ -2436,7 +2502,9 @@
КонтекстПроверки.ЗначенияПоиска = ДанныеДляПроверкиУдостоверяющегоЦентра.ЗначенияПоиска;
КонтекстПроверки.НаДату = ?(НаДату = Неопределено, ОбщегоНазначенияКлиент.ДатаСеанса(), НаДату);
КонтекстПроверки.РазницаСУниверсальнымВременем = РазницаСУниверсальнымВременем();
КонтекстПроверки.ЭтоПроверкаПодписи = ЭтоПроверкаПодписи;
КонтекстПроверки.ЭтоПроверкаПодписи = ПараметрыПроверки.ЭтоПроверкаПодписи;
КонтекстПроверки.ПроверятьСертификат = ПараметрыПроверки.ПроверятьСертификат;
Если СвойстваСертификата = Неопределено Тогда
КонтекстПроверки.СвойстваСертификата = Ждать СвойстваСертификата(СертификатКриптографии);
Иначе
@@ -4120,6 +4188,8 @@
СерверныеПараметры.Вставить("ПроверкаПриВыборе");
СерверныеПараметры.Вставить("ПараметрыДополнительныхПроверок");
СерверныеПараметры.Вставить("ТипПодписи");
СерверныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ЭлектроннаяПодписьСлужебныйКлиентСервер.ПроверятьКвалифицированные());
СерверныеПараметры.Вставить("ИгнорироватьПроверкуВСпискеОтозванныхСертификатов", Ложь);
Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда
@@ -4135,6 +4205,7 @@
Если ДополнительныеПараметры.КонтекстОперации.ИмяФормы = НачалоИмениФормы + "ПодписаниеДанных" Тогда
ДополнительныеПараметры.Вставить("ТипПодписи", ДополнительныеПараметры.КонтекстОперации.ТипПодписи);
ДополнительныеПараметры.Вставить("ВыполнятьПроверкуУдостоверяющегоЦентра", ДополнительныеПараметры.КонтекстОперации.ПроверятьСертификат);
КонецЕсли;
УказанКонтекстДругойОперации = Истина;
@@ -396,6 +396,18 @@
КонецФункции
Функция ПроверятьКвалифицированные() Экспорт
Возврат "ПроверятьКвалифицированные";
КонецФункции
Функция ТолькоКвалифицированные() Экспорт
Возврат "ТолькоКвалифицированные";
КонецФункции
Функция НеПроверятьСертификат() Экспорт
Возврат "НеПроверятьСертификат";
КонецФункции
Функция ОписаниеПрограммыПоИмениКриптопровайдера(ИмяКриптопровайдера, ОписанияПрограмм, ПрограммыАвто) Экспорт
ПрограммаНайдена = Ложь;
@@ -1397,7 +1409,7 @@
КонецПроцедуры
// Только для внутреннего использования.
Функция РежимыПроверкиСертификата(ИгнорироватьВремяДействия = Ложь) Экспорт
Функция РежимыПроверкиСертификата(ИгнорироватьВремяДействия = Ложь, ИгнорироватьПроверкуВСпискеОтозванныхСертификатов = Ложь) Экспорт
МассивРежимовПроверки = Новый Массив;
@@ -1409,6 +1421,10 @@
МассивРежимовПроверки.Добавить(РежимПроверкиСертификатаКриптографии.ИгнорироватьВремяДействия);
КонецЕсли;
Если ИгнорироватьПроверкуВСпискеОтозванныхСертификатов Тогда
МассивРежимовПроверки.Добавить(РежимПроверкиСертификатаКриптографии.ИгнорироватьПроверкуВСпискеОтозванныхСертификатов);
КонецЕсли;
Возврат МассивРежимовПроверки;
КонецФункции
@@ -3538,16 +3554,20 @@
Если ТипЗнч(Сертификат) = Тип("Массив") Тогда
Если Сертификат.Количество() > 0 Тогда
Если ТипЗнч(Сертификат[0]) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(Сертификат[0]);
Иначе
Если ЗначениеЗаполнено(Сертификат[0]) Тогда
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(Сертификат[0]);
КонецЕсли;
ИначеЕсли ЭтоАдресВременногоХранилища(Сертификат[0]) Тогда
ДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат[0]);
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования") Тогда
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(Сертификат);
Если ЗначениеЗаполнено(Сертификат) Тогда
ДанныеСертификата = ЭлектроннаяПодписьСлужебныйВызовСервера.ДанныеСертификата(Сертификат);
КонецЕсли;
ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда
ДанныеСертификата = Сертификат;
Иначе
ИначеЕсли ЭтоАдресВременногоХранилища(Сертификат) Тогда
ДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат);
КонецЕсли;
КонецЕсли;
@@ -474,7 +474,7 @@
//
Функция ВерсияКлассификатора() Экспорт
Возврат "3.0.1.31";
Возврат "3.0.1.34";
КонецФункции
@@ -592,6 +592,21 @@
<value xsi:type="xs:boolean">false</value>
<useRestriction>true</useRestriction>
</parameter>
<parameter>
<name>ИдентификаторОбработчикаОчисткиУстаревшихДанных</name>
<title xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Идентификатор обработчика очистки устаревших данных</v8:content>
</v8:item>
</title>
<valueType>
<v8:Type>v8:UUID</v8:Type>
</valueType>
<value xsi:type="v8:UUID">00000000-0000-0000-0000-000000000000</value>
<useRestriction>true</useRestriction>
<use>Always</use>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
<dcsset:presentation xsi:type="xs:string">Основной</dcsset:presentation>
@@ -738,6 +753,17 @@
</v8:item>
</dcsset:presentation>
</dcsset:item>
<dcsset:item xsi:type="dcsset:FilterItemComparison">
<dcsset:left xsi:type="dcscor:Field">Идентификатор</dcsset:left>
<dcsset:comparisonType>Equal</dcsset:comparisonType>
<dcsset:right xsi:type="dcscor:Field">ПараметрыДанных.ИдентификаторОбработчикаОчисткиУстаревшихДанных</dcsset:right>
<dcsset:presentation xsi:type="v8:LocalStringType">
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>// Очистка устаревших данных при каждом обновлении</v8:content>
</v8:item>
</dcsset:presentation>
</dcsset:item>
<dcsset:item xsi:type="dcsset:FilterItemGroup">
<dcsset:groupType>AndGroup</dcsset:groupType>
<dcsset:item xsi:type="dcsset:FilterItemComparison">
+9 -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="73f4baf9-85d9-4f21-914a-7bdb67bcb6cf">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fa3ebf18-1920-4337-9c5f-3925ce8ae04d">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="710f1bc7-d921-42a6-9b60-e548d8825063"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="4f79049b-e2fc-4425-b142-af051a570d6c"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="80e5cc48-3d78-45a5-ad1c-d461a52d13d2"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="ea53807d-7767-4279-bb54-c1bcf2c1c093"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="281997f5-d76d-4f89-a8a1-e96dbbe9e7eb"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="93fd35f5-ad5c-4c41-a287-52c52f728fec"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="39630857-52ca-4dbd-900e-60e323ece9cd"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="f08b1376-850c-42e7-b25a-635d9d945139"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="362c61f8-ae88-409e-b8f3-4f592c1b41c6"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="dd7a329e-5bf9-4d90-b634-cddb40c8825e"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="c402eb0b-0ce2-42d1-beb8-9458ed1dfcba"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="8b659c49-4521-4537-957d-f571106a0179"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="9c162ab1-0362-43db-acda-c199b60b8113"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="05468275-09e4-406c-9bec-1044fe73ae53"/>
<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.10.256</version>
<version>3.1.10.277</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1 +1 @@
{6,1,1,68b8a776-9a8a-4489-b61b-6f3c8f1d91d0,1,f927a0f1-7fad-4f12-b2c0-01e6d02536a8,"3.1.10.256","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7658,1,0,73f4baf9-85d9-4f21-914a-7bdb67bcb6cf,73f4baf9-85d9-4f21-914a-7bdb67bcb6cf,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,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,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,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,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,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,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,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,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,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,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,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-b7bLine truncated
{6,1,1,83c2c242-8a08-4277-96c8-0ec2ce22dbae,1,f70d4ec2-483e-4147-a837-34a626b87558,"3.1.10.277","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7659,1,0,fa3ebf18-1920-4337-9c5f-3925ce8ae04d,fa3ebf18-1920-4337-9c5f-3925ce8ae04d,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,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,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,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,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,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,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,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,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,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,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,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-b7bLine truncated
@@ -50,13 +50,10 @@
&НаСервере
Процедура УстановитьПараметрыДинамическогоСпискаДереваАнкет()
Для каждого ДоступныйПараметр Из ОтвеченныеАнкеты.Параметры.ДоступныеПараметры.Элементы Цикл
Если ДоступныйПараметр.Заголовок = "Респондент" Тогда
ОтвеченныеАнкеты.Параметры.УстановитьЗначениеПараметра(ДоступныйПараметр.Параметр,Объект.Респондент);
КонецЕсли;
КонецЦикла;
ПараметрРеспондент = ОтвеченныеАнкеты.Параметры.ДоступныеПараметры.Элементы.Найти("Респондент");
Если ПараметрРеспондент <> Неопределено Тогда
ОтвеченныеАнкеты.Параметры.УстановитьЗначениеПараметра(ПараметрРеспондент.Параметр, Объект.Респондент);
КонецЕсли;
КонецПроцедуры
@@ -56,59 +56,59 @@
КонецФункции
Процедура СоздатьСписокСправочниковДляЗагрузки(СписокСправочниковДляЗагрузки) Экспорт
ТипСтрока = Новый ОписаниеТипов("Строка");
ТипБулево = Новый ОписаниеТипов("Булево");
ИнформацияОСправочниках = Новый ТаблицаЗначений;
ИнформацияОСправочниках.Колонки.Добавить("ПолноеИмя", ТипСтрока);
ИнформацияОСправочниках.Колонки.Добавить("Представление", ТипСтрока);
ИнформацияОСправочниках.Колонки.Добавить("ПрикладнаяЗагрузка", ТипБулево);
ЗагружаемыеСправочники = ИнформацияОСправочниках();
ФункциональныеОпции = СтандартныеПодсистемыПовтИсп.ДоступностьОбъектовПоОпциям();
ИнтеграцияПодсистемБСП.ПриОпределенииСправочниковДляЗагрузкиДанных(ИнформацияОСправочниках);
ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных(ИнформацияОСправочниках);
ИнформацияОСправочниках.Колонки.Добавить("ИнформацияОТипеЗагрузки");
Для каждого ОбъектМетаданныхДляВывода Из Метаданные.Справочники Цикл
ПолноеИмя = ОбъектМетаданныхДляВывода.ПолноеИмя();
Если ФункциональныеОпции.Получить(ПолноеИмя) = Ложь
Или ИнформацияОСправочниках.Найти(ПолноеИмя, "ПолноеИмя") <> Неопределено Тогда
Если ФункциональныеОпции.Получить(ПолноеИмя) = Ложь Тогда
Продолжить;
КонецЕсли;
Если ЗагрузкаДанныхИзФайлаДопустима(ОбъектМетаданныхДляВывода) Тогда
Представление = ОбъектМетаданныхДляВывода.Представление();
СтрокаТаблицы = ИнформацияОСправочниках.Найти(Представление, "Представление");
Если СтрокаТаблицы <> Неопределено Тогда
СтрокаТаблицы.Представление = Представление + " (" + СтрокаТаблицы.ПолноеИмя +")";
Представление = Представление + " (" + ПолноеИмя +")";
КонецЕсли;
ИнформацияОСправочнике = ИнформацияОСправочниках.Добавить();
ИнформацияОСправочнике.Представление = Представление;
ИнформацияОСправочнике = ЗагружаемыеСправочники.Добавить();
ИнформацияОСправочнике.Представление = ОбъектМетаданныхДляВывода.Представление();
ИнформацияОСправочнике.ПолноеИмя = ПолноеИмя;
ИнформацияОТипеЗагрузки = НоваяИнформацияОТипеЗагрузки();
ИнформацияОТипеЗагрузки.Тип = ?(ИнформацияОСправочнике.ПрикладнаяЗагрузка, "ПрикладнаяЗагрузка", "УниверсальнаяЗагрузка");
ИнформацияОТипеЗагрузки.Вставить("ПолноеИмяОбъектаМетаданных", ПолноеИмя);
ИнформацияОСправочнике.ИнформацияОТипеЗагрузки = ИнформацияОТипеЗагрузки;
КонецЕсли;
КонецЦикла;
Для каждого ИнформацияОСправочнике Из ИнформацияОСправочниках Цикл
ИнформацияОТипеЗагрузки = НоваяИнформацияОТипеЗагрузки();
ИнтеграцияПодсистемБСП.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники);
ЗагрузкаДанныхИзФайлаПереопределяемый.ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники);
ИнформацияОСправочниках = РасширеннаяИнформацияОСправочниках();
Для каждого ИнформацияОСправочнике Из ЗагружаемыеСправочники Цикл
СтрокаТаблицы = ИнформацияОСправочниках.Найти(ИнформацияОСправочнике.ПолноеИмя, "ПолноеИмя");
Если СтрокаТаблицы = Неопределено Тогда
СтрокаТаблицы = ИнформацияОСправочниках.Добавить();
СтрокаТаблицы.ПолноеИмя = ИнформацияОСправочнике.ПолноеИмя;
СтрокаТаблицыПоПредставлению = ИнформацияОСправочниках.Найти(ИнформацияОСправочнике.Представление, "Представление");
Если СтрокаТаблицыПоПредставлению <> Неопределено Тогда
СтрокаТаблицыПоПредставлению.Представление = СтрокаТаблицыПоПредставлению.Представление + " (" + СтрокаТаблицыПоПредставлению.ПолноеИмя + ")";
СтрокаТаблицы.Представление = ИнформацияОСправочнике.Представление + " (" + ИнформацияОСправочнике.ПолноеИмя + ")";
Иначе
СтрокаТаблицы.Представление = ИнформацияОСправочнике.Представление;
КонецЕсли;
ИначеЕсли СтрокаТаблицы.ПрикладнаяЗагрузка Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы.ПрикладнаяЗагрузка = ИнформацияОСправочнике.ПрикладнаяЗагрузка;
ИнформацияОТипеЗагрузки = НоваяИнформацияОТипеЗагрузки();
ИнформацияОТипеЗагрузки.Тип = ?(ИнформацияОСправочнике.ПрикладнаяЗагрузка, "ПрикладнаяЗагрузка", "УниверсальнаяЗагрузка");
ИнформацияОТипеЗагрузки.Вставить("ПолноеИмяОбъектаМетаданных", ИнформацияОСправочнике.ПолноеИмя);
ИнформацияОСправочнике.ИнформацияОТипеЗагрузки = ИнформацияОТипеЗагрузки;
СтрокаТаблицы.ИнформацияОТипеЗагрузки = ИнформацияОТипеЗагрузки;
КонецЦикла;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
@@ -137,7 +137,7 @@
Для каждого ИнформацияОСправочнике Из ИнформацияОСправочниках Цикл
Представление = "";
Если ИнформацияОСправочнике.ПрикладнаяЗагрузка Тогда
Если ИнформацияОСправочнике.ПрикладнаяЗагрузка И ПустаяСтрока(ИнформацияОСправочнике.Представление) Тогда
Представление = ПредставлениеСправочника(ИнформацияОСправочнике.ПолноеИмя);
КонецЕсли;
@@ -157,6 +157,44 @@
КонецПроцедуры
// Возвращаемое значение:
// ТаблицаЗначений:
// * ПолноеИмя - Строка
// * Представление - Строка
// * ПрикладнаяЗагрузка - Булево
//
Функция ИнформацияОСправочниках()
ТипСтрока = Новый ОписаниеТипов("Строка");
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("ПолноеИмя", ТипСтрока);
Результат.Колонки.Добавить("Представление", ТипСтрока);
Результат.Колонки.Добавить("ПрикладнаяЗагрузка", Новый ОписаниеТипов("Булево"));
Возврат Результат;
КонецФункции
// Возвращаемое значение:
// ТаблицаЗначений:
// * ПолноеИмя - Строка
// * Представление - Строка
// * ПрикладнаяЗагрузка - Булево
// * ИнформацияОТипеЗагрузки - Структура
//
Функция РасширеннаяИнформацияОСправочниках()
ТипСтруктура = Новый ОписаниеТипов("Структура");
Результат = ИнформацияОСправочниках();
Результат.Колонки.Добавить("ИнформацияОТипеЗагрузки", ТипСтруктура);
Возврат Результат;
КонецФункции
// Возвращаемое значение:
// Структура:
// * Тип - Строка
@@ -45,7 +45,7 @@
Функция ВерсияКалендарей() Экспорт
Возврат 81;
Возврат 83;
КонецФункции
@@ -57,7 +57,7 @@
Функция ВерсияОбновленияДанныхПроизводственныхКалендарей() Экспорт
Возврат "3.1.10.250";
Возврат "3.1.10.258";
КонецФункции
@@ -1716,7 +1716,7 @@
<Item Calendar="РФ" Year="2025" DayType="Предпраздничный" Date="20250611" SwapDate=""/>
<Item Calendar="РФ" Year="2025" DayType="Праздник" Date="20250612" SwapDate=""/>
<Item Calendar="РФ" Year="2025" DayType="Суббота" Date="20250613" SwapDate="20250308"/>
<Item Calendar="РФ" Year="2025" DayType="Рабочий" Date="20251101" SwapDate="20251103"/>
<Item Calendar="РФ" Year="2025" DayType="Предпраздничный" Date="20251101" SwapDate="20251103"/>
<Item Calendar="РФ" Year="2025" DayType="Суббота" Date="20251103" SwapDate="20251101"/>
<Item Calendar="РФ" Year="2025" DayType="Праздник" Date="20251104" SwapDate=""/>
<Item Calendar="РФ" Year="2025" DayType="Воскресенье" Date="20251231" SwapDate="20250105"/>
@@ -0,0 +1,149 @@
<?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:FormField">
<name>ПинКод</name>
<id>1</id>
<title>
<key>ru</key>
<value>Пин код</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ПинКод</segments>
</dataPath>
<titleLocation>None</titleLocation>
<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>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>StartChoice</event>
<name>ПинКодНачалоВыбора</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<passwordMode>true</passwordMode>
<choiceButton>true</choiceButton>
<choiceButtonPicture xsi:type="core:PictureRef">
<picture>CommonPicture.ВводимыеСимволыВидны</picture>
</choiceButtonPicture>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<commandBarLocation>Bottom</commandBarLocation>
<showCommandBar>true</showCommandBar>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:Button">
<name>ФормаОК</name>
<id>4</id>
<title>
<key>ru</key>
<value>ОК</value>
</title>
<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>
<representation>Auto</representation>
<defaultButton>true</defaultButton>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<horizontalAlign>Right</horizontalAlign>
</autoCommandBar>
<width>30</width>
<windowOpeningMode>DontBlock</windowOpeningMode>
<saveWindowSettings>true</saveWindowSettings>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>auto</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>ПинКод</name>
<title>
<key>ru</key>
<value>Пин код</value>
</title>
<id>1</id>
<valueType>
<types>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>
<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,33 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОК(Команда)
Закрыть(ПинКод);
КонецПроцедуры
&НаКлиенте
Процедура ПинКодНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Элемент = Элементы.ПинКод;
Элемент.РежимПароля = Не Элемент.РежимПароля;
Если Элемент.РежимПароля Тогда
Элемент.КартинкаКнопкиВыбора = БиблиотекаКартинок.ВводимыеСимволыВидны;
Иначе
Элемент.КартинкаКнопкиВыбора = БиблиотекаКартинок.ВводимыеСимволыСкрыты;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -79,6 +79,15 @@
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="af062541-4dec-4856-9be9-dec804fbae0b">
<name>ВводПинКода</name>
<synonym>
<key>ru</key>
<value>Ввод пин кода</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="e057e428-99c1-419d-a169-697c1e825e94">
<name>ИндивидуальныйПредприниматель</name>
<synonym>
@@ -147,6 +147,10 @@
Продолжить;
КонецЕсли;
Если СтрРазделить(Платформа.ИмяБезРасширения, ".").Количество() <> 3 Тогда
Продолжить;
КонецЕсли;
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсииБезНомераСборки(Платформа.ИмяБезРасширения, "8.3.21") < 0 Тогда
Продолжить;
КонецЕсли;
@@ -301,8 +301,10 @@
&НаКлиенте
Процедура ОбновлениеДоступаНаУровнеЗаписей(Команда)
ОткрытьФорму("РегистрСведений" + "." + "ОбновлениеКлючейДоступаКДанным" + "."
+ "Форма" + "." + "ОбновлениеДоступаНаУровнеЗаписей");
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступомСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеДоступомСлужебныйКлиент");
МодульУправлениеДоступомСлужебныйКлиент.ОткрытьФормуОбновлениеДоступаНаУровнеЗаписей(Истина, Истина);
КонецЕсли;
КонецПроцедуры
@@ -166,8 +166,8 @@
Оповещение = Новый ОписаниеОповещения(
"ЗапрещатьЗагрузкуФайловПоРасширениюПослеПодтверждения", ЭтотОбъект, Новый Структура("Элемент", Элемент));
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности",
Новый Структура("Ключ", "ПриИзмененииСпискаЗапрещенныхРасширений"), , , , , Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПриИзмененииСпискаЗапрещенныхРасширений);
Возврат;
КонецЕсли;
@@ -290,7 +290,7 @@
"En": ""
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n• <a href=\"УстановитьСертификатВКонтейнер\">Установите сертификат в контейнер</a> прямо из приложения.\n• Переустановите сертификат через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/28/4008/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Отсутствует набор ключей",
@@ -299,7 +299,7 @@
"Client": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n• <a href=\"УстановитьСертификатВКонтейнер\">Установите сертификат в контейнер</a> прямо из приложения.\n• Переустановите сертификат через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Сертификат не имеет связи с закрытым ключом",
@@ -308,7 +308,7 @@
"Client": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n• <a href=\"УстановитьСертификатВКонтейнер\">Установите сертификат в контейнер</a> прямо из приложения.\n• Переустановите сертификат через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/28/4008/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Отсутствует ключ",
@@ -527,7 +527,7 @@
"Server": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n• <a href=\"УстановитьСертификатВКонтейнер\">Установите сертификат в контейнер</a> прямо из приложения.\n• Переустановите сертификат через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "0x00000000",
@@ -536,7 +536,7 @@
"Client": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ на сервере (вставить токен или флешку с файлом закрытого ключа).\n• Переустановите сертификат на сервере через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "0x00000000",
@@ -572,7 +572,7 @@
"Server": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ на сервере (вставить токен или флешку с файлом закрытого ключа).\n• Переустановите сертификат на сервере через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Отсутствует ключ",
@@ -581,7 +581,7 @@
"Server": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ на сервере (вставить токен или флешку с файлом закрытого ключа).\n• Переустановите сертификат на сервере через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Сертификат не имеет связи с закрытым ключом",
@@ -590,7 +590,7 @@
"Server": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ на сервере (вставить токен или флешку с файлом закрытого ключа).\n• Переустановите сертификат на сервере через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Отсутствует набор ключей",
@@ -1199,8 +1199,8 @@
},
{
"Anchor": "Указан неверный алгоритм",
"Reason": "• Алгоритм подписи не соответствует алгоритму сертификата подписанта.",
"Solution": "• Обратитесь к подписанту для получения корректной подписи с алгоритмом, соответствующим ГОСТу.",
"Reason": "• Алгоритм подписи не соответствует алгоритму сертификата подписанта.\n• Подпись не является достоверной.\n• После подписания изменились данные объекта.",
"Solution": "• Обратитесь к подписанту для получения корректной подписи",
"ErrorText": "0x80091007",
"RepairMethods": "",
"En": "",
@@ -1271,12 +1271,12 @@
"Anchor": "",
"Reason": "• Нет подключения к Интернету;\n• На сайте ведутся технические работы, попробуйте повторить действие позднее;\n• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки приложения подключиться к Интернету;\n• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в приложении.",
"Solution": "",
"ErrorText": "Ошибка работы с Интернет: Не могу установить соединение",
"ErrorText": "Ошибка работы с Интернет",
"RepairMethods": "",
"En": ""
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n• <a href=\"УстановитьСертификатВКонтейнер\">Установите сертификат в контейнер</a> прямо из приложения.\n• Переустановите сертификат через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Не найден контейнер ключа электронной подписи",
@@ -1285,15 +1285,31 @@
"Client": true
},
{
"Anchor": "Нет связи с закрытым ключом",
"Anchor": "",
"Reason": "• Закрытый ключ для выбранного сертификата не установлен.\n• Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "• Установите закрытый ключ на сервере (вставить токен или флешку с файлом закрытого ключа).\n• Переустановите сертификат на сервере через оснастку приложения электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n• Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"ErrorText": "Не найден контейнер ключа электронной подписи",
"RepairMethods": "{\"МетодикиУстранения\": [\"ПроверитьСертификатВЛокальномХранилище\"]}",
"En": "",
"Server": true
},
{
"Anchor": "",
"Reason": "Сервис недоступен.",
"Solution": "Повторите действие позже.",
"ErrorText": "ведутся работы по разбору очереди запросов",
"RepairMethods": "",
"En": ""
},
{
"Anchor": "",
"Reason": "Сервис недоступен.",
"Solution": "Повторите действие позже.",
"ErrorText": "/poazip|/errors/suspended-request",
"RepairMethods": "",
"En": ""
}
],
"LastChangeDate": "2024-07-04T12:11:55",
"Version": "3.0.1.31"
"LastChangeDate": "2024-08-09T16:26:43",
"Version": "3.0.1.34"
}
@@ -1241,10 +1241,9 @@
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные);
Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры);
ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла");
ПараметрыФормы.Вставить("ИмяФайла",
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОткрытиемФайла,
ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ТекущиеДанные.Наименование, ТекущиеДанные.Расширение));
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение);
Возврат;
КонецЕсли;
@@ -959,8 +959,8 @@
Если ЗапрещенныеРасширения.НайтиПоЗначению(ЭтотОбъект.Объект.Расширение) <> Неопределено Тогда
Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект);
ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла");
ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОткрытиемФайла);
Возврат;
КонецЕсли;
@@ -7,6 +7,213 @@
<items xsi:type="form:FormGroup">
<name>ГруппаКоманднаяПанель</name>
<id>67</id>
<items xsi:type="form:Button">
<name>ВариантыАдресаВыбрать</name>
<id>62</id>
<title>
<key>ru</key>
<value>Выбрать</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ВариантыАдресаВыбратьРасширеннаяПодсказка</name>
<id>63</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualButton</type>
<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:FormField">
<name>ПоискВВебСервисе</name>
<id>76</id>
<title>
<key>ru</key>
<value>Поиск</value>
</title>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ПоискВВебСервисе</segments>
</dataPath>
<titleLocation>None</titleLocation>
<shortcut>Ctrl+F</shortcut>
<extendedTooltip>
<name>ПоискВВебСервисеРасширеннаяПодсказка</name>
<id>78</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ПоискВВебСервисеКонтекстноеМеню</name>
<id>77</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<groupHorizontalAlign>Left</groupHorizontalAlign>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<handlers>
<event>AutoComplete</event>
<name>ПоискВВебСервисеАвтоПодбор</name>
</handlers>
<handlers>
<event>Clearing</event>
<name>ПоискВВебСервисеОчистка</name>
</handlers>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<clearButton>true</clearButton>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<editTextUpdate>DontUse</editTextUpdate>
<textSize>Normal</textSize>
<inputHint>
<key>ru</key>
<value>Поиск (Ctrl+F)</value>
</inputHint>
</extInfo>
</items>
<items xsi:type="form:Addition">
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<name>ДополнениеПоиск</name>
<id>79</id>
<extendedTooltip>
<name>ДополнениеПоискРасширеннаяПодсказка</name>
<id>81</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДополнениеПоискКонтекстноеМеню</name>
<id>80</id>
<autoFill>true</autoFill>
</contextMenu>
<source>ВариантыАдреса</source>
<groupHorizontalAlign>Left</groupHorizontalAlign>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаЕще</name>
<id>71</id>
<items xsi:type="form:Button">
<name>ВариантыАдресаОбновить</name>
<id>31</id>
<title>
<key>ru</key>
<value>Обновить</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ВариантыАдресаОбновитьРасширеннаяПодсказка</name>
<id>32</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.Обновить</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ВариантыАдресаИзменитьФорму</name>
<id>35</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ВариантыАдресаИзменитьФормуРасширеннаяПодсказка</name>
<id>36</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.CustomizeForm</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Еще</value>
</title>
<extendedTooltip>
<name>ГруппаЕщеРасширеннаяПодсказка</name>
<id>72</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>CommandBar</type>
<extInfo xsi:type="form:CommandBarExtInfo">
<horizontalAlign>Left</horizontalAlign>
<commandSource>Form</commandSource>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -16,6 +223,7 @@
<key>ru</key>
<value>Командная панель</value>
</title>
<groupHorizontalAlign>Left</groupHorizontalAlign>
<extendedTooltip>
<name>ГруппаКоманднаяПанельРасширеннаяПодсказка</name>
<id>68</id>
@@ -111,120 +319,7 @@
<autoCommandBar>
<name>ВариантыАдресаКоманднаяПанель</name>
<id>10</id>
<items xsi:type="form:FormGroup">
<name>ГруппаВыбрать</name>
<id>69</id>
<items xsi:type="form:Button">
<name>ВариантыАдресаВыбрать</name>
<id>62</id>
<title>
<key>ru</key>
<value>Выбрать</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ВариантыАдресаВыбратьРасширеннаяПодсказка</name>
<id>63</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>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Выбрать</value>
</title>
<extendedTooltip>
<name>ГруппаВыбратьРасширеннаяПодсказка</name>
<id>70</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
</items>
<items xsi:type="form:Button">
<name>ВариантыАдресаОбновить</name>
<id>31</id>
<title>
<key>ru</key>
<value>Обновить</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ВариантыАдресаОбновитьРасширеннаяПодсказка</name>
<id>32</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.Обновить</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:Button">
<name>ВариантыАдресаИзменитьФорму</name>
<id>35</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ВариантыАдресаИзменитьФормуРасширеннаяПодсказка</name>
<id>36</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.CustomizeForm</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InAdditionalSubmenu</locationInCommandBar>
</items>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>Selection</event>
@@ -590,20 +685,6 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ИспользуемыйАдресныйКлассификатор</name>
<id>5</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>Индекс</name>
<id>4</id>
@@ -634,6 +715,38 @@
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ПоискВВебСервисе</name>
<title>
<key>ru</key>
<value>Поиск</value>
</title>
<id>7</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<attributes>
<name>ТипАдреса</name>
<id>5</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</attributes>
<formCommands>
<name>Обновить</name>
<title>
@@ -28,31 +28,19 @@
УстановитьУсловноеОформление();
ПараметрыПоиска = Новый Структура;
ПараметрыПоиска.Вставить("ТипАдреса", Параметры.ТипАдреса);
ТипАдреса = Параметры.ТипАдреса;
Индекс = Параметры.Индекс;
Если ЗначениеЗаполнено(Индекс) Тогда
ДанныеКлассификатора = Обработки.РасширенныйВводКонтактнойИнформации.АдресаКлассификатораПоПочтовомуИндексу(Индекс, ПараметрыПоиска);
НайтиАдресныеОбъектыНаСервере();
Если ЗначениеЗаполнено(КраткоеПредставлениеОшибки) Тогда
Возврат;
КонецЕсли;
Иначе
КраткоеПредставлениеОшибки = НСтр("ru = 'Индекс не найден в адресном классификаторе.'");
Возврат;
КонецЕсли;
Если ДанныеКлассификатора.Отказ Тогда
// Сервис на обслуживании
КраткоеПредставлениеОшибки = ДанныеКлассификатора.КраткоеПредставлениеОшибки;
Возврат;
ИначеЕсли ДанныеКлассификатора.Данные.Количество() = 0 Тогда
// Нет данных, функционал выбора не применим.
КраткоеПредставлениеОшибки = НСтр("ru = 'Индекс не найден в адресном классификаторе.'");
Возврат;
КонецЕсли;
ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные);
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто;
@@ -78,6 +66,24 @@
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПоискВВебСервисеОчистка(Элемент, СтандартнаяОбработка)
ПоискВВебСервисе = "";
ПодключитьОбработчикОжидания("НайтиАдресныеОбъекты", 0.1, Истина);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ПоискВВебСервисеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ПоискВВебСервисе = Текст;
ПодключитьОбработчикОжидания("НайтиАдресныеОбъекты", 0.1, Истина);
Возврат;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыВариантыАдреса
&НаКлиенте
@@ -149,4 +155,50 @@
КонецПроцедуры
&НаКлиенте
Процедура НайтиАдресныеОбъекты()
НайтиАдресныеОбъектыНаСервере(Истина);
КонецПроцедуры
&НаСервере
Процедура НайтиАдресныеОбъектыНаСервере(ПоискТолькоВВебСервисе = Ложь)
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
КраткоеПредставлениеОшибки = НСтр("ru = 'Индекс не найден в адресном классификаторе.'");
Возврат;
КонецЕсли;
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
ПараметрыПоиска = МодульАдресныйКлассификаторСлужебный.ПараметрыПоискаАдресовПоПочтовомуИндексу();
ПараметрыПоиска.ТипАдреса = ТипАдреса;
ПараметрыПоиска.ПодстрокаПоиска = ПоискВВебСервисе;
ПараметрыПоиска.ПоискТолькоВВебСервисе = ПоискТолькоВВебСервисе;
ТипЧисло = Новый ОписаниеТипов("Число");
ИндексЧислом = ТипЧисло.ПривестиЗначение(Индекс);
ДанныеКлассификатора = МодульАдресныйКлассификаторСлужебный.АдресаПоПочтовомуИндексу(ИндексЧислом, ПараметрыПоиска);
ВариантыАдреса.Очистить();
Если ДанныеКлассификатора.Отказ Тогда
// Сервис на обслуживании
КраткоеПредставлениеОшибки = ДанныеКлассификатора.КраткоеПредставлениеОшибки;
Возврат;
ИначеЕсли ДанныеКлассификатора.Данные.Количество() = 0 Тогда
// Нет данных, функционал выбора не применим.
КраткоеПредставлениеОшибки = НСтр("ru = 'Индекс не найден в адресном классификаторе.'");
Возврат;
КонецЕсли;
ВариантыАдреса.Загрузить(ДанныеКлассификатора.Данные);
Если Не ПоискТолькоВВебСервисе И ДанныеКлассификатора.ЭтоДанныеСВебСервиса Тогда
Элементы.ДополнениеПоиск.Видимость = Ложь;
Элементы.ПоискВВебСервисе.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -269,48 +269,6 @@
КонецПроцедуры
// Возвращает данные классификатора по почтовому индексу.
//
// Параметры:
// Индекс - Строка
// - Число - почтовый индекс, для которого необходимо получать данные.
//
// ДополнительныеПараметры - Структура - описывает настройки поиска. Состоит из необязательных полей:
// * СкрыватьНеактуальные - Булево - флаг исключения из выборки неактуальных адресов. По умолчанию Ложь.
// * ФорматАдреса - Строка - тип используемого классификатора.
//
// Возвращаемое значение:
// Структура - найденные варианты. Содержит поля:
// * Отказ - Булево - поставщик недоступен.
// * ПодробноеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ
// = Ложь.
// * КраткоеПредставлениеОшибки - Строка - описание ошибки, если поставщик недоступен. Неопределено, если Отказ
// = Ложь.
// * ОбщаяЧастьПредставления - Строка - общая часть представлений адреса.
// * Данные - ТаблицаЗначений - содержит данные для выбора. Колонки:
// ** Неактуален - Булево - флаг неактуальности строки данных.
// ** Идентификатор - УникальныйИдентификатор - код классификатора для поиска
// вариантов по индексу.
// ** Представление - Строка - представление варианта.
//
Функция АдресаКлассификатораПоПочтовомуИндексу(Знач Индекс, Знач ДополнительныеПараметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
ТипЧисло = Новый ОписаниеТипов("Число");
ИндексЧислом = ТипЧисло.ПривестиЗначение(Индекс);
МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный");
Возврат МодульАдресныйКлассификаторСлужебный.АдресаПоПочтовомуИндексуКлассификатора(ИндексЧислом, ДополнительныеПараметры);
КонецЕсли;
Результат = СтруктураОшибкиПоставщикаАдресногоКлассификатора();
Результат.Вставить("Данные", Новый ТаблицаЗначений);
Возврат Результат;
КонецФункции
// Возвращает данные классификатора поля выбора по уровню.
//
// Параметры:
@@ -416,6 +416,11 @@
Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ИдентификаторЗадания);
ИмяМетода = Задание.Метаданные.ИмяМетода;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный");
МодульУправлениеДоступомСлужебный.ПередЗапускомРегламентногоЗаданияНеВФоне(Задание);
КонецЕсли;
ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("РегламентныеЗадания", ИмяМетода, Истина);
ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяМетода, Задание.Параметры);
ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("РегламентныеЗадания", ИмяМетода, Неопределено);
@@ -583,7 +583,7 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>4</width>
<width>3</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
@@ -594,24 +594,112 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ОтложенныеОбработчикиОбработчик</name>
<id>41</id>
<title>
<key>ru</key>
<value>Процедура обработки данных</value>
</title>
<items xsi:type="form:FormGroup">
<name>ГруппаОбработчик</name>
<id>148</id>
<items xsi:type="form:FormField">
<name>ОтложенныеОбработчикиОбработчик</name>
<id>41</id>
<title>
<key>ru</key>
<value>Процедура обработки данных</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ОтложенныеОбработчики.Обработчик</segments>
</dataPath>
<extendedTooltip>
<name>ОтложенныеОбработчикиОбработчикРасширеннаяПодсказка</name>
<id>43</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОтложенныеОбработчикиОбработчикКонтекстноеМеню</name>
<id>42</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<autoCellHeight>true</autoCellHeight>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>40</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ОтложенныеОбработчикиОбработчикДополнение</name>
<id>150</id>
<title>
<key>ru</key>
<value>Дополнение</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ОтложенныеОбработчики.ОбработчикДополнение</segments>
</dataPath>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>ОтложенныеОбработчикиОбработчикДополнениеРасширеннаяПодсказка</name>
<id>152</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОтложенныеОбработчикиОбработчикДополнениеКонтекстноеМеню</name>
<id>151</id>
<autoFill>true</autoFill>
</contextMenu>
<type>LabelField</type>
<editMode>Auto</editMode>
<cellHyperlink>true</cellHyperlink>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<cellHyperlinkRepresentation>Show</cellHyperlinkRepresentation>
<cellHyperlinkDisplayVariant>Always</cellHyperlinkDisplayVariant>
<extInfo xsi:type="form:LabelFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ОтложенныеОбработчики.Обработчик</segments>
</dataPath>
<title>
<key>ru</key>
<value>Обработчик</value>
</title>
<extendedTooltip>
<name>ОтложенныеОбработчикиОбработчикРасширеннаяПодсказка</name>
<id>43</id>
<name>ГруппаОбработчикРасширеннаяПодсказка</name>
<id>149</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -619,27 +707,11 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ОтложенныеОбработчикиОбработчикКонтекстноеМеню</name>
<id>42</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<width>36</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>false</horizontalStretch>
<wrap>true</wrap>
<multiLine>true</multiLine>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
<type>ColumnGroup</type>
<extInfo xsi:type="form:ColumnGroupExtInfo">
<group>Vertical</group>
<showTitle>auto</showTitle>
<showInCard>true</showInCard>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
@@ -678,11 +750,12 @@
</contextMenu>
<type>PictureField</type>
<editMode>Auto</editMode>
<autoCellHeight>true</autoCellHeight>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:ImageFieldExtInfo">
<width>9</width>
<width>3</width>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<verticalStretch>true</verticalStretch>
@@ -1373,10 +1446,6 @@
<userVisible>
<common>true</common>
</userVisible>
<toolTip>
<key>ru</key>
<value>Переход к расширенному списку обработчиков обновления с возможностью просмотра служебных сведений для расследования ошибок обновления.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>ГиперссылкаОбработчикиОбновленияРасширеннаяПодсказка</name>
@@ -1423,8 +1492,10 @@
<id>29</id>
<title>
<key>ru</key>
<value>Техническая информация из журнала регистрации для обращения в службу технической поддержки.</value>
<value>• &lt;b>Обработчики обновления&lt;/> - переход к расширенному списку обработчиков обновления с возможностью просмотра служебных сведений для расследования ошибок обновления.
• &lt;b>Журнал регистрации&lt;/> - техническая информация для обращения в службу технической поддержки.</value>
</title>
<formatted>true</formatted>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -1964,6 +2035,37 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>ОбработчикДополнение</name>
<title>
<key>ru</key>
<value>Обработчик дополнение</value>
</title>
<id>13</id>
<valueType>
<types>String</types>
<stringQualifiers/>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ЭтоОбработчикОчисткиУстаревшихДанных</name>
<id>14</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>ВремяНачалаОтложенногоОбновления</name>
@@ -11,6 +11,8 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы();
ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления;
ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления;
@@ -130,6 +132,13 @@
Возврат;
КонецЕсли;
Если Поле = Элементы.ОтложенныеОбработчикиОбработчикДополнение
И Элемент.ТекущиеДанные.ЭтоОбработчикОчисткиУстаревшихДанных Тогда
ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОчисткаУстаревшихДанных");
Возврат;
КонецЕсли;
ИмяОбработчика = Элемент.ТекущиеДанные.Идентификатор;
Отбор = Новый Структура("ИмяОбработчика",ИмяОбработчика);
@@ -300,6 +309,26 @@
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
//
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОтложенныеОбработчикиОбработчикДополнение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтложенныеОбработчики.ОбработчикДополнение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
КонецПроцедуры
&НаСервере
Процедура ЗапуститьВыделеннуюПроцедуруДляОтладки(ИмяОбработчика)
@@ -490,6 +519,7 @@
|ГДЕ
| ОбработчикиОбновления.РежимВыполнения = &РежимВыполнения";
Обработчики = Запрос.Выполнить().Выгрузить();
СтрокаОбработчикаОчисткиУстаревшихДанных = Неопределено;
Для Каждого Обработчик Из Обработчики Цикл
Если Не ПараллельныйРежимИспользуется Тогда
ПараллельныйРежимИспользуется = (Обработчик.РежимВыполненияОтложенногоОбработчика = Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно);
@@ -501,7 +531,8 @@
Продолжить;
КонецЕсли;
КонецЕсли;
ДобавитьОтложенныйОбработчик(Обработчик, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета);
ДобавитьОтложенныйОбработчик(Обработчик, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики,
НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета, СтрокаОбработчикаОчисткиУстаревшихДанных);
Если Обработчик.РежимВыполненияОтложенногоОбработчика <> Перечисления.РежимыВыполненияОтложенныхОбработчиков.Параллельно Тогда
Продолжить;
@@ -547,9 +578,17 @@
КонецЕсли;
Если ОбработчикиНеВыполнялись Тогда
Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Рекомендуется Возобновить невыполненные процедуры обработки данных.'");
Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Рекомендуется запустить невыполненные процедуры обработки данных.'");
Иначе
Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Невыполненные процедуры рекомендуется Возобновить повторно.'");
Элементы.ТекстПояснения.Заголовок = НСтр("ru = 'Невыполненные процедуры рекомендуется запустить повторно.'");
КонецЕсли;
Если СтрокаОбработчикаОчисткиУстаревшихДанных <> Неопределено Тогда
ИндексСтроки = ОтложенныеОбработчики.Индекс(СтрокаОбработчикаОчисткиУстаревшихДанных);
ОтложенныеОбработчики.Сдвинуть(ИндексСтроки, ОтложенныеОбработчики.Количество() - 1 - ИндексСтроки);
СтрокаОбработчикаОчисткиУстаревшихДанных.ЭтоОбработчикОчисткиУстаревшихДанных = Истина;
СтрокаОбработчикаОчисткиУстаревшихДанных.ОбработчикДополнение =
НСтр("ru = 'Посмотреть и очистить устаревшие данные самостоятельно.'");
КонецЕсли;
НомерЭлемента = 1;
@@ -566,7 +605,8 @@
КонецПроцедуры
&НаСервере
Процедура ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета)
Процедура ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики,
НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета, СтрокаОбработчикаОчисткиУстаревшихДанных)
Если НачальноеЗаполнение Тогда
СтрокаСписка = ОтложенныеОбработчики.Добавить();
@@ -575,6 +615,9 @@
ПараметрыОтбора.Вставить("Идентификатор", СтрокаОбработчика.ИмяОбработчика);
СтрокаСписка = ОтложенныеОбработчики.НайтиСтроки(ПараметрыОтбора)[0];
КонецЕсли;
Если ОбновлениеИнформационнойБазыСлужебный.ЭтоОбработчикОчисткиУстаревшихДанных(СтрокаОбработчика) Тогда
СтрокаОбработчикаОчисткиУстаревшихДанных = СтрокаСписка;
КонецЕсли;
СтатистикаВыполнения = СтрокаОбработчика.СтатистикаВыполнения.Получить();
Loaded 100 of 198 files, more files were not shown because too many files have changed in this diff. Show more