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

Разработка и Конфигурация · 11 мин

Как открыть путь к файлу в 1С

Как открыть путь к файлу в 1С: диалог выбора файла, работа с каталогами, запуск файла из кода на встроенном языке, типичные ошибки и готовые примеры.

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

Важно сразу учитывать контекст исполнения. Код на клиенте имеет доступ к диску пользователя, код на сервере — только к файловой системе сервера 1С, а в веб-клиенте прямой доступ к локальным путям ограничен соображениями безопасности браузера. Ошибка в выборе контекста — самая частая причина того, что «путь открывается у разработчика, но не работает у пользователя».

Ниже разобраны основные способы: диалоги выбора файлов и каталогов, запуск файла через операционную систему, чтение пути программно, работа в тонком и веб-клиенте, а также типичные ошибки и способы их проверки.

Что понимать под «открытием пути» в 1С

Прежде чем писать код, определите задачу. В практике встречаются четыре типовых сценария: дать пользователю выбрать файл через стандартный диалог Windows; получить путь к каталогу (например, к папке выгрузки); открыть готовый файл в ассоциированной программе — Excel, Word, PDF-просмотрщике; прочитать содержимое файла внутри 1С для обработки данных.

Для первых двух задач служит объект ДиалогВыбораФайла, для третьей — методы запуска приложений, для четвёртой — объекты ЧтениеТекста, ЧтениеXML, ТекстовыйДокумент и другие. Смешивать их не нужно: диалог не открывает файл, а лишь возвращает путь, а запуск приложения не передаёт данные в 1С.

Как открыть диалог выбора файла и получить путь

Стандартный способ — объект ДиалогВыбораФайла. В режиме управляемого приложения диалог открывается асинхронно, через описание оповещения, потому что модальные вызовы в современных версиях платформы запрещены или нежелательны.

Типовой код для тонкого клиента выглядит так:

&НаКлиенте

Процедура ВыбратьФайл(Команда)

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

Диалог.Фильтр = "Файлы Excel (.xlsx)|.xlsx|Все файлы (.)|.";

Диалог.Заголовок = "Выберите файл для загрузки";

Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);

Диалог.Показать(Оповещение);

КонецПроцедуры

&НаКлиенте

Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДопПараметры) Экспорт

Если ВыбранныеФайлы = Неопределено Тогда

Возврат; // пользователь нажал «Отмена»

КонецЕсли;

ПутьКФайлу = ВыбранныеФайлы[0];

Сообщить("Выбран файл: " + ПутьКФайлу);

КонецПроцедуры

Результат работы диалога — массив выбранных путей (даже при одиночном выборе это массив из одного элемента). Обязательно проверяйте результат на Неопределено: если пользователь нажал «Отмена», обращение к элементу массива вызовет ошибку.

Порядок действий при выборе файла
  1. 1
    Создайте ДиалогВыбораФайла с нужным режимом: Открытие, Сохранение или ВыборКаталога
  2. 2
    Задайте фильтр по расширениям и заголовок окна
  3. 3
    Вызовите Показать() с описанием оповещения
  4. 4
    В обработчике проверьте результат на Неопределено
  5. 5
    Сохраните полученный путь в реквизит формы или переменную

Как получить путь к каталогу

Если нужен не файл, а папка — например, каталог для выгрузки отчётов, — используется тот же объект, но с режимом РежимДиалогаВыбораФайла.ВыборКаталога. После выбора путь доступен через свойство Диалог.Каталог или через массив выбранных файлов в оповещении.

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

ПутьКВременномуФайлу = КаталогВременныхФайлов() + "выгрузка_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_hhmmss") + ".xml";

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

Как открыть файл из 1С в программе по умолчанию

Когда файл уже существует и его нужно показать пользователю — например, сформированный PDF или выгруженный Excel, — используется запуск через операционную систему. В асинхронной модели это метод НачатьЗапускПриложения():

&НаКлиенте

Процедура ОткрытьФайл(Команда)

Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект);

НачатьЗапускПриложения(Оповещение, ПутьКФайлу);

КонецПроцедуры

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

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

Как открыть путь к файлу на сервере и в веб-клиенте

Ключевое ограничение клиент-серверной архитектуры: сервер 1С не видит диски пользователя. Путь C:\Документы\прайс.xlsx, выбранный на клиенте, для серверной процедуры бессмыслен. Поэтому файл сначала помещают во временное хранилище на клиенте, а на сервере извлекают и обрабатывают.

&НаКлиенте

Процедура Загрузить(Команда)

