Пример 4: Настройка синхронизации данных между информационными базами на платформе «1С:Предприятие» через «1С:Шину»
В данной статье будет показан пример использования «1С:Шины»для синхронизации данных между информационными базами на платформе «1С:Предприятие».
- В среде разработки «1С:Шины»:
- Создадите проект и настроите в нем процесс интеграции.
- Опубликуете проект на сервере как «Приложение».
- Создадите информационные системы, которые будут принимать участие в обмене.
- Включите информационные системы в состав процесса интеграции.
- Запустите процесс интеграции.
- Создадите демонстрационные базы «1С:Предприятия» и в каждой из этих баз:
- Создадите расширение для доработки конфигураций без снятия с поддержки.
- В расширении добавите сервис интеграции и реализуете механизмы формирования исходящих сообщений и обработки входящих.
- Добавите регламентные задания для взаимодействия с«1С:Шиной» по расписанию с помощью внешней обработки, чтобы не снимать конфигурации с поддержки.
- Подключите сервисы интеграции к «1С:Шине».
- Проверите работы обменов через «1С:Шину».
Создание проекта в «1С:Шине»
На этом этапе вы создадите в среде разработки «1С:Шины» проект с описанием схемы интеграции и опубликуете его на сервере «1С:Шины», создав приложение.
- Откройте панель управления.
- Нажмите

- Убедитесь, что выбраны варианты Из проекта и
Новый проект

- Задайте имя проекта — TestMag и нажмите
Tab. «1С:Шина» заполнит остальные
поля и включит режим разработки для создаваемого приложения.

- Выберите тип СУБД (в примере это будет Файловая СУБД) и
нажмите Создать.

- Новое приложение появится в списке со статусом Создается.
Через некоторое время статус приложения изменится на
Работает.

Добавление элемента проекта
На этом этапе вы откроете приложение в среде разработки и добавите в него элемент проекта — процесс интеграции.
- Чтобы открыть проект в среде разработки, нажмите
Разработать... в конце строки;

- «1С:Шина» откроет новую вкладку браузера для среды разработки
и запросит пароль. Введите пароль администратора, который вы создали при установке
сервера, и нажмите Войти;

- «1С:Шина» подготовит рабочую область, построит проект и
откроет его в среде разработки;

- Добавьте новый элемент проекта — процесс
интеграции. Для этого в представлении НАВИГАТОР
ПРОЕКТА нажмите правой кнопкой мыши на имя подсистемы
Основной, затем в контекстном меню выберите ;

- Выберите вид добавляемого элемента проекта — Процесс
Интеграции;

- Задайте имя создаваемого элемента — ОбменМагазиныТиповой
— и нажмите Ввод;

- «1С:Шина» создаст в проекте новый процесс интеграции и
откроет редактор для создания его схемы;

Редактирование схемы процесса интеграции
На этом этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем.
- Добавьте в схему группу участников. Для этого прокрутите палитру узлов, выберите
ГруппаУчастников и кликните в верхней части схемы,
чтобы разместить там группу;

- Выделите группу и в представлении СВОЙСТВА задайте ее
имя — ЦентральнаяБаза;

- По аналогии добавьте еще одну группу участников и назовите ее
Магазины;

- Добавьте на схему узел Канал1СИсточник и задайте имя —
из_ЦБ_в_Магазины;

- По аналогии добавьте еще один узел Канал1СИсточник и назовите его —
из_Магазины_в_ЦБ;

- Теперь следует добавить два узла Канал1СНазначение.
Назовите их в_ЦБ_из_Магазины и
в_Магазины_из_ЦБ. Расположите их как показано на
схеме.

- Свяжите группу участников Магазины с узлом
из_Магазины_в_ЦБ. Для этого прокрутите палитру узлов,
выберите Связь, а затем кликните последовательно на
группу участников Магазины и на узел
из_Магазины_в_ЦБ;

- Аналогичным образом создайте связи , , ;

- Свяжите узел из_Магазины_в_ЦБ маршрутом с узлом
в_ЦБ_из_Магазины. Для этого выберите в панели
Маршрут, а затем кликните последовательно на узел
из_Магазины_в_ЦБ и на узел
в_ЦБ_из_Магазины. Аналогичным образом создайте
маршрут ;

Сообщения поступают в шину через узлы вида Канал1СИсточник (узлы из_Магазины_в_ЦБ и из_ЦБ_в_Магазины) и доставляются в узлы вида Канал1СНазначение (узлы в_ЦБ из_Магазины и в_Магазины_из_ЦБ).
Информационные системы – участники процесса интеграции (в роли которых выступают информационные базы «1С:Предприятия») объединяются в группы участников (в нашем примере –Магазины и ЦентральнаяБаза), которые, в свою очередь, связываются с каналами. Отправлять сообщения в каналы вида Канал1СИсточник и получать сообщения из каналов вида Канал1СНазначение будут только те информационные системы, которые включены в группы участников, связанные с соответствующим каналом.
Какие именно информационные системы будут участвовать во взаимодействии, их названия, параметры подключения и в какие группы участников они будут входить – определяется позднее, уже после публикации процесса интеграции на сервере, с помощью веб-интерфейса сервера «1С:Шины».
- Чтобы опубликовать проект на сервере, нажмите F9
- За ходом обновления проекта вы можете наблюдать в левом углу строки состояния
среды разработки. Статус updating изменится на статус
running. Это говорит о том, что приложение было
обновлено и запущено заново;


