Разработка и Конфигурация · 12 мин
Как указать путь к файлу в 1С
Как правильно указать путь к файлу в 1С: локальные и сетевые пути, UNC-адреса, диалоги выбора файла, объекты Файл и КаталогВременныхФайлов, типичные ошибки.
Указание пути к файлу — одна из базовых задач при работе с 1С: она возникает при загрузке прайсов, выгрузке отчётов, обмене данными между базами, сохранении печатных форм и подключении внешних обработок. В зависимости от сценария путь задаётся вручную в настройках обработки, выбирается пользователем через диалог или формируется программно во встроенном языке 1С.
Главная сложность — разница между тонким клиентом, веб-клиентом и сервером. Код, который безупречно работает на локальном компьютере разработчика, на сервере 1С «не видит» диск C пользователя, потому что выполняется в другом окружении и под другой учётной записью. Поэтому важно понимать, где именно исполняется код и какие у него права доступа к файловой системе.
Ниже разобраны основные способы указать путь: через диалог выбора файла, строковой константой, относительно каталога программы или временных файлов, а также типичные ошибки с разделителями, правами доступа и сетевыми путями.
Как выглядит путь к файлу в 1С
Путь к файлу во встроенном языке 1С — это обычная строка. Платформа работает с путями в формате операционной системы: в Windows используется обратный слэш, в Linux — прямой. Самый простой пример: Путь = "C:\Данные\выгрузка.xml"; — такая строка передаётся в методы чтения и записи файлов.
В отличие от некоторых языков программирования, обратный слэш в строках 1С не является служебным символом, поэтому экранировать его не нужно. Строка "C:\Temp\file.txt" воспринимается буквально. А вот кавычки внутри строки придётся удвоить, если сам путь их содержит, — на практике это встречается редко.
Для сетевых ресурсов применяется UNC-формат: \\ИмяСервера\ОбщаяПапка\файл.xml. Такой путь корректно работает и на клиенте, и на сервере, если у исполняющей учётной записи есть доступ к сетевому ресурсу. Буквы подключённых сетевых дисков (Z:, Y: и т.п.) на сервере лучше не использовать — подключение дисков привязано к сессии конкретного пользователя, и агент сервера 1С их обычно не видит.
Выбор файла через диалог
Когда путь должен указать пользователь, применяется объект ДиалогВыбораФайла. Он открывает стандартное окно выбора файла или каталога и возвращает полный путь. Это самый надёжный способ для интерактивных обработок: пользователь сам находит файл, и риск опечатки исчезает.
Пример кода для режима открытия файла:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = "Файлы Excel (.xlsx)|.xlsx|Все файлы (.)|.";
Диалог.Заголовок = "Выберите файл прайса";
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
КонецЕсли;
У диалога есть три основных режима: Открытие — выбор существующего файла, Сохранение — указание имени нового файла, ВыборКаталога — выбор папки целиком. Свойство Фильтр ограничивает отображаемые типы файлов и снижает вероятность выбора неподходящего документа.
В управляемых формах и тонком клиенте простой вызов диалога может быть недоступен из-за требований асинхронности. Тогда используют метод НачатьПомещениеФайла или асинхронные аналоги диалогов — об этом ниже в разделе про тонкий и веб-клиент.
Программная работа с путями: Файл, каталоги, разделители
Для проверки существования пути и получения его частей служит объект Файл. Он позволяет узнать имя без расширения, расширение, родительский каталог и факт существования файла до начала чтения — это защищает код от ошибок времени выполнения.
ФайлНаДиске = Новый Файл("C:\Данные\прайс.xlsx");
Если ФайлНаДиске.Существует() Тогда
Сообщить("Каталог: " + ФайлНаДиске.Путь);
Сообщить("Расширение: " + ФайлНаДиске.Расширение);
Иначе
Сообщить("Файл не найден");
КонецЕсли;
Для временных файлов, которые не нужно хранить постоянно, платформа предоставляет функции КаталогВременныхФайлов() и ПолучитьИмяВременногоФайла(). Они возвращают корректный путь для текущей операционной системы и учётной записи, что особенно важно в серверном коде, где жёстко зашитый путь вроде C:\Temp может отсутствовать или быть недоступным.
Если конфигурация должна работать и в Windows, и в Linux, разделитель каталогов лучше получать программно или использовать прямой слэш — платформа во многих случаях корректно интерпретирует его в обеих системах. Жёсткая привязка к обратному слэшу делает решение зависимым от Windows.
- 1Получите путь: из диалога, из настройки или сформируйте программно
- 2Создайте объект Файл и проверьте методом Существует(), что путь доступен
- 3Проверьте расширение и каталог, если формат файла критичен
- 4Выполните чтение или запись внутри попытки/исключения
- 5Удалите временные файлы после завершения операции
Путь к файлу на сервере 1С
В клиент-серверном варианте код с директивой &НаСервере выполняется на сервере 1С:Предприятия. Это значит, что путь C:\Документы\... будет указывать на диск сервера, а не на компьютер пользователя. Файл, который пользователь видит у себя, серверный код без дополнительных действий не откроет.
Стандартное решение — передать файл с клиента на сервер через временное хранилище. На клиенте файл помещается методом НачатьПомещениеФайла или ПоместитьФайл, а на сервере данные извлекаются из хранилища и при необходимости записываются во временный файл сервера. Для обратной операции — выгрузки — сервер помещает результат в хранилище, а клиент сохраняет его через диалог сохранения.
Второй вариант — общий сетевой каталог, доступный и пользователям, и серверу. В этом случае в настройках обмена указывают UNC-путь, а учётной записи, под которой работает агент сервера 1С (по умолчанию это служебная учётная запись), выдают права на чтение и запись в этот каталог. Без выдачи прав обмен будет завершаться ошибкой доступа, хотя у пользователей каталог открывается нормально.
Особенности тонкого и веб-клиента
В тонком и веб-клиенте платформа ограничивает прямой доступ к файловой системе по соображениям безопасности. Синхронные методы работы с файлами в управляемом приложении часто недоступны, и вместо них применяются асинхронные: НачатьПомещениеФайла, НачатьПолучениеФайлов, НачатьПодключениеРасширенияРаботыСФайлами.
Расширение работы с файлами — компонент, который устанавливается в браузер или тонкий клиент и открывает доступ к локальным файлам. Если оно не подключено, типовой сценарий выглядит так: платформа предлагает установить расширение, после чего диалог выбора файла начинает работать. В веб-клиенте без расширения выбор файла всё равно возможен, но через стандартный механизм загрузки браузера.
Типовой фрагмент для тонкого клиента с асинхронным помещением файла:
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, , , Истина, УникальныйИдентификаторФормы);
После выбора пользователем файл попадает во временное хранилище, а в обработчике оповещения доступен адрес хранилища и выбранное имя файла. Исходный локальный путь клиента серверу при этом не нужен — данные передаются содержимым.
Где хранить пути в настройках
Если обработка или обмен регулярно использует один и тот же каталог, путь разумно вынести в настройки, а не зашивать в код. Типовые варианты хранения: константа строкового типа, реквизит справочника настроек обмена, регистр сведений или параметр в файле настроек.
При хранении пути в базе учитывайте, что база может использоваться с разных компьютеров и в клиент-серверном режиме. Локальный путь, сохранённый на одном рабочем месте, на другом окажется недействительным. Для таких случаев хранят либо UNC-путь к общему ресурсу, либо отдельные настройки для каждого пользователя — через механизм хранения настроек, привязанный к пользователю.
Полезно добавить в форму настроек кнопку проверки: код создаёт объект Файл по указанному пути и сообщает, доступен ли каталог. Это избавляет от ситуации, когда ошибка всплывает только в момент реального обмена, например ночью по расписанию.
Проверка результата и устранение ошибок доступа
После настройки пути проверьте его в том же контексте, где будет выполняться рабочий код. Если обмен запускается регламентным заданием на сервере, проверка из толстого клиента на компьютере администратора ничего не докажет — у сервера другое окружение. Самый надёжный способ — небольшая серверная процедура, которая пытается создать и удалить тестовый файл в целевом каталоге.
Ошибка «Файл не обнаружен» обычно означает опечатку в пути, неверный разделитель или то, что код ищет файл не на том компьютере. Ошибка доступа («Отказано в доступе») указывает на отсутствие прав у учётной записи, под которой выполняется код. В первом случае проверяйте саму строку пути, во втором — права на каталог для учётной записи агента сервера 1С.
Как проверить результат
Объект Файл.Существует() возвращает Истина в том же контексте, где работает код
Ложь на сервере при Истине на клиенте — путь локальный, а не сетевой
Тестовый файл создаётся и удаляется без ошибок
Ошибка доступа — нужно выдать права учётной записи сервера
UNC-путь открывается с сервера под учётной записью агента 1С
Путь открывается только из сессии пользователя — замените букву диска на UNC
Часто задаваемые вопросы
Как получить каталог, в котором находится база 1С?
Для файловой базы строку подключения можно получить через функцию СтрокаСоединенияИнформационнойБазы() и извлечь из неё параметр File. Для программной работы с каталогами удобнее использовать КаталогПрограммы() и КаталогВременныхФайлов(), которые не зависят от расположения базы.
Почему на тонком клиенте не работает ДиалогВыбораФайла?
В управляемом приложении синхронный вызов диалогов ограничен. Используйте асинхронные методы: подключите расширение работы с файлами через НачатьПодключениеРасширенияРаботыСФайлами и вызывайте НачатьПомещениеФайла с описанием оповещения о завершении.
Можно ли использовать относительные пути в 1С?
Технически относительный путь разрешается от текущего рабочего каталога процесса, но он непредсказуем: на клиенте и сервере это разные каталоги. В прикладном коде надёжнее формировать полный путь от известной точки — каталога временных файлов или каталога из настроек.
Как передать файл с клиента на сервер без общей папки?
Через временное хранилище: на клиенте вызовите НачатьПомещениеФайла, получите адрес хранилища, передайте его в серверную процедуру, а там извлеките данные методом ПолучитьИзВременногоХранилища и при необходимости запишите во временный файл на сервере.
Что делать, если путь содержит кириллицу и внешняя программа его не открывает?
Некоторые сторонние утилиты и старые компоненты некорректно обрабатывают кириллицу и пробелы. Решение — промежуточный каталог с латинским именем без пробелов: 1С копирует файл туда, вызывает внешнюю программу, а результат забирает обратно.
Как узнать, под какой учётной записью работает сервер 1С?
Откройте оснастку служб Windows на сервере, найдите службу агента сервера 1С:Предприятия и посмотрите учётную запись на вкладке входа. Именно ей нужно выдавать права на сетевые каталоги, которые используются в серверном коде.
Что важно запомнить
Путь в 1С — это строка, но её корректность зависит от контекста выполнения: клиент, сервер и веб-клиент видят разные файловые системы. Для интерактива используйте диалоги выбора, для сервера — UNC-пути и временные каталоги, для передачи файлов — временное хранилище. Всегда проверяйте существование пути и права доступа перед чтением или записью.