Перейти к основному содержимому

Пример 4: Настройка синхронизации данных между информационными базами на платформе «1С:Предприятие»

В данной статье будет показан пример использования «1С:Шины» для синхронизации данных между информационными базами на платформе «1С:Предприятие».

дополнительно

В качестве исходных данных будет использован уже настроенный обмен между демонстрационными базами «1С:ERP Управление предприятием 2 (2.4.14.176)» (скачать) и «1С:Розница редакция 2.3 (2.3.11.29)» (скачать), который необходимо перенести в «1С:Шину». Если вы планируете выполнить данный пример с использованием демонстрационных баз, то предварительно вам нужно будет отдельно настроить данный обмен. По умолчанию, в демонстрационных базах обмен не настроен.

В ходе этого примера вы:

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

Создание приложения и процесса интеграции​

На этом этапе вы создадите в среде разработки «1С:Шины» приложение и добавите в него процесс интеграции.

  1. Создайте новое приложение с файловой СУБД и откройте его в режиме разработки.
  2. Добавьте новый элемент проекта — процесс интеграции. Назовите его ОбменМагазиныТиповой и установите для его свойства СправочникУчастников значение ИнформационныеСистемы.

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

Редактирование схемы процесса интеграции​

На этом этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем. Вы можете выполнить все действия самостоятельно или воспользоваться готовым примером из YAML-файла ниже и перейти к публикации приложения.

Пример YAML-файла процесса интеграции
ВидЭлемента: ПроцессИнтеграции
ОбластьВидимости: ВПодсистеме
Ид: 97d3f751-c65a-4332-92b8-a9104e29a7dc
Имя: ОбменМагазиныТиповой
СправочникУчастников: e1c::TestMag::Основной::ИнформационныеСистемы
Схема:
ГруппыУчастников:
-
Ид: 80e1cbc0-e967-4491-9bd1-f67f42410d27
Имя: ЦентральнаяБаза
X: 207
Y: 101
Высота: 60
Ширина: 162
-
Ид: 2b23bb6e-951c-4d11-b93c-953e6f67455d
Имя: Магазины
X: 222
Y: 445
Высота: 60
Ширина: 138
Маршруты:
-
Ид: 556f87c0-ddb0-4460-8ab4-7e22a106a160
В: в_ЦБ_из_Магазины
Из: из_Магазины_в_ЦБ
Точки:
-
X: 110
Y: 306
-
X: 110
Y: 306
-
Ид: ddbb1dff-5a11-4fd5-bf70-1114fbe4eb92
В: в_Магазины_из_ЦБ
Из: из_ЦБ_в_Магазины
Точки:
-
X: 464
Y: 306
-
X: 464
Y: 306
Связи:
-
Ид: 3505156e-574a-4c43-993b-6e2ff7be11be
Группа: Магазины
НаправлениеСвязи: ИзГруппыВУзел
Узел: из_Магазины_в_ЦБ
Точки:
-
X: 291
Y: 424
-
X: 110
Y: 424
-
Ид: bfe77b04-3527-41fe-98a2-9c1c5059635d
Группа: ЦентральнаяБаза
НаправлениеСвязи: ИзГруппыВУзел
Узел: из_ЦБ_в_Магазины
Точки:
-
X: 288
Y: 185
-
X: 464
Y: 185
-
Ид: a13ea2db-a064-4fc9-8252-e3c00b9d4798
Группа: ЦентральнаяБаза
НаправлениеСвязи: ИзУзлаВГруппу
Узел: в_ЦБ_из_Магазины
Точки:
-
X: 110
Y: 185
-
X: 288
Y: 185
-
Ид: a71f97c7-5ca8-4600-a01a-8c6effedb58c
Группа: Магазины
НаправлениеСвязи: ИзУзлаВГруппу
Узел: в_Магазины_из_ЦБ
Точки:
-
X: 464
Y: 425
-
X: 291
Y: 425
Узлы:
-
Вид: Канал1СИсточник
Ид: 84f531bb-ec17-409c-80f1-2cefd8239d82
Имя: из_Магазины_в_ЦБ
X: 23
Y: 342
Высота: 62
Ширина: 173
-
Вид: Канал1СИсточник
Ид: dae49b94-4c8d-4252-b8bf-c151bed7e81f
Имя: из_ЦБ_в_Магазины
X: 378
Y: 207
Высота: 62
Ширина: 173
-
Вид: Канал1СНазначение
Ид: c50386de-9ba7-41d0-977f-1a953a31084a
Имя: в_ЦБ_из_Магазины
X: 23
Y: 208
Высота: 62
Ширина: 173
-
Вид: Канал1СНазначение
Ид: 7440309d-54f0-4d33-b08f-707eaefbbea6
Имя: в_Магазины_из_ЦБ
X: 377
Y: 344
Высота: 62
Ширина: 174
  1. Добавьте в схему группу участников. Для этого прокрутите палитру узлов, выберите ГруппаУчастников и кликните в верхней части схемы, чтобы разместить там группу. Кликните на узел два раза и задайте имя группы — ЦентральнаяБаза:

    Добавление группы участников «ЦентральнаяБаза»

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

    Добавление группы участников «Магазины»

  3. Добавьте на схему два узла Канал1СИсточник с именами из_ЦБ_в_Магазины и из_Магазины_в_ЦБ:

    Добавление узлов «Канал1СИсточник»

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

    Добавление узлов «Канал1СНазначение»

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

    Добавление связи между узлами «Магазины» и «Из_Магазины_в_ЦБ»

  6. Аналогичным образом создайте связи ЦентральнаяБаза ⟶ из_ЦБ_в_Магазины, в_ЦБ_из_Магазины ⟶ ЦентральнаяБаза, в_Магазины_из_ЦБ ⟶ Магазины:

    Добавление связей

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

    Добавление маршрута между узлами «из_Магазины_в_ЦБ» и «в_ЦБ_из_Магазины»

