Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Тем, кто уже знаком с ОПИ, данный раздел можно пропустить.
Открытый Пакет Интеграций (ОПИ) - это open-source набор методов для простой и быстрой интеграции с различными популярными API. Он состоит из аналогичных по функционалу 1С-расширения (CFE), OS-пакета и программы для Windows и Linux, которые предоставляют готовые функции для работы с целым набором различных онлайн-сервисов.
- ОПИ бесплатен и имеет открытый исходный код на GitHub. Вы всегда можете получить последнюю версию библиотеки на странице репозитория, а подписавшись - узнавать о выходе обновлений. Все релизы сопровождаются статьями на Инфостарт и разделами единой документации. На Инфостарт вы можете подписаться уже хоть сейчас, а про документацию я расскажу далее.
- Удобная единая документация. Она расположена на сайте openintegrations.dev и содержит в себе всю информацию, необходимую для работы: инструкции по предварительным действиям для начала интеграции, описания всех методов с параметрами и возвращаемыми значениями, примеры кода и т.д. Каждый API имеет там свой раздел.
- Простая установка. ОПИ распространяется во множестве вариантах: как XML файлы расширения, как EDT проект расширения, как файл расширения формата .cfe (версия 1С 8.3.9), как файл пакета для OneScript и еще в целом наборе пакетов и файлов для Windows и Linux. Из этого набора вы всегда сможете выбрать тот способ установки, который лучше подойдет для вашей конкретной задачи
На момент последнего обновления данной статьи, доступны следующие API:
Наиболее актуальную информацию можно посмотреть в репозитории или на вводной странице документации.
PostgreSQL - крайне популярная реляционная SQL СУБД - одна из самых популярных в мире, хорошо известная в том числе и в 1С-сообществе
Несмотря на то, что тема PostgreSQL в нашей среде наиболее актуальна сейчас, когда дело касается внедрения и оптимизации для работы с самой платформой 1С:Предприятие, она также часто встречается и как просто связующее звено 1С с другими системами, использующими ее как источник данных (вроде сайтов или приложений)
О втором варианте работы сегодня и пойдет речь: в данном обновлении Открытого пакета интеграций были добавлены методы для работы с базами данных PostgreSQL без необходимости в установке дополнительных драйверов или создании внешних источников данных. Но обо всем по порядку
Реализованные методы
PostgreSQL - вторая СУБД в наборе ОПИ. Не так давно, в одном из предыдущих обновлений, уже был добавлен коннектор для работы с базами SQLite, состоящий из основных функций, вроде выполнения произвольных SQL запросов, и небольшой ORM, реализующей набор основных действий, наиболее часто встречающихся при работе с подобными источниками данных. Сегодняшний набор не сильно отличается от предыдущего, хотя и был слегка расширен. На данный момент в него входят:
- Основные методы
- Открытие соединения
- Закрытие соединения
- Выполнение SQL-запроса
- Формирование строки подключения из основных данных
- Методы ORM
- Создание базы данных
- Удаление базы данных
- Отключение всех соединений базы данных
- Получение информации о таблице
- Создание таблицы
- Очистка таблицы
- Удаление таблицы
- Добавление записей
- Получение записей
- Обновление данных записей
- Удаление записей
А, собственно, и все: вы просто можете работать с произвольными базами postgres при помощи этих методов без каких-либо дополнительных действий! Разве что мы еще остановимся на паре моментов, которые мне кажутся важными и могут вызывать вопросы
Параметры запросов
Данное решение позволяет не только выполнять произвольные запросы, но и устанавливать позиционные параметры в них. Каждый такой параметр должен представлять из себя структуру с одним КлючЗначением, где ключ - название типа данных, а значение - непосредственно значение параметра. Ниже приведены все доступные типы данных и подходящие значения 1С:
🟢 - Реализовано, проверено; 🟡 - Реализовано, не проверено
Тип | Поддержка | Синонимы | Допустимые нативные типы |
---|---|---|---|
BOOL | 🟢 | - | Булево |
"char" | 🟢 | OLDCHAR | Число |
SMALLINT | 🟢 | - | Число |
SMALLSERIAL | 🟢 | - | Число |
INT | 🟢 | - | Число |
SERIAL | 🟢 | - | Число |
BIGINT | 🟢 | - | Число |
BIGSERIAL | 🟢 | - | Число |
OID | 🟢 | - | Число |
REAL | 🟢 | - | Число |
DOUBLE PRECISION | 🟢 | DOUBLE_PRECISION | Число |
VARCHAR | 🟢 | - | Строка |
TEXT | 🟢 | - | Строка |
CHAR | 🟢 | - | Строка |
CITEXT | 🟢 | - | Строка |
NAME | 🟢 | - | Строка |
INET | 🟢 | - | Строка |
UUID | 🟢 | - | Строка, УникальныйИдентификатор |
TIMESTAMP | 🟢 | - | Дата, Строка (ISO 8601, RFC 3339) |
TIMESTAMP WITH TIME ZONE | 🟢 | TIMESTAMP_WITH_TIME_ZONE | Дата (часовой пояс будет указан как UTC), Строка (RFC 3339) |
DATE | 🟢 | - | Дата (с любым временем), Строка (ISO 8601, RFC 3339) |
TIME | 🟢 | - | Дата (с любой датой), Строка (ISO 8601, RFC 3339) |
BYTEA | 🟢 | - | ДвоичныеДанные, Путь к файлу, Base64 строка (все приводится к Base64 строке) |
JSON | 🟢 | - | Массив, Структура, Соответствие, Строка (в JSON формате) |
JSONB | 🟢 | - | Массив, Структура, Соответствие, Строка (в JSON формате) |
LTREE | 🟡 | - | Строка |
LQUERY | 🟡 | - | Строка |
LTXTQUERY | 🟡 | - | Строка |
HSTORE | 🟡 | - | Структура, Соответствие |
Также вы всегда можете найти эту таблицу на основной странице библиотеки PostgreSQL в документации проекта ОПИ. Некоторые типы здесь имеют синонимы - это было введено для использования их в структурах, где ключи могут быть только подходящими строками без пробелов и символов. Вот, кстати, как это выглядит в коде:
Адрес = "127.0.0.1";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "test_data";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Соединение = OPI_PostgreSQL.ОткрытьСоединение(СтрокаПодключения);
// INSERT с параметрами
ТекстЗапроса = "
|INSERT INTO test_table (name, age, salary, is_active, created_at, data)
|VALUES ($1, $2, $3, $4, $5, $6);";
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("NAME" , "Vitaly"));
МассивПараметров.Добавить(Новый Структура("INT" , 25));
МассивПараметров.Добавить(Новый Структура("REAL" , 1000.12));
МассивПараметров.Добавить(Новый Структура("BOOL" , Истина));
МассивПараметров.Добавить(Новый Структура("DATE" , ТекущаяДатаСеанса());
МассивПараметров.Добавить(Новый Структура("BYTEA", Новый ДвочиныеДанные("C:/pic.png")));
Результат = OPI_PostgreSQL.ВыполнитьЗапросSQL(ТекстЗапроса, МассивПараметров, , Соединение);
Что под капотом?
Как и коннектор SQLite, коннектор для PostgreSQL это внешняя Native API компонента на Rust. Она не очень сложная и просто использует крейт (пакет) postgres, в котором уже вся основа реализована и проверена, собственно, Rust сообществом
Найти ее можно в общем макете расширения ОПИ как zip с версиями под все основные системы: x86 и x64 Windows и Linux. Фактическое тестирование проводилось на Windows x64 и, косвенно (через OneScript), на Linux x64. Исходники лежат, как и весь проект, в репозитории на GitHub (ставьте звездочки, спасибо :Р)
Примеры работы
И еще немного примеров работы для некоторых функций. Их также можно найти в основной документации, но здесь они позволяют понять уже сейчас, то ли это, что вам нужно. Поэтому, под катом:
Ну, вот, собственно, и все! Если в не слышали ранее про ОПИ, то напомню, что кроме PostgreSQL тут есть куча других решений для интеграции с популярными сервисами и технологиями, которые доступны не только как расширение для 1С, но и как OneScript-пакет и даже полноценное консольное приложений для Windows и Linux. А в онлайн-документации всегда есть описание и примеры для каждого реализованного метода!
Все ссылки для перехода ниже
Спасибо за внимание!
Если вам нравится ОПИ, то не забывайте поддерживать его на GitHub и Инфостарт!
Репозиторий ОПИ: github.com/Bayselonarrend/OpenIntegrations
Последний релиз: github.com/Bayselonarrend/OpenIntegrations/releases/latest
Другие статьи про Открытый пакет интеграций на Инфостарт:
![]()
Мой GitHub: https://gitub.com/Bayselonarrend OpenYellow: https://openyellow.org Лицензия MIT: https://mit-license.org
Вступайте в нашу телеграмм-группу Инфостарт