К статье
Практический материал

Разработка и Конфигурация · 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. 1
    Сформируйте полный путь к папке и оберните его в кавычки
  2. 2
    Проверьте существование каталога через НайтиФайлы
  3. 3
    При необходимости создайте папку методом СоздатьКаталог
  4. 4
    Запустите проводник через ЗапуститьПриложение или НачатьЗапускПриложения
  5. 5
    Проверьте результат вручную: папка должна открыться в новом окне

Открытие конкретного файла и выделение его в папке

Иногда нужно не просто открыть папку, а показать в ней конкретный файл. Проводник Windows поддерживает параметр /select, который открывает папку и выделяет указанный файл:

ЗапуститьПриложение("explorer.exe /select,""" + ПолныйПутьКФайлу + """");

Если же нужно открыть сам файл (например, PDF или Excel), достаточно передать его путь в ЗапуститьПриложение без explorer.exe — Windows запустит ассоциированное приложение. Альтернатива для файлов из временного хранилища — метод ОткрытьФайл объекта ОписаниеПередаваемогоФайла или НачатьОткрытиеФайла.

Сравнение вариантов

ЗапуститьПриложение + explorer.exe

Самый простой и надёжный способ для толстого и тонкого клиента. Не подходит для строгого асинхронного режима

НачатьЗапускПриложения

Рекомендуемый вариант для управляемых форм и тонкого клиента, позволяет обработать результат. Требует процедуры оповещения

ПерейтиПоНавигационнойСсылке (file://)

Удобен для сетевых папок и гиперссылок в реквизитах. В веб-клиенте часто блокируется браузером

explorer.exe /select

Открывает папку с выделенным файлом. Работает только для локальных путей Windows

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

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

Отдельный риск — подстановка непроверенных путей. Если путь к папке формируется из пользовательского ввода или данных из внешних источников, в строку запуска может попасть вредоносная команда. Всегда экранируйте путь кавычками и по возможности проверяйте, что он указывает на допустимый каталог (например, начинается с заданного корневого пути).

Типичные ошибки и их устранение

Большинство проблем при программном открытии папок сводится к нескольким повторяющимся причинам. Разбор ниже поможет быстро локализовать неисправность.

Типичные ошибки
01
Путь с пробелами без кавычек — проводник не открывает папку или открывает неверный каталог
02
Отсутствие слова Экспорт у процедуры оповещения — НачатьЗапускПриложения завершается ошибкой вызова
03
Двойные обратные слеши в пути вручную — в 1С слеш не экранируется, достаточно одинарного \
04
Вызов ЗапуститьПриложение на сервере — папка откроется на сервере, а не у пользователя; код должен выполняться в контексте &НаКлиенте
05
Попытка открыть сетевую папку без доступа — проводник показывает ошибку; сначала проверьте доступность через НайтиФайлы

Отдельно выделим ошибку с контекстом выполнения: код, вызывающий ЗапуститьПриложение, должен выполняться на клиенте. Если процедура расположена в серверном модуле или общем модуле с флагом «Сервер», папка откроется на сервере 1С (где её никто не увидит), либо вызов завершится ошибкой.

Контрольные точки

Как проверить результат

Окно проводника
Норма

Открылась именно нужная папка с её содержимым

Тревожный признак

Открылся «Мой компьютер» или «Документы» — путь неверен или не в кавычках

Поведение в тонком клиенте
Норма

Папка открывается на компьютере пользователя

Тревожный признак

Ничего не происходит — код выполняется на сервере

Папка с пробелами в имени
Норма

Открывается корректно

Тревожный признак

Ошибка или неверный каталог — нет обрамляющих кавычек

Часто задаваемые вопросы

Как открыть сетевую папку из 1С?

Используйте тот же вызов explorer.exe с UNC-путём: ЗапуститьПриложение("explorer.exe \\server\share"). Предварительно проверьте доступность ресурса через НайтиФайлы — если у пользователя нет прав или сеть недоступна, проводник покажет ошибку. Для гарантированного доступа сетевой диск можно подключить заранее на уровне операционной системы.

Почему ЗапуститьПриложение не работает в управляемой форме?

При включённом режиме использования асинхронных вызовов синхронные методы работы с файловой системой и запуска приложений могут быть запрещены конфигурацией. Замените вызов на НачатьЗапускПриложения с описанием оповещения — это рекомендуемый платформой подход.

Можно ли открыть папку на сервере 1С?

Технически код с директивой &НаСервере может выполнить запуск приложения, но окно проводника откроется на сервере, где его никто не увидит. Открытие папки имеет смысл только в клиентском контексте — на компьютере пользователя.

Как открыть папку и выделить в ней нужный файл?

Передайте проводнику параметр /select с полным путём к файлу: ЗапуститьПриложение("explorer.exe /select,""" + ПолныйПутьКФайлу + """"). Проводник откроет содержащую файл папку и подсветит его. Для сетевых путей поведение может отличаться в зависимости от версии Windows.

Что делать, если путь к папке содержит кириллицу?

Кириллические символы в путях обрабатываются корректно, проблемы возникают только с пробелами и спецсимволами командной строки. Оберните путь в двойные кавычки и убедитесь, что строка не содержит символов &, | и <, которые командный интерпретатор может воспринять как управляющие.

Как открыть папку в веб-клиенте 1С?

Надёжного способа запустить проводник из веб-клиента нет — браузеры блокируют запуск локальных приложений. Рабочая альтернатива: передать пользователю файл через ПолучитьФайл или открыть документ прямо в браузере, если формат поддерживается.

Итог

Что важно запомнить

Основной способ открыть папку из 1С — ЗапуститьПриложение с вызовом explorer.exe и путём в кавычках; для управляемых форм используйте асинхронный НачатьЗапускПриложения. Всегда проверяйте существование каталога, выполняйте код на клиенте и не передавайте непроверенные пути в командную строку.