НачатьПомещениеФайла(Новый ОписаниеОповещения("ПослеПомещения", ЭтотОбъект), , ПутьКФайлу, Ложь, УникальныйИдентификатор);

КонецПроцедуры

&НаСервере

Процедура ОбработатьНаСервере(АдресХранилища)

ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");

ДвоичныеДанные.Записать(ИмяВременногоФайла);

// далее обработка файла на сервере

КонецПроцедуры

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

Сравнение вариантов работы с путями

ДиалогВыбораФайла

Подходит для интерактивного выбора пути пользователем. Не работает на сервере и в фоновых заданиях.

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

Открывает файл в программе ОС. Только на клиенте, требует осторожности с недоверенными файлами.

Помещение во временное хранилище

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

ЧтениеТекста / ТекстовыйДокумент

Для чтения содержимого файла прямо в 1С. Путь должен быть доступен в том контексте, где исполняется код.

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

Первая и самая распространённая ошибка — обращение к пути клиента из серверной процедуры. Симптом: «Файл не найден» при том, что файл точно существует. Решение — передача через временное хранилище, как показано выше.

Вторая частая проблема — отсутствие проверки отмены диалога. Если пользователь закрыл окно выбора, массив путей равен Неопределено, и обращение к ВыбранныеФайлы[0] приводит к исключению. Третья группа ошибок связана с правами доступа: файл открыт другой программой, нет прав на сетевой каталог, антивирус блокирует запись. Такие ситуации стоит оборачивать в Попытка...Исключение с понятным сообщением пользователю.

Типичные ошибки
01
Использование синхронных методов Открыть() и ЗапуститьПриложение() в управляемом приложении — платформа выдаёт предупреждение или код не работает в веб-клиенте
02
Отсутствие проверки результата диалога на Неопределено — ошибка при нажатии «Отмена»
03
Работа с клиентским путём на сервере — ошибка «файл не найден»
04
Жёсткое прописывание путей вроде C:\Выгрузки в коде — у других пользователей такого каталога нет
05
Склейка путей без проверки разделителя — двойные слэши и неверные пути

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

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

Полезно программно проверять существование файла перед операциями с ним:

Файл = Новый Файл(ПутьКФайлу);

Если Не Файл.Существует() Тогда

Сообщить("Файл не найден: " + ПутьКФайлу);

Возврат;

КонецЕсли;

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

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

Выбор файла через диалог
Норма

Путь появляется в реквизите, файл открывается или обрабатывается

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

Пустой путь, ошибка при нажатии «Отмена»

Работа на сервере
Норма

Файл передан через хранилище и обработан

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

Ошибка «файл не найден» при существующем файле

Открытие внешней программой
Норма

Файл открывается в ассоциированном приложении

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

Ничего не происходит или ошибка запуска

Права доступа
Норма

Чтение и запись выполняются без исключений

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

Ошибки доступа, файл заблокирован другой программой

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

Как открыть диалог выбора папки, а не файла?

Создайте ДиалогВыбораФайла с режимом РежимДиалогаВыбораФайла.ВыборКаталога и вызовите Показать() с описанием оповещения. Выбранный путь будет доступен в массиве результата или через свойство Каталог объекта диалога.

Почему код работает у меня, но не работает у пользователя?

Чаще всего дело в контексте исполнения или правах: путь существует на вашем компьютере, но не на компьютере пользователя, либо у пользователя нет прав на сетевой каталог. Также проверьте, не выполняется ли код на сервере, где клиентские пути недоступны.

Как открыть файл в Excel из 1С?

Если файл уже сохранён на диске, вызовите НачатьЗапускПриложения() с полным путём к файлу — Windows откроет его в программе, назначенной для расширения. Если нужно именно программное управление Excel, используется COM-объект Excel.Application, но это требует установленного Office и работает только в Windows-клиенте.

Можно ли открыть файл по сетевому пути вида \\server\share?

Да, UNC-пути поддерживаются. Убедитесь, что у пользователя, под которым выполняется код, есть доступ к сетевому ресурсу. Если код исполняется на сервере 1С, доступ нужен учётной записи службы сервера 1С, а не пользователю сеанса.

Как получить только имя файла или только каталог из полного пути?

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

Работает ли выбор файла в веб-клиенте?

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

Итог

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

ДиалогВыбораФайла возвращает путь, НачатьЗапускПриложения открывает файл в программе ОС, а передача между клиентом и сервером выполняется через временное хранилище. Всегда проверяйте отмену диалога, существование файла и контекст исполнения кода — это устраняет большинство ошибок.