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

Feature/rename common modules redirect 116 #153

Merged
merged 9 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from 8 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
2 changes: 1 addition & 1 deletion docs/images/ERArchitectureIntegrationsSubsystem.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
110 changes: 65 additions & 45 deletions docs/ПереопределениеМетодовБСП.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
# Подисистема аналог библиотеки стандартных подсистем, для переопределения методов БСП

# Подисистема, аналог библиотеки стандартных подсистем, для переопределения методов БСП

## Назначение

Данная подсистема предназначена для упрощения работы с методами библиотеки стандартных подсистем (БСП) при их отсутствии. Она позволяет переопределять методы БСП с использованием аналогичных модулей и обеспечивает поддержку переадресации вызовов для корректной работы системы.

## 1. Использование общих модулей для переадресации методов
Для переадресации методов используются общие модули-аналоги в названии которых содержится "Служебный", пример: "пбп_ОбщегоНазначенияСлужебный". В случае отсутствия библиотеки стандартных подсистем(БСП), используются аналоги модулей и методов БСП.
Для переадресации методов используются общие модули **``пбп_Переадресация``**, **``пбп_ПереадресацияКлиент``**, **``пбп_ПереадресацияКлиентПовтИсп``**, и т.д. В случае отсутствия библиотеки стандартных подсистем(БСП) используются аналоги методов БСП.

Пример вызова серверной процедуры:

```BSL
&НаСервере
Процедура СохранитьКаталогИсходногоКодаКонфигурации(Каталог)
пбп_ОбщегоНазначенияСлужебный.ХранилищеОбщихНастроекСохранить(
пбп_Переадресация.ХранилищеОбщихНастроекСохранить(
КлючОбъекта(),
"пбп_ПользовательскиеФункции_КаталогИсходногоКода",
Каталог);
Expand All @@ -23,49 +27,65 @@
ИмяСобытия = НСтр("ru = 'Очистка истории интеграции'");
ТекстОшибки = СтрШаблон("Не удалось удалить запись истории интеграции %1", ВыборкаДетальныеЗаписи.Ссылка);

пбп_ЖурналРегистрацииСлужебный.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
пбп_Переадресация.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
КонецПопытки;
КонецПроцедуры
```

## 2. Добавление новых методов-аналогов БСП
### 2.1 Поиск или создание внутренних модулей, аналогичных модулям БСП
Найти внутренний модуль, с аналогичным названием и свойствами в БСП, если модуль отсутствует необходимо добавить новый, в имени должно содержатся "Служебный" (согласно общей концепции переопределения методов БСП).

Пример: "пбп_ОбщегоНазначенияСлужебный", "пбп_ЖурналРегистрацииСлужебный".

Методы располагаются в области "ПереадресацияМетодов", в описание метода указать см. пбп_ИмяМодуля.ИмяМетода.

```BSL
#Область ПереадресацияМетодов

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

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

Если модуль-аналог новый добавить функцию в области "СлужебныеПроцедурыИФункции", где пбп_ИмяМодуля для серверных модулей "пбп_ОбщегоНазначенияПовтИсп.", для клиентских "пбп_ОбщегоНазначенияКлиент"

```BSL
Функция ПолучитьМодуль()
Возврат пбп_ИмяМодуля.ОбщийМодуль(ИмяМодуляБСП, ИмяМодуляАналогаБСП);
КонецФункции
```
### 2.2 Создание методов в модуле-аналоге
Пример: "пбп_ОбщегоНазначения". Методы располагаются в области "МетодыАналогиБСП", описание метода начинать с "Аналог метода БСП."

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

// Аналог метода БСП. Описание
//
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
// ...
КонецПроцедуры
## 2. Структура общих модулей переадресации

1. Область **``ПереадресацияМетодов``**: в ней располагаются методы аналоги.
2. Внутри этой области расположены именованные области по имени общих модулей, из которых взят аналог метода.
3. В области **``СлужебныеПроцедурыИФункции``** -> **``МодульПереадресацииПоПодсистемам``**, необходимо добавить функцию переадресации общего модуля, если она отсутствует.

Пример функции:
```BSL
Функция ПереадресацияМодуля<ИмяОбщегоМодуляБСП>()
Возврат пбп_ПереадресацияПовтИсп.ОпределитьМодульПереадресации(<ИмяОбщегоМодуляБСП>);
КонецФункции
```

4. В начале каждого метода необходимо добавить фрагмент кода для работы механизма переадресации.

### Для процедур
```BSL
Результат = ПереадресацияМодуля<ИмяОбщегоМодуляБСП>();
Если Результат.МодульСуществует Тогда
Результат.Модуль.<ИмяМетода>(Параметры);
Возврат;
КонецЕсли;
```

### Для функция
```BSL
Результат = ПереадресацияМодуля<ИмяОбщегоМодуляБСП>();
Если Результат.МодульСуществует Тогда
Возврат Результат.Модуль.<ИмяМетода>(Параметры);
КонецЕсли;
```

5. Методы располагаются в области **``ПереадресацияМетодов``**, и в описании метода указывается ``// Аналог метода БСП.``

Пример:

```BSL
#Область ПрограммныйИнтерфейс
#Область ПереадресацияМетодов
#Область ОбщегоНазначения

#КонецОбласти
```
// Аналог метода БСП.
// <Описание>
//
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
Результат = ПереадресацияМодуляОбщегоНазначения();
Если Результат.МодульСуществует Тогда
Результат.Модуль.ОбщегоНазначения(ИмяМетода, Параметры);
Возврат;
КонецЕсли;

<Продолжение>
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
```
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
Возврат;
КонецЕсли;

Если Не пбп_ОбщегоНазначенияСлужебныйКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
Если Не пбп_ПереадресацияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ЭтоНовый", Ложь) Тогда
пбп_ОбщегоНазначенияСервер.ОбработатьСуществующийПредопределенныйЭлемент(ЭтотОбъект);
КонецЕсли;

Expand All @@ -88,7 +88,7 @@

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

Если МассивРегламентныхЗаданий.Количество() Тогда
РегламентноеЗадание = МассивРегламентныхЗаданий[0];
Expand All @@ -107,11 +107,11 @@

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

Если МассивРегламентныхЗаданий.Количество() Тогда
РегламентноеЗадание = МассивРегламентныхЗаданий[0];
пбп_РегламентныеЗаданияСервер.УдалитьЗадание(РегламентноеЗадание.УникальныйИдентификатор);
пбп_Переадресация.УдалитьЗадание(РегламентноеЗадание.УникальныйИдентификатор);
КонецЕсли;

КонецПроцедуры
Expand Down
Loading