Разработка и Конфигурация · 10 мин
Как программно открыть папку из 1С: рабочие способы и примеры
Как программно открыть папку из 1С: ЗапуститьПриложение, НачатьЗапускПриложения, explorer.exe, обработка ошибок. Примеры кода для тонкого и веб-клиента.
Задача открыть папку на диске прямо из 1С возникает часто: показать пользователю каталог с выгруженными файлами, открыть папку с архивом документов или перейти к сетевому ресурсу. Встроенный язык 1С предоставляет несколько способов решения — от простого вызова проводника Windows до асинхронных методов, безопасных для веб-клиента.
Выбор конкретного способа зависит от режима работы (тонкий, толстый или веб-клиент), версии платформы и того, нужно ли дождаться результата открытия. Ниже разобраны основные подходы с готовыми примерами кода, типичными ошибками и способами проверки результата.
Способ 1: ЗапуститьПриложение с вызовом проводника
Классический и наиболее распространённый приём — запустить штатный проводник Windows (explorer.exe), передав ему путь к папке как параметр командной строки. Метод ЗапуститьПриложение() доступен на клиенте во всех основных режимах, кроме некоторых ограничений веб-клиента.
Пример простейшего кода:
Процедура ОткрытьПапку(Команда)
ПутьКПапке = "C:\Отчеты\Выгрузка";
ЗапуститьПриложение("explorer.exe " + ПутьКПапке);
КонецПроцедуры
Если путь содержит пробелы, его нужно обернуть в кавычки, иначе проводник воспримет часть пути как отдельный параметр:
ЗапуститьПриложение("explorer.exe """ + ПутьКПапке + """");
Здесь тройные кавычки в строке 1С дают одну двойную кавычку в результирующей строке. Это одна из самых частых причин «неработающего» кода — без кавычек папка вида «C:\Мои документы\Архив» просто не откроется.
Способ 2: НачатьЗапускПриложения — асинхронный вариант
В управляемых формах и при включённом режиме асинхронных вызовов синхронный ЗапуститьПриложение может быть недоступен или выдавать предупреждение. Современный подход — метод НачатьЗапускПриложения, который работает через механизм оповещений.
Пример с обработкой результата:
&НаКлиенте
Процедура ОткрытьПапкуАсинхронно(Команда)
ПутьКПапке = "C:\Отчеты\Выгрузка";
Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, "explorer.exe """ + ПутьКПапке + """");
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗапускаПриложения(КодВозврата, ДополнительныеПараметры) Экспорт
// Здесь можно обработать результат запуска
КонецПроцедуры
Обратите внимание: процедура обратного вызова должна быть объявлена с ключевым словом Экспорт, иначе платформа не сможет её вызвать. Это вторая по частоте ошибка при переходе на асинхронный стиль.
Способ 3: открыть папку через гиперссылку и ПерейтиПоНавигационнойСсылке
Для сетевых ресурсов и папок, доступных по протоколу file://, можно использовать ПерейтиПоНавигационнойСсылке (или асинхронный НачатьПереходПоНавигационнойСсылке). Платформа передаст ссылку операционной системе, и та откроет её приложением по умолчанию.
ПерейтиПоНавигационнойСсылке("file://server/Обмен/Документы");
Этот способ удобен, когда путь хранится в базе как гиперссылка, например в реквизите «Папка архива» справочника. Пользователь кликает по ссылке — и папка открывается без дополнительного кода. Ограничение: поведение зависит от браузера и настроек ОС, в веб-клиенте протокол file:// часто блокируется.
Проверка существования папки перед открытием
Открытие несуществующей папки — типичный источник путаницы: проводник либо покажет ошибку, либо молча откроет «Мой компьютер». Перед запуском стоит убедиться, что каталог существует, используя НайтиФайлы:
НайденныеФайлы = НайтиФайлы(ПутьКПапке);
Если НайденныеФайлы.Количество() = 0 Тогда
Сообщить("Папка не найдена: " + ПутьКПапке);
Возврат;
КонецЕсли;
ЗапуститьПриложение("explorer.exe """ + ПутьКПапке + """");
Дополнительно можно проверить, что найденный объект — именно каталог, через свойство ЭтоКаталог() объекта Файл. Если папка должна существовать по логике программы (например, каталог выгрузки), разумнее создать её заранее методом СоздатьКаталог — он не выдаёт ошибку, если каталог уже есть.
- 1Сформируйте полный путь к папке и оберните его в кавычки
- 2Проверьте существование каталога через НайтиФайлы
- 3При необходимости создайте папку методом СоздатьКаталог
- 4Запустите проводник через ЗапуститьПриложение или НачатьЗапускПриложения
- 5Проверьте результат вручную: папка должна открыться в новом окне
Открытие конкретного файла и выделение его в папке
Иногда нужно не просто открыть папку, а показать в ней конкретный файл. Проводник Windows поддерживает параметр /select, который открывает папку и выделяет указанный файл:
ЗапуститьПриложение("explorer.exe /select,""" + ПолныйПутьКФайлу + """");
Если же нужно открыть сам файл (например, PDF или Excel), достаточно передать его путь в ЗапуститьПриложение без explorer.exe — Windows запустит ассоциированное приложение. Альтернатива для файлов из временного хранилища — метод ОткрытьФайл объекта ОписаниеПередаваемогоФайла или НачатьОткрытиеФайла.
Сравнение вариантов
Самый простой и надёжный способ для толстого и тонкого клиента. Не подходит для строгого асинхронного режима
Рекомендуемый вариант для управляемых форм и тонкого клиента, позволяет обработать результат. Требует процедуры оповещения
Удобен для сетевых папок и гиперссылок в реквизитах. В веб-клиенте часто блокируется браузером
Открывает папку с выделенным файлом. Работает только для локальных путей Windows
Ограничения веб-клиента и безопасность
В веб-клиенте запуск произвольных приложений с клиентской машины существенно ограничен: браузеры блокируют выполнение внешних программ из соображений безопасности. Если решение должно работать в веб-клиенте, рассмотрите альтернативу — передать файл пользователю через диалог сохранения (ПолучитьФайл) вместо открытия папки.
Отдельный риск — подстановка непроверенных путей. Если путь к папке формируется из пользовательского ввода или данных из внешних источников, в строку запуска может попасть вредоносная команда. Всегда экранируйте путь кавычками и по возможности проверяйте, что он указывает на допустимый каталог (например, начинается с заданного корневого пути).
Типичные ошибки и их устранение
Большинство проблем при программном открытии папок сводится к нескольким повторяющимся причинам. Разбор ниже поможет быстро локализовать неисправность.
Отдельно выделим ошибку с контекстом выполнения: код, вызывающий ЗапуститьПриложение, должен выполняться на клиенте. Если процедура расположена в серверном модуле или общем модуле с флагом «Сервер», папка откроется на сервере 1С (где её никто не увидит), либо вызов завершится ошибкой.
Как проверить результат
Открылась именно нужная папка с её содержимым
Открылся «Мой компьютер» или «Документы» — путь неверен или не в кавычках
Папка открывается на компьютере пользователя
Ничего не происходит — код выполняется на сервере
Открывается корректно
Ошибка или неверный каталог — нет обрамляющих кавычек
Часто задаваемые вопросы
Как открыть сетевую папку из 1С?
Используйте тот же вызов explorer.exe с UNC-путём: ЗапуститьПриложение("explorer.exe \\server\share"). Предварительно проверьте доступность ресурса через НайтиФайлы — если у пользователя нет прав или сеть недоступна, проводник покажет ошибку. Для гарантированного доступа сетевой диск можно подключить заранее на уровне операционной системы.
Почему ЗапуститьПриложение не работает в управляемой форме?
При включённом режиме использования асинхронных вызовов синхронные методы работы с файловой системой и запуска приложений могут быть запрещены конфигурацией. Замените вызов на НачатьЗапускПриложения с описанием оповещения — это рекомендуемый платформой подход.
Можно ли открыть папку на сервере 1С?
Технически код с директивой &НаСервере может выполнить запуск приложения, но окно проводника откроется на сервере, где его никто не увидит. Открытие папки имеет смысл только в клиентском контексте — на компьютере пользователя.
Как открыть папку и выделить в ней нужный файл?
Передайте проводнику параметр /select с полным путём к файлу: ЗапуститьПриложение("explorer.exe /select,""" + ПолныйПутьКФайлу + """"). Проводник откроет содержащую файл папку и подсветит его. Для сетевых путей поведение может отличаться в зависимости от версии Windows.
Что делать, если путь к папке содержит кириллицу?
Кириллические символы в путях обрабатываются корректно, проблемы возникают только с пробелами и спецсимволами командной строки. Оберните путь в двойные кавычки и убедитесь, что строка не содержит символов &, | и <, которые командный интерпретатор может воспринять как управляющие.
Как открыть папку в веб-клиенте 1С?
Надёжного способа запустить проводник из веб-клиента нет — браузеры блокируют запуск локальных приложений. Рабочая альтернатива: передать пользователю файл через ПолучитьФайл или открыть документ прямо в браузере, если формат поддерживается.
Что важно запомнить
Основной способ открыть папку из 1С — ЗапуститьПриложение с вызовом explorer.exe и путём в кавычках; для управляемых форм используйте асинхронный НачатьЗапускПриложения. Всегда проверяйте существование каталога, выполняйте код на клиенте и не передавайте непроверенные пути в командную строку.