- Откройте опубликованное приложение. Для этого нажмите на имя приложения в строке состояния слева. В открывшемся меню выберите Открыть приложение...
- Сервер запросит имя пользователя и пароль. Для аутентификации используйте
учетную запись администратора и пароль, который вы создали при установке
сервера;

- После успешной авторизации вы увидите приложение, а в нем — список процессов
интеграции, существующих в приложении. В примере это будет единственный процесс
интеграции ОбменМагазиныТиповой;

Настройка приложения в панели управления «1С:Шины»
В первую очередь, следует добавить информационные системы, с которыми будет взаимодействовать «1С:Шина» в приложение.
- Для этого откройте приложение, если вдруг оно у вас закрыто;
- Нажмите ;

- Откроется окно добавления информационной системы.

Идентификация получателя в «1С:Шине» осуществляется с использованием кода информационной системы – это буквенно-цифровой код, который указывается в свойстве Код в процессе регистрации информационной системы на сервере «1С:Шины».
- Центральная база (код «ЦБ») – информационная база «1С:ERP».
- Магазин 1 (код «М1») – информационная база «1С:Розница».
- Задайте код системы — ЦБ и наименование —
Центральная база. Нажмите
Добавить;

- Аналогичным образом добавьте информационную систему с наименованием Магазин 1 и кодом М1.
- Теперь для информационной системы нужно получить ключ, который она будет
использовать при подключении к серверу «1С:Шины». Чтобы
получить ключ, нажмите на информационную систему, а затем нажмите
Выдать ключ API.

- Скопируйте и сохраните Идентификатор ключа и
Секрет клиента. Позднее вы будете использовать его
при подключении информационной базы к серверу «1С:Шины»;

Получите и сохраните ключи API для обеих информационных систем.
Следующим шагом следует включить информационные системы в состав приложения.
- Для этого перейдите на вкладку Процессы и нажмите на
процесс Основной::ОбменМагазиныТиповой;

- Вы увидите схему процесса интеграции и панель, позволяющую задавать свойства
узлов этой схемы. На схеме выберите группу Магазины, и
нажмите Состав группы в правом нижнем углу;

- Вы увидите список информационных систем, входящих в группу
Магазины. Сейчас в группе нет ни одной информационной
системы. Установите флажок у информационной системы Магазины
1 и нажмите Добавить в группу;

Добавленная информационная система отобразится во вкладке Действующие.

- Закройте окно Состав группы Магазины;
- Аналогичным образом добавьте информационную систему Центральная база в группу ЦентральнаяБаза: на схеме выберите группу ЦентральнаяБаза, нажмите Состав группы, установите флажок у информационной системы Центральная база и нажмите Добавить в группу. Закройте окно;
- Теперь можно запустить созданный процесс интеграции. Для этого нажмите
Запустить в правом верхнем углу;

Следующим шагом мы создадим и настроим информационную базу 1С:Предприятие.
Предварительная настройка информационных баз «1С:Предприятия»
В тестовом примере рассматривается переключение существующего двустороннего обмена между демонстрационными базами «1С:ERP» и «1С:Розница», который настроен через универсальный формат EnterpriseData. Роль центральной базы выполняет «1С:ERP», роль базы магазина выполняется «1С:Розница».
Перед выполнением настроек на стороне информационных баз необходимо отключить регламентные задания существующего обмена, чтобы в ходе запуска обмена через «1С:Шину» не возникло коллизий, когда сформированное сообщение для обмена будет отправлено и через «1С:Шину», и через настроенный транспорт существующего обмена.
- Запустите информационную базу 1C:Розница. В качестве логина укажите
Администратор узла, поле с паролем оставьте пустым.
Нажмите Войти;

- Перейдите в раздел ;

- В разделе Регламентные операции выберите
Регламентные и фоновые задания;

- Правой кнопкой мыши кликните на регламентное задание Выполнение
обмена по сценарию: Сценарий синхронизации для "Детские товары"
и нажмите Выключить;

- Затем, откройте форму списка настроенных обменов. Перейдите во вкладку ;

- В поле Префикс информационной базы укажите
М1.

- Запустите информационную базу «1С:ERP». В качестве логина укажите
Администратор (Орлов АВ), поле с паролем оставьте
пустым. Нажмите Войти;

- Перейдите во вкладку ;

- В поле Префикс информационной базы укажите
ЦБ.

