Как настроить совместную работу 32-битного сервера 1С и PostgreSQL по сети и исправить ошибку mchar.control

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Развертывание клиент-серверного варианта работы платформы 1С:Предприятие на базе свободной СУБД PostgreSQL — отличный способ оптимизации затрат на ИТ-инфраструктуру. Однако при первоначальной настройке системные администраторы часто сталкиваются со специфическими проблемами: СУБД отказывается принимать сетевые подключения, консоль администрирования 1С выдает ошибки авторизации, а при попытке создания базы данных возникает критический сбой, связанный с отсутствием компонента mchar.control.

В этой статье мы подробно разберем по шагам, как правильно настроить связку 32-битного сервера приложений 1С с 64-битной версией СУБД PostgreSQL, расположенной на другом компьютере в локальной сети, и как оперативно устранить все сопутствующие ошибки конфигурации.

Разрядность компонентов: Совместим ли 32-битный сервер 1С с 64-битным PostgreSQL?

Выясним очень важный архитектурный вопрос, который часто вводит в заблуждение начинающих специалистов. Если на предприятии приобретена лицензия на 32-битный сервер 1С:Предприятие, означает ли это, что СУБД PostgreSQL также должна быть строго 32-битной?

Ответ однозначный: нет, не означает. Использовать 64-битную СУБД PostgreSQL совместно с 32-битным сервером приложений 1С не просто можно, а крайне рекомендуется. Проанализируем, почему это так:

  1. Механизм взаимодействия: Сервер приложений 1С и сервер баз данных общаются между собой по сетевому протоколу TCP/IP (даже если они физически установлены на одной и той же машине). На уровне сетевого сокета разрядность приложений не имеет никакого значения — 32-битный клиент 1С прекрасно обменивается сетевыми пакетами с 64-битным сервисом СУБД.
  2. Ограничения оперативной памяти: Любой 32-битный процесс в операционной системе Windows ограничен максимальным объемом адресуемой памяти в 4 ГБ (на практике для одного процесса доступно не более 2–3 ГБ). Если установить 32-битную СУБД PostgreSQL, она не сможет задействовать ресурсы сервера для кэширования таблиц и индексов, что приведет к катастрофическому падению производительности при росте базы данных. Установка 64-битной версии PostgreSQL позволяет СУБД использовать всю доступную оперативную память сервера без каких-либо искусственных ограничений.

Таким образом, оставляйте сервер приложений 1С 32-битным (если это продиктовано имеющимися лицензиями), но саму СУБД PostgreSQL разворачивайте строго в 64-разрядном варианте.

Настройка сетевого доступа в PostgreSQL: Разрешаем внешние подключения

По умолчанию СУБД 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С подключаться к СУБД.

Откроем файл и добавим в самый конец новое правило. В зависимости от требований безопасности выберем один из вариантов:

  1. Разрешить доступ только с конкретного IP-адреса (наиболее безопасный вариант): Если сервер приложений 1С имеет статический IP-адрес 192.168.1.15, добавим строку: host all all 192.168.1.15/32 md5
  2. Разрешить доступ из всей локальной подсети: Если серверы находятся в одной подсети 192.168.1.X, можно разрешить доступ для всего диапазона адресов: host all all 192.168.1.0/24 md5
  3. Разрешить доступ с любых IP-адресов (для тестирования): 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-адрес или сетевое имя сервера.

Устранение критической ошибки mchar.control

Разберем детально, почему при попытке создать базу данных в СУБД PostgreSQL через консоль 1С возникает ошибка вида: "Не найден файл mchar.control в папке установки". При этом сама база данных на уровне СУБД может частично создаваться (ее становится видно в pgAdmin), но подключиться к ней со стороны 1С невозможно, а клиент выдает сообщение "Сервер баз данных не доступен".

