Туториал: интеграция 1С и КХД через стандартный REST‐интерфейс Odata

от автора

Ранее мы обсуждали различные способы интеграции 1С с КХД в статье. Теперь давайте подробнее разберем, как получить доступ к справочникам, документам и другим данным, используя стандартные HTTP-запросы через REST-интерфейс и протокол OData 3.0.

Кратко о REST-интерфейсе и OData

REST (Representational State Transfer) — это архитектурный стиль API для обмена информацией по протоколу HTTP. То есть для доступа к объектам нужен URL-адрес и HTTP-глаголы:

  • GET = Получить (читать)

  • POST = Создать

  • PATCH = Изменить (обновить)

  • DELETE = Удалить 

Например, чтобы получить список товаров, можно отправить GET-запрос по адресу GET http://example.com/api/products , а по запросу POST добавить новый товар:

POST http://example.com/api/products  Content-Type: application/json  {    "name": "Laptop",    "price": 999.99,    "stock": 10  }

OData (Open Data Protocol) — это протокол, который помогает внешним приложениям получать доступ к данным системы, не изменяя код прикладного решения. Он работает через веб-интерфейсы и поддерживает форматы XML и JSON.

Протокол предоставляет доступ к большинству основных объектов в системе 1С, за некоторыми исключениями. Например, через OData нельзя получить доступ к отчетам, командам, критериям отбора, регламентным заданиям, внешним источникам данных, пользователям и журналу регистрации.

Стандартный интерфейс OData автоматически создает запросы к данным в 1С и передает их в корпоративное хранилище для последующей обработки и анализа.

Например, нужно передать данные о продажах из системы 1С в КХД. Для этого настраиваем интерфейс OData и выбираем таблицу «Продажи» в качестве источника данных. Затем создаем запрос, он может выглядеть следующим образом:
GET http://example.com/1C/odata/standard.odata/Продажи. Интерфейс OData автоматически его обрабатывает, извлекает данные из системы 1С и передает их в КХД.

Что нужно для интеграции?

Для начала вам нужно 1С:Предприятие версии не ниже 8.3.5 и настроенный веб-сервер (IIS или Apache), который будет отвечать за передачу данных через REST-интерфейс.

Прежде чем начать интеграцию, решите, какую информацию вы хотите получить, в каких справочниках и документах она находятся и как вы будете использовать ее в BI-системе. Например, сведения о продажах, закупках, складе, бухгалтерии и т. д.

Как происходит интеграция пошагово

Чтобы работать с протоколом OData, его нужно опубликовать через меню настройки 1С. Для этого в конфигураторе 1С перейдите в раздел «Администрирование» и выберите «Публикация на веб-сервере».

  • в поле «Имя» укажите название базы данных, которое будет использоваться веб-сервером (лучше использовать латиницу, чтобы избежать проблем с кодировкой);

  • в выпадающем списке выберите веб-сервер, установленный на вашем компьютере;

  • укажите путь к нужному каталогу;

  • установите галочку «Публиковать стандартный интерфейс OData» и нажмите «Опубликовать».

Подробное описание процесса публикации можно найти в книге «Руководство администратора» для 1С:Предприятие 8.3. 

Чтобы получить доступ к объектам 1С, используйте метод глобального контекста —  УстановитьСоставСтандартногоИнтерфейсаOData(). Он определяет, какие объекты будут доступны через интерфейс. Однако, если ваше приложение работает в режиме совместимости с версией 8.3.4 или более ранней, то этот метод не применим — все поддерживаемые объекты будут автоматически доступны через OData.

Для настройки интерфейса OData в конфигурации, разработанной на основе библиотеки стандартных подсистем (БСП), откройте меню «Администрирование», затем выберите «Синхронизация данных» и «Настройки стандартного интерфейса OData».

Для безопасной передачи информации не стоит использовать созданные ранее учетные записи. На странице «Авторизация» поставьте галочку напротив «Создать отдельное имя пользователя и пароль», введите имя и пароль и сохраните их.