Теперь можно приступить к редактированию конфигурации информационных баз.
Редактирование конфигурации информационных баз с использованием «1C:EDT»
- Откройте «1C:EDT»;
- У вас откроется стартовое окно. Нажмите Начать
работу;

- Откроется перспектива 1С:Enterprise.

- Откройте панель Информационные базы. По умолчанию она
находится в правой части экрана. Однако если вы ее закрыли, вы можете открыть
эту панель из главного меню основного окна, нажав ;

- Следующим шагом в панели Информационные базы выберите
базу с той конфигурацией, разработку которой вы хотите перевести в 1C:EDT.
Перетащите эту информационную базу в панель
Навигатор.

- В открывшемся окне введите Имя пользователя:
Администратор (ОрловАВ). Нажмите
ОК;

- Нажмите Импорт;

- После загрузки конфигурация базы отобразится слева в окне
Навигатор;

Следующим шагом создадим расширение, в котором выполним необходимые доработки для взаимодействия с «1С:Шиной»
- Чтобы создать расширение, правой кнопкой мыши кликните на проект, в контекстном
меню выберите ;

- В тестовом примере необходимо задать следующие параметры:
- Имя: ИнтеграционнаяШина;
- Префикс: Интеграция_;
После того, как заполнили необходимые поля, нажмите Готово;

- Откроется проект расширения конфигурации. Уберите флажок в поле Режим
совместимости, а также убедитесь, что в поле
Назначение расширения конфигурации выбрано
Адаптация;

Теперь следует создать сервис интеграции в расширении. Именно этот объект отвечает за взаимодействие с «1С:Шиной». В нем задаются параметры подключения к серверу «1С:Шины».
- В проекте расширения откройте вкладку Общее, затем правой
кнопкой мыши нажмите Сервисы интеграции, в контекстном
меню выберите ;

- Заполните имя для сервиса интеграции. В тестовом примере его название будет
Интеграция_ОбменМагазиныТиповой. Нажмите
Готово;

- Откройте приложение «1С:Шины» в браузере и скопируйте адрес
приложения;

- Вернитесь в среду разработки и установите скопированный адрес в качестве
значения свойства Адрес внешнего сервиса
интеграции;

Чтобы сохранить изменения, нажмите Ctrl + S;
Далее необходимо загрузить информацию о доступных каналах интеграции из опубликованного приложения шины.
- Правой кнопкой мыши нажмите на сервис интеграции
Интеграция_ОбменМагазиныТиповой и выберите
Загрузить каналы;

- В открывшейся форме укажите идентификатор и секрет клиента, полученные на этапе
создания информационной системы ЦентральнаяБаза в
приложении «1С:Шины». Затем нажмите кнопку
Получить каналы сервиса;

- Список заполнится каналами вида Канал1СИсточник и
Канал1СНазначение, созданными на этапе настройки
конфигурации «1С:Шины». В списке необходимо установить
отметки только для тех каналов, которые относятся к узлу
ЦентральнаяБаза
(в_ЦБ_из_Магазины и
из_ЦБ_в_Магазины). Нажмите
Загрузить;

- Кликните на добавленный канал интеграции
Основной_ОбменМагазиныТиповой_в_ЦБ_из_Магазины. В
панели Свойства, в поле Имя канала внешнего
сервиса интеграции по умолчанию может стоять
Основной_ОбменМагазиныТиповой.в_ЦБ_из_Магазины. Вам
следует изменить это значение на
Основной::ОбменМагазиныТиповой.в_ЦБ_из_Магазины;

Имя канала внешнего сервиса интеграции должно совпадать с тем названием, которое у вас указано в 1С: Шина.



- Аналогичным образом перейдите в свойства канала
Основной_ОбменМагазиныТиповой_из_ЦБ_в_Магазины и
переименуйте имя канала внешнего сервиса интеграции в
Основной::ОбменМагазиныТиповой.из_ЦБ_в_Магазины.

Для реализации обработчиков отправки и получения сообщений необходимо создать в расширении общий серверный модуль Интеграция_Обработчики;
- Для этого в проекте расширения нажмите правой кнопкой мыши на вкладку
Общие модули, затем ;

- Заполните поле Имя и нажмите
Готово;

-
У вас откроется окно редактора модуля Интеграция_Обработчики;

