This commit is contained in:
artem 2025-10-16 21:19:24 +05:00
parent 61a9d23504
commit bb325a338a
17 changed files with 294 additions and 15 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -2,29 +2,31 @@
title: Подключение БСП к собственной конфигурации
slug: общие-бсп-подключение-к-подсистемам/подключение-бсп-к-собственной-конфигурации
---
# Для полной интеграции БСП, не частичной
1. Создаем пустую конфигурацию
2. Запускаем в пользовательском режиме
3. Открываем обработку ПервоеВнедрениеБСП.epf из папки шаблона БСП (`%AppData%\1C\1cv8\tmplts\1c\SSL\3_1_9_144\ExtFiles`)
4. В обработке ничего не выбираем, оставляем только базовую функциональность
5. Сохраняем в файл
6. Сравниваем и объединяем нашу пустую конфигурацию с конфигурацией из шаблона БСП `1Cv8.cf`. Полную замену не делаем, ставим на поддержку (опционально)
В окне снимаем все флажки и загружаем настройки, сохраненные в п.5
1. Устанавливаем нужную версию БСП в шаблоны
2. Запускаем нужную конфигурацию в пользовательском режиме
3. Открываем обработку `ПервоеВнедрениеБСП.epf` из папки шаблонов БСП (по умолчанию `%AppData%\1C\1cv8\tmplts\1c\SSL\<Версия_БСП>\ExtFiles`)
4. В обработке выбираем нужные подсистемы
5. Сохраняем настройки в файл
6. Сравниваем и объединяем нашу конфигурацию с конфигурацией из шаблона БСП `1Cv8.cf`. Полную замену не делаем, ставим на поддержку (опционально). Загружаем настройки, сохраненные в п.5
1. Назначаем имя, поставщика и версию конфигурации
2. Копируем общий модуль `ОбновлениеИнформационнойБазыБСП`, переименовываем (`ОбновлениеИнформационнойБазыСигма`, например). В нем редактируем процедуру `ПриДобавленииПодсистемы` и удаляем код из всех остальных методов модуля
2. Копируем общий модуль `ОбновлениеИнформационнойБазыБСП`, переименовываем (`ОбновлениеИнформационнойБазыСигма`, например). В нем редактируем процедуру `ПриДобавленииПодсистемы` и удаляем код из всех остальных методов модуля.
**Сами методы не удалять**
```bsl
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "Сигма"; // ИмяКонфигурации
Описание.Версия = "1.0.1.1"; //ВерсияКонфигурации
//Описание.ИдентификаторИнтернетПоддержки = "SSL";
//Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
//Описание.ПараллельноеОтложенноеОбновлениеСВерсии = "2.3.3.0";
//Описание.ЗаполнятьДанныеНовыхПодсистемПриПереходеСДругойПрограммы = Истина;
Описание.РежимВыполненияОтложенныхОбработчиков = "Параллельно";
Описание.ЗаполнятьДанныеНовыхПодсистемПриПереходеСДругойПрограммы = Истина;
КонецПроцедуры
```
9. В модуле `ПодсистемыКонфигурацииПереопределяемый` в методе `ПриДобавленииПодсистем` пишем
9. В модуле `ПодсистемыКонфигурацииПереопределяемый` в методе `ПриДобавленииПодсистем` добавляем наш модуль
```bsl
МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыСигма")
```
10. Запускаем в пользовательском режиме, ожидаем завершения отложенных обработчиков обновления

View File

