При работе с файловой версией 1С:Предприятие в операционной системе Ubuntu пользователи часто сталкиваются со специфической ошибкой: «Не удалось зафиксировать файл базы данных для открытия или изменения 1Cv8.1cd». Эта ситуация особенно характерна для случаев, когда сама база данных физически расположена на Windows-машине или на сервере, доступ к которому осуществляется через сетевой протокол SMB (Samba).
Проанализируем ситуацию: на первый взгляд кажется, что прав доступа достаточно, так как пользователь может создавать и удалять файлы в сетевой папке. Однако специфика работы 1С заключается в необходимости использования механизмов низкоуровневых блокировок (Byte-Range Locks) внутри файла базы данных. Рассмотрим подробнее, почему возникают эти сложности и как их правильно устранить.
Выясним причину такого поведения системы. Основной файл базы данных 1Cv8.1cd требует от операционной системы возможности блокировать определенные участки данных (байтовые диапазоны) для обеспечения целостности при одновременном доступе. Когда база монтируется в Linux через протокол CIFS/SMB, механизмы блокировок Linux и Windows могут конфликтовать или работать некорректно из-за настроек кэширования и реализации протокола сетевого обмена.
В операционной системе Ubuntu за безопасность и доступ к файлам также может отвечать подсистема AppArmor. Она может ограничивать процесс 1cv8 в правах на установку блокировок в определенных каталогах (например, в /media/ или /mnt/), даже если на уровне файловой системы права установлены как 777.
Разберем наиболее стабильный и производительный метод решения проблемы — публикацию базы на веб-сервере Apache. Этот способ особенно актуален, если вы используете конфигурации на «Управляемых формах» (УФ). Суть метода заключается в том, что к файлу базы данных обращается только сам веб-сервер локально, а клиентское приложение 1С на Ubuntu взаимодействует с ним по протоколу HTTP/HTTPS. Это полностью снимает вопросы сетевых блокировок SMB.
Выполним настройку по шагам:
sudo apt-get install apache2
webinst, которая входит в комплект поставки платформы 1С. Перейдем в каталог с установленной платформой (путь может отличаться в зависимости от версии):
cd /opt/1cv8/x86_64/8.3.XX.XXXX/
И выполним команду публикации:
sudo ./webinst -apache24 -wsdir BaseName -dir /var/www/html/base_folder -connstr "File='/path/to/base/';" -confPath /etc/apache2/apache2.conf
BaseName — имя базы в адресной строке браузера, а /path/to/base/ — локальный путь к папке с файлом 1Cv8.1cd.
www-data), полные права на папку с базой:
sudo chown -R www-data:www-data /path/to/base/
sudo chmod -R 775 /path/to/base/
После этого при запуске 1С выберем тип подключения «Веб-сервер» и укажем адрес http://localhost/BaseName. Проблема с блокировками исчезнет навсегда.
Если по каким-то причинам использование веб-сервера невозможно, и вам требуется работать с базой напрямую через монтирование сетевого ресурса, проанализируем параметры в файле /etc/fstab. Обычное монтирование часто не передает нужные инструкции серверу о том, как обрабатывать блокировки.
Рассмотрим пример строки монтирования с параметрами, которые могут помочь:
//192.168.1.10/ShareName /mnt/1c_base cifs user=smbuser,password=pass,uid=1000,gid=1000,iocharset=utf8,nobrl,vers=3.0 0 0
Разберем ключевые параметры:
1Cv8.1cd.Проанализируем ситуацию с правами глубже. Помимо основного файла базы, 1С создает в том же каталоге временные файлы блокировок с расширением .1clcl. Если у пользователя Ubuntu есть права на чтение и запись 1Cv8.1cd, но нет прав на создание новых файлов в этой директории или на удаление существующих, возникнет ошибка фиксации базы.
Убедимся, что права установлены корректно не только на файл, но и на весь каталог. В Linux это проверяется командой:
ls -la /путь/к/папке/с/базой/
Если владельцем значится root или другой пользователь, сменим его на текущего пользователя системы:
sudo chown -R $USER:$USER /путь/к/папке/с/базой/
Иногда даже при идеальных настройках прав и монтирования Ubuntu блокирует действия программы. Выясним причину в системных логах. Посмотрим сообщения о блокировках от AppArmor:
sudo dmesg | grep -i apparmor
Если в выводе присутствуют строки, содержащие DENIED и путь к вашей базе данных, значит, профиль безопасности блокирует доступ 1С. В этом случае потребуется либо перенести базу в разрешенную директорию (например, внутрь /home/user/), либо отредактировать профиль AppArmor для платформы 1С, добавив туда разрешение на доступ к вашей сетевой папке.
Подводя итог, можно сказать, что наиболее надежным и современным решением для Linux-систем является именно публикация базы через Apache. Это избавляет администратора от необходимости тонкой настройки протокола SMB и гарантирует стабильную работу 1С без ошибок блокировки данных.