diff --git "a/docs/images/\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262.png" "b/docs/images/\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262.png"
new file mode 100644
index 00000000..cf3a149c
Binary files /dev/null and "b/docs/images/\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262.png" differ
diff --git "a/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md" "b/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md"
index 06d33871..e29a5f1e 100644
--- "a/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md"
+++ "b/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md"
@@ -19,6 +19,71 @@
КонецПроцедуры
```
+## Уникальность предопределенных элементов
+
+Для обеспечения целостности данных и управления предопределёнными значениями реализован механизм контроля изменений. Он основан на вычислении хеша с использованием алгоритма **MD5**, учёте пометки на удаление, ручных изменений и проверке уникальности идентификаторов.
+
+### Основные этапы проверки
+1. **Первоначальная проверка уникальности идентификаторов:**
+ - На этапе инициализации идентификаторы всех элементов проверяются на уникальность.
+ - Если обнаружены коллизии (дублирующиеся идентификаторы), будет выдано сообщение об ошибке, и такие элементы будут пропущены.
+2. **Хеш и состояние элемента:**
+ - Хеш вычисляется для каждого элемента и сохраняется в регистре **состояний предопределённых элементов**.
+ - **Ключи хеша:**
+ - ИдентификаторНастройки
+ - Наименование
+ - Родитель (если включена иерархия)
+ - ЭтоГруппа (если включена иерархия групп и элементов)
+ - Изменяемые реквизиты при расчете не учитываются
+ - Остальные ключи опционально, зависят от типа объекта метаданных (см. [область Структуры колонок таблиц](../src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#247-343) и [исключаемые поля для расчета хеша](../src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#345-381))
+ - Если элемент изменяется в пользовательском режиме, устанавливается флаг **ручное изменение:**
+ - Такой элемент исключается из проверки хеша при последующих обновлениях.
+3. **Обработка элементов с пометкой на удаление:**
+ - Если элемент помечен на удаление и его хеш отличается от нового:
+ - Значения элемента обновляются данными из кода.
+ - Пометка на удаление снимается автоматически.
+ - Если элемент не помечен на удаление и его хеш отличается от нового:
+ - Формируется уведомление о конфликте для дальнейшего разрешения.
+
+**Пример решения конфликтов при создании/обновлении предопределенных элементов**
+
+![image](images/ФормаРазрешенияКонфликтов.png)
+
+Виды ошибок:
+- Коллизии идентификаторов
+ - Эта ошибка не решается в пользовательском режиме, для ее устранения необходимо перейти в общий модуль ``пбп_ПредопределенныеЗначенияПереопределяемый`` и исправить конфликтующие элементы.
+- Расхождение элемента с кодом
+ - Для элемента установлен флаг обновления: Элемент будет обновлен данными из программного кода, а также обновится хеш элемента в регистре сведений **``пбп_СостоянияПредопределенныхЭлементов``**.
+ - Для элемента не установлен флаг обновления: Элемент не будет обновлен. В записи регистра сведений **``пбп_СостоянияПредопределенныхЭлементов``** будет установлен флаг **``Ручное изменение``**, указывающий на то, что элемент был изменен вручную и не подлежит автоматическому обновлению в будущем.
+
+ **Примечание** - Флаг ``Заменить элементом из кода`` активен только для элементов с видом ошибки ``Расхождение элемента с кодом``
+
+## Автоматическое создание новых элементов
+
+Для автоматизации процесса заполнения предопределенных элементов необходимо модифицировать/добавить в расширение общий модуль **``ОбщегоНазначенияПереопределяемый``**. В процедуре **``ПриДобавленииСерверныхОповещений``** требуется добавить новое серверное оповещение.
+
+**Пример кода для подключения через расширение**
+
+```BSL
+&После("ПриДобавленииСерверныхОповещений")
+Процедура пбп_ПриДобавленииСерверныхОповещений(Оповещения)
+
+ // Создаем новое серверное оповещение для предопределённых значений
+ Оповещение = СерверныеОповещения.НовоеСерверноеОповещение("пбп_ПредопределенныеЗначения");
+
+ // Указываем модуль для получения и отправки сообщений
+ Оповещение.ИмяМодуляОтправки = ""; // В данном случае используется рег. задание для отправки
+ Оповещение.ИмяМодуляПолучения = "пбп_ПредопределенныеЗначенияСлужебныйКлиент";
+
+ // Настраиваем периодичность проверки (в секундах)
+ Оповещение.ПериодПроверки = 300;
+
+ // Добавляем новое оповещение в список оповещений
+ Оповещения.Вставить(Оповещение.Имя, Оповещение);
+
+КонецПроцедуры
+```
+
## Добавление новых элементов
В модуле **пбп_ПредопределенныеЗначенияПереопределяемый** значения добавляются через метод **Добавить()** коллекции **Результат**, которая представляет собой таблицу предопределённых значений. Каждая новая запись в этой таблице может быть настроена как группа путём установки свойства ЭтоГруппа в значение Истина.
diff --git "a/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form.xml" "b/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form.xml"
index f968c6cc..0d24e4b4 100644
--- "a/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form.xml"
+++ "b/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form.xml"
@@ -116,6 +116,14 @@
+
+ ТаблицаКонфликтов.Ошибка
+ true
+ EnterOnInput
+ true
+
+
+
@@ -176,6 +184,17 @@
xs:boolean
+
+
+
+ ru
+ Ошибка
+
+
+
+ cfg:EnumRef.пбп_ВидыОшибокПредопределенныхЭлементов
+
+
diff --git "a/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form/Module.bsl" "b/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form/Module.bsl"
index 553131be..3ba335d0 100644
--- "a/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form/Module.bsl"
+++ "b/src/cf/CommonForms/\320\277\320\261\320\277_\320\244\320\276\321\200\320\274\320\260\320\240\320\260\320\267\321\200\320\265\321\210\320\265\320\275\320\270\321\217\320\232\320\276\320\275\321\204\320\273\320\270\320\272\321\202\320\276\320\262\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Form/Module.bsl"
@@ -14,6 +14,8 @@
ОбработатьКонфликтныеЭлементы(АдресТаблицы);
КонецЕсли;
+ УстановитьУсловноеОформление();
+
КонецПроцедуры
&НаКлиенте
@@ -76,13 +78,14 @@
ДобавляемыеРеквизиты = Новый Структура;
Для Каждого Колонка Из Таблица.Колонки Цикл
Если ИсключаемыеПоля.Свойство(Колонка.Имя)
- Или СтрНачинаетсяС(Колонка.Имя, "Служеб_") Тогда
+ Или СтрНачинаетсяС(Колонка.Имя, "Служебный_") Тогда
Продолжить;
КонецЕсли;
ДобавляемыеРеквизиты.Вставить(ПрефиксКод + Колонка.Имя, Колонка.ТипЗначения);
ДобавляемыеРеквизиты.Вставить(ПрефиксБаза + Колонка.Имя, Колонка.ТипЗначения);
Поля.Добавить(Колонка.Имя, Колонка.Имя);
КонецЦикла;
+
пбп_РаботаСФормами.СоздатьРеквизитыТаблицы(ЭтотОбъект, "ТаблицаКонфликтов", ДобавляемыеРеквизиты);
ШиринаКолонки = 5;
@@ -121,7 +124,7 @@
МенеджерОбъекта = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ИмяФормыВладельца);
- СписокПредопределенных = Таблица.ВыгрузитьКолонку("Служеб_ПредопределенныйЭлемент");
+ СписокПредопределенных = Таблица.ВыгрузитьКолонку("Служебный_ПредопределенныйЭлемент");
Запрос = Новый Запрос;
Запрос.Текст =
@@ -150,14 +153,18 @@
нСтрока[ПрефиксКод + КлючЗначение.Ключ] = КлючЗначение.Значение;
КонецЦикла;
+ Если Строка.Служебный_ДублированиеИдентификаторов Тогда
+ нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов;
+ Иначе
+ нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.РасхождениеЭлементаСКодом;
+ КонецЕсли;
+
Выборка.Сбросить();
- Если Выборка.НайтиСледующий(Строка.Служеб_ПредопределенныйЭлемент, "Ссылка") Тогда
+ Если Выборка.НайтиСледующий(Строка.Служебный_ПредопределенныйЭлемент, "Ссылка") Тогда
ЗаполнитьЗначенияСвойств(БазоваяСтруктура, Выборка);
Для Каждого КлючЗначение Из БазоваяСтруктура Цикл
нСтрока[ПрефиксБаза + КлючЗначение.Ключ] = КлючЗначение.Значение;
КонецЦикла;
- Иначе
- СообщитьОбОтсутствииЭлемента(Строка.ИдентификаторНастройки);
КонецЕсли;
КонецЦикла;
@@ -181,13 +188,23 @@
Таблица.Индексы.Добавить(ИдентификаторНастройки);
Для Каждого Строка Из ТаблицаКонфликтов Цикл
Стр = Таблица.Найти(Строка[ПрефиксКод + ИдентификаторНастройки], ИдентификаторНастройки);
+
+ Если Строка.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов Тогда
+ Таблица.Удалить(Стр);
+ Продолжить;
+ КонецЕсли;
+
Если Строка.ЗаменитьЭлементомИзКода Тогда
- Стр.Служеб_ОбновитьЭлемент = Истина;
+ Стр.Служебный_ОбновитьЭлемент = Истина;
Иначе
- Стр.Служеб_УстановитьФлагРучноеИзменение = Истина;
+ Стр.Служебный_УстановитьФлагРучноеИзменение = Истина;
КонецЕсли;
КонецЦикла;
+ Если Не ЗначениеЗаполнено(Таблица) Тогда
+ Возврат;
+ КонецЕсли;
+
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ИмяФормыВладельца);
ДопПараметры = пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов(
Таблица, Менеджер);
@@ -199,24 +216,31 @@
Процедура ЗаполнитьОтметки(ЗначениеОтметки)
Модифицированность = Истина;
Для Каждого Строка Из ТаблицаКонфликтов Цикл
+ Если Строка.Ошибка =
+ ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов") Тогда
+ Продолжить;
+ КонецЕсли;
Строка.ЗаменитьЭлементомИзКода = ЗначениеОтметки;
КонецЦикла;
КонецПроцедуры
-#Область СообщенияОСобытии
-
&НаСервере
-Процедура СообщитьОбОтсутствииЭлемента(Идентификатор)
+Процедура УстановитьУсловноеОформление()
+
+ УсловноеОформление.Элементы.Очистить();
- ТекстСообщения = НСтр("ru = 'Элемент '%1' отсутствуют в базе!';
- |en = 'The element '%1' is missing from the database!'");
- ТекстСообщения = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
- ТекстСообщения,
- Идентификатор);
- пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ТекстСообщения);
+ Элемент = УсловноеОформление.Элементы.Добавить();
+
+ ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
+ ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонфликтовЗаменитьЭлементомИзКода.Имя);
+
+ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
+ ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонфликтов.Ошибка");
+ ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
+ ОтборЭлемента.ПравоеЗначение = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов;
+
+ Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
КонецПроцедуры
#КонецОбласти
-
-#КонецОбласти
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\234\320\265\321\202\320\276\320\264\321\213\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\321\205\320\227\320\260\320\264\320\260\320\275\320\270\320\271\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\234\320\265\321\202\320\276\320\264\321\213\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\321\205\320\227\320\260\320\264\320\260\320\275\320\270\320\271\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl"
index 254cc3db..bf49e0d4 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\234\320\265\321\202\320\276\320\264\321\213\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\321\205\320\227\320\260\320\264\320\260\320\275\320\270\320\271\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\234\320\265\321\202\320\276\320\264\321\213\320\240\320\265\320\263\320\273\320\260\320\274\320\265\320\275\321\202\320\275\321\213\321\205\320\227\320\260\320\264\320\260\320\275\320\270\320\271\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl"
@@ -48,4 +48,15 @@
КонецПроцедуры
+// Заполнение предопределенных элементов, с выводом серверного оповещения при возникновении конфликтов.
+//
+Процедура ЗаполнениеПредопределенныхЭлементов() Экспорт
+
+ пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания(
+ Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов);
+
+ пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина);
+
+КонецПроцедуры
+
#КонецОбласти
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
index 383956e3..4ffe0cac 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
@@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
- Описание.Версия = "1.0.3.12";
+ Описание.Версия = "1.0.4.13";
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
@@ -126,14 +126,7 @@
Процедура НачальноеЗаполнениеПредопределенныхЭлементов() Экспорт
- Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();
-
- Для Каждого Тип Из Типы Цикл
- ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
- Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
-
- пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер);
- КонецЦикла;
+ пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов();
КонецПроцедуры
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl"
index c3b0d306..3d0c973d 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl"
@@ -33,8 +33,8 @@
ТЗПредопределенныхЗначений = пбп_ПредопределенныеЗначенияПереопределяемый
.ТаблицаПредопределенныхЭлементов(МенеджерОбъекта);
- Если ТЗПредопределенныхЗначений = Неопределено Тогда
- Возврат Неопределено;
+ Если Не ЗначениеЗаполнено(ТЗПредопределенныхЗначений) Тогда
+ Возврат Новый ТаблицаЗначений;
КонецЕсли;
ТаблицаКонфликтныхЭлементов = ОбработатьПредопределенныеЗначения(ТЗПредопределенныхЗначений, МенеджерОбъекта);
@@ -62,7 +62,7 @@
ЗаполнитьРодителейЭлементов(ТаблицаПредопределенных, Параметры);
ЗаполнитьКонтрольныеСуммыТаблицы(ТаблицаПредопределенных, Параметры);
- ТаблицаКонфликтныхЭлементов = УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, Параметры.ПолноеИмя);
+ ТаблицаКонфликтныхЭлементов = УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, Параметры);
СоздатьОбновитьПредопределенныеЗначения(ТаблицаПредопределенных, Параметры);
Возврат ТаблицаКонфликтныхЭлементов;
@@ -129,7 +129,7 @@
Для Каждого Поле Из Поля Цикл
Если ИсключаемыеПоля.Свойство(Поле)
- Или СтрНачинаетсяС(Поле, "Служеб_") Тогда
+ Или СтрНачинаетсяС(Поле, "Служебный_") Тогда
Продолжить;
КонецЕсли;
мКлючи.Добавить(Поле);
@@ -245,24 +245,25 @@
//
// Параметры:
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
-// ПолноеИмяОбъекта - Строка - Полное имя объекта метаданных.
+// ДополнительныеПараметры - Структура - см.пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов
//
// Возвращаемое значение:
// ТаблицаЗначений - Таблица с конфликтными элементами
//
-Функция УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, ПолноеИмяОбъекта = "") Экспорт
+Функция УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт
- ТаблицаКонфликтныхЭлементов = ТаблицаПредопределенных.СкопироватьКолонки();
+ ТаблицаКонфликтныхЭлементов = пбп_ПредопределенныеЗначенияПереопределяемый
+ .ТаблицаКонфликтныхЭлементов(ДополнительныеПараметры.Менеджер, ТаблицаПредопределенных.СкопироватьКолонки());
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
Возврат ТаблицаКонфликтныхЭлементов;
КонецЕсли;
- ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ПолноеИмяОбъекта);
+ ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ДополнительныеПараметры.ПолноеИмя);
ТаблицаПредопределенных.Сортировать("ЭтоГруппа УБЫВ, УровеньИерархии");
- ОбработатьДублиИдентификаторов(ТаблицаПредопределенных);
+ ОбработатьДублиИдентификаторов(ТаблицаПредопределенных, ТаблицаКонфликтныхЭлементов);
ИдентификаторыНастроек = ТаблицаПредопределенных.ВыгрузитьКолонку("ИдентификаторНастройки");
@@ -327,18 +328,19 @@
Родители = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл
- СтрокаТаблицы.Служеб_Иерархический = ДополнительныеПараметры.Иерархический;
- СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
+ СтрокаТаблицы.Служебный_Иерархический = ДополнительныеПараметры.Иерархический;
+ СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
- ЭтоГруппа = СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа;
+ ЭтоГруппа = СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа;
КлючиХеша = ?(ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент);
- Если СтрокаТаблицы.Служеб_ОбновитьЭлемент Тогда
+ Если СтрокаТаблицы.Служебный_ОбновитьЭлемент Тогда
ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
- ИначеЕсли СтрокаТаблицы.Служеб_УстановитьФлагРучноеИзменение Тогда
- УстановитьФлагРучноеИзменение(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент);
- ИначеЕсли СтрокаТаблицы.Служеб_СоздатьЗаписьРегистра Тогда
- СоздатьЗаписьСостоянияПредопределенногоЭлемента(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент, ЭтоГруппа, КлючиХеша);
+ ИначеЕсли СтрокаТаблицы.Служебный_УстановитьФлагРучноеИзменение Тогда
+ УстановитьФлагРучноеИзменение(СтрокаТаблицы.Служебный_ПредопределенныйЭлемент);
+ ИначеЕсли СтрокаТаблицы.Служебный_СоздатьЗаписьРегистра Тогда
+ СоздатьЗаписьСостоянияПредопределенногоЭлемента(
+ СтрокаТаблицы.Служебный_ПредопределенныйЭлемент, ЭтоГруппа, КлючиХеша);
Иначе
СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
КонецЕсли;
@@ -371,13 +373,55 @@
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.СоздатьЗаписьРегистра(Объект, ЭтоГруппа, КлючиХеша);
КонецПроцедуры
+// Заполнение предопределенных элементов, с возможностью серверного оповещения
+// о существующих конфликтах при создании элементов.
+//
+// Параметры:
+// ОтправитьСерверноеОповещение - Булево - В случае необходимости оповещения пользователей, установить флаг в Истину.
+//
+Процедура ЗаполнениеПредопределенныхЭлементов(ОтправитьСерверноеОповещение = Ложь) Экспорт
+
+ Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();
+
+ Для Каждого Тип Из Типы Цикл
+ ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
+ ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
+
+ Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
+
+ Если Не ОтправитьСерверноеОповещение Тогда
+ ИнициализироватьПредопределенныеЗначения(Менеджер);
+ Продолжить;
+ КонецЕсли;
+
+ ПредставлениеОбъекта = ?(ПустаяСтрока(ОбъектМетаданных.ПредставлениеОбъекта),
+ ОбъектМетаданных.Синоним,
+ ОбъектМетаданных.ПредставлениеОбъекта);
+
+ ТаблицаКонфликтныхЭлементов = ИнициализироватьПредопределенныеЗначения(Менеджер);
+
+ Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда
+ Результат = Новый Структура;
+ Результат.Вставить("ИмяОбъектаМетаданных", ПолноеИмя);
+ Результат.Вставить("ПредставлениеОбъекта", ПредставлениеОбъекта);
+
+ пбп_СерверныеОповещенияСлужебный.ОтправитьСерверноеОповещение(
+ "пбп_ПредопределенныеЗначения",
+ Результат,
+ Неопределено);
+ КонецЕсли;
+ КонецЦикла;
+
+КонецПроцедуры
+
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители)
- Если СтрокаТаблицы.Служеб_Иерархический И СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа Тогда
+ Если СтрокаТаблицы.Служебный_Иерархический И СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов
+ И СтрокаТаблицы.ЭтоГруппа Тогда
СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
Иначе
СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
@@ -412,9 +456,9 @@
НовыйЭлемент = МенеджерОбъекта.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, , "Родитель");
- ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент, СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов);
+ ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент, СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов);
- Если СтрокаТаблицы.Служеб_Иерархический И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
+ Если СтрокаТаблицы.Служебный_Иерархический И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
Родитель = ?(ЗначениеЗаполнено(СтрокаТаблицы.Родитель),
СтрокаТаблицы.Родитель,
Родители[СтрокаТаблицы.ИдентификаторРодитель]);
@@ -427,7 +471,7 @@
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;
- Если СтрокаТаблицы.Служеб_Иерархический И Не СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов Тогда
+ Если СтрокаТаблицы.Служебный_Иерархический И Не СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов Тогда
Родители.Вставить(СтрокаТаблицы.ИдентификаторНастройки, НовыйЭлемент.Ссылка);
КонецЕсли;
@@ -435,17 +479,17 @@
Процедура ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители)
- Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент) Тогда
+ Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служебный_ПредопределенныйЭлемент) Тогда
Возврат;
КонецЕсли;
- Элемент = СтрокаТаблицы.Служеб_ПредопределенныйЭлемент.ПолучитьОбъект();
+ Элемент = СтрокаТаблицы.Служебный_ПредопределенныйЭлемент.ПолучитьОбъект();
Если Элемент.ПометкаУдаления Тогда
Элемент.УстановитьПометкуУдаления(Ложь, Ложь);
КонецЕсли;
РодительОтличается = Ложь;
- Если СтрокаТаблицы.Служеб_Иерархический
+ Если СтрокаТаблицы.Служебный_Иерархический
И (Не ПустаяСтрока(СтрокаТаблицы.ИдентификаторРодитель) Или ЗначениеЗаполнено(Элемент.Родитель)) Тогда
НовыйРодитель = ?(ЗначениеЗаполнено(СтрокаТаблицы.Родитель),
СтрокаТаблицы.Родитель,
@@ -456,10 +500,10 @@
Элемент.Родитель = НовыйРодитель;
КонецЕсли;
- Свойства = ЗаполняемыеИсключаемыеСвойства(СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов, Элемент.ЭтоГруппа);
+ Свойства = ЗаполняемыеИсключаемыеСвойства(СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов, Элемент.ЭтоГруппа);
ЗаполнитьЗначенияСвойств(Элемент, СтрокаТаблицы, Свойства.СписокСвойств, Свойства.ИсключаяСвойства);
- ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент, СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов);
+ ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент, СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов);
Попытка
ЗаписатьЭлементИСвязанныеДанные(Элемент, КлючиХеша, Истина);
@@ -604,12 +648,12 @@
КонецФункции
Процедура ОбработатьСтроку(Строка, Выборка, ТаблицаКонфликтныхЭлементов, СтрокиДляУдаления)
- Строка.Служеб_ПредопределенныйЭлемент = Выборка.Ссылка;
+ Строка.Служебный_ПредопределенныйЭлемент = Выборка.Ссылка;
Если Выборка.ХешОтсутствует Тогда
- Строка.Служеб_СоздатьЗаписьРегистра = Истина;
+ Строка.Служебный_СоздатьЗаписьРегистра = Истина;
ИначеЕсли Выборка.ПометкаУдаления Тогда
- Строка.Служеб_ОбновитьЭлемент = Истина;
+ Строка.Служебный_ОбновитьЭлемент = Истина;
Иначе
СтрокиДляУдаления.Добавить(Строка);
СтрокаКонфликт = ТаблицаКонфликтныхЭлементов.Добавить();
@@ -631,40 +675,41 @@
КонецФункции
-Процедура ОбработатьДублиИдентификаторов(Таблица)
+Процедура ОбработатьДублиИдентификаторов(ТаблицаПредопределенных, ТаблицаКонфликтныхЭлементов)
Просмотренные = Новый Соответствие;
СтрокиДляУдаления = Новый Массив;
- Для Каждого Строка Из Таблица Цикл
+ Для Каждого Строка Из ТаблицаПредопределенных Цикл
Если ПустаяСтрока(Строка.ИдентификаторНастройки) Тогда
+ СтрокиДляУдаления.Добавить(Строка);
+
СообщитьОНезаполненностиИдентификатора(Строка.Наименование);
Продолжить;
КонецЕсли;
- ИндексСтроки = Таблица.Индекс(Строка);
-
- Стр = Просмотренные[Строка.ИдентификаторНастройки];
- Если Стр <> Неопределено Тогда
- Если Стр.Первый Тогда
- СтрокиДляУдаления.Добавить(Таблица[Стр.Индекс]);
- КонецЕсли;
-
+ Если Просмотренные[Строка.ИдентификаторНастройки] <> Неопределено Тогда
+ Просмотренные[Строка.ИдентификаторНастройки] = Просмотренные[Строка.ИдентификаторНастройки] + 1;
+ Иначе
+ Просмотренные.Вставить(Строка.ИдентификаторНастройки, 1);
+ КонецЕсли;
+ КонецЦикла;
+
+ Для Каждого Строка Из ТаблицаПредопределенных Цикл
+ Количество = Просмотренные[Строка.ИдентификаторНастройки];
+ Если Количество <> Неопределено И Количество > 1 Тогда
СтрокиДляУдаления.Добавить(Строка);
- Стр.Индекс = ИндексСтроки;
- Стр.Первый = Ложь;
+
+ СтрокаКонфликт = ТаблицаКонфликтныхЭлементов.Добавить();
+ ЗаполнитьЗначенияСвойств(СтрокаКонфликт, Строка);
+ СтрокаКонфликт.Служебный_ДублированиеИдентификаторов = Истина;
СообщитьОДублированииИдентификаторов(Строка.ИдентификаторНастройки);
- Иначе
- Стр = Новый Структура;
- Стр.Вставить("Индекс", ИндексСтроки);
- Стр.Вставить("Первый", Истина);
- Просмотренные.Вставить(Строка.ИдентификаторНастройки, Стр);
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из СтрокиДляУдаления Цикл
- Таблица.Удалить(Строка);
+ ТаблицаПредопределенных.Удалить(Строка);
КонецЦикла;
КонецПроцедуры
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
index 0631f123..0e0db170 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
@@ -15,12 +15,13 @@
Выражение = пбп_ПредопределенныеЗначенияПовтИсп.ФункцииСозданияТаблицПредопределенныхЭлементов()
.Получить(ТипЗнч(Менеджер));
+
+ Таблица = Новый ТаблицаЗначений;
Если Не ЗначениеЗаполнено(Выражение) Тогда
- Возврат Неопределено;
+ Возврат Таблица;
КонецЕсли;
- Таблица = Новый ТаблицаЗначений;
СоздатьКолонкиТаблицыПредопределенныхЭлементов(Колонки, Таблица);
Параметры = Новый Массив;
@@ -32,6 +33,30 @@
КонецФункции
+// Инициализирует таблицу значений для конфликтных элементов.
+//
+// Параметры:
+// Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
+// ИсходнаяТаблица - ТаблицаЗначений - Пустая таблица каркас,
+// см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенныхЭлементов
+//
+// Возвращаемое значение:
+// ТаблицаЗначений - Таблица конфликтных элементов.
+//
+Функция ТаблицаКонфликтныхЭлементов(Менеджер, ИсходнаяТаблица = Неопределено) Экспорт
+
+ Если ИсходнаяТаблица = Неопределено Тогда
+ ИсходнаяТаблица = ТаблицаПредопределенныхЭлементов(Менеджер);
+ КонецЕсли;
+
+ ИсходнаяТаблица.Колонки.Добавить("Служебный_ДублированиеИдентификаторов", Новый ОписаниеТипов("Булево"));
+
+ Возврат ИсходнаяТаблица;
+
+КонецФункции
+
+#Область ЗаполнениеДанных
+
// Заполняет таблицу предопределенных элементов справочника
// ПланыВидовХарактеристикСсылка.пбп_ПредопределенныеЗначения.
//
@@ -191,6 +216,8 @@
КонецПроцедуры
+#КонецОбласти
+
// Возвращает колонки таблицы предопределенных элементов.
//
// Параметры:
@@ -319,6 +346,8 @@
#КонецОбласти
+#Область ИсключаемыеПоляДляРасчетаХеша
+
// Возвращает исключаемые поля для расчета хеша элемент
//
// Возвращаемое значение:
@@ -355,6 +384,8 @@
#КонецОбласти
+#КонецОбласти
+
#Область СлужебныеПроцедурыИФункции
Функция ОбщиеКолонки(Менеджер)
@@ -377,12 +408,12 @@
Колонки.Вставить("ИдентификаторРодитель", ОписаниеСтрока);
Колонки.Вставить("ХешСумма", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(32)));
- Колонки.Вставить("Служеб_ОбновитьЭлемент", ОписаниеБулево);
- Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево);
- Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
- Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево);
- Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево);
- Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево);
+ Колонки.Вставить("Служебный_ОбновитьЭлемент", ОписаниеБулево);
+ Колонки.Вставить("Служебный_УстановитьФлагРучноеИзменение", ОписаниеБулево);
+ Колонки.Вставить("Служебный_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
+ Колонки.Вставить("Служебный_СоздатьЗаписьРегистра", ОписаниеБулево);
+ Колонки.Вставить("Служебный_Иерархический", ОписаниеБулево);
+ Колонки.Вставить("Служебный_ИерархияГруппИЭлементов", ОписаниеБулево);
Возврат Колонки;
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\232\320\273\320\270\320\265\320\275\321\202.xml" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\232\320\273\320\270\320\265\320\275\321\202.xml"
new file mode 100644
index 00000000..d51107d1
--- /dev/null
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\232\320\273\320\270\320\265\320\275\321\202.xml"
@@ -0,0 +1,27 @@
+
+
+
+
+ пбп_ПредопределенныеЗначенияСлужебныйКлиент
+
+
+ ru
+ Предопределенные значения служебный клиент
+
+
+ en
+ Working with dialogues server
+
+
+
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl"
new file mode 100644
index 00000000..32bffb88
--- /dev/null
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl"
@@ -0,0 +1,61 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright First BIT company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+//
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
+Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
+
+ Если ТипЗнч(Результат) = Тип("Структура") Тогда
+ Текст = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Существуют конфликты предопределенных элементов ''%1'''"),
+ Результат.ПредставлениеОбъекта);
+ Пояснение = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Разрешить конфликты предопределенных элементов ''%1'''"),
+ Результат.ПредставлениеОбъекта);
+
+ ПоказатьОповещениеПользователя(
+ Текст,
+ НавигационнаяСсылкаОбъекта(Результат.ИмяОбъектаМетаданных),
+ Пояснение,
+ БиблиотекаКартинок.ДиалогВосклицание,
+ СтатусОповещенияПользователя.Важное,
+ "КонфликтыПредопределенныхЭлементов_" + Результат.ИмяОбъектаМетаданных);
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+// Возвращает навигационную ссылку для оповещений.
+//
+// Параметры:
+// ИмяОбъекта - Строка - Полное имя объекта метаданных
+//
+// Возвращаемое значение:
+// Строка - навигационная ссылка
+//
+Функция НавигационнаяСсылкаОбъекта(ИмяОбъекта)
+ Возврат "e1cib/list/" + ИмяОбъекта;
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217.xml" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217.xml"
new file mode 100644
index 00000000..90556b6b
--- /dev/null
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ пбп_СерверныеОповещения
+
+
+ ru
+ Серверные оповещения (пбп)
+
+
+
+ false
+ false
+ true
+ true
+ true
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217/Ext/Module.bsl"
new file mode 100644
index 00000000..d0674d66
--- /dev/null
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217/Ext/Module.bsl"
@@ -0,0 +1,57 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright First BIT company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+//
+
+////////////////////////////////////////////////////////////////////////////////
+// серверные оповещения: аналог модуля БСП
+
+#Область ПрограммныйИнтерфейс
+
+#Область МетодыАналогиБСП
+
+// Аналог метода БСП. Добавляет серверное оповещение в очередь для доставки на клиент.
+// Оповещение доставляется через систему взаимодействия,
+// либо забирается в рамках общего серверного вызова.
+//
+// Параметры:
+// ИмяОповещения - Строка - смотри НовоеСерверноеОповещение.Имя.
+//
+// Результат - Произвольный - произвольное сериализуемое значение,
+// которое будет отправлено в составе оповещения на клиент
+// (должны быть как можно меньшего размера, желательно не более 1 Кб).
+//
+// Адресаты - Неопределено - все пользователи (и соответственно все сеансы).
+// Если указано незаполненное соответствие, тогда возврат.
+// - Соответствие из КлючИЗначение:
+// * Ключ - УникальныйИдентификатор - идентификатор пользователя ИБ.
+// * Значение - Массив из см. СерверныеОповещения.КлючСеанса
+//
+// ОтправитьСразу - Булево - если Истина, попытаться сразу отправить сообщение
+// через систему взаимодействия перед добавлением в очередь.
+// Отправка сразу не допускается из обработчиков ПриОтправкеСерверногоОповещения.
+// Следует учесть (особенно при вызове в транзакции), что неудачное обращение
+// к системе взаимодействия может занимать (3-5 сек)*2, а удачное не менее (50 мс)*2.
+//
+Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
\ No newline at end of file
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.xml" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.xml"
new file mode 100644
index 00000000..8f91ab28
--- /dev/null
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ пбп_СерверныеОповещенияСлужебный
+
+
+ ru
+ Серверные оповещения служебный (пбп)
+
+
+
+ false
+ false
+ true
+ true
+ true
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl"
new file mode 100644
index 00000000..0a4d0b72
--- /dev/null
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\320\265\321\200\320\262\320\265\321\200\320\275\321\213\320\265\320\236\320\277\320\276\320\262\320\265\321\211\320\265\320\275\320\270\321\217\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271/Ext/Module.bsl"
@@ -0,0 +1,46 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright First BIT company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+//
+
+////////////////////////////////////////////////////////////////////////////////
+// серверные оповещения служебный: аналог модуля БСП
+
+#Область ПрограммныйИнтерфейс
+
+#Область ПереадресацияМетодов
+
+// См. пбп_СерверныеОповещения.ОтправитьСерверноеОповещение.
+Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт
+
+ Модуль = ПолучитьМодуль();
+ Модуль.ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПолучитьМодуль()
+ Возврат пбп_ОбщегоНазначенияПовтИсп.ПереадресацияОбщегоМодуля("СерверныеОповещения", "пбп_СерверныеОповещения");
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index 2c8fa833..6f4d7325 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -57,7 +57,7 @@
Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок
Первый БИТ
- 1.0.3.12
+ 1.0.4.13
false
false
@@ -313,12 +313,15 @@
пбп_ПредопределенныеЗначенияКлиент
пбп_ПредопределенныеЗначенияПереопределяемый
пбп_ПредопределенныеЗначенияПовтИсп
+ пбп_ПредопределенныеЗначенияСлужебныйКлиент
пбп_РаботаСДиалогамиКлиент
пбп_РаботаСДиалогамиСервер
пбп_РаботаСКоллекциямиКлиентСервер
пбп_РаботаСФормами
пбп_РегламентныеЗаданияСервер
пбп_РегламентныеЗаданияСлужебныйСервер
+ пбп_СерверныеОповещения
+ пбп_СерверныеОповещенияСлужебный
пбп_СправочникиОбработкаСобытий
пбп_СтандартныеПодсистемыКлиент
пбп_СтандартныеПодсистемыПовтИсп
@@ -345,6 +348,7 @@
пбп_СправочникиПриКопировании
пбп_ВыполнениеПользовательскихФункцийФайловыхОбменов
пбп_ОчисткаИсторииИнтеграции
+ пбп_ЗаполнениеПредопределенныхЭлементов
пбп_ИспользоватьПользовательскиеФункции
пбп_Пользователи
пбп_ТипыОбъектовСоответствийИБ
@@ -370,6 +374,7 @@
пбп_ТипыАвторизации
пбп_ФорматыИнтеграций
пбп_НаправленияИнтеграционныхПотоков
+ пбп_ВидыОшибокПредопределенныхЭлементов
пбп_СоответствияОбъектовИБ
пбп_СостоянияПредопределенныхЭлементов
пбп_ПредопределенныеЗначения
diff --git "a/src/cf/Enums/\320\277\320\261\320\277_\320\222\320\270\320\264\321\213\320\236\321\210\320\270\320\261\320\276\320\272\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262.xml" "b/src/cf/Enums/\320\277\320\261\320\277_\320\222\320\270\320\264\321\213\320\236\321\210\320\270\320\261\320\276\320\272\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262.xml"
new file mode 100644
index 00000000..f2503b67
--- /dev/null
+++ "b/src/cf/Enums/\320\277\320\261\320\277_\320\222\320\270\320\264\321\213\320\236\321\210\320\270\320\261\320\276\320\272\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262.xml"
@@ -0,0 +1,67 @@
+
+
+
+
+
+ d19e6cd7-a544-4af2-a923-97366bdf778a
+ c2a6df89-c776-4b13-97f9-db414d6510ec
+
+
+ 8d3ca197-5a33-43dd-8f27-cff772250a15
+ 2ce00242-bd5a-4bd6-9648-272db55dbda4
+
+
+ 7e48d43a-4700-4cb2-a04b-cf86b777eee5
+ 943081b5-f331-4cee-8e81-440c2754cf47
+
+
+
+ пбп_ВидыОшибокПредопределенныхЭлементов
+
+
+ ru
+ Виды ошибок предопределенных элементов
+
+
+
+ false
+
+ true
+ BothWays
+
+
+
+
+
+
+
+ Auto
+
+
+
+
+ ДублированиеИдентификаторов
+
+
+ ru
+ Дублирование идентификаторов
+
+
+
+
+
+
+
+ РасхождениеЭлементаСКодом
+
+
+ ru
+ Расхождение элемента с кодом
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/src/cf/ScheduledJobs/\320\277\320\261\320\277_\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262.xml" "b/src/cf/ScheduledJobs/\320\277\320\261\320\277_\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262.xml"
new file mode 100644
index 00000000..a65d8125
--- /dev/null
+++ "b/src/cf/ScheduledJobs/\320\277\320\261\320\277_\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262.xml"
@@ -0,0 +1,22 @@
+
+
+
+
+ пбп_ЗаполнениеПредопределенныхЭлементов
+
+
+ ru
+ Заполнение предопределенных элементов
+
+
+
+ CommonModule.пбп_МетодыРегламентныхЗаданийСервер.ЗаполнениеПредопределенныхЭлементов
+ Заполнение предопределенных элементов
+ пбп_ЗаполнениеПредопределенныхЭлементов
+
+ true
+ 3
+ 10
+
+
+
\ No newline at end of file
diff --git "a/src/cf/ScheduledJobs/\320\277\320\261\320\277_\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Schedule.xml" "b/src/cf/ScheduledJobs/\320\277\320\261\320\277_\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Schedule.xml"
new file mode 100644
index 00000000..fd1013d6
--- /dev/null
+++ "b/src/cf/ScheduledJobs/\320\277\320\261\320\277_\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\321\205\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\276\320\262/Ext/Schedule.xml"
@@ -0,0 +1,7 @@
+
+
+
+ 1 2 3 4 5 6 7
+ 1 2 3 4 5 6 7 8 9 10 11 12
+
+
\ No newline at end of file
diff --git "a/src/cf/Subsystems/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml" "b/src/cf/Subsystems/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml"
index 18356e66..40f053fa 100644
--- "a/src/cf/Subsystems/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml"
+++ "b/src/cf/Subsystems/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml"
@@ -61,6 +61,8 @@
CommonModule.пбп_ФайловаяСистемаКлиент
CommonModule.пбп_ФайловаяСистемаКлиентПереадресация
CommonModule.пбп_ФайловаяСистемаСлужебныйКлиент
+ CommonModule.пбп_СерверныеОповещения
+ CommonModule.пбп_СерверныеОповещенияСлужебный
diff --git "a/src/cf/Subsystems/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml" "b/src/cf/Subsystems/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml"
index 5b560952..5bdf3e21 100644
--- "a/src/cf/Subsystems/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml"
+++ "b/src/cf/Subsystems/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.xml"
@@ -35,6 +35,9 @@
CommonModule.пбп_ПредопределенныеЗначенияВызовСервера
CommonModule.пбп_ПредопределенныеЗначенияКлиент
CommonModule.пбп_ПредопределенныеЗначенияПовтИсп
+ CommonModule.пбп_ПредопределенныеЗначенияСлужебныйКлиент
+ ScheduledJob.пбп_ЗаполнениеПредопределенныхЭлементов
+ Enum.пбп_ВидыОшибокПредопределенныхЭлементов