Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Для тех, кто уже знаком с ОПИ, данный раздел можно пропустить.
Открытый Пакет Интеграций (ОПИ) - это open-source набор методов для простой и быстрой интеграции с различными популярными API. Он состоит из аналогичных по функционалу 1С-расширения (CFE), OS-пакета и программы для Windows и Linux, которые предоставляют готовые функции для работы с целым набором различных онлайн-сервисов.
- ОПИ бесплатен и имеет открытый исходный код на GitHub. Вы всегда можете получить последнюю версию библиотеки на странице репозитория, а подписавшись - узнавать о выходе обновлений. Все релизы сопровождаются статьями на Инфостарт и разделами единой документации. На Инфостарт вы можете подписаться уже хоть сейчас, а про документацию я расскажу далее.
- Удобная единая документация. Она расположена на сайте opi.neocities.org и содержит в себе всю информацию, необходимую для работы: инструкции по предварительным действиям для начала интеграции, описания всех методов с параметрами и возвращаемыми значениями, примеры кода и т.д. Каждый API имеет там свой раздел.
- Простая установка. ОПИ распространяется во множестве вариантах: как XML файлы расширения, как EDT проект расширения, как файл расширения формата .cfe (версия 1С 8.3.9), как файл пакета для OneScript и еще в целом наборе пакетов и файлов для Windows и Linux. Из этого набора вы всегда сможете выбрать тот способ установки, который лучше подойдет для вашей конкретной задачи
На момент последнего обновления данной статьи, доступны следующие API:
Наиболее актуальную информацию можно посмотреть в репозитории или на вводной странице документации.
SQLite - популярная встраиваемая СУБД, которая часто используется при разработке мобильных и веб-приложений. Ее особенность заключается в том, что для работы не требуется сервер баз данных: данные хранятся в файлах специального формата
В сегодняшнем обновлении был реализован набор функций, позволяющий работать с базами данных этой СУБД из 1С, а именно:
- Открытие соединения
- Закрытие соединения
- Выполнение произвольного SQL запроса
- Получение информации о таблице
- Создание таблицы
- Добавление записей
- Получение записей
- Обновление записей
- Удаление записей
- Удаление таблицы
- Очистка таблицы
Все эти методы можно условно поделить на две категории: Основные методы и ORM
Основные методы
Вы можете использовать функционал библиотеки в качестве простого SQL коннектора - т.е. выполнять произвольные SQL-запросы, а также указывать позиционные параметры для них, например:
Запрос Create (создание таблицы)
Соединение = OPI_SQLite.ОткрытьСоединение(ИВФ);
// CREATE
ТекстЗапроса = "
|CREATE TABLE test_table (
|id INTEGER PRIMARY KEY,
|name TEXT,
|age INTEGER,
|salary REAL,
|is_active BOOLEAN,
|created_at DATETIME,
|data BLOB
|);";
Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, , , Соединение);
Запрос Insert (вставка новых строк в таблицу) с позиционными параметрами
ТекстЗапроса = "
|INSERT INTO test_table (name, age, salary, is_active, created_at, data)
|VALUES (?1, ?2, ?3, ?4, ?5, ?6);";
МассивПараметров = Новый Массив;
МассивПараметров.Добавить("Vitaly"); // TEXT
МассивПараметров.Добавить(25); // INTEGER
МассивПараметров.Добавить(1000.12); // REAL
МассивПараметров.Добавить(Истина); // BOOL
МассивПараметров.Добавить(OPI_Инструменты.ПолучитьТекущуюДату()); // DATETIME
МассивПараметров.Добавить(Картинка); // BLOB
Результат = OPI_SQLite.ВыполнитьЗапросSQL(ТекстЗапроса, МассивПараметров, , Соединение);
Позиционные параметры передаются как массив с элементами одного из доступных типов: Строка, Число, Дата, Булево, ДвоичныеДанные. Именные параметры не поддерживаются
Параметр типа ДвоичныеДанные, или же BLOB в понимании SQLite, также может быть передан как структура вида "blob":<Путь к файлу>. Также JSON вида {"blob":<Путь к файлу>} является единственной возможностью использовать параметры данного типа в CLI версии OPI
В качестве значения параметра Соединение, может быть передано как заранее созданное соединение из метода ОткрытьСоединение(), так и просто путь к файлу базы (если файла базы нет по указанному пути - он будет создан). В случае с передачей пути к файлу, соединение будет открыто и закрыто в рамках выполнения функции
При передаче пустой строки будет создана база In-memory
In-memory database (резидентная база данных) — база данных, размещаемая в оперативной памяти
ORM
Для упрощения работы с библиотекой, также было добавлено несколько методов простого выполнения наиболее частых действий при работе с базой:
Технически, использование ORM и использование текстовых SQL-запросов не отличается: ORM просто формирует запрос по шаблону и точно так же выполняет его при помощи функции ВыполнитьЗапросSQL()
Подробнее об этих (и обо всех других) методах Открытого пакета интеграций можно узнать в документации
Возвращаемые значения
Также, вне зависимости от способа работы (ORM или тексты запросов), в качестве результата всегда возвращается структура. Ее наполнение зависит от того, является запрос успешным или нет, а также от необходимости получения данных в SQL-операции:
- Если запрос возвращает данные, то в результате будет структура с полями result: Истина (успешность выполнения) и data (с информацией) в случае успеха, либо же result: Ложь и error: с текстом ошибки, в случае неудачи
- Если вопрос не должен возвращать значение, то в качестве результата будет либо result: Истина при успехе, либо result: Ложь и error: с текстом ошибки при неудаче
Все SELECT запросы отмечаются как запросы с данными по умолчанию. Если вам необходимо получить данные в результате выполнения запроса, который не начинается с SELECT, то необходимо использовать параметр ФорсироватьРезультат в функции выполнения запроса
Функция ВыполнитьЗапросSQL(Знач ТекстЗапроса, Знач Параметры = "", Знач ФорсироватьРезультат = Ложь, Знач Соединение = "") Экспорт
О совместимости
Методы библиотеки основаны на Native API внешней компоненты на Rust.
Это уже вторая компонента в ОПИ, после прошлого обновления, реализующего TCP-клиент. Исходники этих двух компонент (и всех других компонент, если они появятся в будущем) можно найти в репозитории OpenIntegrations в отдельном каталоге addins
Используемая версия SQLite - 3.46.0. Компонента собрана под все платформы: x64 и x86 Windows и Linux. Тестировалась в x64 Windows-версии 1С и, косвено, на x64 Linux (через OneScript)
При возникновении проблем с этой библиотекой (или с любой другой, из набора ОПИ), будет очень здорово, если вы напишите об этом в комментариях или Issues репозитория (лучше Issues)
Спасибо за внимание!
Если вам нравится ОПИ, то не забывайте поддерживать его на 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