Описание


PG1C - это расширение PostgreSQL, которое "встраивает" информационную базу 1С (файловую или клиент-серверную) в PostgreSQL - создает и обновляет таблицы максимально идентичные таблицам 1С (объектам конфигурации). Данные 1С интегрированы в PostgreSQL "как есть": простые SQL-запросы копируются из платформы 1С (например, из Консоли запросов) в PostgreSQL без изменений, сложные — с минимальными изменениями.

Данные в таблицах обновляются либо по расписанию, либо непосредственно в SQL-запросе. Поддерживаются 4 режима обновления данных: полное и быстрое отдельной процедурой (например, в фоновом режиме по расписанию), полное и по первичному ключу в SQL-запросе (например, в важных отчетах). Обновление метаданных выполняется без пересоздания таблицы, данных — без перезаписи строк таблицы, это позволяет настраивать права доступа к таблице, создавать индексы, внешние ключи и представления.

Схема взаимодействия


Схема взаимодействия между 1C:Предприятия и PostgreSQL



Простой пример


-- Устанавливаем расширение и настраиваем доступ к серверу 1С
create extension pg1c;
update pg1c.server_1c set web_address='192.168.1.10',publication='InfoBase',user_1c='odata';

-- Создаем таблицу и загружаем данные из 1С
select pg1c.create_table('Справочник.Контрагенты');

-- Выбираем данные из таблицы
select * from Справочник.Контрагенты;

-- Выбираем данные из табличной части 2 способами
select * from Справочник.Контрагенты_КонтактнаяИнформация;
select КонтактнаяИнформация from Справочник.Контрагенты;

-- Обновляем и выбираем данные
select * from Справочник.Контрагенты();


SQL-запросы в консоли запросов 1С



SQL-запросы в консоли запросов 1С

SQL-запросы в PostgreSQL, перенесены с минимальными изменениями



SQL-запросы в PostgreSQL


Устройство и принцип работы


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

Расширение PG1C обращается к платформе 1С через web-сервер по протоколу OData, на основе метаданных создает в PostgreSQL таблицы и хранимые процедуры для обновления данных. Созданные хранимые процедуры вызываются по расписанию или непосредственно в SQL-запросе. Поддерживается работа с несколькими серверами 1С в одной бд PostgreSQL: для каждого сервера можно настроить отдельные схемы (например, через префикс) или для каждой таблицы 1С явно указать схему и наименование в PostgreSQL. PostgreSQL имеет ограничение 63 байта на длину имен таблиц и столбцов. Длинные имена либо усекаются, либо сокращаются (настраивается). При усечении в SQL-запросе можно использовать и длинное имя (как в 1С).


Основные процедуры и функции



pg1c.create_table([таблица_1С]) —создание в PostgreSQL таблицы аналогичной таблице 1С
[Таблица_1С]() —полностью обновить таблицу и вернуть ее
pg1c.refresh_data_all() —обновить данные всех созданных таблиц


Более подробно на странице Документация


Ключевые особенности



Ограничения





Highload Plugin — модификация под высокие нагрузки


Для высоконагруженных систем разработана коммерческая модификация расширения, в которой быстрое обновление данных в Postgres (процедура pg1c.refresh_data_all(fast=>true)) происходит через захват изменений данных в 1С (Change Data Capture). Протокол OData, который использовается в базовой весрии, не позволяет получать только изменения. Механизм CDC можно применять выборочно — например, только для важных объектов конфигурации (таблиц 1С).

Плагин входит в состав PGSuite Highload Pack

Преимущества


Иными словами, БД 1С и PostgreSQL можно сделать почти синхронными (1-2 минуты).


Архитектура и реализация



В 1С:Предприятие устанавливается расширение состоящее из Плана обмена и HTTP-сервиса с общим названием PG1C, в состав Плана обмена добавляются необходимые таблицы, HTTP-сервис публикуется.
Если при выполнении процедур pg1c.refresh_metadata или pg1c.refresh_all через HTTP-сервис определяется, что объект конфигурации (таблица 1С) добавлена в План обмена, то создается отдельная хранимая процедура для быстрого обновления одной записи. Поцедура pg1c.refresh_data_all с параметром fast=>true работает принципиально иначе: получает через HTTP-сервис изменения, вызывает для них процедуры быстрого обновления, отправляет подтвердение в План обмена о успешном обновлении данных.


Обзорное видео


Обзорное видео размещено на RUTUBE

▲