Найти в Дзене
ITworks Group

Как подключиться к 1С из Python и реализовать обмен данными

В этой статье рассмотрим один из механизмов интеграции Python приложений с 1С:Предприятие. Для интеграции будем использовать двукомпонентную систему "Бром", которая состоит из серверной части (расширение для 1С) и клиентской части (подключаемой библиотеки).
Чем хорош данный метод: Что позволяет делать библиотека? Клиентская библиотека позволяет: Как установить библиотеку и подключиться к 1С? Для подключения к 1С нужно несколько простых шагов: Код будет выглядеть примерно так: Созданный таким образом клиент и будет далее использоваться для обращений к приложению 1С. Как вызвать процедуру или функцию в 1С? Для вызова функции или процедуры достаточно обратиться к соответствующему методу по его имени и передать параметры так же, как это делается в 1С: Вызываемые методы принимать и возвращать данные сложных типов. Например, метод "ПолучитьКурсВалюты" принимает на вход "СправочникСсылку", а возвращает "ТаблицуЗначений". Как работать со ссылками на объекты 1C? Как только вы получили на стор
Оглавление

В этой статье рассмотрим один из механизмов интеграции Python приложений с 1С:Предприятие. Для интеграции будем использовать двукомпонентную систему "Бром", которая состоит из серверной части (расширение для 1С) и клиентской части (подключаемой библиотеки).
Чем хорош данный метод:

  • Метод позволяет работать с любыми конфигурациями в режиме совместимости 8.3.10 и выше, в том числе с типовыми и самописными конфигурациями на поддержке поставщика;
  • Механизм использует собственный механизм сериализации данных, что позволяет обмениваться данными в естественном виде (типы 1С будут автоматически преобразованы в типы Python и наоборот). Недостающие типы на стороне Python реализованы в клиентской библиотеке, поэтому вы можете обмениваться "ТаблицамиЗначений", "ДеревьямиЗначений", системными перечислениями 1С и прочими специфичными для 1С объектами.
  • Механизм полностью кроссплатформенный, т.к. обмен данными происходит через web-сервис по протоколу SOAP и не требует подключения каких-либо COM-библиотек.

Что позволяет делать библиотека?

Клиентская библиотека позволяет:

  • получать и редактировать данные объектов 1С (ссылочные объекты, константы, параметры сеанса);
  • получать выборки из коллекций 1C с учетом сложных условий отбора и сортировки;
  • исполнять произвольные запросы на языке 1С, в том числе пакетные запросы и запросы с разметкой для построителя;
  • вызывать процедуры и функции 1С с возможностью передачи параметров и получения результата в естественном виде (без необходимости преобразования типов);
  • получать данные о метаданных конфигурации с возможностью их частичной (постраничной) загрузки;

Как установить библиотеку и подключиться к 1С?

Для подключения к 1С нужно несколько простых шагов:

  • на стороне 1С установить расширение "Бром", которое можно скачать с официального сайта;
  • настроить права доступа для существующего или нового пользователя;
  • на стороне Python установить одноименный пакет "brom" и создать объект класса "БромКлиент", передав в него строку подключения.

Код будет выглядеть примерно так:

Пример создания Бром-клиента в Python c передачей строки подключения.
Пример создания Бром-клиента в Python c передачей строки подключения.

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

Как вызвать процедуру или функцию в 1С?

Для вызова функции или процедуры достаточно обратиться к соответствующему методу по его имени и передать параметры так же, как это делается в 1С:

Пример вызова методов 1С из Python.
Пример вызова методов 1С из Python.

Вызываемые методы принимать и возвращать данные сложных типов. Например, метод "ПолучитьКурсВалюты" принимает на вход "СправочникСсылку", а возвращает "ТаблицуЗначений".

Как работать со ссылками на объекты 1C?

Как только вы получили на стороне клиента ссылку на объект 1С вы не только можете передавать его в качестве параметра, но и получать данные объекта непосредственно через эту ссылку:

В данном примере мы получаем ссылку на объект 1С в Python и далее читаем его поля и табличную чать.
В данном примере мы получаем ссылку на объект 1С в Python и далее читаем его поля и табличную чать.

Следует помнить, что при обращении к полю объекта по ссылке клиент будет засасывать все данные объекта, поэтому этим лучше не увлекаться.Через Бром-клиента можно получать ссылки на предопределенные объекты 1С, а также генерировать ссылки на стороне клиента, если вам известен GUID объекта. Все это будет происходить без обращения к серверу.

Как редактировать объекты 1С?

Бром-клиент позволяет создавать, редактировать и удалять объекты коллекций 1С. Синтаксис работы с объектами в Бром очень похож на синтаксис в 1С. Мы получаем либо новый пустой объект, либо уже существующий через ссылку, заполняем его поля и табличный части и вызываем метод "Записать". Вот так можно создать новый документ:

Создание нового документа в 1С из Python.
Создание нового документа в 1С из Python.

А вот так можно его отредактировать:

Редактирование документа в 1С из Python. Контекст объекта получен из сохраненной ранее ссылки.
Редактирование документа в 1С из Python. Контекст объекта получен из сохраненной ранее ссылки.

Как формировать выборки из коллекций 1С?

Бром-клиент позволяет формировать выборки из произвольных объектных коллекций 1С. Выборка - это список ссылок на объекты определенной коллекции 1С, к которым опционально могут быть применены условия отбора и сортировки. Вот краткий пример использования:

Формирование выборки объектов из справочника "Номенклатура".
Формирование выборки объектов из справочника "Номенклатура".

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

Как выполнять запросы к базе 1С?

Чтобы выполнить запрос к базе данных 1С достаточно создать объект "Запрос", передать в него текст запроса и выполнить. В качестве результата будет возвращена "ТаблицаЗначений" или "ДеревоЗначений" (это завивист от типа обхода). Вот пример:

Пример выполнения запроса к базе 1С из Python с передачей параметров.
Пример выполнения запроса к базе 1С из Python с передачей параметров.

В данном примере мы создали запрос, который выбирает номенклатуру из указанных в параметре групп. В качестве значения параметры мы передали массив, в котором содержатся две ссылки на группы номенклатуры.

Материалы по теме

В данной статье возможности Бром-расширения описаны совсем кратко. У проекта есть официальный сайт, в котором представлена подробная документация и даже обучающие видеоролики:

-8