4 Commits
Author SHA1 Message Date
Компания 1С e8df8e3264 3_1_11_466 2026-04-08 10:13:00 +03:00
Компания 1С 86d87fb195 3_1_11_461 2026-03-11 22:57:00 +03:00
Компания 1С ac5c0a91d6 3_1_11_448 2026-02-24 22:50:00 +03:00
Компания 1С 4dea4e8409 3_1_11_428 2026-02-04 23:04:00 +03:00
204 changed files with 4126 additions and 1443 deletions

No files matched your search

@@ -335,7 +335,9 @@
ПараметрыЗадания = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВерсияРасширений);
ФоновыеЗадания.Выполнить(ИмяПроцедуры, ПараметрыЗадания,, НаименованиеЗадания);
// Имя процедуры должно быть, как указано в переменной ИмяПроцедуры.
ФоновыеЗадания.Выполнить("СтандартныеПодсистемыСервер.ОбновитьДатуПоследнегоИспользованияВерсииРасширений",
ПараметрыЗадания,, НаименованиеЗадания);
КонецПроцедуры
@@ -827,7 +829,9 @@
КонецЕсли;
Если Не ЗначениеЗаполнено(НайденныеЗадания) Тогда
ФоновоеЗадание = ФоновыеЗадания.Выполнить(ИмяПроцедуры, ПараметрыЗадания,, НаименованиеЗадания);
// Имя процедуры должно быть, как указано в переменной ИмяПроцедуры.
ФоновоеЗадание = ФоновыеЗадания.Выполнить("СтандартныеПодсистемыСервер.ДобавитьНовуюВерсиюРасширений",
ПараметрыЗадания,, НаименованиеЗадания);
НайденныеЗадания.Добавить(ФоновоеЗадание);
КонецЕсли;
@@ -957,14 +961,13 @@
Если ВерсияНайдена(Выборка, ОписаниеРасширений) Тогда
ВерсияРасширений = Выборка.Ссылка;
Иначе
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда
ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина);
КонецЕсли;
Объект = СлужебныйЭлемент();
Объект.ОписаниеМетаданных = ОписаниеРасширений;
Объект.ДатаПоследнегоИспользования = ОкругленнаяДатаНачалаСеанса;
Объект.Записать();
Если Выборка.Количество() = 1 Тогда
ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина);
КонецЕсли;
ВерсияРасширений = Объект.Ссылка;
КонецЕсли;
ЗафиксироватьТранзакцию();
@@ -1259,7 +1262,9 @@
ПараметрыЗадания = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВерсияРасширений);
ФоновыеЗадания.Выполнить(ИмяПроцедуры, ПараметрыЗадания,, НаименованиеЗадания);
// Имя процедуры должно быть, как указано в переменной ИмяПроцедуры.
ФоновыеЗадания.Выполнить("СтандартныеПодсистемыСервер.УстановитьПоследнююВерсиюРасширений",
ПараметрыЗадания,, НаименованиеЗадания);
КонецПроцедуры
@@ -2988,6 +2988,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьПрофильГруппыДоступаАдминистраторы");
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -548,7 +548,7 @@
Функция ПроверитьСведенияОФизическомЛице()
Возврат МашиночитаемыеДоверенностиФНССлужебный.ПроверитьСведенияОбОрганизации(
Параметры.Назначение, ЭтотОбъект, СведенияОФизическомЛице);
Параметры.Назначение, ЭтотОбъект);
КонецФункции
@@ -564,7 +564,7 @@
Функция ПроверитьСведенияОбОрганизации()
Возврат МашиночитаемыеДоверенностиФНССлужебный.ПроверитьСведенияОбОрганизации(
Параметры.Назначение, ЭтотОбъект, СведенияОбОрганизации);
Параметры.Назначение, ЭтотОбъект);
КонецФункции
@@ -609,6 +609,13 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбработатьНаборыСвойствДляПереходаНаНовуюВерсию");
КонецПроцедуры
#КонецЕсли
// АПК:361-выкл нет обращения к серверному коду.
@@ -179,6 +179,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбработатьОбщиеВнешниеКомпоненты");
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -5027,6 +5027,7 @@
<name>ВыбратьФотографию</name>
</handler>
</action>
<modifiesStoredData>true</modifiesStoredData>
<currentRowUse>Auto</currentRowUse>
<selectedRowsUse>Auto</selectedRowsUse>
</formCommands>
@@ -1142,6 +1142,10 @@
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент)
Если Не ВозможноИзменитьЗначениеКонтактнойИнформации(Элемент) Тогда
Возврат;
КонецЕсли;
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент);
@@ -1153,6 +1157,11 @@
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если Не ВозможноИзменитьЗначениеКонтактнойИнформации(Элемент,, Истина) Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент,, СтандартнаяОбработка);
@@ -1182,6 +1191,11 @@
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка)
Если Не ВозможноИзменитьЗначениеКонтактнойИнформации(Элемент, Истина) Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
МодульУправлениеКонтактнойИнформациейКлиент =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент");
МодульУправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя);
@@ -1682,6 +1696,106 @@
КонецПроцедуры
&НаКлиенте
Процедура КонтактнаяИнформацияНачалоВыбораЗавершение(Результат, Контекст) Экспорт
ТекущееЗначение = ЭтотОбъект[Результат.Элемент.Имя];
ЭтотОбъект[Результат.Элемент.Имя] = Результат.НовоеЗначение;
Если Не ВозможноИзменитьЗначениеКонтактнойИнформации(Результат.Элемент) Тогда
Результат.Отказ = Истина;
КонецЕсли;
ЭтотОбъект[Результат.Элемент.Имя] = ТекущееЗначение;
КонецПроцедуры
&НаКлиенте
Функция ВозможноИзменитьЗначениеКонтактнойИнформации(Элемент, ПередОчисткой = Ложь, НачалоВыбора = Ложь)
МодульУправлениеКонтактнойИнформациейКлиентСервер =
ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиентСервер");
ТаблицаКИ = МодульУправлениеКонтактнойИнформациейКлиентСервер.ОписаниеКонтактнойИнформацииНаФорме(ЭтотОбъект);
ИмяРеквизитаКИ = Элемент.Имя;
НайденныеСтроки = ТаблицаКИ.НайтиСтроки(Новый Структура("ИмяРеквизита", ИмяРеквизитаКИ));
Если НайденныеСтроки.Количество() <> 1 Тогда
Возврат Истина;
КонецЕсли;
ВидКИ = НайденныеСтроки[0].Вид;
Если ВидКИ = ВидКонтактнойИнформацииEmailПользователя Тогда
ИмяРеквизитаПервойКИ = "КонтактнаяИнформацияПолеEmailПользователя";
ИначеЕсли ВидКИ = ВидКонтактнойИнформацииТелефонПользователя Тогда
ИмяРеквизитаПервойКИ = "КонтактнаяИнформацияПолеТелефонПользователя";
Иначе
Возврат Истина;
КонецЕсли;
ВсеСтрокиЭтогоВида = ТаблицаКИ.НайтиСтроки(Новый Структура("Вид", ВидКИ));
СтароеЗначение = "";
ЕстьВтороеЗначение = Ложь;
Для Каждого СтрокаВида Из ВсеСтрокиЭтогоВида Цикл
Если СтрокаВида.ИмяРеквизита = ИмяРеквизитаКИ Тогда
СтароеЗначение = СтрокаВида.Представление;
ИначеЕсли ЗначениеЗаполнено(ЭтотОбъект[СтрокаВида.ИмяРеквизита]) Тогда
ЕстьВтороеЗначение = Истина;
КонецЕсли;
КонецЦикла;
НовоеЗначение = ЭтотОбъект[ИмяРеквизитаКИ];
ПриИзменении = Не ПередОчисткой И Не НачалоВыбора;
Если ИмяРеквизитаКИ = ИмяРеквизитаПервойКИ Тогда
Если Не ЕстьВтороеЗначение
Или НачалоВыбора
Или Не ЗначениеЗаполнено(СтароеЗначение)
Или ПриИзменении
И ЗначениеЗаполнено(НовоеЗначение) Тогда
Возврат Истина;
КонецЕсли;
Если ВидКИ = ВидКонтактнойИнформацииEmailПользователя Тогда
ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Перед очисткой электронной почты на вкладке ""%1"", нужно очистить всю дополнительную электронную почту на вкладке ""%2"".'"),
Элементы.Главное.Заголовок,
Элементы.КонтактнаяИнформация.Заголовок));
Иначе
ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Перед очисткой телефона на вкладке ""%1"", нужно очистить все дополнительные телефоны на вкладке ""%2"".'"),
Элементы.Главное.Заголовок,
Элементы.КонтактнаяИнформация.Заголовок));
КонецЕсли;
Иначе
Если ЕстьВтороеЗначение
Или ПередОчисткой
Или ПриИзменении
И Не ЗначениеЗаполнено(НовоеЗначение)
Или НачалоВыбора
И ЗначениеЗаполнено(НовоеЗначение) Тогда
Возврат Истина;
КонецЕсли;
Если ВидКИ = ВидКонтактнойИнформацииEmailПользователя Тогда
ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Перед заполнением дополнительной электронной почты на вкладке ""%1"", нужно заполнить электронную почту на вкладке ""%2"".'"),
Элементы.КонтактнаяИнформация.Заголовок,
Элементы.Главное.Заголовок));
Иначе
ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Перед заполнением дополнительного телефона на вкладке ""%1"", нужно заполнить телефон на вкладке ""%2"".'"),
Элементы.КонтактнаяИнформация.Заголовок,
Элементы.Главное.Заголовок));
КонецЕсли;
КонецЕсли;
Если ПриИзменении Тогда
ЭтотОбъект[ИмяРеквизитаКИ] = СтароеЗначение;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура КонтактнаяИнформацияПриИзменении()
@@ -217,4 +217,15 @@
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПрименитьПравила", Истина);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -79,9 +79,7 @@
&НаСервере
Процедура ЗаполнитьСписокСертификатовНаСервере(СертификатыСтрокой, Ошибки)
Сертификаты.Очистить();
Для Каждого Сертификат Из СертификатыСтрокой Цикл
Сертификат = СтрЗаменить(Сертификат, "-----BEGIN CERTIFICATE-----", "");
@@ -368,6 +368,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьНачальныеНастройки");
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -1561,6 +1561,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьПроизводственныеКалендариПоУмолчаниюДлительнаяОперация", Истина);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -1507,6 +1507,14 @@
Возврат НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПроверитьНастройкиУчетнойЗаписи", Истина);
Методы.Вставить("ОпределитьНастройкиУчетнойЗаписи", Истина);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -98,6 +98,13 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьПоставляемыеЯзыки");
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -154,7 +154,7 @@
КонецПопытки;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -994,6 +994,13 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ИзменитьНастройкуСвойства", Истина);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -1439,7 +1439,7 @@
Для Каждого Токен Из Результат.Токены Цикл
Найдено = Программы.НайтиСтроки(Новый Структура("ИмяПрограммы",Токен.СерийныйНомер));
Найдено = Программы.НайтиСтроки(Новый Структура("Наименование",Токен.Представление));
Если Найдено.Количество() = 0 Тогда
НоваяСтрока = Программы.Добавить();
@@ -1263,7 +1263,8 @@
Для Каждого СтруктураФайла Из ПечатныеФормыДокументов Цикл
ДанныеФайла = ПолучитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище);
ПолноеИмяФайла = ИмяВременногоКаталога + СтруктураФайла.Представление;
ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураФайла.Представление);
ПолноеИмяФайла = ИмяВременногоКаталога + ИмяФайла;
ПолноеИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ПолноеИмяФайла);
ДанныеФайла.Записать(ПолноеИмяФайла);
@@ -1330,6 +1331,10 @@
ФайлыОфисныхДокументов = ОбщегоНазначения.ЗначениеИзСтрокиXML(НастройкаПечатнойФормы.ОфисныеДокументы);
Для Каждого ФайлОфисногоДокумента Из ФайлыОфисныхДокументов Цикл
Если Не ЗначениеЗаполнено(ФайлОфисногоДокумента.Ключ) Или Не ЭтоАдресВременногоХранилища(ФайлОфисногоДокумента.Ключ) Тогда
Продолжить;
КонецЕсли;
ИмяФайла = УправлениеПечатью.ИмяФайлаОфисногоДокумента(ФайлОфисногоДокумента.Значение);
ОписаниеФайла = Новый Структура;
ОписаниеФайла.Вставить("Представление", ИмяФайла);
@@ -1267,7 +1267,8 @@
Для Каждого СтруктураФайла Из ПечатныеФормыДокументов Цикл
ДанныеФайла = ПолучитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище);
ПолноеИмяФайла = ИмяВременногоКаталога + СтруктураФайла.Представление;
ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураФайла.Представление);
ПолноеИмяФайла = ИмяВременногоКаталога + ИмяФайла;
ДанныеФайла.Записать(ПолноеИмяФайла);
ОбъектПечати = ?(УстанавливатьОбъектПечати И ЗначениеЗаполнено(СтруктураФайла.ОбъектПечати), СтруктураФайла.ОбъектПечати, Неопределено);
@@ -44,6 +44,10 @@
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:SpreadSheetDocFieldExtInfo">
<handlers>
<event>OnActivate</event>
<name>ТаблицаОтчетаПриАктивизации</name>
</handlers>
<width>50</width>
<autoMaxWidth>true</autoMaxWidth>
<height>10</height>
@@ -27,6 +27,37 @@
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ТаблицаОтчетаПриАктивизации(Элемент)
ВыбранныеСтроки = Новый Массив;
ВыделенныеОбласти = Элементы.ТаблицаОтчета.ПолучитьВыделенныеОбласти();
Для Каждого ВыделеннаяОбласть Из ВыделенныеОбласти Цикл
Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Продолжить;
КонецЕсли;
НоваяОбласть = ТаблицаОтчета.Область(ВыделеннаяОбласть.Верх, ,ВыделеннаяОбласть.Низ);
ВыбранныеСтроки.Добавить(НоваяОбласть);
КонецЦикла;
Если ВыбранныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ВыбранныеСтроки = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВыбранныеСтроки);
Элементы.ТаблицаОтчета.УстановитьВыделенныеОбласти(ВыбранныеСтроки);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
@@ -39,12 +70,14 @@
&НаКлиенте
Процедура ВывестиДляТекущего(Команда)
ТекущийОбъект = Элементы.ТаблицаОтчета.ТекущаяОбласть.Расшифровка;
ТекущаяОбласть = Элементы.ТаблицаОтчета.ТекущаяОбласть;
Если ТекущийОбъект = Неопределено Тогда
ТекущийОбъект = РасшифровкаПервогоПоляСтроки(Элементы.ТаблицаОтчета.ТекущаяОбласть.Имя);
Если ТекущаяОбласть = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущийОбъект = РасшифровкаПервогоПоляСтроки(ТекущаяОбласть.Верх);
Если Не ЗначениеЗаполнено(ТекущийОбъект) Тогда
Возврат;
КонецЕсли;
@@ -70,6 +103,8 @@
Сценарий = СценарийИзмененияПометкиУдаления(ВыбранныеЭлементы, Статистика);
Сценарий.Вставить("ВыбранныеЭлементы", ВыбранныеЭлементы);
ПредставленияВыбранныхЭлементов = ?(Сценарий.Пометка, Статистика.БезПометкиНаУдаление, Статистика.СПометкойНаУдаление);
Сценарий.Вставить("ПредставленияВыбранныхЭлементов", ПредставленияВыбранныхЭлементов);
Обработчик = Новый ОписаниеОповещения("ВыполнитьСценарийИзмененияПометкиУдаления", ЭтотОбъект, Сценарий);
ПоказатьВопрос(Обработчик, Сценарий.Вопрос, РежимДиалогаВопрос.ДаНет);
@@ -1098,7 +1133,7 @@
Расшифровка = Ячейка.Расшифровка;
Если Не ЗначениеЗаполнено(Расшифровка) Тогда
Расшифровка = РасшифровкаПервогоПоляСтроки(Ячейка.Имя);
Расшифровка = РасшифровкаПервогоПоляСтроки(Ячейка.Верх);
КонецЕсли;
Если ЗначениеЗаполнено(Расшифровка) Тогда
@@ -1264,7 +1299,7 @@
Возврат;
КонецЕсли;
Ошибки = ИзменитьПометкуУдаленияЭлементов(Сценарий.ВыбранныеЭлементы, Сценарий.Пометка);
Ошибки = ИзменитьПометкуУдаленияЭлементов(Сценарий.ПредставленияВыбранныхЭлементов, Сценарий.Пометка);
Если Ошибки.Количество() > 0 Тогда
ПредупредитьОбОшибкеПриИзмененииЭлементов(Ошибки, "ПометкаУдаления");
Иначе
@@ -1281,8 +1316,28 @@
&НаСервере
Функция ИзменитьПометкуУдаленияЭлементов(ВыбранныеЭлементы, Пометка)
ШаблонОшибки = ?(Пометка,
НСтр("ru = 'Недостаточно прав на пометку на удаление ""%1"".'"),
Нстр("ru = 'Недостаточно прав на снятие пометки на удаление ""%1"".'"));
Ошибки = Новый Массив;
Для Каждого Элемент Из ВыбранныеЭлементы Цикл
Для Каждого СвойстваЭлемента Из ВыбранныеЭлементы Цикл
Элемент = СвойстваЭлемента.Ключ;
ДоступноИзменение = Ложь;
Если Пометка Тогда
ДоступноИзменение = ПравоДоступа("ИнтерактивнаяПометкаУдаления", Элемент.Метаданные());
Иначе
ДоступноИзменение = ПравоДоступа("ИнтерактивноеСнятиеПометкиУдаления", Элемент.Метаданные());
КонецЕсли;
Если Не ДоступноИзменение Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки,
СвойстваЭлемента.Значение);
Ошибки.Добавить(ТекстОшибки);
Продолжить;
КонецЕсли;
НачатьТранзакцию();
@@ -1361,6 +1416,7 @@
ОбработанныеДокументы = Новый Соответствие;
Индекс = ВыбранныеДокументы.ВГраница();
ЗапрещенныеКИзменениюПроведенияДокументы = Новый Массив;
Пока Индекс >= 0 Цикл
МетаданныеОбъекта = ВыбранныеДокументы[Индекс].Метаданные();
@@ -1370,11 +1426,30 @@
Или МетаданныеОбъекта.Проведение <> ПроведениеРазрешено Тогда
ВыбранныеДокументы.Удалить(Индекс);
Иначе
Если Режим = РежимЗаписиДокумента.Проведение Тогда
ИнтерактивноеПраво = "ИнтерактивноеПроведение";
ИначеЕсли Режим = РежимЗаписиДокумента.ОтменаПроведения Тогда
ИнтерактивноеПраво = "ИнтерактивнаяОтменаПроведения";
Иначе
ИнтерактивноеПраво = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ИнтерактивноеПраво) И Не ПравоДоступа(ИнтерактивноеПраво, МетаданныеОбъекта) Тогда
ЗапрещенныеКИзменениюПроведенияДокументы.Добавить(ВыбранныеДокументы[Индекс]);
ВыбранныеДокументы.Удалить(Индекс);
КонецЕсли;
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
СвойстваДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ЗапрещенныеКИзменениюПроведенияДокументы, "Представление");
ШаблонОшибки = ?(Режим = РежимЗаписиДокумента.Проведение, НСтр("ru = 'Недостаточно прав на проведение ""%1"".'"), Нстр("ru = 'Недостаточно прав на отмену проведения ""%1"".'"));
Для Каждого СвойствоДокумента Из СвойстваДокументов Цикл
ПредставлениеДокумента = СвойствоДокумента.Значение.Представление;
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, ПредставлениеДокумента);
Ошибки.Добавить(ТекстОшибки);
КонецЦикла;
Если ВыбранныеДокументы.Количество() = 0 Тогда
Возврат ОбработанныеДокументы;
КонецЕсли;
@@ -1449,34 +1524,21 @@
КонецПроцедуры
&НаКлиенте
Функция РасшифровкаПервогоПоляСтроки(ИмяТекущейОбласти)
Функция РасшифровкаПервогоПоляСтроки(НомерСтроки)
ПозицияКолонки = СтрНайти(ИмяТекущейОбласти, "C");
Если ПозицияКолонки = 0 Тогда
Возврат Неопределено;
КонецЕсли;
НачалоИмениОбласти = Лев(ИмяТекущейОбласти, ПозицияКолонки);
НомерКолонкиСтрокой = Сред(ИмяТекущейОбласти, ПозицияКолонки +1);
НомерРазделителя = СтрНайти(НомерКолонкиСтрокой, ":");
Если НомерРазделителя <> 0 Тогда
НомерКолонкиСтрокой = Лев(НомерКолонкиСтрокой, НомерРазделителя -1);
КонецЕсли;
НомерТекущейКолонки = Число(НомерКолонкиСтрокой);
ИмяСтроки = Сред(ИмяТекущейОбласти, 1,ПозицияКолонки -1);
ИмяСтроки = Сред(ИмяСтроки, 2);
НомерСтроки = Число(ИмяСтроки);
Если НомерТекущейКолонки <= 1 Тогда
Если НомерСтроки = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Расшифровка = Неопределено;
Пока НомерТекущейКолонки<>1 Цикл
НомерТекущейКолонки = НомерТекущейКолонки - 1;
ИмяНовойОбласти = НачалоИмениОбласти + НомерТекущейКолонки;
НомерТекущейКолонки = 1;
МаксимальныйНомерКолонки = 100;
Пока НомерТекущейКолонки <> МаксимальныйНомерКолонки Цикл
Ячейка = ТаблицаОтчета.Область(НомерСтроки, НомерТекущейКолонки, НомерСтроки, НомерТекущейКолонки);
НомерТекущейКолонки = НомерТекущейКолонки + 1;
Если Ячейка = Неопределено Тогда
Продолжить;
КонецЕсли;
@@ -581,7 +581,9 @@
ДанныеФайла = ПолучитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище);
УдалитьИзВременногоХранилища(СтруктураФайла.АдресВоВременномХранилище);
ПолноеИмяФайла = ИмяВременногоКаталога + СтруктураФайла.Представление;
ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(СтруктураФайла.Представление);
ПолноеИмяФайла = ИмяВременногоКаталога + ИмяФайла;
ПолноеИмяФайла = ФайловаяСистема.УникальноеИмяФайла(ПолноеИмяФайла);
ДанныеФайла.Записать(ПолноеИмяФайла);
@@ -2627,10 +2627,14 @@
Список = ПолеЗначения.СписокВыбора;
Список.Очистить();
Если Строка.ДоступныеЗначения <> Неопределено Тогда
Если Строка.ДоступныеЗначения <> Неопределено Тогда
Для Каждого ДоступноеЗначение Из Строка.ДоступныеЗначения Цикл
ЗаполнитьЗначенияСвойств(Список.Добавить(), ДоступноеЗначение);
Список.Добавить(
ДоступноеЗначение.Значение,
ДоступноеЗначение.Представление,
ДоступноеЗначение.Пометка,
ДоступноеЗначение.Картинка);
КонецЦикла;
КонецЕсли;
@@ -12355,4 +12355,15 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ВыполнитьНачальноеЗаполнение");
Методы.Вставить("ДоступныеВерсииАдресныхСведений", Истина);
Методы.Вставить("ЗагрузкаРегионаАдресногоКлассификатораССайта", Истина);
Методы.Вставить("ЗагрузитьДанныеКлассификатораАдресовИзФайла", Истина);
Методы.Вставить("ФоновоеЗаданиеОчисткиКлассификатораАдресов", Истина);
КонецПроцедуры
#КонецОбласти
@@ -3385,4 +3385,15 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьОтветственногоЗаКонтрольИсполнения");
Методы.Вставить("ОбновитьИспользованиеРегламентныхЗаданий");
Методы.Вставить("ЗаполнитьНаименованиеПредопределенногоЭлементаВсеОбъектыАдресации");
Методы.Вставить("УведомитьИсполнителейОНовыхЗадачах", Истина);
Методы.Вставить("ПроконтролироватьЗадачи", Истина);
КонецПроцедуры
#КонецОбласти
@@ -120,4 +120,11 @@
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("СтартОтложенныхПроцессов", Истина);
КонецПроцедуры
#КонецОбласти
@@ -708,4 +708,12 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПриУстановкеПараметровСеанса");
Методы.Вставить("ОбновитьПараметрыБлокировкиРаботыСВнешнимиРесурсами");
КонецПроцедуры
#КонецОбласти
@@ -2175,6 +2175,7 @@
ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах();
КэшФлажкаХранилища = Неопределено;
ОписаниеОбъектовМетаданных = Новый Массив;
Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл
Если Не ДоступноИспользованиеРазделенныхДанных И ОтчетМетаданные.РасширениеКонфигурации() <> Неопределено Тогда
Продолжить;
@@ -2184,8 +2185,16 @@
И Не ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажкаХранилища) Тогда
Продолжить;
КонецЕсли;
ОписаниеОбъектовМетаданных.Добавить(ОтчетМетаданные);
КонецЦикла;
ИдентификаторыОтчетов = ОбщегоНазначения.ИдентификаторыОбъектовМетаданных(ОписаниеОбъектовМетаданных);
Для Каждого ОтчетМетаданные Из ОписаниеОбъектовМетаданных Цикл
ПолноеИмяОтчета = ОтчетМетаданные.ПолноеИмя();
ОтчетСсылка = ИдентификаторыОтчетов.Получить(ПолноеИмяОтчета);
ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные);
ОтчетТип = ТипОтчетаСтрокой(ОтчетСсылка);
Если ТипОтчетов <> Неопределено И ТипОтчетов <> ОтчетТип Тогда
Продолжить;
@@ -2289,7 +2298,7 @@
// Обработка отчетов, включенных в состав подсистемы ПодключаемыеОтчетыИОбработки.
Если ЕстьПодключаемыеКоманды И СоставПодключаемыхОтчетовИОбработок.Содержит(ОтчетМетаданные) Тогда
НастройкиПоставщика = МодульПодключаемыеКоманды.НастройкиПодключаемогоОбъекта(ОтчетМетаданные.ПолноеИмя());
НастройкиПоставщика = МодульПодключаемыеКоманды.НастройкиПодключаемогоОбъекта(ПолноеИмяОтчета);
Если НастройкиПоставщика <> Неопределено Тогда
Если НастройкиПоставщика.ОпределитьНастройкиФормы Тогда
ОписаниеОтчета.ОпределитьНастройкиФормы = Истина;
@@ -9926,4 +9935,18 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьИндексПоискаПользовательскихВариантовОтчетов");
Методы.Вставить("ОперативноеОбновлениеОбщихДанныхКонфигурации");
Методы.Вставить("ОперативноеОбновлениеСлужебногоПользователя");
Методы.Вставить("ОбновитьИндексПоискаПредопределенныхВариантовОтчетов");
Методы.Вставить("ОперативноеОбновлениеРазделенныхДанныхКонфигурации");
Методы.Вставить("НайтиВариантыОтчетовДляВывода", Истина);
Методы.Вставить("СформироватьОтчетВФоне", Истина);
Методы.Вставить("ЗаполнитьПредставленияПредопределенныхВариантовОтчетов", Истина);
КонецПроцедуры
#КонецОбласти
@@ -2060,12 +2060,22 @@
Родители = ЭлементРасшифровки.ПолучитьРодителей();
Родитель = ?(Родители.Количество() = 0, Неопределено, Родители[0]);
РасшифровкаДоступна = Истина;
Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка")
Или ТипЗнч(Родитель) <> Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
ТипЭлементаРасшифровки = ВариантыОтчетовСлужебныйКлиентСервер.ТипЭлементаРасшифровкиГруппировка();
Иначе
ТипЭлементаРасшифровки = ВариантыОтчетовСлужебныйКлиентСервер.ТипРеквизит();
Если ТипЗнч(Родитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
Для Каждого Группировка Из Данные.Настройки.Структура Цикл
Если СтрСравнить(Родитель.Группировка, Группировка.Идентификатор) = 0 Тогда
РасшифровкаДоступна = Группировка.ПоляГруппировки.Элементы.Количество() > 0;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ДанныеЭлементаРасшифровки = Новый Структура;
@@ -2073,6 +2083,7 @@
ДанныеЭлементаРасшифровки.Вставить("Настройки", Данные.Настройки);
ДанныеЭлементаРасшифровки.Вставить("Отбор", ОтборЭлементаРасшифровки(ЭлементРасшифровки));
ДанныеЭлементаРасшифровки.Вставить("Отборы", ОтборыВыделенныхЭлементовРасшифровки(Документ, ВыделенныеОбластиДокумента, Данные));
ДанныеЭлементаРасшифровки.Вставить("РасшифровкаДоступна", РасшифровкаДоступна);
Поля = ЭлементРасшифровки.ПолучитьПоля();
@@ -2599,4 +2610,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьЗначенияФильтра", Истина);
КонецПроцедуры
#КонецОбласти
@@ -635,6 +635,10 @@
Процедура СнятьФильтр(Форма, СвойстваЗаголовка, ДанныеРасшифровки = Неопределено) Экспорт
Если Не ДействиеДоступно(Форма, , СвойстваЗаголовка) Тогда
Возврат;
КонецЕсли;
ЭтоГруппировка = (ДанныеРасшифровки <> Неопределено
И ДанныеРасшифровки.Тип = ВариантыОтчетовСлужебныйКлиентСервер.ТипЭлементаРасшифровкиГруппировка());
@@ -3252,8 +3256,7 @@
Процедура ОткрытьФормуОтчета(Форма, ПараметрыОткрытия)
Если ПараметрыОткрытия.Данные <> Неопределено
И ПараметрыОткрытия.Данные.Тип = ВариантыОтчетовСлужебныйКлиентСервер.ТипРеквизит() Тогда
Если ПараметрыОткрытия.Данные <> Неопределено И Не ПараметрыОткрытия.Данные.РасшифровкаДоступна Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Действие недоступно. Нельзя расшифровывать детальные записи.'"));
Возврат;
КонецЕсли;
@@ -3718,4 +3718,14 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("УстановитьНастройкиРегламентногоЗаданияОчисткиУстаревшихВерсийОбъектов");
Методы.Вставить("ИнформацияОбУстаревшихВерсиях", Истина);
Методы.Вставить("ОчиститьУстаревшиеВерсииОбъектов", Истина);
КонецПроцедуры
#КонецОбласти
@@ -3308,6 +3308,8 @@
| &ИмяТаблицыСправочника КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайла
|И
| НЕ Файлы.ПометкаУдаления
|;
|
|//////////////////////////////////////////////////////////////////////
@@ -9042,4 +9044,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОтключитьПодсистемуВМоделиСервиса");
Методы.Вставить("ОбновлениеСтатусовДоставкиSMS", Истина);
Методы.Вставить("ОтправитьSMS", Истина);
КонецПроцедуры
#КонецОбласти
@@ -275,4 +275,13 @@
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УдалениеНеиспользуемыхВнешнихКомпонент", Истина);
КонецПроцедуры
#КонецОбласти
@@ -1607,4 +1607,12 @@
// Конец ИнтернетПоддержкаПользователей.ПолучениеВнешнихКомпонент
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("НоваяКомпонентаСПортала", Истина);
Методы.Вставить("ОбновитьКомпонентыСПортала", Истина);
КонецПроцедуры
#КонецОбласти
@@ -2790,4 +2790,17 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ОбновитьРазделыДатЗапретаИзменения");
Методы.Вставить("ДополнитьНастройкиУказанныхАдресатов");
Методы.Вставить("ЗаменитьРазделыДатЗапретаНаНовые");
Методы.Вставить("ОчиститьПредопределенныеЭлементыРазделовДатЗапрета");
Методы.Вставить("УстановитьНачальнуюДатуЗапретаИзменения");
Методы.Вставить("УстановкаПараметровСеанса");
КонецПроцедуры
#КонецОбласти
@@ -96,6 +96,9 @@
Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено,
Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено) Экспорт
ПроверитьИмяПроцедуры(ИмяФункции,
"ИмяФункции", "ДлительныеОперации.ВыполнитьФункцию", ПараметрыВыполнения);
ПараметрыВызова = СписокПараметров(Параметр1, Параметр2, Параметр3, Параметр4,
Параметр5, Параметр6, Параметр7);
@@ -190,6 +193,9 @@
Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено,
Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено) Экспорт
ПроверитьИмяПроцедуры(ИмяПроцедуры,
"ИмяПроцедуры", "ДлительныеОперации.ВыполнитьФункцию", ПараметрыВыполнения);
ПараметрыВызова = СписокПараметров(Параметр1, Параметр2, Параметр3, Параметр4,
Параметр5, Параметр6, Параметр7);
ПараметрыВыполнения = ПодготовитьПараметрыВыполнения(ПараметрыВыполнения, "Процедура");
@@ -241,6 +247,9 @@
//
Функция ВыполнитьФункциюВНесколькоПотоков(ИмяФункции, ПараметрыВыполнения, НаборПараметровФункции = Неопределено) Экспорт
ПроверитьИмяПроцедуры(ИмяФункции,
"ИмяФункции", "ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков", ПараметрыВыполнения);
Возврат ВыполнитьМетодВНесколькоПотоков(ИмяФункции, ПараметрыВыполнения, НаборПараметровФункции, Истина);
КонецФункции
@@ -283,6 +292,9 @@
//
Функция ВыполнитьПроцедуруВНесколькоПотоков(ИмяПроцедуры, ПараметрыВыполнения, НаборПараметровПроцедуры = Неопределено) Экспорт
ПроверитьИмяПроцедуры(ИмяПроцедуры,
"ИмяПроцедуры", "ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков", ПараметрыВыполнения);
Возврат ВыполнитьМетодВНесколькоПотоков(ИмяПроцедуры, ПараметрыВыполнения, НаборПараметровПроцедуры, Ложь);
КонецФункции
@@ -486,7 +498,10 @@
// КонецПроцедуры
//
Функция ВыполнитьВФоне(Знач ИмяПроцедуры, Знач ПараметрыПроцедуры, Знач ПараметрыВыполнения) Экспорт
ПроверитьИмяПроцедуры(ИмяПроцедуры,
"ИмяПроцедуры", "ДлительныеОперации.ВыполнитьВФоне", ПараметрыВыполнения);
// Обратная совместимость
НовыеПараметрыВыполнения = ПараметрыВыполненияВФоне();
ЗаполнитьЗначенияСвойств(НовыеПараметрыВыполнения, ПараметрыВыполнения);
@@ -1002,6 +1017,9 @@
Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры,
Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт
ПроверитьИмяПроцедуры(ИмяЭкспортнойПроцедуры,
"ИмяЭкспортнойПроцедуры", "ДлительныеОперации.ЗапуститьВыполнениеВФоне");
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы);
Результат = Новый Структура;
@@ -1175,6 +1193,9 @@
Обработка = Обработки[Параметры.ИмяОбработки].Создать();
КонецЕсли;
ПроверитьИмяПроцедуры(Параметры.ИмяМетода,
"Параметры.ИмяМетода", "ВыполнитьПроцедуруМодуляОбъектаОбработки",, Обработка);
Если БезопасныйРежим() = Ложь И БезопасныйРежим <> Ложь Тогда
УстановитьБезопасныйРежим(БезопасныйРежим);
КонецЕсли;
@@ -1211,6 +1232,9 @@
Отчет = Отчеты[Параметры.ИмяОтчета].Создать();
КонецЕсли;
ПроверитьИмяПроцедуры(Параметры.ИмяМетода,
"Параметры.ИмяМетода", "ВыполнитьПроцедуруМодуляОбъектаОтчета",, Отчет);
Если БезопасныйРежим() = Ложь И БезопасныйРежим <> Ложь Тогда
УстановитьБезопасныйРежим(БезопасныйРежим);
КонецЕсли;
@@ -1535,11 +1559,8 @@
ПараметрыПроцедурыФоновогоЗадания = Новый Массив;
ПараметрыПроцедурыФоновогоЗадания.Добавить(ВсеПараметры);
ИмяПроцедурыФоновогоЗадания = ИмяПроцедурыФоновогоЗаданияДлительнойОперации();
Возврат ВыполнитьФоновоеЗадание(ПараметрыВыполнения,
ИмяПроцедурыФоновогоЗадания, ПараметрыПроцедурыФоновогоЗадания,
КлючФоновогоЗадания, НаименованиеФоновогоЗадания);
ПараметрыПроцедурыФоновогоЗадания, КлючФоновогоЗадания, НаименованиеФоновогоЗадания);
КонецФункции
@@ -1712,32 +1733,41 @@
ЧастиИмени = СтрРазделить(ИмяПроцедуры, ".");
ЭтоПроцедураМодуляОбработки = (ЧастиИмени.Количество() = 4) И ВРег(ЧастиИмени[2]) = "МОДУЛЬОБЪЕКТА";
Если Не ЭтоПроцедураМодуляОбработки Тогда
ПроверитьИмяПроцедуры(ИмяПроцедуры, "ИмяПроцедуры", "ВызватьПроцедуру");
ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
Возврат;
КонецЕсли;
ОбработкаОтчетОбъект = ОбработкаОтчетОбъект(ИмяПроцедуры,
ЧастиИмени, ПараметрыВыполнения, "ИмяПроцедуры", "ВызватьПроцедуру");
ПроверитьИмяПроцедуры(ЧастиИмени[3], "ИмяПроцедуры", "ВызватьПроцедуру",, ОбработкаОтчетОбъект);
ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыВызова);
КонецПроцедуры
Функция ОбработкаОтчетОбъект(Имя, ЧастиИмени, ПараметрыВыполнения, ИмяПараметраМетода, ИмяМетода)
ЭтоОбработка = ВРег(ЧастиИмени[0]) = "ОБРАБОТКА";
ЭтоОтчет = ВРег(ЧастиИмени[0]) = "ОТЧЕТ";
Если ЭтоОбработка Или ЭтоОтчет Тогда
МенеджерОбъекта = ?(ЭтоОтчет, Отчеты, Обработки);
ОбработкаОтчетОбъект = МенеджерОбъекта[ЧастиИмени[1]].Создать();
ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыВызова);
Возврат;
Возврат МенеджерОбъекта[ЧастиИмени[1]].Создать();
КонецЕсли;
ЭтоВнешняяОбработка = ВРег(ЧастиИмени[0]) = "ВНЕШНЯЯОБРАБОТКА";
ЭтоВнешнийОтчет = ВРег(ЧастиИмени[0]) = "ВНЕШНИЙОТЧЕТ";
Если ЭтоВнешняяОбработка Или ЭтоВнешнийОтчет Тогда
ОбработкаОтчетОбъект = ВнешняяОбработкаОтчетОбъект(ЭтоВнешнийОтчет, ПараметрыВыполнения, ЧастиИмени[1]);
ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыВызова);
Возврат;
Возврат ВнешняяОбработкаОтчетОбъект(ЭтоВнешнийОтчет, ПараметрыВыполнения, ЧастиИмени[1]);
КонецЕсли;
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяПроцедуры, "ИмяПроцедуры"),
НСтр("ru = 'Неверный формат параметра %1 (%2) в %3.'"),
Имя, ИмяПараметраМетода, ИмяМетода),
КатегорияОшибки.ОшибкаКонфигурации);
КонецПроцедуры
КонецФункции
Функция ВнешняяОбработкаОтчетОбъект(ЭтоВнешнийОтчет, ПараметрыВыполнения, ИмяПодключеннойОбработкиОтчета)
@@ -1818,33 +1848,19 @@
ЧастиИмени = СтрРазделить(ИмяФункции, ".");
ЭтоПроцедураМодуляОбработки = (ЧастиИмени.Количество() = 4) И ВРег(ЧастиИмени[2]) = "МОДУЛЬОБЪЕКТА";
Если Не ЭтоПроцедураМодуляОбработки Тогда
ПроверитьИмяПроцедуры(ИмяФункции, "ИмяФункции", "ВызватьФункцию");
Результат = ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяФункции, ПараметрыПроцедуры, Истина);
УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения);
Возврат;
КонецЕсли;
ЭтоОбработка = ВРег(ЧастиИмени[0]) = "ОБРАБОТКА";
ЭтоОтчет = ВРег(ЧастиИмени[0]) = "ОТЧЕТ";
Если ЭтоОбработка Или ЭтоОтчет Тогда
МенеджерОбъекта = ?(ЭтоОтчет, Отчеты, Обработки);
ОбработкаОтчетОбъект = МенеджерОбъекта[ЧастиИмени[1]].Создать();
Результат = ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры, Истина);
УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения);
Возврат;
КонецЕсли;
ОбработкаОтчетОбъект = ОбработкаОтчетОбъект(ИмяФункции,
ЧастиИмени, ПараметрыВыполнения, "ИмяФункции", "ВызватьФункцию");
ЭтоВнешняяОбработка = ВРег(ЧастиИмени[0]) = "ВНЕШНЯЯОБРАБОТКА";
ЭтоВнешнийОтчет = ВРег(ЧастиИмени[0]) = "ВНЕШНИЙОТЧЕТ";
Если ЭтоВнешняяОбработка Или ЭтоВнешнийОтчет Тогда
ОбработкаОтчетОбъект = ВнешняяОбработкаОтчетОбъект(ЭтоВнешнийОтчет, ПараметрыВыполнения, ЧастиИмени[1]);
Результат = ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры, Истина);
УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения);
Возврат;
КонецЕсли;
ПроверитьИмяПроцедуры(ЧастиИмени[3], "ИмяФункции", "ВызватьФункцию",, ОбработкаОтчетОбъект);
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверный формат параметра %2 (переданное значение: %1)'"), ИмяФункции, "ИмяФункции"),
КатегорияОшибки.ОшибкаКонфигурации);
Результат = ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры, Истина);
УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения);
КонецПроцедуры
@@ -2209,7 +2225,7 @@
КонецФункции
Функция ВыполнитьФоновоеЗадание(ПараметрыВыполнения, ИмяМетода, Параметры, Ключ, Наименование)
Функция ВыполнитьФоновоеЗадание(ПараметрыВыполнения, Параметры, Ключ, Наименование)
Если ТекущийРежимЗапуска() = Неопределено
И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
@@ -2225,14 +2241,17 @@
КонецЕсли;
// Имя процедуры должно быть, как указано в функции ИмяПроцедурыФоновогоЗаданияДлительнойОперации.
Если ПараметрыВыполнения.БезРасширений Тогда
Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеБезРасширений(ИмяМетода, Параметры, Ключ, Наименование);
Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеБезРасширений(
"ДлительныеОперации.ВыполнитьСКонтекстомКлиента", Параметры, Ключ, Наименование);
ИначеЕсли ПараметрыВыполнения.СРасширениямиБазыДанных Тогда
Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(ИмяМетода, Параметры,
Ключ, Наименование);
Возврат РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(
"ДлительныеОперации.ВыполнитьСКонтекстомКлиента", Параметры, Ключ, Наименование);
Иначе
Возврат ФоновыеЗадания.Выполнить(ИмяМетода, Параметры, Ключ, Наименование);
Возврат ФоновыеЗадания.Выполнить("ДлительныеОперации.ВыполнитьСКонтекстомКлиента",
Параметры, Ключ, Наименование);
КонецЕсли;
КонецФункции
@@ -2262,6 +2281,45 @@
КонецФункции
Процедура ПроверитьИмяПроцедуры(ИмяПроцедуры, ИмяПараметраМетода, ИмяМетода,
ПараметрыВыполнения = Неопределено, Объект = Неопределено)
ПроверяемоеИмяПроцедуры = ИмяПроцедуры;
Если Объект = Неопределено Тогда
ЧастиИмени = СтрРазделить(ИмяПроцедуры, ".", Истина);
Если ЧастиИмени.Количество() = 4 И ВРег(ЧастиИмени[2]) = "МОДУЛЬОБЪЕКТА" Тогда
Параметры = Новый Структура("ВнешнийОтчетОбработка, ЗапуститьНеВФоне");
Если ТипЗнч(ПараметрыВыполнения) = Тип("Структура") Тогда
ЗаполнитьЗначенияСвойств(Параметры, ПараметрыВыполнения);
КонецЕсли;
Параметры.ЗапуститьНеВФоне = Истина;
Объект = ОбработкаОтчетОбъект(ИмяПроцедуры,
ЧастиИмени, Параметры, "ИмяПроцедуры", "ВызватьПроцедуру");
ПроверяемоеИмяПроцедуры = ЧастиИмени[3];
ИначеЕсли ЧастиИмени.Количество() < 2 Или ЧастиИмени.Количество() > 3 Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Некорректное значение параметра %1 (%2) в %3.'"),
ИмяПараметраМетода, ИмяПроцедуры, ИмяМетода);
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
КонецЕсли;
Попытка
СтандартныеПодсистемыСервер.ПроверитьМетодДляВызоваКакПроизвольныйКод(ПроверяемоеИмяПроцедуры, Истина, Объект);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Некорректное значение параметра %1 (%2) в %3:'"),
ИмяПараметраМетода, ИмяПроцедуры, ИмяМетода);
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, ЗаголовокОшибки);
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
Функция ПодготовитьПараметрыВыполнения(ПереданныйПараметр, ЭтоФункция)
Результат = ОбщиеПараметрыВыполненияВФоне();
@@ -3458,8 +3516,9 @@
СтатусДлительнойОперации().Выполняется,, ПараметрыВыполнения.АдресРезультата);
ЗапланироватьЗапускПотоковДлительныхОпераций(РезультатЗапуска, ПараметрыМногопоточнойОперации);
// Имя процедуры должно быть, как указано в функции ИмяМетодаМногопоточногоПроцесса.
РезультатЗапуска = ВыполнитьФункцию(ПараметрыВыполнения,
ИмяМетодаМногопоточногоПроцесса(), ПараметрыМногопоточнойОперации);
"ДлительныеОперации.ВыполнитьМногопоточныйПроцесс", ПараметрыМногопоточнойОперации);
Если РезультатЗапуска.Статус <> СтатусДлительнойОперации().Выполняется Тогда
УдалитьДанныеОПотоках(ИдентификаторПроцесса);
@@ -3564,8 +3623,9 @@
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ЭтоПерезапускУправляющегоПотока = Истина;
// Имя процедуры должно быть, как указано в функции ИмяМетодаМногопоточногоПроцесса.
РезультатЗапуска = ВыполнитьФункцию(ПараметрыВыполнения,
ИмяМетодаМногопоточногоПроцесса(), ПараметрыОперации);
"ДлительныеОперации.ВыполнитьМногопоточныйПроцесс", ПараметрыОперации);
Если Не ЗначениеЗаполнено(РезультатЗапуска.ИдентификаторЗадания) Тогда
ВызватьИсключение(НСтр("ru = 'Пустой идентификатор фонового задания.'"),
@@ -3731,4 +3791,86 @@
#КонецОбласти
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
// Исключения.
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьФункцию";
ИсключениеПроверки.ФрагментСодержания = "Возврат ВыполнитьВФоне(ИмяФункции, ПараметрыВызова, ПараметрыВыполнения)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПроцедуру";
ИсключениеПроверки.ФрагментСодержания = "Возврат ВыполнитьВФоне(ИмяПроцедуры, ПараметрыВызова, ПараметрыВыполнения)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВызватьПроцедуру";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВызватьПроцедуру";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыВызова)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВызватьФункцию";
ИсключениеПроверки.ФрагментСодержания = "Результат = ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяФункции, ПараметрыПроцедуры, Истина)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВызватьФункцию";
ИсключениеПроверки.ФрагментСодержания = "Результат = ОбщегоНазначения.ВыполнитьМетодОбъекта(ОбработкаОтчетОбъект, ЧастиИмени[3], ПараметрыПроцедуры, Истина)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьМногопоточныйПроцесс";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяМетодаПолученияПорций, ПараметрыПолученияПорций)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПоток";
ИсключениеПроверки.ФрагментСодержания = "РезультатЗапуска = ВыполнитьВФоне(ПараметрыОперации.ИмяМетода, ПараметрыМетода, ПараметрыВыполнения)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПроцедуруМодуляОбъектаОтчета";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодОбъекта(Отчет, Параметры.ИмяМетода, ПараметрыМетода)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПроцедуруМодуляОбъектаОбработки";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодОбъекта(Обработка, Параметры.ИмяМетода, ПараметрыМетода)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ЗапуститьВыполнениеВФоне";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ДлительныеОперации";
ИсключениеПроверки.ИмяПроцедуры = "ЗапуститьВыполнениеВФоне";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры)";
Методы = Новый Соответствие;
Методы.Вставить("ВыполнитьПроцедуруМодуляОбъектаОбработки", Истина);
Методы.Вставить("ВыполнитьПроцедуруМодуляОбъектаОтчета", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.ДлительныеОперации", Методы);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ВыполнитьМногопоточныйПроцесс", Истина);
Методы.Вставить("ВыполнитьСКонтекстомКлиента", Истина);
Методы.Вставить("ВыполнитьПроцедуруМодуляОбъектаОбработки", Истина);
Методы.Вставить("ВыполнитьПроцедуруМодуляОбъектаОтчета", Истина);
КонецПроцедуры
#КонецОбласти
@@ -1828,6 +1828,15 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
Методы = Новый Соответствие;
Методы.Вставить("ОбработчикКомандыЗаполнения");
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.ДополнительныеОтчетыИОбработки", Методы);
КонецПроцедуры
Функция ДополнительныеОтчетыИОбработкиОбновляются(Очередь) Экспорт
Возврат ОбновлениеИнформационнойБазы.ЕстьЗаблокированныеПредыдущимиОчередямиДанные(Очередь, "Справочник.ДополнительныеОтчетыИОбработки");
КонецФункции
@@ -3421,4 +3430,14 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ОбработчикКомандыЗаполнения");
Методы.Вставить("ВыполнитьКоманду", Истина);
Методы.Вставить("ВыполнитьОбработкуПоРегламентномуЗаданию", Истина);
КонецПроцедуры
#КонецОбласти
@@ -77,4 +77,35 @@
КонецФункции
Функция ДоступноПроведение(Ссылки) Экспорт
ТипыСсылок = Новый Соответствие;
Для Каждого Ссылка Из Ссылки Цикл
Если Ссылка = Неопределено Тогда
Продолжить;
КонецЕсли;
Тип = ТипЗнч(Ссылка);
Если ТипыСсылок[Тип] = Неопределено Тогда
ТипыСсылок[Тип] = Новый Массив;
КонецЕсли;
ТипыСсылок[Тип].Добавить(Ссылка);
КонецЦикла;
Если Не ЗначениеЗаполнено(ТипыСсылок) Тогда
Возврат Ложь;
КонецЕсли;
Для Каждого ТипСсылок Из ТипыСсылок Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипСсылок.Ключ);
Если ОбъектМетаданных = Неопределено Или Не ОбщегоНазначения.ЭтоДокумент(ОбъектМетаданных)
Или ОбъектМетаданных.Проведение = Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
#КонецОбласти
@@ -249,7 +249,7 @@
ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(
ПечатаемыеОбъекты, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
Если СтандартнаяОбработка И ДополнительныеОтчетыИОбработкиВызовСервера.ДоступноПроведение(ПечатаемыеОбъекты) Тогда
ПараметрыВыполнения.ТребуетсяПроведение = Истина;
КонецЕсли;
@@ -1760,4 +1760,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПрочитатьСобытияЖурналаРегистрации", Истина);
КонецПроцедуры
#КонецОбласти
@@ -245,4 +245,15 @@
Возврат НСтр("ru = 'Да'");
КонецФункции
// Имя событие для записи в журнал регистрации.
//
// Возвращаемое значение:
// Строка - событие журнала регистрации
//
Функция СобытиеЖурналаРегистрации() Экспорт
Возврат НСтр("ru = 'Загрузка данных из файла'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
#КонецОбласти
@@ -2925,4 +2925,21 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаполнитьДанныеОбновленияРегистровДляУничтоженияПерсональныхДанных");
Методы.Вставить("УстановитьРасписаниеРегламентногоЗаданияРасчетСроковХраненияПерсональныхДанных");
Методы.Вставить("ПеренестиЗащищаемыеОбластиПерсональныхДанных");
Методы.Вставить("ЗаполнитьДанныеОбновленияРасписанияРегламентногоЗаданияРасчетСроковХраненияПерсональныхДанных");
Методы.Вставить("ЗаполнитьРегистрыДляУничтоженияПерсональныхДанных");
Методы.Вставить("ЗаполнитьДанныеОбновленияОбластейПерсональныхДанных");
Методы.Вставить("ОбновитьСрокХраненияПерсональныхДанныхСубъекта", Истина);
Методы.Вставить("ОбновитьСрокиХраненияПерсональныхДанных", Истина);
Методы.Вставить("ПрочитатьСобытияДоступаКПерсональнымДанным", Истина);
Методы.Вставить("ИзменитьНастройкиУничтоженияПерсональныхДанных", Истина);
Методы.Вставить("РассчитатьСрокиХраненияПерсональныхДанных", Истина);
КонецПроцедуры
#КонецОбласти
@@ -40,6 +40,7 @@
События.Вставить("ПередЗапускомПрограммы", Ложь);
События.Вставить("ПриДобавленииСерверныхОповещений", Ложь);
События.Вставить("ПриПериодическомПолученииДанныхКлиентаНаСервере", Ложь);
События.Вставить("ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод", Ложь);
// Банки
События.Вставить("ПриОпределенииНастроекЗагрузкиКлассификатораБанков");
@@ -2377,6 +2378,60 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
СтандартныеПодсистемыСервер.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
ДлительныеОперации.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
ОбновлениеИнформационнойБазыСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
МодульДополнительныеОтчетыИОбработки.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтрольВеденияУчета") Тогда
МодульКонтрольВеденияУчетаСлужебный = ОбщегоНазначения.ОбщийМодуль("КонтрольВеденияУчетаСлужебный");
МодульКонтрольВеденияУчетаСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.НастройкаПорядкаЭлементов") Тогда
МодульНастройкаПорядкаЭлементов = ОбщегоНазначения.ОбщийМодуль("НастройкаПорядкаЭлементов");
МодульНастройкаПорядкаЭлементов.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодписьСервисаDSS") Тогда
МодульСервисКриптографииDSSСлужебный = ОбщегоНазначения.ОбщийМодуль("СервисКриптографииDSSСлужебный");
МодульСервисКриптографииDSSСлужебный.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБТС().ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод Тогда
МодульИнтеграцияПодсистемБТС = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБТС");
МодульИнтеграцияПодсистемБТС.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБИП().ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод Тогда
МодульИнтеграцияПодсистемБИП = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБИП");
МодульИнтеграцияПодсистемБИП.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиПлюс().ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод Тогда
МодульИнтеграцияПодсистемПлюс = МодульИнтеграцияПодсистемПлюс();
МодульИнтеграцияПодсистемПлюс.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
Если ИнтеграцияПодсистемБСППовтИсп.ПодпискиБЭД().ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод Тогда
МодульИнтеграцияПодсистемБЭД = ОбщегоНазначения.ОбщийМодуль("ИнтеграцияПодсистемБЭД");
МодульИнтеграцияПодсистемБЭД.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Банки
@@ -459,4 +459,11 @@
Возврат Результат;
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОперативноеОбновлениеОбщихДанных");
КонецПроцедуры
#КонецОбласти
@@ -1520,4 +1520,18 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьИспользованиеНесколькихПроизводственныхКалендарей");
Методы.Вставить("ОбновитьДанныеПроизводственныхКалендарей");
Методы.Вставить("ЗаполнитьДанныеОбновленияДанныхЗависимыхОтПроизводственныхКалендарей");
Методы.Вставить("ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей");
Методы.Вставить("СброситьВерсиюКлассификатора");
Методы.Вставить("ОбновитьПроизводственныеКалендари");
Методы.Вставить("ИсправитьДанныеЗависимыхКалендарей");
Методы.Вставить("ОбновитьДанныеЗависимыхПроизводственныхКалендарей");
КонецПроцедуры
#КонецОбласти
@@ -3130,4 +3130,11 @@
ШрифтыСтиля.ВажнаяНадписьШрифт, ЦветаСтиля.РезультатУспехЦвет, ПоискСУчетомУровней);
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗапуститьПоискВСпискеПолей", Истина);
КонецПроцедуры
#КонецОбласти
@@ -1312,4 +1312,11 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ВыполнитьПроверку", Истина);
КонецПроцедуры
#КонецОбласти
@@ -176,6 +176,28 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
ИменаПроцедур = Новый Соответствие;
ОписаниеПроверок = КонтрольВеденияУчетаСлужебныйПовтИсп.ПроверкиВеденияУчета();
Для Каждого Проверка Из ОписаниеПроверок.Проверки Цикл
ИменаПроцедур.Вставить(Проверка.ОбработчикПроверки);
КонецЦикла;
ОписаниеОбработчика = Настройки.ОписаниеОбработчиков.Добавить();
ОписаниеОбработчика.ИменаПроцедур = ИменаПроцедур;
ОписаниеОбработчика.ЗаголовокОшибки = НСтр("ru = 'Обработчик проверки ведения учета ""%1"".'");
// Исключения.
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.КонтрольВеденияУчетаСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПроверку";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(СтрокаПроверки.ОбработчикПроверки, ПараметрыОбработчика)";
КонецПроцедуры
// Обновляет состав системных проверок ведения учета при изменении конфигурации.
//
// Параметры:
@@ -4761,4 +4783,22 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации");
Методы.Вставить("ПроверитьНезаполненныеОбязательныеРеквизиты");
Методы.Вставить("ПроверитьНаличиеПредопределенныхУзловПлановОбмена");
Методы.Вставить("ПроверитьДублированиеПредопределенныхЭлементов");
Методы.Вставить("ПроверитьОтсутствующиеПредопределенныеЭлементы");
Методы.Вставить("ПроверитьЦиклическиеСсылки");
Методы.Вставить("ПроверитьСсылочнуюЦелостность");
Методы.Вставить("ВыполнитьПроверки", Истина);
Методы.Вставить("ВыполнитьПроверку", Истина);
Методы.Вставить("ПроверитьОбъект", Истина);
Методы.Вставить("ИсправитьПроблемуЦиклическихСсылокВФоновомЗадании", Истина);
Методы.Вставить("ПроверитьВедениеУчета", Истина);
КонецПроцедуры
#КонецОбласти
@@ -40,4 +40,29 @@
КонецФункции
Функция ПаспортныеДанныеПредставителяДоверенностиНеобязательны() Экспорт
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Возврат Истина;
КонецЕсли;
АккредитованныеУдостоверяющиеЦентры = Неопределено;
МодульЭлектроннаяПодписьЛокализация = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьЛокализация");
МодульЭлектроннаяПодписьЛокализация.ПриПолученииАккредитованныхУдостоверяющихЦентров(АккредитованныеУдостоверяющиеЦентры);
Если АккредитованныеУдостоверяющиеЦентры = Неопределено Тогда
Возврат Истина;
КонецЕсли;
ПаспортныеДанныеПредставителяДоверенностиНеобязательны = АккредитованныеУдостоверяющиеЦентры.ДругиеНастройки.Получить(
"ПаспортныеДанныеПредставителяДоверенностиНеобязательны");
Если ПаспортныеДанныеПредставителяДоверенностиНеобязательны = Неопределено Тогда
Возврат Истина;
Иначе
Возврат ПаспортныеДанныеПредставителяДоверенностиНеобязательны;
КонецЕсли;
КонецФункции
#КонецОбласти
@@ -1092,9 +1092,10 @@
КонецЕсли;
Если ТипЗнч(НастройкаПоДоверенности) = Тип("Булево") Тогда
НастройкаПоДоверенности = Новый Соответствие;
НастройкаПоДоверенности.Вставить(Неопределено,
НоваяНастройкаПоДоверенности = Новый Соответствие;
НоваяНастройкаПоДоверенности.Вставить(Неопределено,
Новый Структура("ПоДоверенности, Доверенность", НастройкаПоДоверенности));
Возврат НоваяНастройкаПоДоверенности;
КонецЕсли;
Возврат НастройкаПоДоверенности;
@@ -2543,6 +2544,8 @@
Если ПустаяСтрока(ТекстСообщения) Тогда
ТекстСообщения = ПроверитьАдрес(ЗначениеРеквизита, ЭтоФЛ);
ПродолжитьПриОшибке = Истина;
ИначеЕсли Форма.ИмяФормы <> "Справочник.МашиночитаемыеДоверенности.Форма.СведенияОбОрганизации" Тогда
ПродолжитьПриОшибке = ТекстСообщения = НСтр("ru = 'Не указан номер дома'");
КонецЕсли;
ИначеЕсли ИмяРеквизита = "АдресРегистрации" Тогда
@@ -5751,4 +5754,14 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановитьПараметрСеансаПараметрыАвторизацииВРаспределенномРеестре");
Методы.Вставить("ОбновитьИПрочитатьСтатусДоверенностей", Истина);
Методы.Вставить("ОбновлениеСтатусовМЧД", Истина);
Методы.Вставить("ОбновитьКлассификаторыМЧД", Истина);
КонецПроцедуры
#КонецОбласти
@@ -10,7 +10,7 @@
Функция РеквизитыПредставителяСталиНеобязательными() Экспорт
Возврат Ложь;
Возврат МашиночитаемыеДоверенностиФНСПовтИсп.ПаспортныеДанныеПредставителяДоверенностиНеобязательны();
КонецФункции
@@ -3290,4 +3290,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ИзменитьЯзыкВМультиязычныхРеквизитахКонфигурации", Истина);
КонецПроцедуры
#КонецОбласти
@@ -182,6 +182,15 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
Методы = Новый Соответствие;
Методы.Вставить("Подключаемый_ПереместитьЭлемент");
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.НастройкаПорядкаЭлементов", Методы);
КонецПроцедуры
Функция НаправлениеПеремещенияЭлементаВверх() Экспорт
Возврат "Вверх";
КонецФункции
@@ -239,4 +248,11 @@
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("Подключаемый_ПереместитьЭлемент");
КонецПроцедуры
#КонецОбласти
@@ -157,6 +157,10 @@
Процедура ИнтернетПоддержкаИСервисыРазрешитьОтправлятьДанныеПриИзменении(Форма, Элемент, ПараметрыОперации) Экспорт
Перем РезультатЗапуска;
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда
Возврат;
КонецЕсли;
Элементы = Форма.Элементы;
РазрешенДоступКИнтернетСервисам = ОбщегоНазначения.РазрешенДоступКИнтернетСервисам();
@@ -54,16 +54,19 @@
// * РезультатЗапуска - см. ДлительныеОперации.ВыполнитьВФоне
//
Процедура ИнтернетПоддержкаИСервисыРазрешитьОтправлятьДанныеПриИзменении(Форма, Элемент, ПараметрыОперации) Экспорт
Если ПараметрыОперации.РезультатЗапуска <> Неопределено Тогда
Форма.ЦентрМониторингаИдентификаторЗадания = ПараметрыОперации.РезультатЗапуска.ИдентификаторЗадания;
Форма.ЦентрМониторингаАдресРезультатаЗадания = ПараметрыОперации.РезультатЗапуска.АдресРезультата;
МодульЦентрМониторингаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦентрМониторингаКлиент");
Оповещение = Новый ОписаниеОповещения("ПослеОбновленияИдентификатора", МодульЦентрМониторингаКлиент);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ДлительныеОперацииКлиент.ОжидатьЗавершение(ПараметрыОперации.РезультатЗапуска, Оповещение, ПараметрыОжидания);
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга")
Или ПараметрыОперации.РезультатЗапуска = Неопределено Тогда
Возврат;
КонецЕсли;
Форма.ЦентрМониторингаИдентификаторЗадания = ПараметрыОперации.РезультатЗапуска.ИдентификаторЗадания;
Форма.ЦентрМониторингаАдресРезультатаЗадания = ПараметрыОперации.РезультатЗапуска.АдресРезультата;
МодульЦентрМониторингаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦентрМониторингаКлиент");
Оповещение = Новый ОписаниеОповещения("ПослеОбновленияИдентификатора", МодульЦентрМониторингаКлиент);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Форма);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ДлительныеОперацииКлиент.ОжидатьЗавершение(ПараметрыОперации.РезультатЗапуска, Оповещение, ПараметрыОжидания);
КонецПроцедуры
@@ -338,8 +338,13 @@
ИначеЕсли ТипЗнч(Данные) = Тип("Строка") Тогда
Обработан = Ложь;
Иначе
Обработан = ОбщегоНазначения.ВыполнитьМетодКонфигурации(СвойстваОбработчика.ПроцедураПроверки,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МетаданныеИОтбор), Истина);
Если СвойстваОбработчика.ПроцедураПроверки = ОбновлениеИнформационнойБазыСлужебный.СтандартноеИмяПроцедурыПроверки() Тогда
//@skip-check query-in-loop - проверка должна выполняться для каждого обработчика отдельно.
Обработан = ДанныеОбновленыНаНовуюВерсиюПрограммы(МетаданныеИОтбор);
Иначе
Обработан = ОбщегоНазначения.ВыполнитьМетодКонфигурации(СвойстваОбработчика.ПроцедураПроверки,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МетаданныеИОтбор), Истина);
КонецЕсли;
КонецЕсли;
Результат.Обработан = Обработан И Результат.Обработан;
@@ -2994,6 +2999,8 @@
// для остальных заполнение не требуется. Полные имена объектов через запятую,
// которые следует блокировать от изменения до завершения процедуры обработки данных.
// Если заполнено, то также требуется заполнить и свойство ПроцедураПроверки.
// Важно: Свойство игнорируется для обработчиков с порядком Некритичный, такие
// обработчики не должны блокировать работу пользователей с объектом.
// * НовыеОбъекты - Строка - необходимо заполнять для обработчиков отложенного обновления,
// для остальных заполнение не требуется. Полные имена объектов через запятую,
// которые создаются при работе обработчика обновления.
@@ -7082,4 +7089,11 @@
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПерезапуститьОтложенноеОбновление", Истина);
КонецПроцедуры
#КонецОбласти
@@ -44,7 +44,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "СтандартныеПодсистемы";
Описание.Версия = "3.1.11.415";
Описание.Версия = "3.1.11.466";
Описание.ИдентификаторИнтернетПоддержки = "SSL";
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
@@ -1021,7 +1021,7 @@
Обработчик.ИмяОбработчика);
ЗаписатьИнформацию(Сообщение);
ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика);
ВыполнитьПроцедуру(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчикаСтруктура, "РегистрацияДанных");
Если Обработчик.Многопоточный Тогда
ИсправитьПолныеИменаВПараметрахВыборки(ПараметрыОбработчикаСтруктура.ПараметрыВыборки);
КонецЕсли;
@@ -1916,6 +1916,117 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления();
ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем();
Для Каждого ИмяПодсистемы Из ОписанияПодсистем.Порядок Цикл
ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам.Получить(ИмяПодсистемы);
Если Не ЗначениеЗаполнено(ОписаниеПодсистемы.ОсновнойСерверныйМодуль) Тогда
Продолжить;
КонецЕсли;
Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодсистемы.ОсновнойСерверныйМодуль);
Модуль.ПриДобавленииОбработчиковОбновления(Обработчики);
КонецЦикла;
ИменаПроцедур = Новый Соответствие;
Для Каждого Обработчик Из Обработчики Цикл
// Оперативные и монопольные обработчики.
Если Обработчик.РежимВыполнения <> "Отложенно"
И ЗначениеЗаполнено(Обработчик.Процедура) Тогда
ИменаПроцедур.Вставить(Обработчик.Процедура);
Продолжить;
КонецЕсли;
// Отложенные обработчики.
Если ЗначениеЗаполнено(Обработчик.Процедура)
И Не СтрЗаканчиваетсяНа(Обработчик.Процедура, СтандартноеИмяПроцедурыОтложенногоОбработчика()) Тогда
ИменаПроцедур.Вставить(Обработчик.Процедура);
КонецЕсли;
Если ЗначениеЗаполнено(Обработчик.ПроцедураЗаполненияДанныхОбновления)
И Не СтрЗаканчиваетсяНа(Обработчик.ПроцедураЗаполненияДанныхОбновления, СтандартноеИмяПроцедурыРегистрации()) Тогда
ИменаПроцедур.Вставить(Обработчик.ПроцедураЗаполненияДанныхОбновления);
КонецЕсли;
Если ЗначениеЗаполнено(Обработчик.ПроцедураПроверки)
И Обработчик.ПроцедураПроверки <> СтандартноеИмяПроцедурыПроверки() Тогда
ИменаПроцедур.Вставить(Обработчик.ПроцедураПроверки);
КонецЕсли;
КонецЦикла;
ОписаниеОбработчика = Настройки.ОписаниеОбработчиков.Добавить();
ОписаниеОбработчика.ИменаПроцедур = ИменаПроцедур;
ОписаниеОбработчика.ЗаголовокОшибки = НСтр("ru = 'Обработчик обновления информационной базы ""%1"".'");
// Исключения.
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПроцедуру";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ПолноеИмяПроцедуры, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметры))";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ПерейтиСДругойПрограммы";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ПерейтиСДругойПрограммы";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьОбработчикОбновления";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ОтменитьВыполнениеВсехПотоков";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриОтменеПотока, ПараметрыВызова)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ЗавершитьПотокиВыполнившиеФЗ";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПроцедураЗавершения, ПараметрыВызова)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ЗавершитьПотокиВыполнившиеФЗ";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеПотока.ПриАварийномЗавершении, ПараметрыВызова)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьПоток";
ИсключениеПроверки.ФрагментСодержания = "РезультатЗапуска = ДлительныеОперации.ВыполнитьВФоне(ОписаниеПотока.Процедура,
| Поток.ПараметрыПроцедуры,
| ПараметрыВыполнения)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбновлениеИнформационнойБазы";
ИсключениеПроверки.ИмяПроцедуры = "ОбъектОбработан";
ИсключениеПроверки.ФрагментСодержания = "Обработан = ОбщегоНазначения.ВыполнитьМетодКонфигурации(СвойстваОбработчика.ПроцедураПроверки,
| ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МетаданныеИОтбор), Истина)";
Методы = Новый Соответствие;
Методы.Вставить("ПриАварийномЗавершенииПотокаОтложенногоОбработчика");
Методы.Вставить("ПриОтменеПотокаОтложенногоОбработчика");
Методы.Вставить("ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления");
Методы.Вставить("ПриОтменеПотокаПоискаПорцииДляОбновления");
Методы.Вставить("ЗаполнитьДанныеОтложенногоОбработчика", Истина);
Методы.Вставить("ЗавершитьРегистрациюДанныхОтложенногоОбновления", Истина);
Методы.Вставить("ВыполнитьОтложенныйОбработчик", Истина);
Методы.Вставить("ЗавершитьВыполнениеОтложенногоОбработчика", Истина);
Методы.Вставить("НайтиПорциюДляОбновления", Истина);
Методы.Вставить("ЗавершитьПоискПорцииДляОбновления", Истина);
Методы.Вставить("УстаревшиеДанныеПриЗапросеПорцийВФоне", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный", Методы);
КонецПроцедуры
Функция НастройкиПодсистемы() Экспорт
ПараметрыСообщенияОНевыполненныхОтложенныхОбработчиках = Новый Структура;
@@ -2591,6 +2702,19 @@
Возврат Результат;
КонецФункции
Функция ЗагрузитьИУстановитьИсправления() Экспорт
Результат = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей.ПолучениеОбновленийПрограммы") Тогда
МодульПолучениеОбновленийПрограммы = ОбщегоНазначения.ОбщийМодуль("ПолучениеОбновленийПрограммы");
Результат = МодульПолучениеОбновленийПрограммы.ЗагрузитьИУстановитьИсправления();
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОпределитьДанныеЗаполнения(Знач ПредопределенныеДанные, Знач СтрокаТаблицы, Знач ПоляИсключения, Знач ЗаполняемыеРеквизиты = Неопределено)
ТолькоЗаполняемыеРеквизиты = ?(ТипЗнч(ЗаполняемыеРеквизиты) = Тип("Соответствие"), ЗаполняемыеРеквизиты.Количество() > 0, Ложь);
@@ -3847,6 +3971,52 @@
КонецПроцедуры
Процедура ВыполнитьПроцедуру(ПолноеИмяПроцедуры, Параметры, Действие)
Если Действие = "РегистрацияДанных" Тогда
ПредопределенноеИмяПроцедуры = СтандартноеИмяПроцедурыРегистрации();
ИначеЕсли Действие = "ОтложеннаяОбработка" Тогда
ПредопределенноеИмяПроцедуры = СтандартноеИмяПроцедурыОтложенногоОбработчика();
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Указано недопустимое значение параметра ""%1"": %2'"),
"Действие", Действие);
КонецЕсли;
ИмяПроцедурыЧастями = СтрРазделить(ПолноеИмяПроцедуры, ".");
Если ИмяПроцедурыЧастями.Получить(ИмяПроцедурыЧастями.ВГраница()) <> ПредопределенноеИмяПроцедуры Тогда
ОбщегоНазначения.ВыполнитьМетодКонфигурации(ПолноеИмяПроцедуры, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметры));
Возврат;
КонецЕсли;
ИмяПроцедурыЧастями.Удалить(ИмяПроцедурыЧастями.ВГраница());
Менеджер = ОбщегоНазначения.ОбщийМодуль(СтрСоединить(ИмяПроцедурыЧастями, "."));
Если Действие = "РегистрацияДанных" Тогда
Менеджер.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры);
Иначе
Менеджер.ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры);
КонецЕсли;
КонецПроцедуры
Функция СтандартноеИмяПроцедурыРегистрации()
Возврат "ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
КонецФункции
Функция СтандартноеИмяПроцедурыОтложенногоОбработчика()
Возврат "ОбработатьДанныеДляПереходаНаНовуюВерсию";
КонецФункции
Функция СтандартноеИмяПроцедурыПроверки() Экспорт
Возврат "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
КонецФункции
#Область ПротоколированиеХодаОбновления
// Возвращает строковую константу для формирования сообщений журнала регистрации.
@@ -5236,8 +5406,6 @@
ПодсистемаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом");
ОтключитьОбновлениеКлючейДоступа(Истина, ПодсистемаСуществует);
Попытка
ПараметрыВызова = Новый Массив;
ПараметрыВызова.Добавить(КонтекстОбработчика.Параметры);
Результат = НовыйРезультатВыполненияОтложенногоОбработчика();
Если КонтекстОбработчика.Параметры.Свойство("ОбновляемыеДанные") Тогда
@@ -5248,7 +5416,7 @@
Результат.ПереданоДанныхДляОбработки = ВсегоДанных;
КонецЕсли;
Результат.НачалоПроцедурыОбработчика = ТекущаяУниверсальнаяДатаВМиллисекундах();
ОбщегоНазначения.ВыполнитьМетодКонфигурации(КонтекстОбработчика.ИмяОбработчика, ПараметрыВызова);
ВыполнитьПроцедуру(КонтекстОбработчика.ИмяОбработчика, КонтекстОбработчика.Параметры, "ОтложеннаяОбработка");
Результат.ЗавершениеПроцедурыОбработчика = ТекущаяУниверсальнаяДатаВМиллисекундах();
Результат.Параметры = КонтекстОбработчика.Параметры;
@@ -11427,6 +11595,11 @@
ПроцедураПроверки = Обработчик.ПроцедураПроверки;
БлокируемыеОбъекты = Обработчик.БлокируемыеОбъекты;
Если ЗначениеЗаполнено(ПроцедураПроверки) И ЗначениеЗаполнено(БлокируемыеОбъекты) Тогда
Если Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Некритичный Тогда
// Некритичные обработчики работу с объектом не должны блокировать.
Продолжить;
КонецЕсли;
СвойстваОбработчика = Новый Структура;
СвойстваОбработчика.Вставить("Выполнен", Ложь);
СвойстваОбработчика.Вставить("ПроцедураПроверки", ПроцедураПроверки);
@@ -11572,9 +11745,7 @@
Иначе
ПараметрыОбработчикаСтруктура.ПараметрыВыборки = Неопределено;
КонецЕсли;
ПараметрыОбработчика = Новый Массив;
ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура);
Попытка
Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных
|""%1""
@@ -11586,7 +11757,7 @@
ЗаписатьИнформацию(Сообщение);
НачалоРегистрации = ТекущаяУниверсальнаяДатаВМиллисекундах();
ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика);
ВыполнитьПроцедуру(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчикаСтруктура, "РегистрацияДанных");
КонецРегистрации = ТекущаяУниверсальнаяДатаВМиллисекундах();
ДлительностьРегистрации = (КонецРегистрации - НачалоРегистрации) / 1000;
@@ -11734,9 +11905,6 @@
ПараметрыОтметкиКОбработке.ПараметрыВыборки = Неопределено;
КонецЕсли;
ПараметрыОбработчика = Новый Массив;
ПараметрыОбработчика.Добавить(ПараметрыОтметкиКОбработке);
ШаблонСообщения = НСтр(
"ru = 'Выполняется процедура заполнения данных
|""%1""
@@ -11749,7 +11917,7 @@
Попытка
НачалоРегистрации = ТекущаяУниверсальнаяДатаВМиллисекундах();
ОбщегоНазначения.ВыполнитьМетодКонфигурации(ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения, ПараметрыОбработчика);
ВыполнитьПроцедуру(ОписаниеОбрабатываемыхДанных.ПроцедураЗаполнения, ПараметрыОтметкиКОбработке, "РегистрацияДанных");
КонецРегистрации = ТекущаяУниверсальнаяДатаВМиллисекундах();
Исключение
ИнформацияОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
@@ -12602,4 +12770,40 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ЗаписатьПодтверждениеЛегальностиПолученияОбновлений");
Методы.Вставить("ПустаяПроцедураРегистрации");
Методы.Вставить("НачальноеЗаполнениеПредопределенныхДанных");
Методы.Вставить("УстановитьКлючРегламентногоЗадания");
Методы.Вставить("ОчиститьУстаревшиеДанныеПолностью");
Методы.Вставить("ПриАварийномЗавершенииПотокаОтложенногоОбработчика");
Методы.Вставить("ПриОтменеПотокаОтложенногоОбработчика");
Методы.Вставить("ПриАварийномЗавершенииПотокаПоискаПорцииДляОбновления");
Методы.Вставить("ПриОтменеПотокаПоискаПорцииДляОбновления");
Методы.Вставить("ОбработчикПроверкиВеденияУчета");
Методы.Вставить("ЗаполнитьДанныеОтложенногоОбработчика", Истина);
Методы.Вставить("ЗавершитьРегистрациюДанныхОтложенногоОбновления", Истина);
Методы.Вставить("ВыполнитьОтложенныйОбработчик", Истина);
Методы.Вставить("ЗавершитьВыполнениеОтложенногоОбработчика", Истина);
Методы.Вставить("НайтиПорциюДляОбновления", Истина);
Методы.Вставить("ЗавершитьПоискПорцииДляОбновления", Истина);
Методы.Вставить("УстаревшиеДанныеПриЗапросеПорцийВФоне", Истина);
Методы.Вставить("УстаревшиеДанныеПриОчисткеПорцииВФоне", Истина);
Методы.Вставить("ОбновлениеПодОграниченнымиПравами", Истина);
Методы.Вставить("ЗапускРегистрацииДанныхОтложенногоОбновления", Истина);
Методы.Вставить("СформироватьСписокУстаревшихДанныхВФоне", Истина);
Методы.Вставить("ОчиститьУстаревшиеДанныеВФоне", Истина);
Методы.Вставить("ВыполнитьОбновлениеИнформационнойБазыВФоне", Истина);
Методы.Вставить("Пауза", Истина);
Методы.Вставить("УстановитьПорядокОтложенногоОбновления", Истина);
Методы.Вставить("ВыполнитьОтложенноеОбновление", Истина);
Методы.Вставить("ЗагрузитьИУстановитьИсправления", Истина);
Методы.Вставить("ОчисткаУстаревшихДанных", Истина);
КонецПроцедуры
#КонецОбласти
@@ -794,9 +794,10 @@
Если Не МонопольныйРежим() Тогда
ОбъектМетаданных = Метаданные.РегламентныеЗадания.Найти("ОбновлениеОбластейДанных");
Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(ОбъектМетаданных);
ИмяЗадания = ОбъектМетаданных.Имя;
// АПК:280-выкл обработка исключения не требуется
Попытка
ФоновыеЗадания.Выполнить(Задание.Метаданные.ИмяМетода, , Задание.Ключ, Задание.Наименование);
ФоновыеЗадания.Выполнить(Метаданные.РегламентныеЗадания[ИмяЗадания].ИмяМетода,, Задание.Ключ, Задание.Наименование);
Исключение
// Значит задание уже запущено.
// Обработка исключения не требуется.
@@ -1391,4 +1392,11 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновлениеОбластейДанных", Истина);
КонецПроцедуры
#КонецОбласти
@@ -1449,4 +1449,11 @@
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОписанияНовыхПатчей", Истина);
КонецПроцедуры
#КонецОбласти
@@ -360,4 +360,12 @@
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаблокироватьНедействительныхПользователейВСистемеВзаимодействий");
Методы.Вставить("ПользователиДляБлокировкиВСистемеВзаимодействий");
КонецПроцедуры
#КонецОбласти
@@ -1793,7 +1793,8 @@
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверное значение параметра %1 в %2. Общий модуль ""%3"" не существует.'"),
"Имя", "ОбщегоНазначения.ОбщийМодуль", Имя),
КатегорияОшибки.ОшибкаКонфигурации);
КатегорияОшибки.ОшибкаКонфигурации,
"СтандартныеПодсистемы.БазоваяФункциональность.ЭтоОшибкаПолученияОбщегоМодуляПоИмени");
КонецЕсли;
Возврат Модуль;
@@ -3430,6 +3431,8 @@
Если ИмяCOMСоединителя = "v83.COMConnector" Тогда
Возврат "181E893D-73A4-4722-B61D-D604B3D67D47";
ИначеЕсли ИмяCOMСоединителя = "v85.COMConnector" Тогда
Возврат "BBAB44B3-6C80-43B1-AFEC-3094B12122BE";
КонецЕсли;
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
@@ -6505,6 +6508,17 @@
КатегорияОшибки.ОшибкаКонфигурации);
КонецПопытки;
Попытка
СтандартныеПодсистемыСервер.ПроверитьМетодДляВызоваКакПроизвольныйКод(ИмяМетода,, Объект);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неправильное значение параметра %1 (%2) в %3:'"),
"ИмяМетода", ИмяМетода, "ОбщегоНазначения.ВыполнитьМетодОбъекта");
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, ЗаголовокОшибки);
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
КонецПопытки;
ПрофильБезопасностиИБ = СтандартныеПодсистемыСервер.ПрофильБезопасностиДляВыполнитьВычислить();
Если ЗначениеЗаполнено(ПрофильБезопасностиИБ) Тогда
УстановитьБезопасныйРежим(ПрофильБезопасностиИБ);
@@ -9855,7 +9869,8 @@
ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неверное значение параметра %1 в функции %2. Объект метаданных ""%3"" не существует.'"),
"Имя", "ОбщегоНазначения.СерверныйМодульМенеджера", Имя),
КатегорияОшибки.ОшибкаКонфигурации);
КатегорияОшибки.ОшибкаКонфигурации,
"СтандартныеПодсистемы.БазоваяФункциональность.ЭтоОшибкаПолученияМодуляМенеджераПоИмени");
КонецЕсли;
// АПК:488-выкл ВычислитьВБезопасномРежиме не используется, чтобы избежать вызова ОбщийМодуль рекурсивно.
@@ -10513,6 +10528,17 @@
КатегорияОшибки.ОшибкаКонфигурации);
КонецПопытки;
Попытка
СтандартныеПодсистемыСервер.ПроверитьМетодДляВызоваКакПроизвольныйКод(ИмяПроцедуры);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаголовокОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неправильное значение параметра %1 (передано значение: ""%2"") в %3:'"),
"ИмяПроцедуры", ИмяПроцедуры, "ОбщегоНазначения.ВыполнитьМетодКонфигурации");
Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения(ИнформацияОбОшибке, ЗаголовокОшибки);
ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,,, ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
// Возвращает менеджер объекта по имени.
@@ -11076,6 +11102,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЕстьСсылкиНаОбъект", Истина);
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -462,4 +462,54 @@
#КонецОбласти
// Уточняет проверку методов, используемых при статическом поиске имен процедур и функций,
// которые указываются в параметрах процедур и функций, описанных в комментарии к процедуре
// СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод.
// Используется в отчете ПроверкаВнедренийБСП, чтобы учесть случаи, когда
// подсистемы допускают передачу полных имен обработчиков в качестве параметров,
// например, обработчиков установки параметров сеанса, обработчиков обновления
// информационной базы и др.
// Смотри также ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
//
// Параметры:
// Настройки - Структура:
// * ОписаниеОбработчиков - ТаблицаЗначений:
// ** ИменаПроцедур - Соответствие из КлючИЗначение
// *** Ключ - см. ОбщегоНазначения.ВыполнитьМетодКонфигурации.ИмяМетода
// *** Значение - Неопределено, Булево - если Истина, тогда требуется разрешение на запуск в фоне.
// ** ЗаголовокОшибки - Строка - заголовок ошибки с параметром для полного имени процедуры обработчика.
// * ИсключенияПроверки - ТаблицаЗначений:
// ** ПолноеИмяОбъекта - Строка - имя общего модуля, например, "ОбщийМодуль.ОбщегоНазначения",
// имя объекта метаданных (модуль менеджера), например, "Справочник.Организации",
// или имя модуля объекта обработки или отчета, например, "Отчет.ПроверкаВнедренияБСП.МодульОбъекта".
// ** ИмяПроцедуры - Строка - имя процедуры или функции, объявленной в модуле.
// ** ФрагментСодержания - Строка - фрагмент содержания места вызова, которые нужно пропустить.
// Фрагменты содержания указаны в подробном тексте ошибки отчета ПроверкаВнедренияБСП.
// * ОшибкаКогдаУказанныйМетодНеВызывается - Булево - начальное значение Истина.
// Если Истина, тогда отчет ПроверкаВнедренийБСП добавит ошибки,
// когда метод указанный в процедуре ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод,
// не найден среди вызываемых методов, которые нашел отчет (с учетом способа вызова - в фоне / не в фоне).
// * ИсключенияКогдаУказанныйМетодНеВызывается - Соответствие из КлючИЗначение:
// ** Ключ - Строка - имя общего модуля, например, "ОбщийМодуль.ОбщегоНазначения",
// имя объекта метаданных (модуль менеджера), например, "Справочник.Организации",
// или имя модуля объекта обработки или отчета, например, "Отчет.ПроверкаВнедренияБСП.МодульОбъекта".
// ** Значение - см. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод.Методы
//
// Пример:
// Обработчики = Новый Соответствие;
// ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики);
//
// ИменаПроцедур = Новый Соответствие;
// Для Каждого КлючИЗначение Из Обработчики Цикл
// ИменаПроцедур.Вставить(КлючИЗначение.Значение);
// КонецЦикла;
//
// ОписаниеОбработчика = Настройки.ОписаниеОбработчиков.Добавить();
// ОписаниеОбработчика.ИменаПроцедур = ИменаПроцедур;
// ОписаниеОбработчика.ЗаголовокОшибки = НСтр("ru = 'Обработчик установки параметров сеанса ""%1"".'");
//
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
@@ -18,33 +18,35 @@
// Возвращаемое значение:
// Строка
//
Функция БезопаснаяСтрокаКоманды(КомандаЗапуска) Экспорт
Функция БезопаснаяСтрокаКоманды(КомандаЗапуска, Знач ЭтоАдминистратор = Ложь) Экспорт
Результат = "";
Если ТипЗнч(КомандаЗапуска) = Тип("Строка") Тогда
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска, ЭтоАдминистратор);
Возврат КомандаЗапуска;
КонецЕсли;
Если ТипЗнч(КомандаЗапуска) = Тип("Строка") Тогда
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска);
Результат = КомандаЗапуска;
ИначеЕсли ТипЗнч(КомандаЗапуска) = Тип("Массив") Тогда
Если КомандаЗапуска.Количество() > 0 Тогда
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска[0]);
Результат = МассивВСтрокуКоманды(КомандаЗапуска);
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ожидалось, что первый элемент массива %1 будет командой или путем к исполняемому файлу.'"),
"КомандаЗапуска");
КонецЕсли;
Иначе
Если ТипЗнч(КомандаЗапуска) <> Тип("Массив") Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ожидалось, что значение %1 будет типа %2 или %3.'"),
"КомандаЗапуска", "Строка", "Массив");
КонецЕсли;
Возврат Результат
Если КомандаЗапуска.Количество() = 0 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ожидалось, что первый элемент массива %1 будет командой или путем к исполняемому файлу.'"),
"КомандаЗапуска");
КонецЕсли;
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
//@skip-check bsl-legacy-check-for-each-statetement-collection
Для Каждого Элемент Из КомандаЗапуска Цикл
ПроверитьСодержитНебезопасныеДействия(Элемент, ЭтоАдминистратор);
КонецЦикла;
#Иначе
ПроверитьСодержитНебезопасныеДействия(КомандаЗапуска[0], ЭтоАдминистратор);
#КонецЕсли
Возврат МассивВСтрокуКоманды(КомандаЗапуска);
КонецФункции
@@ -489,19 +491,16 @@
#Область БезопаснаяСтрокаКоманды
Функция СодержитНебезопасныеДействия(Знач СтрокаКоманды)
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска, ЭтоАдминистратор)
Возврат СтрНайти(СтрокаКоманды, "${") <> 0
Или СтрНайти(СтрокаКоманды, "$(") <> 0
Или СтрНайти(СтрокаКоманды, "`") <> 0
Или СтрНайти(СтрокаКоманды, "|") <> 0
Или СтрНайти(СтрокаКоманды, ";") <> 0
Или СтрНайти(СтрокаКоманды, "&") <> 0;
ЕстьНебезопасныеДействия = СтрНайти(КомандаЗапуска, "${") <> 0
Или СтрНайти(КомандаЗапуска, "$(") <> 0
Или СтрНайти(КомандаЗапуска, "`") <> 0
Или СтрНайти(КомандаЗапуска, "|") <> 0
Или (СтрНайти(КомандаЗапуска, ";") <> 0 И Не ЭтоАдминистратор)
Или СтрНайти(КомандаЗапуска, "&") <> 0;
КонецФункции
Процедура ПроверитьСодержитНебезопасныеДействия(Знач КомандаЗапуска)
Если СодержитНебезопасныеДействия(КомандаЗапуска) Тогда
Если ЕстьНебезопасныеДействия Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось запустить приложение. Недопустимая строка команды:
|%1
@@ -746,6 +745,19 @@
#КонецОбласти
// АПК:547-выкл инструкция препроцессора допустима, так как в выполняемом коде нет обращения к модулям.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("РасчетныеПоказателиЯчеек", Истина);
КонецПроцедуры
// АПК:547-вкл
#КонецЕсли
#КонецЕсли
#КонецОбласти
@@ -1451,4 +1451,12 @@
КонецЕсли;
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЭкспортОценкиПроизводительности", Истина);
Методы.Вставить("ОчиститьРегистрыЗамерыВремени", Истина);
КонецПроцедуры
#КонецОбласти
@@ -979,4 +979,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("УстановитьЗначенияКонстанты_3_1_3_38");
Методы.Вставить("ПервоначальноеЗаполнение");
КонецПроцедуры
#КонецОбласти
@@ -557,6 +557,17 @@
Возврат ОперативноеОбновлениеОбщихДанных(Тип("СправочникСсылка.ИдентификаторыОбъектовРасширений"));
КонецФункции
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
// Исключения.
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ПодключаемыеКоманды";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьКоманду";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыЭкспортнойПроцедуры)";
КонецПроцедуры
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
@@ -950,6 +961,7 @@
ИначеЕсли СведенияОПодменюКоманды.КоличествоКоманд = 1 И ТипЗнч(ГруппаФормы.Родитель) <> Тип("ФормаКлиентскогоПриложения")
И Не КомандаВидаКоманднаяПанель Тогда
КнопкаФормы = Элементы.Вставить(Команда.ИмяВФорме, Тип("КнопкаФормы"), СведенияОПодменюКоманды.Подменю.Родитель, ГруппаФормы.Родитель);
ИмяКорневогоЭлемента = Команда.ИмяВФорме;
Иначе
КнопкаФормы = Элементы.Добавить(Команда.ИмяВФорме, Тип("КнопкаФормы"), ГруппаФормы);
КонецЕсли;
@@ -1791,4 +1803,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОперативноеОбновлениеОбщихДанныхКонфигурации");
КонецПроцедуры
#КонецОбласти
@@ -184,9 +184,9 @@
Возврат;
КонецЕсли;
Если ПараметрыВыполнения.МассивСсылок.Количество() = 0 Тогда
ПараметрыВыполнения.МассивСсылок = ВыбранныеОбъекты(Источник, ОписаниеКоманды);
КонецЕсли;
ПараметрыВыполнения.МассивСсылок = ?(ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура"),
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Источник.Ссылка),
ВыбранныеОбъекты(Источник, ОписаниеКоманды));
Если ОписаниеКоманды.МножественныйВыбор Тогда
ПараметрКоманды = ПараметрыВыполнения.МассивСсылок;
@@ -204,6 +204,8 @@
// Запись в форме объекта.
Если ПараметрыВыполнения.ТребуетсяЗапись Тогда
ПараметрыВыполнения.ТребуетсяЗапись = Ложь;
ПараметрыВыполнения.ТребуетсяПроведение = ПараметрыВыполнения.ТребуетсяПроведение И Источник.Свойство("Проведен");
Если Источник.Ссылка.Пустая()
Или (ОписаниеКоманды.РежимЗаписи <> "ЗаписыватьТолькоНовые" И ПараметрыВыполнения.Форма.Модифицированность)
Или ПараметрыВыполнения.ТребуетсяПроведение И Не Источник.Проведен Тогда
@@ -919,12 +919,8 @@
ОписаниеПодчиненногоОбъекта, ИспользуемыеСвязи);
КонецЦикла;
ПараметрыМетодаПоиска = Новый Массив;
ПараметрыМетодаПоиска.Добавить(ПарыЗамен);
ПараметрыМетодаПоиска.Добавить(НеподобранныеЗамены);
ОбщегоНазначения.ВыполнитьМетодКонфигурации(
ОписаниеПодчиненногоОбъекта.ИмяМодуляМетодаПоиска + ".ПриПоискеЗаменыСсылок",
ПараметрыМетодаПоиска);
Модуль = ОбщегоНазначения.ОбщийМодуль(ОписаниеПодчиненногоОбъекта.ИмяМодуляМетодаПоиска);
Модуль.ПриПоискеЗаменыСсылок(ПарыЗамен, НеподобранныеЗамены);
КонецПроцедуры
@@ -938,4 +934,12 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ЗаменитьСсылки", Истина);
Методы.Вставить("ОпределитьМестаИспользования", Истина);
КонецПроцедуры
#КонецОбласти
@@ -596,4 +596,13 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ИнициализироватьФункциональнуюОпциюПолнотекстовыйПоиск");
Методы.Вставить("ОбновлениеИндексаППДПоРасписанию", Истина);
Методы.Вставить("СлияниеИндексаППДПоРасписанию", Истина);
КонецПроцедуры
#КонецОбласти
@@ -9438,6 +9438,10 @@
Пропустить = Ложь;
Возврат ВыборкаНастроек.Следующий();
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Если ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории(КатегорияОшибки.НарушениеПравДоступа) Тогда
ВызватьИсключение;
КонецЕсли;
Пропустить = Истина;
Возврат Истина;
КонецПопытки;
@@ -9548,8 +9552,9 @@
//
Процедура СкопироватьНастройкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки)
Если НЕ ПараметрыОбработки.Свойство("ЗначениеКопирования")
ИЛИ НЕ ПараметрыОбработки.НовыйПользовательИБСуществует Тогда
Если Не ПараметрыОбработки.Свойство("ЗначениеКопирования")
Или Не ПараметрыОбработки.НовыйПользовательИБСуществует
Или Не ПравоДоступа("АдминистрированиеДанных", Метаданные) Тогда
Возврат;
КонецЕсли;
@@ -12069,4 +12074,17 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ЗаполнитьИерархиюГруппПользователей");
Методы.Вставить("ОбновитьПредопределенныеВидыКонтактнойИнформацииПользователей");
Методы.Вставить("ПереименоватьКлючХраненияРешенияПоОткрытиюВнешнихОтчетовИОбработок");
Методы.Вставить("ПеренестиНастройкиДлиныИСложностиПаролейКонфигуратора");
Методы.Вставить("ЗаполнитьСпискиНастроек", Истина);
Методы.Вставить("ЗаполнитьПочтуДляВосстановленияПароляУПользователейВФоне", Истина);
КонецПроцедуры
#КонецОбласти
@@ -650,4 +650,53 @@
#КонецОбласти
#Область НастройкаРазрешенийНаИспользованиеВнешнихРесурсов
Процедура ВыполнитьОбработкуЗапросов(Знач ИдентификаторыЗапросов, Знач АдресВременногоХранилища,
Знач АдресВременногоХранилищаСостояния, Знач ДобавитьОчисткуЗапросовПередПрименением = Ложь) Экспорт
Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросов(
ИдентификаторыЗапросов,
АдресВременногоХранилища,
АдресВременногоХранилищаСостояния,
ДобавитьОчисткуЗапросовПередПрименением);
КонецПроцедуры
Процедура ВыполнитьОбработкуЗапросовОбновления(Знач АдресВременногоХранилища,
Знач АдресВременногоХранилищаСостояния) Экспорт
Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовОбновления(
АдресВременногоХранилища, АдресВременногоХранилищаСостояния);
КонецПроцедуры
Процедура ВыполнитьОбработкуЗапросовОтключения(Знач АдресВременногоХранилища,
Знач АдресВременногоХранилищаСостояния) Экспорт
Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовОтключения(
АдресВременногоХранилища, АдресВременногоХранилищаСостояния);
КонецПроцедуры
Процедура ВыполнитьОбработкуЗапросовВосстановления(Знач АдресВременногоХранилища,
Знач АдресВременногоХранилищаСостояния) Экспорт
Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ВыполнитьОбработкуЗапросовВосстановления(
АдресВременногоХранилища, АдресВременногоХранилищаСостояния);
КонецПроцедуры
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ВыполнитьОбработкуЗапросов", Истина);
Методы.Вставить("ВыполнитьОбработкуЗапросовОбновления", Истина);
Методы.Вставить("ВыполнитьОбработкуЗапросовОтключения", Истина);
Методы.Вставить("ВыполнитьОбработкуЗапросовВосстановления", Истина);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -2688,11 +2688,12 @@
АдресПоПолям.ТипАдреса = АдресИзJSON.AddressType;
АдресПоПолям.Страна = АдресИзJSON.Country;
АдресПоПолям.КодСтраны = КодыСтраны(АдресИзJSON);
НаименованиеРегиона = СокрЛП(АдресИзJSON["area"] + " " +АдресИзJSON["areaType"]);
НазваниеОсновнойСтраны = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РаботаСАдресамиКлиентСервер.ОсновнаяСтрана(), "Наименование");
ЭтоНациональныйАдрес = ?(СтрСравнить(АдресИзJSON.Country, НазваниеОсновнойСтраны) = 0, Истина, Ложь);
АдресПоПолям.КодРегиона = ?(ЭтоНациональныйАдрес, КодРегиона(НаименованиеРегиона), "");
Если ЭтоНациональныйАдрес Тогда
АдресПоПолям.КодРегиона = КодРегиона(АдресИзJSON.areaValue, АдресИзJSON.area, АдресИзJSON.areaType);
КонецЕсли;
ИдентификаторАдресногоОбъекта = "";
МаксимальныйУровеньИдентификатора = 0;
@@ -2731,7 +2732,7 @@
// Коды мун. уровней
АдресПоПолям.КодМуниципальногоРайона = КодМуниципальногоРайона(АдресИзJSON.munDistrictType, АдресИзJSON.oktmo,
ЭтоГородФедеральногоЗначения(НаименованиеРегиона));
ЭтоГородФедеральногоЗначения(СокрЛП(АдресИзJSON.area + " " + АдресИзJSON.areaType)));
АдресПоПолям.КодПоселения = КодПоселения(АдресИзJSON.settlementType);
Если Параметры.КодыАдреса Тогда
@@ -3226,23 +3227,34 @@
// Возвращает код региона по его полному наименованию.
//
// Параметры:
// НаименованиеРегиона - Строка - полное наименование региона с сокращением.
// Параметры:
// ПолноеНаименование - Строка - полное официальное наименование региона.
// НаименованиеАдресногоЭлемента - Строка - наименование адресного элемента региона, например "Тверская".
// ТипАдресногоЭлемента - Строка - вид адресного элемента региона.
//
// Возвращаемое значение:
// Строка - код региона из двух цифр. Пустая строка, если наименование определить не удалось.
// Неопределено - если нет ни одной подсистемы адресного классификатора.
//
Функция КодРегиона(Знач ПолноеНаименование) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор");
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(ПолноеНаименование);
Возврат Формат(Код, "ЧЦ=2; ЧН=; ЧВН=");
// Строка - код региона из двух цифр; пустая строка, если код региона по наименованию определить не удалось.
// Неопределено - если нет подсистемы адресного классификатора.
//
Функция КодРегиона(Знач ПолноеНаименование, НаименованиеАдресногоЭлемента = "", ТипАдресногоЭлемента = "") Экспорт
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда
Возврат Неопределено;
КонецЕсли;
МодульАдресныйКлассификатор = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификатор");
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(ПолноеНаименование);
Если Не ЗначениеЗаполнено(Код) И ЗначениеЗаполнено(НаименованиеАдресногоЭлемента) Тогда
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеАдресногоЭлемента);
Если Не ЗначениеЗаполнено(Код) И ЗначениеЗаполнено(ТипАдресногоЭлемента) Тогда
Код = МодульАдресныйКлассификатор.КодРегионаПоНаименованию(НаименованиеАдресногоЭлемента + " " + ТипАдресногоЭлемента);
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
Возврат Формат(Код, "ЧЦ=2; ЧН=; ЧВН=");
КонецФункции
// Заполняет коды по структуре адреса.
@@ -5379,4 +5391,17 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ВыявитьУстаревшиеАдреса");
Методы.Вставить("ПроверитьАдресаНаСоответствиеАдресномуКлассификатору");
Методы.Вставить("ПроверитьАдресаНаТипЗданияЛитер");
Методы.Вставить("ИсправитьУстаревшиеАдресаВФоне", Истина);
Методы.Вставить("ИсправитьНекорректныеАдресаВФоне", Истина);
Методы.Вставить("ИсправитьТипЗданияЛитерВАдресахВФоне", Истина);
КонецПроцедуры
#КонецОбласти
@@ -583,4 +583,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьКурсВалюты", Истина);
КонецПроцедуры
#КонецОбласти
@@ -183,10 +183,10 @@
#КонецОбласти
// Локализация
#Область СлужебныеПроцедурыИФункции
// Локализация
// Возвращает список разрешений для загрузки курсов валют из внешних ресурсов.
//
// Возвращаемое значение:
@@ -200,7 +200,15 @@
КонецФункции
#КонецОбласти
// Конец Локализация
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПриЗагрузкеАктуальныхКурсов", Истина);
// Локализация
// Конец Локализация
КонецПроцедуры
#КонецОбласти
@@ -234,8 +234,7 @@
// См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПослеЗагрузкиДанных.
Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ПоставляемыеДанные") Тогда
// Создаем связи между разделенными и неразделенными валютами, копируем курсы.
Если ОбщегоНазначения.РазделениеВключено() Тогда
ОбновитьКурсыВалют();
КонецЕсли;
@@ -1321,23 +1321,8 @@
Результат = Новый Массив;
Для Каждого Вложение Из КоллекцияВложений Цикл
ОписаниеВложения = ОписаниеВложения();
Если ТипЗнч(КоллекцияВложений) = Тип("СписокЗначений") Тогда
ОписаниеВложения.Представление = Вложение.Представление;
ДвоичныеДанные = Неопределено;
Если ТипЗнч(Вложение.Значение) = Тип("ДвоичныеДанные") Тогда
ДвоичныеДанные = Вложение.Значение;
Иначе
Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Вложение.Значение);
Иначе
ПутьКФайлу = Вложение.Значение;
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
КонецЕсли;
КонецЕсли;
Иначе // ТипЗнч(Параметры.Вложения) = "массив структур"
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище);
ЗаполнитьЗначенияСвойств(ОписаниеВложения, Вложение, , "АдресВоВременномХранилище");
КонецЕсли;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище);
ЗаполнитьЗначенияСвойств(ОписаниеВложения, Вложение, , "АдресВоВременномХранилище");
ОписаниеВложения.АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор);
Результат.Добавить(ОписаниеВложения);
КонецЦикла;
@@ -2913,4 +2898,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ПолучениеСтатусовЭлектронныхПисем", Истина);
КонецПроцедуры
#КонецОбласти
@@ -2469,4 +2469,14 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьПутьТомаLinux");
Методы.Вставить("ЗаполнитьНастройкиХраненияФайлов");
Методы.Вставить("УстановитьСпособФормированияПутиТома");
Методы.Вставить("ПроверкаСсылокНаНесуществующиеФайлыВТоме");
КонецПроцедуры
#КонецОбласти
@@ -4549,7 +4549,7 @@
Исключение
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Работа с файлами.Ошибка установки времени изменения'", ОбщегоНазначения.КодОсновногоЯзыка()),
"Ошибка", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
КонецПроцедуры
@@ -9649,6 +9649,20 @@
Возврат Результат;
КонецЕсли;
БезопасноеРасширение = РасширениеДляИзвлеченияТекстаКорректное(Расширение);
Если Не БезопасноеРасширение Тогда
Результат.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен;
Результат.ТекстХранилище = Новый ХранилищеЗначения("");
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииИзвлеченияТекста(),
УровеньЖурналаРегистрации.Предупреждение,,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку
(НСтр("ru = 'Попытка извлечения текста из файла с недопустимым расширением: %1'"), Расширение));
Возврат Результат;
КонецЕсли;
// Текст извлекается сразу, а не в регламентном задании.
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
@@ -9656,7 +9670,7 @@
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()),
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииИзвлеченияТекста(),
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
@@ -9664,6 +9678,22 @@
КонецФункции
Функция РасширениеДляИзвлеченияТекстаКорректное(Расширение)
Если Расширение = Неопределено Или ПустаяСтрока(Расширение) Тогда
Возврат Истина;
КонецЕсли;
НедопустимыеСимволы = ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(Расширение);
Если НедопустимыеСимволы.Количество() > 0
Или СтрДлина(Расширение) > 20 Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Функция ИзвлечьТекстИзФайлаНаДиске(Знач ИмяФайла, Знач Кодировка = Неопределено) Экспорт
ИзвлеченныйТекст = "";
@@ -9739,7 +9769,7 @@
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка()),
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииИзвлеченияТекста(),
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
@@ -9815,6 +9845,12 @@
КонецФункции
Функция СобытиеЖурналаРегистрацииИзвлеченияТекста()
Возврат НСтр("ru = 'Файлы.Извлечение текста'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
#КонецОбласти
#Область ОбработчикиПодписокНаСобытия
@@ -10080,4 +10116,21 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("КоличествоВерсийСНеизвлеченнымТекстом", Истина);
Методы.Вставить("СведенияОбОчищаемыхФайлах", Истина);
Методы.Вставить("СоздатьСерверныйНачальныйОбразНаСервере", Истина);
Методы.Вставить("СоздатьФайловыйНачальныйОбразНаСервере", Истина);
Методы.Вставить("ОсвободитьЗахваченныеФайлыФон", Истина);
Методы.Вставить("ИзвлечьТекстИзФайловНаСервере", Истина);
Методы.Вставить("ОчиститьНенужныеФайлы", Истина);
Методы.Вставить("РегламентнаяСинхронизацияФайловWebdav", Истина);
Методы.Вставить("ОбновитьСписокЗапрещенныхРасширений");
Методы.Вставить("ОбновитьСписокРасширенийТекстовыхФайлов");
Методы.Вставить("ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных");
КонецПроцедуры
#КонецОбласти
@@ -501,4 +501,11 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбработатьОчередьИзвлеченияТекста", Истина);
КонецПроцедуры
#КонецОбласти
@@ -5441,4 +5441,17 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановитьКоличествоМесяцевХраненияИсторииРассылкиОтчетов");
Методы.Вставить("РезультатФормированияПорцииОтчетов", Истина);
Методы.Вставить("ВыполнитьОчисткуИсторииРассылкиОтчетовВФоновомЗадании", Истина);
Методы.Вставить("ВыполнитьРассылкиВФоновомЗадании", Истина);
Методы.Вставить("ВыполнитьРассылкиSMSСПаролямиАрхивовРассылкиОтчетовВФоновомЗадании", Истина);
Методы.Вставить("ОчиститьУстаревшиеЗаписиИсторииРассылкиОтчетов", Истина);
Методы.Вставить("ВыполнитьРассылкуПоРасписанию", Истина);
КонецПроцедуры
#КонецОбласти
@@ -11,8 +11,17 @@
Процедура ПриИзмененииХранитьИсториюРассылкиОтчетов() Экспорт
Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") Тогда
УстановитьИспользованиеРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПолучениеСтатусовЭлектронныхПисем, Истина);
УстановитьИспользованиеРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОчисткаИсторииРассылкиОтчетов, Истина);
// Каждый день; каждые 1 800 секунд
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодПовтораВТечениеДня = 1800;
УстановитьИспользованиеРегламентногоЗадания(Метаданные.РегламентныеЗадания.ПолучениеСтатусовЭлектронныхПисем, Истина, Расписание);
// Каждый день; с 2:00:00 один раз в день, завершать после 5:00:00
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораДней = 1;
Расписание.ВремяНачала = '00010101020000';
Расписание.ВремяКонца = '00010101050000';
УстановитьИспользованиеРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОчисткаИсторииРассылкиОтчетов, Истина, Расписание);
Иначе
УстановитьИспользованиеРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОчисткаИсторииРассылкиОтчетов, Ложь);
КонецЕсли;
@@ -96,7 +105,7 @@
КонецФункции
Процедура УстановитьИспользованиеРегламентногоЗадания(МетаданныеЗадание, Использование)
Процедура УстановитьИспользованиеРегламентногоЗадания(МетаданныеЗадание, Использование, Расписание = Неопределено)
ПараметрыЗадания = Новый Структура;
ПараметрыЗадания.Вставить("Метаданные", МетаданныеЗадание);
@@ -108,6 +117,9 @@
ПараметрыЗадания = Новый Структура;
ПараметрыЗадания.Вставить("Использование", Использование);
ПараметрыЗадания.Вставить("Метаданные", МетаданныеЗадание);
Если Расписание <> Неопределено Тогда
ПараметрыЗадания.Вставить("Расписание", Расписание);
КонецЕсли;
РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
Иначе
ПараметрыЗадания = Новый Структура("Использование", Использование);
@@ -679,7 +679,12 @@
Иначе
НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), ПредставлениеРегламентногоЗадания(Задание));
// Не используются длительные операции, т.к. делается вызов метода регламентного задания.
ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(Задание.Метаданные.ИмяМетода, Задание.Параметры, Строка(Задание.УникальныйИдентификатор), НаименованиеФоновогоЗадания);
ИмяЗадания = Задание.Метаданные.Имя;
ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(
Метаданные.РегламентныеЗадания[ИмяЗадания].ИмяМетода,
Задание.Параметры,
Строка(Задание.УникальныйИдентификатор),
НаименованиеФоновогоЗадания);
ПараметрыВыполнения.ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор);
ПараметрыВыполнения.МоментЗапуска = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).Начало;
ПараметрыВыполнения.ЗапускВыполнен = Истина;
@@ -1114,4 +1119,12 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("СформироватьТаблицуРегламентныхЗаданий", Истина);
Методы.Вставить("ЗаполнитьТаблицуСвойствФоновыхЗаданийВФоне", Истина);
КонецПроцедуры
#КонецОбласти
@@ -76,6 +76,7 @@
// - Соответствие из КлючИЗначение:
// * Ключ - УникальныйИдентификатор - идентификатор пользователя ИБ.
// * Значение - Массив из см. СерверныеОповещения.КлючСеанса
// - Массив из Строка - если в массиве есть "*", тогда для всех сеансов пользователя.
//
// ОтправитьСразу - Булево - если Истина, попытаться сразу отправить сообщение
// через систему взаимодействия перед добавлением в очередь.
@@ -1757,7 +1758,8 @@
Формат(ТекущийСеанс.НомерСеанса, "ЧГ="),
Формат(ТекущийСеанс.НачалоСеанса, "ДЛФ=DT")) + ")";
ФоновыеЗадания.Выполнить(ИмяМетодаЗаданияДоставкиСерверныхОповещенийСОтсрочкой(),,, НаименованиеЗадания);
// Имя процедуры должно быть, как указано в функции ИмяМетодаЗаданияДоставкиСерверныхОповещенийСОтсрочкой.
ФоновыеЗадания.Выполнить("СерверныеОповещения.ДоставкаСерверныхОповещенийСОтсрочкой",,, НаименованиеЗадания);
Запущено = Истина;
@@ -2903,4 +2905,12 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОтправкаСерверныхОповещенийКлиентам", Истина);
Методы.Вставить("ДоставкаСерверныхОповещенийСОтсрочкой", Истина);
КонецПроцедуры
#КонецОбласти
@@ -189,6 +189,80 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
// Исключения.
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.СервисКриптографииDSSСлужебный";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьВФоне";
ИсключениеПроверки.ФрагментСодержания = "Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения)";
Методы = Новый Соответствие;
Методы.Вставить("ОбновитьКэшСертификатов");
Методы.Вставить("АутентификацияПоСертификату", Истина);
Методы.Вставить("АутентификацияПоЛогину", Истина);
Методы.Вставить("Зашифровать", Истина);
Методы.Вставить("СертификатыРасшифрования", Истина);
Методы.Вставить("ХешированиеДанных", Истина);
Методы.Вставить("СоздатьТранзакцию", Истина);
Методы.Вставить("Расшифровать", Истина);
Методы.Вставить("Подписать", Истина);
Методы.Вставить("ПодписатьПакет", Истина);
Методы.Вставить("УсовершенствоватьПодпись", Истина);
Методы.Вставить("ВалидацияПинКодаСертификата", Истина);
Методы.Вставить("ПолучитьДанныеСертификата", Истина);
Методы.Вставить("ПолучитьСвойстваСертификата", Истина);
Методы.Вставить("ОбновитьДанныеСертификатов", Истина);
Методы.Вставить("СоздатьЗапросНаСертификат", Истина);
Методы.Вставить("СписокЗапросовНаСертификат", Истина);
Методы.Вставить("ПолучитьЗапросНаСертификат", Истина);
Методы.Вставить("УдалитьЗапросНаСертификат", Истина);
Методы.Вставить("УстановитьСертификат", Истина);
Методы.Вставить("НазначитьОсновнымСертификат", Истина);
Методы.Вставить("СменитьПинКодСертификата", Истина);
Методы.Вставить("ПроверитьСертификат", Истина);
Методы.Вставить("ПолучитьСведенияОПодписантах", Истина);
Методы.Вставить("ПроверитьПодпись", Истина);
Методы.Вставить("ОбновитьПолитикуПользователя", Истина);
Методы.Вставить("ПолучитьОписаниеСервиса", Истина);
Методы.Вставить("ВыполнитьЗапросКСервису", Истина);
Методы.Вставить("НайтиСертификат", Истина);
Методы.Вставить("СостояниеУчетнойЗаписи", Истина);
Методы.Вставить("ПодготовитьТранзакцию", Истина);
Методы.Вставить("ПолучитьЗаписиАудита", Истина);
Методы.Вставить("ЗагрузитьДокумент", Истина);
Методы.Вставить("ЗагрузитьПакетДокументов", Истина);
Методы.Вставить("ИнформацияОДокументеПоИдентификатору", Истина);
Методы.Вставить("ИнформацияОДокументеПоХешу", Истина);
Методы.Вставить("ПолучитьОбработанныйДокумент", Истина);
Методы.Вставить("ИзменитьИнформациюОДокументе", Истина);
Методы.Вставить("ПривязатьДокумент", Истина);
Методы.Вставить("ПолучитьИнформациюДокументаКонвертации", Истина);
Методы.Вставить("УдалитьДокумент", Истина);
Методы.Вставить("СоздатьЗакрытыйКлюч", Истина);
Методы.Вставить("УстановитьПараметрЗакрытогоКлюча", Истина);
Методы.Вставить("ПолучитьПараметрЗакрытогоКлюча", Истина);
Методы.Вставить("ПодписатьАсинхронно", Истина);
Методы.Вставить("ПолучитьОбработанныеДокументы", Истина);
Методы.Вставить("ЗашифроватьАсинхронно", Истина);
Методы.Вставить("РасшифроватьАсинхронно", Истина);
Методы.Вставить("СертификатыРасшифрованияАсинхронно", Истина);
Методы.Вставить("СведенияОбОперации", Истина);
Методы.Вставить("ПолучитьТокенПоКодуАвторизации", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("ОбщийМодуль.СервисКриптографииDSSСлужебный", Методы);
Методы = Новый Соответствие;
Методы.Вставить("ОбменССерверомАктивироватьУчетнуюЗапись", Истина);
Методы.Вставить("ОбменССерверомАктивироватьКлючПриложенияУчетнойЗаписи", Истина);
Методы.Вставить("ОбменССерверомОтправитьКодАктивацииКлюча", Истина);
Методы.Вставить("ПолучитьТикетИнтернетПоддержкиПользователя", Истина);
Методы.Вставить("ОтправитьЗаявлениеНаПортал", Истина);
Методы.Вставить("ОбменССерверомСписокСерверовОблачнойПодписи", Истина);
Настройки.ИсключенияКогдаУказанныйМетодНеВызывается.Вставить("Обработка.УправлениеПодключениемDSS", Методы);
КонецПроцедуры
#КонецОбласти
#Область ПоставляемыеДанные
@@ -7468,4 +7542,62 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ОбновитьКэшСертификатов");
Методы.Вставить("АутентификацияПоСертификату", Истина);
Методы.Вставить("АутентификацияПоЛогину", Истина);
Методы.Вставить("Зашифровать", Истина);
Методы.Вставить("СертификатыРасшифрования", Истина);
Методы.Вставить("ХешированиеДанных", Истина);
Методы.Вставить("СоздатьТранзакцию", Истина);
Методы.Вставить("Расшифровать", Истина);
Методы.Вставить("Подписать", Истина);
Методы.Вставить("ПодписатьПакет", Истина);
Методы.Вставить("УсовершенствоватьПодпись", Истина);
Методы.Вставить("ВалидацияПинКодаСертификата", Истина);
Методы.Вставить("ПолучитьДанныеСертификата", Истина);
Методы.Вставить("ПолучитьСвойстваСертификата", Истина);
Методы.Вставить("ОбновитьДанныеСертификатов", Истина);
Методы.Вставить("СоздатьЗапросНаСертификат", Истина);
Методы.Вставить("СписокЗапросовНаСертификат", Истина);
Методы.Вставить("ПолучитьЗапросНаСертификат", Истина);
Методы.Вставить("УдалитьЗапросНаСертификат", Истина);
Методы.Вставить("УстановитьСертификат", Истина);
Методы.Вставить("НазначитьОсновнымСертификат", Истина);
Методы.Вставить("СменитьПинКодСертификата", Истина);
Методы.Вставить("ПроверитьСертификат", Истина);
Методы.Вставить("ПолучитьСведенияОПодписантах", Истина);
Методы.Вставить("ПроверитьПодпись", Истина);
Методы.Вставить("ОбновитьПолитикуПользователя", Истина);
Методы.Вставить("ПолучитьОписаниеСервиса", Истина);
Методы.Вставить("ВыполнитьЗапросКСервису", Истина);
Методы.Вставить("НайтиСертификат", Истина);
Методы.Вставить("СостояниеУчетнойЗаписи", Истина);
Методы.Вставить("ПодготовитьТранзакцию", Истина);
Методы.Вставить("ПолучитьЗаписиАудита", Истина);
Методы.Вставить("ЗагрузитьДокумент", Истина);
Методы.Вставить("ЗагрузитьПакетДокументов", Истина);
Методы.Вставить("ИнформацияОДокументеПоИдентификатору", Истина);
Методы.Вставить("ИнформацияОДокументеПоХешу", Истина);
Методы.Вставить("ПолучитьОбработанныйДокумент", Истина);
Методы.Вставить("ИзменитьИнформациюОДокументе", Истина);
Методы.Вставить("ПривязатьДокумент", Истина);
Методы.Вставить("ПолучитьИнформациюДокументаКонвертации", Истина);
Методы.Вставить("УдалитьДокумент", Истина);
Методы.Вставить("СоздатьЗакрытыйКлюч", Истина);
Методы.Вставить("УстановитьПараметрЗакрытогоКлюча", Истина);
Методы.Вставить("ПолучитьПараметрЗакрытогоКлюча", Истина);
Методы.Вставить("ПодписатьАсинхронно", Истина);
Методы.Вставить("ПолучитьОбработанныеДокументы", Истина);
Методы.Вставить("ЗашифроватьАсинхронно", Истина);
Методы.Вставить("РасшифроватьАсинхронно", Истина);
Методы.Вставить("СертификатыРасшифрованияАсинхронно", Истина);
Методы.Вставить("СведенияОбОперации", Истина);
Методы.Вставить("ПолучитьТокенПоКодуАвторизации", Истина);
КонецПроцедуры
#КонецОбласти
@@ -2380,5 +2380,14 @@
Возврат СтрСоединить(RestЗапрос, Символы.ПС);
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановитьПараметрСеансаПараметрыАвторизацииВСервисеМобильнойПодписи");
Методы.Вставить("ОтправитьНаПодписание", Истина);
Методы.Вставить("ПолучениеРезультатовИзСервисаМобильнойПодписи", Истина);
КонецПроцедуры
#КонецОбласти
@@ -943,4 +943,11 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ДанныеСклонения", Истина);
КонецПроцедуры
#КонецОбласти
@@ -754,9 +754,9 @@
Иначе
ТекстСообщения = ТекстСообщения + НСтр("ru = '%1
|Для того чтобы разрешить работу пользователей, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами:
|ENTERPRISE %2 /C%3 /UC%4'");
|ENTERPRISE %2 /C %3 /UC %4'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СоединенияИБКлиентСервер.ТекстДляАдминистратора(),
СтрокаПутиКИнформационнойБазе, ИмяПараметра, НСтр("ru = '<код разрешения>'"));
СтрокаПутиКИнформационнойБазе, ИмяПараметра, "КодРазрешения");
КонецЕсли;
Возврат ТекстСообщения;
@@ -403,23 +403,25 @@
И ТекущийРежим.Параметр = СерверныеОповещенияКлиент.КлючСеанса() Тогда
Возврат;
КонецЕсли;
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ВремяОкончанияБлокировки = ТекущийРежим.Конец;
// ИнтервалЗакрытьСЗапросом и ИнтервалПрекратить имеют отрицательное значение,
// поэтому, когда идет сравнение этих параметров с разницей (ВремяНачалаБлокировки - ТекущийМомент),
// то используется "<=", так как данная разница постоянно уменьшается.
ИнтервалПредупреждения = ТекущийРежим.ИнтервалОжиданияЗавершенияРаботыПользователей;
ИнтервалЗакрытьСЗапросом = ИнтервалПредупреждения / 3;
ИнтервалПрекратитьВМоделиСервиса = 60; // За минуту до начала блокировки.
ИнтервалПрекратить = 0; // В момент установки блокировки.
ТекущийМомент = ТекущийРежим.ТекущаяДатаСеанса;
ТекущийМомент = ТекущийРежим.ТекущаяДатаСеанса;
ВремяОкончанияБлокировки = ТекущийРежим.Конец;
Если ВремяОкончанияБлокировки <> '00010101' И ТекущийМомент > ВремяОкончанияБлокировки Тогда
Возврат;
КонецЕсли;
РазделениеВключено = ОбщегоНазначенияКлиент.РазделениеВключено();
ВремяНачалаБлокировки = ТекущийРежим.Начало;
ИнтервалПредупреждения = ТекущийРежим.ИнтервалОжиданияЗавершенияРаботыПользователей;
ИнтервалПрекратитьВМоделиСервиса = 60; // За минуту до начала блокировки.
ИнтервалПрекратить = 0; // В момент установки блокировки.
ИнтервалЗакрытьСЗапросом = 60 + ?(РазделениеВключено, ИнтервалПрекратитьВМоделиСервиса, ИнтервалПрекратить);
ИнтервалПредупреждения = ?(ИнтервалПредупреждения - 60 > ИнтервалЗакрытьСЗапросом,
ИнтервалПредупреждения, ИнтервалЗакрытьСЗапросом + 60);
ДатаВремениНачалаБлокировки = Формат(ВремяНачалаБлокировки, "ДЛФ=DD");
ВремяВремениНачалаБлокировки = Формат(ВремяНачалаБлокировки, "ДЛФ=T");
@@ -428,7 +430,6 @@
|%3'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДатаВремениНачалаБлокировки, ВремяВремениНачалаБлокировки, ТекстСообщения);
РазделениеВключено = ОбщегоНазначенияКлиент.РазделениеВключено();
Если Не РазделениеВключено
И (Не ЗначениеЗаполнено(ВремяНачалаБлокировки) Или ВремяНачалаБлокировки - ТекущийМомент < ИнтервалПрекратить) Тогда
@@ -677,18 +678,21 @@
ПараметрыИнформирования.ОповещениеПоказано = Истина;
КонецЕсли;
Если Не ПараметрыИнформирования.ПоказатьПредупреждениеИлиВопрос Тогда
Если ПараметрыИнформирования.ПредупреждениеПоказано Тогда
Возврат;
КонецЕсли;
ПоказатьПредупреждение(, ТекстСообщения, 30);
ПараметрыИнформирования.ПредупреждениеПоказано = Истина;
КонецПроцедуры
// Возвращаемое значение:
// Структура:
// * ОповещениеПоказано - Булево
// * ПоказатьПредупреждениеИлиВопрос - Булево
// * ПредупреждениеПоказано - Булево
// * ВопросПоказан - Булево
//
Функция ПараметрыИнформирования(ВремяНачалаБлокировки)
@@ -697,20 +701,12 @@
Если Свойства = Неопределено Или Свойства.ВремяНачалаБлокировки <> ВремяНачалаБлокировки Тогда
Свойства = Новый Структура;
Свойства.Вставить("ОповещениеПоказано", Ложь);
Свойства.Вставить("ПоказатьПредупреждениеИлиВопрос", Ложь);
Свойства.Вставить("ДатаПоследнегоПредупрежденияИлиВопроса", '00010101');
Свойства.Вставить("ПредупреждениеПоказано", Ложь);
Свойства.Вставить("ВопросПоказан", Ложь);
Свойства.Вставить("ВремяНачалаБлокировки", ВремяНачалаБлокировки);
ПараметрыПриложения.Вставить(ИмяПараметра, Свойства);
КонецЕсли;
ДатаСеанса = ОбщегоНазначенияКлиент.ДатаСеанса();
Если Свойства.ДатаПоследнегоПредупрежденияИлиВопроса + 50 < ДатаСеанса Тогда
Свойства.ДатаПоследнегоПредупрежденияИлиВопроса = ДатаСеанса;
Свойства.ПоказатьПредупреждениеИлиВопрос = Истина;
Иначе
Свойства.ПоказатьПредупреждениеИлиВопрос = Ложь;
КонецЕсли;
Возврат Свойства;
КонецФункции
@@ -739,7 +735,7 @@
ПараметрыИнформирования.ОповещениеПоказано = Истина;
КонецЕсли;
Если Не ПараметрыИнформирования.ПоказатьПредупреждениеИлиВопрос Тогда
Если ПараметрыИнформирования.ВопросПоказан Тогда
Возврат;
КонецЕсли;
@@ -749,6 +745,8 @@
ОписаниеОповещения = Новый ОписаниеОповещения("ЗадатьВопросПриЗавершенииРаботыЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Да);
ПараметрыИнформирования.ВопросПоказан = Истина;
КонецПроцедуры
Процедура ЗадатьВопросПриЗавершенииРаботыЗавершение(Ответ, ДополнительныеПараметры) Экспорт
@@ -1160,4 +1160,18 @@
#КонецОбласти
// Параметры:
// ИмяМодуля - Строка
//
// Возвращаемое значение:
// ФиксированноеСоответствие, Неопределено
//
Функция МетодыРазрешенныеДляВызоваКакПроизвольныйКод(ИмяМодуля) Экспорт
Модуль = ОбщегоНазначения.ОбщийМодуль(ИмяМодуля);
Возврат СтандартныеПодсистемыСервер.МетодыРазрешенныеДляВызоваКакПроизвольныйКод(Модуль);
КонецФункции
#КонецОбласти
@@ -610,6 +610,89 @@
#Область ДляВызоваИзДругихПодсистем
// Возвращает настройки, используемые при статическом поиске имен процедур и функций,
// которые указываются в параметрах процедур и функций, описанных в комментарии
// к процедуре ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод.
// Используется в отчете ПроверкаВнедренийБСП.erf, чтобы учесть случаи, когда
// подсистемы допускают передачу полных имен обработчиков в качестве параметров,
// например, обработчиков установки параметров сеанса, обработчиков обновления
// информационной базы и др.
// Смотри также ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
//
// Возвращаемое значение:
// см. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.Настройки
//
Функция НастройкиПроверкиМетодовВызываемыхКакПроизвольныйКод() Экспорт
ОписаниеОбработчиков = Новый ТаблицаЗначений;
ОписаниеОбработчиков.Колонки.Добавить("ИменаПроцедур", Новый ОписаниеТипов("Соответствие"));
ОписаниеОбработчиков.Колонки.Добавить("ЗаголовокОшибки", Новый ОписаниеТипов("Строка"));
ИсключенияПроверки = Новый ТаблицаЗначений;
ИсключенияПроверки.Колонки.Добавить("ПолноеИмяОбъекта", Новый ОписаниеТипов("Строка"));
ИсключенияПроверки.Колонки.Добавить("ИмяПроцедуры", Новый ОписаниеТипов("Строка"));
ИсключенияПроверки.Колонки.Добавить("ФрагментСодержания", Новый ОписаниеТипов("Строка"));
Настройки = Новый Структура;
Настройки.Вставить("ОписаниеОбработчиков", ОписаниеОбработчиков);
Настройки.Вставить("ИсключенияПроверки", ИсключенияПроверки);
Настройки.Вставить("ОшибкаКогдаУказанныйМетодНеВызывается", Истина);
Настройки.Вставить("ИсключенияКогдаУказанныйМетодНеВызывается", Новый Соответствие);
ИнтеграцияПодсистемБСП.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
Попытка
ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПроцедураУказана = СтрНайти(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке),
"(" + "ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод" + ")") = 0;
Если ПроцедураУказана Тогда
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
Возврат Настройки;
КонецФункции
// Заполняет имена процедур и функций модуля, которые можно вызывать как по имени,
// как произвольный код, или запускать в фоне.
// Процедуры и функции могут вызываться по имени, как произвольный код, из
// • ОбщегоНазначения.ВыполнитьМетодКонфигурации,
// • ОбщегоНазначения.ВыполнитьМетодОбъекта.
// Процедуры и функции могут запускаться в фоне из
// • ДлительныеОперации.ВыполнитьВФоне,
// • ДлительныеОперации.ВыполнитьФункцию,
// • ДлительныеОперации.ВыполнитьПроцедуру,
// • ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков,
// • ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков,
// • ФоновыеЗадания.Выполнить,
// • РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных,
// • РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеБезРасширений.
//
// Параметры:
// Методы - Соответствие:
// * Ключ - Строка - имя процедуры или функции в модуле.
// * Значение - Неопределено, Булево - если Истина, тогда можно запускать в фоне.
//
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ВключитьКонстантуДоставлятьСерверныеОповещенияБезСистемыВзаимодействия");
Методы.Вставить("ПометитьЗаписиКэшаВерсийНеактуальными");
Методы.Вставить("УстановитьРасписаниеЗапускаСервисовИнтеграции");
Методы.Вставить("ВключитьКонстантуРазрешитьДоступКИнтернетСервисам");
Методы.Вставить("УстановитьКонстантуНеИспользоватьРазделениеПоОбластямДанных");
Методы.Вставить("СравнитьТаблицы", Истина);
Методы.Вставить("ОбновитьДатуПоследнегоИспользованияВерсииРасширений", Истина);
Методы.Вставить("ДобавитьНовуюВерсиюРасширений", Истина);
Методы.Вставить("УстановитьПоследнююВерсиюРасширений", Истина);
Методы.Вставить("ЗаполнитьВсеПараметрыРаботыРасширенийФоновоеЗадание", Истина);
Методы.Вставить("ЗаполнениеПараметровРаботыРасширений", Истина);
Методы.Вставить("УдалениеУстаревшихПараметровРаботыВерсийРасширенийОбработчикЗадания", Истина);
Методы.Вставить("ОбработкаСервисовИнтеграции", Истина);
КонецПроцедуры
// Добавляет показатель производительности в обработчиках события
// ПриДобавленииПараметровРаботыКлиентаПриЗапуске, ПриДобавленииПараметровРаботыКлиента.
//
@@ -2606,6 +2689,56 @@
КонецПроцедуры
// См. ОбщегоНазначенияПереопределяемый.ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод.
Процедура ПриНастройкеПроверкиМетодовВызываемыхКакПроизвольныйКод(Настройки) Экспорт
// Обработчики установки параметров сеанса.
ИменаПроцедур = Новый Соответствие;
Обработчики = Новый Соответствие;
ИнтеграцияПодсистемБСП.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики);
Для Каждого КлючИЗначение Из Обработчики Цикл
ИменаПроцедур.Вставить(КлючИЗначение.Значение);
КонецЦикла;
Обработчики = Новый Соответствие;
ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики);
Для Каждого КлючИЗначение Из Обработчики Цикл
ИменаПроцедур.Вставить(КлючИЗначение.Значение);
КонецЦикла;
ОписаниеОбработчика = Настройки.ОписаниеОбработчиков.Добавить();
ОписаниеОбработчика.ИменаПроцедур = ИменаПроцедур;
ОписаниеОбработчика.ЗаголовокОшибки = НСтр("ru = 'Обработчик установки параметров сеанса ""%1"".'");
// Обработчики регламентных заданий.
ИменаПроцедур = Новый Соответствие;
Для Каждого РегламентноеЗадание Из Метаданные.РегламентныеЗадания Цикл
ИменаПроцедур.Вставить(РегламентноеЗадание.ИмяМетода, Истина);
КонецЦикла;
ОписаниеОбработчика = Настройки.ОписаниеОбработчиков.Добавить();
ОписаниеОбработчика.ИменаПроцедур = ИменаПроцедур;
ОписаниеОбработчика.ЗаголовокОшибки = НСтр("ru = 'Обработчик регламентного задания (ручной запуск) ""%1"".'");
// Исключения.
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбщегоНазначения";
ИсключениеПроверки.ИмяПроцедуры = "ВызватьФункциюКонфигурации";
ИсключениеПроверки.ФрагментСодержания = "Возврат ВыполнитьМетодКонфигурации(ИмяМетода, Параметры, Истина)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.ОбщегоНазначения";
ИсключениеПроверки.ИмяПроцедуры = "ВызватьФункциюОбъекта";
ИсключениеПроверки.ФрагментСодержания = "Возврат ВыполнитьМетодОбъекта(Объект, ИмяМетода, Параметры, Истина)";
ИсключениеПроверки = Настройки.ИсключенияПроверки.Добавить();
ИсключениеПроверки.ПолноеИмяОбъекта = "ОбщийМодуль.СтандартныеПодсистемыСервер";
ИсключениеПроверки.ИмяПроцедуры = "ВыполнитьОбработчикиУстановкиПараметровСеанса";
ИсключениеПроверки.ФрагментСодержания = "ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик, ПараметрыОбработчика)";
КонецПроцедуры
// Формирует текст для вывода пользователю при необходимости динамического обновления.
//
// Параметры:
@@ -5971,6 +6104,179 @@
#КонецОбласти
// Параметры:
// ПолноеИмяМетода - Строка
// ВФоне - Булево
// Объект - Произвольный
// Текст - Произвольный - если указан не Null, тогда установить текст ошибки и не вызывать исключение.
//
Процедура ПроверитьМетодДляВызоваКакПроизвольныйКод(ПолноеИмяМетода, ВФоне = Ложь, Объект = Неопределено, Текст = Null) Экспорт
Если Не ПроверятьВызовыМетодовКакПроизвольныйКод() И Текст = Null Тогда
Возврат;
КонецЕсли;
Если Объект <> Неопределено Тогда
Результат = МетодыРазрешенныеДляВызоваКакПроизвольныйКод(Объект);
ИмяМетода = ПолноеИмяМетода;
Иначе
ЧастиИмени = СтрРазделить(ПолноеИмяМетода, ".", Истина);
Если ЧастиИмени.Количество() = 3 Тогда
ИмяМодуля = ЧастиИмени[0] + "." + ЧастиИмени[1];
ИмяМетода = ЧастиИмени[2];
Иначе
ИмяМодуля = ЧастиИмени[0];
ИмяМетода = ЧастиИмени[1];
КонецЕсли;
Попытка
Результат = СтандартныеПодсистемыПовтИсп.МетодыРазрешенныеДляВызоваКакПроизвольныйКод(ИмяМодуля);
Исключение
Если Текст <> Null И ОбщегоНазначенияКлиентСервер.ЭтоИсключениеСКодомОшибки(ИнформацияОбОшибке(),
"СтандартныеПодсистемы.БазоваяФункциональность.ЭтоОшибкаПолученияОбщегоМодуляПоИмени
|СтандартныеПодсистемы.БазоваяФункциональность.ЭтоОшибкаПолученияМодуляМенеджераПоИмени") Тогда
Возврат;
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
Если ТипЗнч(Результат) = Тип("ФиксированноеСоответствие") Тогда
ИспользованиеМетода = Результат.Получить(ИмяМетода);
Если ВФоне И ИспользованиеМетода = Истина
Или Не ВФоне И ИспользованиеМетода <> Неопределено Тогда
Возврат;
КонецЕсли;
ПроцедураОпределена = Истина;
Иначе
ПроцедураОпределена = Ложь;
КонецЕсли;
ВызовЗапрещен = Текст <> Null Или ЗапрещенВызовЛюбыхМетодовКакПроизвольныйКод(ПроцедураОпределена);
Если Не ВызовЗапрещен И Не ПроцедураОпределена Тогда
УровеньЖурнала = УровеньРегистрацииВызововНеуказанныхМетодовКакПроизвольныйКод();
Если УровеньЖурнала = Неопределено Тогда
Возврат;
КонецЕсли;
Иначе
УровеньЖурнала = УровеньЖурналаРегистрации.Ошибка;
КонецЕсли;
Если Объект <> Неопределено Тогда
ИмяМодуля = Объект.Метаданные().ПолноеИмя() + "." + "МодульОбъекта";
КонецЕсли;
Если ВФоне И ПроцедураОпределена Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Метод ""%1"" не разрешен для запуска в фоне в процедуре ""%2"" модуля ""%3"".'"),
ИмяМетода, "ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод", ИмяМодуля);
ИначеЕсли Не ВФоне И ПроцедураОпределена Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Метод ""%1"" не разрешен для вызова, как произвольный код, в процедуре ""%2"" модуля ""%3"".'"),
ИмяМетода, "ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод", ИмяМодуля);
ИначеЕсли ВФоне И Не ПроцедураОпределена Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Метод ""%1"" не разрешен для запуска в фоне в процедуре ""%2"" модуля ""%3"" (процедура не определена).'"),
ИмяМетода, "ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод", ИмяМодуля);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Метод ""%1"" не разрешен для вызова, как произвольный код, в процедуре ""%2"" модуля ""%3"" (процедура не определена).'"),
ИмяМетода, "ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод", ИмяМодуля);
КонецЕсли;
Если Текст <> Null Тогда
Текст = ТекстОшибки;
Возврат;
КонецЕсли;
Если ВызовЗапрещен Тогда
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
КонецЕсли;
Попытка
ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
КонецПопытки;
ИмяСобытия = НСтр("ru = 'Безопасность.Метод не разрешен для вызова, как произвольный код'",
ОбщегоНазначения.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурнала,, ИмяМодуля + "." + ИмяМетода,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
КонецПроцедуры
// Параметры:
// Модуль - Произвольный - ссылка на общий модуль, модуль менеджера, объект.
//
// Возвращаемое значение:
// ФиксированноеСоответствие, Неопределено
//
Функция МетодыРазрешенныеДляВызоваКакПроизвольныйКод(Модуль) Экспорт
Методы = Новый Соответствие;
Попытка
Модуль.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПроцедураНеУказана = СтрНайти(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке),
"(" + "ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод" + ")") > 0;
Если ПроцедураНеУказана Тогда
Возврат Неопределено;
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Результат = Новый Соответствие;
Для Каждого КлючИЗначение Из Методы Цикл
Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение = Истина);
КонецЦикла;
Возврат Новый ФиксированноеСоответствие(Результат);
КонецФункции
// Включает проверку вызовов методов в режиме 1С:Предприятие и в отчете ПроверкаВнедренияБСП.
// Можно переопределить с помощью расширения для обнаружения мест, требующих настройки.
//
// Возвращаемое значение:
// Булево
//
Функция ПроверятьВызовыМетодовКакПроизвольныйКод() Экспорт
Возврат Ложь;
КонецФункции
// Позволяет блокировать вызов методов, которые не разрешены для вызова, как произвольный код.
// Требуется указать Истина в функции ПроверятьВызовыМетодовКакПроизвольныйКод.
//
// Параметры:
// ПроцедураОпределена - Булево - если Ложь, тогда в модуле еще не определена
// процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод, что позволяет
// включить запрет только тогда, когда процедура определена в модуле, а не безусловно.
//
// Возвращаемое значение:
// Булево
//
Функция ЗапрещенВызовЛюбыхМетодовКакПроизвольныйКод(ПроцедураОпределена)
Возврат Ложь;
КонецФункции
// Возвращает уровень журнала регистрации, если требуется регистрировать вызываемые методы,
// когда не определена процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод.
// Можно переопределить с помощью расширения для обнаружения случаев (путем автоматизированного
// тестирования), которые нельзя обнаружить статическим анализом кода с помощью
// отчета ПроверкаВнедренияБСП.erf (смотри ПроверятьВызовыМетодовКакПроизвольныйКод).
//
// Возвращаемое значение:
// УровеньЖурналаРегистрации, Неопределено
//
Функция УровеньРегистрацииВызововНеуказанныхМетодовКакПроизвольныйКод()
Возврат УровеньЖурналаРегистрации.Ошибка;
КонецФункции
#КонецОбласти
#КонецОбласти
@@ -389,4 +389,11 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("СформироватьСписокТекущихДелПользователя", Истина);
КонецПроцедуры
#КонецОбласти
@@ -1759,4 +1759,18 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ВключитьУдалениеПомеченныхОбъектов");
Методы.Вставить("УстановитьРасписаниеУдаленияПомеченных");
Методы.Вставить("ПомеченныеНаУдаление", Истина);
Методы.Вставить("ВыполнитьОбработкуПричинНеудаления", Истина);
Методы.Вставить("УдалитьПомеченныеОбъекты", Истина);
Методы.Вставить("КонтрольУдаленияПомеченныхОбъектов", Истина);
Методы.Вставить("УдалениеПомеченныхПоРасписанию", Истина);
КонецПроцедуры
#КонецОбласти
@@ -2784,12 +2784,6 @@
// Конец ТехнологияСервиса.ПользователиСервиса
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Требуется в файловой ИБ для предотвращения взаимоблокировок связанных с работой файловой СУБД,
// в случаях, когда выполняется чтение с ограничением (RLS) в транзакции или перед записью
// до срабатывания подписки на событие ПроверитьДоступПередЗаписью.
@@ -2825,6 +2819,8 @@
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Дополнение к процедуре ЗаполнитьНаборыЗначенийДоступа.
@@ -13188,8 +13188,9 @@
Формат(ТекущийСеанс.НомерСеанса, "ЧГ="),
Формат(ТекущийСеанс.НачалоСеанса, "ДЛФ=DT")) + ")";
// Имя процедуры должно быть, как указано в функции ИмяМетодаЗаданияОбновленияДоступа.
ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(
ИмяМетодаЗаданияОбновленияДоступа(), ПараметрыЗадания,, НаименованиеЗадания);
Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.ИмяМетода, ПараметрыЗадания,, НаименованиеЗадания);
Результат.ИдентификаторФоновогоЗадания = ФоновоеЗадание.УникальныйИдентификатор;
@@ -15764,7 +15765,9 @@
СвободныйПоток = НовыйПоток();
Параметры = Новый Массив;
Параметры.Добавить(Контекст.ОписаниеОсновногоСеанса);
СвободныйПоток.ФоновоеЗадание = ФоновыеЗадания.Выполнить(ИмяМетодаПотокаОбновленияДоступа(), Параметры,,
// Имя процедуры должно быть, как указано в функции ИмяМетодаПотокаОбновленияДоступа.
СвободныйПоток.ФоновоеЗадание = ФоновыеЗадания.Выполнить(
"УправлениеДоступомСлужебный.ВыполнитьОбновлениеДоступаСпискаВФоне", Параметры,,
НСтр("ru = 'Управление доступом: Поток обновления доступа на уровне записей'",
ОбщегоНазначения.КодОсновногоЯзыка()));
СвободныйПоток.ИдентификаторПотока = СвободныйПоток.ФоновоеЗадание.УникальныйИдентификатор;
@@ -24626,7 +24629,19 @@
ИначеЕсли УточнениеСравнения.Ключ = "ПустаяСсылка" Тогда
Если Значение = Перечисления.ДополнительныеЗначенияДоступа.ПустаяСсылкаЛюбогоТипа
Или Значение.Пустая() Тогда
ТекущийРезультат = УточнениеСравнения.Значение;
ЗначенияОдногоТипа = Null;
Если Условие.Узел = "ЗначениеРазрешено" Тогда
Если Контекст.ЗначенияГруппыДоступа = Неопределено Тогда
ЗначенияОдногоТипа = Неопределено;
Иначе
ЗначенияОдногоТипа = Контекст.ЗначенияГруппыДоступа.Получить(ТипЗнч(Значение));
КонецЕсли;
КонецЕсли;
Если ЗначенияОдногоТипа = Неопределено Тогда
ТекущийРезультат = "Пусто";
Иначе
ТекущийРезультат = УточнениеСравнения.Значение;
КонецЕсли;
Прервать;
КонецЕсли;
ИначеЕсли УточнениеСравнения.Ключ = ТипЗнч(Значение) Тогда
@@ -27850,7 +27865,11 @@
ОбщегоНазначения.КодОсновногоЯзыка()),
Формат(ТекущийСеанс.НомерСеанса, "ЧГ="),
Формат(ТекущийСеанс.НачалоСеанса, "ДЛФ=DT"));
ФоновоеЗадание = ФоновыеЗадания.Выполнить(ИмяПроцедуры, ПараметрыПроцедуры,, НаименованиеЗадания);
// Имя процедуры должно быть, как указано
// в функции ИмяПроцедурыЗаданияЗаписиНовойВерсииПараметровОграниченияДоступа.
ФоновоеЗадание = ФоновыеЗадания.Выполнить(
"УправлениеДоступомСлужебный.ЗаписатьНовуюВерсиюПараметровОграниченияДоступаВФоне",
ПараметрыПроцедуры,, НаименованиеЗадания);
ФоновоеЗадание = ФоновоеЗадание.ОжидатьЗавершенияВыполнения(60);
Результат = ПолучитьИзВременногоХранилища(АдресРезультата);
ЗаголовокОшибки = НСтр("ru = 'Не удалось записать новую версию параметров ограничения доступа по причине:'");
@@ -28535,7 +28554,7 @@
// Число нужно увеличивать при внесении изменений в состав параметров кэша
// (в том числе при изменении версии шаблонов).
Возврат "28.2" + ВерсияПеревода();
Возврат "29.1" + ВерсияПеревода();
КонецФункции
@@ -47358,4 +47377,23 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации");
Методы.Вставить("ОбновитьДанныеПрофиляОткрытиеВнешнихОтчетовИОбработок");
Методы.Вставить("ЗаполнитьОбработчикиРазделенныхДанных");
Методы.Вставить("ЗаписатьНовуюВерсиюПараметровОграниченияДоступаВФоне", Истина);
Методы.Вставить("ОбновитьПрогрессВФоне", Истина);
Методы.Вставить("ОбновлениеДоступаНаУровнеЗаписей", Истина);
Методы.Вставить("ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания", Истина);
Методы.Вставить("ВключитьРегламентноеЗаданиеОбновленияДоступа", Истина);
Методы.Вставить("ОтключитьРегламентноеЗаданиеОбновленияДоступа", Истина);
Методы.Вставить("ЗаписатьПланированиеОбновленияПараметровОграниченияДоступа", Истина);
Методы.Вставить("ОбновитьВспомогательныеДанныеГруппДоступа", Истина);
Методы.Вставить("ВыполнитьОбновлениеДоступаСпискаВФоне", Истина);
КонецПроцедуры
#КонецОбласти
@@ -464,4 +464,14 @@
#КонецОбласти
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ОбновитьИспользованиеРегламентныхЗаданий");
Методы.Вставить("ОбновлениеАгрегатовОбработчикЗадания", Истина);
Методы.Вставить("ПерестроениеАгрегатовОбработчикЗадания", Истина);
Методы.Вставить("УстановкаПериодаРассчитанныхИтоговОбработчикЗадания", Истина);
КонецПроцедуры
#КонецОбласти
@@ -4572,9 +4572,11 @@
КонецЕсли;
КонецЕсли;
Иначе
ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенногоВида;
ИмяВида = ?(ЗначениеЗаполнено(ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных),
ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных, ОбъектКонтактнойИнформации.ИмяПредопределенногоВида);
ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + ИмяВида;
Если ЕстьПолеКомментарий Тогда
ОбъектКонтактнойИнформации.ИмяРеквизитаКомментарий = "КомментарийКонтактнаяИнформацияПоле" + ОбъектКонтактнойИнформации.ИмяПредопределенногоВида;
ОбъектКонтактнойИнформации.ИмяРеквизитаКомментарий = "КомментарийКонтактнаяИнформацияПоле" + ИмяВида;
КонецЕсли;
СозданныеРеквизиты.Удалить(СозданныйРеквизит);
КонецЕсли;
@@ -925,6 +925,19 @@
ТекстПредставления = РезультатЗакрытия.Представление;
Комментарий = РезультатЗакрытия.Комментарий;
Если Форма.ИмяФормы = "Справочник.Пользователи.Форма.ФормаЭлемента" Тогда
Оповещение = Новый ОписаниеОповещения("КонтактнаяИнформацияНачалоВыбораЗавершение",
ДополнительныеПараметры.Форма);
ТекущийРезультат = Новый Структура;
ТекущийРезультат.Вставить("Элемент", Элемент);
ТекущийРезультат.Вставить("НовоеЗначение", ТекстПредставления);
ТекущийРезультат.Вставить("Отказ", Ложь);
ВыполнитьОбработкуОповещения(Оповещение, ТекущийРезультат);
Если ТекущийРезультат.Отказ Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если ДанныеНаФорме.Свойство("ХранитьИсториюИзменений") И ДанныеНаФорме.ХранитьИсториюИзменений Тогда
КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = ДанныеЗаполнения.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов;
Отбор = Новый Структура("Вид", ДанныеНаФорме.Вид);
@@ -3274,4 +3274,17 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("УстановкаПараметровСеанса");
Методы.Вставить("УстановитьЗначениеПризнакаИспользуется");
Методы.Вставить("ОбновитьНастройкуДобавочногоНомераТелефона");
Методы.Вставить("ОбновитьСуществующиеСтраныМира");
Методы.Вставить("ПроверитьВидыКонтактнойИнформации");
Методы.Вставить("ИсправитьВидыКонтактнойИнформацииВФоне", Истина);
Методы.Вставить("ИсправлениеУстаревшихАдресов", Истина);
КонецПроцедуры
#КонецОбласти
@@ -4409,7 +4409,19 @@
// Предполагается одна печатная форма, но для обратной совместимости принимается вся коллекция.
Для Каждого ВременнаяПечатнаяФорма Из ВременнаяКоллекцияДляОднойПечатнойФормы Цикл
Если НЕ ВременнаяПечатнаяФорма.ОфисныеДокументы = Неопределено Тогда
Если ТипЗнч(ВременнаяПечатнаяФорма.ОфисныеДокументы) = Тип("Соответствие") Тогда
КоличествоФайлов = 0;
Для Каждого ОфисныйДокумент Из ВременнаяПечатнаяФорма.ОфисныеДокументы Цикл
Если ЭтоАдресВременногоХранилища(ОфисныйДокумент.Ключ) Тогда
КоличествоФайлов = КоличествоФайлов + 1;
КонецЕсли;
КонецЦикла;
Если КоличествоФайлов = 0 Тогда
ВременнаяПечатнаяФорма.ОфисныеДокументы = Неопределено;
КонецЕсли;
ВременнаяПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
КонецЕсли;
@@ -8183,4 +8195,12 @@
КонецФункции
// См. СтандартныеПодсистемыСервер.ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод
Процедура ПриОпределенииМетодовРазрешенныхДляВызоваКакПроизвольныйКод(Методы) Экспорт
Методы.Вставить("ДобавитьРольРедактированиеПечатныхФормВПрофилиСБазовымиПравами");
Методы.Вставить("СформироватьПечатныеФормыВФоне", Истина);
КонецПроцедуры
#КонецОбласти
Loaded 100 of 204 files, more files were not shown because too many files have changed in this diff. Show more