@ -0,0 +1,277 @@
---
title: Реализация РИБ в базах с БСП
slug: общие-обмен-данными-планы-обмена-распределенная-информационная-база-реализация/реализация-риб-в-базах-с-бсп
---
## Требуемые подсистемы БСП
- Базовая функциональность
- Групповое изменение объектов
- Дополнительные отчеты и обработки
- Загрузка данных из файла
- Настройки программы
- Обмен данными
- Обновление версии ИБ
- Подключаемые команды
- Поиск и удаление дублей
- Пользователи
- Префиксация объектов
- Работа с файлами
- Регламентные задания
- Удаление помеченных объектов
См. `Общие` - `(БСП) Подключение к подсистемам` - `Подключение БСП к собственной конфигурации`
## Подключаем объекты к подсистеме "Префиксация объектов"
См. `Общие` - `(БСП) Подключение к подсистемам` - `Подключение к подсистеме Префиксация объектов`
## Создаем план обмена
> **ВАЖНО!** Значения свойств плана обмена строго рекламентированы и описаны в документации ИТС
| Свойство | Значение |
|-------------|-------------|
|Имя| Не регламентируется. Укажем "Полный" |
|Длина кода| 9 (36 для организации автономной работы в модели сервиса.) |
|Длина наименования| 150 |
|Распределенная информационная база| Да |
|Включать расширения конфигурации|Да|
> Из ИТС: Для планов обмена РИБ с фильтрами рекомендуется исключить все объекты метаданных подсистем `Обмен данными` и `Обмен данными в модели сервиса`, кроме констант `ДанныеДляОтложенногоОбновления` и `АдресДляВосстановленияПароляУчетнойЗаписи`. Константу `АдресДляВосстановленияПароляУчетнойЗаписи` рекомендуется включать **только в состав начального образа подчиненного узла** распределенной ИБ.
**Про расширения**
> Из ИТС: Важно!
Для разработчиков прикладных решений важно понимать, что если свойство `Включать расширение конфигурации` изменяется на `Истина` в существующем плане обмена РИБ, то необходимо пользователям донести следующую информацию: В работающих обменах РИБ, на момент включения свойства `Включать расширение конфигурации` в главном и периферийных узлах не должно быть расширений, меняющих структуру данных. Также следует удалить из периферийных информационных баз расширения, имена которых совпадают с расширениями в главном узле (кроме патчей). Добавлять расширения можно после обновления всех периферийных баз.
### Настройка состава плана обмена
В созданном плане обмена включаем **ВСЕ объекты БСП** в `Состав` и для объектов **запрещаем авторегистрацию**. Исключаем из состава объекты подсистем `ОбменДанными` и `ОбменДаннымиВМоделиСервиса` кроме константы `НастройкиПодчиненногоУзлаРИБ`.
> Проще всего скопировать план обмена `_ДемоОбменВРаспределеннойИнформационнойБазе` из демо-базы БСП в свою конфигурацию и перенести флажки из БСП-шного плана в свой. При копировании из состава будут удалены все объекты, которые не будут найдены в нашей базе, поэтому останется только то, что действительно нужно. Нюанс - модуль менеджера, реквизиты и формы нужно будет удалить и создать заново.
![описание](/obmen-dannymi/rib/5.png)
## Подключаем план обмена к подсистеме "ОбменДанными"
> Порядок для БСП версии 3.1.11. Актуальную информацию смотри на ИТС
1. В общем модуле `ОбменДаннымиПереопределяемый` в тело процедуры `ПолучитьПланыОбмена` добавляем наш план обмена
```bsl
Процедура ПолучитьПланыОбмена(ПланыОбменаПодсистемы) Экспорт
ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.Полный);
КонецПроцедуры
```
2. В состав определяемого типа `ПланыОбменаБСД` добавляем ссылку на план обмена
3. В модуле менеджера плана обмена прописываем
```bsl
#Область ДляВызоваИзДругихПодсистем
// СтандартныеПодсистемы.ОбменДанными
// Заполняет настройки, влияющие на использование плана обмена.
//
// Параметры:
// Настройки - см. ОбменДаннымиСервер.НастройкиПланаОбменаПоУмолчанию
//
Процедура ПриПолученииНастроек(Настройки) Экспорт
УстановитьПривилегированныйРежим(Истина);
Настройки.НазначениеПланаОбмена = "РИБ";
// Для обеспечения возможности дополнительной настройки в методе ниже
Настройки.Алгоритмы.ПриПолученииОписанияВариантаНастройки = Истина;
КонецПроцедуры
// Заполняет набор параметров, определяющих вариант настройки обмена.
//
// Параметры:
// ОписаниеВарианта - см. ОбменДаннымиСервер.ОписаниеВариантаНастройкиОбменаПоУмолчанию
// ИдентификаторНастройки - Строка - идентификатор варианта настройки обмена.
// ПараметрыКонтекста - см. ОбменДаннымиСервер.ПараметрыКонтекстаПолученияОписанияВариантаНастройки
//
Процедура ПриПолученииОписанияВариантаНастройки(ОписаниеВарианта, ИдентификаторНастройки, ПараметрыКонтекста) Экспорт
// Это нужно для оформления способа обмена в форме настроек синхронизации
// см. картинку ниже
КраткаяИнформацияПоОбмену = НСтр("ru = 'Позволяет настроить новый узел распределенной информационной базы.'");
ПодробнаяИнформацияПоОбмену = "ПланОбмена.Полный.Форма.ПодробнаяИнформация";
ОписаниеВарианта.КраткаяИнформацияПоОбмену = КраткаяИнформацияПоОбмену;
ОписаниеВарианта.ПодробнаяИнформацияПоОбмену = ПодробнаяИнформацияПоОбмену;
ОписаниеВарианта.ЗаголовокКомандыДляСозданияНовогоОбменаДанными = НСтр("ru = 'Распределенная информационная база'");
ОписаниеВарианта.ЗаголовокУзлаПланаОбмена = НСтр("ru = 'Узел распределенной информационной базы'");
ОписаниеВарианта.ИмяФормыСозданияНачальногоОбраза = "ОбщаяФорма.СозданиеНачальногоОбразаСФайлами";
КонецПроцедуры
// Конец СтандартныеПодсистемы.ОбменДанными
#КонецОбласти
```
![описание](/obmen-dannymi/rib/6.png)
## Создаем формы плана обмена (узла и списка)
### Форма узла
Создаем форму узла плана обмена и реализуем обработчики событий `ПриЗакрытии` и `ПриЗаписиНасервере`
```bsl
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
// СтандартныеПодсистемы.ОбменДанными
Оповестить("ЗакрытаФормаУзлаПланаОбмена");
// Конец СтандартныеПодсистемы.ОбменДанными
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// СтандартныеПодсистемы.ОбменДанными
ОбменДаннымиСервер.ФормаУзлаПриЗаписиНаСервере(ТекущийОбъект, Отказ)
// Конец СтандартныеПодсистемы.ОбменДанными
КонецПроцедуры
```
### Форма списка
Просто создаем, никакого кода не требуется пока
## Создаем подписки на события для регистрации изменений
> **ВАЖНО!** Для каждого плана обмена создается свой набор подписок на события. Подписки на события именуются по шаблону `<ИмяПланаОбмена><ВидПодписки>`
> **ВАЖНО 2!** В состав подписок на события включаем **только те объекты, которые фигурируют в составе плана обмена**
Варианты видов подписки:
| Вид подписки | Источник | Событие | Процедура обработчика события |
|--------------------------|----------------------------------------------------------------------------------------------|------------------|----------------------------------|
| РегистрацияДокумента | Элементы типа `ДокументОбъект` | Перед записью | `ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюДокумента("<ИмяПланаОбмена>", Источник, Отказ, РежимЗаписи, РежимПроведения);` |
| Регистрация | Элементы типов: `СправочникОбъект`, `ПланВидовХарактеристикОбъект`, `ПланСчетовОбъект`, `ПланВидовРасчетаОбъект`, `БизнесПроцессОбъект`, `ЗадачаОбъект` | Перед записью | `ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью("<ИмяПланаОбмена>", Источник, Отказ);` |
| РегистрацияНабора | Элементы типов: `РегистрСведенийНаборЗаписей`, `РегистрНакопленияНаборЗаписей`, `РегистрБухгалтерииНаборЗаписей` | Перед записью | `ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюРегистра("<ИмяПланаОбмена>", Источник, Отказ, Замещение);` |
| РегистрацияНабораРасчета | Элементы типа `РегистрРасчетаНаборЗаписей` | Перед записью | `ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюРегистра("<ИмяПланаОбмена>", Источник, Отказ, Замещение);` |
| РегистрацияКонстанты | Элементы типа `КонстантаМенеджерЗначения` | Перед записью | `ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюКонстанты("<ИмяПланаОбмена>", Источник, Отказ);` |
| РегистрацияУдаления | Элементы типов: `ДокументОбъект`, `СправочникОбъект`, `ПланВидовХарактеристикОбъект`, `ПланСчетовОбъект`, `ПланВидовРасчетаОбъект`, `БизнесПроцессОбъект`, `ЗадачаОбъект` | Перед удалением | `ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередУдалением("<ИмяПланаОбмена>", Источник, Отказ);` |
Определяем, какими объектами обмениваемся и реализуем соответствующие подписки на собыития
Методы, указанные выше в таблицу мы не сможем явно указать в поле "Обработчик" подписки на события, т.к. **требуемя сигнатура не подходит**
| Расположение | Сигнатура |
|-------------|-------------|
| В модуле объекта |`Процедура ПередЗаписью(Отказ)` |
| Для подписки на событие |`Процедура ПередЗаписью(Источник, Отказ)` |
| Для подсистемы "ОбменДанными" |`Процедура ПередЗаписью("ИмяПланаОбмена", Источник, Отказ)` |
Поэтому нужно создать собственные `процедуры-обертки` для указания их в подписках на событие
Создаем общий модуль, в котором определяем `обертки`, например:
```bsl
#Область ПрограммныйИнтерфейс
Процедура ПолныйРегистрацияПередЗаписью(Источник, Отказ) Экспорт
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью("Полный", Источник, Отказ);
КонецПроцедуры
Процедура ПолныйРегистрацияДокументаПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюДокумента("Полный", Источник, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ПолныйРегистрацияУдаленияПередУдалением(Источник, Отказ) Экспорт
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередУдалением("Полный", Источник, Отказ);
КонецПроцедуры
#КонецОбласти
```
**ВАЖНО**. для регистра сведений `СоответствияОбъектовИнформационныхБаз`и константы `НастройкиПодчиненногоУзлаРИБ` **подписки на события не создаем**
## Настраиваем общие команды
В тип параметра следующих команд добавляем ссылку на наш план обмена:
- `Синхронизировать`
- `НастройкиПодключения`
- `ЗагрузитьПравилаРегистрацииОбъектов`
- `СценарииСинхронизации`
- `СобытияОтправки`
- `СобытияПолучения`
- `СоставОтправляемыхДанных`
- `УдалитьНастройкуСинхронизации`
## Запускаем обновление версии
Нужно запустить пользовательский режим с параметром запуска `/C ЗапуститьОбновлениеИнформационнойБазы` (`с` латинская), чтобы перезаполнился справочник `ИдентификаторыОбъектовМетаданных`
Если не выполнить это, то при запуске подчиненного узла из начального образа будет ошибка
![описание](/obmen-dannymi/rib/13.png)
## Настраиваем в пользовательском режиме
![описание](/obmen-dannymi/rib/7.png)
### Выбор типа подключения
![описание](/obmen-dannymi/rib/8.png)
### Настроить параметры подключения
Для вида "через каталог"
![описание](/obmen-dannymi/rib/9.png)
### Настроить общие параметры синхронизации
![описание](/obmen-dannymi/rib/10.png)
### Настроить правила отправки и получения
Тут просто записать и закрыть
![описание](/obmen-dannymi/rib/11.png)
### Создать начальный образ подчиненного узла РИБ
Указываем расположение, где будет создана подчиненная база
![описание](/obmen-dannymi/rib/12.png)
## Запускаем подчиненный узел в пользовательском режиме
База обновится
![описание](/obmen-dannymi/rib/14.png)
Затем откроется окно настройки синхронизации. Нужно донастроить последние пункты. А по сути их просто проверить
![описание](/obmen-dannymi/rib/15.png)
![описание](/obmen-dannymi/rib/16.png)
![описание](/obmen-dannymi/rib/17.png)
Настройки синхронизации добавлены автоматически
![описание](/obmen-dannymi/rib/18.png)
## Проверка обменов
После создания и настройки распределенных баз в форме настроек нажимаем на кнопку `Синхноризировать`
Файлы синхронизации создаются по шаблону `Message_<КодИсточника>_<КодПриемника>`. Например `Message_М1_ЦБ`.
Синхронизация идет в 2 этапа:
- Чтение данных. Система выполняет загрузку изменений в подчиненных базах из каталога обмена. Если в каталоге обмена не будет найдено файла из подчиненной базы или это файл уже был считан ранее, то в колонке `Данные получены` будет отображаться красный кружок
- Выгрузка данных -система выгружает все изменения для выделенного узла
![описание](/obmen-dannymi/rib/19.png)