Коннектор PostgreSQL для 1С и OneScript (open-source)

20.02.25

Интеграция - Внешние источники данных

Библиотека для работы с базами PostgreSQL на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

Если вы не слышали ранее об Открытом Пакете Интеграций (что вполне вероятно), то небольшая вводная часть ниже, под катом. Тем, кто уже знаком с ОПИ, данный раздел можно пропустить.

 
 Что такое Открытый Пакет Интеграций

 

Открытый Пакет Интеграций (ОПИ) - это 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 (ставьте звездочки, спасибо :Р)


 

Примеры работы

И еще немного примеров работы для некоторых функций. Их также можно найти в основной документации, но здесь они позволяют понять уже сейчас, то ли это, что вам нужно. Поэтому, под катом:

 

 
 Большой пример произвольных SQL-запросов
 
 Создание таблицы
 
 Добавление записей в таблицу
 
 Удаление записей по фильтру

 

 

Ну, вот, собственно, и все! Если в не слышали ранее про ОПИ, то напомню, что кроме 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

PostgreSQL postgres SQL СУБД БД DB коннектор внешняя компонента

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование 1C:Бухгалтерия Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    24598    29    49    

42

Розничная торговля Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтерский учет 1С:Бухгалтерия 3.0 Фармацевтика, аптеки Россия Бухгалтерский учет Платные (руб)

Внешняя обработка загрузки данных из файла-выгрузки, сформированного в программе F3 TAIL версии 3.4 (и выше) или еФарма версии 2.1, в базу конфигурации 1С: Бухгалтерия предприятия 8, ред. 3.0 (базовая, ПРОФ, КОРП, ФРЕШ).

13200 руб.

19.12.2016    49391    103    106    

73

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

10200 руб.

24.06.2021    22434    62    55    

40

Внешние источники данных Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Розница 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Платные (руб)

Быстро и легко. Выгрузка всех элементов и групп номенклатуры (с их иерархией), кроме помеченных на удаление. Без использования COM-объектов.

4800 руб.

16.08.2023    2136    6    8    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dsdred 3929 20.02.25 10:52 Сейчас в теме
Антон, привет. Хасуру трогал?
https://hasura.io/
2. bayselonarrend 2733 20.02.25 11:00 Сейчас в теме
(1) Привет, нет, первый раз слышу
3. dsdred 3929 20.02.25 12:30 Сейчас в теме
(2) Глянь. Это как раз по теме публикации и не только.
ilyav; bayselonarrend; +2 Ответить
4. Angoleiro 24.02.25 08:15 Сейчас в теме
Большое спасибо за отличную библиотеку. Полдня изучал различные способы подключения к базе на Postgre из 1С размещенной на MS SQL и без установки дополнительного ПО решений не нашел. Благодаря вашей библиотеке задача решилась в три строчки кода. Не свойственный 1С удобный программный интерфейс. Благослови вас Нуралиев.
5. bayselonarrend 2733 26.02.25 09:10 Сейчас в теме
(4) Отлично, очень рад, что помогло)
6. mserg27 28.04.25 18:11 Сейчас в теме
Для Postgres не хватает настройки таймаутов.
bayselonarrend; +1 Ответить
7. mserg27 30.04.25 11:09 Сейчас в теме
Под линуксом РезультатПодключения = Ложь и соответственно объект не создается

РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.OPI_PostgreSQL", "PostgreSQL", ТипВнешнейКомпоненты.Native);

