Описание
PG1C создает и обновляет в PostgreSQL таблицы максимально идентичные таблицам 1С (объектам конфигурации). Простые SQL-запросы копируются из консоли запросов 1С в PostgreSQL без изменений, сложные - с минимальными изменениями.
Данные в таблице обновляются либо по расписанию, либо непосредствнно в SQL-запросе. Поддерживаются 4 режима обновления данных: полное и быстрое отдельной процедурой (например, в фоне по расписанию), полное и по первичному ключу в SQL-запросе (например, в важных отчетах). Обновление метаданных выполняется без пересоздания таблицы, данных - без перезаписи строк стаблицы, это позволяет настраивать права доступа к таблице, создавать внешние ключи и представления.
-- Устанавливаем расширение create extension pg1c; -- Настраиваем доступ к серверу 1С update pg1c.server_1c set web_address='192.168.1.10',publication='УТ',user_1c='odata',password_1c='[пароль]'; -- Получаем URL к метаданным и проверяем его в WEB-браузере select pg1c.build_http_url(); -- Создаем таблицу select pg1c.create_table('Справочник.Контрагенты'); -- Выбираем данные из таблицы select * from Справочник.Контрагенты; -- Выбираем данные из табличной части 2 способами select * from Справочник.Контрагенты_КонтактнаяИнформация; select КонтактнаяИнформация from Справочник.Контрагенты; -- Обновляем и выбираем данные select * from Справочник.Контрагенты();
SQL-запросы в консоли запросов 1С
SQL-запросы в PostgreSQL, перенесены с минимальными изменениями
Платформа 1С:Предприятие поддерживает "из коробки" доступ к данным по открытому протоколу OData - (автоматически формируемый REST интерфейс. Установка и настройка состоит из 3 частей: установка WEB-сервера, публикация информационной базы в конфигураторе и выдача прав пользователю. Данный функционал доступен во всех конфигурациях, включая бесплатную учебную версию. Протокол OData позволяет получать не только данные, но и их описание (метаданные) - список доступных таблиц, табличные части, столбцы с типами данных, первичные и внешние ключи. В отличие от прямого доступа к данным 1С, работа по протоколу OData не нарушает лицензионного соглашения. Использование клиентской лицензии на подключение оптимизировано.
PG1C - расширение PostgreSQL, которое обращается к платформe 1С через WEB-сервер по протоколу OData, на основе метаданных создает в PostgreSQL таблицы и хранимые процедуры для обновления данных. Созданные хранимые процедуры вызываются по расписанию или непосредственно в SQL-запросе. Поддерживаниется работа с несколькими серверами 1С в одной бд PostgreSQL: для каждого сервера можно настроить отдельные схемы (например, через префикс) или для каждой таблицы 1С явно указать схему и наименование в PostgreSQL. PostgreSQL имеет ограничение 63 байта на длину имен таблиц и столбцов. Длинные имена либо усекаются, либо сокращаются (настраивается). При усечении в SQL-запросе можно использовать и длинное имя (как в 1С).
Основные процедуры и функции
| pg1с.create_table([таблица_1С]) | - | создание в PostgreSQL таблицы аналогичной таблице 1С |
| [Таблица_1С]() | - | полностью обновить таблицу и вернуть ее |
| pg1c.refresh_data_all() | - | обновить данные всех созданных таблиц |
Более подробно на странице Документация
- Идентичность таблиц - Названия, порядок и тип данных полей максимально соответствуют между собой в 1С и PostgreSQL
- Универсальность обновления данных - обновление данных возможно в фоне по расписанию в двух режимах - полное и быстрое, в SQL-запросе - полное и по первичному ключу
- "Мягкое" обновление данных - выполняется только update измененных строк, это позволяет избежать блокировок по первичному ключу
- Обновление метаданных - обновление метаданных (структуры) выполняется без пересоздания таблицы, это позволяет настраивать доступ, создавать индексы
- Длинные наименования - наименования усекаются до 63 байт (ограничение PostgeSQL), в SQL-запросах можно использовать полное имя таблицы - ошибки не будет. Альтернативно можно настроить автоматическое сокращение имен
- Составной типы 1С - поддерживается составной тип данных 1С, для него в PostgreSQL создан тип pg1c.value_any
- Загрузка данных частями - большие объемы данных загружаются частями во временную таблицу и только после полной загрузки выполняется обновление данных в одной транзакции
- Большие проекты - применение в больших проектах не рекомендуется: универсальность и избыточность инструмента приводят к значительному потребление ресурсов; ограничения протокола OData могут привести к необходимости менять технологию и полностью переделывать обмен. Как правило, в больших проектах участвуют: разработчики 1C, которые в рамках прикладного решения или расширения напишут HTTP-сервис; администраторы 1С, которые установят и настроят программный продукт 1С:Шина
- Ограничения OData - протокол OData не поддерживает получение прав пользователя на таблицу, транзакции, сортировку некоторых типов данных, огрубляет типы данных. Соответственно, ограничения OData перенесены в pg1c
- Сортировка в перечислениях - сортировка значений (поле Порядок) перечислений не передается, поле Порядок заполняется автоматически, но его можно отредактировать в PostgreSQL
- Радикальные изменения таблицы - при радикальных изменениях объекта конфигурации 1С (например, переназначение первичного ключа на другой реквизит) возможна некорректная корректировка таблицы в PostgreSQL, рекомендуется пересоздание (pg1с.drop_table и pg1с.create_table)
- Пересоздание представления - при изменении метаданных табличной части (например, удаление реквизита) соотвествующее представление удаляется и создается снова (PostgreSQL поддерживает только добавление столбцов в представление), рекомендуется создать хранимую функцию-обертку с динамическим запросом