Разработка и Конфигурация · 11 мин
Как прописать путь к файлу в 1С
Как правильно прописать путь к файлу в 1С: локальные и сетевые пути, слэши, кавычки, работа через код и диалоги. Примеры, типичные ошибки и проверка результата.
Путь к файлу в 1С требуется указывать при загрузке и выгрузке данных, печати в файл, обмене между базами, подключении внешних обработок и работе с вложениями. Ошибка в одном символе — лишний слэш, пробел или русская буква «с» вместо латинской — приводит к сообщению «файл не обнаружен» или молчаливой записи данных не в тот каталог. Поэтому важно понимать, какие форматы путей принимает платформа и чем они отличаются в тонком, толстом и веб-клиенте.
В 1С путь можно указать тремя способами: вручную в поле ввода, через диалог выбора файла и программно во встроенном языке. Все три варианта в конечном счёте сводятся к строке, которую платформа передаёт операционной системе. Ниже разобраны правила написания таких строк, отличия для Windows и Linux, работа с сетевыми ресурсами и способы проверить, что файл действительно найден.
Форматы путей, которые понимает 1С
Платформа 1С:Предприятие не имеет собственного формата путей — она работает с теми строками, которые принимает операционная система. Для Windows это локальный путь вида C:\Документы\выгрузка.xml и сетевой UNC-путь вида \\Server\Shared\выгрузка.xml. Для сервера на Linux используется формат с прямыми слэшами: /opt/data/выгрузка.xml.
Важно понимать, где именно выполняется код. Если выгрузка выполняется на сервере 1С (директива &НаСервере или фоновое задание), путь должен быть доступен с сервера, а не с компьютера пользователя. Путь C:\Users\Иванов\Desktop\файл.xlsx в серверной процедуре укажет на диск C: самого сервера, где такого файла, скорее всего, нет. Это самая частая причина «необъяснимых» ошибок доступа.
Допустимые символы определяются ОС. В Windows запрещены символы \ / : * ? " < > | в именах файлов и каталогов, в Linux запрещён только символ / и нулевой байт. Пробелы и кириллица допустимы, но при передаче пути во внешние программы или скрипты их лучше избегать — часть утилит некорректно обрабатывает такие строки.
Как указать путь вручную в интерфейсе
В типовых конфигурациях поля для пути встречаются в обработках загрузки и выгрузки: «Универсальный обмен данными в формате XML», «Выгрузка и загрузка данных», настройки обмена с банками и ЭДО. Путь можно ввести с клавиатуры или выбрать через кнопку с тремя точками рядом с полем — она открывает стандартный диалог выбора файла.
При ручном вводе соблюдайте правила: путь должен начинаться с буквы диска или сетевого префикса, каталоги разделяются обратными слэшами, имя файла указывается полностью, с расширением. Пример корректной строки для выгрузки: D:\Обмен\Выгрузка_контрагенты.xml. Если указывается только каталог без имени файла, обработка либо допишет имя автоматически, либо выдаст ошибку — поведение зависит от конкретной обработки.
Кнопка выбора надёжнее ручного ввода: диалог сам формирует правильную строку и не даст выбрать несуществующий файл в режиме открытия. Если кнопки выбора нет, скопируйте путь из адресной строки проводника Windows и добавьте имя файла вручную.
- 1Откройте проводник и перейдите в нужный каталог, чтобы убедиться, что он существует.
- 2Скопируйте путь из адресной строки проводника.
- 3Вставьте путь в поле обработки и допишите имя файла с расширением через обратный слэш.
- 4Запустите операцию и проверьте, что файл появился в указанном каталоге или был прочитан без ошибок.
Как прописать путь программно во встроенном языке
Во встроенном языке 1С путь — это обычная строка. Она передаётся в методы объектов ТекстовыйДокумент, ЧтениеXML, ЗаписьXML, ЧтениеДанных и другие. Обратный слэш в строковых литералах 1С не является управляющим символом, поэтому его не нужно удваивать, в отличие от многих других языков.
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("D:\Обмен\данные.txt", КодировкаТекста.UTF8);
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("D:\Обмен\выгрузка.xml");
Для интерактивного выбора файла пользователем применяется объект ДиалогВыбораФайла. Он возвращает полное имя выбранного файла, которое затем используется в коде. Это предпочтительный способ в тонком и веб-клиенте, где прямой доступ к файловой системе ограничен.
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = "Файлы данных (.xml)|.xml";
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
КонецЕсли;
В тонком и веб-клиенте модальные диалоги запрещены, поэтому используются асинхронные методы: НачатьПомещениеФайла для передачи файла на сервер и ПоказатьВыборФайла-подобные вызовы через описания оповещений. Файл сначала помещается во временное хранилище, а серверная процедура получает его из хранилища — прописывать локальный путь клиента в серверном коде в этом случае нельзя.
Файл = Новый Файл("D:\Обмен\выгрузка.xml");
Если Файл.Существует() Тогда
Сообщить("Файл найден: " + Файл.ПолноеИмя);
Иначе
ВызватьИсключение "Файл не найден по указанному пути";
КонецЕсли;Сетевые пути и общие папки
Для обмена между несколькими базами или рабочими местами используются общие сетевые папки. Путь к ним записывается в UNC-формате: двойной обратный слэш, имя или IP-адрес сервера, имя общего ресурса и далее каталоги: \\FileServer\1CExchange\приход.xml. Путь через подключённый сетевой диск (Z:\приход.xml) тоже работает, но только если диск подключён в той же сессии и под тем же пользователем, под которым выполняется код.
Критичный нюанс — права доступа. Если код выполняется на сервере 1С, то обращение к сетевой папке идёт от имени учётной записи службы агента сервера (по умолчанию — служебный пользователь USR1CV8 или аналогичный). У этой учётной записи должны быть права на чтение и запись в общую папку. Сетевые диски, подключённые пользователем интерактивно, службе сервера недоступны — используйте только UNC-пути.
Относительные пути и каталоги программы
Относительный путь (без буквы диска, например Обмен\файл.xml) отсчитывается от текущего рабочего каталога процесса. Для клиентского приложения это обычно каталог, откуда оно запущено, для сервера — каталог служебных файлов кластера. Полагаться на текущий каталог нельзя: он меняется в зависимости от способа запуска, и файл окажется не там, где ожидалось. В прикладном коде всегда используйте абсолютные пути.
Для временных файлов платформа предоставляет функции ПолучитьИмяВременногоФайла() и КаталогВременныхФайлов(), а также КаталогПрограммы() для каталога установки. Временные файлы автоматически размещаются в системном каталоге temp, доступном текущему процессу, — это безопасная альтернатива самодельным путям для промежуточных данных.
ИмяФайла = ПолучитьИмяВременногоФайла("xml");
Запись.ОткрытьФайл(ИмяФайла);
// ... работа с файлом ...
УдалитьФайлы(ИмяФайла);
Проверка пути и обработка ошибок
Прежде чем читать или писать файл, проверьте путь программно. Объект Файл позволяет узнать, существует ли объект, является ли он каталогом, и получить его свойства. Для записи имеет смысл проверить существование каталога назначения и при необходимости создать его методом СоздатьКаталог.
Каталог = Новый Файл("D:\Обмен\Архив");
Если Не Каталог.Существует() Тогда
СоздатьКаталог(Каталог.ПолноеИмя);
КонецЕсли;
Операции с файлами оборачивайте в конструкцию Попытка ... Исключение ... КонецПопытки с выводом ОписаниеОшибки(). Это позволит отличить «файл не найден» от «нет доступа» и «файл занят другим процессом» — у этих ситуаций разные причины и разные способы устранения.
Как проверить результат
Файл появился в указанном каталоге, размер больше нуля
Каталог пуст или файл нулевого размера — путь неверен или запись не выполнена
Метод Прочитать/ОткрытьФайл выполняется без исключения, данные доступны
Ошибка «файл не обнаружен» или «отказано в доступе»
Путь доступен при входе на сервер под учётной записью службы 1С
Путь открывается только с рабочей станции пользователя
Типичные ошибки и ограничения
Наиболее частая ошибка — указание локального пути клиента в коде, который выполняется на сервере. Вторая по распространённости — опечатка в расширении или отсутствие расширения вообще: выгрузка и выгрузка.xml для ОС — разные файлы. Третья — использование сетевого диска вместо UNC-пути в серверном коде и регламентных заданиях.
Отдельная группа проблем — длинные пути. Windows исторически ограничивает длину полного пути примерно 260 символами; при глубокой вложенности каталогов операция может завершиться ошибкой, хотя каждый элемент пути по отдельности допустим. Выход — сократить структуру каталогов или использовать более короткий корневой путь.
В веб-клиенте прямой доступ к файловой системе пользователя ограничен браузером: работа с файлами идёт через диалоги выбора и механизм помещения файлов во временное хранилище. Код, рассчитанный на прямое чтение по пути, в веб-клиенте не сработает — его нужно переписывать на асинхронные методы.
Что важно запомнить
Путь должен соответствовать ОС и контексту выполнения: клиент или сервер. Используйте абсолютные пути, UNC-формат для сетевых ресурсов, проверяйте существование файла объектом Файл и обрабатывайте исключения. В тонком и веб-клиенте применяйте диалоги выбора и помещение файлов во временное хранилище.
Частые вопросы
Нужно ли удваивать обратный слэш в пути в коде 1С?
Нет. Во встроенном языке 1С обратный слэш не является управляющим символом, поэтому строка "D:\Обмен\файл.xml" записывается как есть, без удвоения. Удвоение требуется только внутри JSON-структур и при передаче пути в некоторые внешние системы.
Почему обработка пишет «файл не найден», хотя файл точно есть?
Чаще всего код выполняется на сервере, а путь указывает на диск вашего компьютера. Проверьте также расширение файла (проводник может скрывать его, и реальное имя — файл.xml.txt), права доступа учётной записи службы 1С и отсутствие опечаток в имени каталога.
Какой путь указывать для обмена между двумя базами 1С?
Оптимально — UNC-путь к общей сетевой папке, доступной с обоих серверов или рабочих станций: \\Сервер\Обмен1С\. Учётные записи, под которыми работают обе базы (или их службы серверов), должны иметь права на чтение и запись в эту папку.
Можно ли использовать путь с русскими буквами и пробелами?
Да, платформа и Windows корректно работают с кириллицей и пробелами в путях. Ограничения появляются при передаче пути во внешние утилиты, командную строку или скрипты — там такие пути нужно заключать в кавычки, а часть старых программ с кириллицей не работает вовсе.
Как получить путь к каталогу, где лежит файл базы данных?
Для файловой базы строку подключения можно получить функцией СтрокаСоединенияИнформационнойБазы() — она содержит параметр File с путём к каталогу базы. В клиент-серверном варианте пути к данным на сервере СУБД из кода 1С недоступны, и это нормально.
Что делать, если путь слишком длинный и Windows выдаёт ошибку?
Сократите вложенность: перенесите рабочий каталог ближе к корню диска, уберите длинные названия папок. Как временная мера можно подключить глубокий каталог как отдельный диск командой subst, но для постоянной работы лучше перестроить структуру каталогов.