Как настроить универсальный путь сохранения файлов на рабочий стол для всех пользователей в 1С

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

При работе с внешними модулями, такими как Диадок от СКБ Контур, пользователи часто сталкиваются с необходимостью настроить автоматическое скачивание документов в определенную папку. Подобные задачи возникают регулярно, особенно когда требуется массовая выгрузка прикрепленных файлов из различных объектов системы — для этого подойдёт обработка массовой выгрузки файлов из 1С. Особенную сложность вызывает задача сделать этот путь универсальным: чтобы у каждого сотрудника файлы попадали на его личный Рабочий стол, при этом настройка в самой программе была единой для всех. Рассмотрим подробнее, почему стандартные переменные Windows не работают напрямую и как решить эту задачу различными способами.

Почему переменные окружения не работают в режиме «Предприятие»

Разберем типичную ситуацию: программист или администратор пытается указать в поле настройки пути строку вида %HOMEPATH%\Desktop\EDO или %USERPROFILE%\Desktop. В операционной системе Windows эти выражения автоматически раскрываются в полный путь к папке текущего пользователя. Однако в 1С ситуация иная. Проанализируем причину: когда вы вводите строку в поле настройки модуля, 1С воспринимает её как Literal String (литерал), то есть как обычный текст. Система пытается найти на диске папку, которая буквально называется символами процента, буквами «H-O-M-E...» и так далее. Естественно, такой папки не существует, и платформа выдает ошибку доступа или сообщение «Путь не найден».

Способ 1. Использование системного объекта WScript.Shell (COM)

Если у нас есть возможность внести небольшие изменения в код обработки, мы можем заставить 1С принудительно расшифровывать системные переменные Windows. Для этого проанализируем пример использования COM-объекта WScript.Shell. Этот объект имеет метод ExpandEnvironmentStrings, который превращает любые переменные окружения в реальные пути.


// Создаем объект для взаимодействия с оболочкой Windows
Shell = Новый COMОбъект("WScript.Shell");

// Получаем путь из настроек (например, "%USERPROFILE%\Desktop\EDO")
ПутьИзНастроек = "%USERPROFILE%\Desktop\EDO";

// Раскрываем переменные окружения в реальный путь
РеальныйПуть = Shell.ExpandEnvironmentStrings(ПутьИзНастроек);

// Теперь РеальныйПуть будет содержать "C:\Users\ИмяПользователя\Desktop\EDO"
// Далее можно проверять существование папки и сохранять файл

Этот метод надежен для Windows-клиентов, однако стоит помнить, что создание COM-объектов может быть заблокировано настройками безопасности на стороне сервера или антивирусом.

Способ 2. Использование встроенных функций 1С для работы с путями

Платформа 1С:Предприятие обладает собственным набором функций для получения системных каталогов. Это более правильный и «чистый» путь с точки зрения разработки, так как он не зависит от COM-объектов. Выясним, какие функции нам помогут. Для получения пути к папке документов пользователя предназначена функция КаталогДокументов(). Поскольку папка «Рабочий стол» обычно находится на том же уровне, что и «Мои документы», мы можем программно сконструировать нужный адрес. Аналогичный подход часто применяется, когда разработчиками реализуется выгрузка внешних отчетов и обработок на локальный диск пользователя.

Посмотрим на пример реализации:


// Получаем путь к папке "Мои документы"
ПутьКДокументам = КаталогДокументов();

// Поднимаемся на уровень выше и переходим в папку Desktop
// Используем "/" или "\" в зависимости от того, как платформа нормализует пути
ПутьНаРабочийСтол = СтрЗаменить(ПутьКДокументам, "Documents", "Desktop");

// Проверяем наличие целевой папки EDO и создаем её, если нужно
ВыбранныйКаталог = Новый Файл(ПутьНаРабочийСтол + "\EDO");
Если Не ВыбранныйКаталог.Существует() Тогда
    СоздатьКаталог(ПутьНаРабочийСтол + "\EDO");
КонецЕсли;

Важное замечание: данный метод будет корректно работать на локальных компьютерах. Если ваши пользователи работают через терминальный сервер (RDP), КаталогДокументов() вернет путь в профиле пользователя на сервере, что также является верным поведением.

Способ 3. Административное решение через символьные ссылки

Рассмотрим ситуацию, когда изменять код внешней обработки (модуля Диадок) нельзя или нежелательно. В этом случае мы можем обмануть систему на уровне файловой системы Windows, создав «универсальный» путь, который будет одинаковым для всех, но вести в разные места. Поможет нам в этом механизм символьных ссылок (Symbolic Links). Это решение может быть полезно и в других сценариях, например, когда требуется массовая выгрузка картинок номенклатуры в каталог, путь к которому должен быть статичным для настроек 1С — для этого подойдёт экспорт файлов из 1С в локальный каталог.

Алгоритм действий будет следующим:

  1. На каждом рабочем компьютере пользователя создаем папку в корне диска C, например, C:\EDO_Link.
  2. Вместо обычной папки мы создаем связь с рабочим столом текущего пользователя с помощью командной строки.
  3. В настройках модуля Диадок в 1С прописываем один общий для всех путь: C:\EDO_Link.

Для создания такой связи выполните в консоли (cmd) от имени администратора команду:

mklink /D C:\EDO_Link %USERPROFILE%\Desktop\EDO

Теперь 1С будет «думать», что сохраняет файлы в корень диска C, но фактически Windows будет мгновенно перенаправлять их в папку EDO на рабочем столе конкретного пользователя. Это избавляет от необходимости доработки программного кода.

Способ 4. Создание локального каталога на диске C

Самый простой и часто самый эффективный метод — договориться о едином стандарте хранения. Выберем фиксированный путь C:\EDO. Этот вариант универсален: он подойдет и в случае, если вам необходим импорт данных из подготовленных файлов, и для сохранения результатов работы. Проанализируем преимущества:

Ограничения и особенности веб-клиента

Разберем важный нюанс: если ваши пользователи работают через веб-клиент (в браузере), то ни один из вышеперечисленных методов прямой записи на диск работать не будет. Браузеры из соображений безопасности запрещают веб-страницам (включая 1С) записывать файлы в произвольные папки на компьютере без участия пользователя. Даже если вы используете автоматизированный конвертор файлов из CSV в XLS, в веб-клиенте 1С предложит пользователю стандартное окно скачивания, и файл попадет в папку «Загрузки», настроенную в браузере. Повлиять на этот процесс из настроек модуля Диадок практически невозможно.

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

Выяснив причины поведения системы, мы можем сделать следующие выводы. Для достижения цели «один путь для всех в настройках — разные папки по факту» лучше всего использовать либо программную доработку модуля с применением функции КаталогДокументов(), либо административный метод с созданием локальной папки C:\EDO на каждом ПК. Для более сложных задач интеграции, таких как структурированный экспорт любых документов базы в JSON, лучше сразу закладывать возможность гибкой настройки путей через константы или дополнительные сведения, чтобы обеспечить стабильную работу системы в любых условиях.

← На главную