Контроллер для Конвертации (Синхронизации) данных
Как-то раз надоело мне вручную контролировать успешность завершения синхронизаций. И решил запилить этот процесс как автоматический.
- Описание
- Подробнее
Описание
Что было в начале:- Десяток различных баз с разными конфигурациями. Базы менялись данными. Было около 20 различных комбинаций баз в обменах
- Конфигурацию "Конвертация данных 2" для настройки правил обмена между ними.
- Полу-ручной процесс контроля за проведением синхронизаций. Было расширение модуля обработки КонвертацияОбъектовИнформационныхБаз, которое отсылало письмо в случае сбоя при обмене. Но это не всегда работало и не во всех базах было сделано. Поэтому приходилось периодически заглядывать в каждую базу и проверять синхронизацию. Что и надоело.
Что было сделано:- Было проведено исследование баз. Выяснилось, что так как большая часть из них была сделана на БСП, то они содержали ВЕБ-сервис, который позволял запускать синхронизацию данных. В остальные БСП была внедрена.
- Было решено сделать единый центр, который бы контролировал все обмены между базами. За основу была взята конфигурация "Конвертация данных 2". В нее были включены нужные для работы автоматической синхронизации объекты.
Как это работает:- У вас должны быть базы для обмена.
- Базы должны быть опубликованы на Веб-сервере. Должен быть опубликован сервис Exchange_2_0_1_6. Через него осуществляется обмен данными.
- Серверы 1С должны уметь работать с СОМ-контроллером comcntr.dll. Через него осуществляется обновление правил обмена.
- Надо создать правила обмена. Эта часть работы Конвертации данных не изменилась – смотрите документацию. Если правила уже есть, то необходимо их загрузить в Конвертацию.
В любом случае далее я предполагаю, что Синхронизация данных (хотя бы через Сетевой каталог, а лучше в Прямом подключении) уже выполняется. Эта конфигурация для контроля этого процесса.
Внимание! В обработчики конвертаций «Перед выгрузкой данных» и «После загрузки данных» должны быть добавлены строки кода (см. ниже).
- Было проведено исследование баз. Выяснилось, что так как большая часть из них была сделана на БСП, то они содержали ВЕБ-сервис, который позволял запускать синхронизацию данных. В остальные БСП была внедрена.
- Было решено сделать единый центр, который бы контролировал все обмены между базами. За основу была взята конфигурация "Конвертация данных 2". В нее были включены нужные для работы автоматической синхронизации объекты.
Как это работает:- У вас должны быть базы для обмена.
- Базы должны быть опубликованы на Веб-сервере. Должен быть опубликован сервис Exchange_2_0_1_6. Через него осуществляется обмен данными.
- Серверы 1С должны уметь работать с СОМ-контроллером comcntr.dll. Через него осуществляется обновление правил обмена.
- Надо создать правила обмена. Эта часть работы Конвертации данных не изменилась – смотрите документацию. Если правила уже есть, то необходимо их загрузить в Конвертацию.
В любом случае далее я предполагаю, что Синхронизация данных (хотя бы через Сетевой каталог, а лучше в Прямом подключении) уже выполняется. Эта конфигурация для контроля этого процесса.
Внимание! В обработчики конвертаций «Перед выгрузкой данных» и «После загрузки данных» должны быть добавлены строки кода (см. ниже).
В любом случае далее я предполагаю, что Синхронизация данных (хотя бы через Сетевой каталог, а лучше в Прямом подключении) уже выполняется. Эта конфигурация для контроля этого процесса.
Внимание! В обработчики конвертаций «Перед выгрузкой данных» и «После загрузки данных» должны быть добавлены строки кода (см. ниже).
- Надо описать базы обмена. Это делается в справочнике «(МАС) Информационные базы».

— Конфигурация – какая конфигурация используется.
— Строка соединения – строка соединения с БД. Берется из 1С-стартера.
— Строка соединение WSDL – строка соединения с ВЕБ-публикацией сервиса Exchange_2_0_1_6, включая параметр WSDL.
— Пользователь – пользователь 1С базы. Я обычно даю таким пользователям полные права.
— Пароль – пароль пользователя 1С.
— Код узла общий – код узла синхронизации в базе. Он же «префикс информационной базы». Можно посмотреть на настройках синхронизации:

- Надо описать какие правила обмена (конвертации) и регистрации используются. Это делается в справочнике «(МАС) Пакеты правил обмена».

— Конвертация – какие правила обмена используются при обмене из базы-А в базу-Б.
— Обратная конвертация — какие правила обмена используются при обмене из базы-Б в базу-А.
— Правила регистрации – какие правила регистрации используются для плана обмена в базе-А.
— Обратные правила регистрации — какие правила регистрации используются для плана обмена в базе-Б. - Надо описать работу для обмена. Это делается в справочнике «(МАС) Настройки обмена».

