Ранее мы обсуждали различные способы интеграции 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С и КХД, интеграция с его помощью может быть не всегда осуществима. В любом случае, перед тем, как приступить к работе, нужно определить, с какими данными и в каком объеме придется иметь дело, и понять, как часто они будут изменяться. И, возможно, нужно будет выбрать более подходящий способ интеграции.
Комментарии (2)
mixsture
11.12.2024 19:09OData это инструмент для очень маленьких задач. Как только вам нужно выгружать хоть какие сложные данные (из разных видов учета, как-то сгруппированные и соединенные) ее стоит сразу выкинуть. Потому что она умеет работать только с 1 сущностью в каждый момент времени, а значит вам придется выгрести в разы бОльший объем данных через нее, а потом вручную, подрабатывая как будто вы движок СУБД, выполнить соединения, группировки и сложные условия.
По сути, вы натыкаетесь на сложность алгоритмов O(n^2) при работе с ней. Что при росте нагрузки очень быстро исчерпает ресурсы.
phaggi
Получил задание разобраться с интеграцией БП с PowerBI, которая работала длительное время, а теперь решила резко начать дико тормозить; дай, думаю, загляну на родной хабр. И сразу свежая статья по Odata :) Спасибо!
Но вот вопрос: куда заглянуть, чтобы понять причины торможения? Что искать в логах? На что обратить внимание? Было бы полезно, наверно, и эти стороны осветить.