-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added automatic creation of predefined elements #144
Changes from 7 commits
c844ddb
7f7a9ac
5e7dae0
4568496
79be5dc
8bee7e3
f3f1205
73a3029
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,71 @@ | |
КонецПроцедуры | ||
``` | ||
|
||
## Уникальность предопределенных элементов | ||
|
||
Для обеспечения целостности данных и управления предопределёнными значениями реализован механизм контроля изменений. Он основан на вычислении хеша с использованием алгоритма **MD5**, учёте пометки на удаление, ручных изменений и проверке уникальности идентификаторов. | ||
|
||
### Основные этапы проверки | ||
1. **Первоначальная проверка уникальности идентификаторов:** | ||
- На этапе инициализации идентификаторы всех элементов проверяются на уникальность. | ||
- Если обнаружены коллизии (дублирующиеся идентификаторы), будет выдано сообщение об ошибке, и такие элементы будут пропущены. | ||
2. **Хеш и состояние элемента:** | ||
- Хеш вычисляется для каждого элемента и сохраняется в регистре **состояний предопределённых элементов**. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Нужно написать на основании каких данных формируется хэш - что там не учитываются изменяемые реквизиты There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
- **Ключи хеша:** | ||
- ИдентификаторНастройки | ||
- Наименование | ||
- Родитель (если включена иерархия) | ||
- ЭтоГруппа (если включена иерархия групп и элементов) | ||
- Изменяемые реквизиты при расчете не учитываются | ||
- Остальные ключи опционально, зависят от типа объекта метаданных (см. [область Структуры колонок таблиц](../src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#247-343) и [исключаемые поля для расчета хеша](../src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#345-381)) | ||
- Если элемент изменяется в пользовательском режиме, устанавливается флаг **ручное изменение:** | ||
- Такой элемент исключается из проверки хеша при последующих обновлениях. | ||
3. **Обработка элементов с пометкой на удаление:** | ||
- Если элемент помечен на удаление и его хеш отличается от нового: | ||
- Значения элемента обновляются данными из кода. | ||
- Пометка на удаление снимается автоматически. | ||
- Если элемент не помечен на удаление и его хеш отличается от нового: | ||
- Формируется уведомление о конфликте для дальнейшего разрешения. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Нужно описать пример конфликта и его решения There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
||
**Пример решения конфликтов при создании/обновлении предопределенных элементов** | ||
|
||
![image](images/ФормаРазрешенияКонфликтов.png) | ||
|
||
Виды ошибок: | ||
- Коллизии идентификаторов | ||
- Эта ошибка не решается в пользовательском режиме, для ее устранения необходимо перейти в общий модуль ``пбп_ПредопределенныеЗначенияПереопределяемый`` и исправить конфликтующие элементы. | ||
- Расхождение элемента с кодом | ||
- Для элемента установлен флаг обновления: Элемент будет обновлен данными из программного кода, а также обновится хеш элемента в регистре сведений **``пбп_СостоянияПредопределенныхЭлементов``**. | ||
- Для элемента не установлен флаг обновления: Элемент не будет обновлен. В записи регистра сведений **``пбп_СостоянияПредопределенныхЭлементов``** будет установлен флаг **``Ручное изменение``**, указывающий на то, что элемент был изменен вручную и не подлежит автоматическому обновлению в будущем. | ||
|
||
**Примечание** - Флаг ``Заменить элементом из кода`` активен только для элементов с видом ошибки ``Расхождение элемента с кодом`` | ||
|
||
## Автоматическое создание новых элементов | ||
|
||
Для автоматизации процесса заполнения предопределенных элементов необходимо модифицировать/добавить в расширение общий модуль **``ОбщегоНазначенияПереопределяемый``**. В процедуре **``ПриДобавленииСерверныхОповещений``** требуется добавить новое серверное оповещение. | ||
|
||
**Пример кода для подключения через расширение** | ||
|
||
```BSL | ||
&После("ПриДобавленииСерверныхОповещений") | ||
Процедура пбп_ПриДобавленииСерверныхОповещений(Оповещения) | ||
// Создаем новое серверное оповещение для предопределённых значений | ||
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение("пбп_ПредопределенныеЗначения"); | ||
// Указываем модуль для получения и отправки сообщений | ||
Оповещение.ИмяМодуляОтправки = ""; // В данном случае используется рег. задание для отправки | ||
Оповещение.ИмяМодуляПолучения = "пбп_ПредопределенныеЗначенияСлужебныйКлиент"; | ||
// Настраиваем периодичность проверки (в секундах) | ||
Оповещение.ПериодПроверки = 300; | ||
// Добавляем новое оповещение в список оповещений | ||
Оповещения.Вставить(Оповещение.Имя, Оповещение); | ||
КонецПроцедуры | ||
``` | ||
|
||
## Добавление новых элементов | ||
|
||
В модуле **пбп_ПредопределенныеЗначенияПереопределяемый** значения добавляются через метод **Добавить()** коллекции **Результат**, которая представляет собой таблицу предопределённых значений. Каждая новая запись в этой таблице может быть настроена как группа путём установки свойства ЭтоГруппа в значение Истина. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кстати а это в оповещениях учтено? Или только если нужно разрешить конфликт?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.