-
Напишите следующий код:
Процедура ОбработатьВходящееСообщение(Сообщение, Отказ) Экспорт СобытиеЖурналаРегистрации = "Сервисы интеграции.Обработка"; ТекстСообщения = "Обрабатывается сообщение ID:" + Сообщение.Идентификатор + Символы.ВК + " От : " + Сообщение.КодОтправителя; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Информация, , , ТекстСообщения); Попытка РазмерСообщения = Сообщение.Параметры.Получить("РазмерСообщения"); Если РазмерСообщения <> Неопределено Тогда РазмерБуфера = Число(РазмерСообщения); Иначе РазмерБуфера = 1024; КонецЕсли; Тело = Новый БуферДвоичныхДанных(0); Буфер = Новый БуферДвоичныхДанных(РазмерБуфера); Поток = Сообщение.ПолучитьТелоКакПоток(); Пока Истина Цикл Прочитано = Поток.Прочитать(Буфер, 0, РазмерБуфера); Если Прочитано > 0 Тогда Тело = Тело.Соединить(Буфер); КонецЕсли; Если Прочитано < РазмерБуфера Тогда Прервать; КонецЕсли; КонецЦикла; ВходящееСообщение = ПолучитьСтрокуИзБуфераДвоичныхДанных(Тело); ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку( "СинхронизацияДанныхЧерезУниверсальныйФормат", Сообщение.КодОтправителя, ВходящееСообщение); Исключение Отказ = Истина; СобытиеЖурналаРегистрации = "Сервисы интеграции.Обработка"; ТекстСообщения = ОписаниеОшибки() + ". Не удалось обработать сообщение ID:" + Сообщение.Идентификатор + " от : " + Сообщение.КодОтправителя; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); КонецПопытки; КонецПроцедуры Процедура СформироватьИсходящееСообщенияДляУзлаОбмена(СервисИнтеграции, КаналИнтеграции, УзелОбмена) Экспорт СобытиеЖурналаРегистрации = "Сервисы интеграции.Обработка"; ТекстСообщения = "Формирование сообщений шины."; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Информация, , , ТекстСообщения); Попытка АдресХраненияРезультата = ""; ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище( "СинхронизацияДанныхЧерезУниверсальныйФормат", УзелОбмена, АдресХраненияРезультата); Если АдресХраненияРезультата <> "" Тогда Сообщение = СервисыИнтеграции[СервисИнтеграции].СоздатьСообщение(); Сообщение.КодПолучателя = УзелОбмена; Тело = Сообщение.ПолучитьТелоКакПоток(); Буфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьИзВременногоХранилища(АдресХраненияРезультата)); Тело.Записать(Буфер, 0, Буфер.Размер); Тело.Закрыть(); Сообщение.Параметры.Вставить("РазмерСообщения", Буфер.Размер); СервисыИнтеграции[СервисИнтеграции][КаналИнтеграции].ОтправитьСообщение(Сообщение); КонецЕсли; Исключение СобытиеЖурналаРегистрации = "Сервисы интеграции.Обработка"; ТекстСообщения = ОписаниеОшибки() + ". Не удалось сформировать сообщение для узла:" + УзелОбмена; ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); КонецПопытки; КонецПроцедурыЧтобы сохранить, нажмите Ctrl + S.
Какие процедуры будут осуществляться, в результате работы модуля:
- Обработчик ОбработатьВходящееСообщение: в нем
будет происходить получение тела сообщения, и вызов процедуры
ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтрокуобщего модуля ОбменДаннымиСервер для конвертации полученного сообщения. - Обработчик
СформироватьИсходящееСообщенияДляУзлаОбмена:
с помощью этого метода будет формироваться вызов процедуры
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилищеобщего модуля ОбменДаннымиСервер для формирования исходящего сообщения, и дальнейшая отправка сформированного сообщения в «1С:Шину».
- Обработчик ОбработатьВходящееСообщение: в нем
будет происходить получение тела сообщения, и вызов процедуры
При получении сообщения в целевой информационной базе запускается фоновое задание, которое вызывает обработчик соответствующего канала, поэтому необходимо в модуле сервиса интеграции Интеграция_ОбменМагазиныТиповой указать обработчик входящего сообщения. В момент загрузки канала в_ЦБ_из_Магазины был создан пустой обработчик Основной_ОбменМагазиныТиповой_в_ЦБ_из_МагазиныОбработкаПолученияСообщения. В него необходимо добавить вызов созданной процедуры ОбработатьВходящееСообщение из модуля Интеграция_Обработчики;
- Кликните на канал
Основной_ОбменМагазиныТиповой_в_ЦБ_из_Магазины. В
панели Свойства в поле Обработчик получения
сообщения нажмите на значок лупы;

- Откроется окно редактора модуля. Вставьте в него
код:
Процедура Основной_ОбменМагазиныТиповой_в_ЦБ_из_МагазиныОбработкаПолученияСообщения(Сообщение, Отказ) Интеграция_Обработчики.ОбработатьВходящееСообщение(Сообщение, Отказ); КонецПроцедуры
После того, как мы закончили редактировать проект расширения, данное расширение необходимо загрузить в информационную базу «1С:ERP».
- Для этого кликните на расширение и затем, в панели инструментов, нажмите на
кнопку Обновить разрабатываемые приложения;

- Откроется окно с сообщением о том, что будет выполнена реструктуризация базы
данных, нажмите Принять;

Следующим шагом скорректируем проект расширения, чтобы добавить его в информационную базу «1С:Розница».
- В первую очередь следует заменить каналы интеграции на каналы интеграции для
узла Магазины. В проекте расширения перейдите во вкладку и кликните правой кнопкой мыши на канал. В контекстном меню
выберите Удалить.

