Пример 4: Настройка синхронизации данных между информационными базами на платформе «1С:Предприятие» через «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С:Шины» проект с описанием схемы интеграции и опубликуете его на сервере «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С: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;

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

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

Подключение информационных баз к серверу «1С:Шины»

После настройки конфигураций «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С:Шину» необходимо зарегистрировать произвольный объект для обмена. Для этого можно воспользоваться обработкой Регистрация изменений для обмена данными.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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