This commit is contained in:
Компания 1С committed 2022-06-15 23:35:00 +03:00
1 parent 514ae42c64
commit 074fce3a4a
155 files changed
+4063 -2498

No files matched your search

@@ -89,6 +89,8 @@
УстановитьВидимостьДоступность();
ВнешниеКомпонентыСлужебный.ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты();
КонецПроцедуры
&НаКлиенте
@@ -94,6 +94,16 @@
Процедура ПередЗаписью(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после блокировки регистра.
// Блокировка всего регистра используется вместо установки разделяемой блокировки на справочник,
// которая приводит к взаимоблокировке при иерархическом обновлении составов групп пользователей,
// а также вместо последовательной исключительной блокировки регистра в разрезе групп,
// которая также приводит к взаимоблокировке в ряде случаев.
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
Блокировка.Заблокировать();
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -75,6 +75,16 @@
// Блокирует недопустимые действия с предопределенной группой "Все пользователи".
Процедура ПередЗаписью(Отказ)
// АПК:75-выкл проверка ОбменДанными.Загрузка должна быть после блокировки регистра.
// Блокировка всего регистра используется вместо установки разделяемой блокировки на справочник,
// которая приводит к взаимоблокировке при иерархическом обновлении составов групп пользователей,
// а также вместо последовательной исключительной блокировки регистра в разрезе групп,
// которая также приводит к взаимоблокировке в ряде случаев.
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
Блокировка.Заблокировать();
// АПК:75-вкл
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -240,6 +240,8 @@
МодульУправлениеПечатью.ОтключитьКомандыПечати(ВыбранныеОбъектыНазначения().ВыгрузитьЗначения(), ОтключаемыеКоманды().ВыгрузитьЗначения());
КонецЕсли;
СтандартныеПодсистемыСервер.ОповеститьВсеСеансыОбУстареванииПовторноИспользуемыхЗначений(Истина);
КонецПроцедуры
#КонецОбласти
@@ -610,7 +612,7 @@
ПараметрыРегистрации.ОтключатьКонфликтующие = Ложь;
ПараметрыРегистрации.Конфликтующие = Новый СписокЗначений;
МассивПодстрок = СтрРазделить(ОписаниеФайла.Имя, "\", Ложь);
МассивПодстрок = СтрРазделить(ОписаниеФайла.Имя, ПолучитьРазделительПути(), Ложь);
ПараметрыРегистрации.ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница());
РасширениеФайла = ВРег(Прав(ПараметрыРегистрации.ИмяФайла, 3));
@@ -85,6 +85,30 @@
#Область СлужебныйПрограммныйИнтерфейс
// Параметры:
// ИмяПараметра - Строка
// УстановленныеПараметры - Массив из Строка
//
// Возвращаемое значение:
// Булево
//
Функция ВсеПараметрыСеансаУстановлены(ИменаПараметровСеанса, УстановленныеПараметры) Экспорт
Если ИменаПараметровСеанса.Найти("ОбновлениеСправочниковИдентификаторов") = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ИдентификаторыОбъектовМетаданных", Ложь);
Результат.Вставить("ИдентификаторыОбъектовРасширений", Ложь);
ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов = Новый ФиксированнаяСтруктура(Результат);
УстановленныеПараметры.Добавить("ОбновлениеСправочниковИдентификаторов");
Возврат ИменаПараметровСеанса.Количество() = 1;
КонецФункции
// Только для внутреннего использования.
Процедура ПроверкаИспользования(ОбъектыРасширений = Ложь) Экспорт
@@ -591,6 +615,7 @@
ПроверкаИспользования(ОбъектыРасширений);
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ЕстьТекущиеИзменения = Ложь;
@@ -612,6 +637,16 @@
"СтандартныеПодсистемы.БазоваяФункциональность.ИдентификаторыОбъектовМетаданных", Истина);
КонецЕсли;
Если Не ТолькоПроверка И Не ТранзакцияАктивна() Тогда
ВыполненоОбновление = Новый Структура(ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов);
Если ОбъектыРасширений Тогда
ВыполненоОбновление.ИдентификаторыОбъектовРасширений = Истина;
Иначе
ВыполненоОбновление.ИдентификаторыОбъектовМетаданных = Истина;
КонецЕсли;
ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов = Новый ФиксированнаяСтруктура(ВыполненоОбновление);
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
@@ -1279,6 +1314,20 @@
СтандартныеПодсистемыСервер.ЗарегистрироватьОбъектНаВсехУзлах(Объект, ПланОбмена, Ложь);
КонецЦикла;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ВыполненоОбновление = Новый Структура(ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов);
Если ОбъектыРасширений Тогда
ВыполненоОбновление.ИдентификаторыОбъектовРасширений = Ложь;
Иначе
ВыполненоОбновление.ИдентификаторыОбъектовМетаданных = Ложь;
КонецЕсли;
ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов = Новый ФиксированнаяСтруктура(ВыполненоОбновление);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Если Объект.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -3019,15 +3068,20 @@
КонецПопытки;
Если Идентификаторы = Неопределено Тогда
ВыполненоОбновление = ОбновлениеСправочниковИдентификаторов();
Если Не ОбщегоНазначения.РазделениеВключено()
Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ОбновитьДанныеСправочника();
Если Не ВыполненоОбновление.ИдентификаторыОбъектовМетаданных Тогда
ОбновитьДанныеСправочника();
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();
Если Не ВыполненоОбновление.ИдентификаторыОбъектовРасширений Тогда
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанныеСправочника();
КонецЕсли;
КонецЕсли;
Идентификаторы = ИдентификаторыОбъектовМетаданныхБезПопыткиПовтора(
@@ -3322,6 +3376,23 @@
КонецФункции
// Для функций ИдентификаторыОбъектовМетаданныхСПопыткойПовтора,
// ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора.
//
Функция ОбновлениеСправочниковИдентификаторов()
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Результат = ПараметрыСеанса.ОбновлениеСправочниковИдентификаторов;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Возврат Результат;
КонецФункции
// Для функций ОбъектМетаданныхПоИдентификатору, ОбъектыМетаданныхПоИдентификаторам.
Функция ОбъектыМетаданныхПоИдентификаторамСПопыткойПовтора(Идентификаторы, ВызыватьИсключение)
@@ -3404,7 +3475,10 @@
КонецЕсли;
Если ОбъектыМетаданных = Неопределено Тогда
ОбновитьДанныеСправочника();
ВыполненоОбновление = ОбновлениеСправочниковИдентификаторов();
Если Не ВыполненоОбновление.ИдентификаторыОбъектовМетаданных Тогда
ОбновитьДанныеСправочника();
КонецЕсли;
ОбъектыМетаданных = ОбъектыМетаданныхПоИдентификаторамБезПопыткиПовтора(Идентификаторы,
ИдентификаторыКонфигурации, ИдентификаторыРасширений, ВызыватьИсключение);
КонецЕсли;
@@ -567,33 +567,6 @@
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
</items>
<items xsi:type="form:Button">
<name>ОтчетыУдалить</name>
<id>1002</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОтчетыУдалитьРасширеннаяПодсказка</name>
<id>1003</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Отчеты.StandardCommand.Delete</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Picture</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:FormGroup">
<name>КомандыПеремещения</name>
<id>1004</id>
@@ -670,7 +643,9 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<extInfo xsi:type="form:ButtonGroupExtInfo"/>
<extInfo xsi:type="form:ButtonGroupExtInfo">
<representation>Compact</representation>
</extInfo>
</items>
<items xsi:type="form:Button">
<name>ОтчетыСформироватьОтчет</name>
@@ -698,6 +673,33 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>ОтчетыУдалить</name>
<id>1002</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОтчетыУдалитьРасширеннаяПодсказка</name>
<id>1003</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Item.Отчеты.StandardCommand.Delete</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
<locationInCommandBar>InCommandBarAndInAdditionalSubmenu</locationInCommandBar>
</items>
<items xsi:type="form:FormGroup">
<name>КоманднаяПанельОтчеты</name>
<id>354</id>
@@ -1721,24 +1721,22 @@
&НаКлиенте
Процедура ПредпросмотрШаблона(Команда)
ДобавитьШаблон();
Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда
Шаблон = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
ИначеЕсли ТекущийЭлемент = Элементы.ТекстПисьма Тогда
Шаблон = Объект.ТекстПисьма;
ИначеЕсли ТекущийЭлемент = Элементы.ТемаПисьма Тогда
Шаблон = Объект.ТемаПисьма;
КонецЕсли;
Шаблон = Объект.ТемаПисьма + Символы.ПС + Символы.ПС + Шаблон;
СформированныеОтчеты = "";
Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл
СформированныеОтчеты = СформированныеОтчеты
+ Символы.ПС
+ СтрокаОтчет.Представление
+ " ("
+ ?(СтрокаОтчет.Форматы = ПредставлениеФорматовПоУмолчанию(), ФорматыПоУмолчанию, СтрокаОтчет.Форматы)
+ ")";
СформированныеОтчеты = СформированныеОтчеты + Символы.ПС
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 (%2)",
СтрокаОтчет.Представление,
?(СтрокаОтчет.Форматы = ПредставлениеФорматовПоУмолчанию(), ФорматыПоУмолчанию, СтрокаОтчет.Форматы));
КонецЦикла;
СформированныеОтчеты = СокрЛ(СформированныеОтчеты);
@@ -1757,11 +1755,10 @@
ПараметрыШаблона.Вставить("СформированныеОтчеты", СформированныеОтчеты);
ПараметрыШаблона.Вставить("СпособДоставки", СпособДоставки);
#Если НЕ МобильныйКлиент Тогда
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(РассылкаОтчетовКлиентСервер.ЗаполнитьШаблон(Шаблон, ПараметрыШаблона));
ТекстовыйДокумент.Показать();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
@@ -809,7 +809,7 @@
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9">
<name>КомпонентаExtraCryptoAPI_3_0_1_28</name>
<name>КомпонентаExtraCryptoAPI_3_0_1_29</name>
<synonym>
<key>ru</key>
<value>Компонента ExtraCryptoAPI</value>
@@ -406,6 +406,9 @@
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<associatedTableElementId xsi:type="core:StringValue">
<value>СписокСостоянийОригинала</value>
</associatedTableElementId>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
@@ -431,6 +434,9 @@
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<associatedTableElementId xsi:type="core:StringValue">
<value>СписокСостоянийОригинала</value>
</associatedTableElementId>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
@@ -295,6 +295,7 @@
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<editTextUpdate>OnValueChange</editTextUpdate>
<textSize>Normal</textSize>
</extInfo>
</items>
@@ -467,6 +468,7 @@
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<editTextUpdate>OnValueChange</editTextUpdate>
<textSize>Normal</textSize>
</extInfo>
</items>
@@ -375,8 +375,6 @@
ПланВидовХарактеристикОбъектыАдресацииЗадач.ПометкаУдаления,
ПланВидовХарактеристикОбъектыАдресацииЗадач.Наименование,
ПланВидовХарактеристикОбъектыАдресацииЗадач.ТипЗначения,
ПланВидовХарактеристикОбъектыАдресацииЗадач.НаименованиеЯзык1,
ПланВидовХарактеристикОбъектыАдресацииЗадач.НаименованиеЯзык2,
ПланВидовХарактеристикОбъектыАдресацииЗадач.Предопределенный,
ПланВидовХарактеристикОбъектыАдресацииЗадач.ИмяПредопределенныхДанных
ИЗ
@@ -2533,7 +2533,7 @@
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -2675,7 +2675,7 @@
Строка = Отборы.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -2911,7 +2911,7 @@
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -3240,7 +3240,7 @@
Строка = ВыбранныеПоля.НайтиПоИдентификатору(ИдентификаторСтроки);
Родитель = Строка.ПолучитьРодителя();
Если Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Если Родитель = Неопределено Или Родитель.ПолучитьЭлементы().Индекс(Строка) < 0
Или ТипЗнч(Строка.Идентификатор) <> Тип("ИдентификаторКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
@@ -3070,6 +3070,38 @@
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ГруппаДляПоказателей</name>
<id>1125</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Показатели</value>
</title>
<extendedTooltip>
<name>ГруппаДляПоказателейРасширеннаяПодсказка</name>
<id>1126</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ОтчетТабличныйДокумент</name>
<id>7</id>
@@ -743,12 +743,9 @@
ПараметрыЗаполнения.Вставить("СброситьНастройкиВарианта", Истина);
ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь);
КонецЕсли;
ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина);
ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина);
УточнитьПризнакАвтоформированияОтчета(ПараметрыЗаполнения);
ОтчетСформирован = Ложь;
СброситьВыбранныйУровеньГруппировок();
@@ -1434,12 +1431,9 @@
&НаКлиенте
Процедура ПослеФормирования(Результат, ПараметрыФормирования) Экспорт
Если ФоновоеЗаданиеИдентификатор <> ПараметрыФормирования.ИдентификаторЗадания Тогда
ПоказатьВыбранныйУровеньГруппировок();
ПереопределитьРезультатФормированияОтчета(Результат);
Возврат;
КонецЕсли;
Если Результат = Неопределено Тогда
@@ -1473,29 +1467,22 @@
МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(ИдентификаторЗамера);
КонецЕсли;
ПереопределитьРезультатФормированияОтчета(Результат);
СброситьТекущуюОбласть();
ПоказатьВыбранныйУровеньГруппировок();
КонецПроцедуры
&НаКлиенте
Процедура ПереопределитьРезультатФормированияОтчета(Результат)
ОтчетСформирован = ОтчетСформирован(Результат);
ОтчетСформирован = ?(Результат = Неопределено, Ложь, Результат.Статус = "Выполнено");
ИнтеграцияПодсистемБСПКлиент.ПослеФормирования(ЭтотОбъект, ОтчетСформирован);
ОтчетыКлиентПереопределяемый.ПослеФормирования(ЭтотОбъект, ОтчетСформирован);
СброситьТекущуюОбласть();
ПоказатьВыбранныйУровеньГруппировок();
Обработчик = ОбработчикПослеФормированияНаКлиенте;
Если ТипЗнч(Обработчик) = Тип("ОписаниеОповещения") Тогда
ВыполнитьОбработкуОповещения(Обработчик, ОтчетСформирован);
ОбработчикПослеФормированияНаКлиенте = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ОтчетСформирован(Результат)
Возврат ?(Результат = Неопределено, Ложь, Результат.Статус = "Выполнено");
КонецФункции
&НаСервере
Функция РезультатФормированияОтчета(Знач ФормированиеПриОткрытии, Непосредственно, ПослеПредупреждения)
@@ -3709,6 +3696,10 @@
Элементы.ИзменитьСоставБыстрыхНастроек.Видимость = ПоказыватьКомандыИзмененияВарианта
И Не ОбщегоНазначения.ЭтоМобильныйКлиент();
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.Переместить(Элементы.ГруппаПоказатель, Элементы.ГруппаДляПоказателей);
КонецЕсли;
ЭтоПредопределенныйВариант = Не НастройкиОтчета.Пользовательский
И ЗначениеЗаполнено(НастройкиОтчета.ПредопределенныйСсылка);
@@ -499,7 +499,7 @@
// Для внутреннего использования.
//
Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт
Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(ЗагрузкаДанных = Ложь) Экспорт
Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
ВызватьИсключение НСтр("ru = 'Первый запуск автономного рабочего места должен выполняться в файловой информационной базе.'");
@@ -507,15 +507,20 @@
УстановитьПривилегированныйРежим(Истина);
ЗагрузитьДанныеНачальногоОбраза();
ЗагрузитьПараметрыИзНачальногоОбраза();
Если ЗагрузкаДанных Тогда
ЗагрузитьДанныеНачальногоОбраза();
Иначе
ЗагрузитьПараметрыИзНачальногоОбраза();
// Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил.
ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
// Правила обмена не мигрируют в РИБ, поэтому выполняем загрузку правил.
ОбменДаннымиСервер.ВыполнитьОбновлениеПравилДляОбменаДанными();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ();
Если Не ЗагрузкаДанных Тогда
ОбменДаннымиСервер.ПриПродолженииНастройкиПодчиненногоУзлаРИБ();
КонецЕсли;
КонецПроцедуры
@@ -9642,8 +9642,6 @@
Возврат;
КонецЕсли;
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
УстановитьПривилегированныйРежим(Истина);
Авторизация = ПараметрыАутентификацииНаСайте();
УстановитьПривилегированныйРежим(Ложь);
@@ -9670,10 +9668,15 @@
ПутьДляСохранения = ВременныйКаталог + ВРег(ФайлРегиона.ИмяФайла);
ПараметрыПолучения.Вставить("ПутьДляСохранения", ПутьДляСохранения);
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения);
Если Не ЗагруженныйФайл.Статус Тогда
ФайловаяСистема.УдалитьВременныйФайл(ВременныйКаталог);
ВызватьИсключение ЗагруженныйФайл.СообщениеОбОшибке;
ФайлПолучен = ПолучитьФайлИзИнтернета(ОписаниеРегиона, ВременныйКаталог, ПараметрыПолучения, ФайлРегиона.ИмяФайла);
Если Не ФайлПолучен.Статус Тогда
// 2 попытка получения файла
ФайлПолучен = ПолучитьФайлИзИнтернета(ОписаниеРегиона, ВременныйКаталог, ПараметрыПолучения, ФайлРегиона.ИмяФайла);
Если Не ФайлПолучен.Статус Тогда
ВызватьИсключение ФайлПолучен.СообщениеОбОшибке;
КонецЕсли;
КонецЕсли;
КодыСубъектовДляЗагрузки.Добавить(КодСубъекта);
@@ -9683,6 +9686,46 @@
КонецПроцедуры
Функция ПолучитьФайлИзИнтернета(ОписаниеРегиона, Знач ВременныйКаталог, ПараметрыПолучения, ИмяФайла)
Результат = СведенияОПолученииФайла();
ПутьДляСохранения = ПараметрыПолучения.ПутьДляСохранения;
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ОписаниеРегиона.Адрес, ПараметрыПолучения);
Если Не ЗагруженныйФайл.Статус Тогда
ФайловаяСистема.УдалитьВременныйФайл(ВременныйКаталог);
Результат.СообщениеОбОшибке = ЗагруженныйФайл.СообщениеОбОшибке;
Возврат Результат;
КонецЕсли;
Если Не ФайлСуществует(ПутьДляСохранения) Тогда
Результат.СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось загрузить файл %1. Загрузка адресных сведений перервана.
|Техническая информация: %2'"), ИмяФайла, ПутьДляСохранения);
Иначе
Результат.Статус = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
// Возвращаемое значение:
// Структура:
// * Статус - Булево
// * СообщениеОбОшибке - Строка
//
Функция СведенияОПолученииФайла()
Результат = Новый Структура;
Результат.Вставить("Статус", Ложь);
Результат.Вставить("СообщениеОбОшибке", "");
Возврат Результат;
КонецФункции
Процедура ЗагрузитьДанныеКлассификатораАдресовИзФайла(СубъектРФ, ОписаниеФайлов, ПараметрыЗагрузки) Экспорт
ДатаЗагрузки = ПараметрыЗагрузки.ДатаЗагрузки;
@@ -10871,11 +10914,13 @@
Результат.Вставить("ДатаВерсии");
Результат.Вставить("ФайлЧтения", Новый ЧтениеFastInfoset);
ФайлЧтения = Результат.ФайлЧтения;
ПроверкаФайла = Новый Файл(Результат.ПолноеИмя);
Если Не ПроверкаФайла.Существует() Тогда
Возврат Неопределено;
Если Не ФайлСуществует(Результат.ПолноеИмя) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось загрузить файл %1. Загрузка адресных сведений перервана.
|Техническая информация: %2'"), ИмяИсходногоФайла, Результат.ПолноеИмя);
КонецЕсли;
ФайлЧтения = Результат.ФайлЧтения;
ФайлЧтения.ОткрытьФайл(Результат.ПолноеИмя);
// Встаем на первый узел с данными.
@@ -10904,11 +10949,30 @@
Функция КаталогВременногоХранилищаФайлов() Экспорт
КаталогФайлов = ФайловаяСистема.КаталогОбщегоВременногоХранилищаФайлов("AdrCls") + ПолучитьРазделительПутиСервера();
КаталогФайлов = ФайловаяСистема.КаталогОбщегоВременногоХранилищаФайлов("AdrCls");
Если Не СтрЗаканчиваетсяНа(КаталогФайлов, ПолучитьРазделительПутиСервера()) Тогда
КаталогФайлов = КаталогФайлов + ПолучитьРазделительПутиСервера();
КонецЕсли;
Возврат КаталогФайлов;
КонецФункции
Функция ФайлСуществует(Знач ПутьДляСохранения)
ПроверкаФайла = Новый Файл(ПутьДляСохранения);
Если Не ПроверкаФайла.Существует() Тогда
Возврат Ложь;
КонецЕсли;
Если ПроверкаФайла.ЭтоФайл() Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция УровеньМуниципальногоРодительскогоОбъектаПоАдресу(Адрес)
@@ -135,6 +135,20 @@
КонецПроцедуры
Функция ВерсииОбщихВнешнихКомпонент() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОбщиеВнешниеКомпоненты.Ссылка КАК Ссылка,
| ОбщиеВнешниеКомпоненты.ВерсияДанных КАК ВерсияДанных
|ИЗ
| Справочник.ОбщиеВнешниеКомпоненты КАК ОбщиеВнешниеКомпоненты";
Возврат Запрос.Выполнить().Выбрать();
КонецФункции
#Область ОбработчикиСобытийПодсистемКонфигурации
// См. ГрупповоеИзменениеОбъектовПереопределяемый.ПриОпределенииОбъектовСРедактируемымиРеквизитами.
@@ -381,6 +381,19 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений
Процедура ПриДобавленииСерверныхОповещений(Оповещения) Экспорт
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
"СтандартныеПодсистемы.ВнешниеКомпоненты");
Оповещение.ИмяМодуляОтправки = "ВнешниеКомпонентыСлужебный";
Оповещение.ИмяМодуляПолучения = "ВнешниеКомпонентыСлужебныйКлиент";
Оповещения.Вставить(Оповещение.Имя, Оповещение);
КонецПроцедуры
#КонецОбласти
// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления.
@@ -404,6 +417,96 @@
#Область СлужебныеПроцедурыИФункции
Процедура ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты() Экспорт
СерверныеОповещения.ОтправитьСерверноеОповещение(
"СтандартныеПодсистемы.ВнешниеКомпоненты", "", Неопределено, Истина);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОтправкеСерверногоОповещения
Процедура ПриОтправкеСерверногоОповещения(ИмяОповещения, ВариантыПараметров) Экспорт
Если ИмяОповещения <> "СтандартныеПодсистемы.ВнешниеКомпоненты" Тогда
Возврат;
КонецЕсли;
ИмяПараметра = "СтандартныеПодсистемы.ВнешниеКомпоненты.Версии";
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
НовоеЗначение = ХешСуммаВерсийВнешнихКомпонент();
Если СтароеЗначение = НовоеЗначение Тогда
Возврат;
КонецЕсли;
СерверныеОповещения.ОтправитьСерверноеОповещение(ИмяОповещения, "", Неопределено);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПараметрыРаботыВерсийРасширений");
ЭлементБлокировки.УстановитьЗначение("ВерсияРасширений", Справочники.ВерсииРасширений.ПустаяСсылка());
ЭлементБлокировки.УстановитьЗначение("ИмяПараметра", ИмяПараметра);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
Если СтароеЗначение <> НовоеЗначение Тогда
СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, НовоеЗначение, Истина);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Функция ХешСуммаВерсийВнешнихКомпонент()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнешниеКомпоненты.Ссылка КАК Ссылка,
| ВнешниеКомпоненты.ВерсияДанных КАК ВерсияДанных
|ИЗ
| Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты";
Выборка = Запрос.Выполнить().Выбрать();
СписокВерсий = Новый СписокЗначений;
ДобавитьВерсииКомпонент(СписокВерсий, Выборка);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВнешниеКомпонентыВМоделиСервиса") Тогда
МодульВнешниеКомпонентыВМоделиСервисаСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыВМоделиСервисаСлужебный");
Выборка = МодульВнешниеКомпонентыВМоделиСервисаСлужебный.ВерсииОбщихВнешнихКомпонент();
ДобавитьВерсииКомпонент(СписокВерсий, Выборка);
КонецЕсли;
СписокВерсий.СортироватьПоЗначению();
Версии = СтрСоединить(СписокВерсий.ВыгрузитьЗначения(), Символы.ПС);
Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256);
Хеширование.Добавить(Версии);
СтрокаХешСуммы = Base64Строка(Хеширование.ХешСумма);
Возврат СтрокаХешСуммы;
КонецФункции
// Параметры:
// СписокВерсий - СписокЗначений
// Выборка - ВыборкаДанных:
// * Ссылка - СправочникСсылка
// * ВерсияДанных - Строка
//
Процедура ДобавитьВерсииКомпонент(СписокВерсий, Выборка)
Пока Выборка.Следующий() Цикл
СписокВерсий.Добавить(НРег(Выборка.Ссылка.УникальныйИдентификатор())
+ " " + Выборка.ВерсияДанных);
КонецЦикла;
КонецПроцедуры
// Проверяет возможность подключения на сервере 1С:Предприятия внешней компоненты из хранилища внешних компонент,
// выполненной по технологии Native API или COM.
//
@@ -945,7 +1048,7 @@
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление внешних компонент'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты();
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"),
@@ -994,7 +1097,7 @@
КонецЕсли;
ВнешниеКомпонентыСервер.ОбновитьВнешниеКомпоненты(РезультатОперации.ДанныеВнешнихКомпонент, АдресРезультата);
ОповеститьВсеСеансыОбИзмененииВнешнейКомпоненты();
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Действие недоступно, т.к. отсутствует подсистема ""%1"".'"),
@@ -128,6 +128,21 @@
КонецПроцедуры
// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
Если ИмяОповещения <> "СтандартныеПодсистемы.ВнешниеКомпоненты" Тогда
Возврат;
КонецЕсли;
ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.СимволическиеИмена",
Новый ФиксированноеСоответствие(Новый Соответствие));
ПараметрыПриложения.Вставить("СтандартныеПодсистемы.ВнешниеКомпоненты.Объекты",
Новый ФиксированноеСоответствие(Новый Соответствие));
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -512,7 +512,7 @@
Блокировка = Новый БлокировкаДанных;
Если ПоставляемаяОбработкаСуществует Тогда
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка);
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка, ОписаниеИнсталляции.Инсталляция);
Если ЗначениеЗаполнено(ИспользуемаяОбработкаСсылка) Тогда
ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ИспользуемаяОбработкаСсылка);
@@ -545,7 +545,7 @@
КонецЦикла;
// Создается элемент справочника ДополнительныеОтчетыИОбработки, выступающий в роли используемой обработки.
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка);
ИспользуемаяОбработкаСсылка = ИспользуемаяОбработка(ПоставляемаяОбработка, ОписаниеИнсталляции.Инсталляция);
Если ЗначениеЗаполнено(ИспользуемаяОбработкаСсылка) Тогда
ИспользуемаяОбработка = ИспользуемаяОбработкаСсылка.ПолучитьОбъект();
Иначе
@@ -1322,7 +1322,7 @@
// Возвращаемое значение:
// СправочникСсылка.ДополнительныеОтчетыИОбработки
//
Функция ИспользуемаяОбработка(ПоставляемаяОбработка)
Функция ИспользуемаяОбработка(ПоставляемаяОбработка, ИдентификаторИнсталляции = Неопределено)
Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ТекстСообщения = НСтр("ru = 'Использование функции %1 доступно только сеансов с установленным разделением данных.'");
@@ -1340,13 +1340,26 @@
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ПоставляемаяОбработка", ПоставляемаяОбработка);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.ИспользуемаяОбработка;
КонецЕсли;
Если ИдентификаторИнсталляции = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИспользуемаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(
Новый УникальныйИдентификатор(ИдентификаторИнсталляции));
Если ОбщегоНазначения.СсылкаСуществует(ИспользуемаяОбработка) Тогда
Возврат ИспользуемаяОбработка;
Иначе
Возврат Неопределено;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.ИспользуемаяОбработка;
КонецФункции
@@ -1739,11 +1739,6 @@
МодульВзаимодействия.ПриДобавленииПараметровРаботыКлиента(Параметры);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда
МодульНапоминанияПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("НапоминанияПользователяСлужебный");
МодульНапоминанияПользователяСлужебный.ПриДобавленииПараметровРаботыКлиента(Параметры);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
МодульОбменДаннымиСервер.ПриДобавленииПараметровРаботыКлиента(Параметры);
@@ -1889,11 +1884,26 @@
СтандартныеПодсистемыСервер.ПриДобавленииСерверныхОповещений(Оповещения);
ПользователиСлужебный.ПриДобавленииСерверныхОповещений(Оповещения);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда
МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют");
МодульРаботаСКурсамиВалют.ПриДобавленииСерверныхОповещений(Оповещения);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВнешниеКомпоненты") Тогда
МодульВнешниеКомпонентыСлужебный = ОбщегоНазначения.ОбщийМодуль("ВнешниеКомпонентыСлужебный");
МодульВнешниеКомпонентыСлужебный.ПриДобавленииСерверныхОповещений(Оповещения);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗавершениеРаботыПользователей") Тогда
МодульСоединенияИБ = ОбщегоНазначения.ОбщийМодуль("СоединенияИБ");
МодульСоединенияИБ.ПриДобавленииСерверныхОповещений(Оповещения);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НапоминанияПользователя") Тогда
МодульНапоминанияПользователяСлужебный = ОбщегоНазначения.ОбщийМодуль("НапоминанияПользователяСлужебный");
МодульНапоминанияПользователяСлужебный.ПриДобавленииСерверныхОповещений(Оповещения);
КонецЕсли;
Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриДобавленииСерверныхОповещений Тогда
МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС");
МодульИнтеграцияПодсистемБТС.ПриДобавленииСерверныхОповещений(Оповещения);
@@ -1999,7 +1999,7 @@
ГруппыОператоров = "Разделители, Операторы, ЛогическиеОператорыИКонстанты,
|ЧисловыеФункции, СтроковыеФункции, ПрочиеФункции";
ИначеЕсли ГруппыОператоров = "ВсеОператорыСКД" Тогда
ГруппыОператоров = "Операторы, ОперацииНадСтрокамиСКД, ОперацииСравненияСКД,
ГруппыОператоров = "Операторы, ОперацииНадСтрокамиСКД, РаботаСДатамиСКД, ОперацииСравненияСКД,
|ЛогическиеОперацииСКД, АгрегатныеФункцииСКД";
КонецЕсли;
@@ -2019,6 +2019,8 @@
ДобавитьГруппуОператоровПрочиеФункции(СписокОператоров);
ИначеЕсли ИмяГруппы = "ОперацииНадСтрокамиСКД" Тогда
ДобавитьГруппуОператоровОперацииНадСтроками(СписокОператоров);
ИначеЕсли ИмяГруппы = "РаботаСДатамиСКД" Тогда
ДобавитьГруппуОператоровРаботаСДатами(СписокОператоров);
ИначеЕсли ИмяГруппы = "ОперацииСравненияСКД" Тогда
ДобавитьГруппуОператоровОперацииСравнения(СписокОператоров);
ИначеЕсли ИмяГруппы = "ЛогическиеОперацииСКД" Тогда
@@ -2168,6 +2170,35 @@
КонецПроцедуры
Процедура ДобавитьГруппуОператоровРаботаСДатами(СписокОператоров)
Группа = СписокОператоров.Строки.Добавить();
Группа.Идентификатор = "РаботаСДатамиСКД";
Группа.Представление = НСтр("ru = 'Работа с датами'");
Группа.Порядок = 2;
Группа.Картинка = БиблиотекаКартинок.ТипФункция;
Тип = Новый ОписаниеТипов("Число");
ДобавитьОператорВГруппу(Группа, "ГОД", НСтр("ru = 'ГОД'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "МЕСЯЦ", НСтр("ru = 'МЕСЯЦ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ЧИСЛО", НСтр("ru = 'ЧИСЛО'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ДЕНЬГОДА", НСтр("ru = 'ДЕНЬГОДА'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ДЕНЬ", НСтр("ru = 'ДЕНЬ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "НЕДЕЛЯ", НСтр("ru = 'НЕДЕЛЯ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ДЕНЬНЕДЕЛИ", НСтр("ru = 'ДЕНЬНЕДЕЛИ'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "ЧАС", НСтр("ru = 'ЧАС'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "МИНУТА", НСтр("ru = 'МИНУТА'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "СЕКУНДА", НСтр("ru = 'СЕКУНДА'"), Тип, Истина);
ДобавитьОператорВГруппу(Группа, "НАЧАЛОПЕРИОДА", НСтр("ru = 'НАЧАЛОПЕРИОДА'"), Новый ОписаниеТипов, Истина);
ДобавитьОператорВГруппу(Группа, "КОНЕЦПЕРИОДА", НСтр("ru = 'КОНЕЦПЕРИОДА'"), Новый ОписаниеТипов, Истина);
ДобавитьОператорВГруппу(Группа, "ДОБАВИТЬКДАТЕ", НСтр("ru = 'ДОБАВИТЬКДАТЕ'"), Новый ОписаниеТипов, Истина);
ДобавитьОператорВГруппу(Группа, "РАЗНОСТЬДАТ", НСтр("ru = 'РАЗНОСТЬДАТ'"), Тип, Истина);
КонецПроцедуры
Процедура ДобавитьГруппуОператоровОперацииСравнения(СписокОператоров)
Группа = СписокОператоров.Строки.Добавить();
@@ -8,20 +8,6 @@
#Область СлужебныеПроцедурыИФункции
// Выполняет запрос по напоминаниям для текущего пользователя на момент времени ТекущаяДатаСеанса() + 30минут.
// Момент времени смещен от текущего для использования функции из модуля с повторным использованием
// возвращаемых значений.
// При обработке результата выполнения функции необходимо учитывать эту особенность.
//
// Возвращаемое значение:
// см. НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя
//
Функция ПолучитьНапоминанияТекущегоПользователя() Экспорт
Возврат НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя();
КонецФункции
// Создает новое напоминание на время, рассчитанное относительно времени в предмете.
Функция ПодключитьНапоминаниеДоВремениПредмета(Текст, Интервал, Предмет, ИмяРеквизита, ПовторятьЕжегодно = Ложь) Экспорт
@@ -12,17 +12,14 @@
//
Процедура ПроверитьТекущиеНапоминания() Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента();
Если Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда
ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрКлиента(Неопределено);
Если Не ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда
Возврат;
КонецЕсли;
ИнтервалПроверкиНапоминаний = ПараметрыРаботыКлиента.НастройкиНапоминаний.ИнтервалПроверкиНапоминаний;
// Открываем форму текущих оповещений.
ВремяБлижайшего = Неопределено;
ИнтервалСледующейПроверки = ИнтервалПроверкиНапоминаний * 60;
ИнтервалСледующейПроверки = 60;
Если НапоминанияПользователяКлиент.ПолучитьТекущиеОповещения(ВремяБлижайшего).Количество() > 0 Тогда
НапоминанияПользователяКлиент.ОткрытьФормуОповещения();
@@ -103,20 +103,60 @@
Процедура ПослеНачалаРаботыСистемы() Экспорт
ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске();
Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда
Если Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда
Возврат;
КонецЕсли;
Если ПараметрыРаботыКлиента.НастройкиНапоминаний.ИспользоватьНапоминания Тогда
НастройкиНаКлиенте().СписокТекущихНапоминаний =
ПараметрыРаботыКлиента.НастройкиНапоминаний.СписокТекущихНапоминаний;
ПодключитьОбработчикОжидания("ПроверитьТекущиеНапоминания", 60, Истина); // Через 60 секунд после запуска клиента.
КонецЕсли;
КонецПроцедуры
// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
Если ИмяОповещения <> НапоминанияПользователяКлиентСервер.ИмяСерверногоОповещения() Тогда
Возврат;
КонецЕсли;
Результат = Результат; // см. НапоминанияПользователяСлужебный.НовыеИзмененныеНапоминания
Для Каждого Напоминание Из Результат.Удаленные Цикл
УдалитьЗаписьИзКэшаОповещений(Напоминание);
КонецЦикла;
Для Каждого Напоминание Из Результат.Добавленные Цикл
ОбновитьЗаписьВКэшеОповещений(Напоминание);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Возвращаемое значение:
// Структура:
// * СписокТекущихНапоминаний - см. НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя
//
Функция НастройкиНаКлиенте()
ИмяПараметра = "СтандартныеПодсистемы.НапоминанияПользователя";
Настройки = ПараметрыПриложения[ИмяПараметра];
Если Настройки = Неопределено Тогда
Настройки = Новый Структура;
Настройки.Вставить("СписокТекущихНапоминаний", Новый Массив);
ПараметрыПриложения[ИмяПараметра] = Настройки;
КонецЕсли;
Возврат Настройки;
КонецФункции
// Сбрасывает таймер проверки текущих напоминаний и выполняет проверку немедленно.
Процедура СброситьТаймерПроверкиТекущихОповещений() Экспорт
ОтключитьОбработчикОжидания("ПроверитьТекущиеНапоминания");
@@ -143,11 +183,11 @@
// ближайшее напоминание за пределами выборки кэша, то возвращается Неопределено.
//
// Возвращаемое значение:
// см. НапоминанияПользователяКлиентПовтИсп.ПолучитьНапоминанияТекущегоПользователя
// см. НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя
//
Функция ПолучитьТекущиеОповещения(ВремяБлижайшего = Неопределено) Экспорт
ТаблицаОповещений = НапоминанияПользователяКлиентПовтИсп.ПолучитьНапоминанияТекущегоПользователя();
ТаблицаОповещений = НастройкиНаКлиенте().СписокТекущихНапоминаний;
Результат = Новый Массив;
ВремяБлижайшего = Неопределено;
@@ -168,9 +208,9 @@
КонецФункции
// Обновляет запись в кэше результата выполнения функции ПолучитьНапоминанияТекущегоПользователя().
// Обновляет запись в кэше напоминаний текущего пользователя.
Процедура ОбновитьЗаписьВКэшеОповещений(ПараметрыОповещения) Экспорт
КэшОповещений = НапоминанияПользователяКлиентПовтИсп.ПолучитьНапоминанияТекущегоПользователя();
КэшОповещений = НастройкиНаКлиенте().СписокТекущихНапоминаний;
Запись = НайтиЗаписьВКэшеОповещений(КэшОповещений, ПараметрыОповещения);
Если Запись <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Запись, ПараметрыОповещения);
@@ -179,16 +219,16 @@
КонецЕсли;
КонецПроцедуры
// Удаляет запись из кэша результата выполнения функции ПолучитьНапоминанияТекущегоПользователя().
// Удаляет запись из кэша напоминаний текущего пользователя.
Процедура УдалитьЗаписьИзКэшаОповещений(ПараметрыОповещения) Экспорт
КэшОповещений = НапоминанияПользователяКлиентПовтИсп.ПолучитьНапоминанияТекущегоПользователя();
КэшОповещений = НастройкиНаКлиенте().СписокТекущихНапоминаний;
Запись = НайтиЗаписьВКэшеОповещений(КэшОповещений, ПараметрыОповещения);
Если Запись <> Неопределено Тогда
КэшОповещений.Удалить(КэшОповещений.Найти(Запись));
КонецЕсли;
КонецПроцедуры
// Возвращает запись из кэша результата выполнения функции ПолучитьНапоминанияТекущегоПользователя().
// Возвращает запись из кэша напоминаний текущего пользователя.
//
// Параметры:
// КэшОповещений - см. НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя
@@ -1,27 +0,0 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
// Выполняет запрос по напоминаниям для текущего пользователя на 30 минут вперед от текущего времени.
// Момент времени смещен от текущего для того, чтобы данные были актуальны в течение жизни кэша.
// При обработке результата выполнения функции необходимо учитывать эту особенность.
//
// ФиксированныйМассив в возвращаемом значении не используется, так как кэшированный результат функции необходимо модифицировать
// на клиенте. Такой подход применяется для минимизации серверных вызовов.
//
// Возвращаемое значение:
// см. НапоминанияПользователяСлужебный.СписокТекущихНапоминанийПользователя
//
Функция ПолучитьНапоминанияТекущегоПользователя() Экспорт
Возврат НапоминанияПользователяВызовСервера.ПолучитьНапоминанияТекущегоПользователя();
КонецФункции
#КонецОбласти
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cbca7272-2aae-4e21-b3f5-12786f085648">
<name>НапоминанияПользователяКлиентПовтИсп</name>
<synonym>
<key>ru</key>
<value>Напоминания пользователя клиент повт исп</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<returnValuesReuse>DuringSession</returnValuesReuse>
</mdclass:CommonModule>
@@ -58,4 +58,11 @@
Возврат Результат;
КонецФункции
Функция ИмяСерверногоОповещения() Экспорт
Возврат "СтандартныеПодсистемы.НапоминанияПользователя";
КонецФункции
#КонецОбласти
@@ -14,16 +14,43 @@
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске.
Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура("ИспользоватьНапоминания", ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания));
ИспользоватьНапоминания = ПолучитьНастройкиНапоминаний().ИспользоватьНапоминания;
СписокТекущихНапоминаний = ?(ИспользоватьНапоминания,
СписокТекущихНапоминанийПользователя(), Новый Массив);
Результат = Новый Структура;
Результат.Вставить("ИспользоватьНапоминания", ИспользоватьНапоминания);
Результат.Вставить("СписокТекущихНапоминаний", СписокТекущихНапоминаний);
Параметры.Вставить("НастройкиНапоминаний", Новый ФиксированнаяСтруктура(Результат));
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиента.
Процедура ПриДобавленииПараметровРаботыКлиента(Параметры) Экспорт
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений
Процедура ПриДобавленииСерверныхОповещений(Оповещения) Экспорт
Параметры.Вставить("НастройкиНапоминаний",
Новый ФиксированнаяСтруктура(ПолучитьНастройкиНапоминаний()));
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат;
КонецЕсли;
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
НапоминанияПользователяКлиентСервер.ИмяСерверногоОповещения());
Оповещение.ИмяМодуляОтправки = "НапоминанияПользователяСлужебный";
Оповещение.ИмяМодуляПолучения = "НапоминанияПользователяКлиент";
Оповещения.Вставить(Оповещение.Имя, Оповещение);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОтправкеСерверногоОповещения
Процедура ПриОтправкеСерверногоОповещения(ИмяОповещения, ВариантыПараметров) Экспорт
// Добавление оповещений выполняется при записи регистра сведений НапоминанияПользователя.
// Периодическое оповещение требуется для гарантии доставки добавленных оповещений и
// для актуализации списка напоминаний всех пользователей.
АктуализироватьСписокНапоминаний(Ложь);
КонецПроцедуры
@@ -155,8 +182,9 @@
Функция ПолучитьНастройкиНапоминаний()
Результат = Новый Структура;
Результат.Вставить("ИспользоватьНапоминания", ЕстьПравоИспользованияНапоминаний() И ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя"));
Результат.Вставить("ИнтервалПроверкиНапоминаний", ПолучитьИнтервалПроверкиНапоминаний());
Результат.Вставить("ИспользоватьНапоминания",
ЕстьПравоИспользованияНапоминаний()
И ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя"));
Возврат Результат;
@@ -527,32 +555,6 @@
КонецФункции
// Возвращает интервал времени в минутах, через который необходимо повторять проверку текущих напоминаний.
Функция ПолучитьИнтервалПроверкиНапоминаний(Пользователь = Неопределено)
Интервал = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"НастройкиНапоминаний",
"ИнтервалПроверкиНапоминаний",
1,
,
ПолучитьИмяПользователяИБ(Пользователь));
Возврат Макс(Интервал, 1);
КонецФункции
Функция ПолучитьИмяПользователяИБ(Пользователь)
Если Не ЗначениеЗаполнено(Пользователь) Тогда
Возврат Неопределено;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь, "ИдентификаторПользователяИБ"));
Если ПользовательИБ = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ПользовательИБ.Имя;
КонецФункции
// Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка,
// изменяет срок напоминания в случае необходимости.
//
@@ -645,9 +647,12 @@
КонецПроцедуры
// Создает напоминание пользователя. Если по объекту уже есть напоминание, то сдвигает время напоминания на секунды вперед.
Процедура ПодключитьНапоминание(ПараметрыНапоминания, ОбновитьСрокНапоминания = Ложь) Экспорт
Процедура ПодключитьНапоминание(ПараметрыНапоминания, ОбновитьСрокНапоминания = Ложь, БезОповещенияКлиента = Ложь) Экспорт
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
Если БезОповещенияКлиента Тогда
НаборЗаписей.ДополнительныеСвойства.Вставить("БезОповещенияКлиента");
КонецЕсли;
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
@@ -694,7 +699,7 @@
КонецПроцедуры
// Отключает напоминание, если оно есть. Если напоминание периодическое, подключает его на ближайшую дату по расписанию.
Процедура ОтключитьНапоминание(ПараметрыНапоминания, ПодключатьПоРасписанию = Истина) Экспорт
Процедура ОтключитьНапоминание(ПараметрыНапоминания, ПодключатьПоРасписанию = Истина, БезОповещенияКлиента = Ложь) Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
@@ -738,6 +743,9 @@
// Удаляем существующую запись.
НаборЗаписей = РегистрыСведений.НапоминанияПользователя.СоздатьНаборЗаписей();
Если БезОповещенияКлиента Тогда
НаборЗаписей.ДополнительныеСвойства.Вставить("БезОповещенияКлиента");
КонецЕсли;
НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыНапоминания.Пользователь);
НаборЗаписей.Отбор.Источник.Установить(ПараметрыНапоминания.Источник);
НаборЗаписей.Отбор.ВремяСобытия.Установить(ПараметрыНапоминания.ВремяСобытия);
@@ -759,7 +767,7 @@
Если ОпределенаСледующаяДатаПоРасписанию Тогда
Напоминание.ВремяСобытия = СледующаяДатаПоРасписанию;
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
ПодключитьНапоминание(Напоминание, БезОповещенияКлиента);
КонецЕсли;
КонецЕсли;
@@ -874,8 +882,19 @@
КонецФункции
// Возвращаемое значение:
// Структура:
// * Добавленные - см. СписокТекущихНапоминанийПользователя
// * Удаленные - см. СписокТекущихНапоминанийПользователя
//
Функция НовыеИзмененныеНапоминания() Экспорт
Возврат Новый Структура("Добавленные, Удаленные", Новый Массив, Новый Массив);
КонецФункции
// Прекращает просроченные периодические напоминания.
Процедура АктуализироватьСписокНапоминаний()
Процедура АктуализироватьСписокНапоминаний(ПриЗапуске)
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
@@ -894,12 +913,18 @@
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
| Напоминания.ВремяСобытия <= &ТекущаяДата
| И Напоминания.Пользователь = &Пользователь";
| И &ОтборПоПользователю";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Если ПриЗапуске Тогда
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоПользователю",
"Напоминания.Пользователь = &Пользователь");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоПользователю", "ИСТИНА");
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
СписокНапоминаний = Запрос.Выполнить().Выгрузить();
@@ -925,7 +950,7 @@
НачатьТранзакцию();
Попытка
Если ПодошедшееВремяСобытия.Количество() > 0 Тогда
ОтключитьНапоминание(Напоминание, Ложь);
ОтключитьНапоминание(Напоминание, Ложь, ПриЗапуске);
ПараметрыНапоминания = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Напоминание);
ПараметрыНапоминания.Расписание = Напоминание.Расписание.Получить();
@@ -933,9 +958,9 @@
Напоминание.ВремяСобытия = ПодошедшееВремяСобытия[ПодошедшееВремяСобытия.ВГраница()];
Напоминание.СрокНапоминания = Напоминание.ВремяСобытия - Напоминание.ИнтервалВремениНапоминания;
ПодключитьНапоминание(Напоминание);
ПодключитьНапоминание(Напоминание,, ПриЗапуске);
КонецЕсли;
ОтключитьНапоминание(Напоминание, Истина);
ОтключитьНапоминание(Напоминание, Истина, ПриЗапуске);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
@@ -947,6 +972,10 @@
КонецПроцедуры
// Выполняет запрос по напоминаниям для текущего пользователя на 30 минут вперед от текущего времени.
// Момент времени смещен от текущего для того, чтобы данные были актуальны в течение жизни кэша.
// При обработке результата выполнения функции необходимо учитывать эту особенность.
//
// Возвращаемое значение:
// Массив из Структура:
// * Пользователь - СправочникСсылка.Пользователи
@@ -958,7 +987,7 @@
//
Функция СписокТекущихНапоминанийПользователя() Экспорт
АктуализироватьСписокНапоминаний();
АктуализироватьСписокНапоминаний(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
@@ -972,13 +1001,15 @@
|ИЗ
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
| Напоминания.СрокНапоминания <= &ТекущаяДата
| Напоминания.СрокНапоминания <= &ГраницаСрокаНапоминания
| И Напоминания.Пользователь = &Пользователь
|
|УПОРЯДОЧИТЬ ПО
| ВремяСобытия";
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса() + 30*60);// +30 минут для кэша
Запрос.УстановитьПараметр("ГраницаСрокаНапоминания",
ТекущаяДатаСеанса() + ЗапасВремениНапоминанийДляКэша());
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
УстановитьПривилегированныйРежим(Истина);
@@ -988,4 +1019,10 @@
КонецФункции
Функция ЗапасВремениНапоминанийДляКэша() Экспорт
Возврат 30*60;
КонецФункции
#КонецОбласти
@@ -45,7 +45,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.7.61";
Описание.Версия = "3.1.7.79";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -242,15 +242,12 @@
КонецЕсли;
Если КлючЗаписи <> Неопределено Тогда
Попытка
ЗаблокироватьДанныеДляРедактирования(КлючЗаписи);
Исключение
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + "."
+ НСтр("ru = 'Обновление области данных'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'"));
КонецПопытки;
Для НомерПопытки = 1 По 2 Цикл
Результат = РезультатБлокировкиОбластиДанных(КлючЗаписи, НомерПопытки);
Если Результат = "Успешно" Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат КлючЗаписи;
@@ -1203,6 +1200,29 @@
#КонецОбласти
Функция РезультатБлокировкиОбластиДанных(КлючЗаписи, НомерПопытки)
Попытка
ЗаблокироватьДанныеДляРедактирования(КлючЗаписи);
Исключение
Если НомерПопытки = 1 Тогда
КонецОжидания = ТекущаяДатаСеанса() + 20;
Пока ТекущаяДатаСеанса() < КонецОжидания Цикл
// Ожидание конца блокировки.
КонецЦикла;
Возврат "Повтор";
КонецЕсли;
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + "."
+ НСтр("ru = 'Обновление области данных'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'"));
КонецПопытки;
Возврат "Успешно";
КонецФункции
Процедура ПроверитьНезавершенныеОтложенныеОбработчикиОбновления()
ВсеОтложенныеОбработчики = Новый Массив;
@@ -10,13 +10,13 @@
#Область ОповещениеПользователя
// АПК:142-выкл 4 необязательных параметра для совместимости
// с устаревшей процедурой ОбщегоНазначенияКлиентСервер.СообщитьПользователю.
// Формирует и выводит сообщение, которое может быть связано с элементом управления формы.
// В фоновом задании длительной операции отправляет сообщение сразу на клиент,
// если подключена система взаимодействия.
//
// АПК:142-выкл 4 необязательных параметра для совместимости
// с устаревшей процедурой ОбщегоНазначенияКлиентСервер.СообщитьПользователю.
// Параметры:
// ТекстСообщенияПользователю - Строка - текст сообщения.
// КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится.
@@ -1425,6 +1425,10 @@
СтруктураИмениФайла = Новый Структура("ПолноеИмя,Путь,Имя,Расширение,ИмяБезРасширения");
ЗаполнитьЗначенияСвойств(СтруктураИмениФайла, Новый Файл(ПолноеИмяФайла));
Если СтруктураИмениФайла.Путь = ПолучитьРазделительПути() Тогда
СтруктураИмениФайла.Путь = "";
КонецЕсли;
Возврат СтруктураИмениФайла;
КонецФункции
@@ -360,7 +360,6 @@
// ** Ширина - Число
//
Функция СвойстваЭлементовФормыНастроек(ТипФормы, КомпоновщикНастроек, ДополнительныеПараметры) Экспорт
#Область ПодготовкаСтруктуры
СвойстваЭлементов = Новый Структура("Группы, Поля");
СвойстваЭлементов.Группы = Новый Структура;
@@ -380,16 +379,15 @@
НедоступныеЭлементыСтруктуры.Вставить(Тип("ТаблицаКомпоновкиДанных"), ТипФормыОтчета.Настройка);
НедоступныеЭлементыСтруктуры.Вставить(Тип("ДиаграммаКомпоновкиДанных"), ТипФормыОтчета.Настройка);
#КонецОбласти
#Область ЗаполнениеСтруктуры
Сведения = СведенияОПользовательскихНастройках(КомпоновщикНастроек.Настройки);
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
Для Каждого ЭлементПользовательскойНастройки Из ПользовательскиеНастройки.Элементы Цикл
НайденныеСведения = Сведения[ЭлементПользовательскойНастройки.ИдентификаторПользовательскойНастройки];
ЭлементНастройки = НайденныеСведения.ЭлементНастройки; // ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных
Если НайденныеСведения = Неопределено Тогда
Продолжить;
КонецЕсли;
ЭлементНастройки = НайденныеСведения.ЭлементНастройки; // ГруппировкаКомпоновкиДанных, ГруппировкаТаблицыКомпоновкиДанных, ГруппировкаДиаграммыКомпоновкиДанных
Если ЭлементНастройки = Неопределено
Или НедоступныеЭлементыСтруктуры.Получить(ТипЗнч(ЭлементНастройки)) = ТипФормы
Или ДоступныеРежимы.Найти(ЭлементНастройки.РежимОтображения) = Неопределено Тогда
@@ -445,8 +443,6 @@
ТипФормы, СвойстваЭлементов, ПользовательскиеНастройки.Элементы);
КонецЕсли;
#КонецОбласти
Возврат СвойстваЭлементов;
КонецФункции
@@ -2027,6 +2027,36 @@
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Возвращает пользователя ИБ по ссылке справочника Пользователи или ВнешниеПользователи.
// Для поиска требуются административные права. Если административных прав нет,
// допустимо искать только пользователя для текущего пользователя ИБ.
//
// Параметры:
// Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи
//
// Возвращаемое значение:
// ПользовательИнформационнойБазы - если найден.
// Неопределено - если пользователь ИБ не существует.
//
Функция НайтиПоСсылке(Пользователь) Экспорт
УстановитьПривилегированныйРежим(Истина);
ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователь,
"ИдентификаторПользователяИБ");
УстановитьПривилегированныйРежим(Ложь);
Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Формирует краткое описание ошибки, которое увидит пользователь,
@@ -6007,16 +6007,33 @@
| СоставыГруппПользователей.Пользователь ЕСТЬ NULL ";
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи);
Если ОбновитьГруппуВнешнихПользователей Тогда
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи");
ПолноеИмяСправочника = "Справочник.ВнешниеПользователи";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи");
Иначе
ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
ПолноеИмяСправочника = "Справочник.Пользователи";
КонецЕсли;
Если ТипЗнч(Пользователь) = Тип("Массив") И Пользователь.Количество() <= 1000 Тогда
Для Каждого Ссылка Из Пользователь Цикл
ЭлементБлокировкиРегистра = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировкиРегистра.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи);
ЭлементБлокировкиРегистра.УстановитьЗначение("Пользователь", Ссылка);
ЭлементБлокировкиСправочника = Блокировка.Добавить(ПолноеИмяСправочника);
ЭлементБлокировкиСправочника.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировкиСправочника.УстановитьЗначение("Ссылка", Ссылка);
КонецЦикла;
Иначе
ЭлементБлокировкиРегистра = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировкиСправочника = Блокировка.Добавить(ПолноеИмяСправочника);
ЭлементБлокировкиСправочника.Режим = РежимБлокировкиДанных.Разделяемый;
Если Пользователь <> Неопределено И ТипЗнч(Пользователь) <> Тип("Массив") Тогда
ЭлементБлокировкиРегистра.УстановитьЗначение("ГруппаПользователей", ГруппаВсеПользователи);
ЭлементБлокировкиРегистра.УстановитьЗначение("Пользователь", Пользователь);
ЭлементБлокировкиСправочника.УстановитьЗначение("Ссылка", Пользователь);
КонецЕсли;
КонецЕсли;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Если Пользователь = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователя", "ИСТИНА");
@@ -6330,8 +6347,7 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ОтборПользователяВСправочнике", ОтборПользователяВСправочнике);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаПользователей);
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
Если ОбновитьГруппыВнешнихПользователей Тогда
@@ -6344,12 +6360,7 @@
ТекстЗапроса,
"ГруппыПользователейСостав.Пользователь",
"ГруппыПользователейСостав.ВнешнийПользователь");
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей");
Иначе
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей");
КонецЕсли;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
НачатьТранзакцию();
@@ -60,7 +60,9 @@
НСтр("ru = 'Классификатор банков устарел'"),
НавигационнаяСсылкаФормыЗагрузки(),
НСтр("ru = 'Обновить классификатор банков'"),
БиблиотекаКартинок.Предупреждение32);
БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Важное,
"КлассификаторБанковУстарел");
КонецПроцедуры
@@ -227,18 +227,45 @@
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииПараметровРаботыКлиентаПриЗапуске.
Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт
Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
КурсыОбновляютсяОтветственными = Ложь; // В модели сервиса обновляются автоматически.
ИначеЕсли НЕ ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда
КурсыОбновляютсяОтветственными = Ложь; // Пользователь не может обновлять курсы валют.
Иначе
КурсыОбновляютсяОтветственными = КурсыЗагружаютсяИзИнтернета(); // Есть валюты, для которых можно загружать курсы.
Параметры.Вставить("Валюты", Новый ФиксированнаяСтруктура("ТребуетсяОбновитьКурсыВалют",
ОповещатьОНеобходимостиОбновленияКурсовВалют() И Не КурсыАктуальны()));
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений
Процедура ПриДобавленииСерверныхОповещений(Оповещения) Экспорт
Если Не ОповещатьОНеобходимостиОбновленияКурсовВалют() Тогда
Возврат;
КонецЕсли;
ВключитьОповещение = Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела");
РаботаСКурсамиВалютПереопределяемый.ПриОпределенииНеобходимостиПоказаПредупрежденияОбУстаревшихКурсахВалют(ВключитьОповещение);
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
"СтандартныеПодсистемы.Валюты.ТребуетсяОбновитьКурсыВалют");
Параметры.Вставить("Валюты", Новый ФиксированнаяСтруктура("КурсыОбновляютсяОтветственными", (КурсыОбновляютсяОтветственными И ВключитьОповещение)));
Оповещение.ИмяМодуляОтправки = "РаботаСКурсамиВалют";
Оповещение.ИмяМодуляПолучения = "РаботаСКурсамиВалютКлиент";
Оповещения.Вставить(Оповещение.Имя, Оповещение);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОтправкеСерверногоОповещения
Процедура ПриОтправкеСерверногоОповещения(ИмяОповещения, ВариантыПараметров) Экспорт
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
ДатаСледующегоОповещения = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(
"СтандартныеПодсистемы.Валюты", "ДатаСледующегоОповещения", '00010101',, "");
Если ДатаСледующегоОповещения > ТекущаяДатаСеанса Тогда
Возврат;
КонецЕсли;
Если Не КурсыАктуальны() Тогда
СерверныеОповещения.ОтправитьСерверноеОповещение(ИмяОповещения, "", ВариантыПараметров[0].Адресаты);
КонецЕсли;
ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить(
"СтандартныеПодсистемы.Валюты", "ДатаСледующегоОповещения", КонецДня(ТекущаяДатаСеанса) + 1,, "");
КонецПроцедуры
@@ -559,19 +586,22 @@
Возврат Запрос.Выполнить().Пустой();
КонецФункции
// Определяет есть ли хоть одна валюта, курс которой может загружаться из сети Интернет.
// Для процедур ПриДобавленииПараметровРаботыКлиентаПриЗапуске и
// ПриДобавленииСерверныхОповещений.
//
Функция КурсыЗагружаютсяИзИнтернета()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| 1 КАК Поле1
|ИЗ
| Справочник.Валюты КАК Валюты
|ГДЕ
| Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета)
| И Валюты.ПометкаУдаления = ЛОЖЬ";
Возврат НЕ Запрос.Выполнить().Пустой();
Функция ОповещатьОНеобходимостиОбновленияКурсовВалют()
Если ОбщегоНазначения.РазделениеВключено() Или ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда
Возврат Ложь; // В модели сервиса обновляются автоматически.
ИначеЕсли Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда
Возврат Ложь; // Пользователь не может обновлять курсы валют.
КонецЕсли;
ВключитьОповещение = Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела");
РаботаСКурсамиВалютПереопределяемый.ПриОпределенииНеобходимостиПоказаПредупрежденияОбУстаревшихКурсахВалют(ВключитьОповещение);
Возврат ВключитьОповещение;
КонецФункции
Функция СхемаДанныеПечатиСуммаПрописью()
@@ -1,17 +0,0 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2022, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область СлужебныеПроцедурыИФункции
// Проверяет актуальность курсов всех валют.
//
Функция КурсыАктуальны() Экспорт
Возврат РаботаСКурсамиВалют.КурсыАктуальны();
КонецФункции
#КонецОбласти
@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="56730848-3bef-4b8c-b449-fe9d09c9c374">
<name>РаботаСКурсамиВалютВызовСервера</name>
<synonym>
<key>ru</key>
<value>Работа с курсами валют вызов сервера</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
</mdclass:CommonModule>
@@ -11,13 +11,9 @@
// Выводит оповещение о необходимости обновления курсов валют.
//
Процедура РаботаСКурсамиВалютВывестиОповещениеОНеактуальности() Экспорт
Если НЕ РаботаСКурсамиВалютВызовСервера.КурсыАктуальны() Тогда
РаботаСКурсамиВалютКлиент.ОповеститьКурсыУстарели();
КонецЕсли;
ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса();
ПериодОбработчикаСледующегоДня = КонецДня(ТекущаяДата) - ТекущаяДата + 59;
ПодключитьОбработчикОжидания("РаботаСКурсамиВалютВывестиОповещениеОНеактуальности", ПериодОбработчикаСледующегоДня, Истина);
РаботаСКурсамиВалютКлиент.ОповеститьКурсыУстарели();
КонецПроцедуры
#КонецОбласти
@@ -15,12 +15,23 @@
Процедура ПослеНачалаРаботыСистемы() Экспорт
ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске();
Если ПараметрыКлиента.Свойство("Валюты") И ПараметрыКлиента.Валюты.КурсыОбновляютсяОтветственными Тогда
Если ПараметрыКлиента.Свойство("Валюты") И ПараметрыКлиента.Валюты.ТребуетсяОбновитьКурсыВалют Тогда
ПодключитьОбработчикОжидания("РаботаСКурсамиВалютВывестиОповещениеОНеактуальности", 15, Истина);
КонецЕсли;
КонецПроцедуры
// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
Если ИмяОповещения <> "СтандартныеПодсистемы.Валюты.ТребуетсяОбновитьКурсыВалют" Тогда
Возврат;
КонецЕсли;
ОповеститьКурсыУстарели();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -28,15 +39,38 @@
////////////////////////////////////////////////////////////////////////////////
// Обновление курсов валют
// Выводит соответствующее оповещение.
//
Функция НастройкиНаКлиенте()
ИмяПараметра = "СтандартныеПодсистемы.Валюты";
Настройки = ПараметрыПриложения[ИмяПараметра];
Если Настройки = Неопределено Тогда
Настройки = Новый Структура;
Настройки.Вставить("НачалоДняПоследнегоОповещения", '00010101');
ПараметрыПриложения[ИмяПараметра] = Настройки;
КонецЕсли;
Возврат Настройки;
КонецФункции
Процедура ОповеститьКурсыУстарели() Экспорт
ДатаНачалаДня = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса());
Настройки = НастройкиНаКлиенте();
Если Настройки.НачалоДняПоследнегоОповещения >= ДатаНачалаДня Тогда
Возврат;
КонецЕсли;
Настройки.НачалоДняПоследнегоОповещения = ДатаНачалаДня;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Курсы валют устарели'"),
НавигационнаяСсылкаОбработки(),
НСтр("ru = 'Обновить курсы валют'"),
БиблиотекаКартинок.Предупреждение32);
БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Важное,
"КурсыВалютУстарели");
КонецПроцедуры
@@ -1360,7 +1360,6 @@
КонецФункции
// См. РаботаСПочтовымиСообщениями.ОтправитьПисьмо.
Функция ОтправитьПисьмо(УчетнаяЗапись, Письмо) Экспорт
Письма = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Письмо);
@@ -738,7 +738,7 @@
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаВерсию);
Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СведенияОФайле.РасширениеБезТочки);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(Расширение, СведенияОФайле.Размер);
ТипХраненияФайла = РаботаСФайламиСлужебный.ТипХраненияФайла(СведенияОФайле.Размер, Расширение);
МенеджерФайла = РаботаСФайламиСлужебный.МенеджерФайловПоТипу(ТипХраненияФайла);
Контекст = РаботаСФайламиСлужебный.КонтекстОбновленияФайла(СсылкаНаВерсию,
СведенияОФайле.АдресВременногоХранилищаФайла, , ТипХраненияФайла);
@@ -991,6 +991,7 @@
КонецФункции
// Создает новый файл по аналогии с указанным и возвращает ссылку на него.
//
// Параметры:
// ИсходныйФайл - СправочникСсылка.Файлы - существующий файл.
// ВладелецНовогоФайла - ЛюбаяСсылка - владелец файла.
@@ -114,10 +114,18 @@
ПараметрыВыполнения.Вставить("ИмяСоздаваемогоФайла", Неопределено);
КонецЕсли;
ФайлКлиента = Новый Файл(ПараметрыВыполнения.ПолноеИмяФайла);
ДобавляемыйФайл = Новый Файл(ПараметрыВыполнения.ПолноеИмяФайла);
Если Не ДобавляемыйФайл.Существует() Тогда
ТекстОшибки = НСтр("ru = 'Указанный файл не существует:
|%1'");
Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки,
ПараметрыВыполнения.ПолноеИмяФайла);
Возврат Результат;
КонецЕсли;
Если ПараметрыВыполнения.Свойство("МаксимальныйРазмер")
И ПараметрыВыполнения.МаксимальныйРазмер > 0
И ФайлКлиента.Размер() > ПараметрыВыполнения.МаксимальныйРазмер*1024*1024 Тогда
И ДобавляемыйФайл.Размер() > ПараметрыВыполнения.МаксимальныйРазмер*1024*1024 Тогда
ТекстОшибки = НСтр("ru = 'Размер файла превышает %1 Мб.'");
Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки,
@@ -127,12 +135,12 @@
КонецЕсли;
ПроверитьВозможностьЗагрузкиФайла(ФайлКлиента);
ПроверитьВозможностьЗагрузкиФайла(ДобавляемыйФайл);
ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами();
ИзвлекатьТекстыФайловНаКлиенте = НЕ ОбщиеНастройки.ИзвлекатьТекстыФайловНаСервере;
Если ИзвлекатьТекстыФайловНаКлиенте Тогда
АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ФайлКлиента.ПолноеИмя,
АдресВременногоХранилищаТекста = ИзвлечьТекстВоВременноеХранилище(ДобавляемыйФайл.ПолноеИмя,
ПараметрыВыполнения.ФормаВладелец.УникальныйИдентификатор);
Иначе
АдресВременногоХранилищаТекста = "";
@@ -142,7 +150,7 @@
АдресВременногоХранилищаФайла = "";
ПомещаемыеФайлы = Новый Массив;
Описание = Новый ОписаниеПередаваемогоФайла(ФайлКлиента.ПолноеИмя, "");
Описание = Новый ОписаниеПередаваемогоФайла(ДобавляемыйФайл.ПолноеИмя, "");
ПомещаемыеФайлы.Добавить(Описание);
ПомещенныеФайлы = Новый Массив;
@@ -156,12 +164,12 @@
КонецЕсли;
#Если МобильныйКлиент Тогда
ПредставлениеНаМобильномУстройстве = ФайлКлиента.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства();
ПредставлениеНаМобильномУстройстве = ДобавляемыйФайл.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства();
РасширениеФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ПредставлениеНаМобильномУстройстве);
ИмяФайлаБезРасширения = СтрЗаменить(ПредставлениеНаМобильномУстройстве, "." + РасширениеФайла, "");
#Иначе
РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ФайлКлиента.Расширение);
ИмяФайлаБезРасширения = ФайлКлиента.ИмяБезРасширения;
РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ДобавляемыйФайл.Расширение);
ИмяФайлаБезРасширения = ДобавляемыйФайл.ИмяБезРасширения;
#КонецЕсли
Если ПараметрыВыполнения.ИмяСоздаваемогоФайла <> Неопределено Тогда
@@ -175,7 +183,7 @@
Если РаботаСФайламиСлужебныйКлиентПовтИсп.ЭтоСправочникФайлы(ПараметрыВыполнения.ВладелецФайла) Тогда
СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ФайлКлиента);
СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", ДобавляемыйФайл);
СведенияОФайле.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла;
СведенияОФайле.АдресВременногоХранилищаТекста = АдресВременногоХранилищаТекста;
СведенияОФайле.ЗаписатьВИсторию = Истина;
@@ -1867,9 +1875,11 @@
// Параметры:
// Файл - Файл
// ВызыватьИсключение - Булево
// МассивИменФайловСОшибками - Массив
// ФайлыСОшибками - Массив из Структура:
// * ИмяФайла - Строка
// * Ошибка - Строка
//
Функция ПроверитьВозможностьЗагрузкиФайла(Файл, ВызыватьИсключение = Истина, МассивИменФайловСОшибками = Неопределено)
Функция ПроверитьВозможностьЗагрузкиФайла(Файл, ВызыватьИсключение = Истина, ФайлыСОшибками = Неопределено)
ОбщиеНастройки = ОбщиеНастройкиРаботыСФайлами();
@@ -1894,7 +1904,7 @@
Запись.Вставить("ИмяФайла", Файл.ПолноеИмя);
Запись.Вставить("Ошибка", ОписаниеОшибки);
МассивИменФайловСОшибками.Добавить(Запись);
ФайлыСОшибками.Добавить(Запись);
Возврат Ложь;
КонецЕсли;
@@ -1914,7 +1924,7 @@
Запись.Вставить("ИмяФайла", Файл.ПолноеИмя);
Запись.Вставить("Ошибка", ОписаниеОшибки);
МассивИменФайловСОшибками.Добавить(Запись);
ФайлыСОшибками.Добавить(Запись);
Возврат Ложь;
КонецЕсли;
@@ -8,14 +8,14 @@
#Область ПрограммныйИнтерфейс
// Формирует отчеты и отправляет их согласно настройкам - в указанную папку файлов, в папку на компьютере,
// Формирует отчеты и отправляет их согласно настройкам в указанную папку файлов, в папку на компьютере,
// по электронной почте или на FTP-ресурс.
//
// Параметры:
// Рассылка - СправочникСсылка.РассылкиОтчетов - выполняемая рассылка отчетов.
// ПараметрыЖурнала - см. РассылкаОтчетов.ПараметрыЖурнала.
// ДополнительныеНастройки - Структура - настройки, которые переопределяют стандартные параметры рассылки, где:
// * Получатели - Соответствие из КлючИЗначение - набор получателей и их e-mail адресов:
// ДополнительныеНастройки - Структура:
// * Получатели - Соответствие из КлючИЗначение:
// ** Ключ - СправочникСсылка - получатель.
// ** Значение - Строка - набор e-mail адресов получателя в строке с разделителями.
//
@@ -2010,16 +2010,16 @@
// Регистрация промежуточного результата.
// 2 - Табличные документы получателей.
// Ключ - Имя отчета
// Значение - Табличный документ.
// Настройки - ............. все параметры отчета .................
// Ключ - имя отчета.
// Значение - табличный документ.
// Настройки - все параметры отчета.
СтрокаОтчет = СтрокаПолучатель.Строки.Добавить();
СтрокаОтчет.Уровень = 2;
СтрокаОтчет.Ключ = Строка(ПараметрыОтчета.Отчет);
СтрокаОтчет.Значение = Результат.ТабДок;
СтрокаОтчет.Настройки = ПараметрыОтчета;
ПредставлениеОтчета = СокрЛП(СтрокаОтчет.Ключ);// + " ([ПредставлениеФорматов])";
ПредставлениеОтчета = СокрЛП(СтрокаОтчет.Ключ);
// Сохранение табличного документа в форматы.
ПредставлениеФорматов = "";
@@ -2124,11 +2124,8 @@
ПредставлениеФорматов = ПредставлениеФорматов
+ ?(ПредставлениеФорматов = "", "", ", ")
// Открывающий тег для ссылок (позже полные пути к файлам будут заменены на ссылки на конечных ресурсах).
+ ?(ПараметрыДоставки.ДобавлятьСсылки = "КФорматам", "<a href = '"+ СтрокаФайл.Значение +"'>", "")
// имя формата
+ ?(ПараметрыДоставки.ДобавлятьСсылки = "КФорматам", "<a href = '" + СтрокаФайл.Значение + "'>", "")
+ ПараметрыФормата.Имя
// закрывающий тег для ссылок
+ ?(ПараметрыДоставки.ДобавлятьСсылки = "КФорматам", "</a>", "");
//
@@ -2144,12 +2141,12 @@
КонецПроцедуры
// Вспомогательная процедура функции "ВыполнитьРассылку" - заполняет значения по умолчанию для параметров,
// которые не были переданы явно.
// Так же подготавливает и заполняет параметры, необходимые для рассылки.
// Вспомогательная процедура для функции ВыполнитьРассылку - заполняет значения по умолчанию для параметров,
// которые не были переданы явно.
// Также подготавливает и заполняет параметры, необходимые для рассылки.
//
// Параметры и возвращаемое значение:
// См. ВыполнитьРассылку().
// См. ВыполнитьРассылку.
//
Функция ПроверитьИДозаполнитьПараметрыВыполнения(ТаблицаОтчетов, ПараметрыДоставки, НаименованиеРассылки, ПараметрыЖурнала)
// Параметры записи в журнал регистрации.
@@ -2387,7 +2384,7 @@
// Возвращает шаблон темы по умолчанию для доставки по электронной почте.
Функция ШаблонТемы() Экспорт
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[НаименованиеРассылки]", "[ДатаВыполнения(ДЛФ=''D'')]");
НСтр("ru = '%1 от %2'"), "[НаименованиеРассылки]", "[ДатаВыполнения(ДЛФ='D')]");
КонецФункции
// Возвращает шаблон тела сообщения по умолчанию для доставки по электронной почте.
@@ -8,51 +8,50 @@
#Область СлужебныеПроцедурыИФункции
// Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона.
// Ограничение: должны присутствовать и левый и правый элементы обрамления.
// Подставляет в шаблон переданные параметры.
//
// Параметры:
// Шаблон - Строка - исходный шаблон. Например "Добрый день, [ФИО]".
// Параметры - Структура - набор параметров, которые необходимо подставить в шаблон:
// * Ключ - имя параметра. Например "ФИО".
// * Значение - строка подстановки. Например "Иванов Иван Иванович".
// Параметры - Структура:
// * Ключ - Строка - имя параметра. Например "ФИО".
// * Значение - Произвольный - строка подстановки. Например "Иванов Иван Иванович".
//
// Возвращаемое значение:
// Строка - шаблон с заполненными параметрами.
// Строка
//
Функция ЗаполнитьШаблон(Шаблон, Параметры) Экспорт
Левый = "["; // Начало обрамления параметра.
Правый = "]"; // Конец обрамления параметра.
ФорматЛевый = "("; // Начало обрамления формата.
ФорматПравый = ")"; // Конец обрамления формата.
ВырезатьОбрамление = Истина; // Истина означает, что обрамление параметра будет убрано из результата.
НачалоПараметра = "[";
КонецПараметра = "]";
НачалоФормата = "(";
КонецФормата = ")";
ВырезатьОбрамление = Истина; // отладочный параметр
Результат = Шаблон;
Для Каждого КлючИЗначение Из Параметры Цикл
// Замена "[ключ]" на "значение".
Результат = СтрЗаменить(
Результат,
Левый + КлючИЗначение.Ключ + Правый,
?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый));
ДлинаФорматЛевый = СтрДлина(Левый + КлючИЗначение.Ключ + ФорматЛевый);
НачалоПараметра + КлючИЗначение.Ключ + КонецПараметра,
?(ВырезатьОбрамление, "", НачалоПараметра) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", КонецПараметра));
ДлинаФорматЛевый = СтрДлина(НачалоПараметра + КлючИЗначение.Ключ + НачалоФормата);
// Замена "[ключ(формат)]" на "значение в формате".
Поз1 = СтрНайти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый);
Пока Поз1 > 0 Цикл
Поз2 = СтрНайти(Результат, ФорматПравый + Правый);
Если Поз2 = 0 Тогда
Позиция1 = СтрНайти(Результат, НачалоПараметра + КлючИЗначение.Ключ + НачалоФормата);
Пока Позиция1 > 0 Цикл
Позиция2 = СтрНайти(Результат, КонецФормата + КонецПараметра);
Если Позиция2 = 0 Тогда
Прервать;
КонецЕсли;
ФорматнаяСтрока = Сред(Результат, Поз1 + ДлинаФорматЛевый, Поз2 - Поз1 - ДлинаФорматЛевый);
ФорматнаяСтрока = Сред(Результат, Позиция1 + ДлинаФорматЛевый, Позиция2 - Позиция1 - ДлинаФорматЛевый);
Попытка
НаЧтоЗаменить = ?(ВырезатьОбрамление, "", Левый) + Формат(КлючИЗначение.Значение, ФорматнаяСтрока) + ?(ВырезатьОбрамление, "", Правый);
НаЧтоЗаменить = ?(ВырезатьОбрамление, "", НачалоПараметра) + Формат(КлючИЗначение.Значение, ФорматнаяСтрока) + ?(ВырезатьОбрамление, "", КонецПараметра);
Исключение
НаЧтоЗаменить = ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый);
НаЧтоЗаменить = ?(ВырезатьОбрамление, "", НачалоПараметра) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", КонецПараметра);
КонецПопытки;
Результат = СтрЗаменить(
Результат,
Левый + КлючИЗначение.Ключ + ФорматЛевый + ФорматнаяСтрока + ФорматПравый + Правый,
НачалоПараметра + КлючИЗначение.Ключ + НачалоФормата + ФорматнаяСтрока + КонецФормата + КонецПараметра,
НаЧтоЗаменить);
Поз1 = СтрНайти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый);
Позиция1 = СтрНайти(Результат, НачалоПараметра + КлючИЗначение.Ключ + НачалоФормата);
КонецЦикла;
КонецЦикла;
Возврат Результат;
@@ -61,10 +60,10 @@
// Формирует представление способов доставки в соответствии с параметрами доставки.
//
// Параметры:
// ПараметрыДоставки - см. ВыполнитьРассылку(), параметр ПараметрыДоставки.
// ПараметрыДоставки - см. ВыполнитьРассылку.ПараметрыДоставки.
//
// Возвращаемое значение:
// Строка - представление способов доставки.
// Строка
//
Функция ПредставлениеСпособовДоставки(ПараметрыДоставки) Экспорт
Префикс = НСтр("ru = 'Результат'");
@@ -6,7 +6,7 @@
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
#Область СлужебныеПроцедурыИФункции
// Выполняет обработчик ожидания старта автоматического резервного копирования
// в процессе работы пользователя, а также повторного оповещения после игнорировании первоначального.
@@ -19,6 +19,7 @@
//
// * ИмяМодуляОтправки - Строка - имя серверного общего модуля, например, "СоединенияИБ",
// содержащего экспортную процедуру ПриОтправкеСерверногоОповещения.
// Вызов процедуры выполняется в привилегированном режиме.
// Смотри пример в общем модуле СтандартныеПодсистемыСервер.
// Может быть не заполнено. В этом случае вызываться не будет,
// например, используется для отправки сообщений об изменении
@@ -423,7 +424,8 @@
Если ТипЗнч(Содержимое.Адресаты) = Тип("Соответствие") Тогда
КлючиСеансов = Содержимое.Адресаты.Получить(ИдентификаторПользователяИБ);
Если ТипЗнч(КлючиСеансов) <> Тип("Массив")
Или КлючиСеансов.Найти(КлючЭтогоСеанса) = Неопределено Тогда
Или КлючиСеансов.Найти(КлючЭтогоСеанса) = Неопределено
И КлючиСеансов.Найти("*") = Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
@@ -447,8 +447,9 @@
Если Данные.ИмяОповещения <> "НетСерверныхОповещений" Тогда
Если Данные.Адресаты <> Неопределено Тогда
КлючиСеансов = Данные.Адресаты.Получить(СостояниеПолучения.ИдентификаторПользователяИБ);
Если КлючиСеансов <> Неопределено
И КлючиСеансов.Найти(СостояниеПолучения.КлючСеанса) = Неопределено Тогда
Если ТипЗнч(КлючиСеансов) <> Тип("Массив")
Или КлючиСеансов.Найти(СостояниеПолучения.КлючСеанса) = Неопределено
И КлючиСеансов.Найти("*") = Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
@@ -61,4 +61,11 @@
Пояснение, БиблиотекаКартинок.ЗавершитьРаботу, СтатусОповещенияПользователя.Важное);
КонецПроцедуры
Процедура ОбновитьИнтерфейсПриИзмененииФункциональныхОпций() Экспорт
ОбновитьПовторноИспользуемыеЗначения();
ОбновитьИнтерфейс();
КонецПроцедуры
#КонецОбласти
@@ -558,6 +558,13 @@
Результат, БиблиотекаКартинок.Предупреждение32,
СтатусОповещенияПользователя.Важное,
"УстановленоОбновлениеПрограммы");
ИначеЕсли ИмяОповещения = "СтандартныеПодсистемы.БазоваяФункциональность.ФункциональныеОпцииИзменены" Тогда
ОтключитьОбработчикОжидания("ОбновитьИнтерфейсПриИзмененииФункциональныхОпций");
ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПриИзмененииФункциональныхОпций", 5*60, Истина);
ИначеЕсли ИмяОповещения = "СтандартныеПодсистемы.БазоваяФункциональность.ПовторноИспользуемыеЗначенияУстарели" Тогда
ОбновитьПовторноИспользуемыеЗначения();
КонецЕсли;
КонецПроцедуры
@@ -58,6 +58,11 @@
Возврат УстановленныеПараметры;
КонецЕсли;
Если Справочники.ИдентификаторыОбъектовМетаданных.ВсеПараметрыСеансаУстановлены(
ИменаПараметровСеанса, УстановленныеПараметры) Тогда
Возврат УстановленныеПараметры;
КонецЕсли;
Если ИменаПараметровСеанса.Найти("КлючДанныхПовторногоИспользования") <> Неопределено Тогда
ПараметрыСеанса.КлючДанныхПовторногоИспользования = Новый УникальныйИдентификатор;
УстановленныеПараметры.Добавить("КлючДанныхПовторногоИспользования");
@@ -512,7 +517,7 @@
// Вызывается из регламентного задания для отправки серверного оповещения клиентским сеансам.
// Смотри также СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
//
// Вызов выполняется с учетом истечения периода, указанного для оповещения.
// Вызов выполняется в привилегированном режиме с учетом истечения периода, указанного для оповещения.
// Смотри ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений.
//
// Параметры:
@@ -537,6 +542,9 @@
Если ИмяОповещения = "СтандартныеПодсистемы.БазоваяФункциональность.ИзмененаКонфигурацияИлиРасширения" Тогда
ПриОтправкеСерверногоОповещенияИзмененаКонфигурацияИлиРасширения(ИмяОповещения, ВариантыПараметров);
ИначеЕсли ИмяОповещения = "СтандартныеПодсистемы.БазоваяФункциональность.ФункциональныеОпцииИзменены" Тогда
ПриОтправкеСерверногоОповещенияФункциональныеОпцииИзменены(ИмяОповещения, ВариантыПараметров);
КонецЕсли;
КонецПроцедуры
@@ -547,6 +555,21 @@
#Область СлужебныйПрограммныйИнтерфейс
// Отправляет оповещение всем сеансам об устаревании повторно используемых значений.
//
// Параметры:
// ОтправитьСразу - см. СерверныеОповещения.ОтправитьСерверноеОповещение.ОтправитьСразу
//
Процедура ОповеститьВсеСеансыОбУстареванииПовторноИспользуемыхЗначений(ОтправитьСразу = Ложь) Экспорт
СерверныеОповещения.ОтправитьСерверноеОповещение(
"СтандартныеПодсистемы.БазоваяФункциональность.ПовторноИспользуемыеЗначенияУстарели",
"",
Неопределено,
ОтправитьСразу);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// Дополнительная базовая функциональность для анализа параметров клиента на сервере.
@@ -1845,6 +1868,7 @@
// См. ОбщегоНазначенияПереопределяемый.ПриДобавленииСерверныхОповещений
Процедура ПриДобавленииСерверныхОповещений(Оповещения) Экспорт
// ИзмененаКонфигурацияИлиРасширения
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
"СтандартныеПодсистемы.БазоваяФункциональность.ИзмененаКонфигурацияИлиРасширения");
@@ -1854,6 +1878,23 @@
Оповещения.Вставить(Оповещение.Имя, Оповещение);
// ФункциональныеОпцииИзменены
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
"СтандартныеПодсистемы.БазоваяФункциональность.ФункциональныеОпцииИзменены");
Оповещение.ИмяМодуляОтправки = "СтандартныеПодсистемыСервер";
Оповещение.ИмяМодуляПолучения = "СтандартныеПодсистемыКлиент";
Оповещения.Вставить(Оповещение.Имя, Оповещение);
// ПовторноИспользуемыеЗначенияУстарели
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение(
"СтандартныеПодсистемы.БазоваяФункциональность.ПовторноИспользуемыеЗначенияУстарели");
Оповещение.ИмяМодуляПолучения = "СтандартныеПодсистемыКлиент";
Оповещения.Вставить(Оповещение.Имя, Оповещение);
КонецПроцедуры
// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке.
@@ -3997,6 +4038,146 @@
КонецПроцедуры
// См. ПриОтправкеСерверногоОповещения
Процедура ПриОтправкеСерверногоОповещенияФункциональныеОпцииИзменены(ИмяОповещения, ВариантыПараметров)
ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ВключенныеФункциональныеОпции";
СтароеЗначение = ПараметрРаботыРасширения(ИмяПараметра, Истина);
НовыйСоставТипов = Новый Массив;
ФункциональныеОпцииПоТипам = Новый Соответствие;
Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл
ОбъектХранения = ФункциональнаяОпция.Хранение;
Если Не Метаданные.Константы.Содержит(ОбъектХранения) Тогда
Продолжить;
КонецЕсли;
Тип = Тип("КонстантаМенеджер." + ОбъектХранения.Имя);
ФункциональныеОпцииПоТипам.Вставить(Тип, ФункциональнаяОпция);
Если ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя) = Истина Тогда
НовыйСоставТипов.Добавить(Тип);
КонецЕсли;
КонецЦикла;
НовоеЗначение = Новый ОписаниеТипов(НовыйСоставТипов);
Если СтароеЗначение = НовоеЗначение Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(СтароеЗначение) = Тип("ОписаниеТипов") Тогда
СоставИзмененийТипов = Новый Соответствие;
Для Каждого Тип Из НовоеЗначение.Типы() Цикл
СоставИзмененийТипов.Вставить(Тип, Истина);
КонецЦикла;
Для Каждого Тип Из СтароеЗначение.Типы() Цикл
Если СоставИзмененийТипов.Получить(Тип) = Неопределено Тогда
СоставИзмененийТипов.Вставить(Тип, Истина);
Иначе
СоставИзмененийТипов.Удалить(Тип);
КонецЕсли;
КонецЦикла;
Объекты = Новый Соответствие;
Для Каждого КлючИЗначение Из СоставИзмененийТипов Цикл
ФункциональнаяОпция = ФункциональныеОпцииПоТипам.Получить(КлючИЗначение.Ключ);
Если ФункциональнаяОпция = Неопределено Тогда
Продолжить;
КонецЕсли;
ДобавитьОбъектыФункциональнойОпции(Объекты, ФункциональнаяОпция);
КонецЦикла;
Адресаты = Новый Соответствие;
Для Каждого ВариантПараметров Из ВариантыПараметров Цикл
Для Каждого Адресат Из ВариантПараметров.Адресаты Цикл
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Адресат.Ключ);
Если ПользовательИБ = Неопределено Тогда
Продолжить;
КонецЕсли;
Для Каждого КлючИЗначение Из Объекты Цикл
Если ПравоДоступа(КлючИЗначение.Значение, КлючИЗначение.Ключ, ПользовательИБ) Тогда
Адресаты.Вставить(Адресат.Ключ, Адресат.Значение);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если ЗначениеЗаполнено(Адресаты) Тогда
СерверныеОповещения.ОтправитьСерверноеОповещение(ИмяОповещения, "", Адресаты);
КонецЕсли;
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПараметрыРаботыВерсийРасширений");
ЭлементБлокировки.УстановитьЗначение("ВерсияРасширений", Справочники.ВерсииРасширений.ПустаяСсылка());
ЭлементБлокировки.УстановитьЗначение("ИмяПараметра", ИмяПараметра);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
СтароеЗначение = ПараметрРаботыРасширения(ИмяПараметра, Истина);
Если СтароеЗначение <> НовоеЗначение Тогда
УстановитьПараметрРаботыРасширения(ИмяПараметра, НовоеЗначение, Истина);
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ДобавитьОбъектыФункциональнойОпции(Объекты, ФункциональнаяОпция)
ИменаБазовыхТипов =
"
|Подсистема
|ОбщийРеквизит
|ПланОбмена
|КритерийОтбора
|ОбщаяФорма
|ОбщаяКоманда
|Константа
|Справочник
|Документ
|ЖурналДокументов
|Отчет
|Обработка
|ПланВидовХарактеристик
|ПланСчетов
|ПланВидовРасчета
|РегистрСведений
|РегистрНакопления
|РегистрБухгалтерии
|РегистрРасчета
|БизнесПроцесс
|Задача
|";
Для Каждого ЭлементСостава Из ФункциональнаяОпция.Состав Цикл
Объект = ЭлементСостава.Объект;
Если Объекты.Получить(Объект) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ЧастиИмени = СтрРазделить(Объект.ПолноеИмя(), ".", Ложь);
Если ЧастиИмени.Количество() < 2 Тогда
Продолжить;
КонецЕсли;
ИмяБазовогоТипа = ЧастиИмени[0];
Если СтрНайти(ИменаБазовыхТипов, Символы.ПС + ИмяБазовогоТипа + Символы.ПС) = 0 Тогда
Продолжить;
КонецЕсли;
Если ЧастиИмени.Количество() > 2 Тогда
Если ИмяБазовогоТипа <> "Подсистема" Тогда
Объект = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ЧастиИмени[0] + "." + ЧастиИмени[1]);
Если Объект = Неопределено
Или Объекты.Получить(Объект) <> Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Объекты.Вставить(Объект, "Просмотр");
КонецЦикла;
КонецПроцедуры
// Многоязычные конфигурации
Функция ТребуетсяУстановкаРегиональныхНастроекИнформационнойБазы() Экспорт
@@ -2130,6 +2130,13 @@
// Параметр "СтандартныеПодсистемы.УправлениеДоступом.ПраваРолей".
ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений();
Если РегистрыСведений.ПараметрыРаботыПрограммы.НеобходимоОбновление() Тогда
// Обновление выполняется в процедуре
// ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации
// или ПриНастройкеПодчиненногоУзлаРИБ.
Возврат;
КонецЕсли;
// Параметр "СтандартныеПодсистемы.УправлениеДоступом.СвойстваВидовДоступа".
ОбновитьГруппыИНаборыЗначенийДоступаПриИзмененииТиповГруппИЗначений();
@@ -7593,7 +7600,7 @@
СтароеЗначение = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина);
СтароеЗначение = НовыеХешСуммыСвойствВидовДоступа(СтароеЗначение);
Если СтароеЗначение.ХешСуммаТиповГруппИЗначенийДоступа
= НовоеЗначение.ХешСуммаТиповГруппИЗначенийДоступа Тогда
<> НовоеЗначение.ХешСуммаТиповГруппИЗначенийДоступа Тогда
Если ЗначениеЗаполнено(СтароеЗначение.ХешСуммаТиповГруппИЗначенийДоступа) Тогда // Не первое обновление.
ПроверитьАктуальностьМетаданных();
КонецЕсли;
@@ -11503,28 +11510,61 @@
// Для процедуры УстановитьОбновлениеДоступа.
Процедура ИзменитьРегламентноеЗаданиеОбновленияДоступа(ВключитьЗадание)
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Константа.КоличествоПотоковОбновленияДоступа");
Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ТребуетсяИзменить = Ложь;
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
ТребуетсяИзменить = Истина;
Иначе
УстановитьПривилегированныйРежим(Истина);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
Если ВключитьЗадание = Задание.Использование Тогда
Продолжить;
Если ВключитьЗадание <> Задание.Использование Тогда
ТребуетсяИзменить = Истина;
Прервать;
КонецЕсли;
РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор,
Новый Структура("Использование", ВключитьЗадание));
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
Если Не ТребуетсяИзменить Тогда
Возврат;
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Константа.КоличествоПотоковОбновленияДоступа");
ЭтоОшибкаБлокировки = Ложь;
НомерПопыткиБлокировки = 0;
Пока Истина Цикл
НомерПопыткиБлокировки = НомерПопыткиБлокировки + 1;
НачатьТранзакцию();
Попытка
ЭтоОшибкаБлокировки = Истина;
Блокировка.Заблокировать();
ЭтоОшибкаБлокировки = Ложь;
УстановитьПривилегированныйРежим(Истина);
Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
Если ВключитьЗадание = Задание.Использование Тогда
Продолжить;
КонецЕсли;
РегламентныеЗаданияСервер.ИзменитьЗадание(Задание.УникальныйИдентификатор,
Новый Структура("Использование", ВключитьЗадание));
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
Если ЭтоОшибкаБлокировки
И НомерПопыткиБлокировки <= 3
И Не ТранзакцияАктивна() Тогда
Продолжить;
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Прервать;
КонецЦикла;
КонецПроцедуры
@@ -21027,19 +21067,19 @@
КонецПроцедуры
// Для функций ПраваНаКлючДоступаСписка и РассчитанноеУсловие.
Функция РассчитанноеУсловиеДляСтрок(Контекст, Условие, УзелРеквизитов = Неопределено, ДляЛюбойИзСтрок = Истина)
Функция РассчитанноеУсловиеДляСтрок(Контекст, Условие, УзелРеквизитов = Неопределено, ДляЛюбойИзСтрок = Истина, КорневойУзел = Истина)
Если УзелРеквизитов = Неопределено Тогда
Контекст.Вставить("ОписанияТребуемыхТаблицКлюча", Новый Массив);
Если Условие.Узел = "ДляВсехСтрок" Или Условие.Узел = "ДляОднойИзСтрок" Тогда
Возврат РассчитанноеУсловие(Контекст, Условие);
Возврат РассчитанноеУсловие(Контекст, Условие, КорневойУзел);
КонецЕсли;
УзелРеквизитов = Условие;
КонецЕсли;
Если Не ЗначениеЗаполнено(УзелРеквизитов.ТребуемыеРеквизитыТабличныхЧастейКлюча) Тогда
Контекст.Вставить("ТекущиеСтрокиТаблицКлюча", Контекст.ЗначенияТаблицКлюча);
Возврат РассчитанноеУсловие(Контекст, Условие);
Возврат РассчитанноеУсловие(Контекст, Условие, КорневойУзел);
КонецЕсли;
РеквизитыТаблиц = УзелРеквизитов.ТребуемыеРеквизитыТабличныхЧастейКлюча;
ЗначенияТаблиц = ТекущиеЗначенияТаблицКлюча(Контекст, РеквизитыТаблиц);
@@ -21089,18 +21129,26 @@
Результат = "Истина";
Прервать;
ИначеЕсли ТекущийРезультат = "Ложь" Тогда
Если Результат = "Неопределено" Тогда
Если Результат = "Неопределено" Или Результат = "Пусто" Тогда
Результат = "Ложь";
КонецЕсли;
ИначеЕсли ТекущийРезультат = "Пусто" Тогда
Если Результат = "Неопределено" Тогда
Результат = "Пусто";
КонецЕсли;
КонецЕсли;
Иначе
Если ТекущийРезультат = "Ложь" Тогда
Результат = "Ложь";
Прервать;
ИначеЕсли ТекущийРезультат = "Истина" Тогда
Если Результат = "Неопределено" Тогда
Если Результат = "Неопределено" Или Результат = "Пусто" Тогда
Результат = "Истина";
КонецЕсли;
ИначеЕсли ТекущийРезультат = "Пусто" Тогда
Если Результат = "Неопределено" Тогда
Результат = "Пусто";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Иначе
@@ -21118,6 +21166,8 @@
Если Результат = "Неопределено" Тогда
Результат = "Ложь";
ИначеЕсли КорневойУзел И Результат = "Пусто" Тогда
Результат = "Истина";
КонецЕсли;
Контекст.ОписанияТребуемыхТаблицКлюча.Удалить(
@@ -21303,7 +21353,7 @@
КонецФункции
// Для функции РассчитанноеУсловиеДляСтрок.
Функция РассчитанноеУсловие(Контекст, Условие)
Функция РассчитанноеУсловие(Контекст, Условие, КорневойУзел = Ложь)
// Проверяемые типы уже учтены.
@@ -21313,7 +21363,8 @@
Или Значение = Null И Условие.Свойство("ПроверкаЕстьNull"), "Истина", "Ложь");
ИначеЕсли Условие.Узел = "Константа" Тогда
Результат = ?(Условие.Значение = Истина, "Истина", "Ложь");
Результат = ?(Условие.Значение = Истина, "Истина",
?(Условие.Значение = "Пусто", "Пусто", "Ложь"));
ИначеЕсли Условие.Узел = "И" Тогда
@@ -21325,9 +21376,13 @@
Прервать;
КонецЕсли;
Если ТекущийРезультат = "Истина" Тогда
Если Результат = "Неопределено" Тогда
Если Результат = "Неопределено" Или Результат = "Пусто" Тогда
Результат = "Истина";
КонецЕсли;
ИначеЕсли ТекущийРезультат = "Пусто" Тогда
Если Результат = "Неопределено" Тогда
Результат = "Пусто";
КонецЕсли;
ИначеЕсли ТипЗнч(ТекущийРезультат) = Тип("Соответствие") Тогда
Если ТекущийРезультат.Количество() = 0 Тогда
Результат = "Ложь";
@@ -21354,9 +21409,13 @@
Прервать;
КонецЕсли;
Если ТекущийРезультат = "Ложь" Тогда
Если Результат = "Неопределено" Тогда
Если Результат = "Неопределено" Или Результат = "Пусто" Тогда
Результат = "Ложь";
КонецЕсли;
ИначеЕсли ТекущийРезультат = "Пусто" Тогда
Если Результат = "Неопределено" Тогда
Результат = "Пусто";
КонецЕсли;
ИначеЕсли ТипЗнч(ТекущийРезультат) = Тип("Соответствие") Тогда
Если ТекущийРезультат.Количество() = 0 Тогда
Если Результат = "Неопределено" Тогда
@@ -21391,7 +21450,7 @@
Или Условие.Узел = "ДляОднойИзСтрок" Тогда
Результат = РассчитанноеУсловиеДляСтрок(Контекст,
Условие.Аргумент, Условие, Условие.Узел = "ДляОднойИзСтрок");
Условие.Аргумент, Условие, Условие.Узел = "ДляОднойИзСтрок", Ложь);
ИначеЕсли Условие.Узел = "Выбор" Тогда
Результат = Неопределено;
@@ -21416,12 +21475,21 @@
Если Значение = Null Тогда
Значение = Перечисления.ДополнительныеЗначенияДоступа.Null;
КонецЕсли;
ОтключеноКакЛожь = Условие.УточненияСравнения.Получить("Отключено") = "Ложь";
Если Значение = Перечисления.ДополнительныеЗначенияДоступа.ТипРазрешенный Тогда
ТекущийРезультат = "Истина";
Если ОтключеноКакЛожь Тогда
ТекущийРезультат = "Пусто";
Иначе
ТекущийРезультат = "Истина";
КонецЕсли;
ИначеЕсли Значение = Перечисления.ДополнительныеЗначенияДоступа.ТипЗапрещенный Тогда
ТекущийРезультат = "Ложь";
Если ОтключеноКакЛожь Тогда
ТекущийРезультат = "Пусто";
Иначе
ТекущийРезультат = "Ложь";
КонецЕсли;
Иначе
ТекущийРезультат = Неопределено;
Для Каждого УточнениеСравнения Из Условие.УточненияСравнения Цикл
@@ -21450,7 +21518,11 @@
ИначеЕсли Условие.Узел = "ЗначениеРазрешено" Тогда
Если Значение = Перечисления.ДополнительныеЗначенияДоступа.Null
Или Значение = Перечисления.ДополнительныеЗначенияДоступа.Неопределено Тогда
Результат = "Ложь";
Если ОтключеноКакЛожь Тогда
Результат = "Пусто";
Иначе
Результат = "Ложь";
КонецЕсли;
Иначе
Если Контекст.ЗначенияГруппыДоступа = Неопределено Тогда
ЗначенияОдногоТипа = Неопределено;
@@ -21459,8 +21531,8 @@
ЗначенияОдногоТипа = Контекст.ЗначенияГруппыДоступа.Получить(ТипЗначения);
КонецЕсли;
Если ЗначенияОдногоТипа = Неопределено Тогда
Если Условие.УточненияСравнения.Получить("Отключено") = "Ложь" Тогда
Результат = "Ложь";
Если ОтключеноКакЛожь Тогда
Результат = "Пусто";
Иначе
Результат = "Истина";
КонецЕсли;
@@ -21619,6 +21691,10 @@
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если КорневойУзел И Результат = "Пусто" Тогда
Результат = "Истина";
КонецЕсли;
Возврат Результат;
КонецФункции
@@ -23894,6 +23970,7 @@
Или Результат.ИспользуетсяОграничениеПоВладельцу Тогда
Если Результат.ИспользуетсяОграничениеПоВладельцу
Или Результат.Контекст.БезОбъектаМетаданных
Или Результат.Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей.Получить(
Результат.Список) = Неопределено Тогда
@@ -27713,6 +27790,8 @@
// Опорные поля не требуется для ссылочных типов данных (всегда Ссылка).
ЗаполнитьНовоеОписаниеОпорныхПолей(Результат, Контекст);
Контекст.Вставить("БезОбъектаМетаданных", Ложь);
Если Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей <> Неопределено Тогда
Свойства = СвойстваОграниченияСписка(Контекст.Список, Контекст);
Результат.РассчитыватьПраваПользователей = Свойства.РассчитыватьПраваПользователей;
@@ -27721,6 +27800,7 @@
Если Контекст.СпискиСЗаписьюКлючейДляЗависимыхСписковБезКлючей.Получить(Список) <> Неопределено Тогда
Результат.ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа = Истина;
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(Список);
Контекст.БезОбъектаМетаданных = ОбъектМетаданных = Неопределено;
Результат.ЧтениеРазрешеноДляВсехПользователей =
ПравоРазрешеноДляВсехПользователей("Чтение", ОбъектМетаданных, ДляВнешнихПользователей);
Результат.ИзменениеРазрешеноДляВсехПользователей =
@@ -27734,7 +27814,9 @@
Контекст.Вставить("ИзменениеРазрешеноДляВсехПользователей", Результат.ИзменениеРазрешеноДляВсехПользователей);
Если СтруктураОграничения = Неопределено Тогда
Если Не Результат.ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа Или Результат.ДоступЗапрещен Тогда
Если Не Результат.ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа
Или Результат.ДоступЗапрещен
Или Контекст.БезОбъектаМетаданных Тогда
Возврат Результат;
КонецЕсли;
СтруктураОграничения = РассчитаннаяСтруктураОграничения(Список,
@@ -27887,6 +27969,7 @@
// * ЕстьЗависимыеСпискиБезЗаписиКлючейДоступа - Булево
// * ЧтениеРазрешеноДляВсехПользователей - Булево
// * ИзменениеРазрешеноДляВсехПользователей - Булево
// * БезОбъектаМетаданных - Булево
// * СтруктураОграничения - см. СтруктураОграничения
// * ИсходнаяСтруктураОграничения - см. СтруктураОграничения
// * ВедущиеСпискиПоЗначениямПолей - см. ОписаниеВедущихСписковПоЗначениямПолей
@@ -30121,7 +30204,8 @@
ИначеЕсли Условие.Узел = "Не" Тогда
Аргумент = УпрощенноеУсловиеОграничения(Условие.Аргумент, Контекст);
Если Аргумент.Узел = "Константа" Тогда
Условие = Новый Структура("Узел, Значение", "Константа", Не Аргумент.Значение);
Условие = Новый Структура("Узел, Значение", "Константа",
?(Аргумент.Значение = "Пусто", "Пусто", Не Аргумент.Значение));
Иначе
Условие = Новый Структура("Узел, Аргумент", Условие.Узел, Аргумент);
КонецЕсли;
@@ -30164,6 +30248,7 @@
ИначеЕсли Условие.Узел = "Выбор" Тогда
ВсеЗначенияВыбораИстина = Истина;
ВсеЗначенияВыбораЛожь = Истина;
ВсеЗначенияВыбораПусто = Истина;
Выбор = Новый Структура("Узел, Выбор, Когда, Иначе", Условие.Узел, Условие.Выбор, Новый Массив);
НовоеУсловиеИначе = Неопределено;
Для Каждого Когда Из Условие.Когда Цикл
@@ -30180,15 +30265,18 @@
УсловиеКогда = Когда.Условие;
КонецЕсли;
ЗначениеКогда = УпрощенноеУсловиеОграничения(Когда.Значение, Контекст);
ОбработатьУпрощенноеЗначениеВыбора(ЗначениеКогда, ВсеЗначенияВыбораИстина, ВсеЗначенияВыбораЛожь);
ОбработатьУпрощенноеЗначениеВыбора(ЗначениеКогда,
ВсеЗначенияВыбораИстина, ВсеЗначенияВыбораЛожь, ВсеЗначенияВыбораПусто);
СтруктураКогда = Новый Структура("Условие, Значение", УсловиеКогда, ЗначениеКогда);
Выбор.Когда.Добавить(СтруктураКогда);
КонецЦикла;
УсловиеИначе = ?(НовоеУсловиеИначе = Неопределено, Условие.Иначе, НовоеУсловиеИначе);
Выбор.Иначе = УпрощенноеУсловиеОграничения(УсловиеИначе, Контекст);
ОбработатьУпрощенноеЗначениеВыбора(Выбор.Иначе, ВсеЗначенияВыбораИстина, ВсеЗначенияВыбораЛожь);
Если ВсеЗначенияВыбораИстина Или ВсеЗначенияВыбораЛожь Тогда
Условие = Новый Структура("Узел, Значение", "Константа", ВсеЗначенияВыбораИстина);
ОбработатьУпрощенноеЗначениеВыбора(Выбор.Иначе,
ВсеЗначенияВыбораИстина, ВсеЗначенияВыбораЛожь, ВсеЗначенияВыбораПусто);
Если ВсеЗначенияВыбораИстина Или ВсеЗначенияВыбораЛожь Или ВсеЗначенияВыбораПусто Тогда
Условие = Новый Структура("Узел, Значение", "Константа",
?(ВсеЗначенияВыбораПусто, "Пусто", ВсеЗначенияВыбораИстина));
ИначеЕсли Выбор.Когда.Количество() = 0 Тогда
Условие = Выбор.Иначе;
Иначе
@@ -30249,7 +30337,11 @@
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если Условие.Узел <> "Константа" И ДобавитьОставшиесяПоля Тогда
Если Условие.Узел = "Константа" Тогда
Если КореньУсловия И Условие.Значение = "Пусто" Тогда
Условие.Значение = Истина;
КонецЕсли;
ИначеЕсли ДобавитьОставшиесяПоля Тогда
Для Каждого КлючИЗначение Из Контекст.ОставшиесяПоляПослеУпрощения Цикл
Если Условие.Узел <> "Поле" Тогда
РодителиПоля = КлючИЗначение.Значение; // Массив Из см. ОписаниеУзла
@@ -30265,16 +30357,24 @@
КонецФункции
// Для функции УпрощенноеУсловиеОграничения.
Процедура ОбработатьУпрощенноеЗначениеВыбора(Условие, ВсеЗначенияВыбораИстина, ВсеЗначенияВыбораЛожь)
Процедура ОбработатьУпрощенноеЗначениеВыбора(Условие,
ВсеЗначенияВыбораИстина, ВсеЗначенияВыбораЛожь, ВсеЗначенияВыбораПусто)
Если Условие.Узел <> "Константа" Тогда
ВсеЗначенияВыбораИстина = Ложь;
ВсеЗначенияВыбораЛожь = Ложь;
ВсеЗначенияВыбораПусто = Ложь;
ИначеЕсли Условие.Значение = "Пусто" Тогда
ВсеЗначенияВыбораИстина = Ложь;
ВсеЗначенияВыбораЛожь = Ложь;
ИначеЕсли Условие.Значение Тогда
ВсеЗначенияВыбораЛожь = Ложь;
ВсеЗначенияВыбораЛожь = Ложь;
ВсеЗначенияВыбораПусто = Ложь;
Иначе
ВсеЗначенияВыбораИстина = Ложь;
ВсеЗначенияВыбораПусто = Ложь;
КонецЕсли;
КонецПроцедуры
@@ -30287,6 +30387,7 @@
РезультатВсегдаЛожь = Истина;
РезультатВсегдаИстина = Истина;
ЕстьРезультатПусто = Ложь;
Для Каждого Тип Из ТипыКонечногоПоля Цикл
ИмяТипа = ИмяТипаНаЯзыкеЗапросов(Тип);
@@ -30317,6 +30418,7 @@
КонецЕсли;
Если ОтключеноКакЛожь Тогда
РезультатВсегдаИстина = Ложь;
ЕстьРезультатПусто = Истина;
Иначе
РезультатВсегдаЛожь = Ложь;
КонецЕсли;
@@ -30329,7 +30431,11 @@
Если РезультатВсегдаИстина Тогда
Возврат Истина;
ИначеЕсли РезультатВсегдаЛожь Тогда
Возврат Ложь;
Если ЕстьРезультатПусто Тогда
Возврат "Пусто";
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
@@ -880,9 +880,22 @@
ДобавлятьВМассивПисемДляПолученияПапки = Ложь;
Блокировка = Новый БлокировкаДанных;
Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
ЭлементБлокировки = Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ПапкиЭлектронныхПисем");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Добавить("РегистрСведений.ИдентификаторыПолученныхЭлектронныхПисем");
Блокировка.Добавить("РегистрСведений.УведомленияОПрочтении");
Блокировка.Добавить("Документ.ЭлектронноеПисьмоИсходящее");
Блокировка.Добавить("Документ.ЭлектронноеПисьмоВходящее");
КонецЕсли;
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ЭтоИсходящееПисьмо = ПочтовыеАдресаРавны(ДанныеУчетнойЗаписи.АдресЭлектроннойПочты,
АдресОтправителяИнтернетПочтовогоСообщения(Сообщение.Отправитель));
@@ -803,7 +803,10 @@
// РежимДиалога - РежимДиалогаВыбораФайла - режим работы конструируемого диалога выбора файлов.
//
// Возвращаемое значение:
// см. ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла
// Структура:
// * Диалог - ДиалогВыбораФайла
// * Интерактивно - Булево
// * ТекстПредложения - Строка
//
Функция КонтекстОперации(РежимДиалога)
@@ -2047,11 +2047,11 @@
ЗаполнитьЗначенияСвойств(НоваяЗапись, СвойстваПодписи, , "Подпись, Сертификат");
НоваяЗапись.ПодписанныйОбъект = ОбъектДанных.Ссылка;
НоваяЗапись.Подпись = Новый ХранилищеЗначения(СвойстваПодписи.Подпись);
НоваяЗапись.Подпись = Новый ХранилищеЗначения(СвойстваПодписи.Подпись, Новый СжатиеДанных(9));
Если ТипЗнч(СвойстваПодписи.Сертификат) = Тип("ХранилищеЗначения") Тогда
НоваяЗапись.Сертификат = СвойстваПодписи.Сертификат;
Иначе
НоваяЗапись.Сертификат = Новый ХранилищеЗначения(СвойстваПодписи.Сертификат);
НоваяЗапись.Сертификат = Новый ХранилищеЗначения(СвойстваПодписи.Сертификат, Новый СжатиеДанных(9));
КонецЕсли;
ПорядковыйНомер = 1;
@@ -5379,7 +5379,14 @@
ДанныеКлассификатора = Константы.КлассификаторОшибокКриптографии.Получить();
Если Не ЗначениеЗаполнено(ДанныеКлассификатора) Тогда
Возврат Новый Структура("Классификатор, Версия", ПредставлениеКлассификатораДляХранения());
Если Метаданные.ОбщиеМодули.Найти("ЭлектроннаяПодписьСлужебныйЛокализация") = Неопределено Тогда
Возврат Новый Структура("Классификатор, Версия", ПредставлениеКлассификатораДляХранения());
КонецЕсли;
МодульЭлектроннаяПодписьСлужебныйЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебныйЛокализация");
Возврат МодульЭлектроннаяПодписьСлужебныйЛокализация.КлассификаторОшибокКриптографии();
КонецЕсли;
ДанныеКлассификатора = ДанныеКлассификатора.Получить();
@@ -5427,33 +5434,8 @@
Если ДанныеКлассификатора <> Неопределено Тогда
ЧтениеJSON = Новый ЧтениеJSON;
Если ТипЗнч(ДанныеКлассификатора) = Тип("Строка") Тогда
ЧтениеJSON.УстановитьСтроку(ДанныеКлассификатора);
Иначе
ЧтениеJSON.ОткрытьПоток(ДанныеКлассификатора.ОткрытьПотокДляЧтения());
КонецЕсли;
КлассификаторОшибок = ПрочитатьJSON(ЧтениеJSON,, "LastChangeDate");
ВерсияКлассификатора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
КлассификаторОшибок, "Version", Неопределено);
ЧтениеJSON.Закрыть();
ПредставлениеКлассификатора = ПредставлениеКлассификатораДляХранения();
Для Каждого ИзвестнаяОшибка Из КлассификаторОшибок.Classifier Цикл
НоваяОшибка = ПредставлениеКлассификатора.Добавить();
НоваяОшибка.Ссылка = ИзвестнаяОшибка.Anchor;
НоваяОшибка.Причина = ИзвестнаяОшибка.Reason;
НоваяОшибка.Решение = ИзвестнаяОшибка.Solution;
НоваяОшибка.ТекстОшибки = ИзвестнаяОшибка.ErrorText;
НоваяОшибка.СпособУстранения = ИзвестнаяОшибка.RepairMethods;
КонецЦикла;
Константы.КлассификаторОшибокКриптографии.Установить(
Новый ХранилищеЗначения(Новый Структура("Классификатор, Версия",
ПредставлениеКлассификатора, ВерсияКлассификатора), Новый СжатиеДанных(9)));
Новый ХранилищеЗначения(ПредставлениеКлассификатораОшибок(ДанныеКлассификатора), Новый СжатиеДанных(9)));
КонецЕсли;
@@ -5464,6 +5446,37 @@
КонецПроцедуры
// Только для внутреннего использования.
Функция ПредставлениеКлассификатораОшибок(ДанныеКлассификатора) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
Если ТипЗнч(ДанныеКлассификатора) = Тип("Строка") Тогда
ЧтениеJSON.УстановитьСтроку(ДанныеКлассификатора);
Иначе
ЧтениеJSON.ОткрытьПоток(ДанныеКлассификатора.ОткрытьПотокДляЧтения());
КонецЕсли;
КлассификаторОшибок = ПрочитатьJSON(ЧтениеJSON,, "LastChangeDate");
ВерсияКлассификатора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
КлассификаторОшибок, "Version", Неопределено);
ЧтениеJSON.Закрыть();
ПредставлениеКлассификатора = ПредставлениеКлассификатораДляХранения();
Для Каждого ИзвестнаяОшибка Из КлассификаторОшибок.Classifier Цикл
НоваяОшибка = ПредставлениеКлассификатора.Добавить();
НоваяОшибка.Ссылка = ИзвестнаяОшибка.Anchor;
НоваяОшибка.Причина = ИзвестнаяОшибка.Reason;
НоваяОшибка.Решение = ИзвестнаяОшибка.Solution;
НоваяОшибка.ТекстОшибки = ИзвестнаяОшибка.ErrorText;
НоваяОшибка.СпособУстранения = ИзвестнаяОшибка.RepairMethods;
КонецЦикла;
Возврат Новый Структура("Классификатор, Версия", ПредставлениеКлассификатора, ВерсияКлассификатора);
КонецФункции
#КонецОбласти
#Область ДиагностикаЭлектроннойПодписи
@@ -3008,12 +3008,8 @@
Контекст.Вставить("СоставИмениФайлаДанных",
ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайла));
Если ЗначениеЗаполнено(Контекст.СоставИмениФайлаДанных.Путь) Тогда
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения(
"СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст));
Иначе
СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами(Ложь, Контекст);
КонецЕсли;
ФайловаяСистемаКлиент.ПодключитьРасширениеДляРаботыСФайлами(Новый ОписаниеОповещения(
"СохранитьДанныеВместеСПодписьюПослеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект, Контекст));
КонецПроцедуры
@@ -3023,12 +3019,16 @@
Контекст.Вставить("Подключено", Подключено);
Контекст.Вставить("РасширениеДляФайловПодписи",
ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи);
ЭлектроннаяПодписьКлиент.ПерсональныеНастройки().РасширениеДляФайловПодписи);
Если Контекст.Подключено Тогда
Контекст.Вставить("ПолучаемыеФайлы", Новый Массив);
Контекст.Вставить("ПутьКФайлам", ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(
Контекст.СоставИмениФайлаДанных.Путь));
Если ЗначениеЗаполнено(Контекст.СоставИмениФайлаДанных.Путь) Тогда
Контекст.Вставить("ПутьКФайлам", ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(
Контекст.СоставИмениФайлаДанных.Путь));
Иначе
Контекст.Вставить("ПутьКФайлам", "");
КонецЕсли;
КонецЕсли;
Контекст.Вставить("ИменаФайлов", Новый Соответствие);
@@ -3041,6 +3041,11 @@
КонецПроцедуры
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
//
// Параметры:
// Контекст - Структура:
// * Индекс - Число
//
Процедура СохранитьДанныеВместеСПодписьюЦиклНачало(Контекст)
Если Контекст.КоллекцияПодписей.Количество() <= Контекст.Индекс + 1 Тогда
@@ -3113,6 +3118,11 @@
КонецПроцедуры
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
//
// Параметры:
// Контекст - Структура:
// * ПолучаемыеФайлы - Массив
//
Процедура СохранитьДанныеВместеСПодписьюЦиклПослеВнутреннегоЦикла(Контекст)
СоставИмениФайлаПодписи = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайлаПодписи);
@@ -3195,6 +3205,11 @@
КонецПроцедуры
// Продолжение процедуры ЭлектроннаяПодписьКлиент.СохранитьДанныеВместеСПодписью.
//
// Параметры:
// Контекст - Структура:
// * ПолучаемыеФайлы - Массив
//
Процедура СохранитьДанныеСертификатаВместеСПодписьюЦиклПослеВнутреннегоЦикла(Контекст)
СоставИмениФайлаСертификата = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Контекст.ПолноеИмяФайлаСертификата);
@@ -3274,10 +3289,10 @@
ИначеЕсли РазрешенияПолучены Тогда
ПараметрыСохранения = ФайловаяСистемаКлиент.ПараметрыСохраненияФайлов();
ПараметрыСохранения.Интерактивно = Ложь;
ПараметрыСохранения.Интерактивно = Не ЗначениеЗаполнено(Контекст.ПутьКФайлам);
ПараметрыСохранения.Диалог.Каталог = Контекст.ПутьКФайлам;
ФайловаяСистемаКлиент.СохранитьФайлы(Новый ОписаниеОповещения(
"СохранитьДанныеВместеСПодписьюПослеПолученияФайлов", ЭтотОбъект, Контекст),
"СохранитьДанныеВместеСПодписьюПослеПолученияФайлов", ЭтотОбъект, Контекст),
Контекст.ПолучаемыеФайлы, ПараметрыСохранения);
Иначе
СохранитьДанныеВместеСПодписьюПослеПолученияФайлов(Неопределено, Контекст);
@@ -3297,8 +3312,11 @@
Если ТипЗнч(ПолученныеФайлы) = Тип("Массив") Тогда
Для каждого ПолученныйФайл Из ПолученныеФайлы Цикл
СоставИмениФайлаПодписи = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПолученныйФайл.Имя);
СоставИмениФайлаПодписи = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПолученныйФайл.ПолноеИмя);
ИменаПолученныхФайлов.Вставить(СоставИмениФайлаПодписи.Имя, Истина);
Если Не ЗначениеЗаполнено(Контекст.ПутьКФайлам) Тогда
Контекст.ПутьКФайлам = СоставИмениФайлаПодписи.Путь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
@@ -3312,7 +3330,11 @@
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Текст", Текст);
ПараметрыФормы.Вставить("КаталогСФайлами", Контекст.СоставИмениФайлаДанных.Путь);
Если Не ЗначениеЗаполнено(Контекст.СоставИмениФайлаДанных.Путь) Тогда
ПараметрыФормы.Вставить("КаталогСФайлами", Контекст.ПутьКФайлам);
Иначе
ПараметрыФормы.Вставить("КаталогСФайлами", Контекст.СоставИмениФайлаДанных.Путь);
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ОтчетОСохраненииФайловЭлектронныхПодписей", ПараметрыФормы,,,,,
Новый ОписаниеОповещения("СохранитьДанныеВместеСПодписьюПослеЗакрытияОтчета", ЭтотОбъект, Контекст));
@@ -1853,7 +1853,6 @@
КонецФункции
// См. ЭлектроннаяПодписьКлиент.СвойстваСертификата.
Функция СвойстваСертификата(Сертификат, ДобавкаВремени) Экспорт
ДатыСертификата = ДатыСертификата(Сертификат, ДобавкаВремени);
@@ -1906,7 +1905,6 @@
КонецПроцедуры
// См. ЭлектроннаяПодписьКлиент.СвойстваСубъектаСертификата.
Функция СвойстваСубъектаСертификата(Сертификат) Экспорт
Субъект = Сертификат.Субъект;
@@ -111,6 +111,13 @@
КонецФункции
Функция КлассификаторОшибокКриптографии() Экспорт
Возврат ЭлектроннаяПодписьСлужебный.ПредставлениеКлассификатораОшибок(
Обработки.ПрограммыЭлектроннойПодписиИШифрования.ПолучитьМакет("КлассификаторОшибокКриптографии"));
КонецФункции
Функция АккредитованныеУдостоверяющиеЦентры() Экспорт
УстановитьПривилегированныйРежим(Истина);
+10 -11
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="f8a543bf-dde2-4d89-9a16-0480ccd4f52e">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="18b69172-3c99-47dd-b440-95e9cb9b809c">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="b77d7cc3-a79c-4521-b3f4-352aae11d9c0"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="dc23da14-5c97-4b80-a436-cde5e2e29849"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="e5520594-f145-4ce7-8cec-db3b253f9f46"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="74c72375-b1b6-4d4f-9b54-242f97245e95"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="109ad15a-c9c9-44f0-9358-a05cf289097e"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="580be518-ea9d-4b5f-af75-693d46cc14d6"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="eb7938d2-e277-45cf-a0f5-332adf911ef8"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="2a21374d-85f5-440c-a959-7b63dc27d4d9"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="5361a011-6fb9-4680-8395-279e02de98d3"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="18809241-2377-4b7b-8393-292afb6f58d1"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="6f4cfd51-cf99-47a9-aba1-071987d9a8f6"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="0460b19a-cf63-4944-97a0-3b2798b634f8"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="0c7e9e24-dfe6-4894-94f2-157ab5806024"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="a17ce663-b0cf-464e-b1c8-df8554b190c1"/>
<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.7.61</version>
<version>3.1.7.79</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -655,6 +655,7 @@
<sessionParameters>SessionParameter.ОбластьДанныхЗначение</sessionParameters>
<sessionParameters>SessionParameter.ОбластьДанныхИспользование</sessionParameters>
<sessionParameters>SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных</sessionParameters>
<sessionParameters>SessionParameter.ОбновлениеСправочниковИдентификаторов</sessionParameters>
<sessionParameters>SessionParameter.ОбщиеПараметрыШаблоновОграниченияДоступа</sessionParameters>
<sessionParameters>SessionParameter.ОграничениеДоступаНаУровнеЗаписейИспользуется</sessionParameters>
<sessionParameters>SessionParameter.ОграничениеДоступаНаУровнеЗаписейУниверсально</sessionParameters>
@@ -944,7 +945,6 @@
<commonModules>CommonModule.НапоминанияПользователяВызовСервера</commonModules>
<commonModules>CommonModule.НапоминанияПользователяГлобальный</commonModules>
<commonModules>CommonModule.НапоминанияПользователяКлиент</commonModules>
<commonModules>CommonModule.НапоминанияПользователяКлиентПовтИсп</commonModules>
<commonModules>CommonModule.НапоминанияПользователяКлиентСервер</commonModules>
<commonModules>CommonModule.НапоминанияПользователяПереопределяемый</commonModules>
<commonModules>CommonModule.НапоминанияПользователяСлужебный</commonModules>
@@ -1085,7 +1085,6 @@
<commonModules>CommonModule.РаботаСБанкамиПереопределяемый</commonModules>
<commonModules>CommonModule.РаботаСБанкамиСлужебный</commonModules>
<commonModules>CommonModule.РаботаСКурсамиВалют</commonModules>
<commonModules>CommonModule.РаботаСКурсамиВалютВызовСервера</commonModules>
<commonModules>CommonModule.РаботаСКурсамиВалютГлобальный</commonModules>
<commonModules>CommonModule.РаботаСКурсамиВалютКлиент</commonModules>
<commonModules>CommonModule.РаботаСКурсамиВалютКлиентСервер</commonModules>
@@ -1 +1 @@
{6,1,1,46f419e3-e501-4cf4-8600-91959348a5b6,1,efdf524d-54ac-4cb1-b611-bf318a3b7b71,"3.1.7.61","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6753,1,0,f8a543bf-dde2-4d89-9a16-0480ccd4f52e,f8a543bf-dde2-4d89-9a16-0480ccd4f52e,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-91c7-Line truncated
{6,1,1,a3aa9e2b-0a1d-4b94-bcda-7e204725cd6d,1,265aea1c-28d4-4297-b9bc-3a6217fb3c85,"3.1.7.79","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",6753,1,0,18b69172-3c99-47dd-b440-95e9cb9b809c,18b69172-3c99-47dd-b440-95e9cb9b809c,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-91c7-Line truncated
@@ -146,34 +146,13 @@
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВыполнениеФоновогоЗадания()
Если ЗначениеЗаполнено(ИдентификаторФоновогоЗадания) И Не ЗаданиеВыполнено(ИдентификаторФоновогоЗадания) Тогда
ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 5, Истина);
Иначе
ИдентификаторФоновогоЗадания = "";
Если ТекущееФоновоеЗадание = "Подсчет" Тогда
ВывестиИнформациюОКоличествеФайловСНеизвлеченнымТекстом();
Возврат;
КонецЕсли;
ТекущееФоновоеЗадание = "";
ОбновитьИнформациюОКоличествеФайловСНеизвлеченнымТекстом();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрерватьФоновоеЗадание()
ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания);
ОтключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания");
ТекущееФоновоеЗадание = "";
ИдентификаторФоновогоЗадания = "";
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторФоновогоЗадания)
Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторФоновогоЗадания);
КонецФункции
&НаСервереБезКонтекста
Процедура ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания)
Если ЗначениеЗаполнено(ИдентификаторФоновогоЗадания) Тогда
@@ -3908,27 +3908,60 @@
<name>БИПГруппаИнтеграцияСПлатежнымиСистемами</name>
<id>1921</id>
<items xsi:type="form:FormGroup">
<name>БИПГруппаНастройкиИнтеграции</name>
<id>1941</id>
<items xsi:type="form:Button">
<name>БИПНастройкаИнтеграцииСПлатежнымиСистемами</name>
<id>1923</id>
<title>
<key>ru</key>
<value>Настройки подключения</value>
</title>
<name>БИПГруппаИнтеграцияСПлатежнымиСистемамиЛево</name>
<id>1995</id>
<items xsi:type="form:FormGroup">
<name>БИПГруппаНастройкиИнтеграции</name>
<id>1941</id>
<items xsi:type="form:Button">
<name>БИПНастройкаИнтеграцииСПлатежнымиСистемами</name>
<id>1923</id>
<title>
<key>ru</key>
<value>Настройки подключения</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>БИПНастройкаИнтеграцииСПлатежнымиСистемамиРасширеннаяПодсказка</name>
<id>1924</id>
<title>
<key>ru</key>
<value>Настройка подключения и обмена данными с Системой быстрых платежей</value>
</title>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.БИПНастройкаИнтеграцииСПлатежнымиСистемами</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Настройки интеграции</value>
</title>
<width>43</width>
<extendedTooltip>
<name>БИПНастройкаИнтеграцииСПлатежнымиСистемамиРасширеннаяПодсказка</name>
<id>1924</id>
<title>
<key>ru</key>
<value>Настройка подключения и обмена данными с Системой быстрых платежей</value>
</title>
<name>БИПГруппаНастройкиИнтеграцииРасширеннаяПодсказка</name>
<id>1942</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -3936,15 +3969,79 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.БИПНастройкаИнтеграцииСПлатежнымиСистемами</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<representationInContextMenu>Auto</representationInContextMenu>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>БИПГруппаНастройкаШаблоновСБП</name>
<id>1999</id>
<items xsi:type="form:Button">
<name>БИПОткрытьШаблоныСообщенийСБП</name>
<id>2001</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>БИПОткрытьШаблоныСообщенийСБПРасширеннаяПодсказка</name>
<id>2002</id>
<title>
<key>ru</key>
<value>Шаблоны необходимы для отправки писем и SMS со счетами на оплату через СБП.</value>
</title>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.БИПОткрытьШаблоныСообщенийСБП</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа настройка шаблонов СБП</value>
</title>
<extendedTooltip>
<name>БИПГруппаНастройкаШаблоновСБПРасширеннаяПодсказка</name>
<id>2000</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>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
@@ -3953,12 +4050,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Настройки интеграции</value>
<value>БИП группа интеграция с платежными системами лево</value>
</title>
<width>43</width>
<extendedTooltip>
<name>БИПГруппаНастройкиИнтеграцииРасширеннаяПодсказка</name>
<id>1942</id>
<name>БИПГруппаИнтеграцияСПлатежнымиСистемамиЛевоРасширеннаяПодсказка</name>
<id>1996</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -3968,7 +4064,7 @@
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>HorizontalIfPossible</group>
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
@@ -3977,80 +4073,114 @@
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>БИПГруппаДлительностьОперации</name>
<id>1943</id>
<items xsi:type="form:FormField">
<name>БИПДлительностьОперацииПлатежнойСистемы</name>
<id>1945</id>
<title>
<key>ru</key>
<value>Длительность
<name>БИПГруппаИнтеграцияСПлатежнымиСистемамиПраво</name>
<id>1997</id>
<items xsi:type="form:FormGroup">
<name>БИПГруппаДлительностьОперации</name>
<id>1943</id>
<items xsi:type="form:FormField">
<name>БИПДлительностьОперацииПлатежнойСистемы</name>
<id>1945</id>
<title>
<key>ru</key>
<value>Длительность
операции</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>БИПДлительностьОперацииПлатежнойСистемы</segments>
</dataPath>
<toolTipRepresentation>Button</toolTipRepresentation>
<handlers>
<event>OnChange</event>
<name>БИПДлительностьОперацииПлатежнойСистемыПриИзменении</name>
</handlers>
<extendedTooltip>
<name>БИПДлительностьОперацииПлатежнойСистемыРасширеннаяПодсказка</name>
<id>1947</id>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>БИПДлительностьОперацииПлатежнойСистемы</segments>
</dataPath>
<toolTipRepresentation>Button</toolTipRepresentation>
<handlers>
<event>OnChange</event>
<name>БИПДлительностьОперацииПлатежнойСистемыПриИзменении</name>
</handlers>
<extendedTooltip>
<name>БИПДлительностьОперацииПлатежнойСистемыРасширеннаяПодсказка</name>
<id>1947</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>БИПДлительностьОперацииПлатежнойСистемыКонтекстноеМеню</name>
<id>1946</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:Decoration">
<name>БИПДекорацияЕдинициИзмерения</name>
<id>1955</id>
<title>
<key>ru</key>
<value>секунд</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<toolTip>
<key>ru</key>
<value>Длительность ожидания подтверждения
оплаты покупателем.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>БИПДекорацияЕдинициИзмеренияРасширеннаяПодсказка</name>
<id>1957</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>БИПДекорацияЕдинициИзмеренияКонтекстноеМеню</name>
<id>1956</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>БИПДлительностьОперацииПлатежнойСистемыКонтекстноеМеню</name>
<id>1946</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:Decoration">
<name>БИПДекорацияЕдинициИзмерения</name>
<id>1955</id>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>секунд</value>
<value>Длительность операции</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<toolTip>
<key>ru</key>
<value>Длительность ожидания подтверждения
оплаты покупателем.</value>
</toolTip>
<toolTipRepresentation>Button</toolTipRepresentation>
<extendedTooltip>
<name>БИПДекорацияЕдинициИзмеренияРасширеннаяПодсказка</name>
<id>1957</id>
<name>БИПГруппаДлительностьОперацииРасширеннаяПодсказка</name>
<id>1944</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -4058,16 +4188,14 @@
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>БИПДекорацияЕдинициИзмеренияКонтекстноеМеню</name>
<id>1956</id>
<autoFill>true</autoFill>
</contextMenu>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<visible>true</visible>
@@ -4077,11 +4205,11 @@
</userVisible>
<title>
<key>ru</key>
<value>Длительность операции</value>
<value>БИП группа интеграция с платежными системами право</value>
</title>
<extendedTooltip>
<name>БИПГруппаДлительностьОперацииРасширеннаяПодсказка</name>
<id>1944</id>
<name>БИПГруппаИнтеграцияСПлатежнымиСистемамиПравоРасширеннаяПодсказка</name>
<id>1998</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
@@ -4091,7 +4219,7 @@
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<group>Vertical</group>
<behavior>Auto</behavior>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
@@ -4320,7 +4448,7 @@
<name>БИПОнлайнОплатыЛево</name>
<id>1960</id>
<items xsi:type="form:FormField">
<name>ИспользоватьОнлайнОплаты</name>
<name>БИПИспользоватьОнлайнОплаты</name>
<id>1962</id>
<title>
<key>ru</key>
@@ -4342,10 +4470,10 @@
<toolTipRepresentation>ShowBottom</toolTipRepresentation>
<handlers>
<event>OnChange</event>
<name>ИспользоватьОнлайнОплатыПриИзменении</name>
<name>БИПИспользоватьОнлайнОплатыПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ИспользоватьОнлайнОплатыРасширеннаяПодсказка</name>
<name>БИПИспользоватьОнлайнОплатыРасширеннаяПодсказка</name>
<id>1964</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -4355,7 +4483,7 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИспользоватьОнлайнОплатыКонтекстноеМеню</name>
<name>БИПИспользоватьОнлайнОплатыКонтекстноеМеню</name>
<id>1963</id>
<autoFill>true</autoFill>
</contextMenu>
@@ -4370,7 +4498,7 @@
<name>ГруппаПолучениеУведомлений</name>
<id>1965</id>
<items xsi:type="form:FormField">
<name>ИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплат</name>
<name>БИПИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплат</name>
<id>1967</id>
<title>
<key>ru</key>
@@ -4387,10 +4515,10 @@
<titleLocation>Right</titleLocation>
<handlers>
<event>OnChange</event>
<name>ИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатПриИзменении</name>
<name>БИПИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатПриИзменении</name>
</handlers>
<extendedTooltip>
<name>ИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатРасширеннаяПодсказка</name>
<name>БИПИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатРасширеннаяПодсказка</name>
<id>1969</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
@@ -4400,7 +4528,7 @@
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатКонтекстноеМеню</name>
<name>БИПИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатКонтекстноеМеню</name>
<id>1968</id>
<autoFill>true</autoFill>
</contextMenu>
@@ -4516,7 +4644,7 @@
<name>ГруппаНастройкиОнлайнОплатыПраво</name>
<id>1975</id>
<items xsi:type="form:Button">
<name>ОткрытьНастройкиОнлайнОплат</name>
<name>БИПОткрытьНастройкиОнлайнОплат</name>
<id>1977</id>
<title>
<key>ru</key>
@@ -4528,7 +4656,7 @@
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОткрытьНастройкиОнлайнОплатРасширеннаяПодсказка</name>
<name>БИПОткрытьНастройкиОнлайнОплатРасширеннаяПодсказка</name>
<id>1978</id>
<title>
<key>ru</key>
@@ -4542,7 +4670,7 @@
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ОткрытьНастройкиОнлайнОплат</commandName>
<commandName>Form.Command.БИПОткрытьНастройкиОнлайнОплат</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
@@ -4555,7 +4683,7 @@
<name>ГруппаНастройкаШаблоновОнлайнОплат</name>
<id>1982</id>
<items xsi:type="form:Button">
<name>ОткрытьШаблоныСообщений</name>
<name>БИПОткрытьШаблоныСообщенийОнлайнОплат</name>
<id>1984</id>
<visible>true</visible>
<enabled>true</enabled>
@@ -4563,7 +4691,7 @@
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ОткрытьШаблоныСообщенийРасширеннаяПодсказка</name>
<name>БИПОткрытьШаблоныСообщенийОнлайнОплатРасширеннаяПодсказка</name>
<id>1985</id>
<title>
<key>ru</key>
@@ -4577,7 +4705,7 @@
</extInfo>
</extendedTooltip>
<type>Hyperlink</type>
<commandName>Form.Command.ОткрытьШаблоныСообщений</commandName>
<commandName>Form.Command.БИПОткрытьШаблоныСообщенийОнлайнОплат</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
@@ -5363,10 +5491,10 @@
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОткрытьНастройкиОнлайнОплат</name>
<name>БИПОткрытьНастройкиОнлайнОплат</name>
<title>
<key>ru</key>
<value>Открыть настройки онлайн оплат</value>
<value>БИПОткрыть настройки онлайн оплат</value>
</title>
<id>14</id>
<use>
@@ -5374,14 +5502,14 @@
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОткрытьНастройкиОнлайнОплат</name>
<name>БИПОткрытьНастройкиОнлайнОплат</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>ОткрытьШаблоныСообщений</name>
<name>БИПОткрытьШаблоныСообщенийОнлайнОплат</name>
<title>
<key>ru</key>
<value>Шаблоны сообщений</value>
@@ -5392,7 +5520,7 @@
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ОткрытьШаблоныСообщений</name>
<name>БИПОткрытьШаблоныСообщенийОнлайнОплат</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
@@ -5420,6 +5548,24 @@
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<formCommands>
<name>БИПОткрытьШаблоныСообщенийСБП</name>
<title>
<key>ru</key>
<value>Шаблоны сообщений</value>
</title>
<id>18</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>БИПОткрытьШаблоныСообщенийСБП</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -451,7 +451,7 @@
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьОнлайнОплатыПриИзменении(Элемент)
Процедура БИПИспользоватьОнлайнОплатыПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОнлайнОплаты") Тогда
МодульОнлайнОплаты = ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыКлиент");
@@ -463,7 +463,7 @@
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатПриИзменении(Элемент)
Процедура БИПИспользоватьАвтоматическоеПолучениеУведомленияОтОнлайнОплатПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОнлайнОплаты") Тогда
МодульПолучениеУведомленияОтОнлайнОплат = ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыКлиент");
@@ -477,57 +477,52 @@
&НаКлиенте
Процедура ДекорацияРасписаниеПолученияУведомленийОтОнлайнОплатНажатие(Элемент)
МодульОнлайнОплатыКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыКлиент");
МодульОнлайнОплатыКлиент.ИнтернетПоддержкаИСервисы_ДекорацияРасписаниеПолученияУведомленийОтОнлайнОплатНажатие(
ЭтотОбъект,
Элемент);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОнлайнОплаты") Тогда
КонецПроцедуры
МодульОнлайнОплатыКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыКлиент");
МодульОнлайнОплатыКлиент.ИнтернетПоддержкаИСервисы_ДекорацияРасписаниеПолученияУведомленийОтОнлайнОплатНажатие(
ЭтотОбъект,
Элемент);
&НаКлиенте
Процедура ОткрытьНастройкиОнлайнОплат(Команда)
ФормаСписка = "Справочник.НастройкиОнлайнОплат.Форма.ФормаСписка";
ОткрытьФорму(ФормаСписка, , ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьШаблоныСообщений(Команда)
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений") Тогда
Возврат;
КонецЕсли;
МодульОнлайнОплатыСлужебныйВызовСервера =
ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыСлужебныйВызовСервера");
КонецПроцедуры
РезультатПроверки = МодульОнлайнОплатыСлужебныйВызовСервера.ВсеШаблоныСозданы();
&НаКлиенте
Процедура БИПОткрытьНастройкиОнлайнОплат(Команда)
Если РезультатПроверки.ВсеШаблоны Тогда
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОнлайнОплаты") Тогда
ФормаСписка = "Справочник.НастройкиОнлайнОплат.Форма.ФормаСписка";
ОткрытьФорму(ФормаСписка, , ЭтотОбъект);
КонецЕсли;
МодульОнлайнОплатыСлужебныйКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыСлужебныйКлиент");
КонецПроцедуры
МодульОнлайнОплатыСлужебныйКлиент.ОткрытьФормуШаблонаСообщенийСОтбором(
РезультатПроверки.МассивШаблонов,
&НаКлиенте
Процедура БИПОткрытьШаблоныСообщенийОнлайнОплат(Команда)
Если (ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ОнлайнОплаты")
И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений")) Тогда
МодульОнлайнОплатыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыКлиент");
МодульОнлайнОплатыКлиент.ИнтернетПоддержкаИСервисы_ОткрытьШаблоныСообщенийОнлайнОплат(УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура БИПОткрытьШаблоныСообщенийСБП(Команда)
Если (ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ИнтеграцияСПлатежнымиСистемами")
И ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ШаблоныСообщений")) Тогда
МодульИнтеграцияСПлатежнымиСистемамиКлиент
= ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтеграцияСПлатежнымиСистемамиКлиент");
МодульИнтеграцияСПлатежнымиСистемамиКлиент.ИнтернетПоддержкаИСервисы_ОткрытьШаблоныСообщенийСБП(
УникальныйИдентификатор);
Иначе
РезультатПроверки.Вставить("УникальныйИдентификатор",УникальныйИдентификатор);
Оповещение = Новый ОписаниеОповещения(
"ПослеОтветаНаВопросОСозданииШаблонов",
ОбщегоНазначенияКлиент.ОбщийМодуль("ОнлайнОплатыСлужебныйКлиент"),
РезультатПроверки);
ПоказатьВопрос(
Оповещение,
НСтр("ru='Создать шаблоны сообщений для автоматического заполнения на основании данных документов?'"),
РежимДиалогаВопрос.ДаНетОтмена);
КонецЕсли;
КонецПроцедуры
@@ -0,0 +1,321 @@
{
"Classifier": [
{
"ErrorText": "0x00000005",
"Reason": "На сервере недостаточно прав на доступ к хранилищу сертификатов из 1С:Предприятия.",
"Solution": "- При работе в клиент-серверном режиме с использованием электронной подписи на сервере предоставьте доступ к хранилищу сертификатов пользователю, от имени которого работает сервер 1С:Предприятия. <a href=\"ОткрытьСписокПрограмм\">Открыть список программ криптографии</a>\n- При работе в файловом режиме с публикацией информационной базы на web-сервере предоставьте доступ к хранилищу сертификатов пользователю, от имени которого работает web-сервер.\n- В остальных случаях отключите подписание, шифрование и проверку подписи на сервере.",
"RepairMethods": "",
"Anchor": "0x00000005"
},
{
"ErrorText": "0x0000065v",
"Reason": "Истек срок действия лицензии программы электронной подписи.",
"Solution": "Проверьте срок действия лицензии программы электронной подписи.",
"RepairMethods": "",
"Anchor": "0x0000065B"
},
{
"ErrorText": "0x0000065B",
"Reason": "Истек срок действия лицензии программы электронной подписи.",
"Solution": "Проверьте срок действия лицензии программы электронной подписи.",
"RepairMethods": "",
"Anchor": "0x0000065B"
},
{
"ErrorText": "0x80090019",
"Reason": "Некорректное присоединение съемного носителя с закрытым ключом.",
"Solution": "В КриптоПро перейти на закладку \"Сервис\", нажать \"Удалить запомненные пароли…\" и удалить все сохраненные данные. Затем повторно установить сертификат средствами КриптоПро согласно инструкции в конце <a href=\"http://1c-edo.ru/handbook/28/4008/\">статьи</a>",
"RepairMethods": "",
"Anchor": "0x80090019"
},
{
"ErrorText": "Не определен набор ключей",
"Reason": "Некорректное присоединение съемного носителя с закрытым ключом.",
"Solution": "В КриптоПро перейти на закладку \"Сервис\", нажать \"Удалить запомненные пароли…\" и удалить все сохраненные данные. Затем повторно установить сертификат средствами КриптоПро согласно инструкции в конце <a href=\"http://1c-edo.ru/handbook/28/4008/\">статьи</a>",
"RepairMethods": "",
"Anchor": "0x80090019"
},
{
"ErrorText": "0x8010006C",
"Reason": "Блокировка ключа на токене Rutoken.",
"Solution": "Зайдите в Панель управления Рутокен, нажмите Ввести PIN-код, выберите Администратор, затем введите пин-код. Нажмите Разблокировать. См. <a href=\"http://1c-edo.ru/handbook/24/4879/\">инструкцию</a>",
"RepairMethods": "",
"Anchor": "0x8010006C"
},
{
"ErrorText": "Выбран неизвестный алгоритм подписи",
"Reason": "- Выбраны неправильные настройки алгоритма в карточке программы электронной подписи.\n- Программа электронной подписи установлена некорректно.",
"Solution": "- Откройте карточку проблемной программы и перевыберите программу из списка (при этом обновятся все 5 полей в карточке программы, включая алгоритмы). После этого нажмите \"Записать и закрыть\". В форме настроек нажмите \"Обновить\". <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>\n- Удалите все программы электронной подписи и установите только одну из них, так как установка нескольких программ электронной подписи на одном компьютере может вызвать эту ошибку.",
"RepairMethods": "",
"Anchor": "Выбран неизвестный алгоритм"
},
{
"ErrorText": "Выбран неизвестный алгоритм хеширования",
"Reason": "- Выбраны неправильные настройки алгоритма в карточке программы электронной подписи.\n- Программа электронной подписи установлена некорректно.",
"Solution": "- Откройте карточку проблемной программы и перевыберите программу из списка (при этом обновятся все 5 полей в карточке программы, включая алгоритмы). После этого нажмите \"Записать и закрыть\". В форме настроек нажмите \"Обновить\". <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>\n- Удалите все программы электронной подписи и установите только одну из них, так как установка нескольких программ электронной подписи на одном компьютере может вызвать эту ошибку.",
"RepairMethods": "",
"Anchor": "Выбран неизвестный алгоритм"
},
{
"ErrorText": "Выбран неизвестный алгоритм шифрования",
"Reason": "- Выбраны неправильные настройки алгоритма в карточке программы электронной подписи.\n- Программа электронной подписи установлена некорректно.",
"Solution": "- Откройте карточку проблемной программы и перевыберите программу из списка (при этом обновятся все 5 полей в карточке программы, включая алгоритмы). После этого нажмите \"Записать и закрыть\". В форме настроек нажмите \"Обновить\". <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>\n- Удалите все программы электронной подписи и установите только одну из них, так как установка нескольких программ электронной подписи на одном компьютере может вызвать эту ошибку.",
"RepairMethods": "",
"Anchor": "Выбран неизвестный алгоритм"
},
{
"ErrorText": "сертификат не прошел проверки по сроку действия при сверке с системными часами",
"Reason": "- Истек срок действия сертификата.\n- Не корректная дата и время на компьютере.",
"Solution": "- Подайте заявление на новый сертификат.\n- Установите корректную дату и время на компьютере.",
"RepairMethods": "",
"Anchor": "истек срок действия"
},
{
"ErrorText": "Ошибка при получении контекста модуля криптографии",
"Reason": "- Не установлена программа электронной подписи.\n- Неверно указаны настройки программы электронной подписи.",
"Solution": "- Установите программу для работы с электронной подписью.\n- Задайте общие настройки электронной подписи и шифрования. <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>",
"RepairMethods": "",
"Anchor": "Контекст модуля криптографии"
},
{
"ErrorText": "Модуль криптографии не поддерживает алгоритмов подписи",
"Reason": "- Сертификат некорректно связан с закрытым ключом.\n- Программа электронной подписи установлена некорректно.",
"Solution": "- Переустановите сертификат в Личное хранилище через оснастку программы электронной подписи с привязкой к закрытому ключу. См. <a href=\"http://1c-edo.ru/handbook/28/4008/\">инструкцию</a>\n- Удалите все программы электронной подписи и установите только одну из них, так как установка нескольких программ электронной подписи на одном компьютере может вызвать эту ошибку.",
"RepairMethods": "",
"Anchor": "Модуль криптографии не поддерживает алгоритм"
},
{
"ErrorText": "Сертификат, связанный с закрытым ключом, указывает на модуль криптографии, отличный от текущего",
"Reason": "- При установке сертификата в операционной системе Windows закрытая часть ключа оказалась связана с некорректным типом в программе электронной подписи ViPNet CSP или КриптоПро CSP.\n- Отличается программа электронной подписи, заданная в настройках сертификата в информационной базе и у закрытой части ключа.",
"Solution": "- Переустановите сертификат через оснастку программы электронной подписи Vipnet CSP с привязкой к закрытому ключу. См. <a href=\"http://1c-edo.ru/handbook/24/4163/\">инструкцию</a>\n- Переустановите сертификат через оснастку программы электронной подписи КриптоПро CSP с привязкой к закрытому ключу. См. <a href=\"http://1c-edo.ru/handbook/24/4129/\">инструкцию</a>\n- Откройте <a href=\"ОткрытьСертификат\">карточку сертификата</a> и выберите правильную программу электронной подписи.\n- Добавьте новую программу электронной подписи. <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>.",
"RepairMethods": "",
"Anchor": "Модуль криптографии неверный"
},
{
"ErrorText": "Программа для использования закрытого ключа не указана в сертификате",
"Reason": "Не заполнена программа электронной подписи в карточке сертификата.",
"Solution": "- Откройте <a href=\"ОткрытьСертификат\">карточку сертификата</a> и вручную укажите программу электронной подписи.\n- Повторно добавьте сертификат в список, чтобы программа электронной подписи в карточке сертификата заполнилась автоматически.",
"RepairMethods": "",
"Anchor": "не заполнена программа"
},
{
"ErrorText": "Не указан путь к программе",
"Reason": "Использование Vipnet CSP или других программ электронной подписи, не поддерживаемых платформой 1С:Предприятия в операционных системах Linux и macOS.",
"Solution": "Установите КриптоПро CSP для операционных систем Linux или macOS.",
"RepairMethods": "",
"Anchor": "Не указан путь к программе"
},
{
"ErrorText": "Язык описания абстрактного синтаксиса данных. Обнаружено неверное значение тега",
"Reason": "При шифровании в списке сертификатов для расшифровки выбран сертификат с несовместимым алгоритмом открытого ключа (алгоритмом подписи) или несовместимым алгоритмом шифрования.",
"Solution": "Уберите из списка сертификатов для расшифровки сертификат с несовместимым алгоритмом открытого ключа (алгоритмом подписи) или несовместимым алгоритмом шифрования.",
"RepairMethods": "",
"Anchor": "Неверные данные"
},
{
"ErrorText": "Неверные данные",
"Reason": "При шифровании в списке сертификатов для расшифровки выбран сертификат с несовместимым алгоритмом открытого ключа (алгоритмом подписи) или несовместимым алгоритмом шифрования.",
"Solution": "Уберите из списка сертификатов для расшифровки сертификат с несовместимым алгоритмом открытого ключа (алгоритмом подписи) или несовместимым алгоритмом шифрования.",
"RepairMethods": "",
"Anchor": "Неверные данные"
},
{
"ErrorText": "внутрен",
"Reason": "Программа электронной подписи установлена некорректно.",
"Solution": "Удалите все программы электронной подписи, почистите реестр с помощью утилиты КриптоПро <a href=\"https://www.cryptopro.ru/sites/default/files/public/cspclean.exe\">cspclean</a> и установите только одну из программ.",
"RepairMethods": "",
"Anchor": "Неверный ключ"
},
{
"ErrorText": "Произошла внутренняя ошибка",
"Reason": "Программа электронной подписи установлена некорректно.",
"Solution": "Удалите все программы электронной подписи, почистите реестр с помощью утилиты КриптоПро <a href=\"https://www.cryptopro.ru/sites/default/files/public/cspclean.exe\">cspclean</a> и установите только одну из программ.",
"RepairMethods": "",
"Anchor": "Неверный ключ"
},
{
"ErrorText": "0x00000056",
"Reason": "Указан неправильный пароль доступа к закрытому ключу.",
"Solution": "Убедитесь, что вводится правильный пароль (проверьте раскладку клавиатуры).См. <a href=\"http://1c-edo.ru/handbook/9/3981/\">инструкцию</a>.",
"RepairMethods": "",
"Anchor": "Неправильный пароль"
},
{
"ErrorText": "Контейнер закрытого ключа доступен, но операция с использованием этого контейнера завершилась неудачно",
"Reason": "- Указан неправильный пароль доступа к закрытому ключу.\n- Действие невозможно выполнить при снятом флажке \"Вводить пароль в программе электронной подписи\" (к примеру, если установлена усиленная защита закрытого ключа).",
"Solution": "- Убедитесь, что вводится правильный пароль (проверьте раскладку клавиатуры). См. <a href=\"http://1c-edo.ru/handbook/9/3984/\">инструкцию</a>\n- Установите флажок \"Вводить пароль в программе электронной подписи\" и повторите действие.",
"RepairMethods": "",
"Anchor": "Неправильный пароль"
},
{
"ErrorText": "контекст был получен в ограниченном режиме",
"Reason": "- Указан неправильный пароль доступа к закрытому ключу.\n- Действие невозможно выполнить при снятом флажке \"Вводить пароль в программе электронной подписи\" (к примеру, если установлена усиленная защита закрытого ключа).",
"Solution": "- Убедитесь, что вводится правильный пароль (проверьте раскладку клавиатуры). См. <a href=\"http://1c-edo.ru/handbook/9/3984/\">инструкцию</a>\n- Установите флажок \"Вводить пароль в программе электронной подписи\" и повторите действие.",
"RepairMethods": "",
"Anchor": "Неправильный пароль"
},
{
"ErrorText": "Цепочка сертификатов обработана, но прервана на корневом сертификате, который не является доверенным.",
"Reason": "Корневой сертификат не включен в список доверенных.",
"Solution": "Установите корневой сертификат удостоверяющего центра.",
"RepairMethods": "{\r\n\"МетодикиУстранения\": [\r\n\"УстановкаКорневогоСертификатаГУЦ\"\r\n]\r\n}",
"Anchor": "Нет корневого сертификата"
},
{
"ErrorText": "не имеет права на получение сертификата",
"Reason": "- Нет регистрации на http://portal.1c.ru.\n- Нет действующего тарифа \"Сервис 1С-Подпись\" (не подключен или не оплачен).\n- Уже использовано бесплатное получение электронной подписи по тарифу \"Сервис 1С-Подпись\".\n- В программе не настроено подключение к Интернет-поддержке пользователей или указаны учетные данные другого пользователя.\n- При работе через 1C-Fresh тариф \"Сервис 1С-Подпись\" не привязан к учетной записи.",
"Solution": "- Пройдите регистрацию на <a href=\"http://portal.1c.ru\">http://portal.1c.ru</a>\n- Обратитесь к обслуживающему партнеру 1С, за приобретением или оплатой тарифа \"сервис 1С:Подпись\".\n- Обратитесь к обслуживающему партнеру 1С за дополнительным получением электронной подписи.\n- Обратитесь к партнеру за уточнением логина и пароля к Интернет-поддержке пользователей, для которого куплен тариф \"Сервис 1С-Подпись\".\n- Обратитесь в техническую поддержку по адресу support@1cfresh.com, для привязки тарифа к учетной записи.",
"RepairMethods": "",
"Anchor": "Нет прав на получение сертификата"
},
{
"ErrorText": "Не предусмотрено использование ни одной программы с алгоритмом подписи",
"Reason": "Не заведена программа электронной подписи с необходимыми алгоритмами.",
"Solution": "- Добавьте новую программу электронной подписи в список программ. <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>.\n- Среди имеющихся программ криптографии найдите нужную и перезаполните алгоритмы значениями по умолчанию, перевыбрав Представление.",
"RepairMethods": "",
"Anchor": "Нет программы с алгоритмом подписи"
},
{
"ErrorText": "0x00000000",
"Reason": "- Закрытый ключ для выбранного сертификата не установлен.\n- Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "- Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n- Переустановите сертификат через оснастку программы электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n- Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"RepairMethods": "",
"Anchor": "Нет связи с закрытым ключом"
},
{
"ErrorText": "Отсутствует набор ключей",
"Reason": "- Закрытый ключ для выбранного сертификата не установлен.\n- Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "- Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n- Переустановите сертификат через оснастку программы электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/28/4008/\">инструкцию</a>)\n- Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"RepairMethods": "",
"Anchor": "Нет связи с закрытым ключом"
},
{
"ErrorText": "Сертификат не имеет связи с закрытым ключом",
"Reason": "- Закрытый ключ для выбранного сертификата не установлен.\n- Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "- Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n- Переустановите сертификат через оснастку программы электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)\n- Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"RepairMethods": "",
"Anchor": "Нет связи с закрытым ключом"
},
{
"ErrorText": "Отсутствует ключ",
"Reason": "- Закрытый ключ для выбранного сертификата не установлен.\n- Закрытый ключ установлен, но сертификат не имеет с ним связи.",
"Solution": "- Установите закрытый ключ (вставить токен или флешку с файлом закрытого ключа).\n- Переустановите сертификат через оснастку программы электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/28/4008/\">инструкцию</a>)\n- Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"RepairMethods": "",
"Anchor": "Нет связи с закрытым ключом"
},
{
"ErrorText": "Ошибка доступа",
"Reason": "- Истек срок действия закрытого ключа сертификата.\n- У программы электронной подписи (КриптоПро CSP) нет прав на изменение файлов закрытого ключа на диске.",
"Solution": "- Подайте заявление на новый сертификат.\n- Через оснастку КриптоПро CSP найдите контейнер закрытого ключа и определите его размещение, в операционной системе назначьте права на изменение этой папки и файлов в ней пользователю, от имени которого запускается 1С:Предприятие.",
"RepairMethods": "",
"Anchor": "Ошибка доступа"
},
{
"ErrorText": "Ошибка загрузки динамической библиотеки",
"Reason": "- Для операционных систем Linux или macOS в настройке «Путь к программе» указан некорректный путь к установленной программе электронной подписи КриптоПро CSP, либо сама программа установлена некорректно.\n- Из-за изменений в механизмах безопасности операционной системы macOS 10.15 Catalina нативные клиентские приложения могут не загружать внешние компоненты.",
"Solution": "- Проверьте наличие файлов в папках согласно указанным в настройке «Путь к программе». <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>\n- Проверьте и настройте права чтения к файлам, указанным в настройке «Путь к программе»\n- Переустановите программу электронной подписи КриптоПро CSP в стандартную папку.",
"RepairMethods": "",
"Anchor": "Ошибка загрузки динамической библиотеки"
},
{
"ErrorText": "Ошибка инициализации криптопровайдера",
"Reason": "- Нет доступа к выбранному месту хранения ключей.\n- Нажата кнопка Отмена в форме выбора носителя контейнера ключей (выбор места хранения контейнера).\n",
"Solution": "Проверьте наличие доступа к выбранному месту хранения ключей.",
"RepairMethods": "",
"Anchor": "Ошибка инициализации криптопровайдера"
},
{
"ErrorText": "Ошибка создания ключевой пары",
"Reason": "- Не установлен биологический датчик случайных чисел в программе электронной подписи.\n- Пользователь нажал Отмена в программе электронной подписи в форме датчик случайных чисел.",
"Solution": "Добавьте датчик случайных чисел в программе электронной подписи.",
"RepairMethods": "",
"Anchor": "Ошибка создания ключевой пары"
},
{
"ErrorText": "Не удалось проверить сертификат в списке отозванных",
"Reason": "- Не установлен список отозванных сертификатов или сервис проверки отозванных сертификатов недоступен.\n- Закончился срок действия списка отзыва.",
"Solution": "- Получите список отозванных сертификатов в Удостоверяющем центре и установите его. См. <a href=\"http://1c-edo.ru/handbook/24/2517/\">инструкцию</a>\n- Обратитесь в Удостоверяющий центр для обновления списка отзыва (в случае окончания его срока действия).",
"RepairMethods": "{\r\n\"МетодикиУстранения\": [\r\n\"УстановкаСпискаОтзываСертификатов\"\r\n]\r\n}",
"Anchor": "Сервер offline"
},
{
"ErrorText": "Сертификат не найден на компьютере",
"Reason": "Выбранный сертификат не установлен в Личное хранилище сертификатов или был удален из него.",
"Solution": "Установите сертификат в Личное хранилище сертификатов пользователя операционной системы. См. <a href=\"http://1c-edo.ru/handbook/28/4011/\">инструкцию</a>",
"RepairMethods": "",
"Anchor": "сертификат не установлен на компьютере"
},
{
"ErrorText": "Сертификат не установлен на компьютере",
"Reason": "Выбранный сертификат не установлен в Личное хранилище сертификатов или был удален из него.",
"Solution": "Установите сертификат в Личное хранилище сертификатов пользователя операционной системы. См. <a href=\"http://1c-edo.ru/handbook/28/4011/\">инструкцию</a>",
"RepairMethods": "",
"Anchor": "сертификат не установлен на компьютере"
},
{
"ErrorText": "Указан неверный алгоритм",
"Reason": "- Сертификат некорректно связан с закрытым ключом.\n- Включен Winlogon в КриптоПро CSP.",
"Solution": "- Переустановите сертификат через оснастку программы электронной подписи с привязкой к закрытому ключу. См. <a href=\"http://1c-edo.ru/handbook/28/4008/\">инструкцию</a>\n- Отключите Winlogon в программе электронной подписи КриптоПро CSP.",
"RepairMethods": "",
"Anchor": "Указан неверный алгоритм"
},
{
"ErrorText": "Ни один из файлов не существует",
"Reason": "- Программа электронной подписи не установлена.\n- В настройке «Путь к программе» указан некорректный путь (или пути через двоеточие) к файлам модулей (библиотек) программы электронной подписи.",
"Solution": "- Установите программу для работы с электронной подписью.\n- Укажите в настройке \"Путь к программе\" корректный путь (или пути через двоеточие) к файлам модулей (библиотек) программы электронной подписи. <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>",
"RepairMethods": "",
"Anchor": "Файл не существует"
},
{
"ErrorText": "Файл не существует",
"Reason": "- Программа электронной подписи не установлена.\n- В настройке «Путь к программе» указан некорректный путь (или пути через двоеточие) к файлам модулей (библиотек) программы электронной подписи.",
"Solution": "- Установите программу для работы с электронной подписью.\n- Укажите в настройке \"Путь к программе\" корректный путь (или пути через двоеточие) к файлам модулей (библиотек) программы электронной подписи. <a href=\"ОткрытьСписокПрограмм\">Открыть список программ электронной подписи</a>",
"RepairMethods": "",
"Anchor": "Файл не существует"
},
{
"ErrorText": "Хеш-значение неправильное",
"Reason": "- Подпись не является достоверной.\n- После подписания изменились данные объекта.",
"Solution": "Выберите корректный объект.",
"RepairMethods": "",
"Anchor": "Хеш-значение"
},
{
"ErrorText": "При получении данных для подписания возникла ошибка: Некорректный тип данных: Неопределенно",
"Reason": "- При добавлении файла в базу произошел сбой и его содержимое стало не консистентным.\n- Исходный файл «битый».",
"Solution": "- Удалить испорченный файл из базы и выполнить его повторное добавление, убедившись, что при этом не возникает ошибок.\n- Повторно получить исходный файл.",
"RepairMethods": "",
"Anchor": "Некорректный тип данных: Неопределенно"
},
{
"ErrorText": "Couldn't resolve host name",
"Reason": "- Сервер временно не доступен.\n- Неправильные параметры запроса.",
"Solution": "- Выполните проверку сертификата повторно.\n- Проверьте настройки сети и работоспособность сервера DSS.\n- Проверьте настройки и права сервера 1С на подключение к сервису DSS.\n- Проверьте настройки для TLS подключения (сертификаты сервера).\n",
"RepairMethods": "",
"Anchor": "Couldn't resolve host name"
},
{
"ErrorText": "Не удалось получить доверенную метку времени. Нераспознанный или неподдерживаемый идентификатор алгоритма.",
"Reason": "- Указан нерабочий адрес сервера меток времени.\n- Сервер меток времени не доступен в данный момент.",
"Solution": "- Укажите в настройках другой сервер меток времени: для этого перейдите в раздел Администрирование, затем в раздел Общие настройки, разверните группу Электронная подпись и шифрование. Замените первое значение в поле Адреса серверов меток времени.\n- Проверьте доступность серверов меток времени и повторите попытку подписи.",
"RepairMethods": "",
"Anchor": "Не удалось получить доверенную метку времени"
},
{
"ErrorText": "0x000004C7",
"Reason": "Программа криптографии (в частности Vipnet) не обнаружила закрытого ключа, размещение которого указано в имеющейся связке с открытой частью ключа (к примеру, переименована папка, ключ был перемещен в другую папку).",
"Solution": "- Определите новое размещение закрытого ключа и переустановите сертификат через оснастку программы электронной подписи с привязкой к закрытому ключу (см. <a href=\"http://1c-edo.ru/handbook/24/4179/\">инструкцию</a>)¶- Подайте заявление на новый сертификат, если закрытый ключ утерян.",
"RepairMethods": "",
"Anchor": "0x000004C7"
},
{
"ErrorText": "Не определен набор ключей",
"Reason": "Нет связи с закрытой частью ключа, размещенной на сервере DSS.",
"Solution": "- В настройках КриптоПРО CSP попробуйте отключиться от сервера и заново подключиться (возможно вы подключены не с тем логином).\n- Проверьте отсутствие ошибки в криптопровайдере: запустите инструменты КриптоПро CSP, перейдите к пункту \"Создание подписи\" и попытайтесь выполнить подпись. При наличии ошибки обратитесь в тех.поддержку организации, предоставляющей услуги по удаленному хранению закрытого ключа.",
"RepairMethods": "",
"Anchor": "Не определен набор ключей"
}
],
"LastChangeDate": "2022-06-06T17:16:06",
"Version": "2.0.0.4"
}
@@ -28,4 +28,13 @@
<comment>АПК:497 Не подлежит переводу, находится в локализованной части</comment>
<templateType>BinaryData</templateType>
</templates>
<templates uuid="0e7a34a8-ce5a-4767-8283-fd094e13d969">
<name>КлассификаторОшибокКриптографии</name>
<synonym>
<key>ru</key>
<value>Классификатор ошибок криптографии</value>
</synonym>
<comment>АПК:497 Не подлежит переводу, находится в локализованной части</comment>
<templateType>BinaryData</templateType>
</templates>
</mdclass:DataProcessor>
@@ -75,7 +75,7 @@
&НаСервере
Процедура ОтключитьНапоминание(ПараметрыНапоминания)
НапоминанияПользователяСлужебный.ОтключитьНапоминание(ПараметрыНапоминания, Ложь);
НапоминанияПользователяСлужебный.ОтключитьНапоминание(ПараметрыНапоминания, Ложь, Истина);
КонецПроцедуры
&НаКлиенте
@@ -100,6 +100,7 @@
ТекущийОбъект.ВремяСобытия = ТекущийОбъект.ВремяСобытия + 1;
КонецЦикла;
КонецЕсли;
ТекущийОбъект.ЗаписьИсторииДанных.ПредставленияПолейДополнительныхДанных.Вставить("БезОповещенияКлиента", "");
КонецПроцедуры
@@ -293,7 +294,7 @@
&НаСервере
Процедура ОтключитьНапоминание()
НапоминанияПользователяСлужебный.ОтключитьНапоминание(ИсходныеПараметры, Ложь);
НапоминанияПользователяСлужебный.ОтключитьНапоминание(ИсходныеПараметры, Ложь, Истина);
КонецПроцедуры
&НаСервереБезКонтекста
@@ -134,12 +134,12 @@
&НаСервере
Процедура ПодключитьНапоминание(ПараметрыНапоминания)
НапоминанияПользователяСлужебный.ПодключитьНапоминание(ПараметрыНапоминания, Истина);
НапоминанияПользователяСлужебный.ПодключитьНапоминание(ПараметрыНапоминания, Истина, Истина);
КонецПроцедуры
&НаСервере
Процедура ОтключитьНапоминание(ПараметрыНапоминания)
НапоминанияПользователяСлужебный.ОтключитьНапоминание(ПараметрыНапоминания);
НапоминанияПользователяСлужебный.ОтключитьНапоминание(ПараметрыНапоминания, , Истина);
КонецПроцедуры
&НаКлиенте
@@ -8,9 +8,23 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем СтарыеЗаписи, ГраницаСрокаНапоминания;
#КонецОбласти
#Область ОбработчикиСобытий
// АПК:75-выкл оповещение о напоминаниях должно быть при любом их изменении.
Процедура ПередЗаписью(Отказ, Замещение)
Если Не БезОповещенияКлиента(ЭтотОбъект) Тогда
ГраницаСрокаНапоминания = ТекущаяДатаСеанса()
+ НапоминанияПользователяСлужебный.ЗапасВремениНапоминанийДляКэша();
СтарыеЗаписи = СтарыеЗаписи(ЭтотОбъект, Отказ, Замещение);
КонецЕсли;
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
@@ -18,10 +32,154 @@
Для Каждого Запись Из ЭтотОбъект Цикл
Запись.ПредставлениеИсточника = ОбщегоНазначения.ПредметСтрокой(Запись.Источник);
КонецЦикла;
КонецПроцедуры
Процедура ПриЗаписи(Отказ, Замещение)
Если Не БезОповещенияКлиента(ЭтотОбъект) Тогда
ОтправитьОповещениеКлиенту(СтарыеЗаписи, ЭтотОбъект, Отказ, Замещение);
КонецЕсли;
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КонецПроцедуры
// АПК:75-вкл
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция БезОповещенияКлиента(ТекущийОбъект)
Возврат ТекущийОбъект.ЗаписьИсторииДанных.ПредставленияПолейДополнительныхДанных.Получить("БезОповещенияКлиента") <> Неопределено
Или ТекущийОбъект.ДополнительныеСвойства.Свойство("БезОповещенияКлиента");
КонецФункции
Процедура ОтправитьОповещениеКлиенту(СтарыеЗаписи, НовыеЗаписи, Отказ, Замещение)
Если Отказ
Или Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат;
КонецЕсли;
СписокПолей = "Пользователь, ВремяСобытия, Источник, СрокНапоминания, Описание";
Если Замещение Тогда
ИзмененныеЗаписи = ИзмененныеЗаписи(СтарыеЗаписи, НовыеЗаписи, СписокПолей);
Иначе
ИзмененныеЗаписи = ЭтотОбъект;
КонецЕсли;
НапоминанияПользователей = Новый Соответствие;
Для Каждого Запись Из ИзмененныеЗаписи Цикл
Если Запись.СрокНапоминания > ГраницаСрокаНапоминания Тогда
Продолжить;
КонецЕсли;
Напоминания = НапоминанияПользователей.Получить(Запись.Пользователь);
Если Напоминания = Неопределено Тогда
Напоминания = НапоминанияПользователяСлужебный.НовыеИзмененныеНапоминания();
НапоминанияПользователей.Вставить(Запись.Пользователь, Напоминания);
КонецЕсли;
Свойства = Новый Структура(СписокПолей);
ЗаполнитьЗначенияСвойств(Свойства, Запись);
Свойства.Вставить("ИндексКартинки", 2);
Если Не Замещение Или Запись.ВидИзмененияСтроки = 1 Тогда
Напоминания.Добавленные.Добавить(Свойства);
Иначе
Напоминания.Удаленные.Добавить(Свойства);
КонецЕсли;
КонецЦикла;
ИмяОповещения = НапоминанияПользователяКлиентСервер.ИмяСерверногоОповещения();
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Для Каждого КлючИЗначение Из НапоминанияПользователей Цикл
ПользовательИБ = Пользователи.НайтиПоСсылке(КлючИЗначение.Ключ);
Если ПользовательИБ = Неопределено Тогда
Продолжить;
КонецЕсли;
Адресаты = Новый Соответствие;
Адресаты.Вставить(ПользовательИБ.УникальныйИдентификатор,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("*"));
СерверныеОповещения.ОтправитьСерверноеОповещение(ИмяОповещения,
КлючИЗначение.Значение, Адресаты);
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецПроцедуры
Функция СтарыеЗаписи(НаборЗаписей, Отказ, Замещение)
Если Отказ
Или Не Замещение
Или Не ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя") Тогда
Возврат Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Напоминания.Пользователь КАК Пользователь,
| Напоминания.ВремяСобытия КАК ВремяСобытия,
| Напоминания.Источник КАК Источник,
| Напоминания.СрокНапоминания КАК СрокНапоминания,
| Напоминания.Описание КАК Описание,
| -1 КАК ВидИзмененияСтроки
|ИЗ
| РегистрСведений.НапоминанияПользователя КАК Напоминания
|ГДЕ
| Напоминания.СрокНапоминания <= &ГраницаСрокаНапоминания
| И &УсловиеОтбора";
Запрос.УстановитьПараметр("ГраницаСрокаНапоминания", ГраницаСрокаНапоминания);
УсловиеОтбора = "ИСТИНА";
Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл
Если Не ЭлементОтбора.Использование Тогда
Продолжить;
КонецЕсли;
УсловиеОтбора = УсловиеОтбора + "
| И " + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя;
Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение);
КонецЦикла;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", УсловиеОтбора);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Функция ИзмененныеЗаписи(СтарыеЗаписи, НовыеЗаписи, СписокПолей)
Для Каждого Запись Из НовыеЗаписи Цикл
Если Запись.СрокНапоминания > ГраницаСрокаНапоминания Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = СтарыеЗаписи.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Запись);
НоваяСтрока.ВидИзмененияСтроки = 1;
КонецЦикла;
СтарыеЗаписи.Свернуть(СписокПолей, "ВидИзмененияСтроки");
Строки = СтарыеЗаписи.НайтиСтроки(Новый Структура("ВидИзмененияСтроки", 0));
Для Каждого Строка Из Строки Цикл
СтарыеЗаписи.Удалить(Строка);
КонецЦикла;
Возврат СтарыеЗаписи;
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли
@@ -325,8 +325,10 @@
ТекущееФоновоеЗадание = ТекущийСеанс.ПолучитьФоновоеЗадание();
МетаданныеЗадания = Метаданные.РегламентныеЗадания.ЗаполнениеПараметровРаботыРасширений;
Запустить = ТекущееФоновоеЗадание = Неопределено
Или ТекущееФоновоеЗадание.ИмяМетода <> МетаданныеЗадания.ИмяМетода;
Запустить = ТекущееФоновоеЗадание <> Неопределено
И ТекущееФоновоеЗадание.ИмяМетода <> МетаданныеЗадания.ИмяМетода
И (Не ОбщегоНазначения.РазделениеВключено()
Или ОбластьДанныхАктивноИспользуется());
ВключитьЗаполнениеПараметровРаботыРасширений(Запустить);
@@ -813,6 +815,42 @@
КонецФункции
Функция ОбластьДанныхАктивноИспользуется()
Сутки = 60*60*24;
ИмяКонстанты = "ДатаПоследнегоСтартаКлиентскогоСеанса";
МетаданныеКонстанты = Метаданные.Константы.Найти(ИмяКонстанты);
Если МетаданныеКонстанты <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ГраницаСтарта", ТекущаяУниверсальнаяДата() - Сутки*2);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЗначениеИстина
|ИЗ
| &Таблица КАК Таблица
|ГДЕ
| Таблица.Значение >= &ГраницаСтарта";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", МетаданныеКонстанты.ПолноеИмя());
Если Не Запрос.Выполнить().Пустой() Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ГраницаАктивности",
НачалоДня(ТекущаяДатаСеанса() - 60*60) - Сутки);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЗначениеИстина
|ИЗ
| РегистрСведений.СведенияОПользователях КАК СведенияОПользователях
|ГДЕ
| СведенияОПользователях.ДатаПоследнейАктивности >= &ГраницаАктивности";
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
// Для процедур ПриПервомСерверномВызове, ПриУспешномНачалеВыполненияРегламентногоЗадания,
// общей формы Расширения и СтандартныеПодсистемыСервер.ПослеЗагрузкиДанных.
//
@@ -882,11 +882,17 @@
МодульОбменДаннымиСервер.ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ();
КонецЕсли;
Если СообщитьПрогресс Тогда
ДлительныеОперации.СообщитьПрогресс(5);
ИначеЕсли ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда
МодульАвтономнаяРаботаСлужебный = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРаботаСлужебный");
Если МодульАвтономнаяРаботаСлужебный.НеобходимоВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Тогда
МодульАвтономнаяРаботаСлужебный.ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(Истина);
КонецЕсли;
КонецЕсли;
Если СообщитьПрогресс Тогда
ДлительныеОперации.СообщитьПрогресс(5);
КонецЕсли;
// Проверка загрузки идентификаторов объектов метаданных из главного узла.
СписокКритичныхИзменений = "";
Попытка
@@ -23,6 +23,16 @@
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей");
ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ВнешниеПользователи");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
@@ -30,7 +30,7 @@
Процедура ОбновитьВерсиюДатЗапретаИзмененияПриЗагрузкеДанных()
// Изменения в обычном режиме записи регистрируются в общем модуле ПользователиСлужебный
// в процедуре ПослеОбновленияСоставовГруппПользователейПереопределяемый.
// в процедуре ПослеОбновленияСоставовГруппПользователей.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда
МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный");
@@ -26,11 +26,12 @@
ПериодСравненияНастройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПериодСравнения");
ПериодСравненияНастройкаПользовательская = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ПериодСравненияНастройка.ИдентификаторПользовательскойНастройки);
Период = ПериодСравненияНастройкаПользовательская.Значение; // СтандартныйПериод
Если ПериодСравненияНастройкаПользовательская <> Неопределено
И ПериодСравненияНастройкаПользовательская.Использование Тогда
Период = ПериодСравненияНастройкаПользовательская.Значение; // СтандартныйПериод
ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериодаСравненияЧисло");
ПараметрДанных.Значение = (УниверсальноеВремя(Период.ДатаНачала) - Дата(1,1,1)) * 1000;
ПараметрДанных.Использование = Истина;
@@ -398,6 +398,26 @@
КонецЕсли;
КонецЕсли;
Если СвойстваНастройки.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных.ОбъектМетаданных") Тогда
Если ТипЗнч(СвойстваНастройки.ПользовательскаяНастройкаКД.Значение) = Тип("СписокЗначений") Тогда
Для Каждого Элемент Из СвойстваНастройки.ПользовательскаяНастройкаКД.Значение Цикл
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Элемент.Значение);
Если ОбъектМетаданных = Неопределено Тогда
Продолжить;
КонецЕсли;
Элемент.Представление = ОбъектМетаданных.Представление();
КонецЦикла;
ИначеЕсли ТипЗнч(СвойстваНастройки.ПользовательскаяНастройкаКД.Значение) = Тип("Строка") Тогда
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(СвойстваНастройки.ПользовательскаяНастройкаКД.Значение);
Если ОбъектМетаданных = Неопределено Тогда
Возврат;
КонецЕсли;
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить(СвойстваНастройки.ПользовательскаяНастройкаКД.Значение, ОбъектМетаданных.Представление());
СвойстваНастройки.ПользовательскаяНастройкаКД.Значение = СписокЗначений;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -624,6 +624,93 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДомаЗданияСтроения</name>
<right>
@@ -5429,93 +5516,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>true</value>
</right>
<right>
<name>DataAdministration</name>
<value>true</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>true</value>
</right>
<right>
<name>ExclusiveMode</name>
<value>true</value>
</right>
<right>
<name>ActiveUsers</name>
<value>true</value>
</right>
<right>
<name>EventLog</name>
<value>true</value>
</right>
<right>
<name>ThinClient</name>
<value>true</value>
</right>
<right>
<name>WebClient</name>
<value>true</value>
</right>
<right>
<name>ThickClient</name>
<value>true</value>
</right>
<right>
<name>ExternalConnection</name>
<value>true</value>
</right>
<right>
<name>Automation</name>
<value>true</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
<right>
<name>SaveUserData</name>
<value>true</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>true</value>
</right>
<right>
<name>Output</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ЗагрузитьКурсыВалют</name>
<right>
@@ -286,6 +286,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДомаЗданияСтроения</name>
<right>
@@ -2754,33 +2781,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>SessionParameter.ОбластьДанныхЗначение</name>
<right>
@@ -202,6 +202,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДомаЗданияСтроения</name>
<right>
@@ -2257,33 +2284,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>SessionParameter.ОбластьДанныхЗначение</name>
<right>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.СвязатьсяСоСпециалистомОнлайнПоддержки</name>
<right>
@@ -38,31 +65,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -52,6 +52,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>WebService.Exchange.Operation.PutFileIntoStorage</name>
<right>
@@ -569,33 +596,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>WebService.Exchange_3_0_1_1.Operation.PutFilePart</name>
<right>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДомаЗданияСтроения</name>
<right>
@@ -256,31 +283,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>DataProcessor.ЗагрузкаКлассификатораБанков.Command.ЗагрузкаКлассификатораБанков</name>
<right>
@@ -60,31 +87,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -42,6 +42,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ВариантыОтчетов.Command.Открыть</name>
<right>
@@ -179,31 +206,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -192,6 +192,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Constant.ЗапретитьОтображениеНебезопасногоСодержимогоВПисьмах</name>
<right>
@@ -1411,33 +1438,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>DocumentJournal.Взаимодействия.Command.НаписатьSMSПоПредмету</name>
<right>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ВидыКонтактнойИнформации</name>
<right>
@@ -81,31 +108,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonForm.ГруппыПользователей</name>
<right>
@@ -113,31 +140,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -26,6 +26,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.Календари</name>
<right>
@@ -88,31 +115,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -18,6 +18,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Report.ДатыЗапретаИзменения</name>
<right>
@@ -85,33 +112,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляРегистра(Регистр, Поле1, Поле2, Поле3, Поле4, Поле5)</name>
<condition>// ДляРегистра(Регистр, Поле1, Поле2 = "", Поле3 = "", Поле4 = "", Поле5 = "")
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам</name>
<right>
@@ -109,31 +136,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -81,6 +81,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonForm.РедактированиеГиперссылки</name>
<right>
@@ -173,31 +200,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -44,6 +44,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Task.ЗадачаИсполнителя</name>
<right>
@@ -204,33 +231,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДанныеБизнесПроцессов.Command.МоиБизнесПроцессы</name>
<right>
@@ -3,6 +3,33 @@
<setForNewObjects>false</setForNewObjects>
<setForAttributesByDefault>true</setForAttributesByDefault>
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.Заметки</name>
<right>
@@ -77,33 +104,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.Заметки.Command.ВсеЗаметки</name>
<right>
@@ -26,6 +26,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.ДанныеПроизводственногоКалендаря</name>
<right>
@@ -107,31 +134,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -26,6 +26,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.Валюты</name>
<right>
@@ -76,31 +103,4 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -65,6 +65,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ВариантыОтчетов.Command.Открыть</name>
<right>
@@ -172,33 +199,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляОбъекта(ПолеОбъекта)</name>
<condition>// ДляОбъекта(ПолеОбъекта = "")
@@ -14,6 +14,33 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ШаблоныСообщенийПрисоединенныеФайлы</name>
<right>
@@ -194,33 +221,6 @@
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>MainWindowModeNormal</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeEmbeddedWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeFullscreenWorkplace</name>
<value>true</value>
</right>
<right>
<name>MainWindowModeKiosk</name>
<value>true</value>
</right>
<right>
<name>AnalyticsSystemClient</name>
<value>true</value>
</right>
</object>
<restrictionTemplate>
<name>ДляОбъекта(ПолеОбъекта)</name>
<condition>// ДляОбъекта(ПолеОбъекта = "")
Loaded 100 of 155 files, more files were not shown because too many files have changed in this diff. Show more