В открывшемся окне подтвердите удаление, нажав Готово.

Аналогичным образом удалите второй канал.
- Теперь следует выполнить загрузку новых каналов. Правой кнопкой мыши нажмите на
сервис интеграции Интеграция_ОбменМагазиныТиповой и
выберите Загрузить каналы;

- В открывшейся форме укажите идентификатор и секрет клиента, полученные на этапе
создания информационной системы Магазин в приложении «1С:Шины». Затем нажмите кнопку Получить каналы
сервиса;

- Список заполнится каналами вида Канал1СИсточник и
Канал1СНазначение, созданными на этапе настройки
конфигурации «1С:Шины». В списке необходимо установить
отметки только для тех каналов, которые относятся к узлу
Магазины (в_Магазины_из_ЦБ и
из_Магазины_в_ЦБ). Нажмите
Загрузить;

- Кликните на добавленный канал интеграции
Основной_ОбменМагазиныТиповой_в_Магазины_из_ЦБ. В
панели Свойства, в поле Имя канала внешнего
сервиса интеграции по умолчанию может стоять
Основной_ОбменМагазиныТиповой.в_Магазины_из_ЦБ. Вам
следует изменить это значение на
Основной::ОбменМагазиныТиповой.в_Магазины_из_ЦБ;

Имя канала внешнего сервиса интеграции должно совпадать с тем названием, которое у вас указано в 1С: Шина.



- Аналогичным образом перейдите в свойства канала
Основной_ОбменМагазиныТиповой_из_Магазины_в_ЦБ и
переименуйте имя канала внешнего сервиса интеграции в
Основной::ОбменМагазиныТиповой.из_Магазины_в_ЦБ.

- Затем кликните на канал
Основной_ОбменМагазиныТиповой.в_Магазины_из_ЦБ. Во
вкладке Свойства в поле Обработчик получения
сообщения нажмите на значок лупы.

- Откроется модуль обработчика. Убедитесь, что в модуле стоит следующий
код.
Процедура Основной_ОбменМагазиныТиповой_в_Магазины_из_ЦБОбработкаПолученияСообщения(Сообщение, Отказ) Интеграция_Обработчики.ОбработатьВходящееСообщение(Сообщение, Отказ); КонецПроцедуры
Чтобы сохранить изменения, нажмите Ctrl + S.
- Настройка конфигурации расширения закончена. Чтобы загрузить конфигурацию в
информационную базу «1С:Розница» перетащите проект расширения из панели
Навигатор в эту информационную базу;

- В открывшемся окне нажмите Готово;

Следующим шагом следует изменить настройки безопасности у расширений конфигурации. Это можно сделать, запустив информационные базы в режиме Конфигуратора.
Первым шагом изменим настройки в информационной базе «1С:ERP».
- Кликните правой кнопкой мыши на информационную базу и в контекстном меню
выберите Запустить конфигуратор;

- Откроется окно Конфигуратора. В панели вверху выберите ;

- Затем снова перейдите во вкладку Конфигурация и выберите
Расширения конфигурации;

- Откроется окно с настройками расширения конфигурации. Снимите флажки в полях
Безопасный режим и Защита от опасных
действий;

Закройте конфигуратор.
Теперь следует повторить те же самые действия для информационной базы 1С: Розница.
- Кликните правой кнопкой мыши на информационную базу и в контекстном меню
выберите Запустить конфигуратор;

- Откроется окно Конфигуратора. В панели вверху выберите ;

- Затем снова перейдите во вкладку Конфигурация и выберите
Расширения конфигурации;

- Откроется окно с настройками расширения конфигурации. Снимите флажки в полях
Безопасный режим и Защита от опасных
действий;

Закройте конфигуратор.
Создание внешней обработки
Следующим шагом создадим регламентные задания для формирования и обработки сообщений. Чтобы сформировать регламентные задания без доработки конфигурации необходимо создать внешнюю обработку, в модуле которой будет реализован вызов серверных методов. Следует создать две обработки: для базы «1С:ERP» и для базы «1С:Розница».
Вначале создадим обработку для «1С:ERP».
- Правой кнопкой мыши кликните в панели Навигатора. В контекстном меню выберите ;

- Откроется окно создания внешней обработки. Задайте имя
ИнтеграцияСШиной, а в поле Базовый
проект нажмите на значок раскрывающегося списка и выберите
ERP_Управление_предприятием_2_демо. Нажмите
Готово;

- Далее необходимо написать модуль обработки. Для этого в окне редактора обработки
перейдите во вкладку Модуль объекта

