Как программно узнать каталог текущего пользователя в 1С

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

В процессе разработки часто возникает необходимость определить местоположение системных папок пользователя: будь то путь к рабочему столу для выгрузки отчета, каталог «Мои документы» или временная директория. В среде 1С:Предприятие существует несколько подходов к решению этой задачи — от штатных функций платформы до использования низкоуровневых объектов операционной системы. Разберем эти методы подробно, проанализируем их применимость в различных клиентах и выясним, как обеспечить максимальное удобство для конечного пользователя.

Штатные средства платформы 1С:Предприятие 8

Начнем с наиболее простых и кроссплатформенных методов, которые предоставляет сама платформа. Рассмотрим глобальный контекст и методы работы с файловой системой. Самый распространенный запрос — получение пути к документам пользователя. Для этого в платформе реализован метод КаталогДокументов().

Разберем, как это работает на практике. Функция возвращает строку с полным путем к папке документов текущего пользователя. Важно понимать, что результат работы функции зависит от типа клиента и операционной системы:

Пример использования встроенного метода:


ПутьКДокументам = КаталогДокументов();
Сообщить("Ваши документы хранятся здесь: " + ПутьКДокументам);

// Если нужно создать объект Файл для дальнейшего анализа
ФайлКаталога = Новый Файл(ПутьКДокументам);
Если ФайлКаталога.Существует() Тогда
    // выполняем действия
КонецЕсли;

Если же ваша задача — работа с временными данными, которые не должны загромождать личные папки пользователя, проанализируем метод КаталогВременныхФайлов(). Он возвращает путь к директории, выделенной операционной системой для текущего сеанса пользователя. Это идеальное место для формирования промежуточных XML-файлов или временных картинок перед их обработкой.

Использование системных объектов Windows (WScript.Shell)

Иногда штатных средств 1С недостаточно — например, когда требуется получить путь к «Рабочему столу» (Desktop), папке «Загрузки» или профилю пользователя (AppData). В таких случаях мы можем обратиться к возможностям операционной системы через COM-объект WScript.Shell. Рассмотрим этот способ как наиболее гибкий для Windows-инфраструктуры.

Объект SpecialFolders позволяет получить доступ ко всем именованным папкам профиля. Посмотрим на пример кода для получения пути к рабочему столу:


Попытка
    WshShell = Новый COMОбъект("WScript.Shell");
    // Получаем путь к рабочему столу
    ПутьРабочийСтол = WshShell.SpecialFolders.Item("Desktop");
    Сообщить("Путь к рабочему столу: " + ПутьРабочийСтол);
    
    // Получаем общую папку всех пользователей
    ОбщийРабочийСтол = WshShell.SpecialFolders.Item("AllUsersDesktop");
Исключение
    Сообщить("Не удалось создать COM-объект. Возможно, выполнение на сервере или под Linux.");
КонецПопытки;

Важный нюанс: использование COM-объектов доступно только в «Толстом клиенте» или в «Тонком клиенте» под управлением Windows. Если ваш код должен работать на сервере 1С (особенно под управлением Linux) или в веб-клиенте, данный метод вызовет исключение. Для подробного изучения принципов взаимодействия с внешними библиотеками подойдёт материал по основам работы с COM-объектами в 1С.

Работа с переменными окружения

Проанализируем ситуацию, когда нам нужно получить базовый каталог профиля пользователя или специфические пути вроде %APPDATA%. Для этого отлично подходит метод ExpandEnvironmentStrings того же объекта WScript.Shell. Это позволяет динамически подставлять системные переменные Windows в путь.


WshShell = Новый COMОбъект("WScript.Shell");

// Получаем полный путь к профилю пользователя
ПрофильПользователя = WshShell.ExpandEnvironmentStrings("%USERPROFILE%"); 
// Получаем путь к папке настроек программ
AppDataLocal = WshShell.ExpandEnvironmentStrings("%LOCALAPPDATA%");

Сообщить("Ваш профиль: " + ПрофильПользователя);

Этот метод удобен тем, что позволяет обращаться к системным путям, даже если они были переопределены администратором (например, профили пользователей перенесены на другой диск).

Проблема «Последнего выбранного каталога»

Часто программисты сталкиваются с тем, что пользователь хочет, чтобы программа «запоминала» путь, в который он в последний раз сохранял файл. Платформа 1С при вызове ДиалогВыбораФайла без указания конкретного каталога автоматически открывает последнюю использованную папку. Однако программно получить этот путь напрямую из 1С невозможно.

Выясним причину: эти данные хранятся в реестре Windows в бинарном виде в ветке ComDlg32\OpenSavePidlMRU. Чтение этих данных — задача нетривиальная. Рассмотрим правильный архитектурный подход 1С для решения этой проблемы:

  1. Использование Хранилища Настроек: Самый надежный способ — сохранять выбранный пользователем путь в базу данных 1С.
  2. Регистр сведений: Можно создать небольшой регистр для хранения персональных настроек пользователя.
  3. Программное восстановление: При открытии формы выбора файла мы сначала проверяем, есть ли сохраненный путь в настройках, и если есть — устанавливаем его в качестве начального.

Разберем пример реализации через ХранилищеОбщихНастроек:


// При выборе файла сохраняем путь
Процедура ПослеВыбораФайла(ВыбранноеИмя, ДополнительныеПараметры) Экспорт
    Если ВыбранноеИмя <> Неопределено Тогда
        Файл = Новый Файл(ВыбранноеИмя);
        ПутьКПапке = Файл.Путь;
        
        // Сохраняем настройку для текущего пользователя
        ХранилищеОбщихНастроек.Сохранить("МояОбработка_ПоследнийПуть", "Путь", ПутьКПапке);
    КонецЕсли;
КонецПроцедуры

// При открытии диалога восстанавливаем путь
НачальныйПуть = ХранилищеОбщихНастроек.Загрузить("МояОбработка_ПоследнийПуть", "Путь");
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Если НачальныйПуть <> Неопределено Тогда
    Диалог.Каталог = НачальныйПуть;
КонецЕсли;

Особенности веб-клиента и мобильных платформ

Проанализируем работу с каталогами в веб-клиенте. Здесь возможности 1С сильно ограничены политиками безопасности браузеров. Напрямую узнать файловую структуру компьютера пользователя нельзя. Для работы с файлами необходимо подключать «Расширение работы с файлами». Для освоения тонкостей взаимодействия клиента и сервера подойдёт руководство по работе с файлами в управляемых формах 1С 8.3.

В веб-клиенте КаталогДокументов() может вернуть пустую строку, если расширение не установлено. Поэтому всегда проверяйте результат выполнения и предусматривайте резервный вариант, например, предложение пользователю самостоятельно указать путь в диалоге.

Для мобильной платформы (iOS, Android) пути строго изолированы. КаталогДокументов() вернет путь внутри песочницы приложения, доступ к которой с ПК обычно возможен только через специализированные утилиты или средства синхронизации (например, iTunes для iOS).

Итоги и рекомендации

Подводя итог нашему разбору, можно выделить следующие правила выбора метода:

Применяя эти знания, мы создаем эргономичные и отказоустойчивые решения, которые корректно работают с файловой системой пользователя независимо от окружения.

← На главную