Пример 1. Настройка обмена данными между базой на платформе «1С:Предприятие» и интернет-сайтом
В данном примере используется демонстрационная база «1С:Предприятие 8». Ее можно скачать по ссылке.
«1С:Шина» поддерживает обмен данными между системами посредством HTTP-протокола, это дает возможность использовать обмен при помощи HTTP-сервисов, например, в соответствии с имеющимся REST API.
В примере выполняется синхронизация изменений по товарным позициям между информационной базой «1С:Предприятие» и сайтом, т. е. при создании или изменении товара в базе эти изменения автоматически отражаются на сайте.
Для того чтобы настроить синхронизацию между базой «1С:Предприятие» и сайтом при помощи «1С:Шины», необходимо, чтобы сайт работал по протоколу безопасного соединения HТТPS.
В ходе этого примера вы:
- В среде разработки «1С:Шины»:
- создадите проект и настроите в нем процесс интеграции;
- опубликуете проект на сервере и создадите приложение;
- проверите работоспособность приложения.
- В панели управления сайтом:
- сгенерируете ключи API;
- определите метод для создания элемента на сайте.
- На сервере «1С:Шины»:
- заполните параметры для подключения к сайту;
- создадите информационную систему;
- включите ее в состав процесса интеграции;
- запустите процесс интеграции.
- Создадите демонстрационную базу «1С:Предприятия»:
- создадите план обмена;
- добавите сервис интеграции;
- загрузите в него информацию о доступных каналах;
- напишете код обмена сообщениями;
- добавите регламентное задание для обмена сообщениями с «1С:Шиной»;
- настроите подключение к серверу;
- проверите обмен сообщениями.
Создание проекта
На этом этапе вы создадите в среде разработки «1С:Шины» проект с описанием схемы интеграции и опубликуете его на сервере «1С:Шины», создав приложение.
-
Откройте панель управления.
-
Нажмите Приложения ⟶ + Новое приложение:
-
Убедитесь, что выбраны варианты Из проекта и Новый проект:
-
Укажите поставщика, имя, представление и версию проекта. «1С:Шина» заполнит остальные поля и включит режим разработки для создаваемого приложения:
-
Выберите тип СУБД (в примере это будет Файловая СУБД) и нажмите Создать:
-
Новое приложение появится в списке со статусом Создается. Через некоторое время статус приложения изменится на Работает:
Добавление элемента проекта
На этом этапе вы откроете приложение в среде разработки и добавите в него элемент проекта — процесс интеграции.
-
Чтобы открыть проект в среде разработки, нажмите Разработать в конце строки:
-
«1С:Шина» откроет новую вкладку браузера для среды разработки и запросит пароль. Введите пароль администратора, который вы создали при установке сервера, и нажмите Войти:
-
«1С:Шина» подготовит рабочую область, построит проект и откроет его в среде разработки:
-
Добавьте новый элемент проекта — процесс интеграции. Для этого в навигаторе проекта нажмите на значок плюса, затем в контекстном меню выберите Процесс интеграции:
-
Задайте имя создаваемого элемента — ОбменССайтом — и нажмите Ввод:
-
«1С:Шина» создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы:
Редактирование схемы процесса интеграции
На этом этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем.
-
Добавьте в схему группу участников. Для этого прокрутите палитру узлов, выберите ГруппаУчастников и кликните в верхней части схемы, чтобы разместить там группу:
-
Выделите группу и в панели Свойст ва задайте ее имя — Офис:
-
Добавьте на схему узел Канал1СИсточник и задайте имя — ИзОфиса:
-
Свяжите группу участников Офис с узлом ИзОфиса. Для этого прокрутите палитру узлов, выберите Связь, а затем кликните последовательно на группу участников Офис и на узел ИзОфиса:
-
Теперь добавьте на схему узел Http:
-
Свяжите узел Http маршрутом с узлом ИзОфиса. Для этого выберите в панели Маршрут, а затем кликните последовательно на узел ИзОфиса и на узел Http:
-
Переименуйте узел Http в ОбменССайтом:
-
В подсистеме Основной нажмите на значок плюса рядом с процессом интеграции ОбменССайтом и добавьте Параметр:
-
Назовите параметр URL. Затем нажмите Ввод:
-
По аналогии создайте еще три параметра: API, Login, Password. Созданные параметры отобразятся слева на панели:
-
Кликните на узел ОбменССайтом. В панели Свойства заполните параметр Url. Откройте список параметров и выберите URL:
-
Далее таким же образом добавьте к параметру URL еще один параметр — API:
-
Аналогично заполните остальные параметры. В качестве имени пользователя и пароля укажите параметры Login и Password. В поле Метод выберите значение POST:
-
Чтобы опубликовать проект на сервере, нажмите F9.
примечание -
Откройте опубликованное приложение. Для этого нажмите на имя приложения в строке состояния слева. В открывшемся меню выберите Открыть приложение.
примечание -
Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера:
-
После успешной авторизации вы увидите приложение, а в нем — список процессов интеграции, существующих в приложении. В примере это будет единственный процесс интеграции ОбменССайтом:
Настройки на стороне сайта
В данном примере используется сайт на базе WordPress, созданный при помощи кроссплатформенной сборки локального веб-сервера XAMPP (https://www.apachefriends.org/ru/index.html). В качестве шаблона сайта был использован плагин WooCommerce (https://woocommerce.com/). Самоподписанный сертификат SSL был выпущен с помощью библиотеки OpenSSL (https://github.com/openssl/openssl).
Для взаимодействия с сайтом мы будем использовать имеющийся у плагина WooCommerce собственный REST API.
-
В панели управления сайтом перейдите в WooCommerce ⟶ Настройки ⟶ Дополнительно ⟶ REST API ⟶ Создать ключ API:
-
Сгенерируйте и сохраните ключ от сайта. Для этого введите описание ключа в поле Описание (1). В поле Права кликните на выпадающий список (2) и выберите Чтение/Запись. Затем нажмите Генерировать ключ API:
-
Скопируйте и сохраните Пользовательский ключ и Секретный код пользователя:
-
В документации к WooCommerce найдем метод, создающий новый продукт на сайте:
-
Отметим, что метод POST совпадает с тем методом, который ранее мы указывали в качестве параметра в узле ОбменССайтом на схеме интеграции в «1С:Шине».
Настройка приложения в панели управления
-
Откройте приложение, если оно у вас закрыто.
-
Нажмите Инфосистемы ⟶ Добавить систему:
-
Задайте код системы — office и наименование — Офис. Нажмите Добавить:
-
Теперь для информационной системы нужно получить ключ, который она будет использовать при подключении к серверу «1С:Шины». Чтобы получить ключ, нажмите на информационную систему, а затем нажмите Выдать ключ API:
-
Скопируйте и сохраните Идентификатор ключа и Секрет клиента. Позднее вы будете использовать его при подключении информационной базы к серверу «1С:Шины»:
-
Перейдите на вкладку Процессы и нажмите на процесс ОбменССайтом:
-
Вы увидите схему процесса интеграции и панель, позволяющую задавать свойства узлов этой схемы. На схеме выберите группу Офис, а затем нажмите Состав группы в правом нижнем углу:
-
Вы увидите список информационных систем, входящих в группу Офис. Сейчас в группе нет ни одной информационной системы. Установите флажок у информационной системы office и нажмите Добавить в группу:
-
Закройте окно Состав группы Офис.
Далее необходимо заполнить параметры узла ОбменССайтом, которые позволят взаимодействовать «1С:Шине» с сайтом.
-
На схеме выберите узел ОбменССайтом и в правом нижнем углу нажмите Параметры:
-
Заполните параметр ы следующим образом:
- URL:
https://имя-вашего-сервера/имя-вашего-сайта
(в примере: https://localhost/testsite); - API:
/wp-json/wc/v3/products
; - в полях Login и Password укажите пользовательский ключ и секретный код пользователя, полученные при генерации ключа на сайте.
Нажмите Применить:
- URL:
-
Теперь можно запустить созданный процесс интеграции. Для этого нажмите Запустить в правом верхнем углу:
Следующим шагом мы создадим и настроим информационную базу 1С:Предприятие.
Создание информационной базы «1С:Предприятия» с использованием «1С:EDT»
-
Откройте «1С:EDT».
-
У вас откроется стартовое окно. Нажмите Начать работу:
-
Откроется перспектива «1С:Предприятия»:
-
Откройте панель Информационные базы. По умолчанию она находится в правой части экрана. Однако если эта панель закрыта, вы можете открыть ее из главного меню основного окна, нажав Окно ⟶ Показать панель ⟶ Информационные базы:
-
В открывшемся окне нажмите Добавить:
-
По умолчанию будет выбран пункт Создание новой информационной базы. Оставьте выбор без изменений и нажмите Далее:
-
Выберите пункт Создание информационной базы без конфигурации и нажмите далее:
-
Введите название информационной базы. В качестве типа размещения файла выберите «На данном компьютере или на компьютере в локальной сети». Нажмите Далее:
-
Система автоматически предложит вам каталог для сохранения информационной базы. Его можно оставить без изменений. Нажмите Далее:
-
Ничего не меняйте в открывшемся окне и нажмите Готово:
-
Информационная база создана. Теперь вы сможете увидеть ее на панели Информационные базы:
-
Далее следует загрузить шаблон информационной базы в созданную пустую информационную базу. Для этого кликните правой кнопкой мыши на созданную информационную базу (в данном примере Офис). Затем выберите Загрузить информационную базу:
-
В открывшемся окне нажмите Выбрать и выберите файл с примером информационной базы. Затем нажмите Готово:
-
Следующим шагом в панели Информационные базы выберите базу с той конфигурацией, разработку которой вы хотите перевести в «1C:EDT». Перетащите эту информационную базу в панель Навигатор:
-
В открывшемся окне нажмите Импорт:
-
После загрузки конфигурация базы отобразится слева в окне Навигатор:
После того как мы создали информационную базу «1С:Предприятия», можно переходить к ее настройке.
Настройка информационной базы «1С:Предприятия»
-
Добавьте сервис интеграции с именем ОбменССайтом. Для этого откройте вкладку Общее, затем правой кнопкой мыши нажмите Сервисы интеграции, в контекстном меню выберите Создать ⟶ Сервис интеграции:
-
Заполните имя сервиса интеграции. Нажмите Готово:
-
Откройте приложение «1С:Шины» в браузере и скопируйте адрес приложения:
-
Вернитесь в среду разработки и установите скопированный адрес в качестве значения свойства Адрес внешнего сервиса интеграции:
Чтобы сохранить изменения, нажмите Ctrl + S.
-
Правой кнопкой мыши нажмите на сервис интеграции ОбменССайтом и выберите Загрузить каналы:
-
В открывшейся форме укажите идентификатор клиента и секрет клиента, полученные на этапе создания информационной системы Офис в приложении «1С:Шины». Затем нажмите кнопку Получить каналы сервиса:
-
В списке отобразится канал из схемы процесса интеграции. Убедитесь, что рядом с ним стоит галочка, и нажмите Загрузить:
-
Дважды кликните на добавленный канал интеграции. В панели Свойства, в поле Имя канала внешнего сервиса интеграции по умолчанию может стоять Основной_ОбменССайтом_ИзОфиса. Вам следует изменить это значение на Основной::ОбменССайтом.ИзОфиса:
Имя канала должно совпадать с тем названием, которое у вас указано в «1С:Шине»:
Изменения на сайт должны поступать автоматически при добавлении или изменении товара в справочнике Товары. Чтобы настроить соответствующий процесс, мы воспользуемся планами обмена.
-
Создайте новый план обмена ОбменСИнтернетМагазином. Для этого на вкладке Общие найдите Планы обмена и нажмите правой кнопкой мыши, после чего в раскрывшемся меню выберите Создать ⟶ План обмена:
-
Заполните поле Имя и нажмите Готово:
-
Откроется окно редактора. Если вдруг вы закрыли это окно, вы можете открыть его снова. Для этого на кладке Планы обмена дважды щелкните мышкой на план ОбменСИнтернетМагазином.
Перейдите на вкладку Состав, которая расположена в нижней части экрана:
-
Нажмите правой кнопкой мыши в любой точке рабочей области и выберите Редактировать элементы списка:
-
В разделе Справочники поставьте флажок рядом с пунктом Товары и нажмите ОК.
Чтобы сохранить изменения, нажмите Ctrl + S:
Сообщения для отправки будут формироваться регламентным заданием.
-
Вначале создадим общий модуль ЗаданиеОтправкаСообщенийНаСайт. Для этого нажмите правой кнопкой мыши на вкладку Общие модули, затем Создать ⟶ Общий модуль:
-
Заполните поле Имя и нажмите Готово:
-
Откроется окно редактора модуля ЗаданиеОтправкаСообщенийНаСайт:
-
Напишите следующий код:
Процедура ОтправкаСообщенийНаСайт() Экспорт
ПланыОбменаВыборка = ПланыОбмена.ОбменСИнтернетМагазином.Выбрать();
Пока ПланыОбменаВыборка.Следующий() Цикл
Если ПланыОбменаВыборка.ЭтотУзел Тогда
Продолжить;
КонецЕсли;
ОтправленноеСообщение = ПланыОбменаВыборка.НомерОтправленного;
Попытка
Выборка = ПланыОбмена.ВыбратьИзменения(ПланыОбменаВыборка.Ссылка,
ОтправленноеСообщение);
МассивСообщений = Новый Массив;
МассивСсылок = Новый Массив;
Пока Выборка.Следующий() Цикл
МассивСсылок.Добавить(Выборка.Получить().Ссылка);
КонецЦикла;
МассивСообщений = СформироватьСообщенияКВыгрузке(МассивСсылок);
Для Каждого Сообщение Из МассивСообщений Цикл
ОтправитьСообщениеВИнтернетМагазин(Сообщение);
КонецЦикла;
ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбменаВыборка.Ссылка,
ПланыОбменаВыборка.НомерОтправленного);
Исключение
ЗаписьЖурналаРегистрации("СервисыИнтеграции.ОбменССайтом",
УровеньЖурналаРегистрации.Ошибка,
ПланыОбменаВыборка,
,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Функция СформироватьСообщенияКВыгрузке(МассивСсылок) Экспорт
МассивСообщений = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Наименование КАК name,
| ЕСТЬNULL(ЦеныТоваров.Цена, 0) КАК regular_price,
| Товары.Описание КАК description,
| Товары.Наименование КАК short_description,
| ""simple"" КАК type,
| Товары.Ссылка КАК Ссылка
|ИЗ
| Справочник.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТоваров.СрезПоследних(
| ,
| Товар В (&МассивСсылок)
| ) КАК ЦеныТоваров
| ПО Товары.Ссылка = ЦеныТоваров.Товар
|ГДЕ
| Товары.Ссылка В(&МассивСсылок)";
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СформироватьСообщениеКВыгрузке(Выборка, МассивСообщений);
КонецЦикла;
Возврат МассивСообщений;
КонецФункции
Процедура ОтправитьСообщениеВИнтернетМагазин(Сообщение) Экспорт
ИсходящееСообщение = СервисыИнтеграции.ОбменССайтом.СоздатьСообщение();
ИсходящееСообщение.ИдентификаторСообщенияЗапроса = Новый УникальныйИдентификатор;
ИсходящееСообщение.Параметры["Content-Type"] = "application/json";
ТелоСообщения = ИсходящееСообщение.ПолучитьТелоКакПоток();
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("tmp");
ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.ANSI);
ЗаписьТекста.ЗаписатьСтроку(Сообщение.Текст);
ЗаписьТекста.Закрыть();
ФайловыйПоток = ФайловыеПотоки.Открыть(ИмяВременногоФайла,
РежимОткрытияФайла.Открыть,
ДоступКФайлу.Чтение);
ФайловыйПоток.КопироватьВ(ТелоСообщения);
ТелоСообщения.СброситьБуферы();
ТелоСообщения.Закрыть();
СервисыИнтеграции
.ОбменССайтом
.Основной_ОбменССайтом_ИзОфиса
.ОтправитьСообщение(ИсходящееСообщение);
КонецПроцедуры
Процедура СформироватьСообщениеКВыгрузке(ПараметрыЗаполнения, МассивСообщений)
УникальныйИдентификатор = Строка(ПараметрыЗаполнения.Ссылка.УникальныйИдентификатор());
ИсключающиеСвойства = "";
СтруктураЗаполнения = Новый Структура("name,short_description,type");
СтруктураЗаполнения.Вставить("regular_price",
?(Не ЗначениеЗаполнено(ПараметрыЗаполнения.regular_price),
"",
СтрШаблон("%1", ПараметрыЗаполнения.regular_price)));
ОписаниеТовара = ПараметрыЗаполнения.description;
СтруктураЗаполнения.Вставить("description", "");
СтруктураЗаполнения.Вставить("sku", УникальныйИдентификатор);
ТипСообщения = "products";
ИсключающиеСвойства = "regular_price,description";
ЗаполнитьЗначенияСвойств(СтруктураЗаполнения, ПараметрыЗаполнения,, ИсключающиеСвойства);
ЗаписьJson = Новый ЗаписьJSON;
ЗаписьJson.УстановитьСтроку(
Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,
,
Истина,
ЭкранированиеСимволовJSON.СимволыВнеASCII,
,,,,
Истина)
);
ЗаписатьJSON(Запис ьJson, СтруктураЗаполнения);
ТекстТовара = ЗаписьJson.Закрыть();
МассивСообщений.Добавить(Новый ФиксированнаяСтруктура("Тип, Текст, Идентификатор",
ТипСообщения,
ТекстТовара,
УникальныйИдентификатор));
КонецПроцедурыСохраните изменения, нажав Ctrl + S.
-
Затем следует создать регламентное задание ОтправкаСообщенийНаСайт. Для этого правой кнопкой мыши нажмите на Регламентные задание в панели Навигатор и выберите Создать ⟶ Регламентное задание:
-
Заполните поле Имя и нажмите Готово:
-
Поставьте галочку Предопределенное. В поле Имя метода нажмите на значок лупы и в открывшемся списке выберите модуль ЗаданиеОтправкаСообщенийНаСайт. Нажмите ОК:
-
Теперь следует задать расписание, по которому будет исполняться регламентное задание. Переключитесь в окно редактора регламентного задания ОтправкаСообщенийНаСайт. Затем перейдите на вкладку Расписание ⟶ Общее и установите значение Повторять каждые: 1 дн.:
-
На вкладке Дневное выберите значение Повто рять через: 60 секунд:
Сохраните изменения, нажав Ctrl + S.
Во встроенном языке «1С:Предприятия» при выполнении метода ОтправитьСообщение() (модуль «ЗаданиеОтправкаСообщенийНаСайт» ⟶ процедура «ОтправитьСообщениеВИнтернетМагазин») создается запись в служебной таблице информационной базы. Реальная отправка сообщений в «1С:Шина» выполняется позже служебным фоновым заданием.
Для запуска или продолжения работы этих служебных фоновых заданий вам нужно вызвать метод СервисыИнтеграцииМенеджер.ВыполнитьОбработку(). Служебные фоновые задания запускаются в момент первого вызова этого метода и завершаются через 2 минуты с момента последнего его вызова. Поэтому, чтобы обеспечить непрерывную работу служебных фоновых заданий, этот метод нужно вызывать периодически. Рекомендуемая периодичность – 1 раз в минуту.
В примере, чтобы реализовать периодический вызов этого метода, вам потребуется регламентное задание.
-
По аналогии создайте общий модуль с именем СервисыИнтеграцииСервер. Убедитесь, что в правой части экрана на вкладке Свойства, в поле Сервер стоит галочка:
-
На вкладке Модуль вставьте следующий код:
Процедура ВыполнениеОбработкиСервисовИнтеграции() Экспорт
СервисыИнтеграции.В ыполнитьОбработку();
КонецПроцедурыСохраните изменения, нажав Ctrl + S.
-
По аналогии, создайте регламентное задание с именем СервисыИнтеграции. Поставьте галочку Использование и Предопределенное.
-
В поле Имя метода нажмите на знак многоточия «...» и выберите модуль СервисыИнтеграцииСервер. Нажмите ОК:
-
Перейдите на вкладку Расписание ⟶ Общее и установите значение Повторять каждые: 1 дн.:
-
Затем на вкладке Дневное задайте расписание задания Повторять через: 60 секунд:
Сохраните изменения, нажав Ctrl + S.
-
Следующим шагом необходимо обновить конфигурацию информационной базы на ту конфигурацию, которую мы создали в проекте. Для этого откройте панель Информационные базы (Окно ⟶ Показать панель ⟶ Информационные базы):
-
Найдите в списке информационных баз ту, в которой необходимо обновить конфигурацию (в примере — Офис). Нажмите на нее правой кнопкой мыши и выберите Обновить конфигурацию:
-
В открывшемся окне убедитесь, что выбран необходимый проект и нужная информационная база. Нажмите Готово:
-
Откроется окно с сообщением о том, что будет выполнена реорганизация базы данных. Нажмите Принять:
Теперь конфигурация информационной базы Офис соответствует той, которую мы создали в проекте.