При миграции парка компьютеров с операционной системы Windows на Linux пользователи 1С часто сталкиваются с технической проблемой: ранее установленные настройки рабочего каталога перестают быть валидными. В этой статье мы подробно разберем причины возникновения этой ошибки и рассмотрим программные способы её автоматического решения.
В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), реализована подсистема «Работа с файлами». Для удобства пользователя система позволяет задать «Основной рабочий каталог» — место, куда сохраняются файлы для редактирования. Проблема заключается в том, что путь к этому каталогу сохраняется в ХранилищеОбщихНастроек как обычная строка.
Проанализируем ситуацию: если пользователь в Windows работал с путем C:\Users\Имя\Documents\1C, то при входе под той же учетной записью в Linux платформа считывает эту же строку. Однако файловая система Linux не понимает букв дисков и использует другие разделители (слеши вместо обратных слешей). В результате при попытке открытия или захвата файла система выдает ошибку, так как указанный путь синтаксически некорректен для текущей ОС.
Выясним, где БСП хранит данные о рабочем каталоге. Настройки записываются со следующими параметрами:
"РаботаСФайлами""ОсновнойРабочийКаталогПользователя"Поскольку эти настройки привязаны к пользователю информационной базы, они «путешествуют» за ним независимо от того, с какого устройства или из-под какой ОС он зашел.
Рассмотрим наиболее элегантный вариант решения — автоматическую очистку настройки при первом запуске системы на новой платформе. Если поле рабочего каталога пустое, БСП при необходимости сформирует путь автоматически, исходя из стандартов текущей операционной системы. Мы можем добавить проверку в процедуру ПриНачалеРаботыСистемы (желательно через механизм расширений).
Проанализируем пример кода, который проверяет корректность пути и удаляет настройку, если она не соответствует текущей ОС:
Процедура ПриНачалеРаботыСистемы()
#Если ТонкийКлиент Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
// Получаем текущую настройку из хранилища
ПутьККаталогу = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("РаботаСФайлами", "ОсновнойРабочийКаталогПользователя");
Если ТипЗнч(ПутьККаталогу) = Тип("Строка") И ЗначениеЗаполнено(ПутьККаталогу) Тогда
ЭтоWindows = ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент();
СодержитОбратныйСлеш = Найти(ПутьККаталогу, "\") > 0;
СодержитБуквуДиска = Сред(ПутьККаталогу, 2, 1) = ":";
// Если мы в Linux, а путь похож на Windows-путь
Если Не ЭтоWindows И (СодержитОбратныйСлеш Или СодержитБуквуДиска) Тогда
ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("РаботаСФайлами", "ОсновнойРабочийКаталогПользователя", ИмяПользователя());
КонецЕсли;
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Если вы не хотите вносить изменения в код конфигурации или расширения, разберем альтернативный вариант — создание внешней обработки для администратора. Это позволит одним нажатием кнопки «обнулить» настройки у всех пользователей, которые перешли на Linux.
Посмотрим на пример логики такой обработки:
Процедура ОчиститьПутиВсехПользователей() Экспорт
ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ПользовательИБ Из ВыборкаПользователей Цикл
// Удаляем настройку для каждого пользователя
ОбщегоНазначения.ХранилищеОбщихНастроекУдалить(
"РаботаСФайлами",
"ОсновнойРабочийКаталогПользователя",
ПользовательИБ.Имя
);
КонецЦикла;
Сообщить("Настройки рабочих каталогов успешно сброшены для всех пользователей.");
КонецПроцедуры
Важно понимать, что в ОС Linux рабочий каталог по умолчанию создается в скрытой директории домашнего профиля пользователя. Обычно это путь вида: /home/[username]/.1cv8/1c/1cv8/....
Обратите внимание на следующие моменты при работе в Linux:
/home/user/files и /home/user/Files — это две разные папки.rwx) в ту директорию, которая будет выбрана в качестве рабочей..1cv8), являются скрытыми. Пользователи могут их не увидеть в обычном проводнике без включения соответствующей опции.Проанализировав механизмы БСП, можно прийти к выводу, что лучшая практика — оставлять поле «Основной рабочий каталог» пустым. В этом случае система использует стандартные механизмы платформы, такие как КаталогВременныхФайлов() или динамически вычисляемые пути в профиле пользователя.
Если в вашей организации нет жесткого требования хранить редактируемые файлы в строго определенном месте (например, на сетевом диске, что в Linux реализуется через монтирование NFS или SMB), то программный сброс настроек — это самый надежный способ обеспечить бесшовный переход между операционными системами. После удаления некорректной настройки 1С предложит пользователю создать новый каталог при первом же обращении к любому файлу, и этот путь уже будет гарантированно правильным для текущей ОС.