— База-источник и База-приемник – описания баз которые обмениваются данными. Постфикс «источник» и «приемник» в названии полей условны. Происходит полный обмен данными между базами (см ниже).
— Пакет правил – описание правил обмена.
— Отдельный код узла источника, Отдельный код узла приемника – заполняется, если при настройки синхронизации в момент описания узлов ввели коды узлов, отличных от префикса ИБ (лучше так не делать…)
— Не сохранять данные обмена – не используется.
В случае необходимости можно задать расписание обмена данных.
Разделение справочников «Пакеты обмена» и «Настройки обмена» обусловлена тем, что у меня есть несколько разных баз у которых конфигурация одинаковая. Т.е. можно на один пакет правил повесить несколько настроек обменов разных баз. - Проверяем настройки:
- В настройке пакета данных нажимаем «Создать новый пакет». Создается новые правила обмена между узлами.
- Записываем элемент.
- Нажимаем «Обновить правила обмена». Произойдет обновление правил обмена в базах, связанных с обменом. О результатах этой работы можно судить по логу, который выдается после окончания работы процедуры:
Правильный результат — должна быть строка «Правила установлены!». Если ее нет, значит произошли ошибки…
Наиболее частая ошибка на этом шаге – сервер 1С не может работать через COM-контроллером comcntr.dll. Вторая ошибка – коды узлов синхронизации данных отличны от заданных в настройках ИБ или настроек обмена. - В настройках обмена нажимаем «Запустить обмен». Запустится процедура обмена, о результатах которой можно судить по логу, который выдается после окончания работы процедуры.
- Обработка ошибок обмена. В случае неудачного обмена данными формируется информационное письмо и отправляется оператору, который следит за обменами. Настройки почтовой отправки находятся в константах Конвертации.
Используемая процедура обмена:- При запуске процедуры происходит проверка доступности веб-сервисов Exchange_2_0_1_6. Если они не доступны, то процедура прерывается.
- Базе источнику по веб-сервису дается команда на создание файла выгрузки данных. Этот файл (точнее его содержимое) является результатом выполнения команды. Если возникла ошибка, то обмен прерывается, и мы смотрим файл лога.
- Базе приемнику по веб-сервису дается команда принять файл данных (из источника). Если возникла ошибка, то обмен прерывается, и мы смотрим файл лога.
- Базе приемнику по веб-сервису дается команда на создание файла выгрузки данных. Если возникла ошибка, то обмен прерывается, и мы смотрим файл лога.
- Базе источнику по веб-сервису дается команда принять файл данных (из приемника). Если возникла ошибка, то обмен прерывается, и мы смотрим файл лога.
- В файл лога добавляются данных о сообщениях при обмене.
- После обмена (не важно с ошибками или без) лог-файл сохраняется в регистре (МАС) Пакеты обмена.
Обработка результатов обмена
При обработке результатов обмена используются лог-файл, который генерируется в процессе обмена данными. При получении данных из базы к данному логу добавляется сообщения 1С, которые выходят клиенту обмена. Для того, чтобы наладить трансфер этих сообщений между базами и базой Конвертация существует каталог, куда сохраняются эти сообщения. Каталог настраивается в константе «(МАС) Каталог логов обмена» Конвертации. Каталог должен оканчиваться на «\» (обратный слеш)!
Об общих результатах работы можно судить, просто посмотрев данные регистра «(МАС) пакеты обмена»:

Красные – прерванные по каким-то причинам обмены.
Желтые – в результате приема данных вышли предупреждения.
Доработка правил обмена.В обработчике «Перед выгрузкой данных» можно (по желанию) добавить программный код
//ЮМС++ для шины данных
текСеанс = НомерСеансаИнформационнойБазы();
сеансыИБ = ПолучитьСеансыИнформационнойБазы();
Для Каждого сеансИБ Из сеансыИБ Цикл
Если сеансИБ.НомерСеанса = текСеанс Тогда
чНомерСоединения = сеансИБ.НомерСоединения;
Прервать;
КонецЕсли;
КонецЦикла;
_соединенияИБ = ПолучитьСоединенияИнформационнойБазы();
Для Каждого _соединениеИБ Из _соединенияИБ Цикл
Если _соединениеИБ.НомерСоединения = чНомерСоединения Тогда
Если _соединениеИБ.ApplicationName = "COMConnection" Тогда
ВызватьИсключение("Данный обмен можно запускать только из базы Srvr=""srvr-68"";Ref=""conversion2"";");
КонецЕсли;
КонецЕсли;
КонецЦикла;
//ЮМС--
В обработчике «Перед выгрузкой данных» можно (по желанию) добавить программный код
//ЮМС++ для шины данных
текСеанс = НомерСеансаИнформационнойБазы();
сеансыИБ = ПолучитьСеансыИнформационнойБазы();
Для Каждого сеансИБ Из сеансыИБ Цикл
Если сеансИБ.НомерСеанса = текСеанс Тогда
чНомерСоединения = сеансИБ.НомерСоединения;
Прервать;
КонецЕсли;
КонецЦикла;
_соединенияИБ = ПолучитьСоединенияИнформационнойБазы();
Для Каждого _соединениеИБ Из _соединенияИБ Цикл
Если _соединениеИБ.НомерСоединения = чНомерСоединения Тогда
Если _соединениеИБ.ApplicationName = "COMConnection" Тогда
ВызватьИсключение("Данный обмен можно запускать только из базы Srvr=""srvr-68"";Ref=""conversion2"";");
КонецЕсли;
КонецЕсли;
КонецЦикла;
//ЮМС--
