Описание
Инструмент PG1C реализован как расширение PostgreSQL c бинарной и SQL-частями, распространяется как open-source и полностью бесплатен, включая поддержку
Требования к PostgreSQL
- Версия: 12 и выше
- Сборка: с поддержкой XML (опция --with-libxml), стандартные дистрибутивы https://www.postgresql.org/download/ поддерживают XML
- Кодировка базы данных: только UTF8, для создания БД можно использовать команду create database data_1c with encoding='UTF8' template template0;
Требования к платформе 1С:Предприятие
- Версия: 8.3.5 и выше
- Публикация на web-сервере: с опцией Публиковать стандартный интерфейс OData
- Информационная база: любая (файловая или клиент-серверная; учебная), БСП не требуется
Установка
- Microsoft Windows: скачать архив pg1c_win64.zip, распаковать его и выполнить исполняемый файл pg1c_install.cmd от имени администратора
- Linux: скачать и установить пакет, соответствующий ОС
pg1c_latest_amd64.deb - для Debian, Ubuntu, Astra Linux
pg1c-latest.x86_64.rpm - для RHEL-based (Red Hat Enterprise Linux, CentOS, Fedora, Oracle Linux, AlmaLinux, Rocky Linux, RedOS)
Особенности установки, пример настройки и использования описаны для каждого типа операционной системы
После установки выполняется настройка и создание расширения PG1C в базе данных
Настройка
- Публикация информационной базы 1С на web-сервере
- Разрешение доступа к объектам конфигурации (таблицам) по протоколу OData
- Создание расширения PG1C в базе данных и подключение к серверу 1С
После установки и настройки можно создавать таблицы и расписание по их обновлению, подробности на странице Документация
При возникновении любых затруднений оказываются бесплатные поддержка и консультации, подробности на странице Контакты
Для продвинутых пользователей есть полный zip-архив с исходным кодом, исполняемыми файлами, обработкой и примерами
Дистрибутив представляет собой архив pg1c_win64.zip, который содержит расширение PostgreSQL (SQL-скрипт и DLL-библиотека) и исполняемый файл-установщик pg1c_install.cmd. Установщик копирует расширение в директории PostgreSQL, для определения директорий установки используется программа pg_config.exe, которая ищется в переменной окружения PATH и директории C:\Program Files\PostgreSQL, Если программа не найдена, то возникает ошибка и требуется явное указание полного пути до программы.
Инструкция по установке
1. Скачиваем файл https://pg1c.org/files/download/pg1c_win64.zip
2. Открываем в проводнике папку Загрузки (в списке скачанных файлов иконка "Показать в папке")
3. Распаковываем архив pg1c_win64.zip (правой кнопкой мыши действие "Извлечь все...")
4. В созданной директории pg1c_win64 (не путать с одноименным архивом) запускаем файл pg1c_install.cmd от имени администратора (правой кнопкой мыши действие "Запуск от имени администратора"). Предупреждение безопасности "Не удается проверить издателя" игнорируем (или отказываемся от установки и самостоятельно собираем расширение из исходных кодов)
Дополнительно (необязательно).
Выполняется при возникновении ошибки поиска программы pg_config.exe или необходимости установки в нестандартную директорию.Для исправления в первой строке файла pg1c_install.cmd указываем полный путь до программы pg_config.exe: Смотрим путь в описании службы PostgreSQL (нажав Ctrl+Shift+Esc запустите Диспетчер задач → вкладка Службы → Открыть службы → Сведения) Открываем файл pg1c_install.cmd на редактирование (в проводнике правой кнопкой мыши выбираем действие "Изменить"), убираем комментарий и указываем путь по аналогии с примером. Снова повторяем п.2
Пакет pg1c_latest_amd64.deb содержит расширение PostgreSQL (SQL-скрипт и библиотека .so). При установке расширение копируется в директории PostgreSQL, для определения директорий установки используется программа pg_config, которая ищется в переменной окружения PATH и директории /usr/lib/postgresql. Если программа pg_config не найдена, то возникает ошибка и требуется явное указание полного пути до программы.
Инструкция по установке
В командной строке под пользователем root скачиваем файл pg1c_latest_amd64.deb и устанавливаем его:
curl -O https://pg1c.org/files/download/pg1c_latest_amd64.deb
apt install ./pg1c_latest_amd64.deb
Пример установки
root@debian:~# cd /tmp
root@debian:/tmp# curl -O https://pg1c.org/files/download/pg1c_latest_amd64.deb
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27920 100 27920 0 0 393k 0 --:--:-- --:--:-- --:--:-- 395k
root@debian:/tmp# apt install ./pg1c_latest_amd64.deb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'pg1c' instead of '/tmp/pg1c_latest_amd64.deb'
The following NEW packages will be installed:
pg1c
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 0 B/27.9 kB of archives.
After this operation, 194 kB of additional disk space will be used.
Get:1 /tmp/pg1c_latest_amd64.deb pg1c amd64 25.4-0 [27.9 kB]
(Reading database ... 56205 files and directories currently installed.)
Preparing to unpack /tmp/pg1c_latest_amd64.deb ...
Unpacking pg1c (25.4-0) ...
Setting up pg1c (25.4-0) ...
Расширение PG1C успешно установлено / PG1C extension installed successfully !
Дальнейшие настройки выполняются в SQL-менеджере или в терминальном клиенте psql, например:
create extension pg1c;
update pg1c.server_1c set web_address='192.168.1.10',publication='УТ',user_1c='odata',password_1c='[пароль]';
select pg1c.http_url() "URL для проверки в браузере";
select pg1c.create_table('Справочник.Контрагенты');
select * from Справочник.Контрагенты;
Дополнительно (необязательно).
Выполняется при возникновении ошибки поиска программы pg_config или необходимости установки в нестандартную директорию.Перед установкой пакета в переменной pg_config указываем полный путь до программы:
pg_config=/usr/lib/postgresql/15/bin/pg_config apt install ./pg1c_latest_amd64.deb
Пакет pg1c-latest.x86_64.rpm содержит расширение PostgreSQL (SQL-скрипт и библиотека .so). При установке расширение копируется в директории PostgreSQL, для определения директорий установки используется программа pg_config, которая ищется в переменной окружения PATH и директориях /usr/pgsql-*. Если программа pg_config не найдена, то возникает ошибка и требуется явное указание полного пути до программы.
Инструкция по установке
В командной строке под пользователем root устанавливаем пакет pg1c-latest.x86_64.rpm:
yum install https://pg1c.org/files/download/pg1c-latest.x86_64.rpm
Пример установки
[root@builder-rpm ~]# yum install https://pg1c.org/files/download/pg1c-latest.x86_64.rpm
Loaded plugins: fastestmirror
pg1c-latest.x86_64.rpm | 27 kB 00:00:00
Examining /var/tmp/yum-root-Wa_KSJ/pg1c-latest.x86_64.rpm: pg1c-26.1-0.x86_64
Marking /var/tmp/yum-root-Wa_KSJ/pg1c-latest.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package pg1c.x86_64 0:26.1-0 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================
Package Arch Version Repository Size
=======================================================================================================
Installing:
pg1c x86_64 26.1-0 /pg1c-latest.x86_64 190 k
Transaction Summary
=======================================================================================================
Install 1 Package
Total size: 190 k
Installed size: 190 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
/var/tmp/rpm-tmp.VpZHkQ: line 2: pg_config: command not found
Installing : pg1c-26.1-0.x86_64 1/1
/var/tmp/rpm-tmp.NWtcWL: line 1: --version: command not found
/var/tmp/rpm-tmp.NWtcWL: line 2: --pkglibdir: command not found
cp: cannot stat ‘/tmp/pg1c/rpm/lib/pg1c.so.’: No such file or directory
/var/tmp/rpm-tmp.NWtcWL: line 3: --sharedir: command not found
cp: target ‘/extension/’ is not a directory
Расширение PG1C успешно установлено / PG1C extension installed successfully !
Дальнейшие настройки выполняются в SQL-менеджере или в терминальном клиенте psql, например:
create extension pg1c;
update pg1c.server_1c set web_address='192.168.1.10',publication='УТ',user_1c='odata',password_1c='[пароль]';
select pg1c.http_url() "URL для проверки в браузере";
select pg1c.create_table('Справочник.Контрагенты');
select * from Справочник.Контрагенты;
Verifying : pg1c-26.1-0.x86_64 1/1
Installed:
pg1c.x86_64 0:26.1-0
Complete!
Дополнительно (необязательно).
Выполняется при возникновении ошибки поиска программы pg_config или необходимости установки в нестандартную директорию.Перед установкой пакета в переменной pg_config указываем полный путь до программы:
pg_config=/usr/pgsql-15/bin/pg_config yum install https://pg1c.org/files/download/pg1c-latest.x86_64.rpm
Для работы с данными по протоколу OData необходимо выполнить публикацию информационной базы
Инструкция для ОС Microsoft Windows
1. Определяем битность (32 или 64) платформы 1С:Предприятие
Правой кнопкой на ярлыке запуска смотрим рабочую папку: C:\Program Files (x86)\... - 32 бита, иначе - 64.
или
Запускаем конфигуратор, находим его в Диспетчере задач (для запуска нажмите Ctrl+Shift+Esc), для 32-битного приложения после названия будет (32 бита)
2. Устанавливаем web-сервер Apache
С сайта https://www.apachelounge.com/download/ скачиваем дистрибутив нужной битности.
Дистрибутив представляет собой zip-архив, распаковываем его в папку C:\Apache24\.
В командной строке (для запуска нажмите Win+R и введите cmd) создаем службу и запускаем ее командами:
cd C:\Apache24\bin
httpd.exe -k install
httpd.exe -k start
Для проверки в браузере переходим по адресу http://localhost/, должна появиться надпись "It works!"
3. Публикация информационной базы
1С:Предприятие должно быть установлено с компонентом Модуль расширения веб-сервера, если данный компонент не установлен, необходимо доустановить его (Панель управления → Программы → Программы и компоненты → выбираем 1С:Предприятие → Изменить).
Запускаем конфигуратор от имени администратора (правая кнопка мыши на ярлыке), выполняем пункт меню Администрирование → Публикация на веб-сервере, вводим имя публикации (например, InfoBase), выбор Публиковать стандартный интерфейс OData оставляем и нажимаем Опубликовать.
Для проверки в браузере переходим по адресам, заменив InfoBase на имя публикации:
http://localhost/InfoBase/ - клиентское приложение
http://localhost/InfoBase/odata/standard.odata/ - интерфейс OData
Также можно воспользоваться оригинальной инструкцией от фирмы 1С https://its.1c.ru/db/metod8dev/content/5978/hdoc
Видеоинструкция размещена на RUTUBE
В конфигураторе не предусмотрено редактирование состава (списка объектов конфигурации) интерфейса OData, для изменения состава используются функции ПолучитьСоставСтандартногоИнтерфейсаOData и УстановитьСоставСтандартногоИнтерфейсаOData. Рекомендуется воспользоваться обработкой PG1C_Состав_OData.epf, которая входит в состав инструмента.
Инструкция по использованию
1. Скачиваем обработку https://pg1c.org/files/download/PG1C_Состав_OData.epf
2. В приложении 1С:Предприятие запускаем обработку (Сервис и настройки → Файл → Открыть → Выбираем файл PG1C_Состав_OData.epf)
3. В появившейся форме выбираем нужный объект конфигурации (таблицу) из выпадающего списка и нажимаем кнопку Добавить
4. Для проверки в браузере переходим по адресу http://localhost/InfoBase/odata/standard.odata/Catalog_Контрагенты?$format=json, заменив InfoBase на имя публикации, Catalog_Контрагенты - на объект конфигурации (таблицу)
Пример открытия обработки и публикации таблицы Справочник.Контрагенты
Инструкция по созданию расширения, настройке сервера и созданию таблицы
1. Подключаемся к базе данных и выполняем команду create extension pg1c. При создании расширения будет создана таблица pg1c.server_1c с одним сервером DEFAULT. Для настройки подключения редактируем таблицу pg1c.server_1c в терминальном клиенте psql или SQL-менеджере (DBeaver или pgAdmin).
2. Проверяем параметры подключения: выполняем SQL-функцию pg1c.http_url, которая возвращает HTTP-ссылку для получения метаданных, и открываем полученную ссылку в браузере (в Linux вызываем утилиту curl). При возникновении ошибок редактируем таблицу pg1c.server_1c.
3. Проверяем доступность таблиц по протоколу OData: выполняем SQL-функцию pg1c.metadata_tables, которая возвращает список доступных таблиц. Если нужной таблицы нет: в 1С:Предприятие запускаем обработку PG1C_Состав_OData.epf и разрешаем доступ к таблице; в конфигураторе проверяем/разрешаем доступ к таблице пользователю, под которым настроено подключение.
4. Создаем таблицу и выбираем из нее данные
Пример настройки сервера 1С и создания таблицы в SQL-менеджере
(рекомендуется скопировать скрипт и отредактировать)
-- 1. Устанавливаем расширение и настраиваем параметры подключения сервера DEFAULT create extension pg1c; update pg1c.server_1c set web_address='192.168.1.10',publication='InfoBase',user_1c='odata',password_1c='[пароль]'; -- В учебной версии пользователей нет и поля user_1c/password_1c задавать не надо update pg1c.server_1c set web_address='127.0.0.1',publication='InfoBase'; -- 2. Получаем URL для проверки, копируем его в браузер, должны отобразиться метаданные в XML-формате select pg1c.http_url(); -- При возникновении ошибки проверяем и редактируем параметры подключения, повторяем проверку URL select * from pg1c.server_1c; -- update pg1c.server_1c set... или редактируем в SQL-менеджере -- 3. Получаем список доступных таблиц по протоколу OData select * from pg1c.metadata_tables(); -- Если нужной таблицы нет: -- в 1С:Предприятии запускаем обработку PG1C_Состав_OData.epf и разрешаем доступ к таблице -- в Конфигураторе проверяем/разрешаем доступ к таблице пользователю, под которым настроено подключение -- 4. Создаем таблицу (указать нужную) с загрузкой данных из 1С select pg1c.create_table('Справочник.Контрагенты'); -- Выбираем данные select * from Справочник.Контрагенты limit 10;
Пример настройки сервера 1С в терминальном клиенте psql
postgres@debian:~$ psql -d mydb
psql (12.12 (Debian 12.12-1.pgdg90+1))
Type "help" for help.
mydb=# create extension pg1c;
CREATE EXTENSION
mydb=# update pg1c.server_1c set web_address='192.168.1.10',publication='Acc',user_1c='pgreader',password_1c='Qwerty123';
UPDATE 1
mydb=# select * from pg1c.server_1c;
id | web_address | web_port | publication | user_1c | password_1c | auth_expression | schema_expression | owner_expression | names_pg_short | memory_buffer_mb | check_updates | check_updates_timestamp
---------+--------------+----------+-------------+----------+-------------+-----------------+-------------------+------------------+----------------+------------------+---------------+-------------------------
DEFAULT | 192.168.1.10 | 80 | Acc | pgreader | Qwerty123 | f | $1 | session_user | f | 64 | t |
mydb=# select pg1c.http_url();
http_url
------------------------------------------------------------------------------
http://pgreader:Qwerty123@192.168.1.10:80/Acc/odata/standard.odata/$metadata
mydb=# exit
postgres@debian:~$ curl http://pgreader:Qwerty123@192.168.1.10:80/Acc/odata/standard.odata/$metadata
<?xml version="1.0" encoding="UTF-8"?>
...
Если пользователи инструмента (разработчики или аналитики) не обладают правами суперпользователя, необходимо выдать им права на использование схемы pg1c и ее процедур.
Для этого используется SQL-скрипт pg1c_grants.sql с переменной roles, например:
psql -d mydb -f pg1c_grants.sql -v roles=r_developers
Пример выдачи прав роли r_analysts в терминальном клиенте psql
postgres@debian:~$ curl https://pg1c.org/files/download/pg1c_grants.sql | psql mydb -v roles=r_analysts
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1485 100 1485 0 0 24023 0 --:--:-- --:--:-- --:--:-- 24344
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
GRANT
По умолчанию исключения и незафикированные транзакции не записываются в журналы pg1c.log_metadata_sql и pg1c.log_http_request, т.к. PostgreSQL не поддерживает автономные транзакции.
При необходимости вести более детализованное журналирование необходимо переопределить функции логирования, которые работают через расширение dblink, и разрешить локальное подключение под пользователем postgres без пароля (обычно разрешено). Для этого используется SQL-скрипт pg1c_log_exception.sql. В процессе выполнения скрипт проверяет возможность локального подключения через dblink без пароля, поэтому его необходимо выполнять с опцией остановки при ошибке ON_ERROR_STOP.
Например:
psql -d mydb -f pg1c_log_exception.sql -v ON_ERROR_STOP=1
Пример выполнения SQL-скрипта, проверка локального подключения через dblink выполнена успешно
postgres@debian:~$ curl https://pg1c.org/files/download/pg1c_log_exception.sql | psql mydb -v ON_ERROR_STOP=1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3684 100 3684 0 0 20974 0 --:--:-- --:--:-- --:--:-- 20931
SET
CREATE EXTENSION
CREATE FUNCTION
dblink | access
-------------+--------
dbname=mydb | t
(1 row)
CREATE FUNCTION
CREATE PROCEDURE
CREATE FUNCTION
Исходный код выложен в репозиторий GitHub
Свидетельство о регистрации
Бесплатная учебная версия платформы 1С:Предприятие (лицензия не требуется)
Дистрибутивы web-сервера Apache для Microsoft Windows
Обработка Консоль запросов (КонсольЗапросов.epf) - написание и выполнение SQL-запросов к таблицам 1С (объектам конфигурации)
Обработка Состав стандартного интерфейса OData (PG1C_Состав_OData.epf) - редактирование списка таблиц 1С, доступных по протоколу OData
Бесплатная комьюнити-лицензия на платформу 1С:Предприятие - 1С для разработчиков
Учебные версии различных дистрибутивов 1С (требуется комьюнити-лицензия)
Демонстрационная информационная база "Управление торговлей"
Официальный ответ 1С на вопрос о прямом обращении к данным ИБ