mirror of
https://github.com/firstBitSportivnaya/PSSL.git
synced 2025-01-26 03:52:13 +02:00
Added automatic creation of predefined elements (#144)
* Добавлена автоматическая генерация/изменение предопределенных элементов, оповещения о конфликтах предопределенных элементов и документация
This commit is contained in:
parent
9b2965af5a
commit
2b99cf108d
BIN
docs/images/ФормаРазрешенияКонфликтов.png
Normal file
BIN
docs/images/ФормаРазрешенияКонфликтов.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
@ -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;
|
||||
|
||||
// Добавляем новое оповещение в список оповещений
|
||||
Оповещения.Вставить(Оповещение.Имя, Оповещение);
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
## Добавление новых элементов
|
||||
|
||||
В модуле **пбп_ПредопределенныеЗначенияПереопределяемый** значения добавляются через метод **Добавить()** коллекции **Результат**, которая представляет собой таблицу предопределённых значений. Каждая новая запись в этой таблице может быть настроена как группа путём установки свойства ЭтоГруппа в значение Истина.
|
||||
|
@ -116,6 +116,14 @@
|
||||
<ContextMenu name="ТаблицаКонфликтовЗаменитьЭлементомИзКодаКонтекстноеМеню" id="27"/>
|
||||
<ExtendedTooltip name="ТаблицаКонфликтовЗаменитьЭлементомИзКодаРасширеннаяПодсказка" id="28"/>
|
||||
</CheckBoxField>
|
||||
<InputField name="ТаблицаКонфликтовКоллизииИдентификатора" id="36">
|
||||
<DataPath>ТаблицаКонфликтов.Ошибка</DataPath>
|
||||
<ReadOnly>true</ReadOnly>
|
||||
<EditMode>EnterOnInput</EditMode>
|
||||
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
|
||||
<ContextMenu name="ТаблицаКонфликтовКоллизииИдентификатораКонтекстноеМеню" id="37"/>
|
||||
<ExtendedTooltip name="ТаблицаКонфликтовКоллизииИдентификатораРасширеннаяПодсказка" id="38"/>
|
||||
</InputField>
|
||||
<ColumnGroup name="ГруппаЭлементВБазе" id="19">
|
||||
<Title>
|
||||
<v8:item>
|
||||
@ -176,6 +184,17 @@
|
||||
<v8:Type>xs:boolean</v8:Type>
|
||||
</Type>
|
||||
</Column>
|
||||
<Column name="Ошибка" id="2">
|
||||
<Title>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Ошибка</v8:content>
|
||||
</v8:item>
|
||||
</Title>
|
||||
<Type>
|
||||
<v8:Type>cfg:EnumRef.пбп_ВидыОшибокПредопределенныхЭлементов</v8:Type>
|
||||
</Type>
|
||||
</Column>
|
||||
</Columns>
|
||||
</Attribute>
|
||||
<Attribute name="ОбработатьЭлементы" id="4">
|
||||
|
@ -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!'");
|
||||
ТекстСообщения = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
|
||||
ТекстСообщения,
|
||||
Идентификатор);
|
||||
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ТекстСообщения);
|
||||
УсловноеОформление.Элементы.Очистить();
|
||||
|
||||
Элемент = УсловноеОформление.Элементы.Добавить();
|
||||
|
||||
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
|
||||
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонфликтовЗаменитьЭлементомИзКода.Имя);
|
||||
|
||||
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
|
||||
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонфликтов.Ошибка");
|
||||
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
|
||||
ОтборЭлемента.ПравоеЗначение = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов;
|
||||
|
||||
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -48,4 +48,15 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Заполнение предопределенных элементов, с выводом серверного оповещения при возникновении конфликтов.
|
||||
//
|
||||
Процедура ЗаполнениеПредопределенныхЭлементов() Экспорт
|
||||
|
||||
пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания(
|
||||
Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов);
|
||||
|
||||
пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -74,7 +74,7 @@
|
||||
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
|
||||
|
||||
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
|
||||
Описание.Версия = "1.0.3.12";
|
||||
Описание.Версия = "1.0.4.13";
|
||||
|
||||
// Требуется библиотека стандартных подсистем.
|
||||
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
|
||||
@ -126,14 +126,7 @@
|
||||
|
||||
Процедура НачальноеЗаполнениеПредопределенныхЭлементов() Экспорт
|
||||
|
||||
Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();
|
||||
|
||||
Для Каждого Тип Из Типы Цикл
|
||||
ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
|
||||
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
|
||||
|
||||
пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер);
|
||||
КонецЦикла;
|
||||
пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -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 Тогда
|
||||
СтрокиДляУдаления.Добавить(Строка);
|
||||
Стр.Индекс = ИндексСтроки;
|
||||
Стр.Первый = Ложь;
|
||||
|
||||
СтрокаКонфликт = ТаблицаКонфликтныхЭлементов.Добавить();
|
||||
ЗаполнитьЗначенияСвойств(СтрокаКонфликт, Строка);
|
||||
СтрокаКонфликт.Служебный_ДублированиеИдентификаторов = Истина;
|
||||
|
||||
СообщитьОДублированииИдентификаторов(Строка.ИдентификаторНастройки);
|
||||
Иначе
|
||||
Стр = Новый Структура;
|
||||
Стр.Вставить("Индекс", ИндексСтроки);
|
||||
Стр.Вставить("Первый", Истина);
|
||||
Просмотренные.Вставить(Строка.ИдентификаторНастройки, Стр);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Строка Из СтрокиДляУдаления Цикл
|
||||
Таблица.Удалить(Строка);
|
||||
ТаблицаПредопределенных.Удалить(Строка);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
@ -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)));
|
||||
|
||||
Колонки.Вставить("Служеб_ОбновитьЭлемент", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
|
||||
Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево);
|
||||
Колонки.Вставить("Служебный_ОбновитьЭлемент", ОписаниеБулево);
|
||||
Колонки.Вставить("Служебный_УстановитьФлагРучноеИзменение", ОписаниеБулево);
|
||||
Колонки.Вставить("Служебный_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
|
||||
Колонки.Вставить("Служебный_СоздатьЗаписьРегистра", ОписаниеБулево);
|
||||
Колонки.Вставить("Служебный_Иерархический", ОписаниеБулево);
|
||||
Колонки.Вставить("Служебный_ИерархияГруппИЭлементов", ОписаниеБулево);
|
||||
|
||||
Возврат Колонки;
|
||||
|
||||
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
|
||||
<CommonModule uuid="adfac3a1-5e05-4ed6-bb3c-9b1cb6533f85">
|
||||
<Properties>
|
||||
<Name>пбп_ПредопределенныеЗначенияСлужебныйКлиент</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Предопределенные значения служебный клиент</v8:content>
|
||||
</v8:item>
|
||||
<v8:item>
|
||||
<v8:lang>en</v8:lang>
|
||||
<v8:content>Working with dialogues server</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Global>false</Global>
|
||||
<ClientManagedApplication>true</ClientManagedApplication>
|
||||
<Server>false</Server>
|
||||
<ExternalConnection>false</ExternalConnection>
|
||||
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
|
||||
<ServerCall>false</ServerCall>
|
||||
<Privileged>false</Privileged>
|
||||
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
|
||||
</Properties>
|
||||
</CommonModule>
|
||||
</MetaDataObject>
|
@ -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/" + ИмяОбъекта;
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
23
src/cf/CommonModules/пбп_СерверныеОповещения.xml
Normal file
23
src/cf/CommonModules/пбп_СерверныеОповещения.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
|
||||
<CommonModule uuid="24649f7c-7f4c-4bd4-af89-56164a1d2963">
|
||||
<Properties>
|
||||
<Name>пбп_СерверныеОповещения</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Серверные оповещения (пбп)</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Global>false</Global>
|
||||
<ClientManagedApplication>false</ClientManagedApplication>
|
||||
<Server>true</Server>
|
||||
<ExternalConnection>true</ExternalConnection>
|
||||
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
|
||||
<ServerCall>false</ServerCall>
|
||||
<Privileged>false</Privileged>
|
||||
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
|
||||
</Properties>
|
||||
</CommonModule>
|
||||
</MetaDataObject>
|
57
src/cf/CommonModules/пбп_СерверныеОповещения/Ext/Module.bsl
Normal file
57
src/cf/CommonModules/пбп_СерверныеОповещения/Ext/Module.bsl
Normal file
@ -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.
|
||||
//
|
||||
Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
23
src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный.xml
Normal file
23
src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
|
||||
<CommonModule uuid="eb123c50-72c8-4219-b70f-71b4e9203dc4">
|
||||
<Properties>
|
||||
<Name>пбп_СерверныеОповещенияСлужебный</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Серверные оповещения служебный (пбп)</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Global>false</Global>
|
||||
<ClientManagedApplication>false</ClientManagedApplication>
|
||||
<Server>true</Server>
|
||||
<ExternalConnection>true</ExternalConnection>
|
||||
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
|
||||
<ServerCall>false</ServerCall>
|
||||
<Privileged>false</Privileged>
|
||||
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
|
||||
</Properties>
|
||||
</CommonModule>
|
||||
</MetaDataObject>
|
@ -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/
|
||||
//
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// серверные оповещения служебный: аналог модуля БСП
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
#Область ПереадресацияМетодов
|
||||
|
||||
// См. пбп_СерверныеОповещения.ОтправитьСерверноеОповещение.
|
||||
Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт
|
||||
|
||||
Модуль = ПолучитьМодуль();
|
||||
Модуль.ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ПолучитьМодуль()
|
||||
Возврат пбп_ОбщегоНазначенияПовтИсп.ПереадресацияОбщегоМодуля("СерверныеОповещения", "пбп_СерверныеОповещения");
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -57,7 +57,7 @@
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
|
||||
</DefaultRoles>
|
||||
<Vendor>Первый БИТ</Vendor>
|
||||
<Version>1.0.3.12</Version>
|
||||
<Version>1.0.4.13</Version>
|
||||
<UpdateCatalogAddress/>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||
@ -313,12 +313,15 @@
|
||||
<CommonModule>пбп_ПредопределенныеЗначенияКлиент</CommonModule>
|
||||
<CommonModule>пбп_ПредопределенныеЗначенияПереопределяемый</CommonModule>
|
||||
<CommonModule>пбп_ПредопределенныеЗначенияПовтИсп</CommonModule>
|
||||
<CommonModule>пбп_ПредопределенныеЗначенияСлужебныйКлиент</CommonModule>
|
||||
<CommonModule>пбп_РаботаСДиалогамиКлиент</CommonModule>
|
||||
<CommonModule>пбп_РаботаСДиалогамиСервер</CommonModule>
|
||||
<CommonModule>пбп_РаботаСКоллекциямиКлиентСервер</CommonModule>
|
||||
<CommonModule>пбп_РаботаСФормами</CommonModule>
|
||||
<CommonModule>пбп_РегламентныеЗаданияСервер</CommonModule>
|
||||
<CommonModule>пбп_РегламентныеЗаданияСлужебныйСервер</CommonModule>
|
||||
<CommonModule>пбп_СерверныеОповещения</CommonModule>
|
||||
<CommonModule>пбп_СерверныеОповещенияСлужебный</CommonModule>
|
||||
<CommonModule>пбп_СправочникиОбработкаСобытий</CommonModule>
|
||||
<CommonModule>пбп_СтандартныеПодсистемыКлиент</CommonModule>
|
||||
<CommonModule>пбп_СтандартныеПодсистемыПовтИсп</CommonModule>
|
||||
@ -345,6 +348,7 @@
|
||||
<EventSubscription>пбп_СправочникиПриКопировании</EventSubscription>
|
||||
<ScheduledJob>пбп_ВыполнениеПользовательскихФункцийФайловыхОбменов</ScheduledJob>
|
||||
<ScheduledJob>пбп_ОчисткаИсторииИнтеграции</ScheduledJob>
|
||||
<ScheduledJob>пбп_ЗаполнениеПредопределенныхЭлементов</ScheduledJob>
|
||||
<FunctionalOption>пбп_ИспользоватьПользовательскиеФункции</FunctionalOption>
|
||||
<DefinedType>пбп_Пользователи</DefinedType>
|
||||
<DefinedType>пбп_ТипыОбъектовСоответствийИБ</DefinedType>
|
||||
@ -370,6 +374,7 @@
|
||||
<Enum>пбп_ТипыАвторизации</Enum>
|
||||
<Enum>пбп_ФорматыИнтеграций</Enum>
|
||||
<Enum>пбп_НаправленияИнтеграционныхПотоков</Enum>
|
||||
<Enum>пбп_ВидыОшибокПредопределенныхЭлементов</Enum>
|
||||
<InformationRegister>пбп_СоответствияОбъектовИБ</InformationRegister>
|
||||
<InformationRegister>пбп_СостоянияПредопределенныхЭлементов</InformationRegister>
|
||||
<ChartOfCharacteristicTypes>пбп_ПредопределенныеЗначения</ChartOfCharacteristicTypes>
|
||||
|
67
src/cf/Enums/пбп_ВидыОшибокПредопределенныхЭлементов.xml
Normal file
67
src/cf/Enums/пбп_ВидыОшибокПредопределенныхЭлементов.xml
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
|
||||
<Enum uuid="82c0a4bc-ec79-46ff-a515-4253a2c8f23d">
|
||||
<InternalInfo>
|
||||
<xr:GeneratedType name="EnumRef.пбп_ВидыОшибокПредопределенныхЭлементов" category="Ref">
|
||||
<xr:TypeId>d19e6cd7-a544-4af2-a923-97366bdf778a</xr:TypeId>
|
||||
<xr:ValueId>c2a6df89-c776-4b13-97f9-db414d6510ec</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="EnumManager.пбп_ВидыОшибокПредопределенныхЭлементов" category="Manager">
|
||||
<xr:TypeId>8d3ca197-5a33-43dd-8f27-cff772250a15</xr:TypeId>
|
||||
<xr:ValueId>2ce00242-bd5a-4bd6-9648-272db55dbda4</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
<xr:GeneratedType name="EnumList.пбп_ВидыОшибокПредопределенныхЭлементов" category="List">
|
||||
<xr:TypeId>7e48d43a-4700-4cb2-a04b-cf86b777eee5</xr:TypeId>
|
||||
<xr:ValueId>943081b5-f331-4cee-8e81-440c2754cf47</xr:ValueId>
|
||||
</xr:GeneratedType>
|
||||
</InternalInfo>
|
||||
<Properties>
|
||||
<Name>пбп_ВидыОшибокПредопределенныхЭлементов</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Виды ошибок предопределенных элементов</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<UseStandardCommands>false</UseStandardCommands>
|
||||
<Characteristics/>
|
||||
<QuickChoice>true</QuickChoice>
|
||||
<ChoiceMode>BothWays</ChoiceMode>
|
||||
<DefaultListForm/>
|
||||
<DefaultChoiceForm/>
|
||||
<AuxiliaryListForm/>
|
||||
<AuxiliaryChoiceForm/>
|
||||
<ListPresentation/>
|
||||
<ExtendedListPresentation/>
|
||||
<Explanation/>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
</Properties>
|
||||
<ChildObjects>
|
||||
<EnumValue uuid="a4d8d3b8-89cb-4273-9edd-81fa9bcb007d">
|
||||
<Properties>
|
||||
<Name>ДублированиеИдентификаторов</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Дублирование идентификаторов</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
</Properties>
|
||||
</EnumValue>
|
||||
<EnumValue uuid="62f8cc45-9836-41ec-98d3-fd595ffe2941">
|
||||
<Properties>
|
||||
<Name>РасхождениеЭлементаСКодом</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Расхождение элемента с кодом</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
</Properties>
|
||||
</EnumValue>
|
||||
</ChildObjects>
|
||||
</Enum>
|
||||
</MetaDataObject>
|
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
|
||||
<ScheduledJob uuid="7835a81c-7570-4f43-8ea7-0ec9a8e71169">
|
||||
<Properties>
|
||||
<Name>пбп_ЗаполнениеПредопределенныхЭлементов</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>Заполнение предопределенных элементов</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<MethodName>CommonModule.пбп_МетодыРегламентныхЗаданийСервер.ЗаполнениеПредопределенныхЭлементов</MethodName>
|
||||
<Description>Заполнение предопределенных элементов</Description>
|
||||
<Key>пбп_ЗаполнениеПредопределенныхЭлементов</Key>
|
||||
<Use>true</Use>
|
||||
<Predefined>true</Predefined>
|
||||
<RestartCountOnFailure>3</RestartCountOnFailure>
|
||||
<RestartIntervalOnFailure>10</RestartIntervalOnFailure>
|
||||
</Properties>
|
||||
</ScheduledJob>
|
||||
</MetaDataObject>
|
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<JobSchedule xmlns="http://v8.1c.ru/8.3/xcf/extrnprops" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
|
||||
<Schedule BeginDate="0001-01-01" EndDate="0001-01-01" BeginTime="00:00:00" EndTime="00:00:00" CompletionTime="00:00:00" CompletionInterval="0" RepeatPeriodInDay="300" RepeatPause="0" WeekDayInMonth="0" DayInMonth="0" WeeksPeriod="1" DaysRepeatPeriod="1">
|
||||
<ent:WeekDays>1 2 3 4 5 6 7</ent:WeekDays>
|
||||
<ent:Months>1 2 3 4 5 6 7 8 9 10 11 12</ent:Months>
|
||||
</Schedule>
|
||||
</JobSchedule>
|
@ -61,6 +61,8 @@
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ФайловаяСистемаКлиент</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ФайловаяСистемаКлиентПереадресация</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ФайловаяСистемаСлужебныйКлиент</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_СерверныеОповещения</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_СерверныеОповещенияСлужебный</xr:Item>
|
||||
</Content>
|
||||
</Properties>
|
||||
<ChildObjects/>
|
||||
|
@ -35,6 +35,9 @@
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ПредопределенныеЗначенияВызовСервера</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ПредопределенныеЗначенияКлиент</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ПредопределенныеЗначенияПовтИсп</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">CommonModule.пбп_ПредопределенныеЗначенияСлужебныйКлиент</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">ScheduledJob.пбп_ЗаполнениеПредопределенныхЭлементов</xr:Item>
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Enum.пбп_ВидыОшибокПредопределенныхЭлементов</xr:Item>
|
||||
</Content>
|
||||
</Properties>
|
||||
<ChildObjects/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user