Static hostname: srv1c-redos
Icon name: computer-vm
Chassis: vm
Machine ID: 885f8247918d481b8d6df3970e9edcca
Boot ID: bef2fd3ae24e493ba2822ebbcd6be214
Virtualization: kvm
Operating System: RED OS MUROM (7.3.4)
CPE OS Name: cpe:/o:redos:redos:7
Kernel: Linux 6.1.52-1.el7.3.x86_64
Architecture: x86-64
8. bayselonarrend 2733 30.04.25 11:12 Сейчас в теме
(7) Посмотрите, все ли удовлетворено по зависимостям
openintegrations.dev/docs/Start/Component-requirements/
10. chingul 21.05.25 11:15 Сейчас в теме
(8) Антон, добрый день. У меня задача которую можно (мне кажется) решить с помощью вашего решения, но нет людей кто хотел бы с этим разбираться. Вы могли бы мне помочь?
11. bayselonarrend 2733 21.05.25 11:17 Сейчас в теме
(10) Добрый. Если это какая-то полноценная доработка на конкретном проекте, то я не возьмусь. Но если нужна помощь или есть вопросы/предложения по доработке библиотеки, то помогу чем смогу
12. chingul 21.05.25 11:23 Сейчас в теме
(11) Вопросов или предложений по вашей библиотеке у меня нет.

это какая-то полноценная доработка на конкретном проекте, то я не возьмусь

Можете кого-нибудь порекомендовать, кто бы смог мне помочь? Проект опубликован на фрилансе:
https://infostart.ru/freelance/#/orders/2388431
13. bayselonarrend 2733 21.05.25 11:28 Сейчас в теме
(12) Ну, в целом, будто бы любой программист, которого вы сможете найти, с этим справится. Не могу конкретно кого-то подсказать
14. chingul 21.05.25 11:40 Сейчас в теме
(13)
будто бы любой программист, которого вы сможете найти, с этим справится

Это в теории :)
На практике меня программист просит (см. скрин) разобраться с библиотекой и рассказать потом ему. А другие вообще не хотят ничего изучать. Именно поэтому ИИ всех победит в итоге)
Прикрепленные файлы:
15. bayselonarrend 2733 21.05.25 11:41 Сейчас в теме
(14) Так а чего вы ему просто ссылку не скините?) Я думаю, он это имел ввиду
16. chingul 21.05.25 11:45 Сейчас в теме
(15) Нет))
Я сам ЕМУ прислал ссылку на вашу библиотеку, чтобы облегчить ему задачу. Типа посмотри, там уже всё есть. А диалог далее, это ЕГО просьба изучить ваш модуль и ПРИСЛАТЬ ЕМУ документацию.

Я понимаю, что в это сложно поверить, но это так))
Прикрепленные файлы:
17. bayselonarrend 2733 21.05.25 11:47 Сейчас в теме
(16) Понял

Я понимаю, что в это сложно поверить, но это так))


Да, люди разные бывают. Но, думаю, это все таки исключение
18. chingul 22.05.25 10:38 Сейчас в теме
(17) Антон, я нашёл исполнителя. Но, у меня есть несколько уточнений про библиотеку и OneScript в частности. Как их с вами можно обсудить?
19. bayselonarrend 2733 22.05.25 12:19 Сейчас в теме
20. chingul 22.05.25 12:22 Сейчас в теме
(19)
Я надеялся спросить лично))
Чтобы не разводить в комментариях флуд.
21. bayselonarrend 2733 22.05.25 12:25 Сейчас в теме
(20) Спросите пока тут, может у меня получится комплексно ответить и кто-нибудь потом тоже найдет ответ на свой вопрос. Если нет, то потом скину tg
24. chingul 12.06.25 01:13 Сейчас в теме
(21) Мне требуется ваша консультация. Найденный 1С программист не может разобраться с вашим решением. Как с вами связаться?
Спрашиваю это уже повторно.
25. bayselonarrend 2733 12.06.25 06:34 Сейчас в теме
9. chingul 21.05.25 11:12 Сейчас в теме
(4) Здравствуйте, Вячеслав. Вы могли бы мне помочь с аналогичной задачей? Как с вами связаться?
22. mserg27 22.05.25 12:41 Сейчас в теме
Даты возвращаются в виде yyyy-dd-mm hh24:mi:ss
Это не iso и типовой функции ПрочитатьJSON их не подсунешь, приходится свой парсер писать
23. bayselonarrend 2733 22.05.25 12:58 Сейчас в теме
(22)
приходится свой парсер писать


Пробел на "T" надо зменить, да
Оставьте свое сообщение