Переход с файлового режима работы по локальной сети на веб-публикацию в среде Linux (например, Debian или Ubuntu) часто сопровождается специфическими проблемами настройки окружения. Одна из наиболее распространенных и неприятных ситуаций — появление знаков вопроса вместо кириллических символов в журнале регистрации 1С. При этом интерфейс самой программы может работать корректно, а «вопросики» вылезают только в полях метаданных или данных конкретных событий, особенно у фоновых заданий.
В данной статье мы подробно разберем, почему возникает эта проблема, как функционирует механизм логирования в 1С под управлением Apache и какими способами можно вернуть нормальное отображение русского языка в журнале регистрации.
Проанализируем ситуацию: когда 1С работает в режиме веб-публикации на Linux, за выполнение серверного кода (включая фоновые задания в файловом варианте) отвечает расширение веб-сервера — модуль wsap24.so (или аналогичный для вашей версии платформы). Этот модуль запускается внутри процесса веб-сервера Apache.
Проблема заключается в том, что процессы Linux наследуют так называемые переменные окружения (environment variables) от своего родителя. Одной из ключевых переменных является LANG, которая определяет локаль (язык и кодировку) процесса. Если при запуске Apache переменная LANG установлена в значение C или POSIX, система считает, что используется стандартный 7-битный ASCII. Когда 1С пытается записать в журнал регистрации строку на русском языке, она сталкивается с тем, что текущая локаль процесса не поддерживает кириллицу. В результате происходит необратимая замена «непонятных» символов на байт с кодом 0x3F, что визуально и отображается как знак вопроса.
Важно понимать, что записи, которые уже попали в журнал в таком виде, восстановить невозможно. Кодировка была искажена в момент записи в файл журнала (.lgf или .lgp). Наша задача — исправить настройки так, чтобы новые записи формировались корректно.
Самый прямой и эффективный способ, который помог автору темы, — это явное указание локали в конфигурационном файле среды веб-сервера. Рассмотрим этот процесс по шагам:
/etc/apache2/envvars. Воспользуемся редактором nano:
sudo nano /etc/apache2/envvars
LANG. Часто там можно увидеть export LANG=C.
export LANG=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
sudo systemctl restart apache2
После этого новые события в журнале регистрации должны начать отображаться корректно. Проанализируем ситуацию: мы принудительно заставили модуль 1С работать в среде, где кириллица разрешена на уровне системных вызовов.
В современных дистрибутивах Linux управление службами осуществляется через systemd. Иногда настройки в envvars могут игнорироваться или перекрываться настройками самого юнита службы. Рассмотрим альтернативный способ через создание файла переопределения (override):
sudo systemctl edit apache2
[Service]
Environment="LANG=ru_RU.UTF-8"
Environment="LC_ALL=ru_RU.UTF-8"
sudo systemctl daemon-reload
sudo systemctl restart apache2
Этот метод считается более «чистым» в среде системного администрирования Linux, так как он не затрагивает стандартные файлы пакета Apache и сохраняется при обновлениях системы.
Иногда установка переменной LANG не помогает, если сама локаль ru_RU.UTF-8 не сгенерирована в системе. Выясним, так ли это, выполнив команду:
locale -a
Если в списке нет ru_RU.utf8, ее необходимо добавить. Выполним следующие действия:
sudo dpkg-reconfigure locales
ru_RU.UTF-8 UTF-8. Отметим ее пробелом.ru_RU.UTF-8 как локаль по умолчанию для всей операционной системы.Помимо настроек локали, на работу 1С в Linux могут влиять и другие компоненты. Рассмотрим их подробнее, чтобы исключить возможные ошибки в будущем:
Библиотека libgsf: 1С использует эту библиотеку для работы со структурированными хранилищами, включая файлы базы данных и журнала регистрации. Убедимся, что она установлена в системе: sudo apt-get install libgsf-1-common. Ее отсутствие или старая версия могут приводить к непредсказуемому поведению при обработке строковых данных.
Шрифты Microsoft: Хотя журнал регистрации — это текстовые данные, 1С при формировании представлений объектов может обращаться к шрифтовым подсистемам. Для корректной работы рекомендуется установить пакет шрифтов: sudo apt-get install ttf-mscorefonts-installer.
Версия платформы: В ранних релизах 8.3 под Linux наблюдались баги, связанные с обработкой кодировок в расширении веб-сервера. Если вышеперечисленные методы не помогают, стоит рассмотреть обновление платформы до актуальных релизов (не ниже 8.3.20).
Чтобы убедиться, что Apache теперь видит правильную локаль, мы можем создать простой скрипт внутри папки, куда опубликована база 1С. Создадим файл test.php (если установлен PHP) или CGI-скрипт, который просто выполнит системную команду locale. Если в выводе команды в браузере вы увидите LANG=ru_RU.UTF-8, значит, конфигурация применена успешно и 1С теперь будет писать логи правильно.
Подведем итог: Знаки вопроса в журнале регистрации 1С на Linux — это классический признак несоответствия локали процесса Apache ожидаемой кодировке UTF-8. Исправив переменную LANG в /etc/apache2/envvars или в настройках systemd, мы обеспечиваем корректную передачу кириллических строк от модуля 1С в файловую систему сервера.