Как автоматически изменить рабочий каталог пользователя при переходе с Windows на Linux?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При миграции парка компьютеров с операционной системы Windows на Linux пользователи 1С часто сталкиваются с технической проблемой: ранее установленные настройки рабочего каталога перестают быть валидными. В этой статье мы подробно разберем причины возникновения этой ошибки и рассмотрим программные способы её автоматического решения.

Почему возникает проблема с рабочим каталогом?

В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), реализована подсистема «Работа с файлами». Для удобства пользователя система позволяет задать «Основной рабочий каталог» — место, куда сохраняются файлы для редактирования. Проблема заключается в том, что путь к этому каталогу сохраняется в ХранилищеОбщихНастроек как обычная строка.

Проанализируем ситуацию: если пользователь в Windows работал с путем C:\Users\Имя\Documents\1C, то при входе под той же учетной записью в Linux платформа считывает эту же строку. Однако файловая система Linux не понимает букв дисков и использует другие разделители (слеши вместо обратных слешей). В результате при попытке открытия или захвата файла система выдает ошибку, так как указанный путь синтаксически некорректен для текущей ОС.

Где именно хранятся эти настройки?

Выясним, где БСП хранит данные о рабочем каталоге. Настройки записываются со следующими параметрами:

  1. Ключ объекта: "РаботаСФайлами"
  2. Ключ настройки: "ОсновнойРабочийКаталогПользователя"

Поскольку эти настройки привязаны к пользователю информационной базы, они «путешествуют» за ним независимо от того, с какого устройства или из-под какой ОС он зашел.

Способ 1. Автоматический сброс при смене ОС

Рассмотрим наиболее элегантный вариант решения — автоматическую очистку настройки при первом запуске системы на новой платформе. Если поле рабочего каталога пустое, БСП при необходимости сформирует путь автоматически, исходя из стандартов текущей операционной системы. Мы можем добавить проверку в процедуру ПриНачалеРаботыСистемы (желательно через механизм расширений).

Проанализируем пример кода, который проверяет корректность пути и удаляет настройку, если она не соответствует текущей ОС:


Процедура ПриНачалеРаботыСистемы()
    #Если ТонкийКлиент Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
        
        // Получаем текущую настройку из хранилища
        ПутьККаталогу = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("РаботаСФайлами", "ОсновнойРабочийКаталогПользователя");
        
        Если ТипЗнч(ПутьККаталогу) = Тип("Строка") И ЗначениеЗаполнено(ПутьККаталогу) Тогда
            
            ЭтоWindows = ОбщегоНазначенияКлиентСервер.ЭтоWindowsКлиент();
            СодержитОбратныйСлеш = Найти(ПутьККаталогу, "\") > 0;
            СодержитБуквуДиска = Сред(ПутьККаталогу, 2, 1) = ":";
            
            // Если мы в Linux, а путь похож на Windows-путь
            Если Не ЭтоWindows И (СодержитОбратныйСлеш Или СодержитБуквуДиска) Тогда
                ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("РаботаСФайлами", "ОсновнойРабочийКаталогПользователя", ИмяПользователя());
            КонецЕсли;
            
        КонецЕсли;
        
    #КонецЕсли
КонецПроцедуры

Способ 2. Массовая очистка с помощью внешней обработки

Если вы не хотите вносить изменения в код конфигурации или расширения, разберем альтернативный вариант — создание внешней обработки для администратора. Это позволит одним нажатием кнопки «обнулить» настройки у всех пользователей, которые перешли на Linux.

Посмотрим на пример логики такой обработки:


Процедура ОчиститьПутиВсехПользователей() Экспорт
    ВыборкаПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
    
    Для Каждого ПользовательИБ Из ВыборкаПользователей Цикл
        // Удаляем настройку для каждого пользователя
        ОбщегоНазначения.ХранилищеОбщихНастроекУдалить(
            "РаботаСФайлами", 
            "ОсновнойРабочийКаталогПользователя", 
            ПользовательИБ.Имя
        );
    КонецЦикла;
    
    Сообщить("Настройки рабочих каталогов успешно сброшены для всех пользователей.");
КонецПроцедуры

Особенности работы каталогов в Linux

Важно понимать, что в ОС Linux рабочий каталог по умолчанию создается в скрытой директории домашнего профиля пользователя. Обычно это путь вида: /home/[username]/.1cv8/1c/1cv8/....

Обратите внимание на следующие моменты при работе в Linux:

  1. Регистрозависимость: В отличие от Windows, в Linux пути /home/user/files и /home/user/Files — это две разные папки.
  2. Права доступа: Убедитесь, что у пользователя Linux есть права на запись (rwx) в ту директорию, которая будет выбрана в качестве рабочей.
  3. Скрытые папки: Папки, начинающиеся с точки (например, .1cv8), являются скрытыми. Пользователи могут их не увидеть в обычном проводнике без включения соответствующей опции.

Рекомендации по настройке БСП

Проанализировав механизмы БСП, можно прийти к выводу, что лучшая практика — оставлять поле «Основной рабочий каталог» пустым. В этом случае система использует стандартные механизмы платформы, такие как КаталогВременныхФайлов() или динамически вычисляемые пути в профиле пользователя.

Если в вашей организации нет жесткого требования хранить редактируемые файлы в строго определенном месте (например, на сетевом диске, что в Linux реализуется через монтирование NFS или SMB), то программный сброс настроек — это самый надежный способ обеспечить бесшовный переход между операционными системами. После удаления некорректной настройки 1С предложит пользователю создать новый каталог при первом же обращении к любому файлу, и этот путь уже будет гарантированно правильным для текущей ОС.

← На главную