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