3_1_11_299

This commit is contained in:
Компания 1С committed 2025-09-13 23:13:00 +03:00
1 parent 5a3a164f99
commit 722ba9b717
55 files changed
+1172 -1010

No files matched your search

@@ -1146,7 +1146,9 @@
Если ПараметрыРегистрации.Успех Тогда
ЗаполнитьКоманды(КомандыСохраненные);
НазначениеВариантаОтчета = ПараметрыРегистрации.НазначениеВариантаОтчета;
Если ПараметрыРегистрации.Свойство("НазначениеВариантаОтчета") Тогда
НазначениеВариантаОтчета = ПараметрыРегистрации.НазначениеВариантаОтчета;
КонецЕсли;
ИначеЕсли ПараметрыРегистрации.ИмяОбъектаЗанято Тогда
ПредставлениеЗанявших = "";
Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл
@@ -1224,21 +1224,13 @@
ФИОДоверителя = СведенияОФизическомЛице.ФИО;
АдресМестаЖительства = СведенияОФизическомЛице.АдрМЖ;
СведенияОДокументеУдостоверяющемЛичность = СведенияОФизическомЛице.УдЛичнФЛ;
СведенияОДокументеУдостоверяющемЛичность = СведенияОФизическомЛице.УдЛичнФЛ;
Фамилия = ФИОДоверителя.Фамилия;
Имя = ФИОДоверителя.Имя;
Отчество = ФИОДоверителя.Отчество;
Если ЗначениеЗаполнено(Отчество) Тогда
ФИО = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 %2 %3'"),
Фамилия, Имя, Отчество);
Иначе
ФИО = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 %2'"),
Фамилия, Имя);
КонецЕсли;
ФИО = МашиночитаемыеДоверенностиФНССлужебный.ФИОСтрокой(ФИОДоверителя);
КодВидаДокумента = Неопределено;
СерияИНомерДокумента = Неопределено;
@@ -292,6 +292,7 @@
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<markRequiredComplete>true</markRequiredComplete>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
@@ -301,6 +302,7 @@
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<extendedEditMultipleValues>true</extendedEditMultipleValues>
<autoMarkIncomplete>true</autoMarkIncomplete>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
@@ -47,6 +47,8 @@
Должность = "";
НаименованиеОрганизации = "";
ОГРН = "";
Иначе
ИННФЛ = "";
КонецЕсли;
УстановитьВидимостьИДоступность(ЭтотОбъект);
@@ -173,7 +175,10 @@
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьИДоступность(Форма)
Форма.Элементы.ГруппаОрганизация.Видимость = Форма.ВидПодписанта = "ЮридическоеЛицо";
ЭтоЮрЛицо = Форма.ВидПодписанта = "ЮридическоеЛицо";
Форма.Элементы.ГруппаОрганизация.Видимость = ЭтоЮрЛицо;
Форма.Элементы.ИННФЛ.Видимость = Не ЭтоЮрЛицо;
КонецПроцедуры
@@ -14,10 +14,10 @@
НомерТелефона = Прав(Объект.НомерТелефона, 10);
ИспользуетсяАвтоНаименование = ИспользуетсяАвтоНаименование(Объект);
Если ЗначениеЗаполнено(Объект.ИННФЛ) И Не ЗначениеЗаполнено(Объект.ИНН) Тогда
ВидПодписанта = "ИндивидуальныйПредприниматель"
Если ЗначениеЗаполнено(Объект.ИНН) Тогда
ВидПодписанта = "ЮридическоеЛицо";
Иначе
ВидПодписанта = "ЮридическоеЛицо"
ВидПодписанта = "ИндивидуальныйПредприниматель";
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.Ключ) Тогда
@@ -116,6 +116,8 @@
Объект.Должность = "";
Объект.НаименованиеОрганизации = "";
Объект.ОГРН = "";
Иначе
Объект.ИННФЛ = "";
КонецЕсли;
УстановитьВидимостьИДоступность(ЭтотОбъект);
КонецПроцедуры
@@ -147,8 +149,11 @@
Элементы.НомерТелефона.ТолькоПросмотр = Истина;
КонецЕсли;
ЭтоЮрЛицо = Форма.ВидПодписанта = "ЮридическоеЛицо";
Элементы.ВидПодписанта.Видимость = Не Элементы.ВидПодписанта.ТолькоПросмотр;
Элементы.ГруппаОрганизация.Видимость = Форма.ВидПодписанта = "ЮридическоеЛицо";
Элементы.ГруппаОрганизация.Видимость = ЭтоЮрЛицо;
Элементы.ИННФЛ.Видимость = Не ЭтоЮрЛицо;
Элементы.НаименованиеОрганизации.Видимость = Не ЗначениеЗаполнено(Объект.Организация)
Или ЗначениеЗаполнено(Объект.НаименованиеОрганизации);
@@ -42,16 +42,19 @@
Наименование = Новый Массив;
ФИО = "";
Если ЗначениеЗаполнено(Объект.Фамилия) Тогда
СтруктураФИО = Новый Структура("Фамилия, Имя, Отчество", Объект.Фамилия, Объект.Имя, Объект.Отчество);
ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(СтруктураФИО);
ИначеЕсли ЗначениеЗаполнено(Объект.ФизическоеЛицо) Тогда
ФИО = Объект.ФизическоеЛицо;
Иначе
ИначеЕсли ЗначениеЗаполнено(Объект.ИННФЛ) Тогда
ФИО = Объект.ИННФЛ;
КонецЕсли;
Наименование.Добавить(ФИО);
Если ЗначениеЗаполнено(ФИО) Тогда
Наименование.Добавить(ФИО);
КонецЕсли;
Организация = Неопределено;
Если ЗначениеЗаполнено(Объект.ИНН) Или ФИО = Объект.ИННФЛ Тогда
@@ -171,7 +171,6 @@
</toolTip>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillChecking>ShowError</fillChecking>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
@@ -1014,7 +1014,7 @@
// Параметры:
// ПроизводственныйКалендарь - СправочникСсылка.ПроизводственныеКалендари - текущий элемент справочника.
// НомерГода - Число - номер года, за который необходимо записать производственный календарь.
// ДанныеПроизводственногоКалендаря - см. Справочник.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря.
// ДанныеПроизводственногоКалендаря - см. Справочники.ПроизводственныеКалендари.ДанныеПроизводственногоКалендаря
//
Процедура ЗаписатьДанныеПроизводственногоКалендаря(ПроизводственныйКалендарь, НомерГода, ДанныеПроизводственногоКалендаря) Экспорт
@@ -54,20 +54,6 @@
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Не ИспользуетсяСОбъектамиАдресации Тогда
Набор = РегистрыСведений.ИсполнителиЗадач.СоздатьНаборЗаписей();
Набор.Отбор.РольИсполнителя.Установить(Ссылка);
Набор.Записать();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -68,14 +68,14 @@
Если Элементы.СертификатыФизическоеЛицо.Видимость И ДляПоискаФизическихЛиц.Количество() > 0 Тогда
ФизическиеЛица = ЭлектроннаяПодписьСлужебный.ПолучитьФизическиеЛицаПоПолюСертификатаКомуВыдан(ДляПоискаФизическихЛиц);
ФизическиеЛицаПоФИО = ЭлектроннаяПодписьСлужебный.ПолучитьФизическиеЛицаПоПолюСертификатаКомуВыдан(ДляПоискаФизическихЛиц);
Для Каждого ТекущаяСтрока Из Сертификаты Цикл
Если ЗначениеЗаполнено(ТекущаяСтрока.ФизическоеЛицо) Тогда
Продолжить;
КонецЕсли;
МассивЗначений = ФизическиеЛица.Получить(ТекущаяСтрока.КомуВыдан);
МассивЗначений = ФизическиеЛицаПоФИО.Получить(ТекущаяСтрока.КомуВыдан);
Если ТипЗнч(МассивЗначений) = Тип("Массив") И МассивЗначений.Количество() = 1 Тогда
ТекущаяСтрока.ФизическоеЛицо = МассивЗначений[0];
ТекущаяСтрока.Обновить = Истина;
@@ -299,11 +299,11 @@
Возврат;
КонецЕсли;
ФизическиеЛица = Результат.ФизическиеЛица.Получить(ТекущиеДанные.КомуВыдан);
ФизическиеЛицаДляФИО = Результат.ФизическиеЛица.Получить(ТекущиеДанные.КомуВыдан);
СтандартнаяОбработка = Ложь;
Если ФизическиеЛица = Неопределено Тогда
Если ФизическиеЛицаДляФИО = Неопределено Тогда
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбораФизическогоЛица", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
@@ -312,9 +312,9 @@
Возврат;
КонецЕсли;
Если ФизическиеЛица.Количество() = 1 Тогда
Если ТекущиеДанные.ФизическоеЛицо <> ФизическиеЛица[0] Тогда
ТекущиеДанные.ФизическоеЛицо = ФизическиеЛица[0];
Если ФизическиеЛицаДляФИО.Количество() = 1 Тогда
Если ТекущиеДанные.ФизическоеЛицо <> ФизическиеЛицаДляФИО[0] Тогда
ТекущиеДанные.ФизическоеЛицо = ФизическиеЛицаДляФИО[0];
Иначе
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбораФизическогоЛица", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
@@ -330,7 +330,7 @@
Отбор = ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ФизическиеЛица;
Отбор.ПравоеЗначение = ФизическиеЛицаДляФИО;
Отбор.Использование = Истина;
ПараметрыФормы = Новый Структура;
@@ -1046,7 +1046,6 @@
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыВопроса.Заголовок = НСтр("ru = 'Подпись будет неверна'");
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
Кнопки = Новый СписокЗначений;
@@ -1054,11 +1053,21 @@
Кнопки.Добавить("РазрешитьПодписание", НСтр("ru = 'Разрешить подписание'"));
Кнопки.Добавить("ПоказатьОшибку", НСтр("ru = 'Подробности...'"));
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат не прошел проверку. Подпись, установленная таким сертификатом, будет неверна.
|
|%1'"), ЭлектроннаяПодписьСлужебныйКлиентСервер.ОбщееОписаниеОшибки(
Результат.ОписаниеОшибкиНаКлиенте, Результат.ОписаниеОшибкиНаСервере, Неопределено));
Если Результат.ТребуетсяПроверка = Истина Тогда
ПараметрыВопроса.Заголовок = НСтр("ru = 'Подпись будет не проверена'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат не прошел проверку. Подпись, установленная таким сертификатом, будет требовать проверки.
|
|%1'"), ЭлектроннаяПодписьСлужебныйКлиентСервер.ОбщееОписаниеОшибки(
Результат.ОписаниеОшибкиНаКлиенте, Результат.ОписаниеОшибкиНаСервере, Неопределено));
Иначе
ПараметрыВопроса.Заголовок = НСтр("ru = 'Подпись будет неверна'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сертификат не прошел проверку. Подпись, установленная таким сертификатом, будет неверна.
|
|%1'"), ЭлектроннаяПодписьСлужебныйКлиентСервер.ОбщееОписаниеОшибки(
Результат.ОписаниеОшибкиНаКлиенте, Результат.ОписаниеОшибкиНаСервере, Неопределено));
КонецЕсли;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ТекстОшибки, Кнопки, ПараметрыВопроса);
Возврат;
@@ -61,7 +61,8 @@
БыстрыйВыбор = Истина;
КонецЕсли;
Если Не ОграничиватьВыборУказаннымиЗначениями И БыстрыйВыбор И Не Параметры.ЗначенияДляВыбораЗаполнены Тогда
Если Не ОграничиватьВыборУказаннымиЗначениями И БыстрыйВыбор
И (Параметры.ПараметрыВыбора.Количество() > 0 Или Не Параметры.ЗначенияДляВыбораЗаполнены) Тогда
ЗначенияДляВыбора = ОтчетыСервер.ЗначенияДляВыбора(Параметры);
КонецЕсли;
@@ -64,10 +64,11 @@
КонецЕсли;
Иначе
КоллекцияПечатныхФорм = Параметры.КоллекцияПечатныхФорм;
ИсключитьОфисныеДокументыИзКомплектов(КоллекцияПечатныхФорм);
ОбъектыПечати = Параметры.ОбъектыПечати;
КонецЕсли;
ИсключитьОфисныеДокументыИзКомплектов(КоллекцияПечатныхФорм);
Если Параметры.Сообщения <> Неопределено Тогда
Для Каждого Сообщение Из Параметры.Сообщения Цикл
ОбщегоНазначения.СообщитьПользователю(Сообщение.Текст);
@@ -671,30 +672,20 @@
&НаСервере
Процедура ИсключитьОфисныеДокументыИзКомплектов(КоллекцияПечатныхФорм)
ЕстьТабличныеДокументы = Ложь;
ЕстьОфисныеДокументы = Ложь;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
ЕстьТабличныеДокументы = ЕстьТабличныеДокументы Или ПечатнаяФорма.ТабличныйДокумент.ВысотаТаблицы <> 0;
ЕстьОфисныеДокументы = ЕстьОфисныеДокументы Или (ПечатнаяФорма.ОфисныеДокументы <> Неопределено
И ПечатнаяФорма.ОфисныеДокументы.Количество() <> 0);
Если ЕстьТабличныеДокументы И ЕстьОфисныеДокументы Тогда
Прервать;
ОфисныеДокументы = Новый Массив;
Для Счетчик = 1 По КоллекцияПечатныхФорм.Количество() Цикл
Индекс = КоллекцияПечатныхФорм.Количество() - Счетчик;
ПечатнаяФорма = КоллекцияПечатныхФорм[Индекс];
Если ПечатнаяФорма.ОфисныеДокументы <> Неопределено Тогда
ОфисныеДокументы.Добавить(Индекс);
КонецЕсли;
КонецЦикла;
Если ЕстьТабличныеДокументы И ЕстьОфисныеДокументы Тогда
Индекс = 0;
Пока Истина Цикл
Если Индекс > КоллекцияПечатныхФорм.ВГраница() Тогда
Прервать;
КонецЕсли;
ПечатнаяФорма = КоллекцияПечатныхФорм[Индекс];
Если ПечатнаяФорма.ОфисныеДокументы <> Неопределено И ПечатнаяФорма.ОфисныеДокументы.Количество() <> 0 Тогда
КоллекцияПечатныхФорм.Удалить(Индекс);
Индекс = Индекс - 1;
КонецЕсли;
Индекс = Индекс + 1;
Если КоллекцияПечатныхФорм.Количество() > ОфисныеДокументы.Количество() Тогда
Для Каждого Индекс Из ОфисныеДокументы Цикл
КоллекцияПечатныхФорм.Удалить(Индекс);
КонецЦикла;
КонецЕсли;
@@ -799,7 +799,9 @@
Результат = Истина;
Если ТипЗнч(ИнфоОПеренаправлении) = Тип("Структура") Тогда
Если ТипЗнч(ИнфоОПеренаправлении) = Тип("Структура")
И (ТипЗнч(ИнфоОПеренаправлении.Исполнитель) = Тип("СправочникСсылка.Пользователи")
Или ТипЗнч(ИнфоОПеренаправлении.Исполнитель) = Тип("СправочникСсылка.ВнешниеПользователи")) Тогда
ОписаниеПользователя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИнфоОПеренаправлении.Исполнитель, "Недействителен,ПометкаУдаления");
Если ОписаниеПользователя.Недействителен
@@ -3233,6 +3233,31 @@
КонецФункции
Процедура ОбработатьОснованияПисьма(СтрокаИдентификаторов)
СтрокаИдентификаторов = СтрЗаменить(СтрокаИдентификаторов, " ", Символы.ПС);
СтрокиДоОбработки = СтрРазделить(СтрокаИдентификаторов, Символы.ПС, Ложь);
СтрокиПослеОбработки = Новый Массив;
Для Каждого СтрокаОснований Из СтрокиДоОбработки Цикл
Если Не СтрНачинаетсяС(СтрокаОснований, "<") Тогда
СтрокаОснований = "<" + СтрокаОснований;
КонецЕсли;
Если Не СтрЗаканчиваетсяНа(СтрокаОснований, ">") Тогда
СтрокаОснований = СтрокаОснований + ">";
КонецЕсли;
СтрокиПослеОбработки.Добавить(СтрокаОснований);
КонецЦикла;
СтрокаИдентификаторов = СтрСоединить(СтрокиПослеОбработки, " ");
КонецПроцедуры
Функция ПараметрыПисьмаДляОтправки(Объект) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
@@ -3256,10 +3281,12 @@
ПараметрыПисьма.Вставить("ТипТекста", Объект.ТипТекста);
Если Не ПустаяСтрока(Объект.ИдентификаторОснования) Тогда
ОбработатьОснованияПисьма(Объект.ИдентификаторОснования);
ПараметрыПисьма.Вставить("ИдентификаторОснования", Объект.ИдентификаторОснования);
КонецЕсли;
Если Не ПустаяСтрока(Объект.ИдентификаторыОснований) Тогда
ОбработатьОснованияПисьма(Объект.ИдентификаторыОснований);
ПараметрыПисьма.Вставить("ИдентификаторыОснований", Объект.ИдентификаторыОснований);
КонецЕсли;
@@ -203,7 +203,7 @@
// АПК:134-вкл
// АПК:142-вкл
// Запустить выполнение функции в многопоточном фоновом задании, если это возможно.
// Запускает выполнение функции в многопоточном фоновом задании, если это возможно.
// Вызываемая процедура может быть с произвольным числом параметров, но не более 7.
// Значения передаваемых параметров процедуры, а также возвращаемое значение должны быть сериализуемыми.
// Параметры процедуры не должны быть возвращаемыми.
@@ -242,55 +242,15 @@
// * КраткоеПредставлениеОшибки - Строка - устарел.
// * ПодробноеПредставлениеОшибки - Строка - устарел.
//
Функция ВыполнитьФункциюВНесколькоПотоков(ИмяФункции, Знач ПараметрыВыполнения, Знач НаборПараметровФункции = Неопределено) Экспорт
Функция ВыполнитьФункциюВНесколькоПотоков(ИмяФункции, ПараметрыВыполнения, НаборПараметровФункции = Неопределено) Экспорт
ПроверитьВозможностьЗапускаМногопоточнойДлительнойОперации(ПараметрыВыполнения, НаборПараметровФункции);
Если ПараметрыВыполнения.ОжидатьЗавершение = ОбщиеПараметрыВыполненияВФоне().ОжидатьЗавершение Тогда
ПараметрыВыполнения.ОжидатьЗавершение = 0;
КонецЕсли;
АдресаРезультатов = Новый Соответствие;
Если ТипЗнч(НаборПараметровФункции) = Тип("Соответствие") Тогда
Для Каждого ПараметрФункции Из НаборПараметровФункции Цикл
АдресРезультатаПотока = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
АдресаРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока);
КонецЦикла;
ПараметрыМетода = НаборПараметровФункции.Количество();
Иначе
ПараметрыМетода = НаборПараметровФункции; // Структура
НаборПараметровФункции = Новый Соответствие;
КонецЕсли;
ИдентификаторПроцесса = Новый УникальныйИдентификатор;
ПараметрыМногопоточнойОперации = ПараметрыМногопоточнойОперации(ИдентификаторПроцесса);
ПараметрыМногопоточнойОперации.ИмяМетода = ИмяФункции;
ПараметрыМногопоточнойОперации.ЭтоФункция = "Функция";
ПараметрыМногопоточнойОперации.ПараметрыВыполнения = ПараметрыВыполнения;
ПараметрыМногопоточнойОперации.ПараметрыМетода = ПараметрыМетода;
ПодготовитьМногопоточнуюОперациюКЗапуску(ИмяФункции,
АдресаРезультатов, ИдентификаторПроцесса, НаборПараметровФункции);
РезультатЗапуска = Новый Структура("Статус, ИдентификаторЗадания, АдресРезультата",
СтатусДлительнойОперации().Выполняется);
ЗапланироватьЗапускПотоковДлительныхОпераций(РезультатЗапуска, ПараметрыМногопоточнойОперации);
РезультатЗапуска = ВыполнитьФункцию(ПараметрыВыполнения,
ИмяМетодаМногопоточногоПроцесса(), ПараметрыМногопоточнойОперации);
Если РезультатЗапуска.Статус <> СтатусДлительнойОперации().Выполняется Тогда
УдалитьДанныеОПотоках(ИдентификаторПроцесса);
КонецЕсли;
Возврат РезультатЗапуска;
Возврат ВыполнитьМетодВНесколькоПотоков(ИмяФункции, ПараметрыВыполнения, НаборПараметровФункции, Истина);
КонецФункции
// Запускает выполнение процедуры в многопоточном фоновом задании, если это возможно.
// Вызываемая процедура может быть с произвольным числом параметров, но не более 7.
// Значения передаваемых параметров процедуры, а также возвращаемое значение должны быть сериализуемыми.
// Значения передаваемых параметров процедуры должны быть сериализуемыми.
// Параметры процедуры не должны быть возвращаемыми.
// Многопоточные длительные операции в неразделенном сеансе не поддерживаются.
//
@@ -301,7 +261,7 @@
// Параметры:
// ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля, модуля менеджера объекта
// или модуля обработки, которую необходимо выполнить в фоне.
// ПараметрыВыполнения - см. ПараметрыВыполненияПроцедуры
// ПараметрыВыполнения - см. ПараметрыВыполненияФункции
// НаборПараметровПроцедуры - Соответствие из КлючИЗначение - произвольный набор параметров вызова процедуры:
// * Ключ - Произвольный - ключ набора
// * Значение - Массив - параметры вызова процедуры. Количество параметров может быть от 0 до 7.
@@ -325,53 +285,9 @@
// * КраткоеПредставлениеОшибки - Строка - устарел.
// * ПодробноеПредставлениеОшибки - Строка - устарел.
//
Функция ВыполнитьПроцедуруВНесколькоПотоков(ИмяПроцедуры, Знач ПараметрыВыполнения, Знач НаборПараметровПроцедуры = Неопределено) Экспорт
Функция ВыполнитьПроцедуруВНесколькоПотоков(ИмяПроцедуры, ПараметрыВыполнения, НаборПараметровПроцедуры = Неопределено) Экспорт
ПроверитьВозможностьЗапускаМногопоточнойДлительнойОперации(ПараметрыВыполнения, НаборПараметровПроцедуры);
НовыеПараметрыВыполнения = ПараметрыВыполненияФункции(Неопределено);
ЗаполнитьЗначенияСвойств(НовыеПараметрыВыполнения, ПараметрыВыполнения);
ПараметрыВыполнения = НовыеПараметрыВыполнения;
Если ПараметрыВыполнения.ОжидатьЗавершение = ОбщиеПараметрыВыполненияВФоне().ОжидатьЗавершение Тогда
ПараметрыВыполнения.ОжидатьЗавершение = 0;
КонецЕсли;
АдресаРезультатов = Новый Соответствие;
Если ТипЗнч(НаборПараметровПроцедуры) = Тип("Соответствие") Тогда
Для Каждого ПараметрФункции Из НаборПараметровПроцедуры Цикл
АдресРезультатаПотока = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
АдресаРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока);
КонецЦикла;
ПараметрыМетода = НаборПараметровПроцедуры.Количество();
Иначе
ПараметрыМетода = НаборПараметровПроцедуры; // Структура
НаборПараметровПроцедуры = Новый Соответствие;
КонецЕсли;
ИдентификаторПроцесса = Новый УникальныйИдентификатор;
ПараметрыМногопоточнойОперации = ПараметрыМногопоточнойОперации(ИдентификаторПроцесса);
ПараметрыМногопоточнойОперации.ИмяМетода = ИмяПроцедуры;
ПараметрыМногопоточнойОперации.ЭтоФункция = "Процедура";
ПараметрыМногопоточнойОперации.ПараметрыВыполнения = ПараметрыВыполнения;
ПараметрыМногопоточнойОперации.ПараметрыМетода = ПараметрыМетода;
ПодготовитьМногопоточнуюОперациюКЗапуску(ИмяПроцедуры,
АдресаРезультатов, ИдентификаторПроцесса, НаборПараметровПроцедуры);
РезультатЗапуска = Новый Структура("Статус, ИдентификаторЗадания, АдресРезультата",
СтатусДлительнойОперации().Выполняется);
ЗапланироватьЗапускПотоковДлительныхОпераций(РезультатЗапуска, ПараметрыМногопоточнойОперации);
РезультатЗапуска = ВыполнитьФункцию(ПараметрыВыполнения,
ИмяМетодаМногопоточногоПроцесса(), ПараметрыМногопоточнойОперации);
Если РезультатЗапуска.Статус <> СтатусДлительнойОперации().Выполняется Тогда
УдалитьДанныеОПотоках(ИдентификаторПроцесса);
КонецЕсли;
Возврат РезультатЗапуска;
Возврат ВыполнитьМетодВНесколькоПотоков(ИмяПроцедуры, ПараметрыВыполнения, НаборПараметровПроцедуры, Ложь);
КонецФункции
@@ -585,6 +501,9 @@
ПараметрыВыполнения = НовыеПараметрыВыполнения;
ПроверитьПараметрыВыполнения(ПараметрыВыполнения);
Если ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации = Неопределено Тогда
ПроверитьИЗаполнитьАдресРезультата(ПараметрыВыполнения, "ДлительныеОперации.ВыполнитьВФоне");
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Статус", "Выполняется");
@@ -862,6 +781,7 @@
Возврат;
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Если ПараметрыСеанса.ДлительныеОперации.Отмененные.Найти(ИдентификаторЗадания) = Неопределено Тогда
Свойства = Новый Структура(ПараметрыСеанса.ДлительныеОперации);
@@ -871,19 +791,32 @@
ПараметрыСеанса.ДлительныеОперации = Новый ФиксированнаяСтруктура(Свойства);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
Если Задание = Неопределено Или Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда
Возврат;
Если Задание <> Неопределено
И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Попытка
Задание.Отменить();
Исключение
// Возможно задание как раз в этот момент закончилось и ошибки нет.
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Информация, , , ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
Попытка
Задание.Отменить();
Исключение
// Возможно задание как раз в этот момент закончилось и ошибки нет.
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Информация, , , ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ИдентификаторПроцесса = ПараметрыСеанса.ДлительныеОперации.Запущенные.Получить(ИдентификаторЗадания);
Если ИдентификаторПроцесса <> Неопределено Тогда
ОтменитьВыполнениеВсехПотоков(ИдентификаторПроцесса);
ОперацияВыполнена(ИдентификаторЗадания);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецПроцедуры
@@ -1154,11 +1087,16 @@
ПоследнийИдентификатор = ПоследнийИдентификатор(ИдентификаторЗадания);
Задание = НайтиЗаданиеПоИдентификатору(ПоследнийИдентификатор);
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Если Задание = Неопределено Тогда
РезультатИзОповещения = ПолучитьИзОповещений(Ложь,
ИдентификаторЗадания, "ДлительнаяОперацияЗавершена");
Если РезультатИзОповещения <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Результат, РезультатИзОповещения);
УстановитьЗавершениеДляУправляющегоПотока(ИдентификаторЗадания, Результат);
Возврат Результат;
КонецЕсли;
Если ВыполненПерезапускУправляющегоПотока(ИдентификаторЗадания, Задание) Тогда
@@ -1173,9 +1111,8 @@
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
УстановитьСвойстваОшибки(Результат, ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Фоновое задание не найдено'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки);
Результат.Статус = "Ошибка";
УстановитьЗавершениеДляУправляющегоПотока(ИдентификаторЗадания, Результат);
Возврат Результат;
КонецЕсли;
@@ -1185,7 +1122,6 @@
КонецЕсли;
Если Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда
УстановитьПривилегированныйРежим(Истина);
Если ПараметрыСеанса.ДлительныеОперации.Отмененные.Найти(ПоследнийИдентификатор) = Неопределено Тогда
Результат.Статус = "Ошибка";
Если Задание.ИнформацияОбОшибке <> Неопределено Тогда
@@ -1201,7 +1137,7 @@
Иначе
Результат.Статус = "Отменено";
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
УстановитьЗавершениеДляУправляющегоПотока(ИдентификаторЗадания, Результат);
Возврат Результат;
КонецЕсли;
@@ -1212,10 +1148,12 @@
Если Задание.ИнформацияОбОшибке <> Неопределено Тогда
УстановитьСвойстваОшибки(Результат, Задание.ИнформацияОбОшибке);
КонецЕсли;
УстановитьЗавершениеДляУправляющегоПотока(ИдентификаторЗадания, Результат);
Возврат Результат;
КонецЕсли;
Результат.Статус = "Выполнено";
УстановитьЗавершениеДляУправляющегоПотока(ИдентификаторЗадания, Результат);
Возврат Результат;
КонецФункции
@@ -1308,6 +1246,7 @@
Если ИмяПараметра = "ДлительныеОперации" Тогда
Свойства = Новый Структура;
Свойства.Вставить("Отмененные", Новый ФиксированныйМассив(Новый Массив));
Свойства.Вставить("Запущенные", Новый ФиксированноеСоответствие(Новый Соответствие));
Свойства.Вставить("Перезапущенные", Новый ФиксированноеСоответствие(Новый Соответствие));
Свойства.Вставить("ИдентификаторОсновногоЗадания");
Свойства.Вставить("ПолученныеОповещения", Новый ФиксированноеСоответствие(Новый Соответствие));
@@ -1563,7 +1502,7 @@
КонецФункции
Функция ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры,
ПараметрыВыполнения, ПараметрыПроцедуры = Неопределено, БезопасныйРежим = Ложь, ОтправлятьОповещения = Ложь) Экспорт
ПараметрыВыполнения, ПараметрыПроцедуры = Неопределено, БезопасныйРежим = Ложь, ОтправлятьОповещения = Ложь)
КлючФоновогоЗадания = ПараметрыВыполнения.КлючФоновогоЗадания;
НаименованиеФоновогоЗадания = ?(ПустаяСтрока(ПараметрыВыполнения.НаименованиеФоновогоЗадания),
@@ -2144,7 +2083,9 @@
ДополнительныеПараметрыОтправки = СерверныеОповещения.ДополнительныеПараметрыОтправки();
ДополнительныеПараметрыОтправки.ИдентификаторГруппы = ИдентификаторОсновногоЗадания;
ДополнительныеПараметрыОтправки.ВидОповещенияВГруппе = ИдентификаторВидаОповещения(ВидОповещения);
ДополнительныеПараметрыОтправки.ЗаписатьБезусловно = ВидОповещения = "СообщениеПользователю";
ДополнительныеПараметрыОтправки.ЗаписатьБезусловно = ВидОповещения = "СообщениеПользователю"
Или ВидОповещения = "ДлительнаяОперацияЗавершена"
И Не ОбщегоНазначения.ИнформационнаяБазаФайловая();
Если ВидОповещения = "Прогресс" Тогда
ДополнительныеПараметрыОтправки.Заменить = Истина;
@@ -2385,36 +2326,46 @@
КонецЕсли;
#КонецЕсли
Если ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации = Неопределено Тогда
Если ПараметрыВыполнения.АдресРезультата = Неопределено Тогда
Если Не ЗначениеЗаполнено(ПараметрыВыполнения.ИдентификаторФормы) И ОбщегоНазначения.РежимОтладки() Тогда
Попытка
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не указан ни уникальный идентификатор формы в параметре %1,
|ни адрес временного хранилища в %2 в %3.
|Убедиться, что при обработке результата временное хранилище очищается явно методом %4.'"),
"ПараметрыВыполнения.ИдентификаторФормы", "ПараметрыВыполнения.АдресРезультата",
"ДлительныеОперации.ВыполнитьВФоне", "УдалитьИзВременногоХранилища"),
КатегорияОшибки.ОшибкаКонфигурации);
Исключение
// АПК:154-выкл Не ошибка, а предупреждение (рекомендация разработчику).
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Диагностика'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Предупреждение, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
// АПК:154-вкл
КонецПопытки;
КонецЕсли;
ПараметрыВыполнения.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы);
ИначеЕсли Не ЭтоАдресВременногоХранилища(ПараметрыВыполнения.АдресРезультата) Тогда
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru = 'Не указан адрес временного хранилища в параметре %1
|в %2.'"),
"ПараметрыВыполнения.АдресРезультата", "ДлительныеОперации.ВыполнитьВФоне"),
КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьИЗаполнитьАдресРезультата(ПараметрыВыполнения, ИмяФункции)
Если ПараметрыВыполнения.АдресРезультата = Неопределено Тогда
Если ОбщегоНазначения.РежимОтладки()
И (Не ЗначениеЗаполнено(ПараметрыВыполнения.ИдентификаторФормы)
Или ТипЗнч(ПараметрыВыполнения.ИдентификаторФормы) <> Тип("УникальныйИдентификатор")) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не указан ни уникальный идентификатор формы в параметре %1,
|ни адрес временного хранилища в параметре %2
|функции %3.
|Рекомендуется указать идентификатор формы или адрес.
|Автоматически сформированный адрес содержит значение только до следующего
|серверного вызова, что может приводить к неожиданным ошибкам.'"),
"ПараметрыВыполнения.ИдентификаторФормы", "ПараметрыВыполнения.АдресРезультата", ИмяФункции);
Попытка
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
Исключение
// АПК:154-выкл Не ошибка, а предупреждение (рекомендация разработчику).
ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Диагностика'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Предупреждение, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
// АПК:154-вкл
КонецПопытки;
КонецЕсли;
ПараметрыВыполнения.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено,
ПараметрыВыполнения.ИдентификаторФормы);
ИначеЕсли Не ЭтоАдресВременногоХранилища(ПараметрыВыполнения.АдресРезультата) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Указан некорректный адрес временного хранилища в параметре %1
|функции %2.'"),
"ПараметрыВыполнения.АдресРезультата", ИмяФункции);
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
КонецПроцедуры
Функция ЭтоВыполнениеБезФоновогоЗадания(ИмяПроцедуры, ПараметрыВыполнения)
#Если ВнешнееСоединение Тогда
@@ -2512,9 +2463,10 @@
АдресаНовыхРезультатов, ИдентификаторПроцесса, НовыеПорции, ПараметрыОперации);
КонецЕсли;
// @skip-check query-in-loop - Получение актуальных данных о потоках с учетом работы других процессов.
// @skip-check query-in-loop - Получение данных о потоках текущего процесса.
Потоки = ПотокиОжидающиеОбработки(ИдентификаторПроцесса);
Если Потоки.Количество() = 0 Тогда
ОжидатьЗавершениеВсехПотоков(ИдентификаторПроцесса, ПрерватьВыполнениеЕслиОшибка, ЗавершитьДосрочно);
Прервать;
КонецЕсли;
@@ -2547,7 +2499,7 @@
Прервать;
КонецЕсли;
// @skip-check query-in-loop - На каждой итерации необходимо зачитывать актуальные данные из ИБ.
// @skip-check query-in-loop - На каждой итерации необходимо получать актуальные данные из ИБ.
ОжидатьЗавершениеВсехПотоков(ИдентификаторПроцесса, ПрерватьВыполнениеЕслиОшибка, ЗавершитьДосрочно);
Если ЗавершитьДосрочно Тогда
@@ -2656,17 +2608,14 @@
ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, ПараметрыОперации.ЭтоФункция);
ПараметрыВыполнения.ВнешнийОтчетОбработка = ПараметрыОперации.ПараметрыВыполнения.ВнешнийОтчетОбработка;
РезультатЗапуска = Неопределено;
МаксимумПотоков = ДопустимоеКоличествоПотоков();
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Константа.КоличествоПотоковДлительныхОпераций");
УстановитьПолноеИмяПрикладнойПроцедуры(ПараметрыОперации.ИмяМетода);
ПотокЗанят = Ложь;
НоваяПопыткаВыполнения = Поток.Статус <> СтатусДлительнойОперации().Создано;
Если Не ПараметрыВыполнения.ЗапуститьНеВФоне Тогда
Если ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь Тогда
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Константа.КоличествоПотоковДлительныхОпераций");
МаксимумПотоков = ДопустимоеКоличествоПотоков();
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
@@ -2676,7 +2625,7 @@
ВременныйРезультатЗапуска = НовыйРезультатВыполненияПотока();
ВременныйРезультатЗапуска.ИдентификаторЗадания = ИдентификаторЗаданияПроцесса;
ВременныйРезультатЗапуска.Статус = СтатусДлительнойОперации().Выполняется;
ОбновитьСведенияОбПотоке(Поток, ВременныйРезультатЗапуска, Ложь);
ОбновитьСведенияОПотоке(Поток, ВременныйРезультатЗапуска);
ПотокЗанят = Истина;
КонецЕсли;
@@ -2685,65 +2634,57 @@
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
Если ПараметрыВыполнения.ЗапуститьНеВФоне = Ложь И Не ПотокЗанят Тогда
Возврат Неопределено;
КонецЕсли;
УстановитьПолноеИмяПрикладнойПроцедуры(ПараметрыОперации.ИмяМетода);
Попытка
Если ПараметрыВыполнения.ЗапуститьНеВФоне Или ПотокЗанят Тогда
РезультатЗапуска = ВыполнитьВФоне(ПараметрыОперации.ИмяМетода, ПараметрыМетода, ПараметрыВыполнения);
УстановитьПолноеИмяПрикладнойПроцедуры(ИмяМетодаМногопоточногоПроцесса());
ОбновитьСведенияОбПотоке(Поток, РезультатЗапуска);
КонецЕсли;
РезультатЗапуска = ВыполнитьВФоне(ПараметрыОперации.ИмяМетода, ПараметрыМетода, ПараметрыВыполнения);
Исключение
УстановитьПолноеИмяПрикладнойПроцедуры(ИмяМетодаМногопоточногоПроцесса());
Если ПотокЗанят Тогда
ПустойРезультатЗапуска = НовыйРезультатВыполненияПотока();
ОбновитьСведенияОбПотоке(Поток, ПустойРезультатЗапуска, Ложь);
ИнформацияОбОшибке = ИнформацияОбОшибке();
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке,
НСтр("ru = 'Не удалось запустить задание обработки порции по причине:'"));
Попытка
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
Исключение
УточненнаяИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
ОшибочныйРезультатЗапуска = НовыйРезультатВыполненияПотока();
ОшибочныйРезультатЗапуска.Статус = СтатусДлительнойОперации().Ошибка;
УстановитьСвойстваОшибки(ОшибочныйРезультатЗапуска, УточненнаяИнформацияОбОшибке);
ОбновитьСведенияОПотоке(Поток, ОшибочныйРезультатЗапуска);
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
УстановитьПолноеИмяПрикладнойПроцедуры(ИмяМетодаМногопоточногоПроцесса());
ОбновитьСведенияОПотоке(Поток, РезультатЗапуска, НоваяПопыткаВыполнения);
Возврат РезультатЗапуска;
КонецФункции
Функция СтатусИзСостояния(Состояние)
Если Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Возврат СтатусДлительнойОперации().Выполнено;
ИначеЕсли Состояние = СостояниеФоновогоЗадания.Отменено Тогда
Возврат СтатусДлительнойОперации().Отменено;
ИначеЕсли Состояние = СостояниеФоновогоЗадания.Активно Тогда
Возврат СтатусДлительнойОперации().Выполняется;
КонецЕсли;
Возврат СтатусДлительнойОперации().Ошибка;
КонецФункции
Процедура ОбновитьСведенияОбПотоке(Поток, РезультатЗапуска = Неопределено, НоваяПопытка = Истина)
Процедура ОбновитьСведенияОПотоке(Поток, РезультатЗапуска, НоваяПопытка = Ложь,
ПерезапускПроцесса = Ложь, УстановитьЗавершениеАктивного = Ложь)
РезультатЗапускаУказан = РезультатЗапуска <> Неопределено;
Если РезультатЗапуска = Неопределено Тогда
УстановитьПривилегированныйРежим(Истина);
Если Не РезультатЗапускаУказан Тогда
РезультатЗапуска = НовыйРезультатВыполненияПотока();
Если ЗначениеЗаполнено(Поток.ИдентификаторЗадания) Тогда
ПоследнийИдентификатор = ПоследнийИдентификаторЗаданияУправляющегоПотока(Поток);
Задание = НайтиЗаданиеПоИдентификатору(ПоследнийИдентификатор);
Если Задание <> Неопределено Тогда
РезультатЗапуска.Статус = СтатусИзСостояния(Задание.Состояние);
Если Задание.ИнформацияОбОшибке <> Неопределено Тогда
УстановитьСвойстваОшибки(РезультатЗапуска, Задание.ИнформацияОбОшибке);
КонецЕсли;
Иначе
РезультатЗапуска.Статус = СтатусДлительнойОперации().Ошибка;
КонецЕсли;
ПоследнийИдентификатор = ПоследнийИдентификаторЗаданияПотока(Поток);
Результат = ЗаданиеВыполнено(ПоследнийИдентификатор, Истина);
РезультатЗапуска.Статус = СтатусДлительнойОперации()[Результат.Статус];
РезультатЗапуска.ИнформацияОбОшибке = Результат.ИнформацияОбОшибке;
РезультатЗапуска.КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки;
РезультатЗапуска.ПодробноеПредставлениеОшибки = Результат.ПодробноеПредставлениеОшибки;
Иначе
РезультатЗапуска.Статус = СтатусДлительнойОперации().Создано;
КонецЕсли;
@@ -2761,31 +2702,40 @@
Попытка
Блокировка.Заблокировать();
УстановитьПривилегированныйРежим(Истина);
НаборЗаписей = РегистрыСведений.ДлительныеОперации.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ИдентификаторПроцесса.Установить(ИдентификаторПроцесса);
НаборЗаписей.Отбор.ИдентификаторПотока.Установить(ИдентификаторПотока);
НаборЗаписей.Прочитать();
СтатусОбновлен = Неопределено;
Если НаборЗаписей.Количество() > 0 Тогда
Запись = НаборЗаписей.Получить(0);
СтатусОбновлен = Ложь;
Если РезультатЗапускаУказан Тогда
Запись.ИдентификаторЗадания = РезультатЗапуска.ИдентификаторЗадания;
Запись.КлючПотока = Поток.КлючПотока;
Если РезультатЗапускаУказан И Не УстановитьЗавершениеАктивного Тогда
Если ПерезапускПроцесса Тогда
Запись.КлючПотока = Новый ХранилищеЗначения(РезультатЗапуска.ИдентификаторЗадания, Новый СжатиеДанных(9));
Иначе
Запись.ИдентификаторЗадания = РезультатЗапуска.ИдентификаторЗадания;
КонецЕсли;
Если НоваяПопытка Тогда
Запись.НомерПопытки = Поток.НомерПопытки + 1;
КонецЕсли;
КонецЕсли;
Запись.Статус = РезультатЗапуска.Статус;
Если РезультатЗапуска.Статус = СтатусДлительнойОперации().Ошибка Тогда
Запись.ПараметрыМетода = Новый ХранилищеЗначения(РезультатЗапуска.ИнформацияОбОшибке, Новый СжатиеДанных(9));
Запись.ПодробноеПредставлениеОшибки = РезультатЗапуска.ПодробноеПредставлениеОшибки;
Запись.КраткоеПредставлениеОшибки = РезультатЗапуска.КраткоеПредставлениеОшибки;
КонецЕсли;
Если Не УстановитьЗавершениеАктивного
Или Запись.Статус = СтатусДлительнойОперации().Выполняется
И ПоследнийИдентификаторЗаданияПотока(Запись) = ПоследнийИдентификаторЗаданияПотока(Поток) Тогда
СтатусОбновлен = Истина;
Запись.Статус = РезультатЗапуска.Статус;
Если РезультатЗапуска.Статус = СтатусДлительнойОперации().Ошибка Тогда
Запись.ПараметрыМетода = Новый ХранилищеЗначения(РезультатЗапуска.ИнформацияОбОшибке, Новый СжатиеДанных(9));
Запись.ПодробноеПредставлениеОшибки = РезультатЗапуска.ПодробноеПредставлениеОшибки;
Запись.КраткоеПредставлениеОшибки = РезультатЗапуска.КраткоеПредставлениеОшибки;
КонецЕсли;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Поток, Запись);
НаборЗаписей.Записать();
@@ -2797,6 +2747,8 @@
ВызватьИсключение;
КонецПопытки;
УстановитьЗавершениеАктивного = СтатусОбновлен;
КонецПроцедуры
Функция ПервыйИдентификаторЗаданияУправляющегоПотока(ИдентификаторПроцесса)
@@ -2827,7 +2779,7 @@
КонецФункции
Функция ПоследнийИдентификаторЗаданияУправляющегоПотока(Поток)
Функция ПоследнийИдентификаторЗаданияПотока(Поток)
ПоследнийИдентификатор = Поток.ИдентификаторЗадания;
@@ -2947,10 +2899,7 @@
Прервать;
КонецЕсли;
Если ОжидатьЗавершениеПотока(Потоки[0]) Тогда // Задание выполнено.
ОбновитьСведенияОбПотоке(Потоки[0]);
КонецЕсли;
ОжидатьЗавершениеПотока(Потоки[0]);
КонецЦикла;
Возврат ВыполнитьВФоне;
@@ -3013,29 +2962,23 @@
// Поток - СтрокаТаблицыЗначений - поток, завершение которого необходимо ожидать.
// Длительность - Число - максимальная длительность ожидания в секундах.
//
// Возвращаемое значение:
// Булево - Истина - поток выполнен, Ложь - поток еще выполняется.
//
Функция ОжидатьЗавершениеПотока(Поток, Длительность = 1)
Процедура ОжидатьЗавершениеПотока(Поток, Длительность = 1)
Если ЗначениеЗаполнено(Поток.ИдентификаторЗадания) Тогда
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Поток.ИдентификаторЗадания);
Если Задание <> Неопределено Тогда
Задание = Задание.ОжидатьЗавершенияВыполнения(Длительность);
ЗаданиеЗавершено = (Задание.Состояние <> СостояниеФоновогоЗадания.Активно);
Возврат ЗаданиеЗавершено;
КонецЕсли;
Если Не ЗначениеЗаполнено(Поток.ИдентификаторЗадания) Тогда
Возврат;
КонецЕсли;
Возврат Истина;
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Поток.ИдентификаторЗадания);
Если Задание <> Неопределено Тогда
Задание = Задание.ОжидатьЗавершенияВыполнения(Длительность);
КонецЕсли;
КонецФункции
КонецПроцедуры
Функция ЕстьЗавершенныеПотоки(Потоки, ЗавершитьДосрочноЕслиОшибка, ИдентификаторПроцесса)
УстановитьПривилегированныйРежим(Истина);
ЕстьЗавершенныеПотоки = Ложь;
Индекс = Потоки.Количество() - 1;
@@ -3047,24 +2990,38 @@
Продолжить;
КонецЕсли;
ПоследнийИдентификатор = ПоследнийИдентификаторЗаданияУправляющегоПотока(Поток);
ЭтоПотокТекущегоПроцесса = (Поток.ИдентификаторПроцесса = ИдентификаторПроцесса);
ПоследнийИдентификатор = ПоследнийИдентификаторЗаданияПотока(Поток);
Результат = ЗаданиеВыполнено(ПоследнийИдентификатор, Истина);
Если Результат.Статус = "Выполняется" Тогда
Если Результат.Статус = "Выполняется"
Или Результат.Статус = "Ошибка"
И Результат.Задание = Неопределено
И Не ЭтоПотокТекущегоПроцесса Тогда
Продолжить;
КонецЕсли;
ОбновитьСведенияОбПотоке(Поток);
ЭтоПотокТекущегоПроцесса = (Поток.ИдентификаторПроцесса = ИдентификаторПроцесса);
СтатусОбновлен = Истина;
ОбновитьСведенияОПотоке(Поток, Неопределено,,, СтатусОбновлен);
ОбновленныйСтатус = Поток.Статус;
Если СтатусОбновлен <> Неопределено
И ОбновленныйСтатус = СтатусДлительнойОперации().Выполняется Тогда
Продолжить;
КонецЕсли;
Потоки.Удалить(Поток);
ЕстьЗавершенныеПотоки = Истина;
Если Результат.Статус = "Выполнено" Тогда
Если СтатусОбновлен <> Неопределено
И ОбновленныйСтатус = СтатусДлительнойОперации().Выполнено Тогда
Продолжить;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
ЗаписатьОшибку(Результат.ТекстОшибки);
Если СтатусОбновлен = Истина
И ОбновленныйСтатус = СтатусДлительнойОперации().Ошибка Тогда
ЗаписатьОшибку(Результат.ПодробноеПредставлениеОшибки);
КонецЕсли;
Если ЗавершитьДосрочноЕслиОшибка = Истина
@@ -3127,17 +3084,18 @@
Если УправляющийПоток <> Неопределено
И УправляющийПоток.ДатаСоздания + СрокОтмены > ТекущаяДатаСеанса Тогда
Если Не ЗначениеЗаполнено(УправляющийПоток.ИдентификаторЗадания)
И УправляющийПоток.ДатаСоздания + СрокУстаревания > ТекущаяДатаСеанса Тогда
Продолжить;
КонецЕсли;
ИдентификаторЗадания = ПоследнийИдентификаторЗаданияУправляющегоПотока(УправляющийПоток);
ИдентификаторЗадания = ПоследнийИдентификаторЗаданияПотока(УправляющийПоток);
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
Если Задание <> Неопределено
И (Задание.Состояние = СостояниеФоновогоЗадания.Активно
Если Задание = Неопределено
И (УправляющийПоток.Статус = СтатусДлительнойОперации().Выполняется
Или УправляющийПоток.ДатаСоздания + СрокУстаревания > ТекущаяДатаСеанса
Или УправляющийПоток.Статус = СтатусДлительнойОперации().Ошибка
И УправляющийПоток.НомерПопытки < КоличествоПопыток())
Или Задание <> Неопределено
И ( Задание.Состояние = СостояниеФоновогоЗадания.Активно
Или Задание.Конец + СрокУстаревания > ТекущаяДатаСеанса
Или Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно
И УправляющийПоток.НомерПопытки < КоличествоПопыток()
И УправляющийПоток.ДатаСоздания + СрокУстаревания > ТекущаяДатаСеанса) Тогда
И УправляющийПоток.НомерПопытки < КоличествоПопыток()) Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
@@ -3146,7 +3104,7 @@
ПотокиПроцесса = ВсеПотоки.Скопировать(Отбор);
ПотокиПроцесса.Сортировать("ИдентификаторПотока");
Для Каждого ПотокПроцесса Из ПотокиПроцесса Цикл
ИдентификаторЗадания = ПоследнийИдентификаторЗаданияУправляющегоПотока(ПотокПроцесса);
ИдентификаторЗадания = ПоследнийИдентификаторЗаданияПотока(ПотокПроцесса);
Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания);
Если Задание <> Неопределено
И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
@@ -3385,6 +3343,7 @@
Запись = НаборЗаписей.Добавить();
Запись.ИдентификаторПроцесса = ИдентификаторПроцесса;
Запись.ИдентификаторПотока = ИдентификаторПотока;
Запись.Статус = СтатусДлительнойОперации().Создано;
Запись.НомерПопытки = 0;
Запись.ДатаСоздания = ТекущаяДатаСеанса;
Запись.ИмяПользователя = ИмяПользователя;
@@ -3422,22 +3381,91 @@
КонецПроцедуры
Процедура ПроверитьВозможностьЗапускаМногопоточнойДлительнойОперации(ПараметрыВыполнения, НаборПараметров)
Процедура ПроверитьВозможностьЗапускаМногопоточнойДлительнойОперации(ПараметрыВыполнения, НаборПараметров, ИмяФункции)
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(ИмяФункции,
"ПараметрыВыполнения", ПараметрыВыполнения, Тип("Структура"));
Если НаборПараметров <> Неопределено
И ТипЗнч(НаборПараметров) <> Тип("Соответствие")
И ТипЗнч(НаборПараметров) <> Тип("Структура") Тогда
ВызватьИсключение(НСтр("ru ='Неверный тип набора параметров многопоточной длительной операции.'"),
КатегорияОшибки.ОшибкаКонфигурации);
ТекстОшибки = НСтр("ru = 'Неверный тип набора параметров многопоточной длительной операции.'");
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено() И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ВызватьИсключение(НСтр("ru ='Многопоточные длительные операции в неразделенном сеансе не поддерживаются.'"),
КатегорияОшибки.ОшибкаКонфигурации);
Если ОбщегоНазначения.РазделениеВключено()
И Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
ТекстОшибки = НСтр("ru = 'Неверный тип набора параметров многопоточной длительной операции.'");
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
КонецПроцедуры
// См. ВыполнитьФункциюВНесколькоПотоков
Функция ВыполнитьМетодВНесколькоПотоков(Знач ИмяМетода, Знач ПараметрыВыполнения, Знач НаборПараметровМетода,
Знач ЭтоВыполнениеФункции)
НовыеПараметрыВыполнения = ПараметрыВыполненияФункции(Неопределено);
ЗаполнитьЗначенияСвойств(НовыеПараметрыВыполнения, ПараметрыВыполнения);
ПараметрыВыполнения = НовыеПараметрыВыполнения;
ИмяФункции = ?(ЭтоВыполнениеФункции, "ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков",
"ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков");
ПроверитьВозможностьЗапускаМногопоточнойДлительнойОперации(ПараметрыВыполнения, НаборПараметровМетода, ИмяФункции);
ПроверитьИЗаполнитьАдресРезультата(ПараметрыВыполнения, ИмяФункции);
Если ПараметрыВыполнения.ОжидатьЗавершение = ОбщиеПараметрыВыполненияВФоне().ОжидатьЗавершение Тогда
ПараметрыВыполнения.ОжидатьЗавершение = 0;
КонецЕсли;
АдресаРезультатов = Новый Соответствие;
Если ТипЗнч(НаборПараметровМетода) = Тип("Соответствие") Тогда
Для Каждого ПараметрФункции Из НаборПараметровМетода Цикл
АдресРезультатаПотока = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
АдресаРезультатов.Вставить(ПараметрФункции.Ключ, АдресРезультатаПотока);
КонецЦикла;
ПараметрыМетода = НаборПараметровМетода.Количество();
Иначе
ПараметрыМетода = НаборПараметровМетода; // Структура
НаборПараметровМетода = Новый Соответствие;
КонецЕсли;
ИдентификаторПроцесса = Новый УникальныйИдентификатор;
ПараметрыМногопоточнойОперации = ПараметрыМногопоточнойОперации(ИдентификаторПроцесса);
ПараметрыМногопоточнойОперации.ИмяМетода = ИмяМетода;
ПараметрыМногопоточнойОперации.ЭтоФункция = ?(ЭтоВыполнениеФункции, "Функция", "Процедура");
ПараметрыМногопоточнойОперации.ПараметрыВыполнения = ПараметрыВыполнения;
ПараметрыМногопоточнойОперации.ПараметрыМетода = ПараметрыМетода;
ПодготовитьМногопоточнуюОперациюКЗапуску(ИмяМетода,
АдресаРезультатов, ИдентификаторПроцесса, НаборПараметровМетода);
РезультатЗапуска = Новый Структура("Статус, ИдентификаторЗадания, АдресРезультата",
СтатусДлительнойОперации().Выполняется,, ПараметрыВыполнения.АдресРезультата);
ЗапланироватьЗапускПотоковДлительныхОпераций(РезультатЗапуска, ПараметрыМногопоточнойОперации);
РезультатЗапуска = ВыполнитьФункцию(ПараметрыВыполнения,
ИмяМетодаМногопоточногоПроцесса(), ПараметрыМногопоточнойОперации);
Если РезультатЗапуска.Статус <> СтатусДлительнойОперации().Выполняется Тогда
УдалитьДанныеОПотоках(ИдентификаторПроцесса);
Иначе
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ЗарегистрироватьИдентификаторУправляющегоПотока(РезультатЗапуска.ИдентификаторЗадания, ИдентификаторПроцесса);
УстановитьПривилегированныйРежим(Ложь);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
Возврат РезультатЗапуска;
КонецФункции
// Возвращаемое значение:
// Структура:
// * Создано - Строка
@@ -3463,21 +3491,33 @@
Возврат 3;
КонецФункции
Процедура ЗарегистрироватьИдентификаторУправляющегоПотока(ИдентификаторЗадания, ИдентификаторПроцесса)
Если ПараметрыСеанса.ДлительныеОперации.Запущенные.Получить(ИдентификаторЗадания) = Неопределено Тогда
Свойства = Новый Структура(ПараметрыСеанса.ДлительныеОперации);
Запущенные = Новый Соответствие(Свойства.Запущенные);
Запущенные.Вставить(ИдентификаторЗадания, ИдентификаторПроцесса);
Свойства.Запущенные = Новый ФиксированноеСоответствие(Запущенные);
ПараметрыСеанса.ДлительныеОперации = Новый ФиксированнаяСтруктура(Свойства);
КонецЕсли;
КонецПроцедуры
Функция ВыполненПерезапускУправляющегоПотока(ИдентификаторЗадания, Задание)
Если Задание <> Неопределено
ИдентификаторПроцесса = ПараметрыСеанса.ДлительныеОперации.Запущенные.Получить(ИдентификаторЗадания);
Если ИдентификаторПроцесса = Неопределено
Или Задание <> Неопределено
И Задание.Состояние <> СостояниеФоновогоЗадания.ЗавершеноАварийно
Или Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат Ложь;
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
ПустойИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИдентификаторЗадания", ИдентификаторЗадания);
Запрос.УстановитьПараметр("ИдентификаторПроцесса", ИдентификаторПроцесса);
Запрос.УстановитьПараметр("ИдентификаторПотока", ПустойИдентификатор);
Запрос.Текст =
"ВЫБРАТЬ
@@ -3490,8 +3530,8 @@
|ИЗ
| РегистрСведений.ДлительныеОперации КАК ДлительныеОперации
|ГДЕ
| ДлительныеОперации.ИдентификаторПотока = &ИдентификаторПотока
| И ДлительныеОперации.ИдентификаторЗадания = &ИдентификаторЗадания";
| ДлительныеОперации.ИдентификаторПроцесса = &ИдентификаторПроцесса
| И ДлительныеОперации.ИдентификаторПотока = &ИдентификаторПотока";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
@@ -3537,9 +3577,7 @@
Свойства.Перезапущенные = Новый ФиксированноеСоответствие(Перезапущенные);
ПараметрыСеанса.ДлительныеОперации = Новый ФиксированнаяСтруктура(Свойства);
Поток.КлючПотока = Новый ХранилищеЗначения(РезультатЗапуска.ИдентификаторЗадания, Новый СжатиеДанных(9));
РезультатЗапуска.ИдентификаторЗадания = ИдентификаторЗадания;
ОбновитьСведенияОбПотоке(Поток, РезультатЗапуска);
ОбновитьСведенияОПотоке(Поток, РезультатЗапуска, Истина, Истина);
Исключение
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'При попытке перезапуска фонового задания %1
@@ -3557,6 +3595,55 @@
КонецФункции
Процедура УстановитьЗавершениеДляУправляющегоПотока(ИдентификаторЗадания, Результат)
ИдентификаторПроцесса = ПараметрыСеанса.ДлительныеОперации.Запущенные.Получить(ИдентификаторЗадания);
Если ИдентификаторПроцесса = Неопределено Тогда
Возврат;
КонецЕсли;
ПустойИдентификатор = ОбщегоНазначенияКлиентСервер.ПустойУникальныйИдентификатор();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИдентификаторПроцесса", ИдентификаторПроцесса);
Запрос.УстановитьПараметр("ИдентификаторПотока", ПустойИдентификатор);
Запрос.УстановитьПараметр("Статус", СтатусДлительнойОперации().Выполняется);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЗначениеИстина
|ИЗ
| РегистрСведений.ДлительныеОперации КАК ДлительныеОперации
|ГДЕ
| ДлительныеОперации.ИдентификаторПроцесса = &ИдентификаторПроцесса
| И ДлительныеОперации.ИдентификаторПотока = &ИдентификаторПотока
| И ДлительныеОперации.Статус = &Статус";
Если Не Запрос.Выполнить().Пустой() Тогда
// Установка статуса Выполнено у основного потока.
РезультатЗапуска = НовыйРезультатВыполненияПотока();
РезультатЗапуска.Статус = СтатусДлительнойОперации()[Результат.Статус];
РезультатЗапуска.ИнформацияОбОшибке = Результат.ИнформацияОбОшибке;
РезультатЗапуска.КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки;
РезультатЗапуска.ПодробноеПредставлениеОшибки = Результат.ПодробноеПредставлениеОшибки;
ОписаниеОсновногоПотока = Новый Структура;
ОписаниеОсновногоПотока.Вставить("ИдентификаторПроцесса", ИдентификаторПроцесса);
ОписаниеОсновногоПотока.Вставить("ИдентификаторПотока", ПустойИдентификатор);
ОписаниеОсновногоПотока.Вставить("ИдентификаторЗадания", ИдентификаторЗадания);
ОписаниеОсновногоПотока.Вставить("КлючПотока",
Новый ХранилищеЗначения(ПоследнийИдентификатор(ИдентификаторЗадания)));
ОбновитьСведенияОПотоке(ОписаниеОсновногоПотока, РезультатЗапуска,,, Истина);
КонецЕсли;
// Удаление из запущенных.
Свойства = Новый Структура(ПараметрыСеанса.ДлительныеОперации);
Запущенные = Новый Соответствие(Свойства.Запущенные);
Запущенные.Удалить(ИдентификаторЗадания);
Свойства.Запущенные = Новый ФиксированноеСоответствие(Запущенные);
ПараметрыСеанса.ДлительныеОперации = Новый ФиксированнаяСтруктура(Свойства);
КонецПроцедуры
Процедура УдалитьДанныеОПотоках(ИдентификаторПроцесса)
УстановитьПривилегированныйРежим(Истина);
@@ -5186,6 +5186,8 @@
Если ЗначениеЗаполнено(СведенияОДоверителе.НаимИП) Тогда
ЗаписьXML.ЗаписатьАтрибут("НаимИП", СведенияОДоверителе.НаимИП);
Иначе
ЗаписьXML.ЗаписатьАтрибут("НаимИП", ФИОСтрокой(СведенияОДоверителе.СведФЛ.ФИО));
КонецЕсли;
ЗаписьXML.ЗаписатьАтрибут("ИННФЛ", СведенияОДоверителе.ИННФЛ);
@@ -5263,6 +5265,26 @@
КонецФункции
Функция ФИОСтрокой(ФИО) Экспорт
Фамилия = ФИО.Фамилия;
Имя = ФИО.Имя;
Отчество = ФИО.Отчество;
Если ЗначениеЗаполнено(Отчество) Тогда
ФИОСтрокой = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 %2 %3'"),
Фамилия, Имя, Отчество);
Иначе
ФИОСтрокой = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 %2'"),
Фамилия, Имя);
КонецЕсли;
Возврат ФИОСтрокой;
КонецФункции
Функция ИспользуетсяРежимТестирования()
Возврат Ложь;
@@ -18,7 +18,7 @@
МосковскоеВремя = НачалоДня(МестноеВремя(ТекущаяУниверсальнаяДата(), ЧасовойПоясМосквы));
Возврат МосковскоеВремя >= Дата(2025, 10, 1);
Возврат МосковскоеВремя >= Дата(2025, 11, 1);
КонецФункции
@@ -1861,7 +1861,7 @@
ИмяФайлаСИзменениями = ПолноеИмяФайлаДанныхОтложенногоОбновления();
ФайлДляЗаписиXML = Новый ЗаписьFastInfoset;
ФайлДляЗаписиXML.ОткрытьФайл(ИмяФайлаСИзменениями);
ФайлДляЗаписиXML.УстановитьДвоичныеДанные();
ФайлДляЗаписиXML.ЗаписатьОбъявлениеXML();
ФайлДляЗаписиXML.ЗаписатьНачалоЭлемента("Objects");
@@ -2135,10 +2135,8 @@
ЗаписьXML = Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
ИмяФайлаСИзменениями = Параметры.ИмяФайлаСИзменениями;
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаСИзменениями);
ДвоичныеДанныеФайла = ЗаписьXML.Закрыть();
Возврат Новый ХранилищеЗначения(ДвоичныеДанныеФайла, Новый СжатиеДанных(9));
@@ -44,7 +44,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.11.283";
Описание.Версия = "3.1.11.299";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -943,6 +943,12 @@
Продолжить;
КонецЕсли;
ЗначениеСписка = Форма.Элементы.Найти(ИмяСписка + "Значение");
Если Список.Количество() > 0 И ЗначениеСписка <> Неопределено
И ЗначениеСписка.ПараметрыВыбора.Количество() > 0 Тогда
Продолжить;
КонецЕсли;
Для Каждого Элемент Из ЗначениеОтбора Цикл
Если Список.НайтиПоЗначению(Элемент.Значение) = Неопределено Тогда
Список.Добавить(Элемент.Значение);
@@ -433,16 +433,12 @@
Если НЕ ИспользуетсяПочтовыйКлиент() И ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов")
И ТипЗнч(ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда
ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, СтрокаПолучатель.Ключ, ПараметрыДоставки.ДатаВыполнения);
ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись;
ПоляИстории.АдресЭП = СтрокаПолучатель.Значение;
ПоляИстории.Комментарий = ТекстСообщения;
ПоляИстории.Выполнена = Ложь;
ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, СтрокаПолучатель.Ключ, СтрокаПолучатель.Значение);
ПоляИстории.ИдентификаторПисьма = "";
ПоляИстории.Период = ТекущаяДатаСеанса();
РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории);
КлючАдресаДоставки = ?(ПараметрыДоставки.СкрытыеКопии, "СкрытыеКопии", "Кому");
АдресаПолучателя = ПараметрыДоставки.ПараметрыПисьма[КлючАдресаДоставки];
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1 %2", ТекстСообщения, РасширенноеПредставлениеОшибки);
ЗафиксироватьНеудачныйРезультатРассылки(ПараметрыДоставки, ПараметрыЖурнала,
ПараметрыДоставки.Получатель, АдресаПолучателя, Комментарий);
КонецЕсли;
КонецПопытки;
@@ -3429,12 +3425,15 @@
ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, Получатель, ПараметрыДоставки.ДатаВыполнения);
ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись;
ПоляИстории.АдресЭП = Кому.Адрес;
ПоляИстории.Комментарий = РезультатОтправки.ОписаниеОшибки;
ПоляИстории.Выполнена = Ложь;
ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, Получатель, Кому.Адрес);
ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо;
ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма;
Если ТипЗнч(РезультатОтправки) = Тип("Строка") Тогда
ПоляИстории.Комментарий = РезультатОтправки;
Иначе
ПоляИстории.Комментарий = РезультатОтправки.ОписаниеОшибки;
ПоляИстории.ЭлектронноеПисьмоИсходящее = РезультатОтправки.СсылкаНаПисьмо;
ПоляИстории.ИдентификаторПисьма = РезультатОтправки.ИдентификаторПисьма;
КонецЕсли;
РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(ПоляИстории);
КонецЦикла;
@@ -5126,24 +5125,13 @@
Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И Не ИспользуетсяПочтовыйКлиент() И ТипЗнч(
ПараметрыЖурнала.Данные) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда
Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1 %2", ШаблонСообщенияОбОшибке, РасширенноеПредставлениеОшибки);
Для Каждого СтрокаПолучатель Из ПараметрыДоставки.Получатели Цикл
АдресаПолучателя = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(
СтрокаПолучатель.Значение);
Для Каждого АдресЭП Из АдресаПолучателя Цикл
ПоляИстории = ПоляИсторииРассылкиОтчетов(ПараметрыЖурнала.Данные, СтрокаПолучатель.Ключ,
ПараметрыДоставки.ДатаВыполнения);
ПоляИстории.УчетнаяЗапись = ПараметрыДоставки.УчетнаяЗапись;
ПоляИстории.АдресЭП = АдресЭП.Адрес;
ПоляИстории.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"%1 %2", ШаблонСообщенияОбОшибке, РасширенноеПредставлениеОшибки);
ПоляИстории.Выполнена = Ложь;
ПоляИстории.СпособПолучения = СпособПолученияРассылки(ПараметрыДоставки, СтрокаПолучатель.Ключ,
АдресЭП.Адрес);
РегистрыСведений.ИсторияРассылкиОтчетов.ЗафиксироватьРезультатВыполненияРассылкиПолучателю(
ПоляИстории);
КонецЦикла;
ЗафиксироватьНеудачныйРезультатРассылки(ПараметрыДоставки, ПараметрыЖурнала, СтрокаПолучатель.Ключ,
АдресаПолучателя, Комментарий);
КонецЦикла;
КонецЕсли;
КонецПопытки;
@@ -1780,6 +1780,9 @@
Возврат;
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Истина);
УстановитьПривилегированныйРежим(Истина);
Если ДоставкаСерверныхОповещенийСОтсрочкойУжеВыполняется(ТекущееФоновоеЗадание)
Или Не СерверныеОповещенияСлужебныйПовтИсп.УведомленияКлиентаДоступны()
И Не ТекущийПользовательЗарегистрированВСистемеВзаимодействия() Тогда
@@ -175,6 +175,7 @@
СостояниеПолучения.ПроверкаРазрешена = Истина;
ПодключитьОбработчикПроверкиПолученияСерверныхОповещений();
ПодключитьОбработчикНовыхСообщений(СостояниеПолучения());
КонецПроцедуры
@@ -238,12 +239,10 @@
- ?(Секунда(ТекущаяДатаСеанса) < СостояниеПолучения.ЧислоСекундВыравниванияДатыСчетчиковОжидания, 60, 0);
Интервал = 60;
ОбсужденияАктивны =
СостояниеПолучения.ПериодическаяОтправкаДанныхРазрешена
И (СостояниеПолучения.УведомленияКлиентаДоступны
Или СостояниеПолучения.СистемаВзаимодействийПодключена
И СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен
И СостояниеПолучения.ДатаПоследнегоПолученияСообщения + 60 > ТекущаяДатаСеанса);
ОбсужденияАктивны = СостояниеПолучения.УведомленияКлиентаДоступны
Или СостояниеПолучения.СистемаВзаимодействийПодключена
И СостояниеПолучения.ОбработчикНовыхЛичныхСообщенийПодключен
И СостояниеПолучения.ДатаПоследнегоПолученияСообщения + 60 > ТекущаяДатаСеанса;
МоментНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
Попытка
@@ -17,15 +17,13 @@
СистемнаяИнформация = Новый СистемнаяИнформация;
Версия = СистемнаяИнформация.ВерсияПриложения;
Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.26.1498") >= 0
И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.27.0") < 0
Или ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.27.1288") >= 0;
Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия, "8.3.27.1606") >= 0;
КонецФункции
Функция ТолькоДляТестирования()
Возврат Истина;
Возврат Ложь;
КонецФункции
@@ -494,10 +494,15 @@
Если Не ЗначениеЗаполнено(ПараметрыПодписанта.НомерТелефона) Тогда
ВызватьИсключение НСтр("ru = 'Не заполнен номер телефона'");
КонецЕсли;
Если Не ЗначениеЗаполнено(ПараметрыПодписанта.ИННФЛ) Тогда
ВызватьИсключение НСтр("ru = 'Не заполнен номер ИНН физического лица'");
Если Не ЗначениеЗаполнено(ПараметрыПодписанта.ИННФЛ) И Не ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
ВызватьИсключение НСтр("ru = 'Не заполнен ИНН'");
КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) И Не ЗначениеЗаполнено(ПараметрыПодписанта.ОГРН) Тогда
ВызватьИсключение НСтр("ru = 'Не заполнен ОГРН'");
КонецЕсли;
НомерТелефона = СервисМобильнойПодписиКлиентСервер.ТолькоЦифры(ПараметрыПодписанта.НомерТелефона);
Если СтрДлина(НомерТелефона) = 11 И СтрНачинаетсяС(НомерТелефона, "8") Тогда
НомерТелефона = "7" + Прав(НомерТелефона, 10);
@@ -512,7 +517,11 @@
ПараметрыПодписанта.ИННФЛ = СервисМобильнойПодписиКлиентСервер.ТолькоЦифры(ПараметрыПодписанта.ИННФЛ);
ПараметрыПодписанта.ИНН = СервисМобильнойПодписиКлиентСервер.ТолькоЦифры(ПараметрыПодписанта.ИНН);
Если СтрДлина(ПараметрыПодписанта.ИННФЛ) <> 12 Тогда
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
ПараметрыПодписанта.ИННФЛ = "";
КонецЕсли;
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИННФЛ) И СтрДлина(ПараметрыПодписанта.ИННФЛ) <> 12 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'ИНН физического лица должен быть длиной 12 символов: %1'"), ПараметрыПодписанта.ИННФЛ);
КонецЕсли;
@@ -646,12 +655,15 @@
ЗапросHTTP = Новый HTTPЗапрос(РесурсНаСервере, ЗаголовкиHTTP);
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИННФЛ);
СтруктураЗапроса.Вставить("phone", ПараметрыПодписанта.НомерТелефона);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
СтруктураЗапроса.Вставить("legalEntityInn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.Вставить("legalEntity", Новый Структура);
СтруктураЗапроса.legalEntity.Вставить("inn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.legalEntity.Вставить("ogrn", ПараметрыПодписанта.ОГРН);
Иначе
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИННФЛ);
КонецЕсли;
СтруктураЗапроса.Вставить("phone", ПараметрыПодписанта.НомерТелефона);
ТелоЗапроса = ОбщегоНазначения.ЗначениеВJSON(СтруктураЗапроса);
ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);
@@ -761,17 +773,20 @@
ЗапросHTTP = Новый HTTPЗапрос(РесурсНаСервере, ЗаголовкиHTTP);
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИННФЛ);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.Вставить("legalEntity", Новый Структура);
СтруктураЗапроса.legalEntity.Вставить("inn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.legalEntity.Вставить("ogrn", ПараметрыПодписанта.ОГРН);
Иначе
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИННФЛ);
КонецЕсли;
СтруктураЗапроса.Вставить("phone", ПараметрыПодписанта.НомерТелефона);
Генератор = Новый ГенераторСлучайныхЧисел(ТекущаяДатаСеанса() - Дата(1, 1, 1));
Код = Формат(Генератор.СлучайноеЧисло(1000, 9999), "ЧГ=0");
СтруктураЗапроса.Вставить("syncCode", Код);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
СтруктураЗапроса.Вставить("legalEntity", Новый Структура);
СтруктураЗапроса.legalEntity.Вставить("inn", ПараметрыПодписанта.ИНН);
КонецЕсли;
ТелоЗапроса = ОбщегоНазначения.ЗначениеВJSON(СтруктураЗапроса);
ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);
@@ -895,11 +910,20 @@
| НЕ ПодписантыСервисаМобильнойПодписи.ПометкаУдаления
| И ПодписантыСервисаМобильнойПодписи.ИННФЛ = &ИННФЛ
| И ПодписантыСервисаМобильнойПодписи.ИНН = &ИНН
| И ПодписантыСервисаМобильнойПодписи.ОГРН = &ОГРН
| И ПодписантыСервисаМобильнойПодписи.НомерТелефона = &НомерТелефона";
Запрос.УстановитьПараметр("НомерТелефона", ПараметрыПодписанта.НомерТелефона);
Запрос.УстановитьПараметр("ИННФЛ", ПараметрыПодписанта.ИННФЛ);
Запрос.УстановитьПараметр("ИНН", ПараметрыПодписанта.ИНН);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
Запрос.УстановитьПараметр("ИНН", ПараметрыПодписанта.ИНН);
Запрос.УстановитьПараметр("ОГРН", ПараметрыПодписанта.ОГРН);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ПодписантыСервисаМобильнойПодписи.ИННФЛ = &ИННФЛ", "");
Иначе
Запрос.УстановитьПараметр("ИННФЛ", ПараметрыПодписанта.ИННФЛ);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ПодписантыСервисаМобильнойПодписи.ИНН = &ИНН", "");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ПодписантыСервисаМобильнойПодписи.ОГРН = &ОГРН", "");
КонецЕсли;
НачатьТранзакцию();
Попытка
@@ -955,11 +979,21 @@
| НЕ ПодписантыСервисаМобильнойПодписи.ПометкаУдаления
| И ПодписантыСервисаМобильнойПодписи.ИННФЛ = &ИННФЛ
| И ПодписантыСервисаМобильнойПодписи.ИНН = &ИНН
| И ПодписантыСервисаМобильнойПодписи.ОГРН = &ОГРН
| И ПодписантыСервисаМобильнойПодписи.НомерТелефона = &НомерТелефона";
Запрос.УстановитьПараметр("НомерТелефона", ПараметрыПодписанта.НомерТелефона);
Запрос.УстановитьПараметр("ИННФЛ", ПараметрыПодписанта.ИННФЛ);
Запрос.УстановитьПараметр("ИНН", ПараметрыПодписанта.ИНН);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
Запрос.УстановитьПараметр("ИНН", ПараметрыПодписанта.ИНН);
Запрос.УстановитьПараметр("ОГРН", ПараметрыПодписанта.ОГРН);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ПодписантыСервисаМобильнойПодписи.ИННФЛ = &ИННФЛ", "");
Иначе
Запрос.УстановитьПараметр("ИННФЛ", ПараметрыПодписанта.ИННФЛ);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ПодписантыСервисаМобильнойПодписи.ИНН = &ИНН", "");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ПодписантыСервисаМобильнойПодписи.ОГРН = &ОГРН", "");
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Справочники.ПодписантыСервисаМобильнойПодписи.ПустаяСсылка();
@@ -1114,11 +1148,14 @@
КонецЕсли;
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИННФЛ);
СтруктураЗапроса.Вставить("phone", ПараметрыПодписанта.НомерТелефона);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.Вставить("legalEntity", Новый Структура);
СтруктураЗапроса.legalEntity.Вставить("inn", ПараметрыПодписанта.ИНН);
СтруктураЗапроса.legalEntity.Вставить("ogrn", ПараметрыПодписанта.ОГРН);
Иначе
СтруктураЗапроса.Вставить("inn", ПараметрыПодписанта.ИННФЛ);
КонецЕсли;
СтруктураЗапроса.Вставить("documents", Новый Массив);
Если Параметры.ТипПодписи = Перечисления.ТипыПодписиКриптографии.СМеткойДоверенногоВремениCAdEST Тогда
@@ -1365,15 +1402,11 @@
Телефон = Лев(ПараметрыПодписанта.НомерТелефона, 3) + "****" + Прав(ПараметрыПодписанта.НомерТелефона, 4);
Если ЗначениеЗаполнено(ПараметрыПодписанта.ИНН) Тогда
Если ЗначениеЗаполнено(ПараметрыПодписанта.ОГРН) Тогда
ДанныеПодписанта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='ИНН ЮЛ: %1, ОГРН: %2, ИНН ФЛ: %3, Телефон: +%4'"), ПараметрыПодписанта.ИНН,
ПараметрыПодписанта.ОГРН, ПараметрыПодписанта.ИННФЛ, Телефон);
Иначе
ДанныеПодписанта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='ИНН ЮЛ: %1, ИНН ФЛ: %2, Телефон: +%3'"), ПараметрыПодписанта.ИНН,
ПараметрыПодписанта.ИННФЛ, Телефон);
КонецЕсли;
НСтр("ru='ИНН ЮЛ: %1, ОГРН: %2, Телефон: +%3'"), ПараметрыПодписанта.ИНН,
ПараметрыПодписанта.ОГРН, Телефон);
Иначе
ДанныеПодписанта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='ИНН ФЛ: %1, Телефон: +%2'"), ПараметрыПодписанта.ИННФЛ,
@@ -1381,10 +1414,10 @@
КонецЕсли;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(
"ru='Не найден подписант с данными %1. Убедитесь, что у подписанта установлено приложение ""Моя подпись"" от ФНС и выпущен сертификат.
|Сообщите подписанту секретный код %2 для подписания согласия на получение документов из ""1С:Мобильная подпись"" в приложении ""Моя подпись"" от ФНС.'"),
ДанныеПодписанта,
СогласиеПодписанта.Код);
"ru='Для подписанта с данными %1 сервис ФНС ответил ""%2"".
|Проверьте данные, убедитесь, что у подписанта установлено приложение ""Моя подпись"" от ФНС и выпущен сертификат.
|Сообщите подписанту секретный код %3 для подписания согласия на получение документов из ""1С:Мобильная подпись"" в приложении ""Моя подпись"" от ФНС.'"),
ДанныеПодписанта, ОшибкаКлиентНеНайден(), СогласиеПодписанта.Код);
Результат.Ошибка = ОшибкаМобильногоСервиса(ЗаголовокОшибки, ТекстОшибки, ИдентификаторЗапроса);
@@ -16556,9 +16556,7 @@
ЗаписатьРезультатОбновленияДоступаСпискаВФоне(Результат, Выборка.Параметры, Контекст);
КонецЦикла;
Если РегистрироватьПоказателиОбновленияДоступа() Тогда
ЗарегистрироватьПоказателиОбновленияИсполняющегоПотока(Контекст);
КонецЕсли;
ЗарегистрироватьПоказателиОбновленияИсполняющегоПотока(Контекст);
КонецПроцедуры
@@ -16737,12 +16735,11 @@
// Для процедуры ВыполнитьОбновлениеДоступа.
Процедура ДобавитьПоказателиОбновленияУправляющегоПотока(Контекст)
Если Не РегистрироватьПоказателиОбновленияДоступа() Тогда
Показатели = Контекст.Показатели;
Если Показатели = Неопределено Тогда
Возврат;
КонецЕсли;
Показатели = Контекст.Показатели;
Если Контекст.ОбновлениеВЭтомСеансе Тогда
ДобавитьПоказателиВыполненияЗаданий(Показатели);
Иначе
@@ -16769,7 +16766,8 @@
// Для процедуры ВыполнитьОбновлениеДоступаСпискаВФоне.
Функция ПоказателиОбновленияИсполняющегоПотока()
Если Не РегистрироватьПоказателиОбновленияДоступа() Тогда
Если Не РегистрироватьПоказателиОбновленияДоступа()
Или Не ПользователиСлужебный.ВключенаЗаписьИнформацииВЖурнал() Тогда
Возврат Неопределено;
КонецЕсли;
@@ -16951,6 +16949,10 @@
Процедура ЗарегистрироватьПоказателиОбновленияОсновногоПотока(Контекст)
Показатели = Контекст.Показатели;
Если Показатели = Неопределено Тогда
Возврат;
КонецЕсли;
ОписаниеСеанса = Контекст.ОписаниеОсновногоСеанса; // См. ОписаниеОсновногоСеанса
Если Контекст.ОбновлениеВЭтомСеансе Тогда
@@ -17010,6 +17012,9 @@
Процедура ЗарегистрироватьПоказателиОбновленияИсполняющегоПотока(Контекст)
Показатели = Контекст.Показатели;
Если Показатели = Неопределено Тогда
Возврат;
КонецЕсли;
ВремяОжиданияНовыхЗаданий = Показатели.ВремяОжиданияНовыхЗаданий / 1000;
@@ -286,20 +286,24 @@
Если Письма.Количество() <> 0 Тогда
Для Каждого КлючИЗначение Из Письма Цикл
ДанныеПервогоПисьма = СсылкаНаПисьмоПоОтправляемомуПочтовомуСообщению(ДанныеПисем, Письма[0]);
Если ДанныеПервогоПисьма <> Неопределено Тогда
ПараметрыОбработкиОшибки = ПараметрыОбработкиОшибкиОтправки();
ПараметрыОбработкиОшибки.ПисьмоОбъект = КлючИЗначение.Ключ.ПолучитьОбъект();
ПараметрыОбработкиОшибки.Ссылка = КлючИЗначение.Ключ;
ПараметрыОбработкиОшибки.ПредставлениеПисьма = КлючИЗначение.Значение.ПредставлениеПисьма;
ПараметрыОбработкиОшибки.КоличествоПопыток = КлючИЗначение.Значение.КоличествоПопыток;
ПараметрыОбработкиОшибки.ПисьмоОбъект = ДанныеПервогоПисьма.Ключ.ПолучитьОбъект();
ПараметрыОбработкиОшибки.Ссылка = ДанныеПервогоПисьма.Ключ;
ПараметрыОбработкиОшибки.ПредставлениеПисьма = ДанныеПервогоПисьма.Значение.ПредставлениеПисьма;
ПараметрыОбработкиОшибки.КоличествоПопыток = ДанныеПервогоПисьма.Значение.КоличествоПопыток;
ПараметрыОбработкиОшибки.ИнкрементироватьКоличествоПопыток = Истина;
ПараметрыОбработкиОшибки.СообщатьПользователю = Интерактивно;
ПараметрыОбработкиОшибки.ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
РезультатОбработкиОшибки = ОбработатьОшибкуОтправкиПисьма(ПараметрыОбработкиОшибки, Новый Массив);
КонецЦикла;
КонецЕсли;
Продолжить;
Продолжить;
@@ -673,7 +673,14 @@
ДополнительныеПараметры.Вставить("ИмяОткрываемогоФайла", ИмяОткрываемогоФайла);
ОписаниеОповещения = Новый ОписаниеОповещения("НапечататьИзПриложенияПоИмениФайлаLinux",
ЭтотОбъект, ДополнительныеПараметры);
ПроверитьПрограммаLinuxУстановлена("Unoconv", ОписаниеОповещения);
СистемныеСвойства = Новый СистемнаяИнформация();
Если СтрНайти(ВРег(СистемныеСвойства.ВерсияОС), "UBUNTU") > 0 Или СтрНайти(ВРег(СистемныеСвойства.ВерсияОС), "ASTRA") > 0 Тогда
ПроверитьПрограммаLinuxУстановлена("Unoconv", ОписаниеОповещения);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения("НапечататьИзПриложенияПоИмениФайлаLinuxЗапускUnoconv",
ЭтотОбъект, ДополнительныеПараметры);
ПолучитьПолноеИмяВременногоФайла(ОписаниеОповещения);
КонецЕсли;
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов данного типа возможна только из приложения для Windows или Linux.'"));
Возврат;
@@ -3403,36 +3403,31 @@
Если Не ЗначениеЗаполнено(НоваяЗапись.УстановившийПодпись) Тогда
НоваяЗапись.УстановившийПодпись = Пользователи.АвторизованныйПользователь();
КонецЕсли;
Если ЗначениеЗаполнено(СвойстваПодписи.Подпись) Тогда
ДатаПодписи = Неопределено;
Если ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
СвойстваПодписи, "НеподтвержденнаяДатаПодписи", Неопределено)) Тогда
ДатаПодписи = СвойстваПодписи.НеподтвержденнаяДатаПодписи;
ИначеЕсли ЗначениеЗаполнено(НоваяЗапись.ТипПодписи) Тогда
ДатаПодписи = ДатаПодписания(СвойстваПодписи.Подпись);
Иначе
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписиИзДвоичныхДанных(
СвойстваПодписи.Подпись, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем());
Если ЗначениеЗаполнено(ПараметрыПодписи.ДатаПодписания) Тогда
ДатаПодписи = ПараметрыПодписи.ДатаПодписания;
КонецЕсли;
НоваяЗапись.ТипПодписи = ПараметрыПодписи.ТипПодписи;
КонецЕсли;
Если ДатаПодписи <> Неопределено Тогда
НоваяЗапись.ДатаПодписи = ДатаПодписи;
ИначеЕсли Не ЗначениеЗаполнено(НоваяЗапись.ДатаПодписи) Тогда
НоваяЗапись.ДатаПодписи = ТекущаяДатаСеанса();
КонецЕсли;
СообщениеЖурналаРегистрации = ЭлектроннаяПодписьСлужебный.СведенияОПодписиДляЖурналаРегистрации(
НоваяЗапись.ДатаПодписи, СвойстваПодписи);
ДатаПодписи = Неопределено;
Если ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(
СвойстваПодписи, "НеподтвержденнаяДатаПодписи", Неопределено)) Тогда
ДатаПодписи = СвойстваПодписи.НеподтвержденнаяДатаПодписи;
ИначеЕсли ЗначениеЗаполнено(НоваяЗапись.ТипПодписи) Тогда
ДатаПодписи = ДатаПодписания(СвойстваПодписи.Подпись);
Иначе
СообщениеЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отправлен на подписание: %1'"), НоваяЗапись.КомуВыданСертификат);
ПараметрыПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписиИзДвоичныхДанных(
СвойстваПодписи.Подпись, ЭлектроннаяПодписьСлужебный.РазницаСУниверсальнымВременем());
Если ЗначениеЗаполнено(ПараметрыПодписи.ДатаПодписания) Тогда
ДатаПодписи = ПараметрыПодписи.ДатаПодписания;
КонецЕсли;
НоваяЗапись.ТипПодписи = ПараметрыПодписи.ТипПодписи;
КонецЕсли;
Если ДатаПодписи <> Неопределено Тогда
НоваяЗапись.ДатаПодписи = ДатаПодписи;
ИначеЕсли Не ЗначениеЗаполнено(НоваяЗапись.ДатаПодписи) Тогда
НоваяЗапись.ДатаПодписи = ТекущаяДатаСеанса();
КонецЕсли;
СообщениеЖурналаРегистрации = ЭлектроннаяПодписьСлужебный.СведенияОПодписиДляЖурналаРегистрации(
НоваяЗапись.ДатаПодписи, СвойстваПодписи);
Если Не ЗначениеЗаполнено(НоваяЗапись.ИдентификаторПодписи) Тогда
НоваяЗапись.ИдентификаторПодписи = Новый УникальныйИдентификатор;
КонецЕсли;
@@ -1005,14 +1005,14 @@
// Возвращает выборку сертификатов физических лиц.
//
// Параметры:
// ФизическиеЛица - Массив из ОпределяемыйТип.ФизическоеЛицо
// ФизическиеЛицаДляОтбора - Массив из ОпределяемыйТип.ФизическоеЛицо
//
// Возвращаемое значение:
// ВыборкаИзРезультатаЗапроса:
// * Сертификат - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования
// * ФизическоеЛицо - ОпределяемыйТип.ФизическоеЛицо
//
Функция СертификатыФизическихЛиц(ФизическиеЛица) Экспорт
Функция СертификатыФизическихЛиц(ФизическиеЛицаДляОтбора) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
@@ -1026,7 +1026,7 @@
| И НЕ СертификатыКлючейЭлектроннойПодписиИШифрования.ПометкаУдаления
| И СертификатыКлючейЭлектроннойПодписиИШифрования.ДействителенДо > &ТекущаяДатаСеанса";
Запрос.УстановитьПараметр("МассивФизическихЛиц", ФизическиеЛица);
Запрос.УстановитьПараметр("МассивФизическихЛиц", ФизическиеЛицаДляОтбора);
Запрос.УстановитьПараметр("ТекущаяДатаСеанса", ТекущаяДатаСеанса());
РезультатЗапроса = Запрос.Выполнить();
@@ -6045,13 +6045,13 @@
Пока ВыборкаНаименование.Следующий() Цикл
Выборка = ВыборкаНаименование.Выбрать();
ФизическиеЛица = Новый Массив;
ФизическиеЛицаДляНаименования = Новый Массив;
Пока Выборка.Следующий() Цикл
ФизическиеЛица.Добавить(Выборка.Ссылка);
ФизическиеЛицаДляНаименования.Добавить(Выборка.Ссылка);
КонецЦикла;
ФизическиеЛицаПоФИО.Вставить(ВыборкаНаименование.Наименование, ФизическиеЛица);
ФизическиеЛицаПоФИО.Вставить(ВыборкаНаименование.Наименование, ФизическиеЛицаДляНаименования);
КонецЦикла;
@@ -11961,7 +11961,7 @@
Возврат;
КонецЕсли;
ФизическиеЛица = Результат.ФизическиеЛица.Получить(КомуВыдан);
ФизическиеЛицаДляФИО = Результат.ФизическиеЛица.Получить(КомуВыдан);
ФизическоеЛицоПустаяСсылка = Новый (ТипЗнч(ФизическоеЛицо));
ЭтоФормаЭлемента = ?(Форма.Элементы.Найти("СертификатФизическоеЛицо") = Неопределено, Истина, Ложь);
@@ -11972,7 +11972,7 @@
Форма.СертификатФизическоеЛицо = ФизическоеЛицоПустаяСсылка;
КонецЕсли;
Если ФизическиеЛица = Неопределено Тогда
Если ФизическиеЛицаДляФИО = Неопределено Тогда
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбораФизическогоЛица", Форма);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
@@ -11981,11 +11981,11 @@
Возврат;
КонецЕсли;
Если ФизическиеЛица.Количество() = 1 Тогда
Если ФизическиеЛицаДляФИО.Количество() = 1 Тогда
Если ЭтоФормаЭлемента Тогда
Форма.Объект.ФизическоеЛицо = ФизическиеЛица[0];
Форма.Объект.ФизическоеЛицо = ФизическиеЛицаДляФИО[0];
Иначе
Форма.СертификатФизическоеЛицо = ФизическиеЛица[0];
Форма.СертификатФизическоеЛицо = ФизическиеЛицаДляФИО[0];
КонецЕсли;
Возврат;
КонецЕсли;
@@ -11995,7 +11995,7 @@
Отбор = ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ФизическиеЛица;
Отбор.ПравоеЗначение = ФизическиеЛицаДляФИО;
Отбор.Использование = Истина;
ПараметрыФормы = Новый Структура;
+9 -9
View File
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b8ace939-f976-4848-a35d-925ad5523c44">
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b3a44f7c-b4fc-40bd-a9ee-8bab22370666">
<name>БиблиотекаСтандартныхПодсистем</name>
<synonym>
<key>ru</key>
<value>Библиотека стандартных подсистем, редакция 3.1</value>
</synonym>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="ada824cc-6619-4626-b014-92f1728f0442"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="0e56190f-16fa-4913-a22d-9b03b32333e3"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="41f233e6-33e3-403d-b3bc-7337090614e1"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="10eb3597-c937-489d-905a-58448b3ea1be"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="d73b7aa5-fa9c-4207-a7ef-2d3849d7baa1"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="66f2e6ca-4218-497c-926d-e53066dcbd94"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="3f82e7a4-355a-4238-b5b4-f4e658cd1792"/>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="ba481660-139d-477a-8455-9ffae484df41"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="8ed71eb0-6de4-429b-9ff1-85f00e0cbe81"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="ad9afbfe-faaa-412d-a626-9c9533e9bd90"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="259a0334-10f4-486e-b364-585ca11d0f0a"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="9bacb48b-bf29-4360-9aeb-9275b424c306"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="5122f5c3-69dd-4dcd-a6ec-31cf0be00b8c"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="01e57c0c-625b-4956-bf79-53af08fd1b0e"/>
<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.11.283</version>
<version>3.1.11.299</version>
<updateCatalogAddress>https://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<usedMobileApplicationFunctionalities>
@@ -1 +1 @@
{6,1,1,c996a584-d225-4cea-afd4-48efed400c9a,1,bc9de0c9-f879-4d99-9c15-d4595f345b4e,"3.1.11.283","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7958,1,0,b8ace939-f976-4848-a35d-925ad5523c44,b8ace939-f976-4848-a35d-925ad5523c44,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,1,0,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,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,491b9625-62ce-436b-8245-60decacc4552,491b9625-62ce-436b-8245-60decacc4552,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-1ceLine truncated
{6,1,1,6ff836db-d8bc-4971-898d-7cab72f6ea3c,1,8cb43da2-8b1d-4c41-a245-d1af87510d62,"3.1.11.299","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",7958,1,0,b3a44f7c-b4fc-40bd-a9ee-8bab22370666,b3a44f7c-b4fc-40bd-a9ee-8bab22370666,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,fa04bf1e-69c0-4998-a939-039fcaba83c8,fa04bf1e-69c0-4998-a939-039fcaba83c8,1,0,7795348b-2f52-47f7-bf00-e11e5e795a43,7795348b-2f52-47f7-bf00-e11e5e795a43,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,5b68d479-7880-44de-84e3-7f578b43f0dc,5b68d479-7880-44de-84e3-7f578b43f0dc,1,0,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,baad68ea-0976-4bdf-8e0e-7ee5c25e3d51,1,0,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,4cbbdbaf-1f3a-46cd-8c42-28cdcfa32c06,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,1983fe34-c984-4659-ba41-0e94504f8989,1983fe34-c984-4659-ba41-0e94504f8989,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,153e11ac-f898-46a5-98c6-734adb933ca2,153e11ac-f898-46a5-98c6-734adb933ca2,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,08a413ff-bebd-42e5-8ff3-2115746a0844,08a413ff-bebd-42e5-8ff3-2115746a0844,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,3eca2d7c-5946-4d13-ba84-e3ab5ef38b5b,1,0,f24de2ea-fcda-4052-b90f-e9d84314c4f2,f24de2ea-fcda-4052-b90f-e9d84314c4f2,1,0,ff8ae395-c740-4a30-a048-0d57eef6267f,ff8ae395-c740-4a30-a048-0d57eef6267f,1,0,51d06532-f61a-4ed5-afaa-cc4563633e0c,51d06532-f61a-4ed5-afaa-cc4563633e0c,1,0,0e49d980-581b-459f-a4b0-024e8c97e4c0,0e49d980-581b-459f-a4b0-024e8c97e4c0,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,a3001de6-272f-444e-a8db-ec8cc3a670a2,a3001de6-272f-444e-a8db-ec8cc3a670a2,1,0,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,7ee7cccc-4e52-464c-9c20-5c0dfbed7e5f,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,491b9625-62ce-436b-8245-60decacc4552,491b9625-62ce-436b-8245-60decacc4552,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-1ceLine truncated
@@ -5351,6 +5351,10 @@
&НаКлиенте
Процедура ЗаполнитьПрограмму(Оповещение = Неопределено)
Если ДанныеЗаявления.СостояниеЗаявления <> ПредопределенноеЗначение("Перечисление.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено") Тогда
Возврат;
КонецЕсли;
Объект.Программа = Неопределено;
ПрограммаИдентификатор = Неопределено;
@@ -5397,6 +5401,12 @@
Объект.Программа = Контекст.ПерваяДобавленнаяПрограмма;
Иначе
ПрограммаИдентификатор = Контекст.ПерваяДобавленнаяПрограмма;
НайденаСтрока = СписокПрограмм.НайтиСтроки(Новый Структура("Идентификатор", ПрограммаИдентификатор));
Если НайденаСтрока.Количество() > 0 Тогда
КлючНаТокене = НайденаСтрока[0].ТипПрограммы = 100;
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -627,6 +627,36 @@
Для Каждого ЭлементЛокализации Из СписокЛокализации Цикл
ПараметрВебЧата.СписокЗначений.Вставить(ЭлементЛокализации.Значение, ЭлементЛокализации.Представление);
КонецЦикла;
ИначеЕсли ПараметрВебЧата.Имя = "displayUnreadMessagesMark" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Отображать отметку непрочитанных сообщений'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
ИначеЕсли ПараметрВебЧата.Имя = "displayCollapsedState" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Отображать свернутое состояние чата'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
ИначеЕсли ПараметрВебЧата.Имя = "openChatOnNewMessage" Тогда
ПараметрВебЧата.Представление = НСтр("ru = 'Открывать чат при получении нового сообщения'");
ПараметрВебЧата.Тип = "Булево";
ПараметрВебЧата.СтандартноеЗначение = "true";
ПараметрВебЧата.СписокЗначений = Новый Структура;
ПараметрВебЧата.СписокЗначений.Вставить("true", Истина);
ПараметрВебЧата.СписокЗначений.Вставить("false", Ложь);
Иначе
@@ -14290,7 +14290,9 @@
// Модули стандартных подсистем.
Попытка
// Вызов ВычислитьВБезопасномРежиме не требуется, т.к. для вычисления передается строковый литерал.
УстановитьБезопасныйРежим(Истина);
МодульДатыЗапретаИзменения = Вычислить("ДатыЗапретаИзменения");
УстановитьБезопасныйРежим(Ложь);
Исключение
МодульДатыЗапретаИзменения = Неопределено;
КонецПопытки;
@@ -14724,7 +14726,9 @@
Функция ОбщийМодуль(Имя) Экспорт
Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
УстановитьБезопасныйРежим(Истина);
Модуль = Вычислить(Имя);
УстановитьБезопасныйРежим(Ложь);
Иначе
Модуль = Неопределено;
КонецЕсли;
@@ -59,7 +59,7 @@
<row><Value>1</Value><Value>Республика</Value><Value>респ.</Value><Value>респ.</Value></row>
<row><Value>1</Value><Value>Чувашия</Value><Value>Чувашия</Value><Value></Value></row>
<row><Value>2</Value><Value>Автономный округ</Value><Value>АО</Value><Value>а.окр.</Value></row>
<row><Value>2</Value><Value>Внутригородская территория</Value><Value>вн.тер. г.</Value><Value></Value></row>
<row><Value>2</Value><Value>внутригородская территория (внутригородское муниципальное образование) города федерального значения</Value><Value>вн.тер. г.</Value><Value></Value></row>
<row><Value>2</Value><Value>Город</Value><Value>г</Value><Value>г.</Value></row>
<row><Value>2</Value><Value>Городской округ</Value><Value>г.о.</Value><Value>г.о.</Value></row>
<row><Value>2</Value><Value>Муниципальный округ</Value><Value>м.о.</Value><Value>м.о.</Value></row>
@@ -74,8 +74,8 @@
<row><Value>2</Value><Value>Город</Value><Value>г</Value><Value>г.</Value></row>
<row><Value>3</Value><Value>Городской округ</Value><Value>г.о.</Value><Value>г.о.</Value></row>
<row><Value>3</Value><Value>Муниципальный район</Value><Value>м.р-н</Value><Value>м.р-н</Value></row>
<row><Value>3</Value><Value>Внутригородская территория</Value><Value>вн.тер.</Value><Value>вн.тер.</Value></row>
<row><Value>3</Value><Value>Внутригородская территория</Value><Value>вн.тер.г.</Value><Value>вн.тер.г.</Value></row>
<row><Value>3</Value><Value>внутригородская территория</Value><Value>вн.тер.</Value><Value>вн.тер.</Value></row>
<row><Value>3</Value><Value>внутригородская территория (внутригородское муниципальное образование) города федерального значения</Value><Value>вн.тер.г.</Value><Value>вн.тер.г.</Value></row>
<row><Value>3</Value><Value>Муниципальный округ</Value><Value>м.о.</Value><Value>м.о.</Value></row>
<row><Value>3</Value><Value>Федеральная территория</Value><Value>ф.т.</Value><Value>ф.т.</Value></row>
<row><Value>5</Value><Value>Волость</Value><Value>волость</Value><Value></Value></row>
@@ -96,13 +96,14 @@
<row><Value>5</Value><Value>Рабочий поселок</Value><Value>рп</Value><Value>рп.</Value></row>
<row><Value>5</Value><Value>Территория</Value><Value>тер</Value><Value>тер.</Value></row>
<row><Value>4</Value><Value>Сельское поселение</Value><Value>с.п.</Value><Value>с.п.</Value></row>
<row><Value>4</Value><Value>Внутригородской район</Value><Value>вн.р-н</Value><Value>вн.р-н</Value></row>
<row><Value>4</Value><Value>внутригородской район</Value><Value>вн.р-н</Value><Value>вн.р-н</Value></row>
<row><Value>4</Value><Value>Городское поселение</Value><Value>г.п.</Value><Value>г.п.</Value></row>
<row><Value>4</Value><Value>Городское поселение</Value><Value>г. п.</Value><Value>г.п.</Value></row>
<row><Value>4</Value><Value>Межселенная территория</Value><Value>меж.тер.</Value><Value>меж.тер.</Value></row>
<row><Value>6</Value><Value>Волость</Value><Value>волость</Value><Value></Value></row>
<row><Value>6</Value><Value>Выселки(ок)</Value><Value>высел</Value><Value></Value></row>
<row><Value>6</Value><Value>Город</Value><Value>г</Value><Value>г.</Value></row>
<row><Value>6</Value><Value>Город</Value><Value>г.</Value><Value>г.</Value></row>
<row><Value>6</Value><Value>Городок</Value><Value>г-к</Value><Value>г-к</Value></row>
<row><Value>6</Value><Value>Городской поселок</Value><Value>гп</Value><Value>гп.</Value></row>
<row><Value>6</Value><Value>Дачный поселок</Value><Value>дп</Value><Value>дп.</Value></row>
@@ -8,7 +8,7 @@
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
#Область СлужебныеПроцедурыИФункции
// Возвращает данные кэша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов.
//
@@ -20,221 +20,171 @@
// данных в кэше перед возвратом значения, в случае обнаружения факта их устаревания.
// Истина - всегда использовать данные из кэша, если они там есть. Ложь - ожидать
// обновления данных кэша, в случае обнаружения факта устаревания данных.
// ЭтоЗащищенноеСоединениеПоУмолчанию - Булево, Неопределено
//
// Возвращаемое значение:
// ФиксированныйМассив, ДвоичныеДанные
//
Функция ДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения, Знач ИспользоватьУстаревшиеДанные = Истина) Экспорт
Функция ДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения,
Знач ИспользоватьУстаревшиеДанные = Истина, Знач ЭтоЗащищенноеСоединениеПоУмолчанию = Неопределено) Экспорт
Выборка = ТекущиеДанныеКэшаВерсий(Идентификатор, ТипДанных);
ТребуетсяВыполнитьОбновление = Ложь;
ТребуютсяОбновленныеДанные = Ложь;
Если Выборка = Неопределено Тогда
ТребуетсяВыполнитьОбновление = Истина;
ТребуютсяОбновленныеДанные = Истина;
ИначеЕсли Не КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда
ТребуетсяВыполнитьОбновление = Истина;
ТребуютсяОбновленныеДанные = Не ИспользоватьУстаревшиеДанные;
КонецЕсли;
Если Не ТребуетсяВыполнитьОбновление Тогда
Возврат Выборка.Данные.Получить();
КонецЕсли;
ОбновлениеВТекущемСеансе = ТребуютсяОбновленныеДанные
Или ОбщегоНазначения.ИнформационнаяБазаФайловая()
Или МонопольныйРежим()
Или ОбщегоНазначения.РежимОтладки()
Или ТекущийРежимЗапуска() = Неопределено
Или ЭтоЗащищенноеСоединениеПоУмолчанию = Ложь;
ПараметрыОбновления = Новый Структура;
ПараметрыОбновления.Вставить("Идентификатор", Идентификатор);
ПараметрыОбновления.Вставить("ТипДанных", ТипДанных);
ПараметрыОбновления.Вставить("ПараметрыПолучения", ПараметрыПолучения);
Если ОбновлениеВТекущемСеансе Тогда
ОбновитьДанныеКэшаВерсий(ПараметрыОбновления, Выборка);
Иначе
Если ПараметрыПолучения.Количество() > 4 И ПараметрыПолучения[4] <> Неопределено Тогда
ПараметрыОбновления.ПараметрыПолучения = Новый Массив(Новый ФиксированныйМассив(ПараметрыПолучения));
ПараметрыОбновления.ПараметрыПолучения[4] = Null;
КонецЕсли;
ИмяПроцедуры = "РегистрыСведений.КэшПрограммныхИнтерфейсов.ОбновитьДанныеКэшаВерсий";
НаименованиеЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Обновление кэша версий. Идентификатор записи %1. Тип данных %2.'"),
Идентификатор, ТипДанных);
ОтборЗаданий = Новый Структура;
ОтборЗаданий.Вставить("ИмяМетода", ИмяПроцедуры);
ОтборЗаданий.Вставить("Наименование", НаименованиеЗадания);
ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
Если ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий).Количество() = 0 Тогда
ПараметрыОперации = ДлительныеОперации.ПараметрыВыполненияВФоне(Неопределено);
ПараметрыОперации.НаименованиеФоновогоЗадания = НаименованиеЗадания;
ПараметрыОперации.ЗапуститьВФоне = Истина;
ПараметрыОперации.ОжидатьЗавершение = 0;
ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыОбновления, ПараметрыОперации);
КонецЕсли;
КонецЕсли;
Возврат Выборка.Данные.Получить();
КонецФункции
// Для функции ДанныеКэшаВерсий и процедуры ОбновитьДанныеКэшаВерсий.
Функция ТекущиеДанныеКэшаВерсий(Идентификатор, ТипДанных)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаКэша.ДатаОбновления КАК ДатаОбновления,
| ТаблицаКэша.Данные КАК Данные,
| ТаблицаКэша.ТипДанных КАК ТипДанных
|ИЗ
| РегистрСведений.КэшПрограммныхИнтерфейсов КАК ТаблицаКэша
|ГДЕ
| ТаблицаКэша.Идентификатор = &Идентификатор
| И ТаблицаКэша.ТипДанных = &ТипДанных";
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
Запрос.УстановитьПараметр("ТипДанных", ТипДанных);
НачатьТранзакцию();
Попытка
// Не устанавливаем управляемую блокировку, чтобы другие сеансы могли изменять значение пока эта транзакция активна.
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаКэша.ДатаОбновления КАК ДатаОбновления,
| ТаблицаКэша.Данные КАК Данные,
| ТаблицаКэша.ТипДанных КАК ТипДанных
|ИЗ
| РегистрСведений.КэшПрограммныхИнтерфейсов КАК ТаблицаКэша
|ГДЕ
| ТаблицаКэша.Идентификатор = &Идентификатор
| И ТаблицаКэша.ТипДанных = &ТипДанных";
ТребуетсяВыполнитьОбновление = Ложь;
ТребуетсяПеречитатьДанные = Ложь;
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Если Результат.Пустой() Тогда
ТребуетсяВыполнитьОбновление = Истина;
ТребуетсяПеречитатьДанные = Истина;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Не КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда
ТребуетсяВыполнитьОбновление = Истина;
ТребуетсяПеречитатьДанные = НЕ ИспользоватьУстаревшиеДанные;
КонецЕсли;
Если Выборка.Следующий() Тогда
Возврат Выборка;
КонецЕсли;
Если ТребуетсяВыполнитьОбновление Тогда
ОбновлениеВТекущемСеансе = ТребуетсяПеречитатьДанные
Или ОбщегоНазначения.ИнформационнаяБазаФайловая()
Или МонопольныйРежим()
Или ОбщегоНазначения.РежимОтладки()
Или ТекущийРежимЗапуска() = Неопределено;
Если ОбновлениеВТекущемСеансе Тогда
ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения);
ТребуетсяПеречитатьДанные = Истина;
Иначе
ИмяМетодаЗадания = "РегистрыСведений.КэшПрограммныхИнтерфейсов.ОбновитьДанныеКэшаВерсий";
НаименованиеЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление кэша версий. Идентификатор записи %1. Тип данных %2.'"),
Идентификатор,
ТипДанных);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(Идентификатор);
ПараметрыЗадания.Добавить(ТипДанных);
ПараметрыЗадания.Добавить(ПараметрыПолучения);
ОтборЗаданий = Новый Структура;
ОтборЗаданий.Вставить("ИмяМетода", ИмяМетодаЗадания);
ОтборЗаданий.Вставить("Наименование", НаименованиеЗадания);
ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий);
Если Задания.Количество() = 0 Тогда
// Запустим новое.
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Неопределено);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
БезопасныйРежим = БезопасныйРежим();
УстановитьОтключениеБезопасногоРежима(Истина);
ДлительныеОперации.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетодаЗадания,
ПараметрыВыполнения, ПараметрыЗадания, БезопасныйРежим);
УстановитьОтключениеБезопасногоРежима(Ложь);
КонецЕсли;
КонецЕсли;
Если ТребуетсяПеречитатьДанные Тогда
НачатьТранзакцию();
Попытка
// Не устанавливаем управляемую блокировку, чтобы другие сеансы могли изменять значение пока эта транзакция активна.
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Если Результат.Пустой() Тогда
ШаблонСообщения = НСтр("ru = 'Ошибка при обновлении кэша версий. Данные не получены.
|Идентификатор записи: %1
|Тип данных: %2'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Идентификатор, ТипДанных);
ВызватьИсключение(ТекстСообщения);
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
КонецЕсли;
КонецЕсли;
Возврат Выборка.Данные.Получить();
Возврат Неопределено;
КонецФункции
// Обновляет данные в кэше версий.
//
// Параметры:
// Идентификатор - Строка - идентификатор записи кэша.
// ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - тип обновляемых данных.
// ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш.
// ПараметрыОбновления - Структура:
// * Идентификатор - Строка - идентификатор записи кэша.
// * ТипДанных - ПеречислениеСсылка.ТипыДанныхКэшаПрограммныхИнтерфейсов - тип обновляемых данных.
// * ПараметрыПолучения - Массив - дополнительные параметры получения данных в кэш.
// АдресХранилища - Строка - не используется
// - Неопределено, ВыборкаИзРезультатаЗапроса - возвращаемое значение.
//
Процедура ОбновитьДанныеКэшаВерсий(Знач Идентификатор, Знач ТипДанных, Знач ПараметрыПолучения) Экспорт
Процедура ОбновитьДанныеКэшаВерсий(ПараметрыОбновления, АдресХранилища) Экспорт
УстановитьПривилегированныйРежим(Истина);
СтруктураКлюча = Новый Структура("Идентификатор, ТипДанных", Идентификатор, ТипДанных);
Ключ = СоздатьКлючЗаписи(СтруктураКлюча);
Идентификатор = ПараметрыОбновления.Идентификатор;
ТипДанных = ПараметрыОбновления.ТипДанных;
ПараметрыПолучения = ПараметрыОбновления.ПараметрыПолучения;
Попытка
ЗаблокироватьДанныеДляРедактирования(Ключ);
Исключение
// Данные уже обновляются из другого сеанса.
Возврат;
КонецПопытки;
Если ПараметрыПолучения.Количество() > 4 И ПараметрыПолучения[4] = Null Тогда
ПараметрыПолучения[4] = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаКэша.ДатаОбновления КАК ДатаОбновления,
| ТаблицаКэша.Данные КАК Данные,
| ТаблицаКэша.ТипДанных КАК ТипДанных
|ИЗ
| РегистрСведений.КэшПрограммныхИнтерфейсов КАК ТаблицаКэша
|ГДЕ
| ТаблицаКэша.Идентификатор = &Идентификатор
| И ТаблицаКэша.ТипДанных = &ТипДанных";
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
Запрос.УстановитьПараметр("ТипДанных", ТипДанных);
Если ТипЗнч(АдресХранилища) = Тип("Строка") Тогда
Выборка = ТекущиеДанныеКэшаВерсий(Идентификатор, ТипДанных);
Если Выборка <> Неопределено
И КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда
Возврат;
КонецЕсли;
КонецЕсли;
НаборЗаписей = СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Идентификатор.Установить(Идентификатор);
НаборЗаписей.Отбор.ТипДанных.Установить(ТипДанных);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Идентификатор = Идентификатор;
НоваяЗапись.ТипДанных = ТипДанных;
НоваяЗапись.ДатаОбновления = ТекущаяУниверсальнаяДата();
НаборЗаписей.ДополнительныеСвойства.Вставить("ПараметрыПолучения", ПараметрыПолучения);
НаборЗаписей.ПодготовитьДанныеДляЗаписи(НоваяЗапись.Данные);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов");
ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор);
ЭлементБлокировки.УстановитьЗначение("ТипДанных", ТипДанных);
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов");
ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор);
ЭлементБлокировки.УстановитьЗначение("ТипДанных", ТипДанных);
Блокировка.Заблокировать();
Результат = Запрос.Выполнить();
Выборка = ТекущиеДанныеКэшаВерсий(Идентификатор, ТипДанных);
// Не удерживаем транзакцию для того, чтобы другие сеансы могли выполнять чтение данных.
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
РазблокироватьДанныеДляРедактирования(Ключ);
ВызватьИсключение;
КонецПопытки;
Попытка
// Убедимся, что данные требуют обновления.
Если Не Результат.Пустой() Тогда
Если Выборка = Неопределено
Или Не КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если КэшПрограммногоИнтерфейсаАктуален(Выборка.ДатаОбновления) Тогда
РазблокироватьДанныеДляРедактирования(Ключ);
Возврат;
НаборЗаписей.Записать();
Если ТипЗнч(АдресХранилища) <> Тип("Строка") Тогда
АдресХранилища = НоваяЗапись;
КонецЕсли;
КонецЕсли;
Набор = СоздатьНаборЗаписей();
Набор.Отбор.Идентификатор.Установить(Идентификатор);
Набор.Отбор.ТипДанных.Установить(ТипДанных);
Запись = Набор.Добавить();
Запись.Идентификатор = Идентификатор;
Запись.ТипДанных = ТипДанных;
Запись.ДатаОбновления = ТекущаяУниверсальнаяДата();
Набор.ДополнительныеСвойства.Вставить("ПараметрыПолучения", ПараметрыПолучения);
Набор.ПодготовитьДанныеДляЗаписи();
Набор.Записать();
РазблокироватьДанныеДляРедактирования(Ключ);
ЗафиксироватьТранзакцию();
Исключение
РазблокироватьДанныеДляРедактирования(Ключ);
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
@@ -288,12 +238,14 @@
КонецЕсли;
ЗащищенноеСоединение = Параметры.ЗащищенноеСоединение;
ЭтоЗащищенноеСоединениеПоУмолчанию = Ложь;
Если (Протокол = "https" Или Протокол = "ftps") И ЗащищенноеСоединение = Неопределено Тогда
ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение();
ЭтоЗащищенноеСоединениеПоУмолчанию = Истина;
КонецЕсли;
WSОпределения = WSОпределения(Параметры.АдресWSDL, Параметры.ИмяПользователя, Параметры.Пароль,,
ЗащищенноеСоединение);
ЗащищенноеСоединение, ЭтоЗащищенноеСоединениеПоУмолчанию);
ИмяТочкиПодключения = Параметры.ИмяТочкиПодключения;
Если ПустаяСтрока(ИмяТочкиПодключения) Тогда
@@ -323,10 +275,6 @@
Возврат Прокси;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция КэшПрограммногоИнтерфейсаАктуален(ДатаОбновления)
Если ЗначениеЗаполнено(ДатаОбновления) Тогда
@@ -337,7 +285,8 @@
КонецФункции
Функция WSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль, Знач Таймаут = 10, Знач ЗащищенноеСоединение = Неопределено)
Функция WSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль, Знач Таймаут = 10,
Знач ЗащищенноеСоединение = Неопределено, ЭтоЗащищенноеСоединениеПоУмолчанию = Ложь)
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
Попытка
@@ -380,7 +329,8 @@
АдресWSDL,
Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса,
ПараметрыПолучения,
Ложь); // ДвоичныеДанные
Ложь,
ЭтоЗащищенноеСоединениеПоУмолчанию); // ДвоичныеДанные
ИмяФайлаWSDL = ПолучитьИмяВременногоФайла("wsdl");
ДанныеWSDL.Записать(ИмяФайлаWSDL);
@@ -72,7 +72,7 @@
#Область СлужебныеПроцедурыИФункции
Процедура ПодготовитьДанныеДляЗаписи() Экспорт
Процедура ПодготовитьДанныеДляЗаписи(ХранилищеДанных) Экспорт
ПараметрыПолучения = Неопределено;
Если Не ДополнительныеСвойства.Свойство("ПараметрыПолучения", ПараметрыПолучения) Тогда
@@ -84,8 +84,8 @@
Для Каждого Строка Из ДанныеДляЗаписи Цикл
Данные = РегистрыСведений.КэшПрограммныхИнтерфейсов.ПодготовитьДанныеКэшаВерсий(Строка.ТипДанных, ПараметрыПолучения);
Строка.Данные = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9));
ХранилищеДанных = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9));
Строка.Данные = ХранилищеДанных;
КонецЦикла;
ПодготовленыДанные = Истина;
@@ -13,22 +13,18 @@
Функция ЕстьРассчитанныеСрокиХранения() Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СрокХраненияНеРассчитан", Дата(3999, 12, 31));
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1 РАЗРЕШЕННЫЕ
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| СрокиХраненияПерсональныхДанных.СрокХранения КАК СрокХранения
|ИЗ
| РегистрСведений.СрокиХраненияПерсональныхДанных КАК СрокиХраненияПерсональныхДанных";
| РегистрСведений.СрокиХраненияПерсональныхДанных КАК СрокиХраненияПерсональныхДанных
|ГДЕ
| СрокиХраненияПерсональныхДанных.СрокХранения <> &СрокХраненияНеРассчитан";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Ложь;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.СрокХранения <> Дата(3999, 12, 31);
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
@@ -4045,6 +4045,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>Catalog.КлассификаторБанков</name>
<right>
@@ -4265,93 +4352,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>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
@@ -2201,6 +2201,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>
@@ -2317,33 +2344,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>CommonForm.ПоддерживаемыеКлиентскиеПриложения</name>
<right>
@@ -1715,6 +1715,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>
@@ -1831,33 +1858,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>
@@ -210,6 +210,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>
@@ -256,33 +283,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.АдресныеОбъекты</name>
<right>
@@ -21,6 +21,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>
@@ -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>
@@ -135,29 +135,6 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.НастройкиВариантовОтчетов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -185,6 +162,29 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.НастройкиВариантовОтчетов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>Update</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
<right>
<name>Edit</name>
<value>true</value>
</right>
<right>
<name>TotalsControl</name>
<value>true</value>
</right>
</object>
<object>
<name>Catalog.ВариантыОтчетов.Command.РазместитьВРазделах</name>
<right>
@@ -1048,6 +1048,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>
@@ -1128,33 +1155,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.ЗапланироватьВстречуПоКонтакту</name>
<right>
@@ -87,13 +87,6 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ПрисоединенныеФайлы</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -121,6 +114,13 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ПрисоединенныеФайлы</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.РедактируемыеФайлы</name>
<right>
@@ -87,13 +87,6 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ПрисоединенныеФайлы</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -121,6 +114,13 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.ПрисоединенныеФайлы</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.РедактируемыеФайлы</name>
<right>
@@ -146,13 +146,6 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.КартаМаршрутаБизнесПроцесса</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -180,6 +173,13 @@
<value>true</value>
</right>
</object>
<object>
<name>CommonCommand.КартаМаршрутаБизнесПроцесса</name>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Task.ЗадачаИсполнителя.Command.МоиЗадачи</name>
<right>
@@ -5686,6 +5686,45 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>Catalog.КлассификаторБанков</name>
<right>
@@ -5945,45 +5984,6 @@
<value>false</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
<name>Administration</name>
<value>false</value>
</right>
<right>
<name>UpdateDataBaseConfiguration</name>
<value>false</value>
</right>
<right>
<name>ThickClient</name>
<value>false</value>
</right>
<right>
<name>ExternalConnection</name>
<value>false</value>
</right>
<right>
<name>Automation</name>
<value>false</value>
</right>
<right>
<name>TechnicalSpecialistMode</name>
<value>false</value>
</right>
<right>
<name>ConfigurationExtensionsAdministration</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtDataProcessors</name>
<value>false</value>
</right>
<right>
<name>InteractiveOpenExtReports</name>
<value>false</value>
</right>
</object>
<object>
<name>DataProcessor.НастройкиЦентраМониторинга.Command.НастройкаОтправкиОтчетовОбОшибках</name>
<right>
@@ -2987,6 +2987,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>
@@ -3064,33 +3091,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.СертификатыШифрования</name>
<right>
@@ -58,17 +58,6 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.НастройкиВариантовОтчетов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
<object>
<name>Configuration.БиблиотекаСтандартныхПодсистем</name>
<right>
@@ -96,4 +85,15 @@
<value>true</value>
</right>
</object>
<object>
<name>InformationRegister.НастройкиВариантовОтчетов</name>
<right>
<name>Read</name>
<value>true</value>
</right>
<right>
<name>View</name>
<value>true</value>
</right>
</object>
</Rights>
@@ -134,11 +134,13 @@
&НаСервере
Процедура УстановитьСостояниеЭлементовИТипыОбъектовАдресации()
ОписаниеПользователя = ПользователиСлужебный.ОписаниеПользователя(Исполнитель);
Если ОписаниеПользователя.Недействителен Или ОписаниеПользователя.ПометкаУдаления Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Исполнителем задачи выбран недействительный пользователь.'"),,,
"Исполнитель");
Возврат;
Если ЗначениеЗаполнено(Исполнитель) Тогда
ОписаниеПользователя = ПользователиСлужебный.ОписаниеПользователя(Исполнитель);
Если ОписаниеПользователя.Недействителен Или ОписаниеПользователя.ПометкаУдаления Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Исполнителем задачи выбран недействительный пользователь.'"),,,
"Исполнитель");
Возврат;
КонецЕсли;
КонецЕсли;
УстановитьТипыОбъектовАдресации();