Сообщения поступают в «1С:Шину» через узлы вида Канал1СИсточник (узлы из_Магазины_в_ЦБ и из_ЦБ_в_Магазины) и доставляются в узлы вида Канал1СНазначение (узлы в_ЦБ из_Магазины и в_Магазины_из_ЦБ).

Участники процесса интеграции (в роли которых выступают информационные базы «1С:Предприятия») объединяются в группы участников (в нашем примере — Магазины и ЦентральнаяБаза), которые, в свою очередь, связываются с каналами. Отправлять сообщения в каналы вида Канал1СИсточник и получать сообщения из каналов вида Канал1СНазначение будут только те информационные системы, которые включены в группы участников, связанные с соответствующим каналом.

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

Публикация и открытие приложения​

Чтобы опубликовать и открыть приложение, выполните следующие действия:

  1. Нажмите Ctrl+F5. Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера.

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

    Открытое приложение

Настройка приложения в панели управления​

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

  • Центральная база (код «ЦБ») – информационная база «1С:ERP».
  • Магазин 1 (код «М1») – информационная база «1С:Розница».
  1. Откройте приложение, если оно у вас закрыто.

  2. Создайте инфосистему с кодом ЦБ и наименованием Центральная база.

  3. Создайте инфосистему с кодом M1 и наименованием Магазин 1.

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

  5. Перейдите на вкладку Процессы и нажмите на процесс ОбменМагазиныТиповой. Вы увидите схему процесса интеграции и панель свойств схемы. На схеме выберите группу Магазины. Добавьте в нее информационную систему Магазины 1. Закройте окно Состав группы Магазины.

  6. Аналогичным образом добавьте информационную систему Центральная база в группу ЦентральнаяБаза.

  7. Запустите созданный процесс интеграции. Для этого нажмите Запустить в правом верхнем углу:

    Запуск процесса интеграции

Следующим шагом мы создадим и настроим информационную базу «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.

примечание

Далее в примере вам понадобится найти файлы внешней обработки ИнтеграцияСШиной.epf и ИнтеграцияСШинойМагазин.epf для того, чтобы подгрузить его в информационные базы «1С:Предприятия». Чтобы узнать путь к файлу, выполните следующие действия:

  • В панели Навигатор кликните правой кнопкой мыши на проект внешней обработки и выберите Свойства:

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

Подключение информационных баз к серверу​

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

  • Запустите информационную базу «1С:ERP» от имени пользователя с административными правами (в примере: пользователь Администратор (ОрловАВ)):

  • Откройте Функции для технического специалиста:

    Если данная опция не отображается, то вам следует вначале включить Режим технического специалиста:

    • Для этого кликните на символ выпадающего списка в правом верхнем углу и перейдите в раздел Настройки ⟶ Параметры...:

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

      Теперь включите Функции для технического специалиста.

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

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

  • Чтобы настроить подключение к серверу «1С:Шины», кликните правой кнопкой мыши на сервис интеграции Обмен магазины типовой и в контекстном меню выберите Редактировать.

  • В группе Настройки внешнего сервиса интеграции задайте свойства:

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

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

