Пример 1. Настройка обмена данными между базой на платформе «1С:Предприятие» и интернет-сайтом с использованием
поддерживает обмен данными между системами посредством HTTP-протокола, это даёт возможность использовать обмен при помощи HTTP-сервисов, например, в соответствии с имеющимся REST API.
В примере выполняется синхронизация изменений по товарным позициям между информационной базой «1С:Предприятие» и сайтом, т.е. при создании или изменении товара в базе, эти изменения автоматически отражаются на сайте.
В ходе этого примера вы:
- В среде разработки :
- Создадите проект и настроите в нем процесс интеграции.
- Опубликуете проект на сервере и создадите приложение.
- Проверите работоспособность приложения.
- В панели управления сайтом:
- Сгенерируете ключи API.
- Определите метод для создания элемента на сайте.
- На сервере :
- Заполните параметры для подключения к сайту.
- Создадите информационную систему.
- Включите её в состав процесса интеграции.
- Запустите процесс интеграции.
- Создадите демонстрационную базу «1С:Предприятия»:
- Создадите план обмена.
- Добавите сервис интеграции.
- Загрузите в него информацию о доступных каналах.
- Напишите код обмена сообщениями.
- Добавите регламентное задание для обмена сообщениями с .
- Настроите подключение к серверу.
- Проверите обмен сообщениями.
Создание проекта в
На этом этапе вы создадите в среде разработки проект с описанием схемы интеграции и опубликуете его на сервере , создав приложение.
- Откройте панель управления.
- Нажмите
- Убедитесь, что выбраны варианты Из проекта и Новый проект
- Задайте имя проекта — Пример №3 и нажмите Tab. заполнит остальные поля и включит режим разработки для создаваемого приложения.
- Выберите тип СУБД (в примере это будет Файловая СУБД) и нажмите Создать.
- Новое приложение появится в списке со статусом Создается. Через некоторое время статус приложения изменится на Работает.
Добавление элемента проекта
На этом этапе вы откроете приложение в среде разработки и добавите в него элемент проекта — процесс интеграции.
- Чтобы открыть проект в среде разработки, нажмите Разработать... в конце строки;
- откроет новую вкладку браузера для среды разработки и запросит пароль. Введите пароль администратора, который вы создали при установке сервера, и нажмите Войти;
- подготовит рабочую область, построит проект и откроет его в среде разработки;
- Добавьте новый элемент проекта — процесс интеграции. Для этого в представлении НАВИГАТОР ПРОЕКТА нажмите правой кнопкой мыши Основной, затем в контекстном меню выберите ;
- Выберите вид добавляемого элемента проекта — Процесс Интеграции;
- Задайте имя создаваемого элемента — ОбменССайтом — и нажмите Ввод;
- создаст в проекте новый процесс интеграции и откроет редактор для создания его схемы;
Редактирование схемы процесса интеграции
На этом этапе вы создадите схему процесса интеграции, которая описывает взаимодействие информационных систем.
- Добавьте в схему группу участников. Для этого прокрутите палитру узлов, выберите ГруппаУчастников и кликните в верхней части схемы, чтобы разместить там группу;
- Выделите группу и в представлении СВОЙСТВА задайте ее имя — Офис;
- Добавьте на схему узел Канал1СИсточник и задайте имя — ИзОфиса;
- Свяжите группу участников Офис с узлом ИзОфиса. Для этого прокрутите палитру узлов, выберите Связь, а затем кликните последовательно на группу участников Офис и на узел ИзОфиса;
- Теперь добавьте на схему узел Http;
- Свяжите узел Http маршрутом с узлом ИзОфиса. Для этого выберите в панели Маршрут, а затем кликните последовательно на узел ИзОфиса и на узел Http;
- Переименуйте узел Http в ОбменССайтом;
- В подсистеме Основная кликните правой кнопкой мыши на процесс интеграции ОбменССайтом и добавьте новый элемент— Параметр процесса интеграции.
- Назовите параметр URL. Затем нажмите Ввод
- По аналогии создайте еще три параметра: API, Login, Password. Созданные параметры отобразятся слева на панели.
-
Кликните на узел ОбменССайтом. В панели СВОЙСТВА заполните параметр URI. Для этого нажмите на кнопку, раскрывающую параметры процесса. В открывшемся списке выберите созданный ранее параметр URL
- Далее добавьте к параметру URL ещё один параметр — API. Для этого повторно нажмите на кнопку, раскрывающую параметры процесса, и выберите созданный ранее параметр API.
-
Аналогично заполните остальные параметры: Имя пользователя как Login, Пароль как Password. Также в выпадающем списке выберите метод POST;
- Чтобы опубликовать проект на сервере, нажмите F9
- За ходом обновления проекта вы можете наблюдать в левом углу строки состояния среды разработки. Статус updating изменится на статус running. Это говорит о том, что приложение было обновлено и запущено заново;
- Откройте опубликованное приложение. Для этого нажмите на имя приложения в строке состояния слева. В открывшемся меню выберите Открыть приложение...
- Сервер запросит имя пользователя и пароль. Для аутентификации используйте учетную запись администратора и пароль, который вы создали при установке сервера;
- После успешной авторизации вы увидите приложение, а в нем — список процессов интеграции, существующих в приложении. В примере это будет единственный процесс интеграции ОбменССайтом;
Настройки на стороне сайта
В данном примере используется сайт на базе WordPress, созданный при помощи кроссплатформенной сборки локального веб-сервера XAMPP (https://www.apachefriends.org/ru/index.html). В качестве шаблона сайта был использован плагин WooCommerce (https://woocommerce.com/). Самоподписанный сертификат SSL был выпущен с помощью библиотеки OpenSSL (https://github.com/openssl/openssl).
Для взаимодействия с сайтом мы будем использовать имеющийся у плагина WooCommerce собственный REST API.
- В панели управления сайтом перейдите в
- Сгенерируйте и сохраните ключ от сайта. Для этого введите описание ключа в поле Описание (1), В поле Права кликните на выпадающий список (2) и выберите Чтение/Запись. Затем нажмите Генерировать ключ API.
-
Скопируйте и сохраните Пользовательский ключ и Секретный код пользователя.
- В документации к WooCommerce (https://woocommerce.github.io/woocommerce-rest-api-docs/) найдем метод, создающий новый продукт на сайте.
-
Отметим, что метод POST совпадает с тем методом, который ранее мы указывали в качестве параметра в узле ОбменССайтом на схеме интеграции в .
Настройка приложения в панели управления
- Откройте приложение, если вдруг оно у вас закрыто;
- Нажмите ;
- Задайте код системы — office и наименование — Офис. Нажмите Добавить;
- Теперь для информационной системы нужно получить ключ, который она будет использовать при подключении к серверу . Чтобы получить ключ, нажмите на информационную систему, а затем нажмите Выдать ключ API.
- Скопируйте и сохраните Идентификатор ключа и Секрет клиента. Позднее вы будете использовать его при подключении информационной базы к серверу ;
- Перейдите на вкладку Процессы и нажмите на процесс Основной::ОбменССайтом;
- Вы увидите схему процесса интеграции и панель, позволяющую задавать свойства узлов этой схемы. На схеме выберите группу Офис, а затем нажмите Состав группы в правом нижнем углу;
- Вы увидите список информационных систем, входящих в группу Офис. Сейчас в группе нет ни одной информационной системы. Установите флажок у информационной системы office и нажмите Добавить в группу;
- Закройте окно Состав группы Офис;
Далее необходимо заполнить параметры у узла ОбменССайтом, которые позволят взаимодействовать с сайтом.
- На схеме выберите узел ОбменССайтом и в правом нижнем углу нажмите Параметры;
- Заполните параметры следующим образом:
- URL: https://имя-вашего-сервера/имя-вашего-сайта (в примере: https://localhost/testsite)
- API: /wp-json/wc/v3/products
- В Login и Password укажите пользовательский ключ и секретный код пользователя, полученные при генерации ключа на сайте.
- Теперь можно запустить созданный процесс интеграции. Для этого нажмите Запустить в правом верхнем углу.
Следующим шагом мы создадим и настроим информационную базу 1С:Предприятие.
Создание информационной базы «1С:Предприятия» с использованием «1С:EDT».
- Откройте «1С:EDT»;
- У вас откроется стартовое окно. Нажмите Начать работу;
- Откроется перспектива «1С:Enterprise».
- Откройте панель Информационные базы. По умолчанию она находится в правой части экрана. Однако если вы ее закрыли, вы можете открыть эту панель из главного меню основного окна, нажав ;
- В открывшемся окне нажмите Добавить;
-
По умолчанию будет выбран пункт Создание новой информационной базы. Оставьте выбор без изменений и нажмите Далее;
- Выберите пункт Создание информационной базы без конфигурации... и нажмите далее;
- Введите название информационной базы. Тип размещения файла выберите На данном компьютере или на компьютере в локальной сети. Нажмите Далее;
- Система автоматически предложит вам каталог для сохранения информационной базы. Его можно оставить без изменений. Нажмите Далее;
- В открывшемся окне ничего изменять не нужно. Нажмите Готово;
- Информационная база создана. Теперь вы сможете увидеть ее на панели Информационные базы;
- Далее следует загрузить шаблон информационной базы в созданную пустую информационную базу. Для этого кликните правой кнопкой мыши на созданную информационную базу (в данном примере Офис). Затем выберите Загрузить информационную базу;
- В открывшемся окне нажмите Выбрать и выберите файл с примером информационной базы. Затем нажмите Готово;
- Следующим шагом в панели Информационные базы выберите базу с той конфигурацией, разработку которой вы хотите перевести в «1C:EDT». Перетащите эту информационную базу в панель Навигатор.
- В открывшемся окне нажмите Импорт;
- После загрузки конфигурация базы отобразится слева в окне Навигатор;
После того, как мы создали информационную базу 1С:Предприятия, можно переходить к ее настройке.
Настройка информационной базы «1С:Предприятия»
- Добавьте сервис интеграции с именем ОбменССайтом. Для этого откройте вкладку Общее, затем правой кнопкой мыши нажмите Сервисы интеграции, в контекстном меню выберите ;
- Заполните имя для сервиса интеграции. Нажмите Готово;
- Откройте приложение в браузере и скопируйте адрес приложения;
- Вернитесь в среду разработки и установите скопированный адрес в качестве
значения свойства Адрес внешнего сервиса
интеграции;
Чтобы сохранить изменения, нажмите Ctrl + S;
- Правой кнопкой мыши нажмите на сервис интеграции ОбменССайтом и выберите Загрузить каналы;
- В открывшейся форме укажите идентификатор клиента и секрет клиента, полученные на этапе создания информационной системы Офис в приложении . Затем нажмите кнопку Получить каналы сервиса;
- В списке отобразится канал из схемы процесса интеграции. Убедитесь, что рядом с ним стоит галочка и нажмите Загрузить;
- Дважды кликните на добавленный канал интеграции. В панели
Свойства, в поле Имя канала внешнего
сервиса интеграции по умолчанию может стоять
Основной_ОбменССайтом_ИзОфиса. Вам следует изменить
это значение на Основной::ОбменССайтом.ИзОфиса;
Имя канала должно совпадать с тем названием, которое у вас указано в .
Изменения на сайт должны поступать автоматически при добавлении или изменении товара в справочнике Товары. Для того, чтобы настроить соответствующий процесс, мы воспользуемся планами обмена.
- Создайте новый план обмена ОбменСИнтернетМагазином. Для этого во вкладке Общие найдите Планы обмена и нажмите правой кнопкой мыши, после чего в раскрывшемся меню выберите ;
- Заполните поле Имя и нажмите Готово;
- У вас откроется окно редактора. Если вдруг вы закрыли это окно, то чтобы его
вновь открыть, достаточно сделать двойной клик на план
ОбменСИнтернетМагазином во вкладке Планы
обмена.
Перейдите на вкладку Состав, которая расположена в нижней части экрана;
- Нажмите правой кнопкой мыши в любой точке рабочей области и выберите Редактировать элементы списка;
- В разделе Справочники поставьте флажок рядом с пунктом
Товары и нажмите ОК.
Чтобы сохранить изменения, нажмите 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С:Предприятия», при выполнении метода ОтправитьСообщение() ( ), всего лишь создается запись в служебной таблице информационной базы. Реальная отправка сообщений в выполняется позже, служебным фоновым заданием.
Для запуска или продолжения работы этих служебных фоновых заданий вам нужно вызвать метод СервисыИнтеграцииМенеджер.ВыполнитьОбработку(). Служебные фоновые задания запускаются в момент первого вызова этого метода и завершаются через 2 минуты с момента последнего его вызова. Поэтому, чтобы обеспечить непрерывную работу служебных фоновых заданий, этот метод нужно вызывать периодически. Рекомендуемая периодичность – 1 раз в минуту.
В примере, чтобы реализовать периодический вызов этого метода, вам потребуется регламентное задание.
- По аналогии, создайте общий модуль с именем СервисыИнтеграцииСервер. Убедитесь, что в правой части экрана во вкладке свойства, в поле Сервер стоит галочка.
- Во вкладке модуль вставьте следующий код:
Процедура ВыполнениеОбработкиСервисовИнтеграции() Экспорт СервисыИнтеграции.ВыполнитьОбработку(); КонецПроцедуры
Сохраните изменения, нажав Ctrl + S;
- По аналогии, создайте регламентное задание с именем СервисыИнтеграции. Поставьте галочку Использование и Предопределенное;
- В поле Имя метода нажмите на ... и выберите модуль СервисыИнтеграцииСервер. Нажмите ОК;
- Перейдите во вкладку Повторять каждые: 1 дн. и установите
- Затем во вкладке Дневное задайте расписание задания
Повторять через: 60 секунд;
Сохраните изменения, нажав Ctrl + S;
- Следующим шагом необходимо обновить конфигурацию информационной базы на ту конфигурацию, которую мы создали в проекте. Для этого откройте панель Информационные базы ( )
- Найдите в списке информационных баз ту, в которой необходимо обновить конфигурацию (в примере - Офис). Нажмите на неё правой кнопкой мыши и выберите Обновить конфигурацию...;
- В открывшемся окне убедитесь, что выбран необходимый проект и нужная информационная база. Нажмите Готово;
- Откроется окно с сообщением о том, что будет выполнена реструктуризация базы данных, нажмите Принять;
Теперь конфигурация информационной базы Офис соответствует той, которую мы создали в проекте.
Подключение информационных баз «1С:Предприятия 8» к серверу
Вы настроили конфигурацию Офис так, что она готова к взаимодействию с использованием сервера . Непосредственное подключение информационной базы «1С:Предприятия» к конкретному серверу выполняется уже в режиме «1С:Предприятие».
- Запустите информационную базу Офис от имени пользователя
с административными правами и откройте Функции для технического
специалиста...;Если данная опция не отображается, то вам следует вначале включить Режим технического специалиста:
- Для этого кликните на символ выпадающего списка в правом верхнем углу и перейдите в раздел
- Установите флажок рядом с параметром Режим технического
специалиста. Нажмите
Применить и закройте окно;
Теперь включите Функции для технического специалиста.
- Разверните ветку Стандартные и откройте Управление сервисами интеграции;
- В списке доступных сервисов интеграции вы увидите единственную запись Обмен с сайтом — этот тот самый сервис интеграции, который вы создали в «1С:EDT». Чтобы настроить подключение к серверу ", нажмите правой кнопкой мыши на сервис и выберите Редактировать;
- В группе Настройки внешнего сервиса интеграции задайте
свойства:
- Имя пользователя — идентификатор ключа, полученный на этапе создания информационной системы Офис в приложении .
- Пароль пользователя — секрет ключа.
Нажмите ОК;
- Поставьте флажок рядом с записью и закройте окно.
Теперь необходимо создать план обмена, который будет отслеживать изменения в справочнике Товары.
- Вновь откройте Функции для технического специалиста. Во вкладке Планы обмена откройте Обмен с интернет магазином;
- Создадим обмен с сайтом. Для этого нажмите Создать, затем заполните поля Код и Наименование, после чего нажмите Записать и закрыть;
Создание примера закончено, можно приступать к тестированию обмена сообщениями.
Тестирование обмена сообщениями
- Создадим в справочнике Товары несколько товаров: Новый товар 1, Новый товар 2, Новый товар 3, Новый товар 4;
- Обратим внимание, что в панели управления зафиксировалось 4 входящих и 4 исходящих сообщения.
- Также изменения отобразятся на сайте: будут созданы четыре новых товара.
На этом пример по настройке обмена данными между базой на платформе «1С:Предприятие» и интернет-сайтом с использованием завершён.