Переход с Windows на Linux для работы с 1С — задача, часто сопровождающаяся нюансами настройки окружения. Одной из наиболее распространенных проблем является некорректная работа с файловой системой через веб-сервер. Пользователи сталкиваются с тем, что при использовании веб-клиента новые присоединенные файлы сохраняются с именами в виде знаков вопроса (????????.pdf), а старые файлы, успешно перенесенные с Windows-сервера, просто не открываются. При этом толстый клиент на той же машине может работать абсолютно корректно.
В этой статье мы подробно разберем, почему возникает такая ситуация, и проанализируем шаги, необходимые для восстановления нормальной работы с файлами в среде Debian 12 с веб-сервером Apache (также рекомендуем изучить общую справку по администрированию 1C и Linux).
Основная причина кроется в разнице контекстов выполнения процессов. Когда мы запускаем толстый клиент, он работает в сессии текущего пользователя и наследует все его настройки локали (например, ru_RU.UTF-8). Однако веб-клиент работает через модуль расширения веб-сервера. Процесс веб-сервера Apache (обычно запускаемый от имени пользователя www-data) может иметь собственное окружение, в котором переменные локали не заданы или установлены в значение C или POSIX.
В такой ситуации 1С, пытаясь записать файл с кириллическим именем, не получает от операционной системы информации о том, какую кодировку использовать, и «сбрасывает» символы в знаки вопроса. Рассмотрим, как это исправить по шагам.
Даже если команда locale в терминале показывает правильные значения, это не гарантирует, что Apache их видит. Нам необходимо явно указать веб-серверу, с каким языком работать. Разберем редактирование файла envvars.
Откроем файл конфигурации окружения Apache, который в Debian обычно находится по пути /etc/apache2/envvars. В этом файле нам нужно найти или добавить строки, экспортирующие переменные языка:
export LANG=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
После внесения изменений веб-сервер необходимо перезапустить. Однако в современных дистрибутивах на базе systemd (таких как Debian 12) настройки из этого файла могут игнорироваться службой инициализации.
Проанализируем работу сервиса через systemd. Для того чтобы переменные окружения гарантированно попали в процесс Apache, мы воспользуемся механизмом переопределения конфигурации. Выполним команду:
systemctl edit apache2
В открывшемся текстовом редакторе в секцию [Service] добавим следующие строки:
[Service]
Environment="LANG=ru_RU.UTF-8"
Environment="LC_ALL=ru_RU.UTF-8"
После сохранения файла выполним перезапуск службы, чтобы изменения вступили в силу (по аналогии с тем, как выполняется рестарт сервера 1С с очисткой сеансовых данных):
systemctl daemon-reload
systemctl restart apache2
Это обеспечит корректную передачу кодировки UTF-8 при любых операциях модуля 1С с файловой системой через веб-сервер.
Если папка с присоединенными файлами (например, /mnt/data/1cv8/) является сетевым ресурсом, смонтированным с другого сервера по протоколу SMB/CIFS, проблема может быть в параметрах монтирования. Рассмотрим типичную ситуацию: файлы создавались в среде Windows в кодировке cp1251, а Linux ожидает UTF-8.
Проверим файл /etc/fstab. Для корректного отображения кириллицы строка монтирования должна содержать параметр iocharset=utf8. Пример правильной строки монтирования:
//server/share /mnt/data cifs user=smbuser,password=smbpass,iocharset=utf8,rw 0 0
Без этого параметра Linux может некорректно транслировать имена файлов, что сделает их нечитаемыми для платформы 1С.
Разберем важный технический момент: Linux чувствителен к регистру символов (case-sensitive), в отличие от Windows. Если в базе данных 1С путь прописан как /Doc/Files/, а на диске папка называется /doc/files/, веб-клиент ее не найдет.
Также проверим права доступа. Веб-сервер работает от имени www-data. Посмотрим, есть ли у этого пользователя права на выполнение для всех родительских каталогов. В Linux право x (выполнение) для директории означает возможность «войти» в нее.
Мы можем установить права рекурсивно, чтобы гарантировать доступ:
chown -R www-data:www-data /mnt/data/1cv8/account/Doc/
chmod -R 755 /mnt/data/1cv8/account/Doc/
Если после настройки Apache новые файлы начали сохраняться нормально, но 10 Гб старых файлов все еще недоступны из-за некорректных имен, нам поможет утилита convmv. Она позволяет массово переименовать файлы, меняя их кодировку в именах.
Рассмотрим пример команды для конвертации имен файлов из cp1251 (если они приехали из Windows в таком виде) в UTF-8:
convmv -f cp1251 -t utf-8 -r --notest /mnt/data/1cv8/account/Doc/
Параметр -r означает рекурсивную обработку, а --notest дает команду на немедленное переименование (без этого параметра утилита просто покажет, что она собирается сделать).
В некоторых случаях, особенно при проблемах с выгрузкой платежных поручений или специфических отчетов, полезно принудительно указать локализацию в файле публикации default.vrd. Проанализируем структуру этого файла в каталоге публикации (например, /var/www/account/), в управлении которым поможет специальный публикатор 1С.
Мы можем добавить параметр L=ru_RU в строку соединения или проверить настройки в секции <point>. Это заставит сеанс 1С использовать российские стандарты локализации независимо от настроек браузера пользователя.
Мы рассмотрели комплексный подход к решению проблемы кодировки в 1С под Linux. Основные узлы, требующие внимания:
envvars и настройки systemd.iocharset и права доступа пользователя www-data.convmv для исправления старых данных.Соблюдение этих шагов позволяет бесшовно перевести файловое хранилище 1С на рельсы Linux, сохранив доступ ко всем накопленным данным.