Повторите те же самые действия для информационной базы «1С:Розница»:

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

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

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

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

  • Чтобы настроить подключение к серверу «1С:Шины», кликните правой кнопкой мыши на сервис интеграции Обмен магазины типовой и в контекстном меню выберите Редактировать.

  • В группе Настройки внешнего сервиса интеграции задайте свойства:

    • Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Магазин 1 в приложении «1С:Шины».

    • Пароль пользователя — секрет ключа.

    • Убедитесь, что в поле Адрес стоит адрес опубликованного приложения «1С:Шины».

      Нажмите ОК:

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

Запуск регламентных заданий для формирования и обработки сообщений​

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

Вначале загрузим внешнюю обработку в информационную базу «1С:ERP».

  • В информационной базе «1С:ERP» выберите раздел НСИ и Администрирование ⟶ Печатные формы, отчеты и обработки:

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

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

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

  • Перейдите в папку, в которую был сохранен файл внешней обработки ИнтеграцияСШиной.epf и нажмите Открыть:

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

    При установке флажка Выполнять команду по расписанию откроется форма настройки расписания, для тестового примера укажите следующие настройки:

    • Для метода Выполнить обработку сообщений шины — каждый день; каждые 60 секунд:

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

  • После того как расписание будет задано, нажмите на кнопку Записать и закрыть:

  • После записи дополнительной обработки автоматически будут созданы соответствующие регламентные задания. Чтобы убедиться, что регламентные задания созданы и функционируют, перейдите в раздел НСИ и Администрирование ⟶ Обслуживание:

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

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

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

  • В информационной базе «1С:Розница» выберите раздел Администрирование ⟶ Печатные формы, отчеты и обработки:

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

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

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

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

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

    При установке флажка Выполнять команду по расписанию откроется форма настройки расписания. Для тестового примера укажите следующие настройки:

    • Для метода Выполнить обработку сообщений шины — каждый день; каждые 60 секунд:

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

  • После того как расписание будет задано, нажмите на кнопку Записать и закрыть:

  • После записи дополнительной обработки автоматически будут созданы соответствующие регламентные задания. Чтобы убедиться, что регламентные задания созданы и функционируют перейдите в раздел Администрирование ⟶ Обслуживание:

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

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

Изменение кодов для информационных систем внутри «1С:Предприятия» с использованием внешней обработки​

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

Сначала проделаем все необходимые шаги внутри базы «1С:ERP».

  • Откройте Функции для технического специалиста:

  • Перейдите на вкладку Планы обмена ⟶ Синхронизация данных через универсальный формат:

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

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

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

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

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

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

Теперь изменим коды информационных систем внутри базы «1С:Розница».

  • Откройте Функции для технического специалиста:

  • Перейдите на вкладку Планы обмена ⟶ Синхронизация данных через универсальный формат:

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

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

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

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

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

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

Проверка работы обменов​

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

  • В информационной базе «1С:ERP» откройте форму списка настроенных обменов НСИ и Администрирование ⟶ Синхронизация данных:

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

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

Откроется форма Регистрация изменений для обмена данными. В качестве тестового примера зарегистрируем номенклатуру «Ассорти (конфеты)».

  • Перейдите на вкладку Справочники ⟶ Номенклатура. Кликните правой кнопкой мыши в окне Номенклатура и нажмите Зарегистрировать изменения объектов при помощи отбора:

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

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

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

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

    Чтобы просмотреть счетчики каналов, в приложении «1С:Шины» щелкните на процесс интеграции ОбменМагазиныТиповой:

    Затем перейдите на вкладку Каналы 1С:

    Вкладка «Каналы 1С»

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

    Сообщение в канале

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

    Сообщение доставлено

  • Таким образом, сообщение было успешно доставлено получателю.

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

Анализ и решение проблем​

Если тестирование обмена сообщениями завершилось неудачей, то для расследования проблемы вы можете выполнить следующие действия:

Более подробную информацию о расследовании проблем интеграции вы можете найти в следующих статьях:

См. также​