На вкладке «Состав» нажмите «Загрузить метаданные» и укажите основные и подчиненные объекты, к которым хотите предоставить доступ.

После того, как все настройки завершены и конфигурация опубликована на локальном сервере, доступ к данным можно получить через URL следующего формата: 

Чтобы получить информацию в формате JSON, добавьте к URL параметр ?$format=application/json, и ссылка будет выглядеть так: 

Для получения описания стандартного интерфейса OData используйте GET-запрос по URL:

После публикации конфигурации необходимо настроить конечные точки (эндпоинты) для доступа к информации. Это URL-адреса, к которым отправляются HTTP-запросы. Обычно они генерируются автоматически, но вы можете изменить параметры доступа и указать, откуда именно нужно брать данные.

Пример, как можно получить информацию из справочника в XML-формате:

Обновление существующей записи:

При PATCH-запросе изменяются только те свойства объекта, которые были указаны в запросе, остальные свойства остаются без изменений. При PUT-запросе необходимо указать значения для всех свойств обновляемого объекта.

Удаление записи из справочника:

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

Используя функции протокола OData, можно взаимодействовать с виртуальными таблицами. Параметры, передаваемые в функции, будут соответствовать параметрам этих виртуальных таблиц.

Для получения среза последнего регистра сведений «КурсыВалют» используйте команду:

После настройки и публикации интерфейса на веб-сервере вы можете применять HTTP-команды для передачи информации из 1С в корпоративное хранилище.

Возможные проблемы и риски

На первый взгляд этот метод кажется довольно простым: не нужно ничего дополнительно программировать — достаточно просто прописывать запросы к документам и справочникам. Но, тем не менее, есть определенные сложности при таком способе интеграции.  

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

  • Сложно написать интуитивно понятный запрос. Из-за глубоко вложенных структур ресурсов формируются длинные и сложные URL-адреса. Такие запросы создают повышенную нагрузку на сервер приложения 1С и сервер СУБД. Также есть риск возникновения циклических запросов. 

  • Интерфейс дает лишь общее представление об ошибках, которые возникают при получении данных. Поиск и устранение причин отнимает много времени.

  • OData дает возможность получать и изменять данные, поэтому для безопасности нужно настраивать права доступа. Например, можно ограничить права на запись и предоставить пользователям возможность только читать информацию.

  • Чтобы данные из систем 1С и КХД были согласованы, нужно обеспечить избыточность выгрузки. Это приводит к увеличению нагрузки на серверы и сети, что замедляет их работу и, как следствие, увеличивает время обработки данных.

  • Для получения сложных срезов данных из систем 1С вам придется либо дублировать структуру данных в КХД, либо усложнять логику запросов получения информации. Это приводит к дополнительной нагрузке на серверы, к увеличению сложности в сопровождении КХД и ETL-процессов.

Ответственные и задействованные сотрудники 

Руководство и аналитики определяют цели и задачи интеграции. Они решают, какие данные нужны для анализа как часто их следует обновлять, а также оценивают возможности системы.

Для работы с протоколом OData не нужно иметь глубоких знаний языка 1С и уметь программировать. Программисты 1С и системные администраторы настраивают веб-сервер для публикации данных, REST-интерфейс и OData, а также назначают права доступа для пользователей. Они следят за тем, чтобы запросы были корректными, а возвращаемые данные соответствовали указанным параметрам.

При этом нужны знания протокола HTTP и инструментов, которые работают со стандартным интерфейсом OData со стороны КХД, либо формируют и обрабатывают произвольные HTTP запросы, разбирая данные из JSON/XML.

Заключение

Хотя протокол OData и считается простым и достаточно быстрым способом обмена данными между системами 1С и КХД, интеграция с его помощью может быть не всегда осуществима. В любом случае, перед тем, как приступить к работе, нужно определить, с какими данными и в каком объеме придется иметь дело, и понять, как часто они будут изменяться. И, возможно, нужно будет выбрать более подходящий способ интеграции.


ссылка на оригинал статьи https://habr.com/ru/articles/865798/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *