Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added automatic creation of predefined elements #144

Merged
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions docs/ПредопределенныеЗначения.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@
КонецПроцедуры
```

## Автоматическое создание новых элементов

Для автоматизации процесса заполнения предопределенных элементов необходимо модифицировать/добавить в расширение общий модуль **``ОбщегоНазначенияПереопределяемый``**. В процедуре **``ПриДобавленииСерверныхОповещений``** требуется добавить новое серверное оповещение.

**Пример кода для подключения через расширение**

```BSL
&После("ПриДобавленииСерверныхОповещений")
Процедура пбп_ПриДобавленииСерверныхОповещений(Оповещения)

// Создаем новое серверное оповещение для предопределённых значений
Оповещение = СерверныеОповещения.НовоеСерверноеОповещение("пбп_ПредопределенныеЗначения");

// Указываем модуль для получения и отправки сообщений
Оповещение.ИмяМодуляОтправки = ""; // В данном случае используется рег. задание для отправки
Оповещение.ИмяМодуляПолучения = "пбп_ПредопределенныеЗначенияСлужебныйКлиент";

// Настраиваем периодичность проверки (в секундах)
Оповещение.ПериодПроверки = 300;

// Добавляем новое оповещение в список оповещений
Оповещения.Вставить(Оповещение.Имя, Оповещение);

