From c844ddbbe5ef234714edaa3d68eef58cff92804f Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Fri, 8 Nov 2024 18:02:13 +0300 Subject: [PATCH 1/8] Added automatic creation of predefined elements --- ...21\207\320\265\320\275\320\270\321\217.md" | 26 ++++++++ .../Ext/Module.bsl" | 11 ++++ .../Ext/Module.bsl" | 11 +--- .../Ext/Module.bsl" | 41 +++++++++++++ ...0\273\320\270\320\265\320\275\321\202.xml" | 27 +++++++++ .../Ext/Module.bsl" | 56 ++++++++++++++++++ ...1\211\320\265\320\275\320\270\321\217.xml" | 23 ++++++++ .../Ext/Module.bsl" | 59 +++++++++++++++++++ ...0\265\320\261\320\275\321\213\320\271.xml" | 23 ++++++++ .../Ext/Module.bsl" | 46 +++++++++++++++ src/cf/Configuration.xml | 6 +- ...0\265\320\275\321\202\320\276\320\262.xml" | 22 +++++++ .../Ext/Schedule.xml" | 7 +++ ...1\207\320\265\320\275\320\270\321\217.xml" | 2 + 14 files changed, 350 insertions(+), 10 deletions(-) create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" 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..de5db312 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,32 @@ КонецПроцедуры ``` +## Автоматическое создание новых элементов + +Для автоматизации процесса заполнения предопределенных элементов необходимо модифицировать/добавить в расширение общий модуль **``ОбщегоНазначенияПереопределяемый``**. В процедуре **``ПриДобавленииСерверныхОповещений``** требуется добавить новое серверное оповещение. + +**Пример кода для подключения через расширение** + +```BSL +&После("ПриДобавленииСерверныхОповещений") +Процедура пбп_ПриДобавленииСерверныхОповещений(Оповещения) + + // Создаем новое серверное оповещение для предопределённых значений + Оповещение = СерверныеОповещения.НовоеСерверноеОповещение("пбп_ПредопределенныеЗначения"); + + // Указываем модуль для получения и отправки сообщений + Оповещение.ИмяМодуляОтправки = ""; // В данном случае используется рег. задание для отправки + Оповещение.ИмяМодуляПолучения = "пбп_ПредопределенныеЗначенияСлужебныйКлиент"; + + // Настраиваем периодичность проверки (в секундах) + Оповещение.ПериодПроверки = 300; + + // Добавляем новое оповещение в список оповещений + Оповещения.Вставить(Оповещение.Имя, Оповещение); + +КонецПроцедуры +``` + ## Добавление новых элементов В модуле **пбп_ПредопределенныеЗначенияПереопределяемый** значения добавляются через метод **Добавить()** коллекции **Результат**, которая представляет собой таблицу предопределённых значений. Каждая новая запись в этой таблице может быть настроена как группа путём установки свойства ЭтоГруппа в значение Истина. 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..f54c7287 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.12"; // Требуется библиотека стандартных подсистем. Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы"); @@ -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..efa9cd35 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" @@ -371,6 +371,47 @@ РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.СоздатьЗаписьРегистра(Объект, ЭтоГруппа, КлючиХеша); КонецПроцедуры +// Заполнение предопределенных элементов, с возможностью серверного оповещения +// о существующих конфликтах при создании элементов. +// +// Параметры: +// ОтправитьСерверноеОповещение - Булево - В случае необходимости оповещения пользователей, установить флаг в Истину. +// +Процедура ЗаполнениеПредопределенныхЭлементов(ОтправитьСерверноеОповещение = Ложь) Экспорт + + Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы(); + + Для Каждого Тип Из Типы Цикл + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + + Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); + + Если Не ОтправитьСерверноеОповещение Тогда + пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер); + Продолжить; + КонецЕсли; + + ПредставлениеОбъекта = ?(ПустаяСтрока(ОбъектМетаданных.ПредставлениеОбъекта), + ОбъектМетаданных.Синоним, + ОбъектМетаданных.ПредставлениеОбъекта); + + ТаблицаКонфликтныхЭлементов = пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер); + + Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда + Результат = Новый Структура; + Результат.Вставить("ИмяОбъектаМетаданных", ПолноеИмя); + Результат.Вставить("ПредставлениеОбъекта", ПредставлениеОбъекта); + + пбп_СерверныеОповещенияСлужебный.ОтправитьСерверноеОповещение( + "пбп_ПредопределенныеЗначения", + Результат, + Неопределено); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции 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..2eacee9f --- /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,56 @@ +// Библиотека проектных подсистем для упрощения разработки архитектуры на 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/" + ИмяОбъекта; +КонецФункции + +#КонецОбласти + 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..c529ebf4 --- /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,59 @@ +// Библиотека проектных подсистем для упрощения разработки архитектуры на 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..7111f5bb 100644 --- a/src/cf/Configuration.xml +++ b/src/cf/Configuration.xml @@ -57,7 +57,7 @@ Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Первый БИТ - 1.0.3.12 + 1.0.4.12 false false @@ -313,12 +313,15 @@ пбп_ПредопределенныеЗначенияКлиент пбп_ПредопределенныеЗначенияПереопределяемый пбп_ПредопределенныеЗначенияПовтИсп + пбп_ПредопределенныеЗначенияСлужебныйКлиент пбп_РаботаСДиалогамиКлиент пбп_РаботаСДиалогамиСервер пбп_РаботаСКоллекциямиКлиентСервер пбп_РаботаСФормами пбп_РегламентныеЗаданияСервер пбп_РегламентныеЗаданияСлужебныйСервер + пбп_СерверныеОповещения + пбп_СерверныеОповещенияСлужебный пбп_СправочникиОбработкаСобытий пбп_СтандартныеПодсистемыКлиент пбп_СтандартныеПодсистемыПовтИсп @@ -345,6 +348,7 @@ пбп_СправочникиПриКопировании пбп_ВыполнениеПользовательскихФункцийФайловыхОбменов пбп_ОчисткаИсторииИнтеграции + пбп_ЗаполнениеПредопределенныхЭлементов пбп_ИспользоватьПользовательскиеФункции пбп_Пользователи пбп_ТипыОбъектовСоответствийИБ 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\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..9444830d 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,8 @@ CommonModule.пбп_ПредопределенныеЗначенияВызовСервера CommonModule.пбп_ПредопределенныеЗначенияКлиент CommonModule.пбп_ПредопределенныеЗначенияПовтИсп + CommonModule.пбп_ПредопределенныеЗначенияСлужебныйКлиент + ScheduledJob.пбп_ЗаполнениеПредопределенныхЭлементов From 7f7a9ac108a06e7245a9611238e9388855bf867f Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Fri, 8 Nov 2024 18:18:40 +0300 Subject: [PATCH 2/8] fixed smells --- .../Ext/Module.bsl" | 2 +- .../Ext/Module.bsl" | 9 +++++++-- .../Ext/Module.bsl" | 2 -- 3 files changed, 8 insertions(+), 5 deletions(-) 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 efa9cd35..4e10de95 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" @@ -396,7 +396,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\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" index 2eacee9f..32bffb88 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\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" @@ -48,9 +48,14 @@ // Возвращает навигационную ссылку для оповещений. // +// Параметры: +// ИмяОбъекта - Строка - Полное имя объекта метаданных +// +// Возвращаемое значение: +// Строка - навигационная ссылка +// Функция НавигационнаяСсылкаОбъекта(ИмяОбъекта) Возврат "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/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" index c529ebf4..d0674d66 100644 --- "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" @@ -50,8 +50,6 @@ // Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт - // Заглушка. Работает только с БСП - КонецПроцедуры #КонецОбласти From 5e7dae0a33d1b8620073b8aee8669294908872ae Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Fri, 8 Nov 2024 18:22:05 +0300 Subject: [PATCH 3/8] fixed smells common module --- .../Ext/Module.bsl" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4e10de95..73c731e4 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" @@ -388,7 +388,7 @@ Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); Если Не ОтправитьСерверноеОповещение Тогда - пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер); + ИнициализироватьПредопределенныеЗначения(Менеджер); Продолжить; КонецЕсли; From 456849664c283e82e0f3bf77ca0388d461f74d7c Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Mon, 18 Nov 2024 13:33:49 +0300 Subject: [PATCH 4/8] added description for predefined elements --- ...21\207\320\265\320\275\320\270\321\217.md" | 19 +++++++++++++++++++ .../Ext/Module.bsl" | 2 +- src/cf/Configuration.xml | 2 +- ...1\207\320\265\320\275\320\270\321\217.xml" | 2 ++ 4 files changed, 23 insertions(+), 2 deletions(-) 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 de5db312..c5bd6c6c 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,25 @@ КонецПроцедуры ``` +## Уникальность предопределенных элементов + +Для обеспечения целостности данных и управления предопределёнными значениями реализован механизм контроля изменений. Он основан на вычислении хеша с использованием алгоритма **MD5**, учёте пометки на удаление, ручных изменений и проверке уникальности идентификаторов. + +### Основные этапы проверки +1. **Первоначальная проверка уникальности идентификаторов:** + - На этапе инициализации идентификаторы всех элементов проверяются на уникальность. + - Если обнаружены коллизии (дублирующиеся идентификаторы), будет выдано сообщение об ошибке, и такие элементы будут пропущены. +2. **Хеш и состояние элемента:** + - Хеш вычисляется для каждого элемента и сохраняется в регистре **состояний предопределённых элементов**. + - Если элемент изменяется в пользовательском режиме, устанавливается флаг **ручное изменение:** + - Такой элемент исключается из проверки хеша при последующих обновлениях. +3. **Обработка элементов с пометкой на удаление:** + - Если элемент помечен на удаление и его хеш отличается от нового: + - Значения элемента обновляются данными из кода. + - Пометка на удаление автоматически снимается. + - Если элемент не помечен на удаление и его хеш отличается от нового: + - Формируется уведомление о конфликте для дальнейшего разрешения. + ## Автоматическое создание новых элементов Для автоматизации процесса заполнения предопределенных элементов необходимо модифицировать/добавить в расширение общий модуль **``ОбщегоНазначенияПереопределяемый``**. В процедуре **``ПриДобавленииСерверныхОповещений``** требуется добавить новое серверное оповещение. 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 f54c7287..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.4.12"; + Описание.Версия = "1.0.4.13"; // Требуется библиотека стандартных подсистем. Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы"); diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml index 7111f5bb..c536f877 100644 --- a/src/cf/Configuration.xml +++ b/src/cf/Configuration.xml @@ -57,7 +57,7 @@ Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок Первый БИТ - 1.0.4.12 + 1.0.4.13 false false 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.пбп_СерверныеОповещенияСлужебный From 79be5dc8421f8891bccc47411ad61f80a4c39c6c Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Tue, 19 Nov 2024 15:36:51 +0300 Subject: [PATCH 5/8] added to conflicts elements with collision id --- ...0\270\320\272\321\202\320\276\320\262.png" | Bin 0 -> 36125 bytes ...21\207\320\265\320\275\320\270\321\217.md" | 22 +++- .../Ext/Form.xml" | 19 ++++ .../Ext/Form/Module.bsl" | 56 ++++++++-- .../Ext/Module.bsl" | 98 +++++++++--------- .../Ext/Module.bsl" | 43 ++++++-- src/cf/Configuration.xml | 1 + ...0\265\320\275\321\202\320\276\320\262.xml" | 67 ++++++++++++ ...1\207\320\265\320\275\320\270\321\217.xml" | 1 + 9 files changed, 244 insertions(+), 63 deletions(-) create mode 100644 "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" create mode 100644 "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" 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 0000000000000000000000000000000000000000..ad290f61f6e36a50d1f5d3691255c9ccb99a1791 GIT binary patch literal 36125 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%0ALSx3NanhCogY-&m)+QS$2N40 z6e%YRd8SOH;4%5Uo3ElZYoio$fUT;EL9jv0?_^YJYWk*d5b-T)wHQp=_RL=p?X9Lg zM!?;KryJDRR3VXhHRv_+V{TnVq1B1R(A5-)G(mrZ^3F}6X|ppF>af9*K--fsaWK*> zM7x`?S3$bo-BzK#r!nncm2K2Zo+S5VG)RcTn4L` z5-)yD?2@L_05#S?e7I_)+TFH1$+Ai!509K9(`+cO{=mR*)F@2Ul9ob=g99?mMo*{y zT6tLa7-g#CXohu>^CTnR8++Fg;eL-WIrDDNQbd?uzlKpO6o5?!#vQ2?Bet&WB+uP_ z4X?1kS}hd+1HA??2v5C-eB_O1sz=`#*R06W1f)DZo%q>B1FbXKo|f$P(PTgDIbNqQ znA1IBaiio&*;WKZWk}g_n%NeasBbRLLzW;7pxEMVj3IxJ&b!g4S@J>j>9Z>O(^8Md zQwb-uW|BJy!qA7A_kI+h|Cr%t$oO+uU{6xhCA-Pn%-24`c*L>fD(z=$z;d)~c9D8| z#x7bPZQ7G^A-M-T7GjThdpE($(Ddt3-1kmc1>vjSW7`BERwvuJ;Uljca&zzLGZOPd zY6=7}OC%L$bhXym1fj|Vwaurlcf`9CB`6HM5J4tJ6|AIrN6^2lOg*nD%lL68LFDb( zI+>;`kP5x3U;i7xdOM=DC^1EG?}@o9)Hl(9=(MrUgqLO-cQD(k=x#UHJfLMaNA9Sc z*_;oA-NPyX{%{47pn>vX0k0)$8x`{WREFJ;HFA4TU)Q{%k7K;3o|4K5CW#l~cO9%e z$vML`;`g`TC`-*GoT$+Bq||2LNaYOjZm3&8gob`7Nj^pu&vTG=-X7U-%i!AanB8|n ze>^?RJ;2iyhjv;|ox0;)r=6U<)DE#pLEp55DbJzB`gG4gwC})UK0cZo6Ap+F^dNv+ zE=3Si`cLb~!DoF;6GKbz)=Nm=ymL64jf?B8ibN(Sa+ zCZ!GzRzJRj5&C<}!t|C+)Kmd{N|8-CA>-EdK)-v!oc0Z$)?Bj6q0a`yb|Rmr0pP+I zCzL?1b_=<7rJ>VCM0pH0_J?OZB3o-Q0C1~XNduxJYqt9Il;}z5CH0hF2LaB_ z0s||c7{Eo;^->lsU=pa-StIyn3+1KJo$0YRvhhI?j!IYT{|fkG?+fKj!b`h?$4NDH zc*+I;VuUehuv1R)?6soaVg~wUnAh^elR#@-jW*xr+UxWW?2+_$WfUzxQNMCD!lGo} zX)pg_JYX5)2f(~tSzPL%#d4!wA(EAEXMY2rqsLH1QU@-NG#OF4U52;$q-V_3Lr&OFw=}8{|W=X|}(;1JelS?}ygiR73nWs?wOZ`u8 zUm9)!u9olqRh65!wXz)70$5n5eK?Bwl>Gr=>onLwu#_8df48RYkx1q2 zbQzL7t3~x;eQzWCjIFP|-qLMdS>@U0eUCx=&?#CKSW_492p-2Etkk!%iv3+n$V#PO z15wKp)P!X1e6Y~;gdM{lw(LWKEFGBi?@+R)-?g`G88U5Q=0;mbG+ZmIP48_T*Uh0* z@abNU+D~{vM$OIsCn!`liO>9ELsA9>uebO_zdJ40hUMMhJZMo^!DqglGxR{WEZ>*q za;f{#d|;126(?Y*kV&dpo=#H16H=wnP;*Vk0sa6hI_=qtfcdV&)c_AkG>*LFViD3D zPSotzG6tQr;U_X_=jMK*|W;+}bRH&E3C_9l1!Y z{3iyJxAFO-@tLF-^Rx^4s^7!fgKzpv?!o@dQox)u?g@Euj3!I;HM14htj^i_IIRu< z0IopVOSj(tlrDHfFML+rU+|UrwC>xt!-d}dKW`;3zgB0y@nyhgnMlXVp27}V|i!vO{s1$1g)9a84fZfMMUXaL}3-oDLV zPB=FrBqWpoie5@s!mDDd1is_+El?ByFg2@H&U@kgbp7WaO-PFoC0_g4>2Ey|82I>3 z`~vT$?9~<-A6Oe9N!O%Cx6GBy5Wnt!C)!2UzWT1-QVB4NF!&*Z1Q7u)#=Y--ZTSpn zd8TcpMj0JPjW1<}xK(|c1Xrop<&Z-*lLZ0Jp%Eq9p<|cWDW@NAU@N6Xo6PNGIxH#zyKg_vW2J$C-GSnA`C$X_!1Nq~cTrPji zrr>(w0Pz_>i1uC$G`ekK8mSM%KP&m@+a&9E^3;BYaHjI1_9D;StH-Ki>e?Z?rdrDA z7b0wdMZ5mH;{Mny_P*JXABNE zfR%S@pSlJoI|QwgjWoJdw^RVc%p;l?psPKBpC|H^8@}@KeJhDwF@4%+vB+66n zScu_hl|?LY!Ez+cs3<_lNKD3O9#i)M{37es*%Lj~dChnehGB5biN}=iEg9U-1>QSU zbA_JmL@B=X7> z5?8!~oY{(u4xZ6td8r(4@|t#5GOAG@;hWYBuua9U)FJ%rkai-5+Lc!E?7`_6Lfl*^ zkDerQAgv1-1iN(&y$A6}WLAtfZ9><@_q++b{+CDGyJyN)>SULdlbDJ-NNo_SHq9o5 z9mX?*urU_PvC3e&-9SrbWOWihv;}COiju(v6Onf5Sk8)dp{_sTR%YMJXlzasJ?3f|)ud~lGYFG%o5wUZ>%($|OU{%g zNr{i@EfyyzNvmyse#-RotvA3h2zaQ?O3xC1ybBErPVr ziha0=ag@xlL4iCQ(=rk4M? z*C^P@HWxCYvBcA0kYWh(p#D@BT0@={1GG57`zIrKR5D0jqy2ONAcx0;w5LD z`8Le`nvRkd$MaVO+0LW42TY{Q-J_1bRsa`>GD{H6zNQVYVBJ~>H>9C05#PDExQcq9 zc#rVuZPEy=5YqQ9SUerVS#K>iwUR1eM#b*$20*4){M=?GvMbs(t@B#uPB!nmFMBL+OvF>#J_jTOU29`JYH%i^a6lzyl1aMpqh-N`V7xvm)IV=lK30af-K5*EDulD zR3rLnUc~s>ohqrHn$cijY%m2gx=+}SwYq&JtMLTlb^i8JBd-Rrkl>DqrxtT&y zNeV%I&CYrmOwlTmcJ}xUOqtrqZ&bFXSFzBy7i0M32xMV zzBg`xW|oSzI&qy{8_}*OfW2XOe+U5vm;xwKfhIaD={T8b(JYkrUfx37n{YEo=URKA zjK1S0)FZL*w%o^e-4lqj&SKhwjgo%1UVsgJmoS0zAH86K0IL@*KpIt@_~~M0dUSWJ z*Fmqy1buJ#CWqLy4Ak<_pR8VKb?Pcw7kBc!n2$L>@ko;AprEl#I#+>d)v&r zFBGWyo%e_O_EC9bwI!x}&2$%Dr0iF{DxXM5dmde0uhQy#m^H7K zatUftcZdS@ntxKa`RD^*SsapJa6po~tT14$k%8tvauV`TS!vF>+0$kF;&&4ukxZLo znw`8a0d%d-J|y`&lmxFuO(6V6^f>H zmE}~B<#43CH!%)8khj*W>U%Uv%Omy@=Cb1E&A+Hf*|X<}X#-A#u_s;wh`Yc@-Ub)& zGE11v<(>X67A9Q!>FDvp;t5u|Gp=o2w@+|O;`Hn>>O~TZy?5T~&x?P)1#rlL+J{BeQu+a(D0+~Xr6*}P1gY=?b!Lca)4lB z@>)T8hV9;{q7PHPY=M0)Ag=Ubpcutl5D73&r*6awURcAz4}*sm%@J3;u9@T|%rG2b zvA+FE+mo)ma(A!*MJzCwmTO`=+6W7~12z!by|!1w+=}b0&6H5fU*xWVq))Mw|p4`WSMD z0Tv_u)VYt$qqpDR;fAn+}Y1X7b5;? zBD{g*%`_?dP)oN~5SNmqoLgHb7^=}A=H>q%B>yL)Qkfy!A)CrMeSn4g%>2`N znxp>JNpQeO-@r?Sl~fjYVsg-TjTbbZEi~&Od~raYt(**gzR&??b{SVA0cgvsMDGY(ic`Ef z$}7q&xZ$*7EJ6YiNPl*^aS-b}!SwB&E)Q)!K%IVR^IJmlex~-@&u4<>{$_3R?<(x| z*Cd4fM*qL(GW`GeF@G6aPQG{)nF)9i8b<;Kluz@vC&iaOzfL)Q4ItEA)@Xpa$GDzJ z`0Y8|-tJObkyas)oI;ioP6-){S`P!t5DA(@j`JnFBKv%-nzpqz-{zD?o8Z(e8rRvK z&^gowJS9_+r0iF^y^8XWlEUuoEb?DF;1XUq(Z`9d1b`@OYoV!9K%=g!^yLPsZd7m# zsA-g-4fK8{g5yHdtRTSERj}{0SCh9>{u!Z(ynJc*!-bSKAnA$^@bI< zyUST5KTNrHYjL^faYDrni&4PN?=+`~$M!qX?W?=0tGuaR$KrJWha0G==D^9kQouj^ z6sJ_5i(eqm@wdJi-tjS(OY z{#Q3Au5i`Q)aCLrKrzPom;*Xy&dAUbn?0pXJ!9c1#K`NJv`ksgWliHuY{CA&%iRq>5uXB4Q-`5YhhFld?D(g1-zZIW z*r;q1)I8?#x5lLH&=RtFv7Re1Wdm0Rey%m2QME8!<5t48Up$d3IQ&?=KR}qUE(Nu* zg6${f3fUd-r9}=p&fvws);5}fKmz4)GY}}L34C70skC>vwic#82$QxuC60;z4Rl!n zHZ2N(P}O8c-Vrd7C%snME;#=|*ke1ythm3x+`chCmq5tn!|nc3@Oh`8m7n?=f8HRe zMKCE;crbd(9Pdhmr%Hjah7W0}CdsJ@y#}!Cvq_8Zr8O69hOw_%UUXU@zN0cZ^uCH~ zl$x4y&5M{&R_xNJk~5iv4WE3CA=;bN*QZVVjLGnFDP#u8f6jPGV=L$l?He9QImT&<+%jj|?BFa;&ekPgFx51+YN6PDp|pOjLQ3DfQbd;sgt2??x`w9eM+)3IIpFte>k#b43YaJ=u-av`0$_ zN_(j;-Ib0{uPRrUyR6H>>!eyO3d2i7lUc2VG6){8Q9?OVPEzw4l`8Wa)-)tcvC{zB{1Oc! zfT}7NE6&E0e14YBAD?X5m>F|-vTCynFSPmNsj+JJ?Ze2VSwAjm9TM?6=L-0N?H!J_ z>e$}SSc)TH>RN%_oYfM@^-d}J1!)aeK{PU1D>$KN@%Q3Puz8&-S0~ zb`-p6C8e=ge;MC+rfwtC(3b#?KI?F(tj;mit+n2<%)s0m$;b|zZ8Df>v^kk@8tkZq zlsG(TO;Po~-JD&Es^ST_PY;-dMNJe|-7%gB2{(;TXP#w5jukO6w~#tYxJ{eZP`-cYu@B|15yhBKRCB7rM$z#CXVSK;Lv}dGm_&I(FpI4s%^&8?< z9PAE#1lBPh`NK#eA}MOTv>a3eh+1lpw>qdW>OB_0b(j&L-wT2}2#P1Gp2aFq`VZqe zFb-#YRQ(c@Y(wq+U#%O4SA8BD8nzPxcuEVY--`s9;z7PPkqZ>ce&@Jn>_Z5^AV`Zh zHt#+`B7o*q#AqeI5#9X~$DY2*Wa}c9P3pCPK%Ae*FB1>(vBpa_0b^n0UY3Ex8yu{FJIG@&dw!Z)|qwWRrB){`%gWGW99(?!fep@&|5cqK!IxZ*Z z3Jo}|WjRUO4eu*?xdgm*c9&8nfWzHJi}m5c5^WHxk_+e_@RfU;l^sl{^+v5*yL~Cq zN&w*6eJv1iZwjnPw~a&=T9AR_V3B>LMgh=Xboc&9-RND%?d@z#sp8J`Mz7VleR}_U z`^Wgj==G+msI9fIcgLK5-2vbCSQ9!nqQjh}w_D!s~W07-2OW`@;y4J6w%T>nEMbYqAIS`$3Niu}R~ z=BS&2BhN*H_OlNRl?2fheGT?)?W~$4J$5r62{E6MP2rp3zrbmq-0P{Z{r75+*A1Ou zA)oed^U0Y9L;GR-8yQg+aIYFCw%WT9b~1HY@Wx>Alpjn z%wj8p_z-QK%f->zQ_Y@rJ#>bxrk944Dn8#5!9vLJrFAjah?fVNeWV|!FWRLO^Pjy^ zj-kh~)AX2=%zLa_3MGUYDV67uM98Q-V(<4f$xHaATb4IE$9ih05Sqkv-6x z&jyUB5I70#Zg(9jyQ)rRv|$4xO4KeKO_`6RkGE^?jU%^-0jfK?BWhWqk#i7Deo!Ticamh#gj*C#iYu)*;-nJYKZkz24p{5mPL2zhTEl!a@sRgK1f{w4Bz(F zowa}7i(G%~7+SYC_sR8#7SHHUQ`I&I!I)7%>LK`ACK2*9uv%2cF4zy1^d}%HX#i#d z2B47pe|5aK()ZKg2vu%g#=0U2l5n~`%yC>6srp*KP*GX*IruZn9N$sWj~^4rfT7yq z-P5F`K6mZu+G1q~Wu0U-4dTFTqcpN+J8csw9Uq`FYO1$Lov*sERkQu!oTqdYf#_Iy zebllq55Bp(??D;cp0TaOzrV)2lI=Z&`##z4D^gr*SB;vsmnf8{4 z992(T6ElG}Fw?sB3U4BB1qL?wp6Czxn6lrjE<-q{U1CVo(DviglQ9VYYNhhl7mR8Z zV~^m0Se1NI7YQ>lDKM(@1(i%DWCUX#ddz@x zV@##L2ZeI%=si{DuP#k5u2MHXellS;MszERI2*o7!TTjz9H=p$?{!b7y-Wb;K)m4e zK!v(HY;aT>u6wInTUulDX)LYY(a4|O7`xb5!5Dq)m(jGyqE#7*O?KdI8VbVXCt%9Z zdzvj9)vTQ%2xZB}_ZGzR`b9O{EMo@Z)kp7!2&*xNn}w%Y`Ih3a(IcCsWR0$1W9Ahi zqrl7Owvsi;cr;OO=6+UJ3ZHCcR|L8ADViv`oVx@8{O!10V2HJs8|08NWv7NQ5yw#6 zZd(U1Io<j5S7q3wre|=AVhz0D$weX6RgS&ZAWF z%Q%L}pzdypD!S_2h=8}5tmaHdxS!j&M)t2La{W%NzWw9#&ZWxl%Q#|_Ez2E^IS1Je z;C{3)$|(8*sDB?&@2sCsRYGB>b#6LDo--B#$I90~l3LbqaV&c_6WIX>dW0)whs z>M<07)iADRWZ0d_e9OM>sOJwq-)Zn^{IKU54Q-I#dDLC1T|TWMcH|Gm9FkqB!`e+^ zt#a`s5rZarZy}~KTw#|o1~On3<#aDgzduiPE{=dZwNuPT&0OmjvF)J(XYC)w|6A_4GDqDHLH)KFnS zUe7(X$O(MDO=V3PTe^FXfqC3F|Gd+B1peVO|ly5fraf1-KcmZv^K zN?o7?`woWR>O$7;?@OjFc;s}XQNYV|!m%43bB7U*Sw>#_wH>HOh6#nh+Fdx6^9%}wB&iM78guB;FuD32xQ;K=d_G!NnKy`r~M-k75MBV->hu}IQm15LuVY=Nm zwj1!(G@R>kD8plIR^n2{zo#zYKfs!{@%FqZe^l#2McCNVUMrGc1!C+FzJO2dCdtHEf<+nRF6sVIcI;^{NK04na^L%h`JQ%z^Rny?HAd-Hg1qEuFnM>*S}?AC zBoyy~cmx3#4UXn6P4S-OI3FJFi{Ay+9p478Y5ppk^Xo19N<$4q2Ya&Qr|G=4%BA*g z`u!Qh1Fg5&&mZLvj5+OS227o!1M2574XkX3zhHj~pZ&zDXk(ecYtPw&I~sh0p%PFh zEIR5-)pe&(r-l2_LG`^0Q@E9vHYeAOq%%}g+L0%zPP^IKT}25j>K$R@TnbRyxGXZE z1j28bnpR1v4yaaGEnkZIV762)Edvq)1%e4+!D-Qn?c!vP6U?Fl{X8&dxKKtBrrTpN ztMwZhd(=wi!Wws;jo~Z)lGvG>F2$bRf2}Jr7WT&%LZd0v%G84v#!{yaYcqx==4E2S>z;8%*o`L&c+(4qRC|M%bE6* z;Z-r)oniA``h&r!Kbv+H{ZBJ2L6GB0mfmQ;6row?Vd&cfOQlpn(KDhU*27;+B094C zwTnOZ1}U~=S%~GxJnl-@0*ypo>tGM_*9}OLRT^~sHh=q}zo)VvKUxVKtUqTP8kt%6 zJ?U3fHREaY+q_MGW}GJh3e9=Jj-e9yZw%8MWDy6^!Ygi<>-uX?D5fHVX_&lcUOp;& z51fg6Dr0xOY~n5w!I12N%=L37$p_6BeTO_agL=H=Cx30mZvD- ziW}HxU_(6$Pe*0lw>9H|7cH%c?1Q_}MZKl+FZZoEeeMqQdCVx^-UaQAW*NuOj>|29 z23Ygkkg=v~U!mPh;iDwwo-%-qkXWW6bZfpZ8H&@bRD1bK#m}0|yh$H4@1MWF?&ze6 z>3p(H74bNWYaki6ckjWu>&OO2q{ixedbf5rHahA&Vx-=65`rYhj{j~&9I4ry(vU>| z!Jo6)Orl?L29D&09xq|fhHNE>QT&uXtrHQ zE3_Cig!m;F6wlkO|NJhQ)>U*{6BCFUY=wb3W9)sr3)FE5?w4j09nlwWH?fFT88M$e zUs-uGJOSXNC8SD)zG|#p8qs*ODwm#Fe?nZ3spO}FB2iv`$nZ}3Qd(6xoV)1Z&3qHs zU6W&|A5oGi==l!(3(RCE0g1iMPkP#l~tHdR@OKAP6SU7 zd4U52H7c?S5-FE}n>O6_@%34a0^a*vA!%sk_Pfa`f6M;@(S_~e?GDula#cz=2|z!* z2xA%!R?PoPkj`MY3WM{CmT-S|-!{r?=1j1vfTZe|cy~8_P@wnpP9}DWbF{s6kedeX zW%e4~#)I=t3k|N#!JsKC^Fq?;Y4HS-u6XU770WxC#S4tGiy&UgY=ni zF?lb%%B(vx2ubzZq3s%HV-9!$jXLTsdWtxUFPW?KHc?Eon`)lgxH+Cy2KP?mfYrqM zf7m{L#UlH#uIz&B9JONgkIZkN>}ADvm(#wXKxITA7OD18pKV z9&&N%|NK9w?}h)1_1kEpwCkYwscZXBae2d{uEd|xbzTSj*hRPKaUBGxkijSh + + ТаблицаКонфликтов.Ошибка + 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..83173359 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,8 +153,14 @@ нСтрока[ПрефиксКод + КлючЗначение.Ключ] = КлючЗначение.Значение; КонецЦикла; + Если Строка.Служебный_КоллизииИдентификаторов Тогда + нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов; + Иначе + нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.РасхождениеЭлементаСКодом; + КонецЕсли; + Выборка.Сбросить(); - Если Выборка.НайтиСледующий(Строка.Служеб_ПредопределенныйЭлемент, "Ссылка") Тогда + Если Выборка.НайтиСледующий(Строка.Служебный_ПредопределенныйЭлемент, "Ссылка") Тогда ЗаполнитьЗначенияСвойств(БазоваяСтруктура, Выборка); Для Каждого КлючЗначение Из БазоваяСтруктура Цикл нСтрока[ПрефиксБаза + КлючЗначение.Ключ] = КлючЗначение.Значение; @@ -181,13 +190,23 @@ Таблица.Индексы.Добавить(ИдентификаторНастройки); Для Каждого Строка Из ТаблицаКонфликтов Цикл Стр = Таблица.Найти(Строка[ПрефиксКод + ИдентификаторНастройки], ИдентификаторНастройки); + + Если Строка.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов Тогда + Таблица.Удалить(Стр); + Продолжить; + КонецЕсли; + Если Строка.ЗаменитьЭлементомИзКода Тогда - Стр.Служеб_ОбновитьЭлемент = Истина; + Стр.Служебный_ОбновитьЭлемент = Истина; Иначе - Стр.Служеб_УстановитьФлагРучноеИзменение = Истина; + Стр.Служебный_УстановитьФлагРучноеИзменение = Истина; КонецЕсли; КонецЦикла; + Если Не ЗначениеЗаполнено(Таблица) Тогда + Возврат; + КонецЕсли; + Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ИмяФормыВладельца); ДопПараметры = пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов( Таблица, Менеджер); @@ -199,17 +218,40 @@ Процедура ЗаполнитьОтметки(ЗначениеОтметки) Модифицированность = Истина; Для Каждого Строка Из ТаблицаКонфликтов Цикл + Если Строка.Ошибка = + ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов") Тогда + Продолжить; + КонецЕсли; Строка.ЗаменитьЭлементомИзКода = ЗначениеОтметки; КонецЦикла; КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаКонфликтовЗаменитьЭлементомИзКода.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонфликтов.Ошибка"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов; + + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + +КонецПроцедуры + #Область СообщенияОСобытии &НаСервере Процедура СообщитьОбОтсутствииЭлемента(Идентификатор) - ТекстСообщения = НСтр("ru = 'Элемент '%1' отсутствуют в базе!'; - |en = 'The element '%1' is missing from the database!'"); + ТекстСообщения = НСтр("ru = 'Элемент ''%1'' отсутствует в базе!'; + |en = 'The element ''%1'' is missing from the database!'"); ТекстСообщения = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку( ТекстСообщения, Идентификатор); 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 73c731e4..b324befc 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 @@ Родители = Новый Соответствие; Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл - СтрокаТаблицы.Служеб_Иерархический = ДополнительныеПараметры.Иерархический; - СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов; + СтрокаТаблицы.Служебный_Иерархический = ДополнительныеПараметры.Иерархический; + СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов; - ЭтоГруппа = СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа; + ЭтоГруппа = СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа; КлючиХеша = ?(ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент); - Если СтрокаТаблицы.Служеб_ОбновитьЭлемент Тогда + Если СтрокаТаблицы.Служебный_ОбновитьЭлемент Тогда ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители); - ИначеЕсли СтрокаТаблицы.Служеб_УстановитьФлагРучноеИзменение Тогда - УстановитьФлагРучноеИзменение(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент); - ИначеЕсли СтрокаТаблицы.Служеб_СоздатьЗаписьРегистра Тогда - СоздатьЗаписьСостоянияПредопределенногоЭлемента(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент, ЭтоГруппа, КлючиХеша); + ИначеЕсли СтрокаТаблицы.Служебный_УстановитьФлагРучноеИзменение Тогда + УстановитьФлагРучноеИзменение(СтрокаТаблицы.Служебный_ПредопределенныйЭлемент); + ИначеЕсли СтрокаТаблицы.Служебный_СоздатьЗаписьРегистра Тогда + СоздатьЗаписьСостоянияПредопределенногоЭлемента( + СтрокаТаблицы.Служебный_ПредопределенныйЭлемент, ЭтоГруппа, КлючиХеша); Иначе СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители); КонецЕсли; @@ -418,7 +420,8 @@ Процедура СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители) - Если СтрокаТаблицы.Служеб_Иерархический И СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа Тогда + Если СтрокаТаблицы.Служебный_Иерархический И СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов + И СтрокаТаблицы.ЭтоГруппа Тогда СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители); Иначе СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители); @@ -453,9 +456,9 @@ НовыйЭлемент = МенеджерОбъекта.СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, , "Родитель"); - ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент, СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов); + ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент, СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов); - Если СтрокаТаблицы.Служеб_Иерархический И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда + Если СтрокаТаблицы.Служебный_Иерархический И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда Родитель = ?(ЗначениеЗаполнено(СтрокаТаблицы.Родитель), СтрокаТаблицы.Родитель, Родители[СтрокаТаблицы.ИдентификаторРодитель]); @@ -468,7 +471,7 @@ пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки()); КонецПопытки; - Если СтрокаТаблицы.Служеб_Иерархический И Не СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов Тогда + Если СтрокаТаблицы.Служебный_Иерархический И Не СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов Тогда Родители.Вставить(СтрокаТаблицы.ИдентификаторНастройки, НовыйЭлемент.Ссылка); КонецЕсли; @@ -476,17 +479,17 @@ Процедура ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители) - Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент) Тогда + Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служебный_ПредопределенныйЭлемент) Тогда Возврат; КонецЕсли; - Элемент = СтрокаТаблицы.Служеб_ПредопределенныйЭлемент.ПолучитьОбъект(); + Элемент = СтрокаТаблицы.Служебный_ПредопределенныйЭлемент.ПолучитьОбъект(); Если Элемент.ПометкаУдаления Тогда Элемент.УстановитьПометкуУдаления(Ложь, Ложь); КонецЕсли; РодительОтличается = Ложь; - Если СтрокаТаблицы.Служеб_Иерархический + Если СтрокаТаблицы.Служебный_Иерархический И (Не ПустаяСтрока(СтрокаТаблицы.ИдентификаторРодитель) Или ЗначениеЗаполнено(Элемент.Родитель)) Тогда НовыйРодитель = ?(ЗначениеЗаполнено(СтрокаТаблицы.Родитель), СтрокаТаблицы.Родитель, @@ -497,10 +500,10 @@ Элемент.Родитель = НовыйРодитель; КонецЕсли; - Свойства = ЗаполняемыеИсключаемыеСвойства(СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов, Элемент.ЭтоГруппа); + Свойства = ЗаполняемыеИсключаемыеСвойства(СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов, Элемент.ЭтоГруппа); ЗаполнитьЗначенияСвойств(Элемент, СтрокаТаблицы, Свойства.СписокСвойств, Свойства.ИсключаяСвойства); - ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент, СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов); + ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент, СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов); Попытка ЗаписатьЭлементИСвязанныеДанные(Элемент, КлючиХеша, Истина); @@ -645,12 +648,12 @@ КонецФункции Процедура ОбработатьСтроку(Строка, Выборка, ТаблицаКонфликтныхЭлементов, СтрокиДляУдаления) - Строка.Служеб_ПредопределенныйЭлемент = Выборка.Ссылка; + Строка.Служебный_ПредопределенныйЭлемент = Выборка.Ссылка; Если Выборка.ХешОтсутствует Тогда - Строка.Служеб_СоздатьЗаписьРегистра = Истина; + Строка.Служебный_СоздатьЗаписьРегистра = Истина; ИначеЕсли Выборка.ПометкаУдаления Тогда - Строка.Служеб_ОбновитьЭлемент = Истина; + Строка.Служебный_ОбновитьЭлемент = Истина; Иначе СтрокиДляУдаления.Добавить(Строка); СтрокаКонфликт = ТаблицаКонфликтныхЭлементов.Добавить(); @@ -672,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..a9e05517 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,28 @@ КонецФункции +// Инициализирует таблицу значений для конфликтных элементов. +// +// Параметры: +// Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта. +// ИсходнаяТаблица - ТаблицаЗначений - +// Пустая таблица каркас, см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенныхЭлементов +// +// Возвращаемое значение: +// ТаблицаЗначений - Таблица конфликтных элементов. +// +Функция ТаблицаКонфликтныхЭлементов(Менеджер, ИсходнаяТаблица = Неопределено) Экспорт + + Если ИсходнаяТаблица = Неопределено Тогда + ИсходнаяТаблица = ТаблицаПредопределенныхЭлементов(Менеджер); + КонецЕсли; + + ИсходнаяТаблица.Колонки.Добавить("Служебный_КоллизииИдентификаторов", Новый ОписаниеТипов("Булево")); + + Возврат ИсходнаяТаблица; + +КонецФункции + // Заполняет таблицу предопределенных элементов справочника // ПланыВидовХарактеристикСсылка.пбп_ПредопределенныеЗначения. // @@ -319,6 +342,8 @@ #КонецОбласти +#Область ИсключаемыеПоляДляРасчетаХеша + // Возвращает исключаемые поля для расчета хеша элемент // // Возвращаемое значение: @@ -355,6 +380,8 @@ #КонецОбласти +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Функция ОбщиеКолонки(Менеджер) @@ -377,12 +404,12 @@ Колонки.Вставить("ИдентификаторРодитель", ОписаниеСтрока); Колонки.Вставить("ХешСумма", Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(32))); - Колонки.Вставить("Служеб_ОбновитьЭлемент", ОписаниеБулево); - Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево); - Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента); - Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево); - Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево); - Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево); + Колонки.Вставить("Служебный_ОбновитьЭлемент", ОписаниеБулево); + Колонки.Вставить("Служебный_УстановитьФлагРучноеИзменение", ОписаниеБулево); + Колонки.Вставить("Служебный_ПредопределенныйЭлемент", ОписаниеТиповЭлемента); + Колонки.Вставить("Служебный_СоздатьЗаписьРегистра", ОписаниеБулево); + Колонки.Вставить("Служебный_Иерархический", ОписаниеБулево); + Колонки.Вставить("Служебный_ИерархияГруппИЭлементов", ОписаниеБулево); Возврат Колонки; diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml index c536f877..6f4d7325 100644 --- a/src/cf/Configuration.xml +++ b/src/cf/Configuration.xml @@ -374,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..61720486 --- /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/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 9444830d..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" @@ -37,6 +37,7 @@ CommonModule.пбп_ПредопределенныеЗначенияПовтИсп CommonModule.пбп_ПредопределенныеЗначенияСлужебныйКлиент ScheduledJob.пбп_ЗаполнениеПредопределенныхЭлементов + Enum.пбп_ВидыОшибокПредопределенныхЭлементов From 8bee7e36c2d37ef538af013239e41e53142cd6b0 Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Tue, 19 Nov 2024 15:55:19 +0300 Subject: [PATCH 6/8] added description func --- .../Ext/Module.bsl" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a9e05517..7dc17024 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" @@ -37,8 +37,8 @@ // // Параметры: // Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта. -// ИсходнаяТаблица - ТаблицаЗначений - -// Пустая таблица каркас, см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенныхЭлементов +// ИсходнаяТаблица - ТаблицаЗначений - Пустая таблица каркас, +// см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенныхЭлементов // // Возвращаемое значение: // ТаблицаЗначений - Таблица конфликтных элементов. From f3f1205c177e81d89ecda6e8ec392cdcb827394f Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Wed, 20 Nov 2024 11:06:18 +0300 Subject: [PATCH 7/8] Changed name element, fixed some smells --- .../Ext/Form/Module.bsl" | 28 ++++--------------- .../Ext/Module.bsl" | 2 +- .../Ext/Module.bsl" | 6 +++- ...0\265\320\275\321\202\320\276\320\262.xml" | 4 +-- 4 files changed, 13 insertions(+), 27 deletions(-) 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 83173359..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" @@ -153,8 +153,8 @@ нСтрока[ПрефиксКод + КлючЗначение.Ключ] = КлючЗначение.Значение; КонецЦикла; - Если Строка.Служебный_КоллизииИдентификаторов Тогда - нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов; + Если Строка.Служебный_ДублированиеИдентификаторов Тогда + нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов; Иначе нСтрока.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.РасхождениеЭлементаСКодом; КонецЕсли; @@ -165,8 +165,6 @@ Для Каждого КлючЗначение Из БазоваяСтруктура Цикл нСтрока[ПрефиксБаза + КлючЗначение.Ключ] = КлючЗначение.Значение; КонецЦикла; - Иначе - СообщитьОбОтсутствииЭлемента(Строка.ИдентификаторНастройки); КонецЕсли; КонецЦикла; @@ -191,7 +189,7 @@ Для Каждого Строка Из ТаблицаКонфликтов Цикл Стр = Таблица.Найти(Строка[ПрефиксКод + ИдентификаторНастройки], ИдентификаторНастройки); - Если Строка.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов Тогда + Если Строка.Ошибка = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов Тогда Таблица.Удалить(Стр); Продолжить; КонецЕсли; @@ -219,7 +217,7 @@ Модифицированность = Истина; Для Каждого Строка Из ТаблицаКонфликтов Цикл Если Строка.Ошибка = - ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов") Тогда + ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов") Тогда Продолжить; КонецЕсли; Строка.ЗаменитьЭлементомИзКода = ЗначениеОтметки; @@ -239,26 +237,10 @@ ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаКонфликтов.Ошибка"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.КоллизииИдентификаторов; + ОтборЭлемента.ПравоеЗначение = Перечисления.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов; Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); КонецПроцедуры -#Область СообщенияОСобытии - -&НаСервере -Процедура СообщитьОбОтсутствииЭлемента(Идентификатор) - - ТекстСообщения = НСтр("ru = 'Элемент ''%1'' отсутствует в базе!'; - |en = 'The element ''%1'' is missing from the database!'"); - ТекстСообщения = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстСообщения, - Идентификатор); - пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ТекстСообщения); - -КонецПроцедуры - -#КонецОбласти - #КонецОбласти 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 b324befc..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" @@ -702,7 +702,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\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 7dc17024..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" @@ -49,12 +49,14 @@ ИсходнаяТаблица = ТаблицаПредопределенныхЭлементов(Менеджер); КонецЕсли; - ИсходнаяТаблица.Колонки.Добавить("Служебный_КоллизииИдентификаторов", Новый ОписаниеТипов("Булево")); + ИсходнаяТаблица.Колонки.Добавить("Служебный_ДублированиеИдентификаторов", Новый ОписаниеТипов("Булево")); Возврат ИсходнаяТаблица; КонецФункции +#Область ЗаполнениеДанных + // Заполняет таблицу предопределенных элементов справочника // ПланыВидовХарактеристикСсылка.пбп_ПредопределенныеЗначения. // @@ -214,6 +216,8 @@ КонецПроцедуры +#КонецОбласти + // Возвращает колонки таблицы предопределенных элементов. // // Параметры: 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" index 61720486..f2503b67 100644 --- "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" @@ -40,11 +40,11 @@ - КоллизииИдентификаторов + ДублированиеИдентификаторов ru - Коллизии идентификаторов + Дублирование идентификаторов From 73a3029e675ecf6b2ee5d6798336f0fcf4e28189 Mon Sep 17 00:00:00 2001 From: Denis Ushakov Date: Wed, 20 Nov 2024 12:36:30 +0300 Subject: [PATCH 8/8] updated image --- ...0\270\320\272\321\202\320\276\320\262.png" | Bin 36125 -> 30559 bytes 1 file changed, 0 insertions(+), 0 deletions(-) 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" index ad290f61f6e36a50d1f5d3691255c9ccb99a1791..cf3a149c081f10dcbc0f34e929f02f56139f301d 100644 GIT binary patch literal 30559 zcmce-cUV)|_czLnI?jv*XDlF9$AXA7=`|`UgESQtBtQ@Zq(;C10g_l|K&7cvX|X^M zY0?rP2~jCgs?tJ$Bti%gLWm)dLfQ?^{Jy{U-uJzK-1|QF`aC?IbF$Aq`>eh8TA$C_ zpY!0no8z`$)qYh{QrhP9=jn?|N}D>Alzue&`6tDdbM>)tivNCyz36yKsdhkPUU9N9 z25ToMDaEZgoj!Rf!H-SZ@>U}Vc0__W z@i@)DCZOfa!^00>{ouN&^F!4|-A!HQpI>X_YFzk|AiBLXbKE=W=h2zply?bnIpOL# zLt)$W_nE#(_~GtoSB}1Y3%tLsusf4c-@dnukL;pYz1M>2LSW; zy>5Q8`f+Cc>f0-H^kh_;GW^>;=sCpj;+@S}M`R0ZPr}+|E@^g~j%xet;`o~&=ZMg3 zb01jTF(+QNoo*iTfX4UNi_pAM=cfsfiw1c)vS6QI|1t!kkBwDd^>CSATw~Q`l{@G2 zciVzPX6-td+VFs>gw<#fE!=(WhHCPU>rWq7iy%n(U7&u1dumsjO1_)NHD*bCrU1`@ z)yFV;TGke-(kge>_+rhGoJepIQ1_Gsm+h+er{SJ&=F_`hgfjC&l$G7IVFkMRfrstE&uFAAj|H&x<$4dfD8_bC8$N zQa_H)YTKCpwl?ja9N(wOvz3sR7fv~`*qjB2qM6XD$(V)8XmQ1CLT31kFhz72b#DSp zd(=}`8ax@7f7Ovj{L@#P^);~=1FfTpuv(Z%Q#N+uuL8PxzcfT z`ACpuQ#Ycl{u6T^BQ&}7<0x?yr5zvlm@sB~jr?>C-Q?O15cgvuGzaq01CN_9sH4TqKP#>1Ud?h1e_Fb1J=E~Q zv<92iR2Ia@2qNkJw*|RgCD*Ou-JH=)%Fq|n7F<{mkRbMdpehBer@l8DOym^ zK6jI6k&0!j+I%K$&u#?7Gp_yGS_NXQLZ2X=B;XmZt7?y;BFHfv+bklizP;UmN#-{q z^-)`+!V*(JysT*WTKq?N{XPUNStD9DVY+{yJ<*|8m3~HhnFkmdDGH-o_0r2E2Z&vx z>JLR0KAIsRp4H?&?sIeBI>mY`^TN(9){BN4!W*?e51FtFE#W84!Fe>g~uMBo++&$q`;>jxSG9blje zh?XZPB$fI)D2U}%>WPYA2d*0G1CXY**N#aN@jjCm4Ow}`6rU{K;K_*xEdfyVlO6uKW~gf8xLId)5|xNj|==gTDN*Lf2wqFZeX)M z{WLQ8!-N`JR+#zZ27(E8UcJM85Sbj)e6Ez_ZS z%j)7ONjGnMo$n6j9C2EQ>g8jLQEpN0Sg9ds`CNT6qq;NQ6r>K&4$U{P65~IsZkP~? z24_#+pRjgM7X|9|k3p#!XWk}87O#B%nEJj}bmO-Kt0aeF3%{og42z$X!XY7xlM9shTZNcm z@g^{MLRMO`Zf&D%DTOBWol4^1*P}XFTk=kO_8n)}4ge#^W5!)J>plaiOY-F|-Q22( z@cc5bPr=oFR9N9xn`#({ihf^h?e0Wb^vixv{V#70Qok*rG`*`$dWW>pAm%i}>$FFdSaz^CATU{u zUIDY(vO8Y33+u6}Y9pBVW!BO&7QEmUjJz87fl;iPiqEsydcdyK0uERXyU_F9j$o`K z`HE|oHEK|@({mKQXeYmK`Ssa><$X70FK<3|fXW_32U6)m92#)f6+s5*lx9!V)mvYU zcO40sMyMjZiaz{j#wKGoQ%X|IBLV13Xc06&^{dW@d-W5;koHb zLw}IUgFxlKfRFCZId(eflxT~->e{8-?Fc`~e;OgX6~5}_kAJtNblBkin|*v|&#`D= zGGYE)Tx4<6Gq0%dqfyhP36B9T*+BV3_8yl4#Jf(=&WUj^$s>j9!u&94E5GG9qd7dS z$3)n(Lq9j|j~Y~IIXEFfU+_SvvdVg2v}dZE#xB%9yJ9sV$SIK*FM2$EK6bA`{QOhB z!rf+L3^F@LvK#siyNq4Z7-YjQ72SBV%p&!Xm)a_C=vAQX7O_%W`Tbvb+BsTl$^G3= z?o5cHXI=-ishR zCj_B=lbN6I@b4^Cj(~37Tu$Vq{#4#mtL?#*s@24%_a# zE5J#SsqMzambH$CsJ?r1%#v}-?O`Ew<<4`;P3JrYvJMm?4_f@EM~<3#q%{d?ASyK0&-;a1stX?#?0G6~LiKwVP! zz8Aw*_6(bym%sJrOdrH*T%diNTR!z!q-(9@Z1_=h($R^Y%1~u-l*y3sxHTfqWi0Vm zonlfWX8O&TgCLDF!Nhg$*bI49sE)-gYS@*8AQsumLHq= z$(N-%)?v{`Z?$*3Nv1yYxZqCgf6dk!zf>LAG8aOeg*JnNlH~W%++r_3b&CVF?QML@ zsBp(f?LxcyezJR*jC;AT;q$t7see8V6=P4sgZf^!6LL;IEI%3W7OO3ZR@3l%S)^a^w%xclyjP_Nuw z8;>NZCqAcaz=SDl_oc61D$=flJHS^bt&Ut!KDE*+i$NtwF|b#A(yzwE-AeGgdaYAr zt;lG~Pt>#6rqzw1pUBb8z$KGxEkA!adq4Q9zUBPO8rCa-kIC>HF*n@ad+M`M`txn) zIH~3ndA@+NR|j6Q^z9nxty*47OUyme)ecBlE!V|x6nLDkFu#~OU$*tvm`%wE;?Ww$@ zn+_1`wpnzWF*SC@W*#vxRqsbYW=R#gH*O}!o%E4^>JINt^$8_8>lGp1ap|n_0^dud zL`J!AP&g`*)RzLu67nX2**2Bxd6Uh%p$k=;!P=->(r{8Rqxs-~-)Pd+m;EG(rE%6q zv&|>x2y5HUyk*|Ed=&};r^jXjj)YZJQ!X1_rN{5Q&a$lV12n9~Cr3(_3cUwe^`jw> z*qJtqZb2GhO+DOtnD}pEX<-y+QUboF9s=L@RQ7SQQT@#Ikw1PZ-XJS<0&TD$&T z5>K^Sr&+0*abCvdjh?uf-O(aOJ`=h3L*B^<%OvNx&n<_rEwqN`1($k8iIGlKQAG_w zzA*li2^!JYH+f$+>@di4vgvv+dE4HWwU&t$dS*DG^iYNg3E~UqKkddHq@bU>gf-&e zV}$2NUdBxh@$uafbghktVdF2oER2u!D`q8>qK+=cm!XSMAAL!!Wl*XME$H#yUUy_A zx|o|x^1ueDj={fHE&fXBx!!lMw-vb1)_w|uYfb{+BJxIonc+M?%t%x1Z=_*zD`ge3 z^=A6P@-gFDS_3;?mV-2{2@ex$X-viklB@Hfy!gu(L7-O7=Ljo(#za9Fv~;3DTdyc( zK5#Opyqm0(=X|YGjJ;4Ni1p=}w4r}fQo8-QsPx*!?Eu4dl6qZbm7aI(V{N%bXP&xy zdPg|jt1S9rKy|hk|Eao#PYDdgb(jxa$Ldk(=s|5sM^h<143B#fplN|FYW0$luc8VY zAwI<=_OX5XB`BgFIJ_c zmIMuT_zp(BvYD4|hlG42s~>(`VK3;|cu%lhJIpHH2AvXw(j4?S?;dNCfbFe)$qBrE z6dmZ*Agw>xtU`|Wte8Oba~)^#_wtMJVejKd*YQh=op;hj7uD9#yB&0#`tZG%MZM*~ zl7h?zZI*9Ib8LB(ZGj?g?FVE8N2~{~6QQvePveBxoGZyzLd~@I1?Frx)>A;0>viV|K;)PF}KU-!^0_23Sxfy!c(a7r|)%+ z+xvHJ-MmiLpDl0fxKlGS9Zk*CXQXskNpLG~rXOzI-OwCmq4@bt^MBeM6)Cx{-=TD) zEad<9dPs;fN{BVg0?7VMW~$3=;6l9f%=BiC9_q)ACTS*?2(}Y^O^|`*(1^zVxUNg< z!wfDWY9nmh6=jDm1){J`Ewa{pQ@bvf*97 z1x*9H*x+o-fez}Swv)>4P0LqE*skYw<9cyZC&8Ch%QtH$9;}u2poI4@kp`&sF&a%) zUu`@LXU4;I;>NF~2K-v1mH73!aKV$HMv#jMAeX(hP67+W>~w!UefvB;>)aF5_c@u3 zj#{#4{`&MNHI5$0vi)NR)!`@-Bwr(SRZXi$e9P5eZ@BxH^#-aRZXbADv9IKy(@XdD z^SAppb{q=5a&Z0Fe@BYb<1+H2_2b)jzV0<}YW(Ae^^<$5Z$gB1hnxx@es`9w*9Y=k zxbYx+@kcAJV;!X?!K?*LZHx7Z8=Y!_(cQXo?n~$7$1@ZA=Mp|{(LRDQ6%!4Y)Ij1n zk3#!w4eql1{?1J5C7fFOytg5+ZqP3pA^B{h19_#0kxE7ze4vcn=-J1Pd+H8z=-ToG zg-K8eW}n-|OX?xT(Pz0~{JmGKnoYcnBp)hN>VAq{s^Di<5hkEl9dVM1==VU*QNPh@ zAwcZ*^I4K_@>*m)(FA@Or&hcEFwCHz$m8A3^%uMvG5+qGUTw>Zf{Xeux2Cv@3#R45 zu8OQp@3Rs_S#+eKB)>k#PiJ0g3X+=8aF7byeR!G#)Y(-*n_79A!%yfoB+h9D7uK$x z`+eO=Mg{K@QwVb(yQ)3{xrja8Y{0lxrm&=6F(QjS9>fxHr6_upG}jFugzpvnnMNRfPSnsV16to3zHQn zyLEy48jooI(mhjmA0Zji;(8)5?%c4MWi=9M&F|dgtkGMd7Cm!8=tjT)|e4-o}jsFxu^-HPJh6~r?hC#G-=P$Q^A84i_YK~xCI*LCds^+YY32Cd1Aqmw2Qsx~0{*tdi)KUAs+JE49EugHWPQ&1tmRXlBH(+MAx zLA7p2ZXH5F!%mXBgGS2UUJra^0$ZALx6>0>nS<7_(N~=k@iTIqk>b=Hz>?0@U|qaI z)@)pzIiqu|JyR~6+>f4|p!7jrLS8q|>u@s=@vEhroMbGc%ftjYgjv@s9ic@+IpVW-q2g)EUIx2?@LPbMcJ~{@`nq(^KEXd`{eD)3(9{X zSCp&48U&VYQ+5g=){jBXdOJtmH{j>XaNbZSAD1RIxnSLsggeFEjm_$7Kv8OVA z2}4H?$}jpzo;QnFvs3Q+s-Uyi2qAJ$d-p=YeOl$}p7ynHED>LXET~wCAF_6DFRc&C z1#yriMR!LlRRnlZaz<|-t#{6f1*7#^i^RS4cHaxzRGQ~O*)?cNxf6~nknDz^pZ+1&j8 zc0bj@*x{3?RTfDl)@1-DpyY3E_i+D4iLdLL8Y0X?0^Paf8->KJ;Gb3J5SSvJ^0qbG zX8-x$2(j_F*-b^f&?H;>9pRT>nl)joB>smAGdTa1C%BL4H0+kpThsjDX%bvgmb?Z) z5)K>4KCOyau>k2*z+T8|P%e;T0TyRSAj@ks@ku^yf~igd7FD!Q@fqjsK_&SYoST#7 zqcngHT;4*{bk?(Pcy&m-zp`DHGjx17BvbVE$s(taI~eC3PhWAQt7Bxr-1ynvc^uAr z@SC($iWCu=2kq44!g4zvX?4Dty%5rBhKO7GAu#BXOv`gHKAZ~dZA3*|>6S0!1jPBx zrDKB@@VJKWk+Qp7YmzShzV?y0kA;)()>+!N|W@EHlspG~MPf zfgimoZWtR{!VF4V8k9>X+9=EO^RzO1yQh6IHkE@UYedC-%|$2*Hfjx`hv*coho%DQ z5M6zLIbb0CvMM4#RtIx@!E}49m{>vrBF8Kd3p;(0e&!%b-eZDi zQ89wgLo^?D54{QrwaegPoYP9>!}Wt><&Zg!N?mq0#DbxVH;}oBaqZRJIb)xNt(VS* zQg>Z%mpCUe)Xx8{fH_X*W$!frIL33Z`x ztaMrzzu496*G}>wcuElY_Jn!-inXhIrud~zH>#qP?3BnUI`f4~)#j*Hz^mi7yyXxU zm+GOcp`_4KQ#P`_Dc;y@laF?Kk~!xR?x7+%!hgpCr0-hVzy2-3g-Ds>4L!9Mn?Njk z!QZfMdnCHTpx*;oI#iGn8pONo9_U>`qJ>-N4_kr*&rJ#!ohz>ScRm+43JfPfjR=P&17e^EQH@L?`QRnZ*7M57+`8;ZHp^W zlcwf1{VQ$VqQn3C%EC$JNe^;Rb5UI_Wn~3yr&^lg5Sk3YyS-zZq7vvUe)HSF2@a(b zc#=WJkRlEeH@iEw&(sQ~_c#OjfGH1?-S1Koa`uKTfyuZ&p*#F?w{VE zs9*iY?vb2eRuEQH)#{J#m5YfUUvQA3g-H+PyfF`~UzhG`cAZ=A2O4W1gNgH~%c7K0 zZEK-{VHmt(Q{{-Vtwl20w{(a(p>HU!e<^Ein}NV&iW#d@EH#(lR#8*R{Awr##pFQF z8xHy*kuK}u-k%??B4JyM;+G(Gtb&D;i?a&&8=1&iuY#1SRg^=Ang$Uvo`^Xl{6f@- zby?5wT17gW-Vd*I{t2)95w zu?bN=XL|1L^b^x9-yvKh2>YdOr1)&;Gk+odD)pd~8tfm7B}ur%a;?yu!jqF

YPM7faF_;h;UJy(-V^O1J`MDM?7^^c?O6%V=MgB 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 W?Smn%Av9oAEPB_Cu9aN1fAU{(eSSv( literal 36125 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%0ALSx3NanhCogY-&m)+QS$2N40 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