Выясним причину этой проблемы. Исторически платформа 1С:Предприятие проектировалась для работы с Microsoft SQL Server и активно использует специфические типы данных CHAR и VARCHAR с особыми правилами сравнения строк (без учета регистра букв и с игнорированием концевых пробелов). Оригинальная ("ванильная") версия PostgreSQL, скачанная с официального глобального сайта СУБД, не имеет встроенной поддержки этих специфических алгоритмов сравнения строк 1С.

Для решения этой проблемы отечественными разработчиками было создано специальное расширение СУБД под названием mchar, которое добавляет поддержку типов данных mchar и mvarchar. Расширение поставляется в виде набора файлов, ключевым из которых является файл манифеста mchar.control.

Как правильно решить проблему:

  1. Не использовать стандартный (оригинальный) дистрибутив PostgreSQL. На нем запустить 1С без самостоятельной сложной компиляции расширений из исходных кодов невозможно.
  2. Устанавливать специализированные сборки. Фирма 1С совместно с партнерами выпускает адаптированные версии PostgreSQL, которые уже содержат все необходимые патчи и скомпилированные расширения (включая mchar, fulleq, online_analyze, plantuner). Доступны два основных бесплатных варианта:
    • Дистрибутив PostgreSQL от самой фирмы 1С, который официально выкладывается на портале ИТС в разделе обновлений платформы для зарегистрированных пользователей.
    • Специализированная бесплатная сборка Postgres Pro 1C от компании Postgres Professional, оптимизированная специально под требования платформы 1С.
  3. Проверить наличие сопутствующих пакетов (для Linux-систем). Если СУБД разворачивается на операционной системе Linux, помимо основного пакета СУБД необходимо обязательно установить пакет дополнительных расширений, который обычно называется postgresql-pro-1c-XX-contrib (где XX — версия СУБД). Именно в этот пакет входят файлы расширения mchar.control.

Если вы столкнулись с этой ошибкой на Windows-сервере, самым простым и надежным решением будет полная деинсталляция "ванильной" версии СУБД и чистая установка специализированной сборки Postgres Pro 1C соответствующей разрядности.

Вопросы лицензирования PostgreSQL для систем 1С

Проанализируем юридическую и финансовую сторону использования PostgreSQL в инфраструктуре 1С. Нужно ли платить за использование СУБД при работе по сети?

Оригинальный PostgreSQL распространяется под свободной лицензией PostgreSQL License, которая полностью бесплатна для коммерческого использования. Однако, как мы выяснили выше, он требует патчей для полноценной работы с 1С.

Что касается адаптированных под 1С коммерческих дистрибутивов:

Для малого и среднего бизнеса использование бесплатной версии Postgres Pro 1C является полностью легальным, бесплатным и технически самодостаточным решением.

Чек-лист для диагностики подключения

Если после проведения настроек вы все еще получаете ошибку "Сервер недоступен", пройдем по шагам диагностический чек-лист:

  1. Проверка активности службы СУБД: Убедимся, что служба СУБД PostgreSQL запущена на сервере баз данных.
  2. Диагностика сетевого порта: На компьютере с сервером 1С откроем командную строку и проверим доступность порта сервера СУБД с помощью утилиты PowerShell (или встроенного клиента telnet): Test-NetConnection -ComputerName 192.168.1.10 -Port 2540 Если тест возвращает ошибку, проверяем настройки брандмауэра (файрвола) на обеих машинах — порт СУБД должен быть открыт для входящих и исходящих пакетов.
  3. Проверка разрешения имен: Если при подключении базы используется сетевое имя сервера (например, srv-db-01), попробуем временно заменить его на прямой IP-адрес СУБД. Если подключение по IP-адресу успешно устанавливается, значит проблема кроется в службе DNS вашей локальной сети. Для быстрого решения можно добавить статическую запись соответствия имени и IP-адреса в системный файл hosts на сервере 1С: C:\Windows\System32\drivers\etc\hosts Добавим туда строчку вида: 192.168.1.10 srv-db-01

Последовательное выполнение данных рекомендаций позволит вам успешно развернуть надежную, производительную и полностью бесплатную среду СУБД PostgreSQL для обслуживания любых конфигураций на платформе 1С:Предприятие.

← На главную