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

Пример 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С:Шину» завершен.

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

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

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

См. также