- Напишите следующий
код:
// Область СведенияОВнешнейОбработке Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Интеграция с шиной'")); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Интеграция с шиной'")); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, НСтр("ru = 'Формирование сообщений шины (Регламентный запуск)'"), "ФормированиеСообщений", "ВызовСерверногоМетода", Истина, ""); ДобавитьКоманду(ТаблицаКоманд, НСтр("ru = 'Выполнить обработку сообщений шины (Регламентный запуск)'"), "ОбработкаСообщений", "ВызовСерверногоМетода", Истина, ""); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьНазначениеОбработки() Назначение = Новый Массив; Возврат Назначение; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры // КонецОбласти // Область СлужебныеОбработчики Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "ФормированиеСообщений" Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СинхронизацияДанныхЧерезУниверсальныйФормат.Код КАК Код |ИЗ | ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК СинхронизацияДанныхЧерезУниверсальныйФормат |ГДЕ | НЕ СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел | И НЕ СинхронизацияДанныхЧерезУниверсальныйФормат.ПометкаУдаления"; РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Интеграция_Обработчики.СформироватьИсходящееСообщенияДляУзлаОбмена("Интеграция_ОбменМагазиныТиповой", "Основной_ОбменМагазиныТиповой_из_ЦБ_в_Магазины", Выборка.Код); КонецЦикла; КонецЕсли; ИначеЕсли ИдентификаторКоманды = "ОбработкаСообщений" Тогда Попытка СервисыИнтеграции.ВыполнитьОбработку(); Исключение СобытиеЖурналаРегистрации = "Сервисы интеграции.Обработка"; ТекстСообщения = "Ошибка обработки сообщений шины; " + ОписаниеОшибки(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); КонецПопытки; КонецЕсли; КонецПроцедурыЧтобы сохранить изменения, нажмите Ctrl + S;
Теперь создадим обработку для информационной базы «1С:Розница».
- Правой кнопкой мыши кликните в панели Навигатора. В контекстном меню выберите ;

- Откроется окно создания внешней обработки. Задайте имя
ИнтеграцияСШинойМагазин, а в поле Базовый
проект нажмите на значок раскрывающегося списка и выберите
ERP_Управление_предприятием_2_демо. Нажмите
Готово;

- Далее необходимо написать модуль обработки. Для этого в окне редактора обработки
перейдите во вкладку Модуль объекта

- Напишите следующий
код:
// Область СведенияОВнешнейОбработке Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка"); ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки()); ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Интеграция с шиной'")); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Интеграция с шиной'")); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, НСтр("ru = 'Формирование сообщений шины (Регламентный запуск)'"), "ФормированиеСообщений", "ВызовСерверногоМетода", Истина, ""); ДобавитьКоманду(ТаблицаКоманд, НСтр("ru = 'Выполнить обработку сообщений шины (Регламентный запуск)'"), "ОбработкаСообщений", "ВызовСерверногоМетода", Истина, ""); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьНазначениеОбработки() Назначение = Новый Массив; Возврат Назначение; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры // КонецОбласти // Область СлужебныеОбработчики Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "ФормированиеСообщений" Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СинхронизацияДанныхЧерезУниверсальныйФормат.Код КАК Код |ИЗ | ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК СинхронизацияДанныхЧерезУниверсальныйФормат |ГДЕ | НЕ СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел | И НЕ СинхронизацияДанныхЧерезУниверсальныйФормат.ПометкаУдаления"; РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Интеграция_Обработчики.СформироватьИсходящееСообщенияДляУзлаОбмена("Интеграция_ОбменМагазиныТиповой", "Основной_ОбменМагазиныТиповой_из_Магазины_в_ЦБ", Выборка.Код); КонецЦикла; КонецЕсли; ИначеЕсли ИдентификаторКоманды = "ОбработкаСообщений" Тогда Попытка СервисыИнтеграции.ВыполнитьОбработку(); Исключение СобытиеЖурналаРегистрации = "Сервисы интеграции.Обработка"; ТекстСообщения = "Ошибка обработки сообщений шины; " + ОписаниеОшибки(); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); КонецПопытки; КонецЕсли; КонецПроцедурыЧтобы сохранить изменения, нажмите Ctrl + S;
- В панели Навигатора кликните правой кнопкой мыши на проект внешней обработки
и выберите Свойства;

- Во вкладке Файлы в поле
Расположение будет указан путь к проекту внешней
обработки. Сам файл вы сможете найти, перейдя по указанному пути в папке
bin.

Подключение информационных баз к серверу «1С:Шины»
После настройки конфигураций «1С:ERP» и «1С:Розница» необходимо задать настройки подключения этих баз к сервису интеграции в режиме «1С:Предприятие».
- Запустите информационную базу 1С: ERP от имени пользователя с административными
правами (в примере: пользователь Администратор
(ОрловАВ));
\

- Откройте Функции для технического специалиста;
Если данная опция не отображается, то вам следует вначале включить Режим технического специалиста:- Для этого кликните на символ выпадающего списка в правом верхнем
углу и перейдите в раздел

- Установите флажок рядом с параметром Режим технического
специалиста. Нажмите
Применить и закройте окно;

