Skip to content

Commit

Permalink
Feature/rename common modules redirect 116 (#153)
Browse files Browse the repository at this point in the history
* Перереботана подсистема переопределения методов БСП

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  • Loading branch information
denisushakov and github-actions[bot] authored Dec 2, 2024
1 parent 19185ec commit a30f0e3
Show file tree
Hide file tree
Showing 105 changed files with 4,894 additions and 5,905 deletions.
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

0 comments on commit a30f0e3

Please sign in to comment.