Как изменить код локализации сеанса при работе через HTTP-сервисы в 1С на Linux?

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

При переносе баз данных 1С на серверы под управлением Linux разработчики нередко сталкиваются с ситуацией, когда HTTP-сервисы начинают возвращать даты и числа в английском формате (например, en_US_POSIX), даже если в консоли администрирования кластера указан русский язык. Давайте разберем, почему это происходит и как заставить платформу использовать корректную локаль.

Понимание природы проблемы

Когда 1С работает на Linux, она опирается на системные библиотеки glibc для определения региональных настроек. Если сеанс HTTP-сервиса запускается без явного указания локали, платформа может наследовать системные переменные окружения веб-сервера или ОС, которые по умолчанию настроены на POSIX (или «C»), игнорируя настройки кластера. Поскольку сеанс HTTP-сервиса создается автоматически при поступлении запроса, стандартные ключи запуска типа /VL, предназначенные для ярлыков запуска, здесь не применимы напрямую.

Шаг 1: Настройка файла публикации default.vrd

Первым делом проанализируем файл default.vrd, который находится в директории публикации вашего веб-сервера. Этот файл управляет поведением публикации и позволяет передать платформе параметры запуска сеанса. Мы можем попробовать принудительно задать параметры языка.

Откройте файл default.vrd в текстовом редакторе и убедитесь, что настройки локали соответствуют вашим требованиям. Попробуйте добавить параметры в строку подключения или уточнить настройки публикации:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/my_service"
       ib="Srvr='server';Ref='base';"
       lang="ru">
</point>

После внесения изменений необходимо перезапустить веб-сервер, чтобы настройки вступили в силу.

Шаг 2: Передача параметров в строке запроса

Иногда полезно передать код локализации непосредственно в URL при обращении к HTTP-сервису. Хотя это не всегда срабатывает для уже созданного сеанса, в некоторых случаях веб-сервер корректно интерпретирует эти параметры при создании соединения:

Попробуйте добавить к адресу вашего сервиса параметры ?L=ru&VL=ru_RU. Например: http://your-server/pub/hs/doc/get?L=ru&VL=ru_RU. Это может подсказать системе, какую локаль использовать при инициализации контекста исполнения.

Шаг 3: Диагностика через Технологический Журнал

Если проблема сохраняется, самое время «заглянуть под капот». Давайте настроим Технологический Журнал (ТЖ), чтобы увидеть, с какими именно параметрами создается сеанс при обращении к сервису. Это поможет понять, игнорирует ли система наши настройки или просто использует дефолтное значение.

Создайте файл конфигурации logcfg.xml со следующим содержанием:


<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="/var/log/1c/logs" history="24">
    <event>
      <eq property="Method" value="POST"/>
    </event>
    <property name="all"/>
  </log>
</config>

После включения ТЖ выполните запрос к сервису и изучите полученные логи. Ищите запись с параметром VL. Если там указано en_US, значит, платформа берет этот параметр из окружения пользователя, от имени которого работает процесс rphost (обычно это usr1cv8).

Шаг 4: Настройка системных переменных окружения

Часто проблема кроется в том, что системная локаль веб-сервера (Apache или Nginx) установлена на английский язык. Чтобы это исправить, нужно принудительно задать переменные окружения для процесса веб-сервера.

  1. Найдите файл конфигурации переменных окружения веб-сервера (например, envvars для Apache в Debian/Ubuntu).
  2. Добавьте или измените следующие строки:
    
    export LANG=ru_RU.UTF-8
    export LC_ALL=ru_RU.UTF-8
    
  3. Перезапустите веб-сервер. Это заставит процессы веб-сервера использовать правильную кодировку и локализацию, которые затем подхватит 1С при создании сеанса HTTP-сервиса.

Рекомендации по системной настройке локалей в Linux

Не забудьте проверить, установлена ли сама локаль в операционной системе. Выполните команду locale -a. Если ru_RU.UTF-8 отсутствует в списке, система не сможет корректно переключиться на русский язык. Добавьте её в /etc/locale.gen и выполните sudo locale-gen. Это фундаментальный шаг, без которого любые настройки 1С могут быть проигнорированы системными библиотеками.

Работая сообща над этими шагами, мы сможем добиться того, чтобы даты и числа отображались именно в том виде, который требуется для бизнес-логики вашего приложения. Помните, что ключевым моментом здесь является согласованность настроек уровня ОС, параметров публикации и переменных окружения веб-сервера.

← На главную