3_1_6_159

This commit is contained in:
Компания 1С committed 2022-03-18 12:14:00 +03:00
1 parent 6bf07ee90b
commit 9623494cce
191 files changed
+4864 -3075

No files matched your search

@@ -18,6 +18,13 @@
МодульМультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// СтандартныеПодсистемы.ВерсионированиеОбъектов
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
КонецПроцедуры
#КонецОбласти
@@ -13,6 +13,13 @@
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Истина);
// СтандартныеПодсистемы.ВерсионированиеОбъектов
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
КонецПроцедуры
#КонецОбласти
@@ -97,6 +97,13 @@
МодульМультиязычностьСервер.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// СтандартныеПодсистемы.ВерсионированиеОбъектов
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
КонецПроцедуры
#КонецОбласти
@@ -93,6 +93,13 @@
МодульРаботаСАдресами.ЗаполнитьМаскиНомераТелефона(Элементы.ШаблонМаскиНомераТелефона.СписокВыбора);
КонецЕсли;
// СтандартныеПодсистемы.ВерсионированиеОбъектов
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
КонецПроцедуры
&НаКлиенте
@@ -114,6 +114,20 @@
// Конец СтандартныеПодсистемы.ПоискИУдалениеДублей
// СтандартныеПодсистемы.ВерсионированиеОбъектов
//
// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
// Настройки - Структура - настройки подсистемы.
//
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
#КонецОбласти
#КонецОбласти
@@ -225,10 +225,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -630,10 +630,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -596,10 +596,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -490,10 +490,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -490,10 +490,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -163,11 +163,7 @@
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
Если ОбновляемыйНабор.ДополнительныеРеквизиты.Количество() = 0
И ОбновляемыйНабор.ДополнительныеСведения.Количество() = 0 Тогда
ОтменитьТранзакцию();
Продолжить;
КонецЕсли;
ДлинаПрефикса = СтрДлина("Удалить");
ИмяНабора = Сред(ОбновляемыйНабор.ИмяПредопределенныхДанных, ДлинаПрефикса + 1, СтрДлина(ОбновляемыйНабор.ИмяПредопределенныхДанных) - ДлинаПрефикса);
ОписаниеНовогоНабора = ПредопределенныеНаборыСвойств.Получить(ИмяНабора); // см. Справочники.НаборыДополнительныхРеквизитовИСведений.СвойстваНабора
@@ -281,7 +277,8 @@
КонецЦикла;
Если ПроблемныхОбъектов <> 0 Тогда
ТекстСообщения = НСтр("ru = 'Процедура ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию завершилась с ошибкой. Не все наборы свойств удалось обновить.'");
ТекстСообщения = НСтр("ru = 'Процедура %1 завершилась с ошибкой. Не все наборы свойств удалось обновить.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
@@ -401,6 +398,14 @@
// Только для внутреннего использования.
//
// Параметры:
// НаборыСвойств - Соответствие
// Набор - СтрокаДереваЗначений:
// * Имя - Строка
// * ЭтоГруппа - Булево
// * Используется - Булево
// * Идентификатор - УникальныйИдентификатор
//
// Возвращаемое значение:
// Структура:
// * Имя - Строка
@@ -416,11 +421,13 @@
Функция СвойстваНабора(НаборыСвойств, Набор, Родитель = Неопределено, Наименования = Неопределено) Экспорт
ЗаголовокОшибки =
НСтр("ru = 'Ошибка в процедуре ПриСозданииПредопределенныхНаборовСвойств
|общего модуля УправлениеСвойствамиПереопределяемый.'")
НСтр("ru = 'Ошибка в процедуре %1
|общего модуля %2.'")
+ Символы.ПС
+ Символы.ПС;
ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокОшибки, "ПриСозданииПредопределенныхНаборовСвойств", "УправлениеСвойствамиПереопределяемый");
Если Не ЗначениеЗаполнено(Набор.Имя) Тогда
ВызватьИсключение ЗаголовокОшибки + НСтр("ru = 'Имя набора свойств не заполнено.'");
КонецЕсли;
@@ -188,6 +188,88 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>АдресРегистрацииУстройства</name>
<id>49</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.АдресРегистрацииУстройства</segments>
</dataPath>
<extendedTooltip>
<name>АдресРегистрацииУстройстваРасширеннаяПодсказка</name>
<id>51</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресРегистрацииУстройстваКонтекстноеМеню</name>
<id>50</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<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>46</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.АдресПеренаправленияВебКлиент</segments>
</dataPath>
<extendedTooltip>
<name>АдресПеренаправленияВебКлиентРасширеннаяПодсказка</name>
<id>48</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>АдресПеренаправленияВебКлиентКонтекстноеМеню</name>
<id>47</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">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<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>7</id>
@@ -53,13 +53,13 @@
НастройкиАвторизации.Вставить("ПарольПриложения");
НастройкиАвторизации.Вставить("ДополнительныеПараметрыАвторизации");
НастройкиАвторизации.Вставить("ДополнительныеПараметрыПолученияТокена");
НастройкиАвторизации.Вставить("ПояснениеПоАдресуПеренаправления");
НастройкиАвторизации.Вставить("ПояснениеПоИдентификаторуПриложения");
НастройкиАвторизации.Вставить("ПояснениеПоПаролюПриложения");
НастройкиАвторизации.Вставить("ПсевдонимАдресаПеренаправления");
НастройкиАвторизации.Вставить("ПсевдонимИдентификатораПриложения");
НастройкиАвторизации.Вставить("ПсевдонимПароляПриложения");
НастройкиАвторизации.Вставить("АдресПеренаправленияПоУмолчанию");
НастройкиАвторизации.Вставить("ПояснениеПоАдресуПеренаправления", "");
НастройкиАвторизации.Вставить("ПояснениеПоИдентификаторуПриложения", "");
НастройкиАвторизации.Вставить("ПояснениеПоПаролюПриложения", "");
НастройкиАвторизации.Вставить("ПсевдонимАдресаПеренаправления", "");
НастройкиАвторизации.Вставить("ПсевдонимИдентификатораПриложения", "");
НастройкиАвторизации.Вставить("ПсевдонимПароляПриложения", "");
НастройкиАвторизации.Вставить("АдресПеренаправленияПоУмолчанию", "");
ТекстЗапроса =
"ВЫБРАТЬ
@@ -109,17 +109,14 @@
УстановитьПривилегированныйРежим(Истина);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.НастройкиАвторизацииИнтернетСервисов");
Если ЗначениеЗаполнено(НастройкиАвторизации.Ссылка) Тогда
ЭлементБлокировки.УстановитьЗначение("Ссылка", НастройкиАвторизации.Ссылка);
КонецЕсли;
НачатьТранзакцию();
Попытка
Если ЗначениеЗаполнено(НастройкиАвторизации.Ссылка) Тогда
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.НастройкиАвторизацииИнтернетСервисов");
ЭлементБлокировки.УстановитьЗначение("Ссылка", НастройкиАвторизации.Ссылка);
Блокировка.Заблокировать();
Если ЗначениеЗаполнено(НастройкиАвторизации.Ссылка) Тогда
НастройкиАвторизацииОбъект = НастройкиАвторизации.Ссылка.ПолучитьОбъект();
Иначе
НастройкиАвторизацииОбъект = СоздатьЭлемент();
@@ -732,10 +732,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Пользователи поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -462,6 +462,10 @@
<segments>АдресФотографии</segments>
</dataPath>
<titleLocation>None</titleLocation>
<toolTip>
<key>ru</key>
<value>Выбрать фото</value>
</toolTip>
<extendedTooltip>
<name>ФотографияРасширеннаяПодсказка</name>
<id>355</id>
@@ -475,6 +479,58 @@
<contextMenu>
<name>ФотографияКонтекстноеМеню</name>
<id>354</id>
<items xsi:type="form:Button">
<name>ФотографияКонтекстноеМенюВыбратьФотографию</name>
<id>371</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФотографияКонтекстноеМенюВыбратьФотографиюРасширеннаяПодсказка</name>
<id>372</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ВыбратьФотографию</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФотографияКонтекстноеМенюОчиститьФотографию</name>
<id>369</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФотографияКонтекстноеМенюОчиститьФотографиюРасширеннаяПодсказка</name>
<id>370</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ОчиститьФотографию</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<autoFill>true</autoFill>
</contextMenu>
<type>PictureField</type>
@@ -2650,16 +2706,16 @@
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>349</id>
<name>ФормаВыбратьФотографию</name>
<id>373</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>350</id>
<name>ФормаВыбратьФотографиюРасширеннаяПодсказка</name>
<id>374</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -2667,7 +2723,7 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.StandardCommand.Help</commandName>
<commandName>Form.Command.ВыбратьФотографию</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
@@ -2813,6 +2869,32 @@
<importance>Normal</importance>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ФормаСправка</name>
<id>349</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСправкаРасширеннаяПодсказка</name>
<id>350</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>
@@ -3884,6 +3966,24 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ВыбратьФотографию</name>
<title>
<key>ru</key>
<value>Выбрать фотографию...</value>
</title>
<id>10</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ВыбратьФотографию</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<parameters>
<name>ГруппаНовогоПользователя</name>
<valueType>
@@ -37,9 +37,7 @@
Если НЕ ДоступноИзменениеПользователей Тогда
Если Объект.Ссылка.Пустая() Тогда
ВызватьИсключение
НСтр("ru = 'В демонстрационном режиме не поддерживается
|создание новых пользователей.'");
ВызватьИсключение НСтр("ru = 'В демонстрационном режиме создание новых учетных записей пользователей недоступно.'");
КонецЕсли;
ТолькоПросмотр = Истина;
КонецЕсли;
@@ -894,7 +892,6 @@
&НаКлиенте
Процедура ПотребоватьСменуПароляПриВходеРасширеннаяПодсказкаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьФорму("ОбщаяФорма.НастройкиВходаПользователей", , ЭтотОбъект);
КонецПроцедуры
@@ -904,7 +901,8 @@
ОповещениеОЗавершение = Новый ОписаниеОповещения("ФотографияНажатиеЗавершение", ЭтотОбъект);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершение,ПараметрыЗагрузки);
ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Изображения'") + "|*.JPG;*.JPEG;*.JP2;*.JPG2;*.PNG;*.BMP;*.TIFF";
ФайловаяСистемаКлиент.ЗагрузитьФайл(ОповещениеОЗавершение, ПараметрыЗагрузки);
КонецПроцедуры
&НаКлиенте
@@ -913,6 +911,17 @@
Возврат;
КонецЕсли;
Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(Результат.Хранение));
Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением.'"));
Возврат;
КонецЕсли;
Если Картинка.РазмерФайла() > 2 * 1024 * 1024 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать файл с изображением меньше 2 Мб.'"));
Возврат;
КонецЕсли;
Если ЭтоАдресВременногоХранилища(АдресФотографии) Тогда
УдалитьИзВременногоХранилища(АдресФотографии);
КонецЕсли;
@@ -1191,10 +1200,16 @@
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФотографию(Команда)
ФотографияНажатие(Элементы.Фотография, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФотографию(Команда)
АдресФотографии = ПоместитьВоВременноеХранилище(БиблиотекаКартинок.ПользовательБезФотографии, УникальныйИдентификатор);
ФотографияЗадана = Ложь;
Модифицированность = Истина;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
@@ -1220,7 +1235,6 @@
Процедура ВключитьРоли(Команда)
ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе");
ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект, Ложь);
КонецПроцедуры
@@ -1232,9 +1246,6 @@
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Поддержка дополнительных реквизитов.
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
@@ -360,10 +360,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -138,6 +138,63 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Addition">
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<name>СписокПоиск</name>
<id>39</id>
<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>
<contextMenu>
<name>СписокПоискКонтекстноеМеню</name>
<id>40</id>
<autoFill>true</autoFill>
</contextMenu>
<source>Список</source>
<extInfo xsi:type="form:SearchStringAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</items>
<items xsi:type="form:Addition">
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<name>СписокПоискУправление</name>
<id>42</id>
<extendedTooltip>
<name>СписокПоискУправлениеРасширеннаяПодсказка</name>
<id>44</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СписокПоискУправлениеКонтекстноеМеню</name>
<id>43</id>
<autoFill>true</autoFill>
</contextMenu>
<type>SearchControlAddition</type>
<source>Список</source>
<extInfo xsi:type="form:SearchControlAdditionExtInfo">
<autoMaxWidth>true</autoMaxWidth>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -485,10 +485,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -154,7 +154,7 @@
НачатьТранзакцию();
Попытка
ЕстьУдаленные = Ложь;
Удаленные = Новый Массив;
ЕстьТекущиеИзменения = Ложь;
СтароеЗначение = Неопределено;
@@ -162,14 +162,14 @@
"СтандартныеПодсистемы.УправлениеДоступом.ПредопределенныеПрофилиГруппДоступа",
ПредопределенныеПрофили, , СтароеЗначение);
Если Не ПредопределенныеПрофилиСовпадают(ПредопределенныеПрофили, СтароеЗначение, ЕстьУдаленные) Тогда
Если Не ПредопределенныеПрофилиСовпадают(ПредопределенныеПрофили, СтароеЗначение, Удаленные) Тогда
ЕстьТекущиеИзменения = Истина;
КонецЕсли;
СтандартныеПодсистемыСервер.ДобавитьИзмененияПараметраРаботыПрограммы(
"СтандартныеПодсистемы.УправлениеДоступом.ПредопределенныеПрофилиГруппДоступа",
?(ЕстьУдаленные,
Новый ФиксированнаяСтруктура("ЕстьУдаленные", Истина),
?(ЗначениеЗаполнено(Удаленные),
Новый ФиксированнаяСтруктура("Удаленные", Новый ФиксированныйМассив(Удаленные)),
Новый ФиксированнаяСтруктура()) );
ЗафиксироватьТранзакцию();
@@ -199,9 +199,29 @@
Возврат;
КонецЕсли;
Удаленные = Новый Массив;
Если ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() Тогда
ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы(
"СтандартныеПодсистемы.УправлениеДоступом.ПредопределенныеПрофилиГруппДоступа");
Если ПоследниеИзменения <> Неопределено Тогда
Для Каждого ЧастьИзменений Из ПоследниеИзменения Цикл
Если ТипЗнч(ЧастьИзменений) = Тип("ФиксированнаяСтруктура")
И ЧастьИзменений.Свойство("Удаленные")
И ТипЗнч(ЧастьИзменений.Удаленные) = Тип("ФиксированныйМассив") Тогда
Для Каждого Удаленный Из ЧастьИзменений.Удаленные Цикл
Удаленные.Добавить(Удаленный);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
ОбновитьПоставляемыеПрофили();
ОбновитьПоставляемыеПрофили(, Удаленные);
СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, НовоеЗначение, Истина);
КонецПроцедуры
@@ -238,19 +258,22 @@
// Параметры:
// ЕстьИзменения - Булево - возвращаемое значение. Если производилась запись,
// устанавливается Истина, иначе не изменяется.
// Удаленные - Массив - имена предопределенных элементов, которые были удалены,
// используются для снятия пометки удаления с поставляемых данных с теми же именами.
// - Неопределено
//
Процедура ОбновитьПоставляемыеПрофили(ЕстьИзменения = Неопределено) Экспорт
Процедура ОбновитьПоставляемыеПрофили(ЕстьИзменения = Неопределено, Удаленные = Неопределено) Экспорт
ПоставляемыеПрофили = УправлениеДоступомСлужебный.ПоставляемыеПрофили();
ТекущиеПапкиПрофилей = ТекущиеПапкиПрофилей();
ОбновитьПоставляемыеПапкиПрофилей("", ТекущиеПапкиПрофилей, ПоставляемыеПрофили, ЕстьИзменения);
ОбновитьПоставляемыеПапкиПрофилей("", ТекущиеПапкиПрофилей, ПоставляемыеПрофили, Удаленные, ЕстьИзменения);
ПометитьНаУдалениеУстаревшиеПоставляемыеДанные(ТекущиеПапкиПрофилей, ЕстьИзменения);
ТекущиеПрофили = ТекущиеПрофили();
ОбновленныеПрофили = Новый Массив;
ОбновитьПоставляемыеПрофилиБезПапок(ОбновленныеПрофили,
ТекущиеПрофили, ТекущиеПапкиПрофилей, ПоставляемыеПрофили, ЕстьИзменения);
ТекущиеПрофили, ТекущиеПапкиПрофилей, ПоставляемыеПрофили, Удаленные, ЕстьИзменения);
ПометитьНаУдалениеУстаревшиеПоставляемыеДанные(ТекущиеПрофили, ЕстьИзменения, ОбновленныеПрофили);
ОбновитьВспомогательныеДанныеПрофилей(ОбновленныеПрофили, ЕстьИзменения);
@@ -956,7 +979,11 @@
Если СтароеЗначение <> НовоеЗначение Тогда
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, НовоеЗначение, Истина);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
Кэш.Проверка.Дата = ТекущаяДатаСеанса;
@@ -1301,7 +1328,11 @@
Если СтароеЗначение <> НовоеЗначение Тогда
УправлениеДоступомСлужебный.ПроверитьАктуальностьМетаданных();
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, НовоеЗначение, Истина);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
Кэш.Проверка.Дата = ТекущаяДатаСеанса;
@@ -1879,7 +1910,11 @@
//
Функция ХешСуммаПоставляемыхПрофилей(ПоставляемыеПрофили) Экспорт
Возврат УправлениеДоступомСлужебный.ХешСуммаДанных(ПоставляемыеПрофили);
ДанныеДляХеширования = Новый Структура(ПоставляемыеПрофили);
ДанныеДляХеширования.Вставить("ИменаПредопределенных",
Метаданные.Справочники.ПрофилиГруппДоступа.ПолучитьИменаПредопределенных());
Возврат УправлениеДоступомСлужебный.ХешСуммаДанных(ДанныеДляХеширования);
КонецФункции
@@ -2229,10 +2264,9 @@
КонецФункции
// Для процедуры ОбновитьСоставПредопределенныхПрофилей.
Функция ПредопределенныеПрофилиСовпадают(НовыеПрофили, СтарыеПрофили, ЕстьУдаленные)
Функция ПредопределенныеПрофилиСовпадают(НовыеПрофили, СтарыеПрофили, Удаленные)
Если ТипЗнч(НовыеПрофили) <> ТипЗнч(СтарыеПрофили) Тогда
ЕстьУдаленные = Истина;
Возврат Ложь;
КонецЕсли;
@@ -2242,8 +2276,7 @@
Для Каждого Профиль Из СтарыеПрофили Цикл
Если НовыеПрофили.Найти(Профиль) = Неопределено Тогда
ПредопределенныеПрофилиСовпадают = Ложь;
ЕстьУдаленные = Истина;
Прервать;
Удаленные.Добавить(Профиль);
КонецЕсли;
КонецЦикла;
@@ -2252,7 +2285,7 @@
КонецФункции
// Для процедуры ОбновитьПоставляемыеПрофили.
Процедура ОбновитьПоставляемыеПапкиПрофилей(Родитель, ТекущиеПапкиПрофилей, ПоставляемыеПрофили, ЕстьИзменения)
Процедура ОбновитьПоставляемыеПапкиПрофилей(Родитель, ТекущиеПапкиПрофилей, ПоставляемыеПрофили, Удаленные, ЕстьИзменения)
ПапкиРодителя = ПоставляемыеПрофили.ПапкиПоРодителям.Получить(Родитель);
Если Не ЗначениеЗаполнено(ПапкиРодителя) Тогда
@@ -2268,12 +2301,12 @@
СтрокаТекущейПапки.Найден = Истина;
КонецЕсли;
Если ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Истина) Тогда
Если ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Удаленные, Истина) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
ОбновитьПоставляемыеПапкиПрофилей(КлючИЗначение.Ключ,
ТекущиеПапкиПрофилей, ПоставляемыеПрофили, ЕстьИзменения);
ТекущиеПапкиПрофилей, ПоставляемыеПрофили, Удаленные, ЕстьИзменения);
КонецЦикла;
КонецПроцедуры
@@ -2320,7 +2353,7 @@
// Для процедуры ОбновитьПоставляемыеПрофили.
Процедура ОбновитьПоставляемыеПрофилиБезПапок(ОбновленныеПрофили, ТекущиеПрофили,
ТекущиеПапкиПрофилей, ПоставляемыеПрофили, ЕстьИзменения)
ТекущиеПапкиПрофилей, ПоставляемыеПрофили, Удаленные, ЕстьИзменения)
ОписанияПрофилей = ПоставляемыеПрофили.ОписанияПрофилейМассив;
ПараметрыОбновления = ПоставляемыеПрофили.ПараметрыОбновления;
@@ -2338,7 +2371,7 @@
Если СтрокаТекущегоПрофиля = Неопределено Тогда
// Создание нового поставляемого профиля.
Если ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Истина) Тогда
Если ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Удаленные, Истина) Тогда
ЕстьИзменения = Истина;
КонецЕсли;
Профиль = ПоставляемыйПрофильПоИдентификатору(СвойстваПрофиля.Идентификатор);
@@ -2350,7 +2383,7 @@
Если Не СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен
Или ПараметрыОбновления.ОбновлятьИзмененныеПрофили Тогда
// Обновление поставляемого профиля.
ПрофильОбновлен = ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Истина);
ПрофильОбновлен = ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Удаленные, Истина);
КонецЕсли;
КонецЕсли;
@@ -2376,13 +2409,18 @@
//
// Параметры:
// СвойстваПрофиля - см. СвойстваПоставляемогоПрофиля
// Удаленные - Массив
// - Неопределено
// НеОбновлятьРолиПользователей - Булево
//
// Возвращаемое значение:
// Булево - Истина - профиль изменен.
//
Функция ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, НеОбновлятьРолиПользователей = Ложь)
Функция ОбновитьПрофильИлиПапкуПрофилей(СвойстваПрофиля, Удаленные = Неопределено, НеОбновлятьРолиПользователей = Ложь)
ПрофильИзменен = Ложь;
УдаленПредопределенныйЭлементПапкиИлиПрофиля = ТипЗнч(Удаленные) = Тип("Массив")
И Удаленные.Найти(СвойстваПрофиля.Имя) <> Неопределено;
ПрофильСсылка = ПоставляемыйПрофильПоИдентификатору(СвойстваПрофиля.Идентификатор);
Если ПрофильСсылка = Неопределено Тогда
@@ -2467,7 +2505,8 @@
ПрофильИзменен = Истина;
Иначе
ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект();
ПрофильИзменен = ПоставляемыйПрофильИзменен(ПрофильОбъект);
ПрофильИзменен = ПоставляемыйПрофильИзменен(ПрофильОбъект)
Или УдаленПредопределенныйЭлементПапкиИлиПрофиля;
КонецЕсли;
Если ПрофильИзменен Тогда
@@ -2478,6 +2517,10 @@
ЗаблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка, ПрофильОбъект.ВерсияДанных);
КонецЕсли;
Если УдаленПредопределенныйЭлементПапкиИлиПрофиля Тогда
ПрофильОбъект.ПометкаУдаления = Ложь;
КонецЕсли;
ПрофильОбъект.Наименование = СвойстваПрофиля.Наименование;
Если ЗначениеЗаполнено(СвойстваПрофиля.Родитель) Тогда
@@ -1118,10 +1118,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -763,7 +763,7 @@
УстановитьЭлемент(ЭтотОбъект, "НаличиеСертификата", Истина, ОписаниеОшибки, , ОбъединятьРезультаты);
// Если не нашли сертификат в хранилище сертификатов, проверки прекращаются.
Если Не Результат.Выполнено Тогда
Если Не ПустаяСтрока(ОписаниеОшибки) Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение);
Возврат;
КонецЕсли;
@@ -499,10 +499,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -809,7 +809,7 @@
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаExtraCryptoAPI_3_0_1_26</name>
<name>КомпонентаExtraCryptoAPI_3_0_1_27</name>
<synonym>
<key>ru</key>
<value>Компонента ExtraCryptoAPI</value>
@@ -727,6 +727,16 @@
<Value>false</Value>
<Value>Djibouti</Value>
</row>
<row>
<Value>ДОНЕЦКАЯ НАРОДНАЯ РЕСПУБЛИКА</Value>
<Value>DN</Value>
<Value>DNR</Value>
<Value>897</Value>
<Value>Донецкая Народная Республика</Value>
<Value>false</Value>
<Value>false</Value>
<Value>Donetskaya Narodnaya Respublika</Value>
</row>
<row>
<Value>ДОМИНИКА</Value>
<Value>DM</Value>
@@ -775,7 +785,7 @@
<Value/>
<Value>false</Value>
<Value>false</Value>
<Value>Western Sahara*</Value>
<Value>Western Sahara</Value>
</row>
<row>
<Value>ЗИМБАБВЕ</Value>
@@ -1207,6 +1217,16 @@
<Value>false</Value>
<Value>Liechtenstein</Value>
</row>
<row>
<Value>ЛУГАНСКАЯ НАРОДНАЯ РЕСПУБЛИКА</Value>
<Value>LN</Value>
<Value>LNR</Value>
<Value>898</Value>
<Value>Луганская Народная Республика</Value>
<Value>false</Value>
<Value>false</Value>
<Value>Luganskaya Narodnaya Respublika</Value>
</row>
<row>
<Value>ЛЮКСЕМБУРГ</Value>
<Value>LU</Value>
@@ -199,24 +199,23 @@
ТекстПротокола = РезультатДиагностики.ЖурналДиагностики;
ИначеЕсли СтруктураРезультата.КодОшибки = 404 Тогда
ТекстОшибки = НСтр("ru = 'Проверьте правильность указанной корневой папки.'");
ТекстОшибки = НСтр("ru = 'Проверьте, что указанная корневая папка существует в облачном сервисе.'");
ИначеЕсли СтруктураРезультата.КодОшибки = 401 Тогда
ТекстОшибки = НСтр("ru = 'Проверьте правильность введенных логина/пароля.'");
ТекстОшибки = НСтр("ru = 'Проверьте правильность введенных логина и пароля.'");
Иначе
ТекстОшибки = НСтр("ru = 'Проверьте правильность введенных данных.'");
КонецЕсли;
ПоказатьПредупреждение(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Проверка параметров учетной записи завершилась с ошибками.
|%1
НСтр("ru = 'Некорректные параметры для синхронизации файлов.
|Сервис %1 вернул код ошибки %2. %3
|
|Технические подробности:
|%2'"),
ТекстОшибки,
ТекстПротокола));
|%4'"),
Сервис, СтруктураРезультата.КодОшибки, ТекстОшибки, ТекстПротокола));
Иначе
ПоказатьПредупреждение(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Проверка параметров учетной записи завершилась успешно.
НСтр("ru = 'Проверка параметров для синхронизации файлов завершилась успешно.
|%1'"),
РезультатТекст));
КонецЕсли;
@@ -298,8 +298,63 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>СпособАутентификации</name>
<id>362</id>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СпособАутентификации</segments>
</dataPath>
<titleLocation>None</titleLocation>
<extendedTooltip>
<name>СпособАутентификацииРасширеннаяПодсказка</name>
<id>364</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СпособАутентификацииКонтекстноеМеню</name>
<id>363</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<radioButtonsType>RadioButtons</radioButtonsType>
<columnsCount>1</columnsCount>
<choiceList>
<presentation>
<key>ru</key>
<value>Авторизоваться на почтовом сервисе</value>
</presentation>
<value xsi:type="core:StringValue">
<value>OAuth</value>
</value>
</choiceList>
<choiceList>
<presentation>
<key>ru</key>
<value>Ввести пароль</value>
</presentation>
<value xsi:type="core:StringValue">
<value>Пароль</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Группа1</name>
<name>ГруппаСпособАутентификацииПароль</name>
<id>298</id>
<items xsi:type="form:FormField">
<name>СпособАутентификацииПароль</name>
@@ -422,10 +477,10 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа1</value>
<value>Способ аутентификации пароль</value>
</title>
<extendedTooltip>
<name>Группа1РасширеннаяПодсказка</name>
<name>ГруппаСпособАутентификацииПарольРасширеннаяПодсказка</name>
<id>299</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -456,6 +511,7 @@
<segments>СпособАутентификации</segments>
</dataPath>
<titleLocation>None</titleLocation>
<shortcut>Ctrl+S</shortcut>
<handlers>
<event>OnChange</event>
<name>СпособАутентификацииПриИзменении</name>
@@ -485,7 +541,7 @@
<choiceList>
<presentation>
<key>ru</key>
<value>Авторизоваться с помощью почтового сервиса</value>
<value>Авторизоваться на почтовом сервисе</value>
</presentation>
<value xsi:type="core:StringValue">
<value>OAuth</value>
@@ -1636,7 +1692,6 @@
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
@@ -1714,7 +1769,6 @@
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
@@ -1792,7 +1846,6 @@
<formatted>true</formatted>
<type>Label</type>
<maxWidth>50</maxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
@@ -71,7 +71,7 @@
Элементы.Пароль.Доступность = Ложь;
Если ТолькоАвторизация Тогда
НастройкиАвторизации = НастройкиАвторизацииНаПочтовомСервере();
Если ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
Если ЗначениеЗаполнено(НастройкиАвторизации) И ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
ИдентификаторПриложения = НастройкиАвторизации.ИдентификаторПриложения;
АдресПеренаправления = НастройкиАвторизации.АдресПеренаправления;
Если ЭтоВебКлиент() Тогда
@@ -79,9 +79,8 @@
КонецЕсли;
ПарольПриложения = НастройкиАвторизации.ПарольПриложения;
КонецЕсли;
Если ЗначениеЗаполнено(НастройкиАвторизации.ИдентификаторПриложения) Тогда
Элементы.Страницы.ТекущаяСтраница = Элементы.Авторизация;
Если ЭтоВебКлиент() Тогда
Элементы.ВариантыАвторизации.ТекущаяСтраница = Элементы.БраузерОперационнойСистемы;
Иначе
@@ -119,19 +118,21 @@
ТребуетсяАвторизацияПриОтправкеПисем = Истина;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.Пароль.РастягиватьПоГоризонтали = Истина;
Элементы.СпособАутентификации.Видимость = Истина;
Элементы.СпособАутентификацииПароль.Видимость = Ложь;
Элементы.СпособАутентификацииПочтовыйСервис.Видимость = Ложь;
Элементы.ГруппаСпособАутентификацииПароль.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
Элементы.Пароль.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ТолькоАвторизация Тогда
УстановитьТекстыПоясненийПоРегистрацииПриложения();
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Авторизация Тогда
АвторизоватьсяНаПочтовомСервере();
КонецЕсли;
КонецЕсли;
НастроитьЭлементыТекущейСтраницы();
ПодключитьОбработчикОжидания("НастроитьЭлементыТекущейСтраницыПриОткрытии", 0.1, Истина);
КонецПроцедуры
@@ -431,6 +432,10 @@
&НаКлиенте
Процедура УстановитьТекстыПоясненийПоРегистрацииПриложения()
Если Не ЗначениеЗаполнено(НастройкиАвторизации) Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(НастройкиАвторизации.ПояснениеПоАдресуПеренаправления)
И Не ЗначениеЗаполнено(НастройкиАвторизации.ПояснениеПоИдентификаторуПриложения)
И Не ЗначениеЗаполнено(НастройкиАвторизации.ПояснениеПоПаролюПриложения) Тогда
@@ -1461,4 +1466,23 @@
КонецФункции
&НаКлиенте
Процедура НастроитьЭлементыТекущейСтраницыПриОткрытии()
Если ТолькоАвторизация Тогда
Если Не ЗначениеЗаполнено(НастройкиАвторизации) Тогда
Закрыть(НСтр("ru = 'Не найдены настройки авторизации для указанного адреса электронной почты.
|Используйте авторизацию по логину и паролю.'"));
Возврат;
КонецЕсли;
УстановитьТекстыПоясненийПоРегистрацииПриложения();
Если Элементы.Страницы.ТекущаяСтраница = Элементы.Авторизация Тогда
АвторизоватьсяНаПочтовомСервере();
КонецЕсли;
КонецЕсли;
НастроитьЭлементыТекущейСтраницы();
КонецПроцедуры
#КонецОбласти
@@ -3,6 +3,7 @@
<items xsi:type="form:FormGroup">
<name>Шапка</name>
<id>86</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>Наименование</name>
<id>1</id>
@@ -184,6 +185,7 @@
<items xsi:type="form:FormGroup">
<name>ИспользоватьУчетнуюЗапись</name>
<id>88</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>ДляОтправки</name>
<id>90</id>
@@ -302,6 +304,7 @@
<items xsi:type="form:FormGroup">
<name>ГруппаДляКогоУчетнаяЗапись</name>
<id>222</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>ДляКогоУчетнаяЗапись</name>
<id>224</id>
@@ -449,9 +452,11 @@
<items xsi:type="form:FormGroup">
<name>НастройкиСоединения</name>
<id>96</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>Протокол</name>
<id>108</id>
<displayImportance>VeryHigh</displayImportance>
<title>
<key>ru</key>
<value>Тип учетной записи</value>
@@ -516,12 +521,10 @@
<dropListWidth>4</dropListWidth>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ЛогинПароль</name>
<id>263</id>
<items xsi:type="form:FormField">
<name>Логин</name>
<id>102</id>
<displayImportance>VeryHigh</displayImportance>
<title>
<key>ru</key>
<value>Логин</value>
@@ -566,18 +569,26 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>СпособАутентификацииПочтовыйСервис</name>
<id>296</id>
<displayImportance>VeryHigh</displayImportance>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Логин пароль</value>
</title>
<dataPath xsi:type="form:DataPath">
<segments>СпособАутентификации</segments>
</dataPath>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>СпособАутентификацииПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ЛогинПарольРасширеннаяПодсказка</name>
<id>264</id>
<name>СпособАутентификацииПочтовыйСервисРасширеннаяПодсказка</name>
<id>298</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -585,22 +596,38 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
<contextMenu>
<name>СпособАутентификацииПочтовыйСервисКонтекстноеМеню</name>
<id>297</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<radioButtonsType>RadioButtons</radioButtonsType>
<choiceList>
<presentation>
<key>ru</key>
<value>Авторизация на почтовом сервисе</value>
</presentation>
<value xsi:type="core:StringValue">
<value>OAuth</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>Группа1</name>
<id>283</id>
<name>ВыборСпособаАутентификации</name>
<id>291</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>СпособАутентификацииПароль</name>
<id>280</id>
<displayImportance>VeryHigh</displayImportance>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -635,6 +662,7 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<radioButtonsType>RadioButtons</radioButtonsType>
<choiceList>
<presentation>
<key>ru</key>
@@ -650,6 +678,7 @@
<items xsi:type="form:FormField">
<name>Пароль</name>
<id>105</id>
<displayImportance>VeryHigh</displayImportance>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -714,11 +743,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Группа1</value>
<value>Атата</value>
</title>
<extendedTooltip>
<name>Группа1РасширеннаяПодсказка</name>
<id>284</id>
<name>ВыборСпособаАутентификацииРасширеннаяПодсказка</name>
<id>292</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -736,58 +765,10 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>СпособАутентификации</name>
<id>285</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>СпособАутентификации</segments>
</dataPath>
<titleLocation>None</titleLocation>
<handlers>
<event>OnChange</event>
<name>СпособАутентификацииПриИзменении</name>
</handlers>
<extendedTooltip>
<name>СпособАутентификацииРасширеннаяПодсказка</name>
<id>287</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>СпособАутентификацииКонтекстноеМеню</name>
<id>286</id>
<autoFill>true</autoFill>
</contextMenu>
<type>RadioButtonField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:RadioButtonsFieldExtInfo">
<choiceList>
<presentation>
<key>ru</key>
<value>Авторизоваться с помощью почтового сервиса</value>
</presentation>
<value xsi:type="core:StringValue">
<value>OAuth</value>
</value>
</choiceList>
<orientation>Vertical</orientation>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ОставлятьПисьмаНаСервере</name>
<id>185</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>ОставлятьКопииПисемНаСервере</name>
<id>130</id>
@@ -1043,6 +1024,7 @@
<items xsi:type="form:FormGroup">
<name>НастройкиСервераВходящейПочты</name>
<id>125</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>СерверВходящейПочты</name>
<id>113</id>
@@ -1229,6 +1211,7 @@
<items xsi:type="form:FormGroup">
<name>НастройкиСервераИсходящейПочты</name>
<id>158</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormField">
<name>СерверИсходящейПочты</name>
<id>174</id>
@@ -1455,6 +1438,7 @@
<items xsi:type="form:FormGroup">
<name>ОтправкаПисем</name>
<id>100</id>
<displayImportance>VeryHigh</displayImportance>
<items xsi:type="form:FormGroup">
<name>ГруппаТребуетсяАвторизация</name>
<id>258</id>
@@ -2288,12 +2272,7 @@
</parameters>
<commandInterface>
<navigationPanel/>
<commandBar>
<cmiFragmentRecord>
<command>0</command>
<userVisible/>
</cmiFragmentRecord>
</commandBar>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:CatalogFormExtInfo">
<handlers>
@@ -40,6 +40,19 @@
ЦветПодсветки = ЦветаСтиля.ПоясняющийОшибкуТекст;
ИдентификаторИсправления = Параметры.ИдентификаторИсправления;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.СпособАутентификацииПочтовыйСервис.Видимость = Ложь;
Элементы.СпособАутентификацииПароль.СписокВыбора.Очистить();
Элементы.СпособАутентификацииПароль.СписокВыбора.Добавить("OAuth", НСтр("ru = 'Авторизация на почтовом сервисе'"));
Элементы.СпособАутентификацииПароль.СписокВыбора.Добавить("Пароль", НСтр("ru = 'Использовать пароль'"));
Элементы.Пароль.РастягиватьПоГоризонтали = Истина;
Элементы.Пароль.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
Элементы.Пароль.Видимость = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
КонецЕсли;
КонецПроцедуры
&НаСервере
@@ -322,7 +335,12 @@
Процедура СпособАутентификацииПриИзменении(Элемент)
Объект.АвторизацияСПомощьюПочтовогоСервиса = СпособАутентификации = "OAuth";
#Если МобильныйКлиент Тогда
Элементы.Пароль.Видимость = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
#Иначе
Элементы.Пароль.Доступность = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
#КонецЕсли
Если Объект.АвторизацияСПомощьюПочтовогоСервиса Тогда
ОткрытьФормуПомощникаНастроек(Истина);
@@ -588,7 +606,16 @@
Если Результат <> Истина Тогда
Объект.АвторизацияСПомощьюПочтовогоСервиса = Ложь;
СпособАутентификации = "Пароль";
ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Не удалось авторизоваться на почтовом сервере.'"));
#Если МобильныйКлиент Тогда
Элементы.Пароль.Видимость = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
#Иначе
Элементы.Пароль.Доступность = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
#КонецЕсли
ТекстПредупреждения = НСтр("ru = 'Не удалось авторизоваться на почтовом сервисе.'");
Если ТипЗнч(Результат) = Тип("Строка") Тогда
ТекстПредупреждения = ТекстПредупреждения + Символы.ПС + Результат;
КонецЕсли;
ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецЕсли;
Возврат;
КонецЕсли;
@@ -646,7 +673,12 @@
Иначе
СпособАутентификации = "Пароль";
КонецЕсли;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.Пароль.Видимость = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
Иначе
Элементы.Пароль.Доступность = Не Объект.АвторизацияСПомощьюПочтовогоСервиса;
КонецЕсли;
КонецПроцедуры
@@ -312,84 +312,6 @@
<items xsi:type="form:FormGroup">
<name>ФормаГруппаКомандЭлектроннаяПодпись</name>
<id>129</id>
<items xsi:type="form:Button">
<name>ФормаПодписатьФайлЭП</name>
<id>289</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаПодписатьФайлЭПРасширеннаяПодсказка</name>
<id>292</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.Подписать</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаДобавитьЭПИзФайла</name>
<id>290</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаДобавитьЭПИзФайлаРасширеннаяПодсказка</name>
<id>293</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.ДобавитьЭПИзФайла</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаСохранитьВместеСЭП</name>
<id>291</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСохранитьВместеСЭПРасширеннаяПодсказка</name>
<id>294</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.СохранитьВместеСЭП</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ФормаПодписать</name>
<id>19</id>
@@ -353,10 +353,6 @@
</extInfo>
</items>
<items xsi:type="form:Addition">
<title>
<key>ru</key>
<value>Список поиск управление</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -40,14 +40,15 @@
|
|%1
|
|<a href = ""ЖурналРегистрации"">Техническая информация о причине блокировки</a>
|<a href = ""%2"">Техническая информация о причине блокировки</a>
|
|• Если информационная база будет использоваться для ведения учета, нажмите <b>Информационная база перемещена</b>.
|• Если это копия информационной базы, нажмите <b>Это копия информационной базы</b>.
|%2
|%3
|
|%3'"),
|%4'"),
ПараметрыБлокировки.ПричинаБлокировки,
"ЖурналРегистрации",
УточнениеМасштабируемыйКластер,
ТекстСнятияБлокировки);
ИначеЕсли Не РазделениеВключено И ИзменилосьРазделение Тогда
@@ -569,6 +569,7 @@
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<multiLine>true</multiLine>
<openButton>true</openButton>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
@@ -56,7 +56,7 @@
Элементы.ПредставлениеДанных.Гиперссылка = Параметры.ПредставлениеДанныхОткрывается;
Если ЗначениеЗаполнено(Параметры.ТипПодписи) Тогда
Если Параметры.ТипПодписи = Перечисления.ТипыПодписиКриптографии.CAdESAv3
Если Параметры.ТипПодписи = Перечисления.ТипыПодписиКриптографии.АрхивнаяCAdESAv3
Или Параметры.ТипПодписи = Перечисления.ТипыПодписиКриптографии.CAdESAv2 Тогда
Элементы.ДобавитьАрхивнуюМеткуВремени.Видимость = Ложь;
@@ -96,9 +96,9 @@
|%1'"), ТипПодписи);
Иначе
ТипПодписи = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
Если ТипПодписи = Перечисления.ТипыПодписиКриптографии.CAdESBES
Если ТипПодписи = Перечисления.ТипыПодписиКриптографии.БазоваяCAdESBES
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.ПустаяСсылка()
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.CMS Тогда
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS Тогда
ТипПодписи = Элементы.ТипПодписи.СписокВыбора[0].Значение;
КонецЕсли;
КонецЕсли;
@@ -164,6 +164,7 @@
Оповещение = Новый ОписаниеОповещения("ПослеВыполнения", ЭтотОбъект);
ЭлектроннаяПодписьКлиент.УсовершенствоватьПодпись(ОписаниеДанных, ЭтотОбъект, Оповещение, Ложь);
Элементы.ВыполнитьДействия.Доступность = Ложь;
КонецПроцедуры
@@ -230,14 +231,18 @@
&НаКлиенте
Процедура ПослеВыполнения(Результат, Контекст) Экспорт
Элементы.ВыполнитьДействия.Доступность = Истина;
Оповестить("Запись_Подпись");
Если Не Результат.Успех Тогда
Если Результат.СвойстваПодписей <> Неопределено Тогда
Для Каждого СвойствоПодписи Из Результат.СвойстваПодписей Цикл
Если СвойствоПодписи.Свойство("Ошибка") Тогда
НоваяСтрока = Ошибки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойствоПодписи);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Элементы.Ошибки.Видимость = Ошибки.Количество() > 0;
Если ЗначениеЗаполнено(Результат.ТекстОшибки) Тогда
@@ -11,6 +11,11 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
ВызватьИсключение НСтр("ru = 'Редактирование табличного документа недоступно в мобильном клиенте.
|Используйте тонкий клиент или веб-клиент.'");
КонецЕсли;
Если Параметры.РежимОткрытияОкна <> Неопределено Тогда
РежимОткрытияОкна = Параметры.РежимОткрытияОкна;
КонецЕсли;
@@ -636,8 +641,20 @@
Процедура ЗаписатьТабличныйДокументИмяФайлаВыбрано(Знач ОбработчикЗавершения)
Если ПустаяСтрока(Параметры.ПутьКФайлу) Тогда
ЗаписатьМакет();
ПослеЗаписиТабличногоДокумента(ОбработчикЗавершения);
АдресМакетаВоВременномХранилище = "";
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("АдресМакетаВоВременномХранилище", АдресМакетаВоВременномХранилище);
ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения);
ОчиститьСообщения();
Если ЗаписатьМакет(Истина, ДополнительныеПараметры.АдресМакетаВоВременномХранилище) Тогда
ПослеЗаписиТабличногоДокумента(ДополнительныеПараметры.ОбработчикЗавершения);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьЗаписьТабличногоДокумента", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Макет содержит ошибки. Продолжить запись?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
КонецЕсли;
Иначе
ТабличныйДокумент.НачатьЗапись(
Новый ОписаниеОповещения("ОбработатьРезультатЗаписиТабличногоДокумента", ЭтотОбъект, ОбработчикЗавершения),
@@ -646,6 +663,16 @@
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьЗаписьТабличногоДокумента(РезультатДиалога, ДополнительныеПараметры) Экспорт
Если РезультатДиалога = КодВозвратаДиалога.Да Тогда
ЗаписатьМакет(Ложь, ДополнительныеПараметры.АдресМакетаВоВременномХранилище);
ПослеЗаписиТабличногоДокумента(ДополнительныеПараметры.ОбработчикЗавершения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьРезультатЗаписиТабличногоДокумента(Результат, ОбработчикЗавершения) Экспорт
Если Результат <> Истина Тогда
@@ -1685,7 +1712,7 @@
#КонецОбласти
&НаСервере
Функция ПодготовитьМакетДляЗаписи(УстановитьКодЯзыка = Истина)
Функция ПодготовитьМакетДляЗаписи(УстановитьКодЯзыка = Истина, Отказ = Ложь)
КодЯзыка = Неопределено;
Если УстановитьКодЯзыка Тогда
@@ -1713,23 +1740,24 @@
КонецЕсли;
Если ЗначениеЗаполнено(Область.Текст) Тогда
ЗаменитьПредставленияПараметров(Область.Текст);
ПредставлениеПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'стр. %1 кол. %2'"), НомерСтроки, НомерКолонки);
ЗаменитьПредставленияПараметров(Область.Текст, , Отказ, ПредставлениеПоля);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстСлева);
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстВЦентре);
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстСправа);
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстСлева);
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстВЦентре);
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстСправа);
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстСлева, "ТекстСлеваСверху", Отказ, НСтр("ru = 'верхний колонтитул слева'"));
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстВЦентре, "ТекстВЦентреСверху", Отказ, НСтр("ru = 'верхний колонтитул в центре'"));
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстСправа, "ТекстСправаСверху", Отказ, НСтр("ru = 'верхний колонтитул справа'"));
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстСлева, "ТекстСлеваСнизу", Отказ, НСтр("ru = 'нижний колонтитул слева'"));
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстВЦентре, "ТекстВЦентреСнизу", Отказ, НСтр("ru = 'нижний колонтитул в центре'"));
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстСправа, "ТекстСправаСнизу", Отказ, НСтр("ru = 'нижний колонтитул справа'"));
Для Каждого Область Из Макет.Области Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
ЗаменитьПредставленияПараметров(Область.ПараметрРасшифровки);
ЗаменитьПредставленияПараметров(Область.ПараметрРасшифровки, , Отказ, Область.Имя);
КонецЕсли;
КонецЦикла;
@@ -1738,10 +1766,34 @@
КонецФункции
&НаСервере
Процедура ЗаменитьПредставленияПараметров(Строка)
Процедура ЗаменитьПредставленияПараметров(Строка, Поле = Неопределено, Отказ = Ложь, ПредставлениеПоля = "")
ПараметрыЗамены = ФормулыИзТекста(Строка(Строка));
Для Каждого Параметр Из ПараметрыЗамены Цикл
Формула = Параметр.Ключ;
Если СтрЧислоВхождений(Формула, "[") > 1 Тогда
Формула = Сред(Формула, 2, СтрДлина(Формула) - 2);
КонецЕсли;
ТекстОшибки = "";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулСлужебный = ОбщегоНазначения.ОбщийМодуль("КонструкторФормулСлужебный");
ТекстОшибки = МодульКонструкторФормулСлужебный.ПроверитьФормулу(ЭтотОбъект, Формула);
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Если ЗначениеЗаполнено(ПредставлениеПоля) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (%2)'"),
ТекстОшибки,
ПредставлениеПоля);
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Поле, , Отказ);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(Строка) = Тип("ФорматированнаяСтрока") Тогда
Строка = ЗаменитьВФорматированнойСтроке(Строка, ПараметрыЗамены);
Иначе
@@ -1958,17 +2010,24 @@
КонецПроцедуры
&НаСервере
Процедура ЗаписатьМакет()
Функция ЗаписатьМакет(ПрерватьЗаписьПриНаличииОшибокВМакете = Ложь, АдресМакетаВоВременномХранилище = "")
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Отказ = Ложь;
Если Не ЗначениеЗаполнено(АдресМакетаВоВременномХранилище) Тогда
Если ЭтоПечатнаяФорма Тогда
Макет = ПодготовитьМакетДляЗаписи();
Макет = ПодготовитьМакетДляЗаписи(, Отказ);
Иначе
Макет = ТабличныйДокумент;
КонецЕсли;
АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет);
АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет, УникальныйИдентификатор);
КонецЕсли;
Если Отказ И ПрерватьЗаписьПриНаличииОшибокВМакете Тогда
Возврат Ложь;
КонецЕсли;
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ОписаниеМакета = МодульУправлениеПечатью.ОписаниеМакета();
@@ -1989,7 +2048,9 @@
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Возврат Истина;
КонецФункции
&НаСервере
Процедура РасширитьСписокПолей()
@@ -860,7 +860,7 @@
Конструктор = Новый КонструкторСхемыКомпоновкиДанных(СхемаКомпоновкиДанных);
Конструктор.Редактировать(ЭтотОбъект);
#Иначе
ПоказатьПредупреждение(, (НСтр("ru = 'Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'")));
ПоказатьПредупреждение(, (НСтр("ru = 'Для того чтобы редактировать схему компоновки, запустите приложение в режиме толстого клиента.'")));
#КонецЕсли
КонецПроцедуры
@@ -4517,33 +4517,31 @@
Возврат;
КонецЕсли;
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ВариантыОтчетов.Ссылка КАК ВариантСсылка,
| ВариантыОтчетов.Представление КАК Наименование,
| ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров,
| ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка,
| ВЫБОР
| КОГДА ВариантыОтчетов.Пользовательский
| ТОГДА ЕСТЬNULL(ВариантыОтчетов.Родитель.КлючВарианта, НЕОПРЕДЕЛЕНО)
| ИНАЧЕ ВариантыОтчетов.КлючВарианта
| КОНЕЦ КАК КлючПредопределенногоВарианта,
| ВариантыОтчетов.Пользовательский КАК Пользовательский,
| ВариантыОтчетов.ТипОтчета
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
| ВариантыОтчетов.Отчет = &Отчет
| И ВариантыОтчетов.КлючВарианта = &КлючВарианта");
Запрос.УстановитьПараметр("Отчет", НастройкиОтчета.ОтчетСсылка);
Запрос.УстановитьПараметр("КлючВарианта", КлючТекущегоВарианта);
Запрос = ВариантОтчетаПоСсылкеИКлючу(НастройкиОтчета.ОтчетСсылка, КлючТекущегоВарианта);
Выборка = Запрос.Выполнить().Выбрать();
Если Не Выборка.Следующий() Тогда
Если НастройкиОтчета.Внешний Тогда
Возврат;
КонецЕсли;
Запрос = ВариантОтчетаПоСсылкеИКлючу(НастройкиОтчета.ОтчетСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Не Выборка.Следующий() Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Несуществующий вариант отчета %1 (%2).
|Необходимо выполнить обновление информационной базы или очистить настройки отчета.'"),
КлючТекущегоВарианта, НастройкиОтчета.ОтчетСсылка);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
КлючЗамеров = Выборка.КлючЗамеров;
Если Не ЗначениеЗаполнено(КлючЗамеров) Тогда
КлючЗамеров = ОбщегоНазначения.СократитьСтрокуКонтрольнойСуммой(
@@ -4564,6 +4562,41 @@
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВариантОтчетаПоСсылкеИКлючу(ОтчетСсылка, КлючВарианта = Неопределено)
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ВариантыОтчетов.Ссылка КАК ВариантСсылка,
| ВариантыОтчетов.Представление КАК Наименование,
| ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров,
| ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка,
| ВЫБОР
| КОГДА ВариантыОтчетов.Пользовательский
| ТОГДА ЕСТЬNULL(ВариантыОтчетов.Родитель.КлючВарианта, НЕОПРЕДЕЛЕНО)
| ИНАЧЕ ВариантыОтчетов.КлючВарианта
| КОНЕЦ КАК КлючПредопределенногоВарианта,
| ВариантыОтчетов.Пользовательский КАК Пользовательский,
| ВариантыОтчетов.ТипОтчета
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
| ВариантыОтчетов.Отчет = &Отчет";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Отчет", ОтчетСсылка);
Если КлючВарианта <> Неопределено Тогда
ТекстЗапроса = ТекстЗапроса +" И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; // @Query-part1
Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта);
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Возврат Запрос;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПустойКлючВарианта()
Возврат " - ";
@@ -107,7 +107,7 @@
Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() И ЭлектроннаяПодпись.ДобавлениеИзменениеЭлектронныхПодписей() Тогда
Если (ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) И СрокДействияПоследнейМеткиВремени <= ТекущаяДатаСеанса())
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.CMS Тогда
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS Тогда
Элементы.ФормаПродлитьДействиеПодписи.Видимость = Ложь;
Иначе
Элементы.ФормаПродлитьДействиеПодписи.Видимость = Истина;
@@ -116,8 +116,8 @@
Элементы.ФормаПродлитьДействиеПодписи.Видимость = Ложь;
КонецЕсли;
Если ТипПодписи = Перечисления.ТипыПодписиКриптографии.CAdESBES
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.CMS Тогда
Если ТипПодписи = Перечисления.ТипыПодписиКриптографии.БазоваяCAdESBES
Или ТипПодписи = Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS Тогда
Если ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) Тогда
Элементы.СрокДействияПоследнейМеткиВремени.Заголовок = НСтр("ru='Срок действия сертификата подписи истек'");
Иначе
@@ -258,7 +258,19 @@
КонецПроцедуры
Процедура УстановитьМуниципальныеСведения(Адрес, ОКТМО) Экспорт
Процедура УстановитьМуниципальныеСведения(Адрес, ОКТМО, ИдентификаторАдреса = Неопределено) Экспорт
Если ЗначениеЗаполнено(ИдентификаторАдреса) Тогда
Результат = АктуальныеАдресныеСведения(Новый Структура("Идентификатор", ИдентификаторАдреса));
Если Не Результат.Отказ Тогда
ЗаполнитьЗначенияСвойств(Адрес, Результат.Данные,
"munDistrict, munDistrictType,munDistrictId,settlement,settlementType,settlementId");
КонецЕсли;
КонецЕсли;
Если Не ЭтоГородФедеральногоЗначения(ПолноеНаименованиеРегиона(Адрес.Area, Адрес.AreaType)) Тогда
Возврат;
@@ -509,7 +509,8 @@
// поэтому проверку перемещения базы осуществляем через файл проверки.
Если Не ФайлПроверкиИдентификатораФайловойБазыСуществует() Тогда
ТекстСообщения = НСтр("ru = 'В папке информационной базы отсутствует файл проверки DoNotCopy.txt.'");
ТекстСообщения = НСтр("ru = 'В папке информационной базы отсутствует файл проверки %1.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "DoNotCopy.txt");
УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения);
Возврат Истина;
КонецЕсли;
@@ -518,7 +519,8 @@
Если ИзменилсяИдентификаторИнформационнойБазы Тогда
ТекстСообщения =
НСтр("ru = 'Идентификатор информационной базы в файле проверки DoNotCopy.txt не соответствует идентификатору в текущей базе.'");
НСтр("ru = 'Идентификатор информационной базы в файле проверки %1 не соответствует идентификатору в текущей базе.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "DoNotCopy.txt");
УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения);
Возврат Истина;
КонецЕсли;
@@ -613,9 +613,12 @@
Обработчик.Комментарий = НСтр("ru = 'Исправление включения в график рабочих и предпраздничных дней, выпадающих на субботу или воскресенье.'");
Обработчик.БлокируемыеОбъекты = "Справочник.Календари";
Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
Если КалендарныеГрафики.ЕстьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей() Тогда
Приоритет = Обработчик.ПриоритетыВыполнения.Добавить();
Приоритет.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей";
Приоритет.Порядок = "После";
КонецЕсли;
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.3.94";
@@ -631,9 +634,12 @@
Обработчик.Комментарий = НСтр("ru = 'Установка нового признака «Учитывать нерабочие периоды» в положение по умолчанию.'");
Обработчик.БлокируемыеОбъекты = "Справочник.Календари";
Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
Если КалендарныеГрафики.ЕстьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей() Тогда
Приоритет = Обработчик.ПриоритетыВыполнения.Добавить();
Приоритет.Процедура = "КалендарныеГрафики.ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей";
Приоритет.Порядок = "До";
КонецЕсли;
КонецПроцедуры
@@ -100,7 +100,7 @@
КонецЕсли;
ЗаписатьПримечание(Ссылка,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, БезопасныйРежим = ""%1"".'"), БезопасныйРежим));
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Подключение, %1 = ""%2"".'"), "БезопасныйРежим", БезопасныйРежим));
ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Возврат ИмяОбработки;
@@ -1289,8 +1289,10 @@
Функция ПоставляемаяОбработка(ИспользуемаяОбработка)
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ВызватьИсключение НСтр("ru = 'Использование функции ДополнительныеОтчетыИОбработкиВМоделиСервиса.ПоставляемаяОбработка
|доступно только сеансов с установленным разделением данных.'");
ТекстСообщения = НСтр("ru = 'Использование функции %1 доступно только сеансов с установленным разделением данных.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения,
"ДополнительныеОтчетыИОбработкиВМоделиСервиса.ПоставляемаяОбработка");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1
@@ -1324,8 +1326,10 @@
Функция ИспользуемаяОбработка(ПоставляемаяОбработка)
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ВызватьИсключение НСтр("ru = 'Использование функции ДополнительныеОтчетыИОбработкиВМоделиСервиса.ИспользуемаяОбработка
|доступно только сеансов с установленным разделением данных.'");
ТекстСообщения = НСтр("ru = 'Использование функции %1 доступно только сеансов с установленным разделением данных.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения,
"ДополнительныеОтчетыИОбработкиВМоделиСервиса.ИспользуемаяОбработка");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ
@@ -93,7 +93,7 @@
ИмяНачальнойСтраницы = ДополнительныеОтчетыИОбработкиКлиентСервер.ИмяНачальнойСтраницы();
НазначениеXDTO = ФабрикаXDTO.Создать(
ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеРазделам(Пакет)); // см. ПакетXDTO.ApplicationExtensionsManifest_1_0_0_2
ДополнительныеОтчетыИОбработкиВМоделиСервисаМанифестИнтерфейс.ТипНазначениеРазделам(Пакет));
Для Каждого Раздел Из ВозможныеРазделы Цикл
@@ -640,6 +640,12 @@
МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный");
МодульКонтрольВеденияУчетаСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
МодульЭлектроннаяПодписьСлужебный.ПриПолученииСпискаШаблонов(ШаблоныЗаданий);
КонецЕсли;
КонецПроцедуры
// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков.
@@ -697,6 +703,11 @@
МодульРаботаСФайламиСлужебныйВМоделиСервиса.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
МодульЭлектроннаяПодписьСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецЕсли;
ОбновлениеИнформационнойБазыСлужебный.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецПроцедуры
@@ -1590,6 +1601,11 @@
ПользователиСлужебный.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSSСлужебный.ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов(ПоддерживаемыеВерсии);
КонецЕсли;
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске.
@@ -376,8 +376,8 @@
ДвоичныеДанные.Записать(АрхивПолноеИмя);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось извлечь файл из макета %1 (ЛокализованноеИмяМакета: %2) обработки ИнформацияПриЗапуске по причине:'"),
ИмяМакета, ЛокализованноеИмяМакета) + Символы.ПС;
НСтр("ru = 'Не удалось извлечь файл из макета %1 (%2: %3) обработки %4 по причине:'"),
ИмяМакета, "ЛокализованноеИмяМакета", ЛокализованноеИмяМакета, "ИнформацияПриЗапуске") + Символы.ПС;
Если НосительМакетов.Метаданные().Макеты.Найти(ЛокализованноеИмяМакета) = Неопределено Тогда
ТекстСообщения = ТекстСообщения + НСтр("ru = 'Макет с таким именем не существует.'") + Символы.ПС;
КонецЕсли;
@@ -1022,6 +1022,14 @@
КонецПроцедуры
Функция ЕстьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей() Экспорт
ИзменяемыеОбъекты = Новый Массив;
ЗаполнитьИзменяемыеОбъектыЗависимыеОтПроизводственныхКалендарей(ИзменяемыеОбъекты);
Возврат ИзменяемыеОбъекты.Количество() > 0;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -210,6 +210,58 @@
КонецФункции
Функция ПроверитьФормулу(Форма, ПредставлениеФормулы) Экспорт
ЭлементыФормулы = КонструкторФормулКлиентСервер.ЭлементыФормулы(ПредставлениеФормулы);
Выражение = ПредставлениеФормулы;
НайденныеОперанды = Новый Соответствие;
Для Каждого Элемент Из Форма.ПодключенныеСпискиПолей Цикл
ИмяСпискаПолей = Элемент.ИмяСпискаПолей;
КоллекцияПолей = Форма[ИмяСпискаПолей];
СкобкиИдентификаторов = Элемент.СкобкиИдентификаторов;
Для Каждого ПредставлениеОперанда Из ЭлементыФормулы.Операнды Цикл
ПутьКДанным = ОчиститьКвадратныеСкобки(ПредставлениеОперанда);
Реквизит = НайтиРеквизит(Форма, ИмяСпискаПолей, ПутьКДанным, КоллекцияПолей.ПолучитьЭлементы(), Истина);
Если Реквизит <> Неопределено Тогда
Операнд = Реквизит.ПутьКДанным;
Если СкобкиИдентификаторов Тогда
Операнд = ОбернутьВКвадратныеСкобки(Операнд);
КонецЕсли;
НайденныеОперанды.Вставить(ПредставлениеОперанда, Операнд);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Ошибки = Новый Массив;
Для Каждого Операнд Из ЭлементыФормулы.Операнды Цикл
Позиция = СтрНайти(Выражение, Операнд);
Если Позиция = 0 Тогда
Продолжить;
КонецЕсли;
Если НайденныеОперанды[Операнд] = Неопределено Тогда
Если ЭлементыФормулы.Функции.Найти(Операнд) = Неопределено Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Поле %1 не найдено в списке доступных полей'"),
Операнд);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неизвестная функция в выражении - ""%1""'"),
Операнд);
КонецЕсли;
Ошибки.Добавить(ТекстОшибки);
КонецЕсли;
КонецЦикла;
Результат = СтрСоединить(Ошибки, Символы.ПС);
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -1475,12 +1527,12 @@
Если СкобкиИдентификаторов Тогда
Операнд = ОбернутьВКвадратныеСкобки(Операнд);
КонецЕсли;
Выражение = СтрЗаменить(Выражение, ПредставлениеОперанда, Операнд);
НайденныеОперанды.Вставить(ПредставлениеОперанда, Истина);
НайденныеОперанды.Вставить(ПредставлениеОперанда, Операнд);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьЭлементыФормулы(Выражение, ЭлементыФормулы, НайденныеОперанды);
Возврат Выражение;
КонецФункции
@@ -1489,6 +1541,7 @@
ЭлементыФормулы = КонструкторФормулКлиентСервер.ЭлементыФормулы(Формула);
Выражение = Формула;
НайденныеОперанды = Новый Соответствие;
Для Каждого Элемент Из Форма.ПодключенныеСпискиПолей Цикл
ИмяСпискаПолей = Элемент.ИмяСпискаПолей;
@@ -1503,11 +1556,12 @@
Если СкобкиПредставлений Тогда
ПредставлениеОперанда = ОбернутьВКвадратныеСкобки(Реквизит.ПредставлениеПутиКДанным);
КонецЕсли;
Выражение = СтрЗаменить(Выражение, Операнд, ПредставлениеОперанда);
НайденныеОперанды.Вставить(Операнд, ПредставлениеОперанда);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьЭлементыФормулы(Выражение, ЭлементыФормулы, НайденныеОперанды);
Возврат Выражение;
КонецФункции
@@ -1516,6 +1570,7 @@
ЭлементыФормулы = КонструкторФормулКлиентСервер.ЭлементыФормулы(Выражение);
Результат = Выражение;
НайденныеПоля = Новый Соответствие;
Для Каждого НастройкиСписка Из СпискиПолей Цикл
КоллекцияПолей = НастройкиСписка.КоллекцияПолей;
@@ -1533,11 +1588,12 @@
Если НастройкиСписка.СкобкиПредставлений Тогда
ПредставлениеОперанда = ОбернутьВКвадратныеСкобки(Реквизит.ПредставлениеПутиКДанным);
КонецЕсли;
Результат = СтрЗаменить(Результат, Операнд, ПредставлениеОперанда);
НайденныеПоля.Вставить(Операнд, ПредставлениеОперанда);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьЭлементыФормулы(Результат, ЭлементыФормулы, НайденныеПоля);
Возврат Результат;
КонецФункции
@@ -1569,6 +1625,8 @@
ЭлементыФормулы = КонструкторФормулКлиентСервер.ЭлементыФормулы(ПредставлениеФормулы);
Выражение = ПредставлениеФормулы;
НайденныеОперанды = Новый Соответствие;
Для Каждого Элемент Из Форма.ПодключенныеСпискиПолей Цикл
ИмяСпискаПолей = Элемент.ИмяСпискаПолей;
КоллекцияПолей = Форма[ИмяСпискаПолей];
@@ -1589,22 +1647,68 @@
Если ТипЗнч(Операнд) = Тип("Дата") Тогда
Операнд = "'" + Формат(ТекущаяДатаСеанса(), "ДФ=ггггММддЧЧмм") + "'"; // Для использования в выражении Вычислить().
КонецЕсли;
Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Операнд)) Тогда
Операнд = "1";
КонецЕсли;
Иначе
Операнд = ОчиститьКвадратныеСкобки(Реквизит.ПутьКДанным);
Если СкобкиИдентификаторов Тогда
Операнд = ОбернутьВКвадратныеСкобки(Операнд);
КонецЕсли;
КонецЕсли;
Выражение = СтрЗаменить(Выражение, ПредставлениеОперанда, Операнд);
НайденныеОперанды.Вставить(ПредставлениеОперанда, Операнд);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьЭлементыФормулы(Выражение, ЭлементыФормулы, НайденныеОперанды);
Выражение = ФорматироватьЧисла(Выражение);
Возврат Выражение;
КонецФункции
Процедура ЗаменитьЭлементыФормулы(Выражение, ЭлементыФормулы, Значения) Экспорт
ЧастиСтроки = Новый Массив;
Для Каждого Операнд Из ЭлементыФормулы.Операнды Цикл
Позиция = СтрНайти(Выражение, Операнд);
Если Позиция = 0 Тогда
Продолжить;
КонецЕсли;
Если Позиция > 1 Тогда
ЧастиСтроки.Добавить(Лев(Выражение, Позиция - 1));
КонецЕсли;
Значение = Значения[Операнд];
Если Значение = Неопределено Тогда
Если ЭлементыФормулы.Функции.Найти(Операнд) <> Неопределено
И Не СтрЗаканчиваетсяНа(Операнд, СуффиксОтключеннойФункции()) Тогда
Значение = Операнд + СуффиксОтключеннойФункции();
Иначе
Значение = Операнд;
КонецЕсли;
КонецЕсли;
ЧастиСтроки.Добавить(Значение);
Выражение = Сред(Выражение, Позиция + СтрДлина(Операнд));
КонецЦикла;
ЧастиСтроки.Добавить(Выражение);
Выражение = СтрСоединить(ЧастиСтроки);
КонецПроцедуры
Функция СуффиксОтключеннойФункции()
Возврат "__";
КонецФункции
Функция ОчиститьКвадратныеСкобки(Строка)
Если СтрНачинаетсяС(Строка, "[") И СтрЗаканчиваетсяНа(Строка, "]") Тогда
@@ -61,8 +61,9 @@
ВыполняемаяПроверка = ПроверкаПоИдентификатору(Проверка);
Если ВыполняемаяПроверка.Пустая() Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует (см. КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок)'"),
Проверка);
НСтр("ru = 'Проверка ведения учета с идентификатором ""%1"" не существует (см. %2)'"),
Проверка,
"КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок");
КонецЕсли;
Иначе
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("КонтрольВеденияУчета.ВыполнитьПроверку", "Проверка",
@@ -31,8 +31,9 @@
Обработчик.БлокируемыеОбъекты = "РегистрСведений.РезультатыПроверкиУчета";
Обработчик.ПриоритетыВыполнения = ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика();
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
Обработчик.Комментарий =
НСтр("ru = 'Начальное заполнение признака ИгнорироватьПроблему и расчет контрольных сумм в регистре сведений ""Результаты проверки учета"" для повышение производительности.'");
Обработчик.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Начальное заполнение признака %1 и расчет контрольных сумм в регистре сведений ""Результаты проверки учета"" для повышение производительности.'"),
"ИгнорироватьПроблему");
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.0.1.195";
@@ -1301,8 +1302,8 @@
Запрос.МенеджерВременныхТаблиц.Закрыть();
Если ЗначениеЗаполнено(ТекстИсключения) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В процедуре КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок у следующих проверок совпадают идентификаторы:
|%1'"), ТекстИсключения);
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В процедуре %1 у следующих проверок совпадают идентификаторы:
|%2'"), "КонтрольВеденияУчетаПереопределяемый.ПриОпределенииПроверок", ТекстИсключения);
КонецЕсли;
КонецПроцедуры
@@ -1557,7 +1558,7 @@
КонецЕсли;
Проблема = ОписаниеПроблемы(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(МетаданныеПланОбмена.ПолноеИмя()), ПараметрыПроверки);
Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В плане обмена ""%1"" отсутствует предопределенный узел (ЭтотУзел() = Неопределено).'"), МетаданныеПланОбмена.Имя);
Проблема.УточнениеПроблемы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'В плане обмена ""%1"" отсутствует предопределенный узел (%2 = Неопределено).'"), МетаданныеПланОбмена.Имя, "ЭтотУзел()");
ЗаписатьПроблему(Проблема, ПараметрыПроверки);
КонецЦикла;
@@ -1949,13 +1950,17 @@
КонецЕсли;
Иначе
Если НайденКрайнийЗначащийПараметр Тогда
ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'");
ТекстСообщения = НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в %1.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "КонтрольВеденияУчета.ПараметрыВыполненияПроверки");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ДополнительныеСвойства <> Неопределено И Свойство5 = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в КонтрольВеденияУчета.ПараметрыВыполненияПроверки.'");
ТекстСообщения = НСтр("ru = 'Параметры выполнения проверки заданы не по порядку в %1.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "КонтрольВеденияУчета.ПараметрыВыполненияПроверки");
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ВсеПараметры = Новый Массив;
@@ -2558,9 +2563,14 @@
|ИЗ
| &ОбъектМетаданных КАК ИмяТаблицы
|ГДЕ
| ИмяТаблицы.Период > &Период
| (ИмяТаблицы.Период > &Период
| И НЕ &ТолькоУказанныйПериод
| ИЛИ ИмяТаблицы.Период = &Период
| И &ТолькоУказанныйПериод)
| И &Условие
| УПОРЯДОЧИТЬ ПО &ПоляУпорядочивания";
|
|УПОРЯДОЧИТЬ ПО
| &ПоляУпорядочивания";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляУпорядочивания", ПоляУпорядочивания);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки КАК ПоляВыборки", ПоляВыборки);
@@ -2572,6 +2582,7 @@
Запрос = Новый Запрос(ТекстПервогоЗапроса);
Запрос.УстановитьПараметр("Период", ПараметрыПроверки.ДатаНачалаПроверки);
Запрос.УстановитьПараметр("ТолькоУказанныйПериод", Ложь);
Результат = Запрос.Выполнить().Выгрузить();
ЭтоПервыйПроход = Истина;
@@ -2587,7 +2598,6 @@
Если Не ЭтоПервыйПроход И Результат.Индекс(СтрокаРезультата) = 0 Тогда
Продолжить;
КонецЕсли;
Для Каждого ИнформацияОРеквизите Из ИнформацияОРегистре Цикл
ТекущаяСсылка = СтрокаРезультата[ИнформацияОРеквизите.ИмяМетаданных + ИнформацияОРеквизите.ТипМетаданныхВИменительномПадеже + "Ссылка"];
@@ -2621,14 +2631,24 @@
Если ЭтоПервыйПроход Тогда
ЭтоПервыйПроход = Ложь;
Запрос.Текст = ТекстЗапросаСУсловием;
КонецЕсли;
// После прохода по всем периодам делаем дообработку по последнему периоду.
Запрос.Текст = ТекстЗапросаСУсловием;
Запрос.УстановитьПараметр("Период", СтрокаРезультата["Период"]);
Запрос.УстановитьПараметр("ТолькоУказанныйПериод", Истина);
Для Каждого Измерение Из Измерения Цикл
Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]);
КонецЦикла;
Результат = Запрос.Выполнить().Выгрузить();
// Если по последнему периоду все записи обработаны, то выбираем все записи по следующим периодам.
Если Результат.Количество() = 0 Или Результат.Количество() = 1 Тогда
Запрос.Текст = ТекстПервогоЗапроса;
Запрос.УстановитьПараметр("Период", СтрокаРезультата["Период"]);
Запрос.УстановитьПараметр("ТолькоУказанныйПериод", Ложь);
Результат = Запрос.Выполнить().Выгрузить();
ЭтоПервыйПроход = Истина;
КонецЕсли;
КонецЦикла;
@@ -3606,7 +3626,10 @@
|ИЗ
| &ОбъектМетаданных КАК ИмяТаблицы
|ГДЕ
| ИмяТаблицы.Период >= &Период
| (ИмяТаблицы.Период > &Период
| И НЕ &ТолькоУказанныйПериод
| ИЛИ ИмяТаблицы.Период = &Период
| И &ТолькоУказанныйПериод)
| И &Условие
|УПОРЯДОЧИТЬ ПО &ПоляУпорядочивания";
@@ -3620,11 +3643,12 @@
Запрос = Новый Запрос(ТекстПервогоЗапроса);
Запрос.УстановитьПараметр("Период", ПараметрыПроверки.ДатаНачалаПроверки);
Запрос.УстановитьПараметр("ТолькоУказанныйПериод", Ложь);
Результат = Запрос.Выполнить().Выгрузить();
ЭтоПервыйПроход = Истина;
ОбщееКоличествоДанных = 0;
ОбщееКоличествоДанных = Результат.Количество();
Пока Результат.Количество() > 0 Цикл
// Последняя запись уже проверена на предыдущей итерации.
@@ -3685,21 +3709,30 @@
Если ЭтоПервыйПроход Тогда
ЭтоПервыйПроход = Ложь;
Запрос.Текст = ТекстЗапросаСУсловием;
КонецЕсли;
// После прохода по всем периодам делаем дообработку по последнему периоду.
Запрос.Текст = ТекстЗапросаСУсловием;
Запрос.УстановитьПараметр("Период", СтрокаРезультата.Период);
Запрос.УстановитьПараметр("ТолькоУказанныйПериод", Истина);
Для Каждого Измерение Из Измерения Цикл
Запрос.УстановитьПараметр(Измерение.Имя, СтрокаРезультата[Измерение.Имя + "ИзмерениеСсылка"]);
КонецЦикла;
Результат = Запрос.Выполнить().Выгрузить();
// Если по последнему периоду все записи обработаны, то выбираем все записи по следующим периодам.
Если Результат.Количество() = 0 Или Результат.Количество() = 1 Тогда
Запрос.Текст = ТекстПервогоЗапроса;
Запрос.УстановитьПараметр("Период", СтрокаРезультата.Период);
Запрос.УстановитьПараметр("ТолькоУказанныйПериод", Ложь);
Результат = Запрос.Выполнить().Выгрузить();
ЭтоПервыйПроход = Истина;
КонецЕсли;
ОбщееКоличествоДанных = ОбщееКоличествоДанных + Результат.Количество();
Если МодульОценкаПроизводительности <> Неопределено Тогда
МодульОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(ОписаниеЗамера, ОбщееКоличествоДанных);
КонецЕсли;
Результат = Запрос.Выполнить().Выгрузить();
КонецЦикла;
КонецПроцедуры
@@ -78,27 +78,6 @@
Форма.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Форма.Объект.Наименование + " (%1)",
ПредставлениеПланаОбмена);
Если ОбщегоНазначения.РазделениеВключено() Тогда
ВидимостьНастройкиПодключения = Ложь;
Если Не Форма.Объект.Ссылка.Пустая() Тогда
ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.ВидТранспортаСообщенийОбменаПоУмолчанию(Форма.Объект.Ссылка);
ВидимостьНастройкиПодключения = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS
Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ФормаОбщаяКомандаНастройкиПодключения",
"Видимость",
ВидимостьНастройкиПодключения);
КонецЕсли;
КонецПроцедуры
// Процедура-обработчик события "ПриЗаписиНаСервере" для формы узла плана обмена.
@@ -65,7 +65,9 @@
Если ДокументРежимЗаписи <> Неопределено Тогда
Если ТипЗнч(ДокументРежимЗаписи) <> Тип("РежимЗаписиДокумента") Тогда
ТекстИсключения = НСтр("ru = 'Неправильный тип параметра ДокументРежимЗаписи'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неправильный тип параметра %1'"),
"ДокументРежимЗаписи");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Объект.ОбменДанными.Загрузка = Объект.ОбменДанными.Загрузка
@@ -417,7 +419,8 @@
Или ТипЗнч(Данные) = Тип("ТаблицаЗначений"))
И Данные.Количество() = 0 Тогда
ТекстИсключения = НСтр("ru = 'В процедуру ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки передан пустой массив. Не возможно отметить выполнение обработки.'");
ТекстИсключения = НСтр("ru = 'В процедуру %1 передан пустой массив. Не возможно отметить выполнение обработки.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -617,7 +620,8 @@
КонецЦикла;
Иначе
ТекстИсключения = НСтр("ru = 'Процедура ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным не может быть использована для этой формы.'");
ТекстИсключения = НСтр("ru = 'Процедура %1 не может быть использована для этой формы.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным");
КонецЕсли;
Иначе
@@ -656,7 +660,8 @@
Отбор = Данные.Отбор.Регистратор.Значение;
КонецЕсли;
Иначе
ТекстИсключения = НСтр("ru = 'Для этого типа метаданных не поддерживается анализ в функции ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным.'");
ТекстИсключения = НСтр("ru = 'Для этого типа метаданных не поддерживается анализ в функции %1.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -754,7 +759,7 @@
ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда
МетаданныеДокумента = Данные.Метаданные();
Иначе
ТекстИсключения = НСтр("ru = 'Для регистрации всех регистраторов регистра необходимо в параметре ""Данные"" передать ОбъектМетаданных:Документ или ДокументСсылка.'");
ТекстИсключения = НСтр("ru = 'Для регистрации всех регистраторов регистра необходимо в параметре ""Данные"" передать объект метаданных документ или ссылку на документ.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
ПолноеИмяДокумента = МетаданныеДокумента.ПолноеИмя();
@@ -1769,7 +1774,8 @@
ПолныеИменаОбрабатываемыхОбъектов = Новый Массив;
ПолныеИменаОбрабатываемыхОбъектов.Добавить(ПолноеИмяМетаданныеОбъекта.ПолноеИмя());
Иначе
ТекстИсключения = НСтр("ru = 'Передан неправильный тип параметра ""ПолноеИмяМетаданныеОбъекта"" в функцию ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки'");
ТекстИсключения = НСтр("ru = 'Передан неправильный тип параметра ""%1"" в функцию %2'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ПолноеИмяМетаданныеОбъекта", "ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -1820,7 +1826,9 @@
И МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда
Если ПолныеИменаОбрабатываемыхОбъектов.Количество() > 1 Тогда
ТекстИсключения = НСтр("ru = 'В массиве имен в параметре ""ПолноеИмяМетаданныеОбъекта"" в функцию ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки передан независимый регистр сведений.'");
ТекстИсключения = НСтр("ru = 'В массиве имен в параметре ""%1"" в функцию %2 передан независимый регистр сведений.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения,
"ПолноеИмяМетаданныеОбъекта", "ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -1907,8 +1915,9 @@
КонецЕсли;
Иначе
ТекстИсключения = НСтр("ru = 'Для типа метаданных ""%МетаданныеОбъекта%"" не поддерживается проверка в функции ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%МетаданныеОбъекта%", Строка(МетаданныеОбъекта));
ТекстИсключения = НСтр("ru = 'Для типа метаданных ""%1"" не поддерживается проверка в функции %2'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения,
Строка(МетаданныеОбъекта), "ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -2202,7 +2211,8 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Регистратор", ИмяИзмеренияДляОтбора);
КонецЕсли;
Иначе
ТекстИсключения = НСтр("ru = 'Для этого типа метаданных не поддерживается проверка в функции ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных.'");
ТекстИсключения = НСтр("ru = 'Для этого типа метаданных не поддерживается проверка в функции %1.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -2347,8 +2357,9 @@
ЕстьРегистры = Истина;
Иначе
ТекстИсключения = НСтр("ru = 'Для типа метаданных ""%МетаданныеОбъекта%"" не поддерживается проверка в функции ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияСсылок'");
ТекстИсключения = СтрЗаменить(ТекстИсключения, "%МетаданныеОбъекта%", Строка(МетаданныеОбъекта));
ТекстИсключения = НСтр("ru = 'Для типа метаданных ""%1"" не поддерживается проверка в функции %2'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения,
Строка(МетаданныеОбъекта), "ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияСсылок");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -5941,7 +5952,8 @@
КонецЦикла;
Если ПростойИсточник И СложныйИсточник Тогда
Ошибка = НСтр("ru = 'Источник данных задан неверно (см. ДополнительныеПараметрыВыборкиДанныхДляОбработки()).'");
Ошибка = НСтр("ru = 'Источник данных задан неверно (см. %1).'");
Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Ошибка, "ДополнительныеПараметрыВыборкиДанныхДляОбработки()");
ВызватьИсключение Ошибка;
Иначе
Возврат ПростойИсточник;
@@ -41,7 +41,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.6.137";
Описание.Версия = "3.1.6.159";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -257,9 +257,9 @@
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПриОпределенииРежимаОбновленияДанных", "РежимОбновленияДанных",
РежимОбновленияДанных, Тип("Строка"));
Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимое значение параметра %1 в %2.
|Ожидалось: %3; передано значение: %4 (тип %5).'"),
|Ожидалось: %3, %4 или %5; передано значение: %6 (тип %7).'"),
"РежимОбновленияДанных", "ПриОпределенииРежимаОбновленияДанных",
НСтр("ru = 'НачальноеЗаполнение, ОбновлениеВерсии или ПереходСДругойПрограммы'"),
"НачальноеЗаполнение", "ОбновлениеВерсии", "ПереходСДругойПрограммы",
РежимОбновленияДанных, ТипЗнч(РежимОбновленияДанных));
ОбщегоНазначенияКлиентСервер.Проверить(РежимОбновленияДанных = "НачальноеЗаполнение"
Или РежимОбновленияДанных = "ОбновлениеВерсии" Или РежимОбновленияДанных = "ПереходСДругойПрограммы", Сообщение);
@@ -1017,8 +1017,9 @@
Количество = Число(ПотокиОбновления[1]);
Исключение
ТекстИсключения = НСтр(
"ru = 'Укажите параметр запуска программы ""ЧислоПотоковОбновления"" в формате
|""ЧислоПотоковОбновления=Х"", где ""Х"" - максимальное количество потоков обновления.'");
"ru = 'Укажите параметр запуска программы ""%1"" в формате
|""%1=Х"", где ""Х"" - максимальное количество потоков обновления.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, "ЧислоПотоковОбновления");
ВызватьИсключение ТекстИсключения;
КонецПопытки;
КонецЕсли;
@@ -3689,7 +3690,8 @@
Пока Истина Цикл
Результат = ОбработчикДляВыполнения(Обработчики, ГруппыОбработчиковИЗависимость, СведенияОбОбновлении);
Если Результат.ОбработчикДляВыполнения = Неопределено
И Результат.ЕстьНевыполненные Тогда
И Результат.ЕстьНевыполненные
И Не Результат.ПрерватьВыполнение Тогда
СведенияОбОбновлении.ТекущаяИтерацияОбновления = СведенияОбОбновлении.ТекущаяИтерацияОбновления + 1;
ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении);
Иначе
@@ -3698,8 +3700,8 @@
КонецЦикла;
ОбработчикДляВыполнения = Результат.ОбработчикДляВыполнения;
Если ОбработчикДляВыполнения = Неопределено Тогда
Если Результат.ЕстьВыполняющиеся Тогда
Если ОбработчикДляВыполнения = Неопределено Или Результат.ПрерватьВыполнение Тогда
Если Результат.ЕстьВыполняющиеся И Не Результат.ПрерватьВыполнение Тогда
Возврат Истина;
Иначе
СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса();
@@ -3788,8 +3790,9 @@
Если Обработчик.МонопольныйРежим = Истина Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1""
|не должен быть установлен признак ""МонопольныйРежим"".'"),
Обработчик.ИмяОбработчика);
|не должен быть установлен признак ""%2"".'"),
Обработчик.ИмяОбработчика,
"МонопольныйРежим");
ЗаписатьОшибку(ТекстОшибки);
ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС;
КонецЕсли;
@@ -3799,21 +3802,23 @@
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1""
|некорректно заполнены значения свойств:
| - ""ЗапускатьТолькоВГлавномУзле""
| - ""ЗапускатьИВПодчиненномУзлеРИБСФильтрами"".
| - ""%2""
| - ""%3"".
|
|Данные свойства не могут одновременно принимать значение ""Истина"".'"),
Обработчик.ИмяОбработчика);
Обработчик.ИмяОбработчика,
"ЗапускатьТолькоВГлавномУзле",
"ЗапускатьИВПодчиненномУзлеРИБСФильтрами");
ЗаписатьОшибку(ТекстОшибки);
ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС;
КонецЕсли;
Если Обработчик.ОбщиеДанные = Истина Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1""
|указано недопустимое значение свойства ""ОбщиеДанные"".
|указано недопустимое значение свойства ""%2"".
|
|Данное свойство не может принимать значение ""Истина"" у отложенного обработчика.'"),
Обработчик.ИмяОбработчика);
Обработчик.ИмяОбработчика, "ОбщиеДанные");
ЗаписатьОшибку(ТекстОшибки);
ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС;
КонецЕсли;
@@ -4151,6 +4156,7 @@
ЕстьВыполняющиеся = Ложь;
ЕстьОшибки = Ложь;
ЕстьНевыполненные = Ложь;
ПрерватьВыполнение = Ложь;
ВыполняющийсяМногопоточныйОбработчик = Неопределено;
Для Каждого Обработчик Из Обработчики Цикл
Если Обработчик.ИтерацияЗапуска = ТекущаяИтерация Тогда
@@ -4208,11 +4214,11 @@
МаксимумПопытокОбновления = МаксимумПопытокОбновления(Обработчик);
Если Обработчик.ЧислоПопыток >= МаксимумПопытокОбновления Тогда
Если Обработчик.Статус = Перечисления.СтатусыОбработчиковОбновления.Ошибка Тогда
ЕстьОшибки = Истина;
ПрерватьВыполнение = Истина;
Продолжить;
ИначеЕсли ВсеОбработчикиЗациклились() Тогда
ОтметитьЗациклившиесяОбработчики();
ЕстьОшибки = Истина;
ПрерватьВыполнение = Истина;
Продолжить;
КонецЕсли;
КонецЕсли;
@@ -4225,13 +4231,14 @@
ОбработчикДляВыполнения = ВыполняющийсяМногопоточныйОбработчик;
КонецЕсли;
Если ЕстьОшибки Тогда
Если ЕстьОшибки Или ПрерватьВыполнение Тогда
ЗавершеноУспешно = Ложь;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ОбработчикДляВыполнения", ОбработчикДляВыполнения);
Результат.Вставить("ЗавершеноУспешно", ЗавершеноУспешно);
Результат.Вставить("ПрерватьВыполнение", ПрерватьВыполнение);
Результат.Вставить("ЕстьВыполняющиеся", ЕстьВыполняющиеся);
Результат.Вставить("ЕстьНевыполненные", ЕстьНевыполненные);
@@ -5382,18 +5389,20 @@
Если Не ИзвестныйСпособ Тогда
ШаблонСообщения = НСтр(
"ru = 'Укажите способ выборки в процедуре регистрации данных к обновлению.
|Указывается в ""Параметры.ПараметрыВыборки.СпособВыборки"".
|Сейчас указан неизвестный способ выборки ""%1"".'");
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СпособВыборки);
|Указывается в ""%1"".
|Сейчас указан неизвестный способ выборки ""%2"".'");
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СпособВыборки, "Параметры.ПараметрыВыборки.СпособВыборки");
КонецЕсли;
ТаблицыУказаны = Не ПустаяСтрока(ПараметрыВыборки.ПолныеИменаОбъектов)
Или Не ПустаяСтрока(ПараметрыВыборки.ПолныеИменаРегистров);
Если Не ТаблицыУказаны Тогда
ВызватьИсключение НСтр(
ШаблонСообщения = НСтр(
"ru = 'Укажите обрабатываемые таблицы в процедуре регистрации данных к обновлению.
|Указывается в ""Параметры.ПараметрыВыборки.ПолныеИменаОбъектов"" и/или
|""Параметры.ПараметрыВыборки.ПолныеИменаРегистров"".'");
|Указывается в ""%1"" и/или
|""%2"".'");
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения,
"Параметры.ПараметрыВыборки.ПолныеИменаОбъектов", "Параметры.ПараметрыВыборки.ПолныеИменаРегистров");
КонецЕсли;
КонецПроцедуры
@@ -7370,7 +7379,9 @@
Если ПустаяСтрока(Обработчик.Версия) Тогда
Если Обработчик.НачальноеЗаполнение <> Истина Тогда
ОписаниеОшибки = НСтр("ru = 'У обработчика не заполнено свойство Версия или свойство НачальноеЗаполнение.'");
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У обработчика не заполнено свойство %1 или свойство %2.'"),
"Версия", "НачальноеЗаполнение");
КонецЕсли;
ИначеЕсли Обработчик.Версия <> "*"
@@ -7381,24 +7392,26 @@
Исключение
НулеваяВерсия = Ложь;
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У обработчика неправильно заполнено свойство Версия: ""%1"".
НСтр("ru = 'У обработчика неправильно заполнено свойство %1: ""%2"".
|Правильный формат, например: ""2.1.3.70"".'"),
Обработчик.Версия);
"Версия", Обработчик.Версия);
КонецПопытки;
Если НулеваяВерсия Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У обработчика неправильно заполнено свойство Версия: ""%1"".
НСтр("ru = 'У обработчика неправильно заполнено свойство %1: ""%2"".
|Версия не может быть нулевой.'"),
Обработчик.Версия);
"Версия", Обработчик.Версия);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОписаниеОшибки)
И Обработчик.ВыполнятьВГруппеОбязательных <> Истина
И Обработчик.Приоритет <> 0 Тогда
ОписаниеОшибки = НСтр("ru = 'У обработчика неправильно заполнено свойство Приоритет или
|свойство ВыполнятьВГруппеОбязательных.'");
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У обработчика неправильно заполнено свойство %1 или
|свойство %2.'"),
"Приоритет", "ВыполнятьВГруппеОбязательных");
КонецЕсли;
КонецЕсли;
@@ -7407,17 +7420,19 @@
И Обработчик.РежимВыполнения <> "Оперативно"
И Обработчик.РежимВыполнения <> "Отложенно" Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У обработчика ""%1"" неправильно заполнено свойство РежимВыполнения.
|Допустимое значение: ""Монопольно"", ""Отложенно"", ""Оперативно"".'"),
Обработчик.Процедура);
НСтр("ru = 'У обработчика ""%1"" неправильно заполнено свойство %2.
|Допустимое значение: ""%3"", ""%4"", ""%5"".'"),
Обработчик.Процедура, "РежимВыполнения", "Монопольно", "Отложенно", "Оперативно");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОписаниеОшибки)
И Обработчик.Опциональный = Истина
И Обработчик.НачальноеЗаполнение = Истина Тогда
ОписаниеОшибки = НСтр("ru = 'У обработчика не правильно заполнено свойство Опциональный или
|свойство НачальноеЗаполнение.'");
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'У обработчика не правильно заполнено свойство %1 или
|свойство %2.'"),
"Опциональный", "НачальноеЗаполнение");
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
@@ -7924,10 +7939,10 @@
+ Число(РазрядыВерсииСтроками[3]);
Если ВесВерсии > ВесВерсииМетаданных Тогда
ТекстИсключения = НСтр("ru = 'В общем макете ОписаниеИзмененийСистемы для одного из разделов изменений
|установлена версия выше, чем в метаданных. (%1, должна быть %2)'");
ТекстИсключения = НСтр("ru = 'В общем макете %1 для одного из разделов изменений
|установлена версия выше, чем в метаданных. (%2, должна быть %3)'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения,
Версия, Метаданные.Версия);
"ОписаниеИзмененийСистемы", Версия, Метаданные.Версия);
ВызватьИсключение ТекстИсключения;
КонецЕсли;
@@ -8451,8 +8466,9 @@
ЗавершениеОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах();
Если Параметры.ОбработкаЗавершена = Неопределено Тогда
ТекстОшибки = НСтр("ru = 'Обработчик обновления не инициализировал параметр ОбработкаЗавершена.
ТекстОшибки = НСтр("ru = 'Обработчик обновления не инициализировал параметр %1.
|Выполнение прервано из-за явной ошибки в коде обработчика.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, "ОбработкаЗавершена");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
@@ -8602,9 +8618,9 @@
КонецЦикла;
ИначеЕсли ЗначениеЗаполнено(БлокируемыеОбъекты) И Не ЗначениеЗаполнено(ПроцедураПроверки) Тогда
ТекстИсключения = НСтр("ru = 'У отложенного обработчика обновления ""%1""
|заполнен список блокируемых объектов, но не задано свойство ""ПроцедураПроверки"".'");
|заполнен список блокируемых объектов, но не задано свойство ""%2"".'");
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, Обработчик.ИмяОбработчика);
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, Обработчик.ИмяОбработчика, "ПроцедураПроверки");
КонецЕсли;
КонецЦикла;
@@ -1116,9 +1116,12 @@
Если ОбщегоНазначения.РазделениеВключено()
И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ВызватьИсключение НСтр("ru = 'Вызов функции ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияОбластейДанных()
ТекстИсключения = НСтр("ru = 'Вызов функции %1
|недоступен из сеансов с установленным значением разделителей модели сервиса.'");
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения,
"ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияОбластейДанных()");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Запрос = Новый Запрос;
@@ -554,8 +554,9 @@
Процедура ПроверитьНаличиеУстаревшихИсправлений() Экспорт
Результат = ИсправленияИзменены(Истина);
Если Результат.ЕстьИзменения Тогда
ТекстСообщения = НСтр("ru = 'Некорректный вызов функции ""ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы"".
ТекстСообщения = НСтр("ru = 'Некорректный вызов функции ""%1"".
|Перед вызовом не были удалены устаревшие патчи, возможно, обновление выполняется нештатными средствами.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, "ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы");
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения);
КонецЕсли;
КонецПроцедуры
@@ -1117,7 +1117,7 @@
МестаИспользования = Новый ТаблицаЗначений;
УстановитьПривилегированныйРежим(Истина);
МестаИспользования = НайтиПоСсылкам(НаборСсылок); // см. МестаИспользования;
МестаИспользования = НайтиПоСсылкам(НаборСсылок); // см. МестаИспользования.
УстановитьПривилегированныйРежим(Ложь);
// МестаИспользования - ТаблицаЗначений - где:
@@ -865,7 +865,7 @@
СведенияОКоманде = Новый Структура("ИмяВФорме, ТипПараметра, УсловияВидимости, УсловияВидимостиПоТипамОбъектов");
ЗаполнитьЗначенияСвойств(СведенияОКоманде, Команда);
СведенияОПодменюКоманды.КомандыСУсловиямиВидимости.Добавить(СведенияОКоманде);
ИначеЕсли Команда.Важность <> "СмТакже" Тогда
ИначеЕсли Не Команда.ТолькоВоВсехДействиях Тогда
СведенияОПодменюКоманды.ЕстьКомандыБезУсловийВидимости = Истина;
КонецЕсли;
КонецЦикла;
@@ -277,11 +277,11 @@
КонецФункции
// Находит все присоединенные к объекту файлы и добавляет ссылки на них в свойство Файлы.
// Находит все присоединенные к объекту файлы и добавляет ссылки на них в параметр Файлы.
//
// Параметры:
// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов - ссылка на объект-владелец файлов.
// Файлы - Массив из ОпределяемыйТип.ПрисоединенныйФайл - массив в который будут добавлены ссылки на файлы объекта.
// ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов
// Файлы - Массив из ОпределяемыйТип.ПрисоединенныйФайл - массив, в который будут добавлены ссылки на файлы объекта.
//
Процедура ЗаполнитьПрисоединенныеФайлыКОбъекту(Знач ВладелецФайла, Знач Файлы) Экспорт
@@ -290,16 +290,11 @@
Возврат;
КонецЕсли;
ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеФайлов.Измерения.ОбъектСФайлами.Тип.Типы();
Если ТипыВладельцев.Найти(ТипЗнч(ВладелецФайла)) <> Неопределено Тогда
МассивФайловЛокальный = РаботаСФайламиСлужебный.ВсеПодчиненныеФайлы(ВладелецФайла);
Для Каждого СсылкаНаФайл Из МассивФайловЛокальный Цикл
Файлы.Добавить(СсылкаНаФайл);
ПрисоединенныеФайлы = РаботаСФайламиСлужебный.ПрисоединенныеФайлыКОбъекту(ВладелецФайла);
Для Каждого ПрисоединенныйФайл Из ПрисоединенныеФайлы Цикл
Файлы.Добавить(ПрисоединенныйФайл);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Возвращает новую ссылку на файл для указанного владельца файла.
@@ -621,7 +616,7 @@
КонецЕсли;
ХранитьВерсии = СтрСравнить(ИмяСправочника, "Файлы") = 0;
ХранитьВерсии = СтрСравнить(ИмяСправочника, Метаданные.Справочники.Файлы.Имя) = 0;
ПрисоединенныйФайл = Справочники[ИмяСправочника].СоздатьЭлемент(); // ОпределяемыйТип.ПрисоединенныйФайлОбъект
ПрисоединенныйФайл.УстановитьСсылкуНового(НоваяСсылкаНаФайл);
@@ -633,10 +628,8 @@
ПрисоединенныйФайл.Наименование = ИмяБезРасширения;
ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер();
ПрисоединенныйФайл.Расширение = РасширениеБезТочки;
ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(
ПрисоединенныйФайл.Размер,
ПрисоединенныйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(ПрисоединенныйФайл.Размер,
ПрисоединенныйФайл.Расширение);
ПрисоединенныйФайл.Изменил = ПараметрыФайла.Автор;
ПрисоединенныйФайл.ХранитьВерсии = ХранитьВерсии;
@@ -226,7 +226,7 @@
РазмерФайла = ПрисоединенныйФайл.Размер;
ТипХраненияФайла = ПрисоединенныйФайл.ТипХраненияФайла;
Если НЕ ЗначениеЗаполнено(ТипХраненияФайла) Тогда
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Расширение);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(ПрисоединенныйФайл.Размер, ПрисоединенныйФайл.Расширение);
КонецЕсли;
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
@@ -287,21 +287,29 @@
// Копирует данные присоединенного файла по указанному пути.
//
// Параметры:
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл - ссылка на элемент справочника с файлом.
// Путь - Строка - полный путь (включая имя файла), куда будет скопирован файл из тома.
// ПрисоединенныйФайл - ОпределяемыйТип.ПрисоединенныйФайл
// ПутьФайлаПриемник - Строка - полный путь (включая имя файла), куда будет скопирован файл из тома.
//
Процедура СкопироватьФайл(ПрисоединенныйФайл, Путь) Экспорт
Процедура СкопироватьФайл(ПрисоединенныйФайл, ПутьФайлаПриемник) Экспорт
СвойстваФайла = СвойстваФайлаВТоме(ПрисоединенныйФайл);
КопироватьФайл(ПолноеИмяФайлаВТоме(СвойстваФайла), Путь);
ПутьФайлаИсточник = ПолноеИмяФайлаВТоме(СвойстваФайла);
// Исходному файлу мог быть установлен атрибут "Только чтение".
// Унаследованный при копировании атрибут снимается, чтобы файл можно было удалить.
СвойстваФайла = Новый Файл(Путь);
Если СвойстваФайла.Существует()
И СвойстваФайла.ПолучитьТолькоЧтение() Тогда
ФайлИсточник = Новый Файл(ПутьФайлаИсточник);
Если Не ФайлИсточник.Существует() Тогда
СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой.
|%1'"), Строка(ПрисоединенныйФайл));
ВызватьИсключение СообщениеОбОшибке;
КонецЕсли;
СвойстваФайла.УстановитьТолькоЧтение(Ложь);
КопироватьФайл(ПутьФайлаИсточник, ПутьФайлаПриемник);
// Если у исходного файла был установлен атрибут "Только чтение",
// то он снимается у файла-приемника, чтобы в дальнейшем его можно было отредактировать или удалить.
ФайлПриемник = Новый Файл(ПутьФайлаПриемник);
Если ФайлПриемник.Существует() И ФайлПриемник.ПолучитьТолькоЧтение() Тогда
ФайлПриемник.УстановитьТолькоЧтение(Ложь);
КонецЕсли;
КонецПроцедуры
@@ -715,11 +723,10 @@
// Имеет смысл в случае хранения файлов в томах и информационной базе.
//
// Возвращаемое значение:
// Структура - настройки хранения файлов в ИБ. Свойства:
// Структура::
// * РасширенияФайлов - Строка - расширения файлов, которые хранятся в ИБ.
// Разделены пробелом.
// * МаксимальныйРазмер - Число - максимальный размер файла, сохраняемого
// в ИБ, в байтах.
// * МаксимальныйРазмер - Число - максимальный размер файла, сохраняемого в ИБ, в байтах.
//
Функция ПараметрыХраненияФайловВИнформационнойБазе() Экспорт
@@ -1292,7 +1299,7 @@
БлокировкаДанных.Заблокировать();
Объект = СсылкаНаФайл.ПолучитьОбъект(); // ОпределяемыйТип.ПрисоединенныйФайлОбъект
Объект.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов(Объект.Размер, Объект.Расширение);
Объект.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(Объект.Размер, Объект.Расширение);
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
@@ -1824,29 +1831,34 @@
КонецФункции
// Возвращает тип хранения добавляемого файла в зависимости от расширения и размера.
// Возвращает тип хранения добавляемого файла в зависимости от его расширения и размера.
//
// Параметры:
// Расширение - Строка - расширение добавляемого файла.
// Размер - Число - размер добавляемого файла в байтах.
// РасширениеФайла - Строка - расширение добавляемого файла.
// РазмерФайла - Число - размер добавляемого файла в байтах.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ТипыХраненияФайлов - если способ хранения файлов в настройках
// указан "ВТомахНаДиске", всегда возвращает значение "ВТомахНаДиске". Если способ хранения
// файлов указан "ВИнформационнойБазеИТомахНаДиске", возвращает "ВИнформационнойБазе", если
// файл соответствует параметрам хранения в информационной базе и "ВТомахНаДиске", если нет.
// указан ВТомахНаДиске, возвращает значение ВТомахНаДиске. Если способ хранения
// файлов указан ВИнформационнойБазеИТомахНаДиске, то возвращает ВИнформационнойБазе, если
// файл соответствует параметрам хранения в информационной базе, иначе ВТомахНаДиске.
//
Функция ТипХраненияФайла(Расширение, Размер) Экспорт
Функция ТипХраненияФайла(Знач РасширениеФайла, Знач РазмерФайла) Экспорт
ТипХранения = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
Если ХранитьФайлыВТомахНаДискеИИнформационнойБазе() Тогда
ПараметрыХранения = ПараметрыХраненияФайловВИнформационнойБазе();
Если Размер <= ПараметрыХранения.МаксимальныйРазмер
И СтрНайти(НРег(ПараметрыХранения.РасширенияФайлов), НРег(Расширение)) > 0 Тогда
Если РазмерФайла <= ПараметрыХранения.МаксимальныйРазмер Тогда
ТипХранения = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
Иначе
РасширениеФайла = НРег(СокрЛП(РасширениеФайла));
Если СтрНачинаетсяС(РасширениеФайла, ".") Тогда
РасширениеФайла = Сред(РасширениеФайла, 2, СтрДлина(РасширениеФайла) - 1);
КонецЕсли;
Если СтрНайти(НРег(ПараметрыХранения.РасширенияФайлов), РасширениеФайла) > 0 Тогда
ТипХранения = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -37,28 +37,17 @@
Процедура ВыгрузитьФайл(Знач ОбъектФайла, Знач ИмяНовогоФайла) Экспорт
Если ОбъектФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
РаботаСФайламиВТомахСлужебный.СкопироватьФайл(ОбъектФайла.Ссылка, ИмяНовогоФайла);
Иначе
ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ОбъектФайла.Ссылка);
Попытка
ДвоичныеДанныеФайла.Записать(ИмяНовогоФайла);
Исключение
СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Двоичные данные файла %1 были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой.
|Обратитесь к администратору.'"), Строка(ОбъектФайла.Ссылка));
НСтр("ru='Данные файла были удалены. Возможно, файл очищен как ненужный.
|%1'"), Строка(ОбъектФайла.Ссылка));
ВызватьИсключение СообщениеОбОшибке;
КонецПопытки;
КонецЕсли;
КонецПроцедуры
@@ -72,10 +61,10 @@
Процедура ЗагрузитьФайл(Знач ОбъектФайла, Знач ПутьКФайлу) Экспорт
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
ТипХранения = ТипХраненияФайлов(ОбъектФайла.Размер, ОбъектФайла.Расширение);
ОбъектФайла.ТипХраненияФайла = ТипХранения;
ТипХраненияФайла = ТипХраненияФайла(ОбъектФайла.Размер, ОбъектФайла.Расширение);
ОбъектФайла.ТипХраненияФайла = ТипХраненияФайла;
ОбъектФайла.ПутьКФайлу = "";
Если ТипХранения = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
РаботаСФайламиВТомахСлужебный.ДобавитьФайл(ОбъектФайла, ДвоичныеДанные, , Истина);
Иначе
ОбъектФайла.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанные);
@@ -667,7 +656,7 @@
Если Метаданные.Справочники.Найти(ИмяСтандартногоОсновногоСправочника) <> Неопределено Тогда
ИменаСправочников.Вставить(ИмяСтандартногоОсновногоСправочника, Истина);
ИначеЕсли Метаданные.ОпределяемыеТипы.ВладелецФайлов.Тип.СодержитТип(ТипВладельцаФайлов) Тогда
ИменаСправочников.Вставить("Файлы", Истина);
ИменаСправочников.Вставить(Метаданные.Справочники.Файлы.Имя, Истина);
КонецЕсли;
// Переопределение стандартного справочника хранения присоединенных файлов.
@@ -747,15 +736,13 @@
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
КонецЕсли;
КопируемыеФайлы = ВсеПодчиненныеФайлы(Источник.Ссылка);
КопируемыеФайлы = ПрисоединенныеФайлыКОбъекту(Источник.Ссылка, Истина);
Для Каждого КопируемыйФайл Из КопируемыеФайлы Цикл
Если ДоступнаЭлектроннаяПодпись = Неопределено Тогда
ДоступнаЭлектроннаяПодпись = (МодульЭлектроннаяПодписьСлужебный <> Неопределено)
И (МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипЗнч(КопируемыйФайл)));
КонецЕсли;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КопируемыйФайл, "ПометкаУдаления") Тогда
Продолжить;
КонецЕсли;
НачатьТранзакцию();
Попытка
МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(КопируемыйФайл);
@@ -771,18 +758,15 @@
ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(КопируемыйФайл);
ТипХраненияФайла = ТипХраненияФайлов();
ТипХраненияФайла = ТипХраненияФайла(КопияФайла.Размер, КопияФайла.Расширение);
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
КопияФайла.ТипХраненияФайла = ТипХраненияФайла;
ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанные);
Иначе
КопияФайла.Том = Неопределено;
КопияФайла.ПутьКФайлу = Неопределено;
КопияФайла.ТипХраненияФайла = Неопределено;
РаботаСФайламиВТомахСлужебный.ДобавитьФайл(КопияФайла, ДвоичныеДанные);
КонецЕсли;
КопияФайла.Записать();
@@ -921,29 +905,35 @@
// Возвращает тип хранения файлов с учетом наличия томов.
// Если томов хранения файлов нет, тогда хранение в ИБ.
//
// Если Размер или Расширение имеют значение неопределено,
// то настройка смешенного хранения не учитывается.
// Возвращаемое значение:
// ПеречислениеСсылка.ТипыХраненияФайлов
//
Функция ТипХраненияФайлов() Экспорт
Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске()
И РаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов() Тогда
Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
Иначе
Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
КонецЕсли;
КонецФункции
// Возвращает тип хранения файла с учетом наличия томов или смешанного хранения.
// Если томов хранения файлов нет, тогда хранение в ИБ.
//
// Параметры:
// Размер - Число
// - Неопределено
// Расширение - Строка
// - Неопределено
// РазмерФайла - Число
// РасширениеФайла - Строка
//
// Возвращаемое значение:
// ПеречислениеСсылка.ТипыХраненияФайлов
//
Функция ТипХраненияФайлов(Размер = Неопределено, Расширение = Неопределено) Экспорт
Функция ТипХраненияФайла(Знач РазмерФайла, Знач РасширениеФайла) Экспорт
Если РаботаСФайламиВТомахСлужебный.ХранитьФайлыВТомахНаДиске()
И РаботаСФайламиВТомахСлужебный.ЕстьТомаХраненияФайлов() Тогда
Если Размер <> Неопределено И Расширение <> Неопределено Тогда
Возврат РаботаСФайламиВТомахСлужебный.ТипХраненияФайла(Расширение, Размер);
Иначе
Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
КонецЕсли;
Возврат РаботаСФайламиВТомахСлужебный.ТипХраненияФайла(РасширениеФайла, РазмерФайла);
Иначе
Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
КонецЕсли;
@@ -3284,7 +3274,7 @@
КонецЕсли;
ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить();
НовыйТипХраненияФайла = ТипХраненияФайлов(ЭлементДанных.Размер, ЭлементДанных.Расширение);
НовыйТипХраненияФайла = ТипХраненияФайла(ЭлементДанных.Размер, ЭлементДанных.Расширение);
ЭлементДанных.ТипХраненияФайла = НовыйТипХраненияФайла;
Если Не ЭлементДанных.ЭтоНовый() Тогда
@@ -3319,9 +3309,9 @@
ЭлементДанных.ПутьКФайлу = Неопределено;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось добавить файл ""%1"" ни в один из томов, т.к. он отсутствует.
НСтр("ru = 'Не удалось добавить файл ни в один из томов, т.к. он не существует.
|Возможно, файл удален антивирусной программой.
|Обратитесь к администратору.'"),
|%1.'"),
ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ЭлементДанных.Наименование, ЭлементДанных.Расширение));
ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Добавление файла в том'", ОбщегоНазначения.КодОсновногоЯзыка()),
@@ -4040,8 +4030,6 @@
КонецФункции
// Возвращает стандартный текст ошибки.
//
// Возвращаемое значение:
// Строка
//
@@ -4053,8 +4041,8 @@
|%1
|который присоединен к:
|%2
|по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой.
|Обратитесь к администратору.'"),
|
|Данные файла были удалены. Возможно, файл очищен как ненужный или удален антивирусной программой.'"),
ИмяФайла,
ВладелецФайла);
@@ -4064,8 +4052,8 @@
|%1
|который присоединен к:
|%2
|по причине: двоичные данные файла были удалены. Возможно, файл очищен как ненужный.
|Обратитесь к администратору.'"),
|
|Данные файла были удалены. Возможно, файл очищен как ненужный.'"),
ИмяФайла,
ВладелецФайла);
КонецЕсли;
@@ -4429,20 +4417,22 @@
КонецПроцедуры
// Возвращает массив присоединенных файлов для указанного владельца.
// ссылок на присоединенные файлы.
// Возвращает ссылки на присоединенные файлы для указанного владельца.
//
// Параметры:
// ВладелецФайлов - ОпределяемыйТип.ПрисоединенныйФайл
// КромеПомеченныхНаУдаление - Булево
//
// Возвращаемое значение:
// Массив из ОпределяемыйТип.ПрисоединенныйФайл
//
Функция ВсеПодчиненныеФайлы(Знач ВладелецФайлов) Экспорт
Функция ПрисоединенныеФайлыКОбъекту(Знач ВладелецФайлов, Знач КромеПомеченныхНаУдаление = Ложь) Экспорт
УстановитьПривилегированныйРежим(Истина);
ИменаСправочников = ИменаСправочниковХраненияФайлов(ВладелецФайлов, Истина);
Если ИменаСправочников.Количество() = 0 Тогда
Возврат Новый Массив;
КонецЕсли;
ИменаСправочников = ИменаСправочниковХраненияФайлов(ВладелецФайлов);
ТекстЗапросов = "";
Для каждого КлючИЗначение Из ИменаСправочников Цикл
@@ -4466,7 +4456,11 @@
Если Метаданные.Справочники[КлючИЗначение.Ключ].Иерархический = Истина Тогда
ТекстЗапроса = ТекстЗапроса + "
| И Не ПрисоединенныеФайлы.ЭтоГруппа";
| И НЕ ПрисоединенныеФайлы.ЭтоГруппа";
КонецЕсли;
Если КромеПомеченныхНаУдаление Тогда
ТекстЗапроса = ТекстЗапроса + "
| И НЕ ПрисоединенныеФайлы.ПометкаУдаления";
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + КлючИЗначение.Ключ);
@@ -4477,6 +4471,7 @@
Запрос = Новый Запрос(ТекстЗапросов);
Запрос.УстановитьПараметр("ВладелецФайлов", ВладелецФайлов);
УстановитьПривилегированныйРежим(Истина);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
@@ -4604,7 +4599,7 @@
Версия.Наименование = СведенияОФайле.ИмяБезРасширения;
Версия.ПолноеНаименование = Версия.Наименование;
ТипХраненияФайлов = ТипХраненияФайлов(Версия.Размер, Версия.Расширение );
ТипХраненияФайлов = ТипХраненияФайла(Версия.Размер, Версия.Расширение);
Версия.ТипХраненияФайла = ТипХраненияФайлов;
Если СведенияОФайле.СсылкаНаВерсиюИсточник <> Неопределено Тогда // создание Файла из шаблона
@@ -4854,8 +4849,6 @@
КонецЕсли;
ТипХраненияФайлов = ТипХраненияФайлов(СведенияОФайле.Размер, СведенияОФайле.РасширениеБезТочки);
Версия.Владелец = ФайлСсылка;
Если Пользователь = Неопределено Тогда
Версия.Автор = Пользователи.АвторизованныйПользователь();
@@ -4871,7 +4864,8 @@
Версия.Комментарий = СведенияОФайле.Комментарий;
Версия.Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки);
Версия.ТипХраненияФайла = ТипХраненияФайлов;
ТипХраненияФайла = ТипХраненияФайла(СведенияОФайле.Размер, СведенияОФайле.РасширениеБезТочки);
Версия.ТипХраненияФайла = ТипХраненияФайла;
Если ДвоичныеДанные = Неопределено Тогда
ДвоичныеДанные = ДвоичныеДанныеИзСведенийОФайле(СведенияОФайле);
@@ -4882,7 +4876,7 @@
ПроверитьРазмерФайлаДляЗагрузки(Версия);
КонецЕсли;
Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
Версия.ПутьКФайлу = "";
Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка();
КонецЕсли;
@@ -4901,8 +4895,8 @@
Версия.Заполнить(Неопределено);
Контекст = КонтекстОбновленияФайла(Версия, СведенияОФайле.АдресВременногоХранилищаФайла, СсылкаНаВерсию, ТипХраненияФайлов);
МенеджерФайлов = МенеджерФайловПоТипу(ТипХраненияФайлов);
Контекст = КонтекстОбновленияФайла(Версия, СведенияОФайле.АдресВременногоХранилищаФайла, СсылкаНаВерсию, ТипХраненияФайла);
МенеджерФайлов = МенеджерФайловПоТипу(ТипХраненияФайла);
МенеджерФайлов.ПередОбновлениемДанныхФайла(Контекст);
НачатьТранзакцию();
Попытка
@@ -5141,9 +5135,9 @@
Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Параметры.ЗначениеКопирования);
Если Параметры.РежимСоздания = "ИзШаблона" Тогда
ОбъектЗначение = ЗаполнитьДанныеФайлаПоШаблону(Контекст, Параметры, НастраиватьОбъектФормы)
ОбъектЗначение = ЗаполнитьДанныеФайлаПоШаблону(Контекст, Параметры)
Иначе
ОбъектЗначение = ЗаполнитьДанныеФайлаИзКопии(Контекст, Параметры, НастраиватьОбъектФормы);
ОбъектЗначение = ЗаполнитьДанныеФайлаИзКопии(Контекст, Параметры);
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(Параметры.ПрисоединенныйФайл) Тогда
@@ -5243,17 +5237,24 @@
КонецПроцедуры
Функция ЗаполнитьДанныеФайлаПоШаблону(Контекст, Параметры, НастраиватьОбъектФормы)
// Параметры:
// Контекст - ФормаКлиентскогоПриложения:
// * Объект - ОпределяемыйТип.ПрисоединенныйФайлОбъект
// * ЗначениеКопирования - ОпределяемыйТип.ПрисоединенныйФайл
// Параметры - Структура:
// * ЗначениеКопирования - ОпределяемыйТип.ПрисоединенныйФайл
// * ИмяСправочникаХранилищаФайлов - Строка
// * ВладелецФайла - ОпределяемыйТип.ВладелецПрисоединенныхФайлов
//
Функция ЗаполнитьДанныеФайлаПоШаблону(Контекст, Параметры)
КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект();
ДатаСоздания = ТекущаяДатаСеанса();
КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); // ОпределяемыйТип.ПрисоединенныйФайлОбъект
Контекст.ЗначениеКопирования = Параметры.ЗначениеКопирования;
МенеджерСправочника = Справочники[Параметры.ИмяСправочникаХранилищаФайлов]; // СправочникМенеджер
ОбъектЗначение = МенеджерСправочника.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(
ОбъектЗначение,
КопируемыйОбъект,
ЗаполнитьЗначенияСвойств(ОбъектЗначение, КопируемыйОбъект,
"Наименование,
|Зашифрован,
|Описание,
@@ -5263,13 +5264,11 @@
|ВладелецФайла,
|ТекстХранилище,
|ПометкаУдаления");
ОбъектЗначение.ВладелецФайла = Параметры.ВладелецФайла;
ДатаСоздания = ТекущаяДатаСеанса();
ОбъектЗначение.ДатаСоздания = ДатаСоздания;
ОбъектЗначение.ДатаМодификацииУниверсальная = УниверсальноеВремя(ДатаСоздания);
ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь();
ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайлов();
ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайла(КопируемыйОбъект.Размер, КопируемыйОбъект.Расширение);
ОбъектЗначение.ХранитьВерсии = ?(Параметры.ИмяСправочникаХранилищаФайлов = "Файлы",
КопируемыйОбъект.ХранитьВерсии, Ложь);
@@ -5277,7 +5276,7 @@
КонецФункции
Функция ЗаполнитьДанныеФайлаИзКопии(Контекст, Параметры, НастраиватьОбъектФормы)
Функция ЗаполнитьДанныеФайлаИзКопии(Контекст, Параметры)
КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект();
Контекст.ЗначениеКопирования = Параметры.ЗначениеКопирования;
@@ -5293,7 +5292,7 @@
ЗаполнитьЗначенияСвойств(ОбъектЗначение,КопируемыйОбъект, , ИсключаемыеРеквизиты);
ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь();
ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайлов();
ОбъектЗначение.ТипХраненияФайла = ТипХраненияФайла(ОбъектЗначение.Размер, ОбъектЗначение.Расширение);
Возврат ОбъектЗначение;
@@ -8453,21 +8452,17 @@
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Если ИмяСправочника = "ВерсииФайлов" Тогда
ТекстЗапроса = ТекстЗапроса + "
| И НЕ Файлы.Владелец.Зашифрован";
| И НЕ Файлы.Владелец.Зашифрован"; // @query-part-1
Иначе
ТекстЗапроса = ТекстЗапроса + "
| И НЕ Файлы.Зашифрован";
| И НЕ Файлы.Зашифрован"; // @query-part-1
КонецЕсли;
КонецЕсли;
СтрокаЗамены = ?(ПолучитьВсеФайлы,
"ВЫБРАТЬ",
"ВЫБРАТЬ ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")); // @query-part-1
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 1", СтрокаЗамены);// @query-part
СтрокаЗамены = ?(ПолучитьВсеФайлы, "ВЫБРАТЬ", // @query-part
"ВЫБРАТЬ ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")); // @query-part
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 1", СтрокаЗамены); // @query-part
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника);
Возврат ТекстЗапроса;
КонецФункции
@@ -738,14 +738,10 @@
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию);
Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки);
ТипХраненияФайлов = РаботаСФайламиСлужебный.ТипХраненияФайлов(Расширение, СведенияОФайле.Размер);
МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайловПоТипу(ТипХраненияФайлов);
Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(
СсылкаНаВерсию,
СведенияОФайле.АдресВременногоХранилищаФайла,
,
ТипХраненияФайлов);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(Расширение, СведенияОФайле.Размер);
МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайловПоТипу(ТипХраненияФайла);
Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(СсылкаНаВерсию,
СведенияОФайле.АдресВременногоХранилищаФайла, , ТипХраненияФайла);
МенеджерФайла.ПередОбновлениемДанныхФайла(Контекст);
НачатьТранзакцию();
@@ -756,7 +752,7 @@
Версия = СсылкаНаВерсию.ПолучитьОбъект();
ЗаблокироватьДанныеДляРедактирования(СсылкаНаВерсию, , УникальныйИдентификаторФормы);
Версия.ТипХраненияФайла = ТипХраненияФайлов;
Версия.ТипХраненияФайла = ТипХраненияФайла;
Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
СвойстваВерсии = РаботаСФайламиВТомахСлужебный.СвойстваФайлаВТоме();
ЗаполнитьЗначенияСвойств(СвойстваВерсии, Версия);
@@ -777,7 +773,7 @@
ДвоичныеДанные = РаботаСФайламиСлужебный.ДвоичныеДанныеИзСведенийОФайле(СведенияОФайле);
КонецЕсли;
Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные);
@@ -826,7 +822,7 @@
КонецЕсли;
Если Версия.Размер = 0 Тогда
Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); // ДвоичныеДанные
Версия.Размер = ДвоичныеДанныеФайла.Размер();
КонецЕсли;
@@ -1021,7 +1017,7 @@
ДвоичныеДанные = РаботаСФайлами.ДвоичныеДанныеФайла(ИсходныйФайл);
ДвоичныеДанныеВХранилищеЗначения = Новый ХранилищеЗначения(ДвоичныеДанные);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов();
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(НовыйФайл.Размер, НовыйФайл.Расширение);
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
НовыйФайл.ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайлов();
ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанныеВХранилищеЗначения);
@@ -1246,9 +1242,10 @@
//
// Возвращаемое значение:
// Структура:
// * ДанныеПолучены - Булево - успешно ли выполнена операция получения данных;
// * ДанныеФайла - Структура - структура с данными файла.
// * ДанныеПолучены - Булево - Истина, если операция успешна.
// * ДанныеФайла - Структура
// * ТекстСообщения - Строка - описание причины в случае неуспеха, например, "Файл занят другим пользователем".
// * ФайлУжеРедактируетТекущийПользователь - Булево - Истина, если файл уже открыт на редактирование ранее.
///
Функция ЗанятьФайлДляРедактирования(ФайлСсылка, УникальныйИдентификатор = Неопределено,
РабочийКаталогВладельца = Неопределено, ВерсияСсылка = Неопределено) Экспорт
@@ -1257,12 +1254,14 @@
Результат.Вставить("ДанныеПолучены", Ложь);
Результат.Вставить("ДанныеФайла", Неопределено);
Результат.Вставить("ТекстСообщения", "");
Результат.Вставить("ФайлУжеРедактируетТекущийПользователь", Ложь);
Результат.ДанныеФайла = ДанныеФайлаДляОткрытия(ФайлСсылка, ВерсияСсылка, УникальныйИдентификатор, РабочийКаталогВладельца);
Если Не РаботаСФайламиКлиентСервер.МожноЛиЗанятьФайл(Результат.ДанныеФайла, Результат.ТекстСообщения) Тогда
Возврат Результат;
КонецЕсли;
Результат.ФайлУжеРедактируетТекущийПользователь = Результат.ДанныеФайла.ФайлРедактируетТекущийПользователь;
Если Не ЗначениеЗаполнено(Результат.ДанныеФайла.Редактирует)
И Не ЗанятьФайл(Результат.ДанныеФайла, Результат.ТекстСообщения, УникальныйИдентификатор) Тогда
Возврат Результат;
@@ -1174,16 +1174,12 @@
Параметры.Вставить("ДатаИзмененияУниверсальнаяВХранилищеФайлов",
ДанныеФайла.ДатаМодификацииУниверсальная);
Параметры.Вставить("ДатаИзмененияУниверсальнаяВРабочемКаталоге",
Файл.ПолучитьУниверсальноеВремяИзменения());
Параметры.Вставить("ДатаИзмененияВРабочемКаталоге",
МестноеВремя(Параметры.ДатаИзмененияУниверсальнаяВРабочемКаталоге));
Параметры.Вставить("ДатаИзмененияВХранилищеФайлов",
МестноеВремя(Параметры.ДатаИзмененияУниверсальнаяВХранилищеФайлов));
Параметры.Вставить("РазмерВРабочемКаталоге", Файл.Размер());
Параметры.Вставить("РазмерВХранилищеФайлов", ДанныеФайла.Размер);
@@ -1209,7 +1205,6 @@
|Взять файл из программы и заменить им существующий на компьютере или
|открыть существующий без обновления?'"));
Иначе
// Все совпадает - и дата, и размер.
ВернутьРезультат(ОбработчикРезультата, "ОткрытьСуществующий");
Возврат;
КонецЕсли;
@@ -1217,12 +1212,8 @@
ИначеЕсли Параметры.ДатаИзмененияУниверсальнаяВРабочемКаталоге
< Параметры.ДатаИзмененияУниверсальнаяВХранилищеФайлов Тогда
// В хранилище файлов более новый файл.
Если ДанныеФайла.ВРабочемКаталогеНаЧтение = Ложь Тогда
// Файл в рабочем каталоге для редактирования.
Параметры.Вставить("Заголовок", НСтр("ru = 'В программе более новая версия файла'"));
Параметры.Вставить("Сообщение",
НСтр("ru = 'Файл в программе, отмеченный как занятый для редактирования,
|имеет более позднюю дату изменения (новее), чем его копия в рабочем каталоге на компьютере.
@@ -1230,9 +1221,6 @@
|Взять файл из программы и заменить им существующий на компьютере или
|открыть существующий?'"));
Иначе
// Файл в рабочем каталоге для чтения.
// Обновление из хранилища файлов без вопросов.
ВернутьРезультат(ОбработчикРезультата, "ВзятьИзХранилищаИОткрыть");
Возврат;
КонецЕсли;
@@ -1249,9 +1237,7 @@
Возврат;
Иначе
// Файл в рабочем каталоге для чтения.
Параметры.Вставить("Заголовок", НСтр("ru = 'На компьютере более новая копия файла'"));
Параметры.Вставить(
"Сообщение",
НСтр("ru = 'Копия файла в рабочем каталоге на компьютере имеет более позднюю дату изменения (новее), чем в программе. Возможно, эта копия была отредактирована.
@@ -1261,7 +1247,6 @@
КонецЕсли;
КонецЕсли;
// ВыборДействияПриОбнаруженииОтличийФайла
ОткрытьФорму("ОбщаяФорма.ВыборДействияПриОбнаруженииОтличийФайла", Параметры, , , , , ОбработчикРезультата, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры
@@ -1459,6 +1444,10 @@
ДанныеСтроки.Вставить("ДатаПодписи", СтрокаПодписи.ДатаПодписи);
ДанныеСтроки.Вставить("ОписаниеОшибки", СтрокаПодписи.ОписаниеОшибки);
ДанныеСтроки.Вставить("ДатаПроверкиПодписи", СтрокаПодписи.ДатаПроверкиПодписи);
ДанныеСтроки.Вставить("ТипПодписи", СтрокаПодписи.ТипПодписи);
ДанныеСтроки.Вставить("СрокДействияПоследнейМеткиВремени",
СтрокаПодписи.СрокДействияПоследнейМеткиВремени);
ДанныеСтрок.Добавить(ДанныеСтроки);
КонецЦикла;
@@ -2041,41 +2030,34 @@
ПараметрыВыполнения.ФайлНовойВерсии.УстановитьТолькоЧтение(Не ТолькоЧтение);
ПараметрыВыполнения.ФайлНовойВерсии.УстановитьТолькоЧтение(ТолькоЧтение);
Исключение
ТекстОшибки = НСтр("ru = 'Не удалось поместить файл ""%1"" в рабочий каталог на компьютер,
|так как возможно он заблокирован другой программой.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1", Строка(ДанныеФайла.Ссылка));
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось поместить файл ""%1"" в рабочий каталог на компьютер,
|так как возможно он заблокирован другой программой.'"),
Строка(ДанныеФайла.Ссылка));
ВызватьИсключение ТекстОшибки + Символы.ПС + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
// Запрос комментария и признака хранения версии.
Если ПараметрыВыполнения.СоздатьНовуюВерсию = Неопределено Тогда
ПараметрыВыполнения.СоздатьНовуюВерсию = Истина;
СоздатьНовуюВерсиюДоступность = Истина;
ПараметрыВыполнения.СоздатьНовуюВерсию = ДанныеФайла.ХранитьВерсии;
Если ДанныеФайла.ХранитьВерсии Тогда
ПараметрыВыполнения.СоздатьНовуюВерсию = Истина;
// Если автор текущей версии не текущий пользователь, тогда
// отключается доступность флажка «Не создавать новую версию».
Если ДанныеФайла.АвторТекущейВерсии <> ДанныеФайла.Редактирует Тогда
СоздатьНовуюВерсиюДоступность = Ложь;
Иначе
СоздатьНовуюВерсиюДоступность = Истина;
КонецЕсли;
Иначе
ПараметрыВыполнения.СоздатьНовуюВерсию = Ложь;
СоздатьНовуюВерсиюДоступность = Ложь;
КонецЕсли;
// отключается доступность флажка "Не создавать новую версию".
СоздатьНовуюВерсиюДоступность = ДанныеФайла.АвторТекущейВерсии = ДанныеФайла.Редактирует;
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("ФайлСсылка", ДанныеФайла.Ссылка);
СтруктураПараметров.Вставить("КомментарийКВерсии", "");
СтруктураПараметров.Вставить("СоздатьНовуюВерсию", ПараметрыВыполнения.СоздатьНовуюВерсию);
СтруктураПараметров.Вставить("СоздатьНовуюВерсиюДоступность", СоздатьНовуюВерсиюДоступность);
ВозвратФайла = Новый Структура;
ВозвратФайла.Вставить("ФайлСсылка", ДанныеФайла.Ссылка);
ВозвратФайла.Вставить("КомментарийКВерсии", "");
ВозвратФайла.Вставить("СоздатьНовуюВерсию", ПараметрыВыполнения.СоздатьНовуюВерсию);
ВозвратФайла.Вставить("СоздатьНовуюВерсиюДоступность", СоздатьНовуюВерсиюДоступность);
Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеСРасширениемПослеПомещенияФайлаНаСервер", ЭтотОбъект, ПараметрыВыполнения);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", СтруктураПараметров, , , , , Обработчик);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ФормаВозвратаФайла", ВозвратФайла, , , , , Обработчик);
Иначе
ЗакончитьРедактированиеСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения);
КонецЕсли;
Иначе // Параметры СоздатьНовуюВерсию и КомментарийКВерсии переданы извне.
@@ -2850,85 +2832,67 @@
//
Процедура ОбновитьИзФайлаНаДискеПродолжение(ПараметрыВыполнения)
// Данные файла могли измениться - обновим.
ПараметрыВыполнения.ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог(ПараметрыВыполнения.ДанныеФайла.Ссылка);
ПредыдущаяВерсия = ПараметрыВыполнения.ДанныеФайла.Версия;
ИмяИРасширениеФайлаВБазе = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(
ПараметрыВыполнения.ДанныеФайла.ПолноеНаименованиеВерсии, ПараметрыВыполнения.ДанныеФайла.Расширение);
ПараметрыВыполнения.Вставить("ДатаФайлаВБазе", ПараметрыВыполнения.ДанныеФайла.ДатаМодификацииУниверсальная);
Если ПараметрыВыполнения.ВремяИзмененияВыбранное < ПараметрыВыполнения.ДатаФайлаВБазе Тогда // В хранилище более новый.
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файл ""%1""
|на диске на компьютере имеет более позднюю дату изменения (%2),
|чем выбранный файл (%3).
#Если МобильныйКлиент Тогда
ШаблонТекстаВопроса = НСтр("ru = 'Загружаемый файл с устройства ""%1""
|имеет более раннюю дату изменения, чем файл в программе:
|
|Операция прервана.'"),
|%2 изменен загружаемый файл;
|%3 изменен файл в программе.
|
|Заменить файл более старой версией с устройства?'");
#Иначе
ШаблонТекстаВопроса = НСтр("ru = 'Загружаемый файл с компьютера ""%1""
|имеет более раннюю дату изменения, чем файл в программе:
|
|%2 изменен загружаемый файл;
|%3 изменен файл в программе.
|
|Заменить файл более старой версией с компьютера?'");
#КонецЕсли
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаВопроса,
Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка),
МестноеВремя(ПараметрыВыполнения.ДатаФайлаВБазе),
МестноеВремя(ПараметрыВыполнения.ВремяИзмененияВыбранное));
МестноеВремя(ПараметрыВыполнения.ВремяИзмененияВыбранное),
МестноеВремя(ПараметрыВыполнения.ДатаФайлаВБазе));
ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстОшибки, Ложь);
ОписаниеОповещения = Новый ОписаниеОповещения("ОбновитьИзФайлаНаДискеСтараяВерсия", ЭтотОбъект, ПараметрыВыполнения);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
// Проверка наличия файла в рабочем каталоге.
// Проверка редактирования копии файла в рабочем каталоге.
ВРабочемКаталогеНаЧтение = Истина;
ВРабочемКаталогеВладельца = Ложь;
ПолноеИмяФайла = "";
ФайлВРабочемКаталоге = ФайлНаходитсяВЛокальномКэшеФайлов(
Неопределено,
ПредыдущаяВерсия,
ПолноеИмяФайла,
ВРабочемКаталогеНаЧтение,
ВРабочемКаталогеВладельца);
ФайлВРабочемКаталоге = ФайлНаходитсяВЛокальномКэшеФайлов(Неопределено, ПредыдущаяВерсия,
ПолноеИмяФайла, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца);
Если ПараметрыВыполнения.ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда // Файл уже был занят.
Если ФайлВРабочемКаталоге = Истина Тогда
ФайлВКэше = Новый Файл(ПолноеИмяФайла);
ВремяИзмененияВКэше = ФайлВКэше.ПолучитьУниверсальноеВремяИзменения();
Если ПараметрыВыполнения.ВремяИзмененияВыбранное < ВремяИзмененияВКэше Тогда // В рабочем каталоге более новый.
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файл ""%1""
|в рабочем каталоге имеет более позднюю дату изменения (%2),
|чем выбранный файл (%3).
|
|Операция прервана.'"),
Строка(ПараметрыВыполнения.ДанныеФайла.Ссылка),
МестноеВремя(ВремяИзмененияВКэше),
МестноеВремя(ПараметрыВыполнения.ВремяИзмененияВыбранное));
ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстОшибки, Ложь);
Возврат;
КонецЕсли;
#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда
#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда
Если ПараметрыВыполнения.ДанныеФайла.ФайлРедактируетТекущийПользователь И ФайлВРабочемКаталоге Тогда
// Проверка, что файл не занят приложением.
Попытка
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ПолноеИмяФайла);
ВыбранныйФайл = Новый Файл(ПолноеИмяФайла);
ТолькоЧтение = ВыбранныйФайл.ПолучитьТолькоЧтение();
ВыбранныйФайл.УстановитьТолькоЧтение(Не ТолькоЧтение);
ВыбранныйФайл.УстановитьТолькоЧтение(ТолькоЧтение);
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Файл ""%1""
|в рабочем каталоге открыт для редактирования.
|
|Сначала необходимо закончить редактирование, а затем повторите действие.'"),
НСтр("ru = 'Файл ""%1"" открыт для редактирования.
|Сначала необходимо закончить редактирование, а затем повторить действие.'"),
ПолноеИмяФайла);
ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстОшибки, Неопределено);
Возврат;
КонецПопытки;
#КонецЕсли
КонецЕсли;
КонецЕсли;
#КонецЕсли
Если ФайлВРабочемКаталоге И ПараметрыВыполнения.ИмяИРасширениеФайлаНаДиске <> ИмяИРасширениеФайлаВБазе Тогда
Обработчик = Новый ОписаниеОповещения("ОбновитьИзФайлаНаДискеПослеУдаленияФайлаИзРабочегоКаталога", ЭтотОбъект, ПараметрыВыполнения);
@@ -2940,6 +2904,24 @@
КонецПроцедуры
// Продолжение процедуры (см. выше).
//
// Параметры:
// ПараметрыВыполнения - Структура:
// * ДанныеФайла - см. РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог
//
Процедура ОбновитьИзФайлаНаДискеСтараяВерсия(Результат, ПараметрыВыполнения) Экспорт
Если Результат <> КодВозвратаДиалога.Да Тогда
ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Ложь);
Возврат;
КонецЕсли;
ПараметрыВыполнения.ВремяИзмененияВыбранное = ПараметрыВыполнения.ДатаФайлаВБазе;
ОбновитьИзФайлаНаДискеПродолжение(ПараметрыВыполнения);
КонецПроцедуры
// Продолжение процедуры (см. выше).
//
// Параметры:
@@ -2956,7 +2938,6 @@
КонецЕсли;
ПараметрыВыполнения.Вставить("ФайлРедактируетТекущийПользователь", ПараметрыВыполнения.ДанныеФайла.ФайлРедактируетТекущийПользователь);
Если Не ПараметрыВыполнения.ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда
ТекстОшибки = "";
@@ -3204,18 +3185,13 @@
ПараметрыВыполнения.Вставить("ДанныеФайла", Неопределено);
ПараметрыВыполнения.Вставить("РасширениеПодключено", РасширениеРаботыСФайламиПодключено());
ПараметрыВыполнения.Вставить("ФайлУжеРедактируетТекущийПользователь", Ложь);
Результат = РаботаСФайламиСлужебныйВызовСервера.ЗанятьФайлДляРедактирования(ПараметрыВыполнения.ОбъектСсылка,
ПараметрыВыполнения.УникальныйИдентификатор, ПараметрыВыполнения.РабочийКаталогВладельца);
ПараметрыВыполнения.ДанныеФайла = Результат.ДанныеФайла;
ПараметрыВыполнения.Вставить("ФайлУжеРедактируетТекущийПользователь",
Результат.ДанныеФайла.ФайлРедактируетТекущийПользователь);
Если Не ПараметрыВыполнения.ФайлУжеРедактируетТекущийПользователь Тогда
ИзменитьКоличествоЗанятыхФайлов(1);
КонецЕсли;
ПараметрыВыполнения.ФайлУжеРедактируетТекущийПользователь = Результат.ФайлУжеРедактируетТекущийПользователь;
Если Не Результат.ДанныеПолучены Тогда
СтандартнаяОбработка = Истина;
РаботаСФайламиКлиентПереопределяемый.ПриОшибкеЗахватаФайла(ПараметрыВыполнения.ДанныеФайла, СтандартнаяОбработка);
@@ -3231,6 +3207,10 @@
Возврат;
КонецЕсли;
Если Не ПараметрыВыполнения.ФайлУжеРедактируетТекущийПользователь Тогда
ИзменитьКоличествоЗанятыхФайлов(1);
КонецЕсли;
Если ПараметрыВыполнения.РасширениеПодключено Тогда
НаЧтение = Ложь;
ВРабочемКаталогеВладельца = ПараметрыВыполнения.ДанныеФайла.РабочийКаталогВладельца <> "";
@@ -9397,17 +9377,16 @@
КонецФункции
// Находится ли в рабочем каталоге Файл для данной версии.
// Параметры:
// ДанныеФайла - Структура
//
// Возвращаемое значение:
// Булево - файл находится в рабочем каталоге.
// ДанныеФайла - Структура, Неопределено
// ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла.
// ПолноеИмяФайла - Строка - имя файла с путем.
// ВРабочемКаталогеНаЧтение - Булево - файл помещен на чтение.
// ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге).
//
// Возвращаемое значение:
// Булево
//
Функция ФайлНаходитсяВЛокальномКэшеФайлов(ДанныеФайла, ТекущаяВерсия, ПолноеИмяФайла, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца)
ПолноеИмяФайла = "";
@@ -9418,18 +9397,15 @@
Иначе
ВРабочемКаталогеНаЧтение = Истина;
ИмяКаталога = РабочийКаталогПользователя();
// Пытаемся найти такую запись в регистре сведений.
ПолноеИмяФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПолноеИмяФайлаИзРегистра(ТекущаяВерсия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца);
КонецЕсли;
Если ПолноеИмяФайла <> "" Тогда
// Тут надо еще на наличие на диске проверять.
ФайлНаДиске = Новый Файл(ПолноеИмяФайла);
Если ФайлНаДиске.Существует() Тогда
Возврат Истина;
Иначе
ПолноеИмяФайла = "";
// Тут же удалим из регистра - т.к. в регистре есть, а на диске нет.
РаботаСФайламиСлужебныйВызовСервера.УдалитьИзРегистра(ТекущаяВерсия);
КонецЕсли;
КонецЕсли;
@@ -9908,6 +9884,7 @@
ПомещаемыеФайлы = Новый Массив;
ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу1));
ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу2));
ПомещенныеФайлы = Новый Массив;
Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда
Возврат;
@@ -1022,6 +1022,17 @@
Идентификатор = УточненныйИдентификаторЗадания(Идентификатор);
ИдентификаторЗадания = УникальныйИдентификаторЗадания(Идентификатор);
Если ИдентификаторЗадания = Неопределено Тогда
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Регламентное задание по переданному идентификатору не найдено.
|
|Если регламентное задание не предопределенное, то его необходимо сначала добавить
|в список заданий при помощи метода %1.'"),
"РегламентныеЗаданияСервер.ДобавитьЗадание");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов");
ЭлементБлокировки.УстановитьЗначение("Идентификатор", Строка(ИдентификаторЗадания));
@@ -3808,6 +3808,128 @@
КонецФункции
// Проверяет заполнение значения СлужебнаяУчетнаяЗаписьDSS.
// Формирует структуру необходимую для подключения к серверу DSS.
//
// Возвращаемое значение:
// см. СервисКриптографииDSSКлиентСервер.ОтветСервисаПоУмолчанию
//
Функция НастройкиПодключенияСлужебнойУчетнойЗаписи() Экспорт
ТекстОшибки = "";
НастройкиСервера = ПолучитьОписаниеСервисаDSS();
НастройкиСервера.Вставить("Логин", "");
НастройкиСервера.Вставить("Пароль", "");
ИмяНастроек = СервисКриптографииDSSСлужебный.ИмяНастроекСлужебнойУчетнойЗаписи();
УстановитьПривилегированныйРежим(Истина);
СодержимоеНастроек = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ИмяНастроек, "Настройки", Истина);
УстановитьПривилегированныйРежим(Ложь);
Если ТипЗнч(СодержимоеНастроек) = Тип("Строка") Тогда
Попытка
СодержимоеНастроек = СервисКриптографииDSSСлужебный.JsonВСтруктуру(СодержимоеНастроек);
Исключение
СодержимоеНастроек = Неопределено;
КонецПопытки;
КонецЕсли;
Если ТипЗнч(СодержимоеНастроек) <> Тип("Структура") Тогда
ТекстОшибки = НСтр("ru = 'Не установлены настройки служебной учетной записи'");
Иначе
ЗаполнитьЗначенияСвойств(НастройкиСервера, СодержимоеНастроек);
Если НЕ (ЗначениеЗаполнено(НастройкиСервера.Ссылка)
ИЛИ (ЗначениеЗаполнено(НастройкиСервера.АдресСервера)
И ЗначениеЗаполнено(НастройкиСервера.СервисИдентификации)
И ЗначениеЗаполнено(НастройкиСервера.СервисПодписи)
И ЗначениеЗаполнено(НастройкиСервера.СервисПроверки))) Тогда
ТекстОшибки = НСтр("ru = 'Не заданы необходимые настройки подключения'");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НастройкиСервера.Логин) Тогда
ТекстОшибки = НСтр("ru = 'Не задан логин служебной учетной записи'");
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Результат = СервисКриптографииDSSКлиентСервер.ОтветСервисаПоУмолчанию(Ложь);
СервисКриптографииDSSСлужебный.ПолучитьОписаниеОшибки(Результат, "ОшибкаВыполнения", ТекстОшибки);
Иначе
НастройкиПользователя = НастройкиПроизвольногоПодключения(НастройкиСервера,
НастройкиСервера.Логин,
НастройкиСервера.Пароль);
Результат = СервисКриптографииDSSКлиентСервер.ОтветСервисаПоУмолчанию(Истина);
Результат.Вставить("Результат", НастройкиПользователя);
КонецЕсли;
Возврат Результат;
КонецФункции
// Формирует структуру необходимую для подключения к серверу DSS.
// Необходим в случае использования служебных учетных записей.
//
// Параметры:
// НастройкиСервера - Структура
// ЛогинУчетнойЗаписи - Строка
// ПарольУчетнойЗаписи - Строка
// СпособАвторизации - Неопределено
// - ПеречисленияСсылка.СпособыАвторизацииDSS
//
// Возвращаемое значение:
// см. НастройкиПользователяПоУмолчанию
//
Функция НастройкиПроизвольногоПодключения(НастройкиСервера, ЛогинУчетнойЗаписи, ПарольУчетнойЗаписи = "", СпособАвторизации = Неопределено) Экспорт
НастройкиПользователя = Неопределено;
СервисКриптографииDSSПодтверждениеСервер.ДополнитьНастройкиПользователя(НастройкиПользователя, НастройкиСервера, ЛогинУчетнойЗаписи);
НастройкиПользователя.Пароль = СервисКриптографииDSSКлиентСервер.ОбъектПароля(ПарольУчетнойЗаписи);
Если ЗначениеЗаполнено(СпособАвторизации) Тогда
НастройкиПользователя.ПервичнаяАутентификация = СпособАвторизации;
Иначе
НастройкиПользователя.ПервичнаяАутентификация = Перечисления.СпособыАвторизацииDSS.Первичный_УчетныеДанные;
КонецЕсли;
Возврат НастройкиПользователя;
КонецФункции
// Формирует шаблон для заполнения информации о сервере DSS
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьОписаниеСервисаDSS() Экспорт
Результат = Новый Структура;
Результат.Вставить("Ссылка", Новый(СервисКриптографииDSSКлиентСервер.ПолучитьТипСервераОблачнойПодписи()));
Результат.Вставить("Наименование", "");
Результат.Вставить("АдресСервера", "");
Результат.Вставить("АдресЛичногоКабинета", "");
Результат.Вставить("СервисИдентификации", "");
Результат.Вставить("СервисПодписи", "");
Результат.Вставить("СервисПроверки", "");
Результат.Вставить("СервисОбработкиДокументов", "");
Результат.Вставить("СервисАудита", "");
Результат.Вставить("ВнутреннийИдентификатор", "");
Результат.Вставить("ИдентификаторЦИ", "");
Результат.Вставить("ИдентификаторСЭП", "");
Результат.Вставить("ШаблонПодтверждения", "");
Результат.Вставить("ТаймАут", 120);
Результат.Вставить("ВерсияАПИ", "");
Результат.Вставить("Комментарий", "");
Результат.Вставить("Используется", Истина);
Результат.Вставить("ОграничениеАвторизации", "");
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ПоддержкаВнешнегоСоединения
@@ -48,13 +48,16 @@
Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
МодульРаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьСервисDSS");
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Имя = "СерверОблачнойПодписи";
СтрокаПараметра.Описание = НСтр("ru = 'Сервер облачной подписи'", КодЯзыка());
СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка");
СтрокаПараметра = ТаблицаПараметров.Добавить();
СтрокаПараметра.Имя = "СлужебнаяУчетнаяЗаписьDSS";
СтрокаПараметра.Описание = НСтр("ru = 'Служебная учетная запись DSS'", КодЯзыка());
СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка");
КонецЕсли;
КонецПроцедуры
@@ -72,6 +75,13 @@
НастройкиСервиса = РазобратьФайлНастроекСервера(ЗначенияПараметров.СерверОблачнойПодписи);
СоздатьСерверОблачнойПодписи(НастройкиСервиса);
ЗначенияПараметров.Удалить("СерверОблачнойПодписи");
ИначеЕсли ЗначенияПараметров.Свойство("СлужебнаяУчетнаяЗаписьDSS") Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(
ИмяНастроекСлужебнойУчетнойЗаписи(),
ЗначенияПараметров.СлужебнаяУчетнаяЗаписьDSS, "Настройки");
УстановитьПривилегированныйРежим(Ложь);
ЗначенияПараметров.Удалить("СлужебнаяУчетнаяЗаписьDSS");
КонецЕсли;
КонецПроцедуры
@@ -107,7 +117,7 @@
МассивВерсий = Новый Массив;
МассивВерсий.Добавить("1.0.0.1");
СтруктураПоддерживаемыхВерсий.Вставить("ОблачнаяПодпись", МассивВерсий);
СтруктураПоддерживаемыхВерсий.Вставить("СервисПодписиКриптоПроDSS", МассивВерсий);
КонецПроцедуры
@@ -7538,6 +7548,17 @@
КонецФункции
// Задает имя для чтения данных о служебной учетной записи из безопасного хранилища
//
// Возвращаемое значение:
// Строка
//
Функция ИмяНастроекСлужебнойУчетнойЗаписи() Экспорт
Возврат "СервисКриптографииDSS.СлужебнаяУчетнаяЗаписьDSS";
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -419,7 +419,11 @@
ОбъектОповещения = Новый ОписаниеОповещения("АутентификацияДвухФакторнаяПолучениеПароля", ЭтотОбъект);
ОповещениеСледующее = ОбработчикОповещения(ОбъектОповещения, ВходящийКонтекст);
ПояснениеОперации = СвойствоСтруктуры(ВходящийКонтекст.ПараметрыОперации, "ПояснениеОперации", "");
Если Не ЗначениеЗаполнено(ПояснениеОперации) Тогда
ПояснениеОперации = НСтр("ru = 'Введите пароль для авторизации.'", КодЯзыка());
КонецЕсли;
ВходящийКонтекст.ПараметрыОперации.Вставить("ПояснениеОперации", ПояснениеОперации);
ОткрытьФормуВводПароля(
@@ -2510,6 +2510,8 @@
Если ЭтоОбменДаннымиВМоделиСервиса
И НовоеЗначение.Ключ = "СтандартныеПодсистемыВАвтономномРежиме" Тогда
ПредыдущееЗначение = ОбщегоНазначения.ЭтоАвтономноеРабочееМесто();
// Всегда синхронизируем константу СтандартныеПодсистемыВАвтономномРежиме с ЭтоАвтономноеРабочееМесто
Константы[НовоеЗначение.Ключ].Установить(НовоеЗначение.Значение);
Иначе
ПредыдущееЗначение = Константы[НовоеЗначение.Ключ].Получить();
КонецЕсли;
@@ -7629,7 +7629,11 @@
Если СтароеЗначение.ХешСумма <> НовоеЗначение.ХешСумма Тогда
ПроверитьАктуальностьМетаданных();
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, НовоеЗначение, Истина);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
Кэш.Проверка.Дата = ТекущаяДатаСеанса;
@@ -16357,7 +16361,7 @@
|
|"); // @query-part-1
ЗапросыПакета.Добавить(СтрЗаменить(ОписаниеЗапросов.Получить("ТекстЗапросаОберткиВыбораДанных"),
"#ЗапросыВыбораДанных", ТекстСОтступом(ТекстыЗапросов, " ")));
"#ЗапросыВыбораДанных", "(" + ТекстСОтступом(ТекстыЗапросов, " ") + ")"));
КонецЕсли;
ЗапросыПакета.Добавить(ОписаниеЗапросов.Получить("ТекстЗапросаТочечнойПроверки"));
Запрос.Текст = СтрСоединить(ЗапросыПакета, ОбщегоНазначения.РазделительПакетаЗапросов());
@@ -20584,9 +20588,11 @@
РолиПрофилейГруппДоступа.Колонки.Добавить("ИмяРолиВерхнийРегистр", ТипИмениРоли);
РолиПрофилейГруппДоступа.Индексы.Добавить("Роль");
Отбор = Новый Структура("Роль");
ТребуетсяПроверитьАктуальностьМетаданных = Ложь;
Для Каждого ОписаниеРоли Из ОбъектыМетаданныхРолей Цикл
Если ТипЗнч(ОписаниеРоли.Значение) <> Тип("ОбъектМетаданных") Тогда
ТребуетсяПроверитьАктуальностьМетаданных = Истина;
Продолжить;
КонецЕсли;
ИмяРоли = ОписаниеРоли.Значение.Имя;
@@ -20598,6 +20604,9 @@
Строка.ИмяРолиВерхнийРегистр = ИмяРолиВерхнийРегистр;
КонецЦикла;
КонецЦикла;
Если ТребуетсяПроверитьАктуальностьМетаданных Тогда
ПроверитьАктуальностьМетаданных();
КонецЕсли;
РолиПрофилейГруппДоступа.Индексы.Добавить("Профиль,ИмяРолиВерхнийРегистр");
ГруппыДоступаПрофилей = РезультатыЗапроса[3].Выгрузить();
@@ -21703,6 +21712,7 @@
КлючПраваРоли = ОписаниеРоли.ИмяРоли + "/" + ПолноеИмя + "/" + Условие.ИмяПрава;
ЕстьПравоВРоли = Контекст.ПраваРолейФункцииПравоДоступа.Получить(КлючПраваРоли);
Если ЕстьПравоВРоли = Неопределено Тогда
Если ЗначениеЗаполнено(ОписаниеРоли.ИмяРоли) Тогда
ПолноеИмяРоли = "Роль." + ОписаниеРоли.ИмяРоли;
Роль = Контекст.ОбъектыМетаданныхФункцииПравоДоступа.Получить(ПолноеИмяРоли);
Если Роль = Неопределено Тогда
@@ -21711,6 +21721,9 @@
КонецЕсли;
ЕстьПравоВРоли = ПравоДоступа(Условие.ИмяПрава, Описание.ОбъектМетаданных, Роль,
Описание.ИмяСтандартногоРеквизита);
Иначе
ЕстьПравоВРоли = Ложь;
КонецЕсли;
Контекст.ПраваРолейФункцииПравоДоступа.Вставить(КлючПраваРоли, ЕстьПравоВРоли);
КонецЕсли;
Если ЕстьПравоВРоли Тогда
@@ -31990,7 +32003,7 @@
ИначеЕсли Результат.ДляВнешнихПользователей Тогда
Если Результат.БезЗаписиКлючейДоступа
И Не Результат.БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей Тогда
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 995
| КлючиДоступаКОбъектам.Объект КАК ТекущаяСсылка
|ИЗ
@@ -32002,12 +32015,12 @@
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| КлючиДоступаКОбъектам.Объект";
| КлючиДоступаКОбъектам.Объект"; // @query-part-1
Иначе
ТекстЗапроса = "";
КонецЕсли;
ИначеЕсли Результат.БезЗаписиКлючейДоступаДляПользователейИВнешнихПользователей Тогда
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 995
| КлючиДоступаКОбъектам.Объект КАК ТекущаяСсылка
|ИЗ
@@ -32018,9 +32031,9 @@
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| КлючиДоступаКОбъектам.Объект";
| КлючиДоступаКОбъектам.Объект"; // @query-part-1
Иначе
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 995
| КлючиДоступаКОбъектам.Объект КАК ТекущаяСсылка,
| ТекущийСписок.Ссылка ЕСТЬ NULL КАК Удалить
@@ -32032,11 +32045,11 @@
|ГДЕ
| ТИПЗНАЧЕНИЯ(КлючиДоступаКОбъектам.Объект) = ТИП(&ТекущийСписок)
| И ВЫРАЗИТЬ(КлючиДоступаКОбъектам.Объект КАК &ТекущийСписок) > &ПоследняяОбработаннаяСсылка
| И #Условие
| И &УсловиеЗапроса
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| КлючиДоступаКОбъектам.Объект";
| КлючиДоступаКОбъектам.Объект"; // @query-part-1
Если Результат.БезЗаписиКлючейДоступа Тогда
Условие =
"(КлючиДоступаКОбъектам.КлючДоступаПользователей <> ЗНАЧЕНИЕ(Справочник.КлючиДоступа.ПустаяСсылка)
@@ -32044,7 +32057,7 @@
Иначе
Условие = "ТекущийСписок.Ссылка ЕСТЬ NULL"; // @query-part-1
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Условие", Условие);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеЗапроса", Условие);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекущийСписок", Результат.Список);
Результат.ТекстЗапросаУстаревшихЭлементовДанных = ТекстЗапроса;
@@ -32263,7 +32276,7 @@
Контекст.Вставить("ТекстЗапросаТочечнойПроверки");
Если Контекст.СписокСДатой Тогда
Контекст.ТекстЗапросаПроверки = // @query-part-1
Контекст.ТекстЗапросаПроверки =
"ВЫБРАТЬ ПЕРВЫЕ 995
| ТекущийСписок.Ссылка КАК ТекущаяСсылка,
| ТекущийСписок.Дата КАК Дата
@@ -32274,13 +32287,13 @@
|ГДЕ
| ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL
| ИЛИ #Условие)
| ИЛИ &УсловиеЗапроса)
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| ТекущийСписок.Дата УБЫВ";
Контекст.ТекстЧастиЗапросаПроверки = // @query-part-1
Контекст.ТекстЧастиЗапросаПроверки =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 995
| ТекущийСписок.Ссылка КАК ТекущаяСсылка,
| ТекущийСписок.Дата КАК Дата
@@ -32291,13 +32304,13 @@
| #Соединения
|ГДЕ
| ТекущийСписок.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И #Условие
| И &УсловиеЗапроса
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| ТекущийСписок.Дата УБЫВ";
| ТекущийСписок.Дата УБЫВ"; // @query-part-1
Иначе
Контекст.ТекстЗапросаПроверки = // @query-part-1
Контекст.ТекстЗапросаПроверки =
"ВЫБРАТЬ ПЕРВЫЕ 995
| ТекущийСписок.Ссылка КАК ТекущаяСсылка
|ИЗ
@@ -32307,11 +32320,11 @@
|ГДЕ
| ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка
| И (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL
| ИЛИ #Условие)
| ИЛИ &УсловиеЗапроса)
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| ТекущийСписок.Ссылка";
| ТекущийСписок.Ссылка"; // @query-part-1
Контекст.ТекстЧастиЗапросаПроверки =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 995
@@ -32323,7 +32336,7 @@
| #Соединения
|ГДЕ
| ТекущийСписок.Ссылка >= &ПоследняяОбработаннаяСсылка
| И #Условие
| И &УсловиеЗапроса
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
@@ -32341,8 +32354,8 @@
| ПО (КлючиДоступаКОбъектам.Объект = ТекущийСписок.Ссылка)
|ГДЕ
| (КлючиДоступаКОбъектам.Объект ЕСТЬ NULL
| ИЛИ #Условие)
| И &УточнениеПланаЗапроса"; // @query-part-1
| ИЛИ &УсловиеЗапроса)
| И &УточнениеПланаЗапроса";
Если Не Контекст.Свойство("ОписаниеЗапросовПроверкиПоВедущимОбъектам") Тогда
Возврат;
@@ -32353,7 +32366,7 @@
| ТекущийСписок.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТекущийСписокПоВедущимОбъектам
|ИЗ
| (#ЗапросыВыбораДанных) КАК ТекущийСписок"; // @query-part-1
| #ЗапросыВыбораДанных КАК ТекущийСписок";
Контекст.ОписаниеЗапросовПроверкиПоВедущимОбъектам.Вставить("ТекстЗапросаОберткиВыбораДанных",
ТекстЗапросаОберткиВыбораДанныхДляТочечнойПроверки);
@@ -32474,14 +32487,14 @@
КонецЕсли;
// Установка шаблонов запросов.
ТекстЗапросаПроверкиКомбинаций = // @query-part-1
ТекстЗапросаПроверкиКомбинаций =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 995
| &ОпорныеПоляДляВыбора
|ИЗ
| &ТекущийСписок КАК ТекущийСписок
|ГДЕ
| &ОпорныеПоляДляОтбора
| И (#Условие)
| И (&УсловиеЗапроса)
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
@@ -32492,38 +32505,38 @@
ТекстЗапросаПроверкиКомбинаций = СтрЗаменить(ТекстЗапросаПроверкиКомбинаций, "&ОпорныеПоляДляУпорядочения", ОпорныеПоля.ДляУпорядочения);
Контекст.Вставить("ТекстЗапросаПроверки", ТекстЗапросаПроверкиКомбинаций);
ТекстЗапросаТочечнойПроверкиКомбинаций = // @query-part-1
ТекстЗапросаТочечнойПроверкиКомбинаций =
"ВЫБРАТЬ
| &ОпорныеПоляДляВыбора
|ИЗ
| ТекущийСписокПоВедущимОбъектам КАК ТекущийСписок
|ГДЕ
| (#Условие)
| (&УсловиеЗапроса)
| И &УточнениеПланаЗапроса";
ТекстЗапросаТочечнойПроверкиКомбинаций = СтрЗаменить(ТекстЗапросаТочечнойПроверкиКомбинаций,
"&ОпорныеПоляДляВыбора", ОпорныеПоля.ДляВыбора);
Контекст.Вставить("ТекстЗапросаТочечнойПроверки", ТекстЗапросаТочечнойПроверкиКомбинаций);
ТекстЗапросаОберткиВыбораДанныхДляТочечнойПроверкиКомбинаций = // @query-part-1
ТекстЗапросаОберткиВыбораДанныхДляТочечнойПроверкиКомбинаций =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 995
| &ОпорныеПоляДляВыбора,
| ТекущийСписок.КлючДоступа КАК КлючДоступа
|ПОМЕСТИТЬ ТекущийСписокПоВедущимОбъектам
|ИЗ
| (#ЗапросыВыбораДанных) КАК ТекущийСписок";
| #ЗапросыВыбораДанных КАК ТекущийСписок";
ТекстЗапросаОберткиВыбораДанныхДляТочечнойПроверкиКомбинаций = СтрЗаменить(ТекстЗапросаОберткиВыбораДанныхДляТочечнойПроверкиКомбинаций,
"&ОпорныеПоляДляВыбора", ОпорныеПоля.ДляВыбора);
Контекст.ОписаниеЗапросовПроверкиПоВедущимОбъектам.Вставить("ТекстЗапросаОберткиВыбораДанных",
ТекстЗапросаОберткиВыбораДанныхДляТочечнойПроверкиКомбинаций);
ШаблонЗапроса = // @query-part-1
ШаблонЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 995
| &ОпорныеПоляДляВыбора,
| ТекущийСписок.КлючДоступа КАК КлючДоступа
|ИЗ
| ";
| "; // @query-part-1
ШаблонЗапроса = СтрЗаменить(ШаблонЗапроса, "&ОпорныеПоляДляВыбора", ОпорныеПоля.ДляВыбора);
ДобавитьЗапросыПроверкиПоВедущимСпискам(ШаблонЗапроса, Контекст);
@@ -32639,14 +32652,17 @@
Поля.Добавить(ОписаниеПоля.Ключ + " КАК " + ОписаниеПоля.Ключ);
КонецЦикла;
ТекстЗапросаПараметров = // @query-part-1
ТекстЗапросаПараметров =
"ВЫБРАТЬ
| ТекущиеДанныеДляОтбора." + СтрСоединить(Поля, ",
| ТекущиеДанныеДляОтбора.") + "
|ПОМЕСТИТЬ " // @query-part-1
+ ВедущаяТаблицаБезТочек + "
| &ПоляТаблицы
|ПОМЕСТИТЬ #ВедущаяТаблицаБезТочек
|ИЗ
| &" + ВедущаяТаблицаБезТочек + " КАК ТекущиеДанныеДляОтбора"; // @query-part-1 @query-part-2
| &ВедущаяТаблицаБезТочек КАК ТекущиеДанныеДляОтбора";
ТекстЗапросаПараметров = СтрЗаменить(ТекстЗапросаПараметров, "&ПоляТаблицы", "
| ТекущиеДанныеДляОтбора." + СтрСоединить(Поля, ",
| ТекущиеДанныеДляОтбора."));
ТекстЗапросаПараметров = СтрЗаменить(ТекстЗапросаПараметров, "#ВедущаяТаблицаБезТочек", ВедущаяТаблицаБезТочек);
ТекстЗапросаПараметров = СтрЗаменить(ТекстЗапросаПараметров, "&ВедущаяТаблицаБезТочек", "&" + ВедущаяТаблицаБезТочек);
ОписаниеЗапросов = Новый Структура;
ОписаниеЗапросов.Вставить("ТипыПолей", ТипыПолей);
@@ -32676,12 +32692,14 @@
ИмяВременнойТаблицы = "ТекущиеДанныеДляОтбора" + ВидВедущегоСписка;
ТекстЗапросаПараметров = // @query-part-1
ТекстЗапросаПараметров =
"ВЫБРАТЬ
| ТекущиеДанныеДляОтбора.Ссылка
|ПОМЕСТИТЬ " + ИмяВременнойТаблицы + "
|ПОМЕСТИТЬ #ИмяВременнойТаблицы
|ИЗ
| &" + ВидВедущегоСписка + " КАК ТекущиеДанныеДляОтбора"; // @query-part-1 @query-part-2
| &ВидВедущегоСписка КАК ТекущиеДанныеДляОтбора";
ТекстЗапросаПараметров = СтрЗаменить(ТекстЗапросаПараметров, "#ИмяВременнойТаблицы", ИмяВременнойТаблицы);
ТекстЗапросаПараметров = СтрЗаменить(ТекстЗапросаПараметров, "&ВидВедущегоСписка", "&" + ВидВедущегоСписка);
ТекстыЗапросовПоКлючам = Новый Соответствие;
Для Каждого СоединениеОтбора Из Свойства.СоединенияОтборов Цикл
@@ -32715,11 +32733,11 @@
Условие = ТекстСОтступом(Условие, " ");
Контекст.ТекстЗапросаПроверки = СтрЗаменить(Контекст.ТекстЗапросаПроверки,
"#Условие", ?(Контекст.ЭтоСсылочныйТип, Условие, ТекстСОтступом(Условие, " ")));
"&УсловиеЗапроса", ?(Контекст.ЭтоСсылочныйТип, Условие, ТекстСОтступом(Условие, " ")));
ПодставитьОбщиеПараметрыВЗапрос(Контекст.ТекстЗапросаПроверки, Контекст);
Результат.ТекстЗапросаЭлементовДанныхСУстаревшимиКлючами = Контекст.ТекстЗапросаПроверки;
ТекстЗапроса = СтрЗаменить(Контекст.ТекстЗапросаТочечнойПроверки, "#Условие", Условие);
ТекстЗапроса = СтрЗаменить(Контекст.ТекстЗапросаТочечнойПроверки, "&УсловиеЗапроса", Условие);
ПодставитьОбщиеПараметрыВЗапрос(ТекстЗапроса, Контекст);
Контекст.ОписаниеЗапросовПроверкиПоВедущимОбъектам.Вставить("ТекстЗапросаТочечнойПроверки", ТекстЗапроса);
@@ -33446,11 +33464,11 @@
| (&ТекстЗапросаСтандартнойПроверки)
| КОНЕЦ";
Иначе
ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = // @query-part-1
ТекстЗапросаСПроверкойПоВладельцамНастроекПрав =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЛОЖЬ КАК ЗначениеЛожь
|ИЗ
| " + Контекст.Список + " КАК ТекущаяТаблица
| &ТекущаяТаблица КАК ТекущаяТаблица
|ГДЕ
| &ОтборПоИзмерениям
| И ВЫБОР
@@ -33458,7 +33476,9 @@
| ТОГДА &УсловиеСПроверкойПоВладельцамНастроекПрав
| ИНАЧЕ ИСТИНА В
| (&ТекстЗапросаСтандартнойПроверки)
| КОНЕЦ"; // @query-part-1
| КОНЕЦ";
ТекстЗапросаСПроверкойПоВладельцамНастроекПрав = СтрЗаменить(ТекстЗапросаСПроверкойПоВладельцамНастроекПрав,
"&ТекущаяТаблица", Контекст.Список)
КонецЕсли;
УсловиеПроверкиТипа = "";
Для Каждого СвойстваТипа Из ТипыВладельцевНастроекПравПоля Цикл
@@ -33611,15 +33631,17 @@
КонецЕсли;
Если Не Контекст.ЭтоСсылочныйТип Тогда
ТекстЗапроса = // @query-part-1
ТекстЗапросаРегистра =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЛОЖЬ КАК ЗначениеЛожь
|ИЗ
| " + Контекст.Список + " КАК ТекущаяТаблица
| &ТекущаяТаблица КАК ТекущаяТаблица
|ГДЕ
| &ОтборПоИзмерениям
| И НЕ ИСТИНА В
| (" + ТекстСОтступом(ТекстЗапроса, " ") + ")"; // @query-part-1
| (&УсловиеЗапроса)";
ТекстЗапросаРегистра = СтрЗаменить(ТекстЗапросаРегистра, "&ТекущаяТаблица", Контекст.Список);
ТекстЗапроса = СтрЗаменить(ТекстЗапросаРегистра, "&УсловиеЗапроса", ТекстСОтступом(ТекстЗапроса, " "));
КонецЕсли;
Если ЗначениеЗаполнено(ТекстЗапросаСПроверкойПоВладельцамНастроекПрав) Тогда
@@ -33852,22 +33874,22 @@
Если НомерШапки = 0 Тогда
Соединения = СоединенияИПоля.Соединения + "
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа КАК Шапка0
|ПО (Шапка0.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)" + ?(Контекст.СоставПолей = 0, "
| И (Шапка0.Список = &Список)", "") + "
|ПО (Шапка0.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)" // @query-part-1
+ ?(Контекст.СоставПолей = 0, "
| И (Шапка0.Список = &Список)", "") // @query-part-1
+ "
| И (Шапка0.СоставПолей = &СоставПолей)"; // @query-part-1
Иначе
Соединения = СоединенияИПоля.Соединения + "
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.Шапка КАК Шапка?
|ПО (Шапка?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)
| И (Шапка?.НомерСтроки = " + НомерШапки + ")"; // @query-part-1
| И (Шапка?.НомерСтроки = &НомерШапки)"; // @query-part-1
Соединения = СтрЗаменить(Соединения, "&НомерШапки", НомерШапки);
КонецЕсли;
Соединения = СокрЛ(Соединения) + ТекстСОтступом(СоединенияИПоля.Поля, " ");
Соединения = ТекстСОтступом(Соединения, " ");
Условие = "НЕ Шапка?.Ссылка ЕСТЬ NULL"; // @query-part-1
Условие = ТекстСОтступом(Условие, " ");
ШаблонТекстаЧастиУсловия =
"НЕ ИСТИНА В
|(ВЫБРАТЬ ПЕРВЫЕ 1
@@ -33877,12 +33899,12 @@
| ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина
| #Соединения
|ГДЕ
| #Условие)"; // @query-part-1
| &УсловиеЗапроса)"; // @query-part-1
ТекстЧастиУсловия = ШаблонТекстаЧастиУсловия;
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Соединения", Соединения);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Условие", Условие);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "&УсловиеЗапроса",
ТекстСОтступом("НЕ Шапка?.Ссылка ЕСТЬ NULL", " ")); // @query-part-1
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "Шапка?", "Шапка" + НомерШапки);
Контекст.ЧастиУсловияПроверки.Добавить(ТекстЧастиУсловия);
@@ -33952,12 +33974,12 @@
| ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина
| #Соединения
|ГДЕ
| #Условие)"; // @query-part-1
| &УсловиеЗапроса)"; // @query-part
// Прямое соединение (проверка наличия требуемых записей в ключе).
Соединения = ИсходныеСоединения + "
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть?
|ПО (ТабличнаяЧасть?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)"; // @query-part-1
|ПО (ТабличнаяЧасть?.Ссылка = #КлючиДоступаКДанным.#КлючДоступаПользователей)"; // @query-part
Соединения = СокрЛ(Соединения) + ТекстСОтступом(Поля, " ");
Соединения = ТекстСОтступом(Соединения, " ");
@@ -33969,7 +33991,7 @@
ТекстЧастиУсловия = ШаблонТекстаЧастиУсловия;
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Соединения", Соединения);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Условие", Условие);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "&УсловиеЗапроса", Условие);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "ТабличнаяЧасть?", ИмяТабличнойЧастиКлюча);
Контекст.ЧастиУсловияПроверки.Добавить(ТекстЧастиУсловия);
@@ -34042,7 +34064,7 @@
ТекстЧастиУсловия = ШаблонТекстаЧастиУсловия;
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Соединения", Соединения);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "#Условие", Условие);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "&УсловиеЗапроса", Условие);
ТекстЧастиУсловия = СтрЗаменить(ТекстЧастиУсловия, "ТабличнаяЧасть?", ИмяТабличнойЧастиКлюча);
Контекст.ЧастиУсловияПроверки.Добавить(ТекстЧастиУсловия);
@@ -34052,25 +34074,29 @@
Процедура ДобавитьЗаполнениеШапкиКлюча(Контекст, НомерШапки)
Если Не Контекст.ЭтоСсылочныйТип И НомерШапки = 0 Тогда
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка,
| " + Контекст.ОпорныеПоля.ДляВыбора + "
| &ОпорныеПоляДляВыбора
| ПОМЕСТИТЬ ТекущийСписок
|ИЗ
| &ЗначенияОпорныхПолей КАК ТекущийСписок"; // @query-part-1
| &ЗначенияОпорныхПолей КАК ТекущийСписок";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляВыбора", Контекст.ОпорныеПоля.ДляВыбора);
Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса);
ИначеЕсли НомерШапки = 0 Тогда
Для Каждого ОписаниеТаблицы Из Контекст.ПоляТаблицОбъекта.Результат Цикл
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| ТекущаяТаблица." + СтрСоединить(ОписаниеТаблицы.Поля, ",
| ТекущаяТаблица.") + "
| ПОМЕСТИТЬ " // @query-part-1
+ ОписаниеТаблицы.ПолноеИмяТаблицы + "
| &ПоляТаблицы
| ПОМЕСТИТЬ #ПолноеИмяТаблицы
|ИЗ
| &" + ОписаниеТаблицы.ПолноеИмяТаблицы + " КАК ТекущаяТаблица"; // @query-part-1 @query-part-2
| &ПолноеИмяТаблицы КАК ТекущаяТаблица";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляТаблицы",
"ТекущаяТаблица." + СтрСоединить(ОписаниеТаблицы.Поля, ",
| ТекущаяТаблица."));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПолноеИмяТаблицы", ОписаниеТаблицы.ПолноеИмяТаблицы);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", "&" + ОписаниеТаблицы.ПолноеИмяТаблицы);
Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти.Добавить(ТекстЗапроса);
КонецЦикла;
КонецЕсли;
@@ -34086,11 +34112,13 @@
// Выбор значений из объектов для поиска и создания ключей доступа.
Если Контекст.ЭтоСсылочныйТип Тогда
ТекстЗапроса = // @query-part-1 // @query-part-3
ТекстЗапроса =
"ВЫБРАТЬ
| ТекущийСписок.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Поля, " ") + "
| ТекущийСписок.Ссылка КАК ТекущаяСсылка
| ,&ПоляЗапроса
|ИЗ
| &ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + "
| &ТекущийСписок КАК ТекущийСписок
| #СоединенияЗапроса
|ГДЕ
| ТекущийСписок.Ссылка В (&СсылкиНаОбъекты)
| И &УточнениеПланаЗапроса
@@ -34100,28 +34128,35 @@
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
Иначе
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Поля, " ") + "
| ТекущийСписок.ТекущаяСсылка КАК ТекущаяСсылка
| ,&ПоляЗапроса
|ИЗ
| ТекущийСписок КАК ТекущийСписок" + ТекстСОтступом(СоединенияИПоля.Соединения, " ") + "
| ТекущийСписок КАК ТекущийСписок
| #СоединенияЗапроса
|ГДЕ
| &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| ТекущаяСсылка, " + Контекст.ОпорныеПоля.ДляУпорядочения + "
| ТекущаяСсылка,
| &ОпорныеПоляДляУпорядочения
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОпорныеПоляДляУпорядочения", Контекст.ОпорныеПоля.ДляУпорядочения);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ПоляЗапроса", ТекстСОтступом(СоединенияИПоля.Поля, " "));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#СоединенияЗапроса", ТекстСОтступом(СоединенияИПоля.Соединения, " "));
Контекст.ЧастиЗапросаЗначенийИзОбъектов.Добавить(ТекстЗапроса);
Контекст.ЧастиЗапросаЗначенийИзОбъектовВПамяти.Добавить(ТекстЗапроса);
// Выбор значений из ключей доступа для сравнения со значениями требуемых ключей.
Если НомерШапки = 0 Тогда
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| Шапка0.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + "
| Шапка0.Ссылка КАК ТекущаяСсылка
| ,&Реквизиты
|ИЗ
| Справочник.КлючиДоступа КАК Шапка0
|ГДЕ
@@ -34135,15 +34170,17 @@
|УПОРЯДОЧИТЬ ПО
| ТекущаяСсылка
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
| ТекущаяСсылка";
Иначе
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| Шапка?.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + "
| Шапка?.Ссылка КАК ТекущаяСсылка
| ,&Реквизиты
|ИЗ
| Справочник.КлючиДоступа.Шапка КАК Шапка?
|ГДЕ
| Шапка?.НомерСтроки = " + НомерШапки + "
| &УсловиеНомераШапки
| И Шапка?.Ссылка.Хеш В(&Хеши)
| И Шапка?.Ссылка.Список = &Список
| И Шапка?.Ссылка.СоставПолей = &СоставПолей
@@ -34154,9 +34191,12 @@
|УПОРЯДОЧИТЬ ПО
| ТекущаяСсылка
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
| ТекущаяСсылка"; // @query-part
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеНомераШапки",
"Шапка" + НомерШапки + ".НомерСтроки = " + НомерШапки);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&Реквизиты", ТекстСОтступом(СоединенияИПоля.Реквизиты, " "));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Шапка?", "Шапка" + НомерШапки);
Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения.Добавить(ТекстЗапроса);
@@ -34196,7 +34236,8 @@
Если НомерШапки = 0 Тогда
ТекстЗапроса = // @query-part-1
"ВЫБРАТЬ
| ПорцияКлючей.Ссылка КАК Ссылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + "
| ПорцияКлючей.Ссылка КАК Ссылка
| ,&Реквизиты
|ИЗ
| ПорцияКлючей КАК ПорцияКлючей
| ЛЕВОЕ СОЕДИНЕНИЕ @Справочник.КлючиДоступа КАК Шапка0
@@ -34207,25 +34248,29 @@
|УПОРЯДОЧИТЬ ПО
| Ссылка
|ИТОГИ ПО
| Ссылка"; // @query-part-1
| Ссылка"; // @query-part
Иначе
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| ПорцияКлючей.Ссылка КАК Ссылка" + ТекстСОтступом(СоединенияИПоля.Реквизиты, " ") + "
| ПорцияКлючей.Ссылка КАК Ссылка
| ,&Реквизиты
|ИЗ
| ПорцияКлючей КАК ПорцияКлючей
| ЛЕВОЕ СОЕДИНЕНИЕ @Справочник.КлючиДоступа.Шапка КАК Шапка?
| ПО
| Шапка?.Ссылка = ПорцияКлючей.Ссылка
| И Шапка?.НомерСтроки = " + НомерШапки + "
| И &УсловиеНомераШапки
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|ИТОГИ ПО
| Ссылка"; // @query-part-1
| Ссылка"; // @query-part
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеНомераШапки",
"Шапка" + НомерШапки + ".НомерСтроки = " + НомерШапки);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&Реквизиты", ТекстСОтступом(СоединенияИПоля.Реквизиты, " "));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Шапка?", "Шапка" + НомерШапки);
Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса);
@@ -34395,35 +34440,45 @@
ПоляУпорядочения = СоединенияИПоля.ПоляУпорядочения;
Реквизиты = СоединенияИПоля.Реквизиты;
Если ПсевдонимТабличнойЧастиОбъекта = Неопределено Тогда
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТекущийСписок.Ссылка КАК ТекущаяСсылка" + ПоляВыбора + "
| ТекущийСписок.Ссылка КАК ТекущаяСсылка
| ,&ПоляВыбора
|ИЗ
| &ТекущийСписок КАК ТекущийСписок" + Соединения + "
| &ТекущийСписок КАК ТекущийСписок
| #Соединения
|ГДЕ
| ТекущийСписок.Ссылка В (&СсылкиНаОбъекты)
|
|УПОРЯДОЧИТЬ ПО
| ТекущаяСсылка" // @query-part-1
+ ПоляУпорядочения + "
| ТекущаяСсылка
| ,&ПоляУпорядочения
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
Иначе
ИмяТабличнойЧастиОбъекта = СтрЗаменить(ПсевдонимТабличнойЧастиОбъекта, "ТекущийСписок", "");
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка КАК ТекущаяСсылка" + ПоляВыбора + "
| ПсевдонимТабличнойЧастиОбъекта.Ссылка КАК ТекущаяСсылка
| ,&ПоляВыбора
|ИЗ
| &ТекущийСписок." + ИмяТабличнойЧастиОбъекта + " КАК " + ПсевдонимТабличнойЧастиОбъекта + Соединения + "
| ИмяТабличнойЧастиОбъекта КАК ПсевдонимТабличнойЧастиОбъекта
| #Соединения
|ГДЕ
| " + ПсевдонимТабличнойЧастиОбъекта + ".Ссылка В (&СсылкиНаОбъекты)
| ПсевдонимТабличнойЧастиОбъекта.Ссылка В (&СсылкиНаОбъекты)
|
|УПОРЯДОЧИТЬ ПО
| ТекущаяСсылка" // @query-part-1
+ ПоляУпорядочения + "
| ТекущаяСсылка
| ,&ПоляУпорядочения
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПсевдонимТабличнойЧастиОбъекта", ПсевдонимТабличнойЧастиОбъекта);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ИмяТабличнойЧастиОбъекта", "&ТекущийСписок." + ИмяТабличнойЧастиОбъекта);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ПоляВыбора", ПоляВыбора);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ПоляУпорядочения", ПоляУпорядочения);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#Соединения", Соединения);
Иначе
ПоляВыбора = "";
Соединения = "";
@@ -34545,9 +34600,10 @@
ДобавитьУсловиеОтбораПоВедущимКлючамДоступа(Контекст, ГруппаПолей, , НомерТабличнойЧастиКлюча);
// Выбор значений из ключей доступа для сравнения со значениями требуемых ключей.
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| ТабличнаяЧасть?.Ссылка КАК ТекущаяСсылка" + ТекстСОтступом(Реквизиты, " ") + "
| ТабличнаяЧасть?.Ссылка КАК ТекущаяСсылка
| ,&Реквизиты
|ИЗ
| Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть?
|ГДЕ
@@ -34559,17 +34615,21 @@
| И &УточнениеПланаЗапроса
|
|УПОРЯДОЧИТЬ ПО
| ТекущаяСсылка" + ПоляУпорядочения + "
| ТекущаяСсылка
| ,&ПоляУпорядочения
|ИТОГИ ПО
| ТекущаяСсылка"; // @query-part-1
| ТекущаяСсылка"; // @query-part
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&Реквизиты", ТекстСОтступом(Реквизиты, " "));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&ПоляУпорядочения", ПоляУпорядочения);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТабличнаяЧасть?", "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча);
Контекст.ЧастиЗапросаЗначенийИзКлючейДляСравнения.Добавить(ТекстЗапроса);
// Выбор значений из ключей доступа для вычисления пользователей и групп доступа, которым они разрешены.
ТекстЗапроса = // @query-part-1
ТекстЗапроса =
"ВЫБРАТЬ
| ПорцияКлючей.Ссылка КАК Ссылка" + ТекстСОтступом(Реквизиты, " ") + "
| ПорцияКлючей.Ссылка КАК Ссылка
| ,&Реквизиты
|ИЗ
| ПорцияКлючей КАК ПорцияКлючей
| ЛЕВОЕ СОЕДИНЕНИЕ @Справочник.КлючиДоступа.ТабличнаяЧасть? КАК ТабличнаяЧасть?
@@ -34581,6 +34641,7 @@
|ИТОГИ ПО
| Ссылка"; // @query-part-1
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ",&Реквизиты", ТекстСОтступом(Реквизиты, " "));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ТабличнаяЧасть?", "ТабличнаяЧасть" + НомерТабличнойЧастиКлюча);
Контекст.ЧастиЗапросаЗначенийИзКлючейДляРасчетаПрав.Добавить(ТекстЗапроса);
@@ -4563,6 +4563,7 @@
ЭлементыФормулы = КонструкторФормулСлужебный.ЭлементыФормулы(Выражение);
Параметры = Новый Массив;
ПрименятьФорматирование = ЭлементыФормулы.Операнды.Количество() = 1 И ЭлементыФормулы.Операнды[0] = Выражение;
Для Каждого Операнд Из ЭлементыФормулы.Операнды Цикл
КоллекцияДанных = ДанныеПечати;
@@ -4606,7 +4607,11 @@
Функция ОчиститьКвадратныеСкобки(Строка)
Возврат СокрЛП(СтрСоединить(СтрРазделить(Строка, "[]", Ложь), ""));
Если СтрНачинаетсяС(Строка, "[") И СтрЗаканчиваетсяНа(Строка, "]") Тогда
Возврат Сред(Строка, 2, СтрДлина(Строка) - 2);
КонецЕсли;
Возврат Строка;
КонецФункции
@@ -920,7 +920,11 @@
КонецЕсли;
ИдРесурса = ЧтениеXML.ПолучитьАтрибут("Id");
НомерРесурса = Число(СтрЗаменить(СокрЛП(ИдРесурса),"rId",""));
СтрокаЛишнихСимволов = СтрСоединить(СтрРазделить(ИдРесурса, "0123456789"));
НомерРесурсаСтрокой = СтрСоединить(СтрРазделить(ИдРесурса, СтрокаЛишнихСимволов));
НомерРесурса = Число(НомерРесурсаСтрокой);
НоваяСтрока = ТаблицаСвязейКонтента.Добавить();
НоваяСтрока.ИмяРесурса = ЧтениеXML.ПолучитьАтрибут("Target");
@@ -924,6 +924,42 @@
КонецПроцедуры
Функция ДатаОтбораЗагрузкиПисемПоПротоколуIMAP(ДатаЗагрузкиПисем)
Возврат Мин(ДатаЗагрузкиПисем, УниверсальноеВремя(ДатаЗагрузкиПисем, ЧасовойПояс()));
КонецФункции
Процедура ОпределитьИдентификаторыВходящегоСообщения(ЗаголовокПисьма, ТаблицаИдентификаторов)
СтрокаТаблицыИдентификаторов = ТаблицаИдентификаторов.Добавить();
СтрокаТаблицыИдентификаторов.ИдентификаторНаСервере = ?(ЗаголовокПисьма.Идентификатор.Количество() = 0,
"",
ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ЗаголовокПисьма.Идентификатор[0], ""));
СтрокаТаблицыИдентификаторов.ИдентификаторПисьма =
ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ЗаголовокПисьма.ИдентификаторСообщения, "");
Если СтрНайти(НРег(ЗаголовокПисьма.ИдентификаторСообщения), "outlook.com") = 0 Тогда
Возврат;
КонецЕсли;
ПозицияIDОригинальногоСообщения = СтрНайти(ЗаголовокПисьма.Заголовок, "X-Microsoft-Original-Message-ID");
Если ПозицияIDОригинальногоСообщения = 0 Тогда
Возврат;
КонецЕсли;
ПозицияОткрывающегосяТега = СтрНайти(ЗаголовокПисьма.Заголовок, "<", НаправлениеПоиска.СНачала, ПозицияIDОригинальногоСообщения);
ПозицияЗакрывающегосяТега = СтрНайти(ЗаголовокПисьма.Заголовок, ">", НаправлениеПоиска.СНачала, ПозицияIDОригинальногоСообщения);
ОригинальныйIDСообщенияMicrosoft =
Сред(ЗаголовокПисьма.Заголовок, ПозицияОткрывающегосяТега + 1, ПозицияЗакрывающегосяТега - ПозицияОткрывающегосяТега -1);
СтрокаТаблицыИдентификаторов.ИдентификаторОригинальногоПисьмаMicrosoft =
ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ОригинальныйIDСообщенияMicrosoft, "");
КонецПроцедуры
Процедура ПолучитьПочтуПоПроколуIMAP(ДанныеУчетнойЗаписи, Почта, Получено, ПолученныеПисьма)
МассивИменАктивныхПапок = МассивИменАктивныхПапок(Почта);
@@ -933,6 +969,7 @@
ТаблицаИдентификаторов = Новый ТаблицаЗначений;
ТаблицаИдентификаторов.Колонки.Добавить("ИдентификаторНаСервере", КвалификаторСтроки255);
ТаблицаИдентификаторов.Колонки.Добавить("ИдентификаторПисьма", КвалификаторСтроки255);
ТаблицаИдентификаторов.Колонки.Добавить("ИдентификаторОригинальногоПисьмаMicrosoft", КвалификаторСтроки255);
ТаблицаПустыхИдентификаторов = Новый ТаблицаЗначений;
ТаблицаПустыхИдентификаторов.Колонки.Добавить("ИдентификаторНаСервере", КвалификаторСтроки255);
@@ -951,7 +988,7 @@
ПараметрыОтбора = Новый Структура;
Если Не ДанныеУчетнойЗаписи.ДатаЗагрузкиПисем = Дата(1,1,1) Тогда
ПараметрыОтбора.Вставить("ПослеДатыОтправления",ДанныеУчетнойЗаписи.ДатаЗагрузкиПисем);
ПараметрыОтбора.Вставить("ПослеДатыОтправления", ДатаОтбораЗагрузкиПисемПоПротоколуIMAP(ДанныеУчетнойЗаписи.ДатаЗагрузкиПисем));
Иначе
ПараметрыОтбора.Вставить("Удаленные", Ложь);
КонецЕсли;
@@ -971,11 +1008,7 @@
Продолжить;
КонецЕсли;
НоваяСтрокаТаблицыИдентификаторов = ТаблицаИдентификаторов.Добавить();
НоваяСтрокаТаблицыИдентификаторов.ИдентификаторНаСервере = ?(ЗаголовокПисьма.Идентификатор.Количество() = 0,
"",
ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ЗаголовокПисьма.Идентификатор[0], ""));
НоваяСтрокаТаблицыИдентификаторов.ИдентификаторПисьма = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(ЗаголовокПисьма.ИдентификаторСообщения, "");
ОпределитьИдентификаторыВходящегоСообщения(ЗаголовокПисьма, ТаблицаИдентификаторов);
КонецЦикла;
@@ -987,7 +1020,8 @@
Запрос.Текст = "
|ВЫБРАТЬ
| ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма,
| ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере
| ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере,
| ИдентификаторыПисемКЗагрузке.ИдентификаторОригинальногоПисьмаMicrosoft
|ПОМЕСТИТЬ ИдентификаторыПисемКЗагрузке
|ИЗ
| &ИдентификаторыПисемКЗагрузке КАК ИдентификаторыПисемКЗагрузке
@@ -996,7 +1030,8 @@
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма,
| ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере
| ИдентификаторыПисемКЗагрузке.ИдентификаторНаСервере,
| ИдентификаторыПисемКЗагрузке.ИдентификаторОригинальногоПисьмаMicrosoft
|ИЗ
| ИдентификаторыПисемКЗагрузке КАК ИдентификаторыПисемКЗагрузке
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее
@@ -1005,7 +1040,8 @@
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК ЭлектронноеПисьмоИсходящее
| ПО (ЭлектронноеПисьмоИсходящее.УчетнаяЗапись = &УчетнаяЗапись)
| И (ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщения
| ИЛИ ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщенияОтправкаIMAP)
| ИЛИ ИдентификаторыПисемКЗагрузке.ИдентификаторПисьма = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщенияОтправкаIMAP
| ИЛИ ИдентификаторыПисемКЗагрузке.ИдентификаторОригинальногоПисьмаMicrosoft = ЭлектронноеПисьмоИсходящее.ИдентификаторСообщения)
|ГДЕ
| ЭлектронноеПисьмоВходящее.Ссылка ЕСТЬ NULL
| И ЭлектронноеПисьмоИсходящее.Ссылка ЕСТЬ NULL";
@@ -144,8 +144,8 @@
//
// Параметры:
// ОбработчикЗавершения - ОписаниеОповещения
// - Неопределено - содержит описание процедуры, которая
// будет вызвана после завершения со следующими параметрами:
// - Неопределено - содержит описание процедуры, которая будет вызвана после завершения
// со следующими параметрами:
// * ПолученныеФайлы - Неопределено - файлы не были получены.
// - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы.
// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта ОписаниеОповещения.
@@ -189,7 +189,7 @@
// - Массив - содержит объекты типа ОписаниеПереданногоФайла. Сохраненные файлы.
// * ДополнительныеПараметры - Произвольный - значение, которое было указано при создании объекта
// ОписаниеОповещения.
// СохраняемыеФайлы - Массив из ОписаниеПереданногоФайла - содержит объекты типа ОписаниеПереданногоФайла.
// СохраняемыеФайлы - Массив из ОписаниеПередаваемогоФайла
// ПараметрыСохранения - см. ФайловаяСистемаКлиент.ПараметрыСохраненияФайла
//
// Пример:
@@ -402,7 +402,7 @@
// Строка - имя общего реквизита верхнего уровня.
//
Функция ИмяУзлаОбщихРеквизитов() Экспорт
Возврат НСтр("ru = 'ОбщиеРеквизиты'");
Возврат "ОбщиеРеквизиты";
КонецФункции
#КонецОбласти
@@ -26,7 +26,7 @@
//
Функция ДоступнаУсовершенствованнаяПодпись() Экспорт
Возврат ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись;
Возврат ЭлектроннаяПодписьСлужебныйПовтИсп.ДоступнаУсовершенствованнаяПодпись();
КонецФункции
@@ -1036,65 +1036,98 @@
Возврат Результат;
КонецЕсли;
МенеджерКриптографии.АдресаСерверовМетокВремени = ОбщиеНастройки().АдресаСерверовМетокВремени;
КонецЕсли;
ИнформацияОбОшибке = Неопределено;
ОписаниеОшибки = "";
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваПодписи();
ПараметрыПодписиКриптографии = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(Подпись,
МенеджерКриптографии, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса());
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(Подпись);
ПараметрыПодписиКриптографии = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(КонтейнерПодписи,
ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса());
СвойстваПодписи.ТипПодписи = ПараметрыПодписиКриптографии.ТипПодписи;
СвойстваПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени;
УсовершенствованиеПроизошло = Ложь;
Если Не ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени < ТекущаяДатаСеанса() Тогда
ОписаниеОшибки = "";
ИнформацияОбОшибке = Неопределено;
Если ЗначениеЗаполнено(ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени)
И ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени < ТекущаяДатаСеанса() Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Истек срок действия подписи: %1'"), ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени);
КонецЕсли;
Если ОписаниеОшибки = "" Тогда
РезультатПроверкиСертификата = ПроверитьСертификат(МенеджерКриптографии, ПараметрыПодписиКриптографии.СертификатПоследнейМеткиВремени, ОписаниеОшибки);
Если РезультатПроверкиСертификата Тогда
Если ЗначениеЗаполнено(ТипПодписи)
И ЭлектроннаяПодписьСлужебныйКлиентСервер.ПодлежитУсовершенствованию(ПараметрыПодписиКриптографии.ТипПодписи, ТипПодписи) Тогда
Попытка
ДвоичныеДанныеРезультата = МенеджерКриптографии.УсовершенствоватьПодпись(Подпись,
ЭлектроннаяПодписьСлужебныйКлиентСервер.ТипПодписиКриптографии(ТипПодписи));
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДвоичныеДанныеРезультата, ОписаниеОшибки);
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УсовершенствованиеПроизошло = Истина;
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
ИначеЕсли ДобавитьАрхивнуюМеткуВремени И (ПараметрыПодписиКриптографии.ТипПодписи = Перечисления.ТипыПодписиКриптографии.CAdESAv3
ИначеЕсли ДобавитьАрхивнуюМеткуВремени И (ПараметрыПодписиКриптографии.ТипПодписи = Перечисления.ТипыПодписиКриптографии.АрхивнаяCAdESAv3
Или ПараметрыПодписиКриптографии.ТипПодписи = Перечисления.ТипыПодписиКриптографии.CAdESAv2) Тогда
Попытка
ДвоичныеДанныеРезультата = МенеджерКриптографии.ДобавитьАрхивнуюМеткуВремени(Подпись);
ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДвоичныеДанныеРезультата, ОписаниеОшибки);
Если Не ЗначениеЗаполнено(ОписаниеОшибки) Тогда
УсовершенствованиеПроизошло = Истина;
КонецЕсли;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
КонецЕсли;
Иначе
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='При проверке сертификата: %1'"), ОписаниеОшибки);
КонецЕсли;
КонецЕсли;
Если ИнформацияОбОшибке <> Неопределено Тогда
Результат.ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
Возврат Ложь;
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='При усовершенствовании подписи: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецЕсли;
Если УсовершенствованиеПроизошло Тогда
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(Подпись);
ПараметрыПодписиКриптографии = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(КонтейнерПодписи,
ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса());
РезультатПроверкиСертификата = ПроверитьСертификат(МенеджерКриптографии,
ПараметрыПодписиКриптографии.СертификатПоследнейМеткиВремени, ОписаниеОшибки);
Если РезультатПроверкиСертификата Тогда
СвойстваПодписи.Подпись = ДвоичныеДанныеРезультата;
СвойстваПодписи.ТипПодписи = ПараметрыПодписиКриптографии.ТипПодписи;
СвойстваПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени;
Иначе
СвойстваСертификата = СвойстваСертификата(ПараметрыПодписиКриптографии.СертификатПоследнейМеткиВремени);
СведенияОСертификате = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат: %1
|Кем выдан: %2
|Владелец: %3
|Действителен: с %4 по %5'"),
Строка(СвойстваСертификата.СерийныйНомер),
СвойстваСертификата.КемВыдан,
СвойстваСертификата.КомуВыдан,
Формат(СвойстваСертификата.ДатаНачала, "ДЛФ=D"),
Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D"));
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='При проверке сертификата после усовершенствования: %1
|%2'"), ОписаниеОшибки, СведенияОСертификате);
ВызватьИсключение ОписаниеОшибки;
КонецЕсли;
КонецЕсли;
Если ОписаниеОшибки <> "" Тогда
Результат.ТекстОшибки = ОписаниеОшибки;
Возврат Ложь;
КонецЕсли;
Иначе
Результат.Успех = Истина;
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваПодписи();
Если УсовершенствованиеПроизошло Тогда
СвойстваПодписи.Подпись = ДвоичныеДанныеРезультата;
ПараметрыПодписиКриптографии = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(ДвоичныеДанныеРезультата,
МенеджерКриптографии, ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса());
КонецЕсли;
СвойстваПодписи.ТипПодписи = ПараметрыПодписиКриптографии.ТипПодписи;
СвойстваПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписиКриптографии.СрокДействияПоследнейМеткиВремени;
Результат.СвойстваПодписи = СвойстваПодписи;
Возврат Результат;
@@ -1138,7 +1171,7 @@
Результат = Новый Структура("Успех, ТекстОшибки, СвойстваПодписи", Ложь);
СвойстваПодписи = УстановленныеПодписи(ПодписанныйОбъект, ПорядковыйНомер);
СвойстваПодписи = УстановленныеПодписи(ПодписанныйОбъект, ПорядковыйНомер)[0];
Подпись = СвойстваПодписи.Подпись;
Если МенеджерКриптографии = Неопределено Тогда
@@ -1155,13 +1188,13 @@
Возврат Результат;
КонецЕсли;
МенеджерКриптографии.АдресаСерверовМетокВремени = ОбщиеНастройки().АдресаСерверовМетокВремени;
КонецЕсли;
Результат = УсовершенствоватьПодпись(Подпись, ТипПодписи, ДобавитьАрхивнуюМеткуВремени, МенеджерКриптографии);
Если Не Результат.Успех Тогда
Возврат Результат;
КонецЕсли;
Результат.СвойстваПодписи.ПодписанныйОбъект = ПодписанныйОбъект;
Результат.СвойстваПодписи.ПорядковыйНомер = ПорядковыйНомер;
Если Результат.СвойстваПодписи.Подпись = Неопределено Тогда
// Подпись не была усовершенствована, но, возможно, требуется обновление данных.
@@ -1171,9 +1204,6 @@
КонецЕсли;
КонецЕсли;
Результат.СвойстваПодписи.ПодписанныйОбъект = ПодписанныйОбъект;
Результат.СвойстваПодписи.ПорядковыйНомер = ПорядковыйНомер;
ПредставлениеОшибки = ЭлектроннаяПодписьСлужебный.ОбновитьУсовершенствованнуюПодпись(
Результат.СвойстваПодписи);
@@ -1184,6 +1214,10 @@
Возврат Результат;
КонецЕсли;
Если ЗначениеЗаполнено(Результат.СвойстваПодписи.Подпись) Тогда
ЭлектроннаяПодписьСлужебный.ЗарегистрироватьУсовершенствованиеПодписиВЖурнале(Результат.СвойстваПодписи);
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -1951,45 +1985,88 @@
Возврат;
КонецЕсли;
ТребуетсяУсовершенствоватьПодписи = Константы.УсовершенствоватьПодписиАвтоматически.Получить() = 1;
Если ОбщегоНазначения.РазделениеВключено() Тогда
Если Не ОбщиеНастройки().ЭтоМодельСервисаСДоступнымУсовершенствованием Тогда
Возврат;
Иначе
НастройкиСлужебнойУчетнойЗаписи = ЭлектроннаяПодписьСлужебный.НастройкиСлужебнойУчетнойЗаписиДляУсовершенствованияПодписей();
Если ЗначениеЗаполнено(НастройкиСлужебнойУчетнойЗаписи.Ошибка) Тогда
ВызватьИсключение(НастройкиСлужебнойУчетнойЗаписи.Ошибка);
КонецЕсли;
КонецЕсли;
ТипПодписиКриптографииПоУмолчанию = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
Если ТипПодписиКриптографииПоУмолчанию <> Перечисления.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST Тогда
ЭлектроннаяПодписьСлужебный.ИзменитьРегламентноеЗаданиеПродлениеДостоверностиПодписей(,Ложь,ТипПодписиКриптографииПоУмолчанию);
Возврат;
КонецЕсли;
ТребуетсяДобавитьАрхивныеМетки = Ложь;
Иначе
ТребуетсяДобавитьАрхивныеМетки = Константы.ДобавлятьМеткиВремениАвтоматически.Получить();
ТипПодписиКриптографииПоУмолчанию = Константы.ТипПодписиКриптографииПоУмолчанию.Получить();
КонецЕсли;
ТребуетсяУсовершенствоватьПодписи = Константы.УсовершенствоватьПодписиАвтоматически.Получить() = 1;
Если (Не ТребуетсяУсовершенствоватьПодписи
Или (ТипПодписиКриптографииПоУмолчанию <> Перечисления.ТипыПодписиКриптографии.CAdEST
И ТипПодписиКриптографииПоУмолчанию <> Перечисления.ТипыПодписиКриптографии.CAdESAv3)) И Не ТребуетсяДобавитьАрхивныеМетки Тогда
Или (ТипПодписиКриптографииПоУмолчанию <> Перечисления.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST
И ТипПодписиКриптографииПоУмолчанию <> Перечисления.ТипыПодписиКриптографии.АрхивнаяCAdESAv3))
И Не ТребуетсяДобавитьАрхивныеМетки Тогда
Возврат;
КонецЕсли;
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ТипПодписи");
ПараметрыВыполнения.Вставить("ТребуетсяДобавитьАрхивныеМетки");
ПараметрыВыполнения.Вставить("АдресаСерверовМетокВремени");
ПараметрыВыполнения.Вставить("ПараметрыПодписиCAdEST");
ПараметрыВыполнения.Вставить("СлужебнаяУчетнаяЗаписьDSS");
Если Не ОбщегоНазначения.РазделениеВключено() Тогда
Если ТребуетсяУсовершенствоватьПодписи Или ТребуетсяДобавитьАрхивныеМетки Тогда
АдресаСерверовМетокВремени = ОбщиеНастройки().АдресаСерверовМетокВремени;
Если АдресаСерверовМетокВремени.Количество() = 0 Тогда
ВызватьИсключение НСтр("ru = 'Не указаны адреса серверов меток времени.'");
КонецЕсли;
КонецЕсли;
ПараметрыВыполнения.АдресаСерверовМетокВремени = АдресаСерверовМетокВремени;
Иначе
ПараметрыВыполнения.СлужебнаяУчетнаяЗаписьDSS = НастройкиСлужебнойУчетнойЗаписи.СлужебнаяУчетнаяЗаписьDSS;
ПараметрыВыполнения.ПараметрыПодписиCAdEST = НастройкиСлужебнойУчетнойЗаписи.ПараметрыПодписиCAdEST;
КонецЕсли;
Если ТребуетсяУсовершенствоватьПодписи Тогда
ПараметрыВыполнения.Вставить("ТипПодписи", ТипПодписиКриптографииПоУмолчанию);
КонецЕсли;
ПараметрыВыполнения.Вставить("ТребуетсяДобавитьАрхивныеМетки", ТребуетсяДобавитьАрхивныеМетки);
// Пока нет возможности в DSS определить начальный тип подписи.
Если ПараметрыВыполнения.СлужебнаяУчетнаяЗаписьDSS = Неопределено Тогда
// Необработанные подписи обрабатываем в первую очередь.
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("РегламентноеЗадание", Истина);
ПараметрыЗапроса.Вставить("НеобработанныеПодписи", Истина);
ЭлектроннаяПодписьСлужебный.ВыполнитьОбработкуДанныхРегламентнымЗаданием(ПараметрыЗапроса, ПараметрыВыполнения);
КонецЕсли;
Если ТребуетсяУсовершенствоватьПодписи
И (ТипПодписиКриптографииПоУмолчанию = Перечисления.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST
Или ТипПодписиКриптографииПоУмолчанию = Перечисления.ТипыПодписиКриптографии.АрхивнаяCAdESAv3) Тогда
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("ТребуетсяУсовершенствоватьПодписи", ТребуетсяУсовершенствоватьПодписи);
ПараметрыЗапроса.Вставить("ТребуетсяДобавитьАрхивныеМетки", ТребуетсяДобавитьАрхивныеМетки);
ПараметрыЗапроса.Вставить("НеобработанныеПодписи", Истина);
ПараметрыЗапроса.Вставить("ОшибкиПриАвтоматическойОбработке", Ложь);
ПараметрыЗапроса.Вставить("ТолькоКоличество", Ложь);
ПараметрыЗапроса.Вставить("УсовершенствоватьДоТипа", ТипПодписиКриптографииПоУмолчанию);
ПараметрыЗапроса.Вставить("РегламентноеЗадание", Истина);
ПараметрыЗапроса.Вставить("ТребуетсяУсовершенствоватьПодписи", ТребуетсяУсовершенствоватьПодписи);
ПараметрыЗапроса.Вставить("УсовершенствоватьДоТипа", ТипПодписиКриптографииПоУмолчанию);
Запрос = ЭлектроннаяПодписьСлужебный.ЗапросДляПродленияДостоверностиПодписей(ПараметрыЗапроса);
Если Запрос = Неопределено Тогда
Возврат;
ЭлектроннаяПодписьСлужебный.ВыполнитьОбработкуДанныхРегламентнымЗаданием(ПараметрыЗапроса, ПараметрыВыполнения);
КонецЕсли;
Пока Истина Цикл
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Прервать;
Если ТребуетсяДобавитьАрхивныеМетки Тогда
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("РегламентноеЗадание", Истина);
ПараметрыЗапроса.Вставить("ТребуетсяДобавитьАрхивныеМетки", ТребуетсяДобавитьАрхивныеМетки);
ЭлектроннаяПодписьСлужебный.ВыполнитьОбработкуДанныхРегламентнымЗаданием(ПараметрыЗапроса, ПараметрыВыполнения);
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
ОперацияНачалась = Ложь;
Результат = ЭлектроннаяПодписьСлужебный.УсовершенствоватьРегламентнымЗаданием(
Выборка, ТипПодписиКриптографииПоУмолчанию, ТребуетсяДобавитьАрхивныеМетки, ОперацияНачалась);
Если Не ОперацияНачалась Тогда
// Возможно, на сервере не установлен менеджер криптографии.
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
@@ -194,7 +194,6 @@
КлиентскиеПараметры.Вставить("ОписаниеДанных", ОписаниеДанных);
КлиентскиеПараметры.Вставить("Форма", Форма);
КлиентскиеПараметры.Вставить("ОбработкаРезультата", ОбработкаРезультата);
КлиентскиеПараметры.Вставить("ТипПодписи", ТипПодписи);
ОбработкаЗавершения = Новый ОписаниеОповещения("СтандартноеЗавершение",
ЭлектроннаяПодписьСлужебныйКлиент, КлиентскиеПараметры);
@@ -224,6 +223,8 @@
СерверныеПараметры.Вставить("ОповеститьОбОкончанииСрокаДействия", Истина);
ЗаполнитьЗначенияСвойств(СерверныеПараметры, ОписаниеДанных);
СерверныеПараметры.Вставить("ТипПодписи", ТипПодписи);
ЭлектроннаяПодписьСлужебныйКлиент.ОткрытьНовуюФорму("ПодписаниеДанных",
КлиентскиеПараметры, СерверныеПараметры, ОбработкаЗавершения);
@@ -1008,6 +1009,7 @@
КонецПроцедуры
// Открывает ссылку на раздел ИТС "Инструкции по работе с программами электронной подписи и шифрования".
//
Процедура ОткрытьИнструкциюПоРаботеСПрограммами() Экспорт
@@ -1923,6 +1925,21 @@
КонецПроцедуры
// Открывает форму отчета ПродлениеСрокаДействияЭлектронныхПодписей.
//
// Параметры:
// РежимПродления - Строка - вариант отчета
// "НеобработанныеПодписи", "ТребуетсяУсовершенствоватьПодписи",
// "ТребуетсяДобавитьАрхивныеМетки", "ОшибкиПриАвтоматическомПродлении"
//
Процедура ОткрытьОтчетПродлениеСрокаДействияЭлектронныхПодписей(РежимПродления) Экспорт
ОткрытьФорму("Отчет.ПродлениеСрокаДействияЭлектронныхПодписей.Форма",
Новый Структура("РежимПродления", РежимПродления));
КонецПроцедуры
// Сохраняет подпись на диск
Процедура СохранитьПодпись(АдресПодписи) Экспорт
File diff suppressed because it is too large. Load diff
@@ -336,8 +336,10 @@
Если Параметры.Операция = "Подписание" Тогда
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля;
Попытка
Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда
ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии, Параметры.ТипПодписи);
Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() И ЗначениеЗаполнено(Параметры.ТипПодписи) Тогда
МенеджерКриптографии.АдресаСерверовМетокВремени = ЭлектроннаяПодпись.ОбщиеНастройки().АдресаСерверовМетокВремени;
ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии,
ЭлектроннаяПодписьСлужебныйКлиентСервер.ТипПодписиКриптографии(Параметры.ТипПодписи));
Иначе
ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии);
КонецЕсли;
@@ -381,8 +383,16 @@
СвойстваСертификата = ЭлектроннаяПодпись.СвойстваСертификата(СертификатКриптографии);
СвойстваСертификата.Вставить("ДвоичныеДанные", СертификатКриптографии.Выгрузить());
Если ЭлектроннаяПодпись.ДоступнаУсовершенствованнаяПодпись() Тогда
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(ДвоичныеДанныеРезультата);
ПараметрыПодписиКриптографии = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(КонтейнерПодписи,
ЭлектроннаяПодписьСлужебный.ДобавкаВремени(), ТекущаяДатаСеанса());
Иначе
ПараметрыПодписиКриптографии = Неопределено;
КонецЕсли;
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанныеРезультата,
СвойстваСертификата, Параметры.Комментарий, Пользователи.АвторизованныйПользователь());
СвойстваСертификата, Параметры.Комментарий, Пользователи.АвторизованныйПользователь(),,ПараметрыПодписиКриптографии);
Если Параметры.СертификатВерен <> Неопределено Тогда
СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса();
@@ -411,54 +421,19 @@
КонецФункции
// Только для внутреннего использования.
Функция УсовершенствоватьНаСторонеСервера(Знач Параметры, АдресРезультата, ОперацияНачалась, ОшибкаНаСервере) Экспорт
Функция НачатьУсовершенствованиеНаСервере(Знач Параметры) Экспорт
ПараметрыСоздания = ЭлектроннаяПодписьСлужебный.ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ОписаниеОшибки = Новый Структура;
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Параметры.ИдентификаторФормы);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Усовершенствование подписи'");
Попытка
Подпись = ПолучитьИзВременногоХранилища(Параметры.ЭлементДанныхДляСервера.Подпись);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ОшибкаНаСервере.Текст = ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных("ПродлениеСрокаДействияПодписи")
+ Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
Возврат Ложь;
КонецПопытки;
Возврат ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, "ЭлектроннаяПодписьСлужебный.УсовершенствоватьНаСторонеСервера", Параметры);
Параметры.Вставить("АлгоритмПодписи", ЭлектроннаяПодписьСлужебныйКлиентСервер.АлгоритмСформированнойПодписи(Подпись));
КонецФункции
ПараметрыСоздания.АлгоритмПодписи = Параметры.АлгоритмПодписи;
МенеджерКриптографии = ЭлектроннаяПодписьСлужебный.МенеджерКриптографии("ПродлениеСрокаДействияПодписи", ПараметрыСоздания);
// Только для внутреннего использования.
Функция НастройкиСлужебнойУчетнойЗаписиДляУсовершенствованияПодписей(ИдентификаторФормы) Экспорт
Если МенеджерКриптографии = Неопределено Тогда
ОшибкаНаСервере.Текст = ПараметрыСоздания.ОписаниеОшибки;
ОшибкаНаСервере.ОшибкаПриСозданииМенеджераКриптографии = Истина;
Возврат Ложь;
КонецЕсли;
Если Параметры.Свойство("ПодписанныйОбъект") Тогда
Результат = ЭлектроннаяПодпись.УсовершенствоватьПодпись(Подпись,
Параметры.ТипПодписи,
Параметры.ДобавитьАрхивнуюМеткуВремени, МенеджерКриптографии);
Иначе
Результат = ЭлектроннаяПодпись.УсовершенствоватьПодписьОбъекта(Параметры.ЭлементДанныхДляСервера.ПодписанныйОбъект,
Параметры.ЭлементДанныхДляСервера.ПорядковыйНомер,
Подпись,
Параметры.ТипПодписи,
Параметры.ДобавитьАрхивнуюМеткуВремени, МенеджерКриптографии);
КонецЕсли;
Если Не Результат.Успех Тогда
ОшибкаНаСервере.Текст = Результат.ТекстОшибки;
Возврат Ложь;
КонецЕсли;
ОперацияНачалась = Истина;
Параметры.Вставить("СвойстваПодписи", Результат.СвойстваПодписи);
АдресРезультата = ПоместитьВоВременноеХранилище(Параметры, Параметры.ИдентификаторФормы);
Возврат Истина;
Возврат ЭлектроннаяПодписьСлужебный.НастройкиСлужебнойУчетнойЗаписиДляУсовершенствованияПодписей(ИдентификаторФормы);
КонецФункции
@@ -519,9 +494,9 @@
КонецПроцедуры
// Только для внутреннего использования.
Процедура ЗарегистрироватьУсовершенствованиеПодписиВЖурнале(ЭлементДанных) Экспорт
Процедура ЗарегистрироватьУсовершенствованиеПодписиВЖурнале(СвойстваПодписи) Экспорт
ЭлектроннаяПодписьСлужебный.ЗарегистрироватьУсовершенствованиеПодписиВЖурнале(ЭлементДанных);
ЭлектроннаяПодписьСлужебный.ЗарегистрироватьУсовершенствованиеПодписиВЖурнале(СвойстваПодписи);
КонецПроцедуры
@@ -4038,6 +4038,7 @@
Если Контекст.Операция = "Подписание" Тогда
ПараметрыДляСервера.Вставить("Комментарий", Контекст.Форма.Комментарий);
ПараметрыДляСервера.Вставить("ЗначениеПароля", Контекст.ЗначениеПароля);
ПараметрыДляСервера.Вставить("ТипПодписи", Контекст.ОписаниеДанных.ТипПодписи);
Если Контекст.ЭлементДанных.Свойство("Объект")
И Не ТипЗнч(Контекст.ЭлементДанных.Объект) = Тип("ОписаниеОповещения") Тогда
@@ -4151,6 +4152,15 @@
Если ТипЗнч(ДвоичныеДанные) = Тип("Массив") Тогда
ВыполнитьНаСторонеЦиклПослеПодписанияПакета(ДвоичныеДанные, Контекст);
Иначе
Если Контекст.Свойство("МенеджерКриптографии") И ТипЗнч(Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии")
И ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ДвоичныеДанныеПодписи", ДвоичныеДанные);
ДополнительныеПараметры.Вставить("Контекст", Контекст);
Оповещение = Новый ОписаниеОповещения("ВыполнитьПослеПолученияКонтейнераПодписи", ЭтотОбъект, ДополнительныеПараметры);
Контекст.МенеджерКриптографии.НачатьПолучениеКонтейнераПодписейКриптографии(Оповещение, ДвоичныеДанные);
Возврат;
КонецЕсли;
СвойстваПодписи = ПолучитьСвойстваПодписиПослеПодписания(ДвоичныеДанные, Контекст);
ВыполнитьНаСторонеЦиклПослеПодписания(СвойстваПодписи, Контекст);
КонецЕсли;
@@ -4162,17 +4172,7 @@
КонецПроцедуры
Функция ПолучитьСвойстваПодписиПослеПодписания(ДвоичныеДанные, Контекст)
Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись
И ТипЗнч(Контекст.МенеджерКриптографии) = Тип("МенеджерКриптографии") Тогда
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
ДобавкаВремени = ДатаСеанса- ОбщегоНазначенияКлиент.ДатаУниверсальная();
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(
ДвоичныеДанные, Контекст.МенеджерКриптографии, ДобавкаВремени, ДатаСеанса);
Иначе
ПараметрыПодписи = Неопределено;
КонецЕсли;
Функция ПолучитьСвойстваПодписиПослеПодписания(ДвоичныеДанные, Контекст, ПараметрыПодписи = Неопределено)
СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанные,
Контекст.СвойстваСертификата,
@@ -4189,24 +4189,17 @@
КонецФункции
Функция ПолучитьСвойстваПодписиПослеУсовершенствования(ДвоичныеДанные, Контекст)
Процедура ВыполнитьПослеПолученияКонтейнераПодписи(КонтейнерПодписи, ДополнительныеПараметры) Экспорт
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
ДобавкаВремени = ДатаСеанса - ОбщегоНазначенияКлиент.ДатаУниверсальная();
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(
ДвоичныеДанные, Контекст.МенеджерКриптографии, ДобавкаВремени, ДатаСеанса);
КонтейнерПодписи, ДобавкаВремени, ДатаСеанса);
СвойстваПодписи = ПолучитьСвойстваПодписиПослеПодписания(ДополнительныеПараметры.ДвоичныеДанныеПодписи, ДополнительныеПараметры.Контекст, ПараметрыПодписи);
СвойстваПодписи = Новый Структура;
СвойстваПодписи.Вставить("Подпись", ДвоичныеДанные);
СвойстваПодписи.Вставить("ДатаПодписи", ПараметрыПодписи.ДатаПодписиИзМетки);
СвойстваПодписи.Вставить("ДатаПроверкиПодписи", ПараметрыПодписи.ДатаПоследнейМеткиВремени);
СвойстваПодписи.Вставить("ПодписьВерна", Истина);
СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи);
СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени);
ВыполнитьНаСторонеЦиклПослеПодписания(СвойстваПодписи, ДополнительныеПараметры.Контекст);
Возврат СвойстваПодписи;
КонецФункции
КонецПроцедуры
// Продолжение процедуры ВыполнитьНаСтороне.
Процедура ВыполнитьНаСторонеЦиклПослеПодписания(СвойстваПодписи, Контекст)
@@ -4611,23 +4604,67 @@
ВызватьИсключение НСтр("ru='Переданные параметры не содержат данных подписи.'");
КонецЕсли;
Если ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда
Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ЭтоМодельСервисаСДоступнымУсовершенствованием
И Контекст.ПараметрыВыполнения.ОписаниеДанных.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST") Тогда
НастройкиПодключенияСервиса =
ЭлектроннаяПодписьСлужебныйВызовСервера.НастройкиСлужебнойУчетнойЗаписиДляУсовершенствованияПодписей(Контекст.ПараметрыВыполнения.ИдентификаторФормы);
Если ЗначениеЗаполнено(НастройкиПодключенияСервиса.Ошибка) Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьУсовершенствованиеПослеОтветаНаВопрос", ЭтотОбъект, Контекст);
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ошибка при попытке усовершенствования через приложение в Интернете:
|%1
|Продолжить усовершенствование с помощью программ, установленных на компьютере?'"),
НастройкиПодключенияСервиса.Ошибка);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60);
Возврат;
КонецЕсли;
Контекст.ПараметрыВыполнения.Вставить("ЭтоМодельСервисаСДоступнымУсовершенствованием", Истина);
Контекст.ПараметрыВыполнения.Вставить("СлужебнаяУчетнаяЗаписьDSS", НастройкиПодключенияСервиса.СлужебнаяУчетнаяЗаписьDSS);
Контекст.ПараметрыВыполнения.Вставить("ПараметрыПодписиCAdEST", НастройкиПодключенияСервиса.ПараметрыПодписиCAdEST);
УсовершенствоватьНаСтороне(Новый ОписаниеОповещения(
"УсовершенствоватьПослеВыполненияНаСторонеСервера", ЭлектроннаяПодписьСлужебныйКлиент, Контекст),
"НаСторонеСервера", Контекст.ПараметрыВыполнения);
ИначеЕсли ЭлектроннаяПодписьКлиент.СоздаватьЭлектронныеПодписиНаСервере() Тогда
УсовершенствоватьНаСтороне(Новый ОписаниеОповещения(
"УсовершенствоватьПослеВыполненияНаСторонеСервера", ЭлектроннаяПодписьСлужебныйКлиент, Контекст),
"НаСторонеСервера", Контекст.ПараметрыВыполнения);
Иначе
УсовершенствоватьПослеВыполненияНаСторонеСервера(Неопределено, Контекст);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьУсовершенствованиеПослеОтветаНаВопрос(РезультатВопроса, Контекст) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
УсовершенствоватьПослеВыполненияНаСторонеСервера(Неопределено, Контекст);
Иначе
Результат = Новый Структура;
Результат.Вставить("Ошибка", Истина);
Результат.Вставить("ТекстОшибки", НСтр("ru='Ошибка при попытке усовершенствования через приложение в Интернете'"));
УсовершенствоватьПослеВыполненияНаСторонеКлиента(Результат, Контекст);
КонецЕсли;
КонецПроцедуры
Процедура УсовершенствоватьНаСтороне(Оповещение, СторонаВыполнения, ПараметрыВыполнения)
Контекст = Новый Структура("ОписаниеДанных, ИдентификаторФормы, ПрерыватьОбработкуМассиваПриОшибке");
ЗаполнитьЗначенияСвойств(Контекст, ПараметрыВыполнения);
Если ПараметрыВыполнения.Свойство("ЭтоМодельСервисаСДоступнымУсовершенствованием") Тогда
Контекст.Вставить("ЭтоМодельСервисаСДоступнымУсовершенствованием", Истина);
Контекст.Вставить("СлужебнаяУчетнаяЗаписьDSS", ПараметрыВыполнения.СлужебнаяУчетнаяЗаписьDSS);
Контекст.Вставить("ПараметрыПодписиCAdEST", ПараметрыВыполнения.ПараметрыПодписиCAdEST);
Иначе
Контекст.Вставить("ЭтоМодельСервисаСДоступнымУсовершенствованием", Ложь);
КонецЕсли;
Контекст.Вставить("Оповещение", Оповещение);
Контекст.Вставить("НаСторонеКлиента", СторонаВыполнения = "НаСторонеКлиента");
Контекст.Вставить("ОперацияНачалась", Ложь);
@@ -4678,17 +4715,12 @@
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
//
// Параметры:
// Результат - Число
// Контекст - см. ВыполнитьНаСторонеНовыйКонтекст
//
Процедура УсовершенствоватьНаСторонеЦиклНачалоПродолжение(Результат, Контекст) Экспорт
Контекст.Индекс = Контекст.Индекс + 1;
ЭлементДанных = Контекст.ЭлементыДанных[Контекст.Индекс];
Если ЭлементДанных.Свойство("НовыеСвойстваПодписи") Тогда
Если ЭлементДанных.Свойство("СвойстваПодписи") Тогда
УсовершенствоватьНаСторонеЦиклНачало(Контекст);
Возврат;
КонецЕсли;
@@ -4709,17 +4741,9 @@
Возврат;
КонецПопытки;
КонецЕсли;
Иначе
// Для стороны сервера требуется адрес двоичных данных во временном хранилище.
Если ТипЗнч(Подпись) = Тип("ДвоичныеДанные") Тогда
Подпись = ПоместитьВоВременноеХранилище(Подпись, Контекст.ИдентификаторФормы);
КонецЕсли;
КонецЕсли;
ЭлементДанных.Подпись = Подпись;
Если Контекст.НаСторонеКлиента Тогда
ПараметрыСоздания = ПараметрыСозданияМенеджераКриптографии();
ПараметрыСоздания.ПоказатьОшибку = Неопределено;
Если ЭлементДанных.Свойство("АлгоритмПодписи") Тогда
@@ -4734,35 +4758,79 @@
"ПродлениеСрокаДействияПодписи", ПараметрыСоздания);
Возврат;
КонецЕсли;
ЭлементДанныхДляСервера = Новый Структура;
ЭлементДанныхДляСервера.Вставить("Подпись", ЭлементДанных);
// Для стороны сервера требуется адрес двоичных данных во временном хранилище.
Если ТипЗнч(Подпись) = Тип("ДвоичныеДанные") Тогда
Подпись = ПоместитьВоВременноеХранилище(Подпись, Контекст.ИдентификаторФормы);
КонецЕсли;
ЭлементДанных.Подпись = Подпись;
УсовершенствоватьНаСервере(ЭлементДанных, Контекст);
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура УсовершенствоватьНаСервере(ЭлементДанных, Контекст)
ПараметрыДляСервера = Новый Структура;
ПараметрыДляСервера.Вставить("ЭтоМодельСервисаСДоступнымУсовершенствованием",
Контекст.ЭтоМодельСервисаСДоступнымУсовершенствованием);
Если ПараметрыДляСервера.ЭтоМодельСервисаСДоступнымУсовершенствованием Тогда
ПараметрыДляСервера.Вставить("ПараметрыПодписиCAdEST", Контекст.ПараметрыПодписиCAdEST);
ПараметрыДляСервера.Вставить("СлужебнаяУчетнаяЗаписьDSS", Контекст.СлужебнаяУчетнаяЗаписьDSS);
КонецЕсли;
ПараметрыДляСервера.Вставить("ИдентификаторФормы", Контекст.ИдентификаторФормы);
ПараметрыДляСервера.Вставить("ЭлементДанныхДляСервера", ЭлементДанныхДляСервера);
ПараметрыДляСервера.Вставить("ЭлементДанныхДляСервера", ЭлементДанных);
ПараметрыДляСервера.Вставить("ТипПодписи", Контекст.ОписаниеДанных.ТипПодписи);
ПараметрыДляСервера.Вставить("ДобавитьАрхивнуюМеткуВремени", Контекст.ОписаниеДанных.ДобавитьАрхивнуюМеткуВремени);
ПараметрыДляСервера.Вставить("ОперацияНачалась", Контекст.ОперацияНачалась);
ДлительнаяОперация = ЭлектроннаяПодписьСлужебныйВызовСервера.НачатьУсовершенствованиеНаСервере(
ПараметрыДляСервера);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Неопределено);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ПродолжитьПослеУсовершенствованияНаСервере", ЭтотОбъект, Контекст);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
КонецПроцедуры
Процедура ПродолжитьПослеУсовершенствованияНаСервере(РезультатВыполнения, Контекст) Экспорт
Результат = ПолучитьИзВременногоХранилища(РезультатВыполнения.АдресРезультата);
Если ЗначениеЗаполнено(РезультатВыполнения.КраткоеПредставлениеОшибки) Тогда
ОшибкаНаСервере = ОписаниеОшибкиПриУсовершенствовании(Ложь);
АдресРезультата = Неопределено;
Если Контекст.ЭлементДанных.Свойство("ПодписанныйОбъект") Тогда
Если Контекст.ЭлементДанных.Свойство("ВерсияОбъекта") Тогда
ЭлементДанныхДляСервера.Свойство("ВерсияОбъекта", Контекст.ЭлементДанных.ВерсияОбъекта);
КонецЕсли;
ОшибкаНаСервере.Текст = РезультатВыполнения.КраткоеПредставлениеОшибки;
УсовершенствоватьНаСторонеПослеОшибки(ОшибкаНаСервере, Контекст);
Возврат;
КонецЕсли;
Успех = ЭлектроннаяПодписьСлужебныйВызовСервера.УсовершенствоватьНаСторонеСервера(ПараметрыДляСервера,
АдресРезультата, Контекст.ОперацияНачалась, ОшибкаНаСервере);
Контекст.ОперацияНачалась = Результат.ОперацияНачалась;
Если Не Успех Тогда
Если ЗначениеЗаполнено(Результат.АлгоритмПодписи) Тогда
Контекст.ЭлементыДанных[Контекст.Индекс].Вставить("АлгоритмПодписи", Результат.АлгоритмПодписи);
КонецЕсли;
Если Не Результат.Успех Тогда
ОшибкаНаСервере = ОписаниеОшибкиПриУсовершенствовании(Ложь);
ОшибкаНаСервере.Текст = Результат.ТекстОшибки;
Если Результат.ОшибкаПриСозданииМенеджераКриптографии = Истина Тогда
ОшибкаНаСервере.ОшибкаПриСозданииМенеджераКриптографии = Истина;
КонецЕсли;
УсовершенствоватьНаСторонеПослеОшибки(ОшибкаНаСервере, Контекст);
Иначе
ВыполнитьНаСторонеЦиклПослеУсовершенствования(АдресРезультата, Контекст);
ВыполнитьНаСторонеЦиклПослеУсовершенствования(Результат.СвойстваПодписи, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура УсовершенствоватьНаСторонеПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст) Экспорт
Если ТипЗнч(МенеджерКриптографии) <> Тип("МенеджерКриптографии") Тогда
@@ -4774,33 +4842,75 @@
КонецЕсли;
Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии);
Подпись = Контекст.ЭлементДанных.Подпись;
Оповещение = Новый ОписаниеОповещения("УсовершенствоватьНаСторонеПослеПолученияКонтейнераПодписи", ЭтотОбъект, Контекст,
"УсовершенствоватьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект);
МенеджерКриптографии.НачатьПолучениеКонтейнераПодписейКриптографии(Оповещение, Подпись);
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура УсовершенствоватьНаСторонеПослеПолученияКонтейнераПодписи(КонтейнерПодписи, Контекст) Экспорт
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
ДобавкаВремени = ДатаСеанса - ОбщегоНазначенияКлиент.ДатаУниверсальная();
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(
КонтейнерПодписи, ДобавкаВремени, ДатаСеанса);
Контекст.ЭлементДанных.Вставить("ПараметрыПодписи", ПараметрыПодписи);
Если ЗначениеЗаполнено(ПараметрыПодписи.СрокДействияПоследнейМеткиВремени)
И ПараметрыПодписи.СрокДействияПоследнейМеткиВремени < ДатаСеанса Тогда
ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Истек срок действия сертификата подписи: %1'"),
СвойстваСертификатаСтрокой(ПараметрыПодписи.СертификатПоследнейМеткиВремени));
Контекст.ЭлементДанных.Вставить("Ошибка", ОписаниеОшибки);
УсовершенствоватьНаСторонеЦиклПослеОперацииНаКлиенте(ПараметрыПодписи, Контекст);
Возврат;
КонецЕсли;
Если ПараметрыПодписи.СертификатПоследнейМеткиВремени <> Неопределено Тогда
Оповещение = Новый ОписаниеОповещения("УсовершенствоватьНаСторонеПослеПроверкиСертификатаПодписи", ЭтотОбъект, Контекст);
ПроверитьСертификат(Оповещение, ПараметрыПодписи.СертификатПоследнейМеткиВремени, Контекст.МенеджерКриптографии);
Иначе
УсовершенствоватьНаСторонеПослеПроверкиСертификатаПодписи(Истина, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура УсовершенствоватьНаСторонеПослеПроверкиСертификатаПодписи(Результат, Контекст) Экспорт
ПараметрыПодписи = Контекст.ЭлементДанных.ПараметрыПодписи;
Если Результат <> Истина Тогда
Ошибка = ОписаниеОшибкиПриУсовершенствовании();
Ошибка.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='При проверке сертификата подписи до усовершенствования: %1
|%2'"), Результат, СвойстваСертификатаСтрокой(ПараметрыПодписи.СертификатПоследнейМеткиВремени));
УсовершенствоватьНаСторонеПослеОшибки(Ошибка, Контекст);
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения(
"УсовершенствоватьНаСторонеЦиклПослеОперацииНаКлиенте", ЭтотОбъект, Контекст,
"УсовершенствоватьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект);
МенеджерКриптографии = Контекст.МенеджерКриптографии;
МенеджерКриптографии.АдресаСерверовМетокВремени =
ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени;
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
ДобавкаВремени = ДатаСеанса - ОбщегоНазначенияКлиент.ДатаУниверсальная();
Подпись = Контекст.ЭлементДанных.Подпись;
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(
Подпись, МенеджерКриптографии, ДобавкаВремени, ДатаСеанса);
Если ЗначениеЗаполнено(ПараметрыПодписи.СрокДействияПоследнейМеткиВремени)
И ПараметрыПодписи.СрокДействияПоследнейМеткиВремени < ДатаСеанса Тогда
ВыполнитьОбработкуОповещения(Оповещение, ПараметрыПодписи);
Возврат;
КонецЕсли;
Если ПараметрыПодписи.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv3")
Если ПараметрыПодписи.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3")
Или ПараметрыПодписи.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv2") Тогда
Если Контекст.ОписаниеДанных.ДобавитьАрхивнуюМеткуВремени Тогда
МенеджерКриптографии.НачатьДобавлениеАрхивнойМеткиВремени(Оповещение, Подпись);
Иначе
ВыполнитьОбработкуОповещения(Оповещение, ПараметрыПодписи);
УсовершенствоватьНаСторонеЦиклПослеОперацииНаКлиенте(ПараметрыПодписи, Контекст);
Возврат;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи)
@@ -4808,7 +4918,7 @@
МенеджерКриптографии.НачатьУсовершенствованиеПодписи(Оповещение, Подпись,
ЭлектроннаяПодписьСлужебныйКлиентСервер.ТипПодписиКриптографии(Контекст.ОписаниеДанных.ТипПодписи));
Иначе
ВыполнитьОбработкуОповещения(Оповещение, ПараметрыПодписи);
УсовершенствоватьНаСторонеЦиклПослеОперацииНаКлиенте(ПараметрыПодписи, Контекст);
Возврат;
КонецЕсли;
@@ -4839,8 +4949,63 @@
КонецЕсли;
Контекст.ОперацияНачалась = Истина;
СвойстваПодписи = ПолучитьСвойстваПодписиПослеУсовершенствования(ДвоичныеДанные, Контекст);
Контекст.ЭлементДанных.Вставить("СвойстваПодписи", Новый Структура("Подпись", ДвоичныеДанные));
Оповещение = Новый ОписаниеОповещения("ВыполнитьПослеПолученияКонтейнераУсовершенствованнойПодписи", ЭтотОбъект, Контекст,
"УсовершенствоватьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект);
Контекст.МенеджерКриптографии.НачатьПолучениеКонтейнераПодписейКриптографии(Оповещение, ДвоичныеДанные);
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура ВыполнитьПослеПолученияКонтейнераУсовершенствованнойПодписи(КонтейнерПодписи, Контекст) Экспорт
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
ДобавкаВремени = ДатаСеанса - ОбщегоНазначенияКлиент.ДатаУниверсальная();
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыПодписиКриптографии(
КонтейнерПодписи, ДобавкаВремени, ДатаСеанса);
Контекст.ЭлементДанных.Вставить("ПараметрыПодписи", ПараметрыПодписи);
Если ПараметрыПодписи.СертификатПоследнейМеткиВремени <> Неопределено Тогда
Оповещение = Новый ОписаниеОповещения("ВыполнитьНаСторонеПослеУсовершенствованияИПроверкиСертификата", ЭтотОбъект, Контекст);
ПроверитьСертификат(Оповещение, ПараметрыПодписи.СертификатПоследнейМеткиВремени, Контекст.МенеджерКриптографии);
Иначе
СвойстваПодписи = Новый Структура;
СвойстваПодписи.Вставить("Подпись", Контекст.ЭлементДанных.СвойстваПодписи.Подпись);
СвойстваПодписи.Вставить("ДатаПодписи", ПараметрыПодписи.ДатаПодписиИзМетки);
СвойстваПодписи.Вставить("ДатаПроверкиПодписи", ПараметрыПодписи.ДатаПоследнейМеткиВремени);
СвойстваПодписи.Вставить("ПодписьВерна", Истина);
СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи);
СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени);
ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст);
КонецЕсли;
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура ВыполнитьНаСторонеПослеУсовершенствованияИПроверкиСертификата(Результат, Контекст) Экспорт
ПараметрыПодписи = Контекст.ЭлементДанных.ПараметрыПодписи;
СвойстваПодписи = Новый Структура;
СвойстваПодписи.Вставить("Подпись", Контекст.ЭлементДанных.СвойстваПодписи.Подпись);
СвойстваПодписи.Вставить("ДатаПодписи", ПараметрыПодписи.ДатаПодписиИзМетки);
СвойстваПодписи.Вставить("ДатаПроверкиПодписи", ПараметрыПодписи.ДатаПоследнейМеткиВремени);
СвойстваПодписи.Вставить("ПодписьВерна", Истина);
СвойстваПодписи.Вставить("ТипПодписи", ПараметрыПодписи.ТипПодписи);
СвойстваПодписи.Вставить("СрокДействияПоследнейМеткиВремени", ПараметрыПодписи.СрокДействияПоследнейМеткиВремени);
Если Результат = Истина Тогда
ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст);
Иначе
Ошибка = ОписаниеОшибкиПриУсовершенствовании();
Ошибка.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='При проверке сертификата подписи после усовершенствования: %1
|%2'"), Результат, СвойстваСертификатаСтрокой(ПараметрыПодписи.СертификатПоследнейМеткиВремени));
УсовершенствоватьНаСторонеПослеОшибки(Ошибка, Контекст);
КонецЕсли;
КонецПроцедуры
@@ -4858,11 +5023,10 @@
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура ВыполнитьНаСторонеЦиклПослеУсовершенствования(СвойстваПодписи, Контекст)
Если ТипЗнч(СвойстваПодписи) = Тип("Строка") Тогда
СвойстваПодписи = ПолучитьИзВременногоХранилища(СвойстваПодписи);
КонецЕсли;
ЭлементДанных = Контекст.ЭлементыДанных[Контекст.Индекс];
Если Контекст.НаСторонеКлиента Тогда
НовыеСвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.НовыеСвойстваПодписи();
ОбновитьПодпись = Ложь;
@@ -4871,13 +5035,11 @@
ЭлементДанных.ТипПодписи = СвойстваПодписи.ТипПодписи;
НовыеСвойстваПодписи.ТипПодписи = СвойстваПодписи.ТипПодписи;
ОбновитьПодпись = Истина;
ЭлементДанных.Вставить("Ошибка", НСтр("ru='Продление не требуется или не может быть осуществлено'"));
КонецЕсли;
Если ЭлементДанных.СрокДействияПоследнейМеткиВремени <> СвойстваПодписи.СрокДействияПоследнейМеткиВремени Тогда
ЭлементДанных.СрокДействияПоследнейМеткиВремени = СвойстваПодписи.СрокДействияПоследнейМеткиВремени;
НовыеСвойстваПодписи.СрокДействияПоследнейМеткиВремени = СвойстваПодписи.СрокДействияПоследнейМеткиВремени;
ОбновитьПодпись = Истина;
ЭлементДанных.Вставить("Ошибка", НСтр("ru='Продление не требуется или не может быть осуществлено'"));
КонецЕсли;
Иначе
НовыеСвойстваПодписи.Подпись = СвойстваПодписи.Подпись;
@@ -4893,8 +5055,7 @@
Возврат;
КонецЕсли;
Если Контекст.НаСторонеКлиента И ОбновитьПодпись Тогда
Если ОбновитьПодпись Тогда
ЭлементДанных.СвойстваПодписи.ПодписанныйОбъект = ЭлементДанных.ПодписанныйОбъект;
ЭлементДанных.СвойстваПодписи.ПорядковыйНомер = ЭлементДанных.ПорядковыйНомер;
@@ -4908,6 +5069,16 @@
УсовершенствоватьНаСторонеПослеОшибки(Ошибка, Контекст);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ЭлементДанных.СвойстваПодписи.Подпись) Тогда
ЭлектроннаяПодписьСлужебныйВызовСервера.ЗарегистрироватьУсовершенствованиеПодписиВЖурнале(НовыеСвойстваПодписи);
КонецЕсли;
КонецЕсли;
Иначе
ЭлементДанных.Вставить("СвойстваПодписи", СвойстваПодписи);
КонецЕсли;
ОповеститьОбИзменении(ЭлементДанных.ПодписанныйОбъект);
@@ -4979,20 +5150,13 @@
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура УсовершенствоватьПослеВыполненияНаСторонеСервера(Результат, Контекст) Экспорт
Если Результат <> Неопределено И Не Результат.Свойство("Ошибка") Тогда
УсовершенствоватьПослеВыполненияНаСторонеКлиента(Результат, Контекст);
Иначе
Если Результат <> Неопределено Тогда
Если Контекст.ВыполнятьНаСервере = Истина Тогда
РезультатВыполнения = Новый Структура("Ошибка, СвойстваПодписей, ТекстОшибки",
Истина, Результат.ЭлементыДанных, Результат.ТекстОшибки);
УсовершенствоватьПослеВыполненияНаСторонеКлиента(РезультатВыполнения, Контекст);
Возврат;
КонецЕсли;
Контекст.ПараметрыВыполнения.Вставить("ЭлементыДанных", Результат.ЭлементыДанных);
Контекст.ПараметрыВыполнения.Вставить("ТекстОшибки", Результат.ТекстОшибки);
КонецЕсли;
@@ -5004,6 +5168,7 @@
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Процедура УсовершенствоватьПослеВыполненияНаСторонеКлиента(Результат, Контекст) Экспорт
РезультатОбработки = Новый Структура("Успех, ТекстОшибки, СвойстваПодписей");
@@ -5020,11 +5185,38 @@
Возврат;
КонецЕсли;
Если Результат.Свойство("ЭлементыДанных") Тогда
РезультатОбработки.СвойстваПодписей = Результат.ЭлементыДанных;
КонецЕсли;
ВыполнитьОбработкуОповещения(Контекст.ОбработкаРезультата, РезультатОбработки);
КонецПроцедуры
// Продолжение процедуры УсовершенствоватьНаСтороне.
Функция СвойстваСертификатаСтрокой(Сертификат)
Если Сертификат = Неопределено Тогда
Возврат "";
КонецЕсли;
СвойстваСертификата = ЭлектроннаяПодписьКлиент.СвойстваСертификата(Сертификат);
СведенияОСертификате = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат: %1
|Кем выдан: %2
|Владелец: %3
|Действителен: с %4 по %5'"),
Строка(СвойстваСертификата.СерийныйНомер),
СвойстваСертификата.КемВыдан,
СвойстваСертификата.КомуВыдан,
Формат(СвойстваСертификата.ДатаНачала, "ДЛФ=D"),
Формат(СвойстваСертификата.ДатаОкончания, "ДЛФ=D"));
Возврат СведенияОСертификате;
КонецФункции
#КонецОбласти
////////////////////////////////////////////////////////////////////////////////
// Работа с XMLDSig
@@ -6327,6 +6519,17 @@
Контекст.Вставить("СертификатКриптографии", Результат);
Если Контекст.Операция = "Подписание" Тогда
Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись И ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи) Тогда
Если Контекст.ОписаниеДанных.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И Контекст.ОписаниеДанных.ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Ошибка = Новый Структура("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Недоступно подписание типом подписи %1 с помощью встроенного криптопровайдера.'"), Контекст.ОписаниеДанных.ТипПодписи));
ВыполнитьНаСторонеПослеЦикла(Ошибка, Контекст);
Возврат;
КонецЕсли;
КонецЕсли;
СертификатПодписи = Новый Структура("Отпечаток",
Base64Значение(Контекст.ОписаниеДанных.ВыбранныйСертификат.Отпечаток));
МодульХранилищеСертификатовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ХранилищеСертификатовКлиент");
@@ -6437,10 +6640,10 @@
Результат.АдресаСерверовМетокВремени = Новый Массив;
Результат.ТипПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.ТипПодписиКриптографии(ТипПодписи);
Если ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdEST")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESC")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESXLongType2")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv3") Тогда
Если ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СПолнымНаборомПроверочныхДанныхCAdESC")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.РасширеннаяДолгосрочнаяCAdESXLongType2")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда
АдресаСерверовМетокВремени = ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени;
Если АдресаСерверовМетокВремени.Количество() = 0 Тогда
@@ -6449,8 +6652,8 @@
КонецЕсли;
Результат.АдресаСерверовМетокВремени = АдресаСерверовМетокВремени;
ИначеЕсли ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESBES")
И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CMS") Тогда
ИначеЕсли ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И ТипПодписи <> ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Тип подписи криптографии %1 не поддерживается.'"), ТипПодписи);
@@ -6908,7 +7111,23 @@
МодульСервисКриптографииDSSКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиентСервер");
МодульСервисКриптографииDSSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("СервисКриптографииDSSКлиент");
Если ЭлектроннаяПодписьКлиент.ОбщиеНастройки().ДоступнаУсовершенствованнаяПодпись И ЗначениеЗаполнено(Контекст.ОписаниеДанных.ТипПодписи) Тогда
Если Контекст.ОписаниеДанных.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда
СвойствоПодписи = МодульСервисКриптографииDSSКлиентСервер.ПолучитьСвойствоПодписиCAdES("BES", Истина, Ложь, "Подпись");
ИначеЕсли Контекст.ОписаниеДанных.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST") Тогда
АдресаСерверовМетокВремени = СтрСоединить(ЭлектроннаяПодписьКлиент.ОбщиеНастройки().АдресаСерверовМетокВремени, ",");
СвойствоПодписи = МодульСервисКриптографииDSSКлиентСервер.ПолучитьСвойствоПодписиCAdES("T", Истина, Ложь, "Подпись" ,АдресаСерверовМетокВремени);
ИначеЕсли Контекст.ОписаниеДанных.ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
СвойствоПодписи = МодульСервисКриптографииDSSКлиентСервер.ПолучитьСвойствоПодписиCMS(Истина, Ложь);
Иначе
Ошибка = Новый Структура("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Недоступно подписание типом подписи %1 с помощью учетной записи DSS.'"), Контекст.ОписаниеДанных.ТипПодписи));
ВыполнитьНаСторонеПослеЦикла(Ошибка, Контекст);
Возврат;
КонецЕсли;
Иначе
СвойствоПодписи = МодульСервисКриптографииDSSКлиентСервер.ПолучитьСвойствоПодписиCMS(Истина, Ложь);
КонецЕсли;
Если ТипРезультата <> Неопределено Тогда
ПараметрыОперации.Вставить("ТрансформироватьРезультат", Новый Структура("ТипРезультата", ТипРезультата));
@@ -7494,7 +7713,6 @@
КонецПроцедуры
Процедура ПослеПолученияВерсииКомпоненты(ВерсияКомпоненты, Параметры, Оповещение) Экспорт
ВыполнитьОбработкуОповещения(Оповещение, ВерсияКомпоненты);
@@ -7587,5 +7805,4 @@
КонецПроцедуры
#КонецОбласти
@@ -1041,14 +1041,10 @@
КонецФункции
Функция ПараметрыПодписиКриптографии(Знач ДвоичныеДанные, МенеджерКриптографии, ДобавкаВремени, ДатаСеанса) Экспорт
// Только для внутреннего использования.
Функция ПараметрыПодписиКриптографии(КонтейнерПодписи, ДобавкаВремени, ДатаСеанса) Экспорт
Если ЭтоАдресВременногоХранилища(ДвоичныеДанные) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДвоичныеДанные);
КонецЕсли;
КонтейнерПодписи = МенеджерКриптографии.ПолучитьКонтейнерПодписейКриптографии(ДвоичныеДанные);
ПараметрыПодписи = Новый Структура("ТипПодписи, СрокДействияПоследнейМеткиВремени,
ПараметрыПодписи = Новый Структура("ТипПодписи, СрокДействияПоследнейМеткиВремени, СертификатПоследнейМеткиВремени,
|ДатаПодписиИзМетки, ОписаниеСертификата, НеподтвержденнаяДатаПодписи, ДатаПоследнейМеткиВремени");
Подпись = КонтейнерПодписи.Подписи[0];
@@ -1062,30 +1058,34 @@
ПараметрыПодписи.ТипПодписи = ТипПодписиКриптографии(Подпись.ТипПодписи);
СрокДействияПоследнейМеткиВремени = Неопределено;
Если Подпись.МеткаВремениПодписи <> Неопределено Тогда
СертификатПодписи = Подпись.МеткаВремениПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПодписи.ДатаОкончания;
СертификатПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениПодписи.Дата + ДобавкаВремени);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениПодписи.Дата + ДобавкаВремени;
КонецЕсли;
Если Подпись.МеткаВремениДанныхПроверкиПодписи <> Неопределено Тогда
СертификатПодписи = Подпись.МеткаВремениДанныхПроверкиПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПодписи.ДатаОкончания;
СертификатПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + ДобавкаВремени);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.МеткаВремениДанныхПроверкиПодписи.Дата + ДобавкаВремени;
КонецЕсли;
Если Подпись.АрхивныеМеткиВремени.Количество() > 0 Тогда
СертификатПодписи = Подпись.АрхивныеМеткиВремени[Подпись.АрхивныеМеткиВремени.ВГраница()].Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПодписи.ДатаОкончания;
СертификатПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[Подпись.АрхивныеМеткиВремени.ВГраница()].Подписи[0].СертификатПодписи; // СертификатКриптографии
СрокДействияПоследнейМеткиВремени = СертификатПоследнейМеткиВремени.ДатаОкончания;
ДатаПодписиИзМетки = Мин(ДатаПодписиИзМетки, Подпись.АрхивныеМеткиВремени[0].Дата + ДобавкаВремени);
ПараметрыПодписи.ДатаПоследнейМеткиВремени = Подпись.АрхивныеМеткиВремени[Подпись.АрхивныеМеткиВремени.ВГраница()].Дата;
КонецЕсли;
Если ЗначениеЗаполнено(СрокДействияПоследнейМеткиВремени) Тогда
ПараметрыПодписи.СрокДействияПоследнейМеткиВремени = СрокДействияПоследнейМеткиВремени + ДобавкаВремени;
ПараметрыПодписи.СертификатПоследнейМеткиВремени = СертификатПоследнейМеткиВремени;
ИначеЕсли ПараметрыПодписи.ОписаниеСертификата.ДействителенДо < ДатаСеанса Тогда
ПараметрыПодписи.СрокДействияПоследнейМеткиВремени = ПараметрыПодписи.ОписаниеСертификата.ДействителенДо;
ПараметрыПодписи.СертификатПоследнейМеткиВремени = Подпись.СертификатПодписи;
Иначе
ПараметрыПодписи.СертификатПоследнейМеткиВремени = Подпись.СертификатПодписи;
КонецЕсли;
Если ДатаПодписиИзМетки <> Дата(3999, 12, 31) Тогда
@@ -1096,6 +1096,7 @@
КонецФункции
// Только для внутреннего использования.
Функция ТипПодписиКриптографии(ТипПодписиЗначение) Экспорт
Если Ложь Тогда // Для совместимости с версиями платформы, не поддерживающими усовершенствованную подпись.
@@ -1106,19 +1107,19 @@
Если ТипЗнч(ТипПодписиЗначение) = Тип(ИмяТипа) Тогда
Если ТипПодписиЗначение = ТипПодписиКриптографии.CAdESBES Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESBES");
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdEST Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdEST");
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdESAv3 Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv3");
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdESC Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESC");
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СПолнымНаборомПроверочныхДанныхCAdESC");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdESXLongType2 Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESXLongType2");
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.РасширеннаяДолгосрочнаяCAdESXLongType2");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdESAv2 Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv2");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CMS Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CMS");
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdESXLong Тогда
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESXLong");
ИначеЕсли ТипПодписиЗначение = ТипПодписиКриптографии.CAdESXLongType1 Тогда
@@ -1129,19 +1130,19 @@
Возврат ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESXType2");
КонецЕсли;
Иначе
Если ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESBES") Тогда
Если ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES") Тогда
Возврат ТипПодписиКриптографии.CAdESBES;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdEST") Тогда
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST") Тогда
Возврат ТипПодписиКриптографии.CAdEST;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv3") Тогда
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда
Возврат ТипПодписиКриптографии.CAdESAv3;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESC") Тогда
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СПолнымНаборомПроверочныхДанныхCAdESC") Тогда
Возврат ТипПодписиКриптографии.CAdESC;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESXLongType2") Тогда
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.РасширеннаяДолгосрочнаяCAdESXLongType2") Тогда
Возврат ТипПодписиКриптографии.CAdESXLongType2;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv2") Тогда
Возврат ТипПодписиКриптографии.CAdESAv2;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CMS") Тогда
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS") Тогда
Возврат ТипПодписиКриптографии.CMS;
ИначеЕсли ТипПодписиЗначение = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESXLong") Тогда
Возврат ТипПодписиКриптографии.CAdESXLong;
@@ -1158,18 +1159,19 @@
КонецФункции
// Только для внутреннего использования.
Функция ПодлежитУсовершенствованию(ТипПодписи, НовыйТипПодписи) Экспорт
Если Не ЗначениеЗаполнено(ТипПодписи)
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CMS")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.ОбычнаяCMS")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv2")
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESAv3") Тогда
Или ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.АрхивнаяCAdESAv3") Тогда
Возврат Ложь;
КонецЕсли;
Если НовыйТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdEST")
И ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESBES")
И ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdEST") Тогда
Если НовыйТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST")
И ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES")
И ТипПодписи = ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST") Тогда
Возврат Ложь;
КонецЕсли;
@@ -1177,7 +1179,6 @@
КонецФункции
// Только для внутреннего использования.
Функция ЗаголовокОшибкиПолученияДанных(Операция) Экспорт
@@ -121,7 +121,8 @@
ОбщиеНастройки.Вставить("УсовершенствоватьПодписиАвтоматически", Константы.УсовершенствоватьПодписиАвтоматически.Получить());
ОбщиеНастройки.Вставить("ДобавлятьМеткиВремениАвтоматически", Константы.ДобавлятьМеткиВремениАвтоматически.Получить());
ОбщиеНастройки.Вставить("УсовершенствоватьПодписиСДаты", Константы.УсовершенствоватьПодписиСДаты.Получить());
ОбщиеНастройки.Вставить("УсовершенствованиеЧерезСервис", УсовершенствованиеЧерезСервис());
ОбщиеНастройки.Вставить("ЭтоМодельСервисаСДоступнымУсовершенствованием",
ЭтоМодельСервисаСДоступнымУсовершенствованием());
ОбщиеНастройки.Вставить("ДоступнаПроверкаСертификатаВОблачномСервисеСПараметрами",
ДоступнаПроверкаСертификатаВОблачномСервисеСПараметрами());
@@ -325,29 +326,32 @@
КонецФункции
// Функция - Доступна усовершенствованная подпись
// Определяет наличие в платформе типа ПодписьКриптографии
// ЗначениеВСтрокуВнутр(Тип("ПодписьКриптографии")) = "{""T"",a338a24d-6470-4101-8735-008988fb74d8}"
//
// Возвращаемое значение:
// Булево
//
Функция ДоступнаУсовершенствованнаяПодпись() Экспорт
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения;
Возврат Не ЗначениеИзСтрокиВнутр("{""T"",a338a24d-6470-4101-8735-008988fb74d8}") = Тип("Неопределено");
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(
ВерсияПриложения,
"8.3.22.895") >= 0 Тогда
КонецФункции
Функция ЭтоМодельСервисаСДоступнымУсовершенствованием()
Если ОбщегоНазначения.РазделениеВключено() Тогда
Если ЭлектроннаяПодписьСлужебный.ИспользоватьСервисОблачнойПодписи() Тогда
МодульСервисКриптографииDSS = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSS");
НастройкиПодключения = МодульСервисКриптографииDSS.НастройкиПодключенияСлужебнойУчетнойЗаписи();
Если НастройкиПодключения.Свойство("АдресСервера") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция УсовершенствованиеЧерезСервис()
Возврат ОбщегоНазначения.РазделениеВключено();
КонецФункции
#КонецОбласти
+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="e819cf68-c842-46e9-91ee-2aabb5150d65">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8b1fd49b-6e40-4b98-bd18-2ef42d87a1d5">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="d153fa5e-1f99-4be0-a330-2376659a5261"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="ab8a9026-bd0c-4499-8bb9-ecdbda21bc03"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="a03c636b-3abd-4530-b89e-d7bfaa9d4374"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="85e31c57-5bfb-4985-ac1b-2c338751b787"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="12311153-0a95-451f-ad62-8a1f907001f9"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="74328353-2750-45b4-94e5-8160aa4ebd7a"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="85448d57-c51a-4836-ab94-e30f1fe9d859"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="f1f0721d-36f4-4e75-8b6c-0677471f79a3"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="2915fc86-be04-464b-b8c6-b00a2de69410"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="4b3a4a70-471f-4693-854c-b829a05b62c1"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="093d99e3-8096-4541-9e6d-c3ac85cff6dc"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="c98b02ae-70ac-4030-88d6-f10c2c44bbf5"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="3dd0401c-ff06-40b1-ae4c-c62d4eea87ef"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="4393ae44-8df8-4c3c-a288-1a3f90b8626b"/>
<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.6.137</version>
<version>3.1.6.159</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1 +1 @@
{6,1,1,7853339c-2e5d-44dd-bb12-ea8dbaa55056,1,7b112826-67b4-401f-89c0-e2d75ab0f519,"3.1.6.137","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6732,1,0,e819cf68-c842-46e9-91ee-2aabb5150d65,e819cf68-c842-46e9-91ee-2aabb5150d65,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,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,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,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7Line truncated
{6,1,1,fab0b14f-58ef-4b62-b1c3-ead5e29b9262,1,ec1bac89-868e-461d-9ba4-c4a8e8fb32d7,"3.1.6.159","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6732,1,0,8b1fd49b-6e40-4b98-bd18-2ef42d87a1d5,8b1fd49b-6e40-4b98-bd18-2ef42d87a1d5,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,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,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,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,839e29b1-a0d2-40fa-9f3e-46e66b943358,839e29b1-a0d2-40fa-9f3e-46e66b943358,1,0,c56d2cc7-630a-441b-b23f-ba78c34849bd,c56d2cc7-630a-441b-b23f-ba78c34849bd,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,21d92c2f-6c78-43ce-b1f4-59d7845b5a91,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,2a4b10be-3cd7-4755-905f-7b4d02ff6a22,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,a379287d-1ce8-460d-a503-910e728e28f1,a379287d-1ce8-460d-a503-910e728e28f1,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,d8c58e53-b7b9-4426-bdfa-d0816adf8cc1,1,0,4009cb3a-6754-481f-911b-907558cea38a,4009cb3a-6754-481f-911b-907558cea38a,1,0,653a7fd8-91c7-49aa-aa63-45da087e0d0a,653a7fd8-91c7Line truncated
@@ -16,8 +16,7 @@
Возврат;
КонецЕсли;
ЭлектроннаяПодписьСлужебный.УстановитьПараметрРегламентногоЗаданияПродлениеДостоверностиПодписей("Использование",
Значение Или Константы.УсовершенствоватьПодписиАвтоматически.Получить() <> 0);
ЭлектроннаяПодписьСлужебный.ИзменитьРегламентноеЗаданиеПродлениеДостоверностиПодписей(, Значение);
КонецПроцедуры
@@ -16,14 +16,16 @@
Возврат;
КонецЕсли;
Если Значение = Перечисления.ТипыПодписиКриптографии.CMS
Или Значение = Перечисления.ТипыПодписиКриптографии.CAdESBES
Если Значение = Перечисления.ТипыПодписиКриптографии.ОбычнаяCMS
Или Значение = Перечисления.ТипыПодписиКриптографии.БазоваяCAdESBES
Или Не ЗначениеЗаполнено(Значение) Тогда
Если Константы.УсовершенствоватьПодписиАвтоматически.Получить() <> 0 Тогда
Константы.УсовершенствоватьПодписиАвтоматически.Установить(0);
КонецЕсли;
КонецЕсли;
ЭлектроннаяПодписьСлужебный.ИзменитьРегламентноеЗаданиеПродлениеДостоверностиПодписей(,,Значение);
КонецПроцедуры
#КонецОбласти
@@ -16,8 +16,7 @@
Возврат;
КонецЕсли;
ЭлектроннаяПодписьСлужебный.УстановитьПараметрРегламентногоЗаданияПродлениеДостоверностиПодписей("Использование",
Значение <> 0 Или Константы.ДобавлятьМеткиВремениАвтоматически.Получить());
ЭлектроннаяПодписьСлужебный.ИзменитьРегламентноеЗаданиеПродлениеДостоверностиПодписей(Значение);
КонецПроцедуры
@@ -1,28 +0,0 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ЭлектроннаяПодписьСлужебный.УстановитьПараметрРегламентногоЗаданияПродлениеДостоверностиПодписей("Использование",
Значение <> 0 Или Константы.ДобавлятьМеткиВремениАвтоматически.Получить());
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
@@ -44,7 +44,10 @@
ОтборЖурналаРегистрации.Вставить("Событие", ОтборПоСобытию);
КонецЕсли;
Если МодельСервиса Тогда
ПереданОтборПоДате = ЗначениеЗаполнено(Параметры.ДатаНачала)
Или ЗначениеЗаполнено(Параметры.ДатаОкончания);
Если МодельСервиса И Не ПереданОтборПоДате Тогда
ОтборЖурналаРегистрации.Вставить("ДатаНачала", НачалоДня(ТекущаяДатаСеанса()));
ОтборЖурналаРегистрации.Вставить("ДатаОкончания", КонецДня(ТекущаяДатаСеанса()));
Иначе
@@ -1793,7 +1793,9 @@
ТабличнаяЧасть = ПолучитьИзВременногоХранилища(АдресКопииТабличнойЧасти); // см. ОписаниеТабличнойЧасти
Если ТабличнаяЧасть = Неопределено ИЛИ ТипЗнч(ТабличнаяЧасть) <> Тип("ТаблицаЗначений") ИЛИ ТабличнаяЧасть.Количество() = 0 Тогда
ЭтоТаблица = ТипЗнч(ТабличнаяЧасть) = Тип("ТаблицаЗначений");
Если Не ЭтоТаблица Или ТабличнаяЧасть.Количество() = 0 Тогда
Возврат;
КонецЕсли;
@@ -1812,7 +1814,7 @@
КолонкиТабличнойЧасти.Вставить(Колонка.Имя, Истина);
КонецЦикла;
ВременнаяТЗ = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных");
ВременнаяТЗ = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); // см. Обработка.ЗагрузкаДанныхИзФайла.Форма.ЗагрузкаДанныхИзФайла.ТаблицаСопоставленияДанных
Для каждого Строка Из ТабличнаяЧасть Цикл
НоваяСтрока = ВременнаяТЗ.Добавить();
НоваяСтрока.Идентификатор = Строка.Идентификатор;
@@ -2749,7 +2751,8 @@
ПараметрыВызоваСервера.Вставить("ИнформацияПоКолонкам", РеквизитФормыВЗначение("ИнформацияПоКолонкам"));
ПараметрыВыполненияВФоне = ДлительныеОперации.ПараметрыВыполненияВФоне(ЭтотОбъект.УникальныйИдентификатор);
ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Подсистема ЗагрузкаДанныхИзФайла: Выполнение серверного метода загрузка данных из файла'");
ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Подсистема %1: Выполнение серверного метода загрузка данных из файла'"), "ЗагрузкаДанныхИзФайла");
ФоновоеЗадание = ДлительныеОперации.ВыполнитьВФоне("Обработки.ЗагрузкаДанныхИзФайла.ЗагрузитьФайлВТаблицу",
ПараметрыВызоваСервера, ПараметрыВыполненияВФоне);
@@ -629,7 +629,7 @@
ИначеЕсли Реквизит.Тип.СодержитТип(Тип("Дата")) Тогда
ОписаниеТипаКолонки = Строка(Реквизит.Тип.КвалификаторыДаты.ЧастиДаты);
ИначеЕсли Реквизит.Тип.СодержитТип(Тип("УникальныйИдентификатор")) Тогда
ОписаниеТипаКолонки = НСтр("ru = 'УникальныйИдентификатор'");
ОписаниеТипаКолонки = НСтр("ru = 'Уникальный идентификатор'");
КонецЕсли;
ШиринаКолонки = ШиринаКолонкиПоТипу(Реквизит.Тип);
@@ -763,9 +763,7 @@
&НаСервереБезКонтекста
Функция ВозможныйКодСсылки(Знач Ссылка, КэшМетаданных)
// Возвращаемое значение:
// Произвольный - код справочника и т.п. если он есть по метаданным,
// Неопределено - если кода нет.
Мета = Ссылка.Метаданные();
ЕстьКод = КэшМетаданных[Мета];
@@ -52,22 +52,6 @@
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подтверждаю(Команда)
Если Не СогласиеСПодтверждаемойИнформацией Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Поставьте отметку о подтверждении'"),, "СогласиеСПодтверждаемойИнформацией");
Возврат;
КонецЕсли;
Закрыть(Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
@@ -84,6 +68,22 @@
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подтверждаю(Команда)
Если Не СогласиеСПодтверждаемойИнформацией Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Поставьте отметку о подтверждении'"),, "СогласиеСПодтверждаемойИнформацией");
Возврат;
КонецЕсли;
Закрыть(Истина);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
@@ -3634,7 +3634,7 @@
ЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанныхДляПодписания,
УникальныйИдентификатор,
Новый ОписаниеОповещения("ОтправитьЗаявлениеПослеПодписанияФайлов", ЭтотОбъект),
ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.CAdESBES"));
ПредопределенноеЗначение("Перечисление.ТипыПодписиКриптографии.БазоваяCAdESBES"));
КонецПроцедуры
@@ -4847,13 +4847,13 @@
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат); // ДвоичныеДанные
Если ТипЗнч(ДвоичныеДанныеФайла) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресЗапросаНаСертификат);
Если ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".p10");
ДвоичныеДанныеФайла.Записать(ИмяВременногоФайла);
Иначе
ВызватьИсключение ТекстОшибки;
КонецЕсли;
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяВременногоФайла);
@@ -92,7 +92,8 @@
Процедура ОткрытьСписокЗадачТочкиМаршрута()
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
ПоказатьПредупреждение(,НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'"));
ПоказатьПредупреждение(, НСтр("ru = 'Действие недоступно в веб-клиенте или в мобильном клиенте.
|Запустите тонкий клиент.'"));
Возврат;
#КонецЕсли
ОчиститьСообщения();
@@ -96,16 +96,16 @@
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если МобильныйКлиент Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'"));
#Если МобильныйКлиент Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Отчет недоступен в мобильном клиенте. Запустите тонкий клиент или веб-клиент.'"));
Отказ = Истина;
Возврат;
#КонецЕсли
#КонецЕсли
#Если ВебКлиент Тогда
#Если ВебКлиент Тогда
ПоказатьОшибкуОперацияНеПоддерживаетсяВВебКлиенте();
Возврат;
#КонецЕсли
#КонецЕсли
Если ТребуетсяВнесениеИзмененийВПрофиляхБезопасности Тогда
@@ -265,7 +265,8 @@
Функция ПроверитьКаталогСРезервнымиКопиями()
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
ТекстСообщения = НСтр("ru = 'Для корректной работы необходим режим тонкого или толстого клиента.'");
ТекстСообщения = НСтр("ru = 'Действие недоступно в веб-клиенте или в мобильном клиенте.
|Запустите тонкий клиент.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
РеквизитыЗаполнены = Ложь;
#Иначе
@@ -739,7 +739,7 @@
ИначеЕсли ЭтоПараметрСеанса(ИмяОбъектаМетаданных) Тогда
ВидПрава = ВидыПрав.Добавить();
ВидПрава.Имя = "Получение";
ВидПрава.Имя = "Получение"; //@Access-right-1
ВидПрава.Чтение = Истина;
ВидПрава = ВидыПрав.Добавить();
@@ -785,7 +785,7 @@
ВидПрава.Чтение = Истина;
ВидПрава = ВидыПрав.Добавить();
ВидПрава.Имя = "Добавление";
ВидПрава.Имя = "Добавление"; //@Access-right-1
ВидПрава.Изменение = Истина;
ВидПрава = ВидыПрав.Добавить();
@@ -817,7 +817,7 @@
ВидПрава.Изменение = Истина;
ВидПрава = ВидыПрав.Добавить();
ВидПрава.Имя = "ИнтерактивнаяПометкаУдаления";
ВидПрава.Имя = "ИнтерактивнаяПометкаУдаления"; //@Access-right-1
ВидПрава.Интерактивное = Истина;
ВидПрава.Изменение = Истина;
@@ -894,7 +894,7 @@
ВидПрава.Изменение = Истина;
ВидПрава = ВидыПрав.Добавить();
ВидПрава.Имя = "Выполнение";
ВидПрава.Имя = "Выполнение"; //@Access-right-1
ВидПрава.Изменение = Истина;
ВидПрава = ВидыПрав.Добавить();
@@ -699,19 +699,19 @@
| ТОГДА Приоритеты.ЗаданПорядокВыполнения
| ИНАЧЕ
| ВЫБОР
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ПорядокБиблиотеки > 0 И Обработчики2.ПорядокБиблиотеки > 0
| И Обработчики1.ПорядокБиблиотеки < Обработчики2.ПорядокБиблиотеки
| ТОГДА &До
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ПорядокБиблиотеки > 0 И Обработчики2.ПорядокБиблиотеки > 0
| И Обработчики1.ПорядокБиблиотеки > Обработчики2.ПорядокБиблиотеки
| ТОГДА &После
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0
| И Обработчики1.ОчередьОтложеннойОбработки < Обработчики2.ОчередьОтложеннойОбработки
| ТОГДА &До
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0
| И Обработчики1.ОчередьОтложеннойОбработки > Обработчики2.ОчередьОтложеннойОбработки
| ТОГДА &После
@@ -724,19 +724,19 @@
| ТОГДА Приоритеты.Порядок
| ИНАЧЕ
| ВЫБОР
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ПорядокБиблиотеки > 0 И Обработчики2.ПорядокБиблиотеки > 0
| И Обработчики1.ПорядокБиблиотеки < Обработчики2.ПорядокБиблиотеки
| ТОГДА &До
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ПорядокБиблиотеки > 0 И Обработчики2.ПорядокБиблиотеки > 0
| И Обработчики1.ПорядокБиблиотеки > Обработчики2.ПорядокБиблиотеки
| ТОГДА &После
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0
| И Обработчики1.ОчередьОтложеннойОбработки < Обработчики2.ОчередьОтложеннойОбработки
| ТОГДА &До
| КОГДА НЕ Обработчики1.РазрабатываемаяПодсистема И НЕ Обработчики2.РазрабатываемаяПодсистема
| КОГДА (НЕ Обработчики1.РазрабатываемаяПодсистема ИЛИ НЕ Обработчики2.РазрабатываемаяПодсистема)
| И Обработчики1.ОчередьОтложеннойОбработки > 0 И Обработчики2.ОчередьОтложеннойОбработки > 0
| И Обработчики1.ОчередьОтложеннойОбработки > Обработчики2.ОчередьОтложеннойОбработки
| ТОГДА &После
@@ -1537,8 +1537,18 @@
ИмяСобытия = НСтр("ru = 'Построение очереди обработчиков обновления'", ОбщегоНазначения.КодОсновногоЯзыка());
СписокПроблемныхОбработчиков = "";
Для Каждого Ошибка Из Ошибки Цикл
Если НЕ ПустаяСтрока(Ошибка.Обработчик) Тогда
ОбработчикиОшибки = СтрРазделить(Ошибка.Обработчик, Символы.ПС);
Если ОбработчикиОшибки.Количество() = 1 Тогда
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Ошибка.ОбъектМетаданных);
СписокПроблемныхОбработчиков = СписокПроблемныхОбработчиков + Ошибка.Обработчик + Символы.ПС;
КонецЕсли;
ОбработчикиОшибки = СтрРазделить(Ошибка.Обработчик, Символы.ПС);
Для Каждого Обработчик Из ОбработчикиОшибки Цикл
Если СтрНайти(СписокПроблемныхОбработчиков, Обработчик) = 0 Тогда
СписокПроблемныхОбработчиков = СписокПроблемныхОбработчиков + Обработчик + Символы.ПС;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЗаписьЖурналаРегистрации(
ИмяСобытия,
УровеньЖурналаРегистрации.Ошибка,
@@ -1646,7 +1656,7 @@
ТекстСообщения = НСтр("ru = 'Обнаружен цикл порядка выполнения:'") + Символы.ПС + "%Путь%";
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Путь%", ТекстПути);
ДобавитьОшибку("", ТекстСообщения);
ДобавитьОшибку(ТекстПути, ТекстСообщения);
Если СообщатьОбОшибках Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
@@ -1444,6 +1444,9 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаОбновлениеПрограммы_НастройкиСПодсказкой</name>
<id>1986</id>
<items xsi:type="form:FormGroup">
<name>ГруппаОбновлениеПрограммы_Настройки</name>
<id>1772</id>
@@ -1578,7 +1581,6 @@
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<height>2</height>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<extInfo xsi:type="form:LabelDecorationExtInfo">
@@ -1652,7 +1654,75 @@
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:Decoration">
<name>ДекорацияПодсказкаАвтоматическойПроверкиОбновлений</name>
<id>1988</id>
<title>
<key>ru</key>
<value>Настройка автоматической проверки обновления выполняется для каждого пользователя.</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ДекорацияПодсказкаАвтоматическойПроверкиОбновленийРасширеннаяПодсказка</name>
<id>1990</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ДекорацияПодсказкаАвтоматическойПроверкиОбновленийКонтекстноеМеню</name>
<id>1989</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<width>40</width>
<autoMaxWidth>true</autoMaxWidth>
<height>3</height>
<autoMaxHeight>true</autoMaxHeight>
<textColor xsi:type="core:ColorRef">
<color>Style.ПоясняющийТекст</color>
</textColor>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Обновление программы настройки с подсказкой</value>
</title>
<extendedTooltip>
<name>ГруппаОбновлениеПрограммы_НастройкиСПодсказкойРасширеннаяПодсказка</name>
<id>1987</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
Loaded 100 of 191 files, more files were not shown because too many files have changed in this diff. Show more