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 + + + <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> + + + 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 + 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.пбп_ВидыОшибокПредопределенныхЭлементов