КонецПроцедуры
```

## Добавление новых элементов

В модуле **пбп_ПредопределенныеЗначенияПереопределяемый** значения добавляются через метод **Добавить()** коллекции **Результат**, которая представляет собой таблицу предопределённых значений. Каждая новая запись в этой таблице может быть настроена как группа путём установки свойства ЭтоГруппа в значение Истина.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,15 @@

КонецПроцедуры

// Заполнение предопределенных элементов, с выводом серверного оповещения при возникновении конфликтов.
//
Процедура ЗаполнениеПредопределенныхЭлементов() Экспорт

пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания(
Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов);

пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина);

КонецПроцедуры

#КонецОбласти
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт

Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
Описание.Версия = "1.0.3.12";
Описание.Версия = "1.0.4.12";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 разряд тоже нужно повысить до 13


// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
Expand Down Expand Up @@ -126,14 +126,7 @@

Процедура НачальноеЗаполнениеПредопределенныхЭлементов() Экспорт

Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();

Для Каждого Тип Из Типы Цикл
ПолноеИмя = Метаданные.НайтиПоТипу(Тип).ПолноеИмя();
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);

пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер);
КонецЦикла;
пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов();

КонецПроцедуры

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,47 @@
РегистрыСведений.пбп_СостоянияПредопределенныхЭлементов.СоздатьЗаписьРегистра(Объект, ЭтоГруппа, КлючиХеша);
КонецПроцедуры

// Заполнение предопределенных элементов, с возможностью серверного оповещения
// о существующих конфликтах при создании элементов.
//
// Параметры:
// ОтправитьСерверноеОповещение - Булево - В случае необходимости оповещения пользователей, установить флаг в Истину.
//
Процедура ЗаполнениеПредопределенныхЭлементов(ОтправитьСерверноеОповещение = Ложь) Экспорт

Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();

Для Каждого Тип Из Типы Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();

Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);

Если Не ОтправитьСерверноеОповещение Тогда
ИнициализироватьПредопределенныеЗначения(Менеджер);
Продолжить;
КонецЕсли;

ПредставлениеОбъекта = ?(ПустаяСтрока(ОбъектМетаданных.ПредставлениеОбъекта),
ОбъектМетаданных.Синоним,
ОбъектМетаданных.ПредставлениеОбъекта);

ТаблицаКонфликтныхЭлементов = ИнициализироватьПредопределенныеЗначения(Менеджер);

Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда
Результат = Новый Структура;
Результат.Вставить("ИмяОбъектаМетаданных", ПолноеИмя);
Результат.Вставить("ПредставлениеОбъекта", ПредставлениеОбъекта);

пбп_СерверныеОповещенияСлужебный.ОтправитьСерверноеОповещение(
"пбп_ПредопределенныеЗначения",
Результат,
Неопределено);
КонецЕсли;
КонецЦикла;

КонецПроцедуры
Comment on lines +376 to +415
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Добавьте обработку ошибок в новую процедуру!

Рекомендуется добавить обработку исключений при инициализации предопределенных значений для каждого типа, чтобы предотвратить прерывание всего процесса при ошибке с одним типом.

 Для Каждого Тип Из Типы Цикл
+    Попытка
         ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
         ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
         
         Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
         
         Если Не ОтправитьСерверноеОповещение Тогда
             ИнициализироватьПредопределенныеЗначения(Менеджер);
             Продолжить;
         КонецЕсли;
+    Исключение
+        пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(
+            СтрШаблон("Ошибка при обработке типа %1: %2", Тип, ОписаниеОшибки()));
+        Продолжить;
+    КонецПопытки;
 КонецЦикла;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Заполнение предопределенных элементов, с возможностью серверного оповещения
// о существующих конфликтах при создании элементов.
//
// Параметры:
// ОтправитьСерверноеОповещение - Булево - В случае необходимости оповещения пользователей, установить флаг в Истину.
//
Процедура ЗаполнениеПредопределенныхЭлементов(ОтправитьСерверноеОповещение = Ложь) Экспорт
Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();
Для Каждого Тип Из Типы Цикл
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Если Не ОтправитьСерверноеОповещение Тогда
ИнициализироватьПредопределенныеЗначения(Менеджер);
Продолжить;
КонецЕсли;
ПредставлениеОбъекта = ?(ПустаяСтрока(ОбъектМетаданных.ПредставлениеОбъекта),
ОбъектМетаданных.Синоним,
ОбъектМетаданных.ПредставлениеОбъекта);
ТаблицаКонфликтныхЭлементов = ИнициализироватьПредопределенныеЗначения(Менеджер);
Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда
Результат = Новый Структура;
Результат.Вставить("ИмяОбъектаМетаданных", ПолноеИмя);
Результат.Вставить("ПредставлениеОбъекта", ПредставлениеОбъекта);
пбп_СерверныеОповещенияСлужебный.ОтправитьСерверноеОповещение(
"пбп_ПредопределенныеЗначения",
Результат,
Неопределено);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Заполнение предопределенных элементов, с возможностью серверного оповещения
// о существующих конфликтах при создании элементов.
//
// Параметры:
// ОтправитьСерверноеОповещение - Булево - В случае необходимости оповещения пользователей, установить флаг в Истину.
//
Процедура ЗаполнениеПредопределенныхЭлементов(ОтправитьСерверноеОповещение = Ложь) Экспорт
Типы = Метаданные.ОпределяемыеТипы.пбп_ПредопределенныеВсеСсылкиПереопределяемый.Тип.Типы();
Для Каждого Тип Из Типы Цикл
Попытка
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
Менеджер = пбп_ОбщегоНазначенияСлужебный.МенеджерОбъектаПоПолномуИмени(ПолноеИмя);
Если Не ОтправитьСерверноеОповещение Тогда
ИнициализироватьПредопределенныеЗначения(Менеджер);
Продолжить;
КонецЕсли;
ПредставлениеОбъекта = ?(ПустаяСтрока(ОбъектМетаданных.ПредставлениеОбъекта),
ОбъектМетаданных.Синоним,
ОбъектМетаданных.ПредставлениеОбъекта);
ТаблицаКонфликтныхЭлементов = ИнициализироватьПредопределенныеЗначения(Менеджер);
Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда
Результат = Новый Структура;
Результат.Вставить("ИмяОбъектаМетаданных", ПолноеИмя);
Результат.Вставить("ПредставлениеОбъекта", ПредставлениеОбъекта);
пбп_СерверныеОповещенияСлужебный.ОтправитьСерверноеОповещение(
"пбп_ПредопределенныеЗначения",
Результат,
Неопределено);
КонецЕсли;
Исключение
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(
СтрШаблон("Ошибка при обработке типа %1: %2", Тип, ОписаниеОшибки()));
Продолжить;
КонецПопытки;
КонецЦикла;
КонецПроцедуры


#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="adfac3a1-5e05-4ed6-bb3c-9b1cb6533f85">
<Properties>
<Name>пбп_ПредопределенныеЗначенияСлужебныйКлиент</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Предопределенные значения служебный клиент</v8:content>
</v8:item>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Working with dialogues server</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>true</ClientManagedApplication>
<Server>false</Server>
<ExternalConnection>false</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт

Если ТипЗнч(Результат) = Тип("Структура") Тогда
Текст = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Существуют конфликты предопределенных элементов ''%1'''"),
Результат.ПредставлениеОбъекта);
Пояснение = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Разрешить конфликты предопределенных элементов ''%1'''"),
Результат.ПредставлениеОбъекта);

ПоказатьОповещениеПользователя(
Текст,
НавигационнаяСсылкаОбъекта(Результат.ИмяОбъектаМетаданных),
Пояснение,
БиблиотекаКартинок.ДиалогВосклицание,
СтатусОповещенияПользователя.Важное,
"КонфликтыПредопределенныхЭлементов_" + Результат.ИмяОбъектаМетаданных);
КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Возвращает навигационную ссылку для оповещений.
//
// Параметры:
// ИмяОбъекта - Строка - Полное имя объекта метаданных
//
// Возвращаемое значение:
// Строка - навигационная ссылка
//
Функция НавигационнаяСсылкаОбъекта(ИмяОбъекта)
Возврат "e1cib/list/" + ИмяОбъекта;
КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.16">
<CommonModule uuid="24649f7c-7f4c-4bd4-af89-56164a1d2963">
<Properties>
<Name>пбп_СерверныеОповещения</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Серверные оповещения (пбп)</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>true</ClientOrdinaryApplication>
<ServerCall>false</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// серверные оповещения: аналог модуля БСП

#Область ПрограммныйИнтерфейс

#Область МетодыАналогиБСП

// Аналог метода БСП. Добавляет серверное оповещение в очередь для доставки на клиент.
// Оповещение доставляется через систему взаимодействия,
// либо забирается в рамках общего серверного вызова.
//
// Параметры:
// ИмяОповещения - Строка - смотри НовоеСерверноеОповещение.Имя.
//
// Результат - Произвольный - произвольное сериализуемое значение,
// которое будет отправлено в составе оповещения на клиент
// (должны быть как можно меньшего размера, желательно не более 1 Кб).
//
// Адресаты - Неопределено - все пользователи (и соответственно все сеансы).
// Если указано незаполненное соответствие, тогда возврат.
// - Соответствие из КлючИЗначение:
// * Ключ - УникальныйИдентификатор - идентификатор пользователя ИБ.
// * Значение - Массив из см. СерверныеОповещения.КлючСеанса
//
// ОтправитьСразу - Булево - если Истина, попытаться сразу отправить сообщение
// через систему взаимодействия перед добавлением в очередь.
// Отправка сразу не допускается из обработчиков ПриОтправкеСерверногоОповещения.
// Следует учесть (особенно при вызове в транзакции), что неудачное обращение
// к системе взаимодействия может занимать (3-5 сек)*2, а удачное не менее (50 мс)*2.
//
Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт

КонецПроцедуры

#КонецОбласти

#КонецОбласти
Loading
Loading