Развертывание клиент-серверного варианта работы платформы 1С:Предприятие на базе свободной СУБД PostgreSQL — отличный способ оптимизации затрат на ИТ-инфраструктуру. Однако при первоначальной настройке системные администраторы часто сталкиваются со специфическими проблемами: СУБД отказывается принимать сетевые подключения, консоль администрирования 1С выдает ошибки авторизации, а при попытке создания базы данных возникает критический сбой, связанный с отсутствием компонента mchar.control.
В этой статье мы подробно разберем по шагам, как правильно настроить связку 32-битного сервера приложений 1С с 64-битной версией СУБД PostgreSQL, расположенной на другом компьютере в локальной сети, и как оперативно устранить все сопутствующие ошибки конфигурации.
Выясним очень важный архитектурный вопрос, который часто вводит в заблуждение начинающих специалистов. Если на предприятии приобретена лицензия на 32-битный сервер 1С:Предприятие, означает ли это, что СУБД PostgreSQL также должна быть строго 32-битной?
Ответ однозначный: нет, не означает. Использовать 64-битную СУБД PostgreSQL совместно с 32-битным сервером приложений 1С не просто можно, а крайне рекомендуется. Проанализируем, почему это так:
Таким образом, оставляйте сервер приложений 1С 32-битным (если это продиктовано имеющимися лицензиями), но саму СУБД PostgreSQL разворачивайте строго в 64-разрядном варианте.
По умолчанию СУБД PostgreSQL после установки настроена в режиме максимальной безопасности и принимает подключения исключительно с локального хоста (localhost или IP-адрес 127.0.0.1). Если ваш сервер 1С находится на другой машине в локальной сети, попытка подключиться завершится ошибкой. Нам необходимо явно разрешить PostgreSQL "слушать" сетевые интерфейсы и принимать запросы извне.
Для этого выполним последовательную настройку двух ключевых конфигурационных файлов СУБД, которые обычно располагаются в каталоге данных (data) вашей установки PostgreSQL.
Шаг 1. Редактирование файла postgresql.conf
Этот файл отвечает за общие параметры работы сервера. Нам необходимо указать СУБД, какие IP-адреса сетевых карт ей следует прослушивать.
Найдем в файле postgresql.conf строку listen_addresses. По умолчанию она может быть закомментирована символом решетки # и настроена на локальный адрес:
#listen_addresses = 'localhost'
Раскомментируем строку (удалим символ #) и укажем символ звездочки, который предписывает серверу прослушивать абсолютно все доступные сетевые интерфейсы:
listen_addresses = '*'
Если требуется максимальная безопасность, вместо звездочки можно через запятую перечислить конкретные локальные IP-адреса сетевых интерфейсов сервера СУБД.
Шаг 2. Редактирование файла pg_hba.conf
Файл pg_hba.conf (Host-Based Authentication) управляет правами доступа к базам данных на уровне сетевых узлов и пользователей. Здесь мы должны явно разрешить серверу 1С подключаться к СУБД.
Откроем файл и добавим в самый конец новое правило. В зависимости от требований безопасности выберем один из вариантов:
192.168.1.15, добавим строку:
host all all 192.168.1.15/32 md5
192.168.1.X, можно разрешить доступ для всего диапазона адресов:
host all all 192.168.1.0/24 md5
host all all 0.0.0.0/0 md5
Здесь параметр md5 (или более современный scram-sha-256 в зависимости от версии СУБД) указывает на необходимость проверки пароля пользователя при подключении. После изменения файлов конфигурации обязательно перезапустим службу СУБД (например, через оснастку "Службы" в Windows или командой systemctl restart postgresql в Linux), чтобы настройки вступили в силу.
Рассмотрим ситуацию, когда СУБД PostgreSQL развернута на нестандартном сетевом порту. По умолчанию используется порт 5432, но системные администраторы часто меняют его на другие значения (например, 2540) из соображений безопасности или для бесконфликтного сосуществования нескольких экземпляров СУБД.
При создании или подключении информационной базы через утилиту "Администрирование серверов 1С:Предприятия" в поле "Сервер баз данных" необходимо правильно указывать адрес и нестандартный порт.
Важное правило: Платформа 1С:Предприятие при работе с СУБД PostgreSQL не поддерживает классический синтаксис указания порта через двоеточие (например, написать 192.168.1.10:2540 нельзя — это вызовет ошибку подключения).
Для корректного указания порта необходимо использовать специальный синтаксис с пробелом и параметром port=:
192.168.1.10 port=2540
Если СУБД развернута на стандартном порту 5432, указывать параметр порта не требуется — достаточно написать только IP-адрес или сетевое имя сервера.
Разберем детально, почему при попытке создать базу данных в СУБД PostgreSQL через консоль 1С возникает ошибка вида: "Не найден файл mchar.control в папке установки". При этом сама база данных на уровне СУБД может частично создаваться (ее становится видно в pgAdmin), но подключиться к ней со стороны 1С невозможно, а клиент выдает сообщение "Сервер баз данных не доступен".
Выясним причину этой проблемы. Исторически платформа 1С:Предприятие проектировалась для работы с Microsoft SQL Server и активно использует специфические типы данных CHAR и VARCHAR с особыми правилами сравнения строк (без учета регистра букв и с игнорированием концевых пробелов). Оригинальная ("ванильная") версия PostgreSQL, скачанная с официального глобального сайта СУБД, не имеет встроенной поддержки этих специфических алгоритмов сравнения строк 1С.
Для решения этой проблемы отечественными разработчиками было создано специальное расширение СУБД под названием mchar, которое добавляет поддержку типов данных mchar и mvarchar. Расширение поставляется в виде набора файлов, ключевым из которых является файл манифеста mchar.control.
Как правильно решить проблему:
mchar, fulleq, online_analyze, plantuner). Доступны два основных бесплатных варианта:
postgresql-pro-1c-XX-contrib (где XX — версия СУБД). Именно в этот пакет входят файлы расширения mchar.control.Если вы столкнулись с этой ошибкой на Windows-сервере, самым простым и надежным решением будет полная деинсталляция "ванильной" версии СУБД и чистая установка специализированной сборки Postgres Pro 1C соответствующей разрядности.
Проанализируем юридическую и финансовую сторону использования PostgreSQL в инфраструктуре 1С. Нужно ли платить за использование СУБД при работе по сети?
Оригинальный PostgreSQL распространяется под свободной лицензией PostgreSQL License, которая полностью бесплатна для коммерческого использования. Однако, как мы выяснили выше, он требует патчей для полноценной работы с 1С.
Что касается адаптированных под 1С коммерческих дистрибутивов:
Для малого и среднего бизнеса использование бесплатной версии Postgres Pro 1C является полностью легальным, бесплатным и технически самодостаточным решением.
Если после проведения настроек вы все еще получаете ошибку "Сервер недоступен", пройдем по шагам диагностический чек-лист:
Test-NetConnection -ComputerName 192.168.1.10 -Port 2540
Если тест возвращает ошибку, проверяем настройки брандмауэра (файрвола) на обеих машинах — порт СУБД должен быть открыт для входящих и исходящих пакетов.srv-db-01), попробуем временно заменить его на прямой IP-адрес СУБД. Если подключение по IP-адресу успешно устанавливается, значит проблема кроется в службе DNS вашей локальной сети. Для быстрого решения можно добавить статическую запись соответствия имени и IP-адреса в системный файл hosts на сервере 1С:
C:\Windows\System32\drivers\etc\hosts
Добавим туда строчку вида:
192.168.1.10 srv-db-01
Последовательное выполнение данных рекомендаций позволит вам успешно развернуть надежную, производительную и полностью бесплатную среду СУБД PostgreSQL для обслуживания любых конфигураций на платформе 1С:Предприятие.