1С: Ошибка кодировки локали в Linux (LANG != ru_RU.UTF-8 / Сбой сортировки)
Требования платформы 1С:Предприятие к системной локали в Linux
Серверные процессы 1С (ragent, rmngr, rphost) и утилиты администрирования жестко завязаны на корректность системных переменных локализации POSIX (glibc locales). Для корректной работы русскоязычных конфигураций (сортировка строк в запросах, сравнение без учета регистра, регистронезависимый поиск в динамических списках, парсинг дат и чисел) системная локаль обязана быть установлена строго в ru_RU.UTF-8. При несоответствии локали платформа выдает ошибку:
«Ошибка инициализации графической подсистемы / Ошибка определения системной локали / Неверный формат даты/времени / Порядок сортировки базы данных отличается от порядка сортировки сервера 1С»
Бизнес-риски
Некорректная сортировка в бухгалтерских отчетах (буква «Ё» ломает алфавитный порядок), повреждение индексов таблиц СУБД при переиндексации, невозможность запуска кластера 1С через systemd в автоматическом режиме.
Ключевые переменные окружения локали
| Переменная | Требуемое значение | Назначение |
|---|---|---|
LANG | ru_RU.UTF-8 | Базовая локаль системы по умолчанию. |
LC_ALL | ru_RU.UTF-8 (или пусто) | Глобальное переопределение всех параметров локали. |
LC_CTYPE | ru_RU.UTF-8 | Классификация символов и преобразование регистра (верхний/нижний). |
LC_COLLATE | ru_RU.UTF-8 | Правила лексикографической сортировки строк. |
Регламент генерации и настройки локали ru_RU.UTF-8 в Linux
Сценарий 1: Генерация локали в операционной системе
Если в системе сгенерирована только локаль en_US.UTF-8 или POSIX/C:
# Для Debian / Ubuntu / Astra Linux:
sudo apt update && sudo apt install -y locales
sudo locale-gen ru_RU.UTF-8 en_US.UTF-8
sudo update-locale LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8
# Для RED OS / CentOS / AlmaLinux:
sudo dnf install -y glibc-langpack-ru glibc-locale-source
sudo localectl set-locale LANG=ru_RU.UTF-8
# Проверка списка доступных локалей в системе:
locale -a | grep -i ru
# Должно вывести: ru_RU.utf8Сценарий 2: Фиксация переменных окружения в systemd-сервисе 1С
Часто системная локаль настроена правильно, но демон systemd запускает службу 1С с дефолтной локалью C. Отредактируйте service unit:
# Откройте конфигурационный файл службы (или drop-in override):
sudo systemctl edit srv1cv83.service
# Добавьте блок переменных окружения:
[Service]
Environment="LANG=ru_RU.UTF-8"
Environment="LC_ALL=ru_RU.UTF-8"
Environment="LC_CTYPE=ru_RU.UTF-8"
# Примените изменения и перезапустите кластер:
sudo systemctl daemon-reload
sudo systemctl restart srv1cv83Сценарий 3: Проверка совместимости локали в базе PostgreSQL
База данных 1С в PostgreSQL должна быть создана с соответствующей кодировкой и collate:
-- Проверка параметров локали созданной информационной базы в PostgreSQL:
SELECT datname, datcollate, datctype, encoding
FROM pg_database
WHERE datname = 'trade_management';
-- Ожидаемый результат: datcollate = 'ru_RU.UTF-8', encoding = 6 (UTF8)Типовые ошибки администраторов
- Использование локали ru_RU.CP1251 или ru_RU.KOI8-R: Платформа 1С:Предприятие 8.3 на Linux работает ИСКЛЮЧИТЕЛЬНО с UTF-8. Использование однобайтовых кодировок приведет к падению сервера при старте.
- Отсутствие локали en_US.UTF-8: Некоторые встроенные библиотеки 1С требуют наличия базовой английской локали в качестве резервной (fallback). Всегда генерируйте обе локали:
ru_RU.UTF-8иen_US.UTF-8.
Специалисты ITSTM настроят серверные профили, приведут параметры glibc/ICU в соответствие со стандартами 1С и исключат повреждение индексов баз данных.
Частые вопросы (FAQ)
Почему при обновлении версии glibc в Linux «ломаются» индексы в 1С?
В новых версиях glibc меняются правила сортировки символов (collate rules). После мажорного обновления ОС необходимо выполнить команду REINDEX DATABASE в PostgreSQL для всех баз 1С во избежание дублирования ключей.
Как проверить, под какой локалью работает конкретный запущенный процесс rphost?
Выполните команду cat /proc/$(pgrep rphost | head -n 1)/environ | tr '\0' '\n' | grep LANG. Вывод должен содержать строку LANG=ru_RU.UTF-8.
Влияет ли системная локаль на формирование выгрузок в банк (Клиент-Банк)?
Да, при генерации текстовых файлов обмена 1С перекодирует текст из внутренней UTF-8 в Windows-1251. При сбое системных таблиц транслитерации русский текст выгружается вопросительными знаками (????).
Нужно ли настраивать локаль для пользователя usr1cv8 отдельно в /etc/default/locale?
Да, файл /etc/default/locale задает глобальные параметры для всех неинтерактивных демонов ОС, включая пользователя usr1cv8.