Теперь включите Функции для технического специалиста.
- Для этого кликните на символ выпадающего списка в правом верхнем
углу и перейдите в раздел
- Разверните ветку Стандартные и откройте
Управление сервисами интеграции;

-
Откроется список доступных сервисов интеграции;

- Чтобы настроить подключение к серверу «1С:Шины», кликните правой кнопкой мыши на сервис интеграции Обмен магазины типовой и в контекстном меню выберите Редактировать;
- В группе Настройки внешнего сервиса интеграции задайте
свойства:
- Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Центральная база в приложении «1С:Шины».
- Пароль пользователя — секрет ключа.
- Убедитесь, что в поле Адрес стоит адрес опубликованного приложения «1С:Шины».
Нажмите ОК;

- Поставьте флажок рядом с записью и закройте окно;

- Запустите информационную базу 1С: Розница от имени пользователя с
административными правами (в примере: пользователь Администратор
узла);
\

- Откройте Функции для технического специалиста. (При
необходимости активируйте Режим технического
специалиста в настройках. О том, как это сделать было
сказано выше на примере информационной базы «1С:ERP»);

- Разверните ветку Стандартные и откройте
Управление сервисами интеграции;

-
Откроется список доступных сервисов интеграции;

- Чтобы настроить подключение к серверу «1С:Шины», кликните правой кнопкой мыши на сервис интеграции Обмен магазины типовой и в контекстном меню выберите Редактировать;
- В группе Настройки внешнего сервиса интеграции
задайте свойства:
- Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Магазин 1 в приложении «1С:Шины».
- Пароль пользователя — секрет ключа.
- Убедитесь, что в поле Адрес стоит адрес опубликованного приложения «1С:Шины».
Нажмите ОК;

- Поставьте флажок рядом с записью и закройте окно;

Запуск регламентных заданий для формирования и обработки сообщений
Чтобы обмен выполнялся в автоматическом режиме, необходимо подключить созданную обработку в информационных базах «1С:ERP» и «1С:Розница».
Вначале загрузим внешнюю обработку в информационную базу «1С:ERP».
- В информационной базе «1С:ERP» выберите раздел ;

- Затем перейдите в Дополнительные отчеты и
обработки;

- В открывшемся окне нажмите на кнопку Добавить из
файла...;

- Будет показано предупреждение безопасности.Нажмите
Продолжить;

- Перейдите в папку, в которую был сохранен файл внешней обработки
ИнтеграцияСШиной.epf и нажмите
Открыть. (Как
узнать расположение файла?);

- После этого откроется форма. В форме подключения внешней обработки необходимо
задать расписание для выполнения команд. Для этого поставьте флажок в колонке
Выполнять команду по расписанию;
При установке флажка Выполнять команду по расписанию откроется форма настройки расписания, для тестового примера укажите следующие настройки:- Для метода Выполнить обработку сообщений шины
— каждый день; каждые 60 секунд;


- Для метода Формирование сообщений шины —
каждый день; каждые 120 секунд;


- Для метода Выполнить обработку сообщений шины
— каждый день; каждые 60 секунд;
- После того, как расписание будет задано, нажмите на кнопку Записать и
закрыть.

- После записи дополнительной обработки автоматически будут созданы
соответствующие регламентные задания. Чтобы убедиться, что регламентные задания
созданы и функционируют перейдите в раздел ;

- Далее выберите пункт Регламентные и фоновые
задания;

- В открывшемся списке необходимо найти задания, в названии которых указана
Дополнительная обработка и название команды. Если
такие задания найдены, значит настройки выполнены успешно;

Теперь следует загрузить файл внешней обработки в информационную базу «1С:Розница». Для этого предстоит проделать похожие шаги:
- В информационной базе «1С:Розница» выберите раздел ;

- Затем перейдите в Дополнительные отчеты и
обработки;

- В открывшемся окне нажмите на кнопку Добавить из
файла...;

- Будет показано предупреждение безопасности.Нажмите
Продолжить;

- Перейдите в папку, в которую был сохранен файл внешней обработки
ИнтеграцияСШиной_Магазин.epf и нажмите
Открыть. (Как
узнать расположение файла?);

- После этого откроется форма. В форме подключения внешней обработки необходимо
задать расписание для выполнения команд. Для этого поставьте флажок в колонке
Выполнять команду по расписанию;
При установке флажка Выполнять команду по расписанию откроется форма настройки расписания, для тестового примера укажите следующие настройки:- Для метода Выполнить обработку сообщений шины
— каждый день; каждые 60 секунд;


- Для метода Формирование сообщений шины —
каждый день; каждые 120 секунд;


- Для метода Выполнить обработку сообщений шины
— каждый день; каждые 60 секунд;
- После того, как расписание будет задано, нажмите на кнопку Записать и
закрыть.

- После записи дополнительной обработки автоматически будут созданы
соответствующие регламентные задания. Чтобы убедиться, что регламентные задания
созданы и функционируют перейдите в раздел ;

- Далее выберите пункт Регламентные и фоновые
задания;

- В открывшемся списке необходимо найти задания, в названии которых указана
Дополнительная обработка и название команды. Если
такие задания найдены, значит настройки выполнены успешно;

Изменение кодов для информационных систем внутри «1С:Предприятия» с использованием внешней обработки
В «1С:Предприятии» нам следует изменить коды у информационных систем, участвующих в обмене сообщениями. Чтобы это сделать, мы откроем информационные базы в режиме «1С:Предприятие» и воспользуемся внешней обработкой (скачать).
Сначала проделаем все необходимые шаги внутри базы «1С:ERP».
- Откройте Функции для технического специалиста;

- Перейдите во вкладку ;

- Откроется список информационных систем, которые участвуют в синхронизации.
Следует изменить их код на тот код, который вы задали в разделе
Инфосистемы в приложении «1С:Шины»;


- Для этого следует воспользоваться внешней обработкой. Кликните на выпадающее
меню в правом верхнем углу и выберите ;

- Выберите файл с внешней обработкой и нажмите
Открыть;

- Откроется окно внешней обработки. В поле Узел обмена
укажите Магазин 1, в поле Новый
код укажите код инфосистемы из приложения «1С:Шины» — М1. Нажмите
Изменить код;

- Затем измените код для узла обмена Центральная база. В
поле Узел обмена укажите Демонстрационная
база, в поле Новый код укажите код
инфосистемы из приложения «1С:Шины» —
ЦБ. Нажмите Изменить
код;

- Вернитесь во вкладку Синхронизация данных через универсальный
формат. Вы увидите, что коды узлов обмена были
обновлены.

Теперь изменим коды информационных систем внутри базы «1С:Розница».
- Откройте Функции для технического специалиста;

- Перейдите во вкладку ;

- Откроется список систем, которые участвуют в синхронизации. Следует изменить их
код на тот код, который вы задали в разделе Инфосистемы в
приложении «1С:Шины»;


- Для этого также воспользуемся внешней обработкой. Кликните на выпадающее меню в
правом верхнем углу и выберите ;

- Выберите файл с внешней обработкой и нажмите
Открыть;

- Откроется окно внешней обработки. В поле Узел обмена
укажите Центральная База, в поле Новый
код укажите код инфосистемы из приложения «1С:Шины» — ЦБ. Нажмите
Изменить код;

- Затем измените код для узла обмена, относящегося к инфосистеме
Магазин 1. В поле Узел обмена
укажите Другая программа, в поле Новый
код укажите код инфосистемы из приложения «1С:Шины» — М1. Нажмите
Изменить код;

- Вернитесь во вкладку Синхронизация данных через универсальный
формат. Вы увидите, что коды узлов обмена были
обновлены.

Проверка работы обменов через «1С:Шину»
Для проверки настроенных обменов через «1С:Шину» необходимо зарегистрировать произвольный объект для обмена. Для этого можно воспользоваться обработкой Регистрация изменений для обмена данными.
- В информационной базе «1С:ERP» откройте форму списка настроенных обменов ;

- Перейдите в Настройки синхронизации данных;

- Правой кнопкой мыши кликните на название программы (в примере:
Магазин 1). В контекстном меню выберите пункт
Состав отправляемых данных;

Откроется форма Регистрация изменений для обмена данными. В качестве тестового примера зарегистрируем номенклатуру «Ассорти (конфеты)».
- Перейдите во вкладку . Кликните правой кнопкой мыши в окне
Номенкулатура и нажмите Зарегестрировать
изменения объектов при помощи отбора.

- В открывшемся окне выберите «Ассорти (конфеты)» и нажмите
Выбрать;

- В поле Номенкулатура появится запись «Ассорти
(конфеты)»;

- Если при выполнении регламентного задания Формирование сообщения
шины номер отправленного сообщения в обработке изменился, значит
сформировалось исходящее сообщение с объектом, зарегистрированным к
обмену;

- При выполнении регламентного задания Выполнить обработку сообщений
шины в информационной базе «1С:ERP», исходящее сообщение будет
передано в «1С:Шину» для обмена. Счетчики каналов в
приложении «1С:Шины» должны измениться.
Чтобы просмотреть счетчики каналов, в приложении «1С:Шины» щелкните на процесс интеграции Основной::ОбменМагазиныТиповой;

Затем перейдите во вкладку Каналы;

- В колонке В канале стоит единица. Это означает, что
сообщение сейчас находится в канале в_Магазины_из_ЦБ и
ожидает доставки в информационную систему Магазин
1:

- При выполнении регламентного задания Выполнить обработку сообщений
шины в информационной базе «1С:Розница», счетчик сообщений
В канале должен обнулиться, а счетчик
Доставлено увеличиться на единицу;

- Таким образом, сообщение было успешно доставлено к получателю.
На этом пример по настройке синхронизации данных между информационными базами на платформе «1С:Предприятие» через «1С:Шину» завершён.
