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

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

Как в 1С получить имя файла из пути

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

Задача получить имя файла в 1С возникает постоянно: при загрузке данных из Excel, при обмене файлами, при записи вложений, при формировании отчётов с сохранением на диск. Пользователь выбрал файл через диалог, у разработчика есть полный путь вида «C:\Документы\Загрузка\прайс_январь.xlsx», а для дальнейшей логики нужна только часть — имя файла с расширением или без него.

Во встроенном языке 1С нет одной «магической» функции, которая напрямую возвращает имя файла из пути во всех конфигурациях. Способ зависит от режима работы: тонкий клиент или веб-клиент, управляемые или обычные формы, есть ли в конфигурации БСП (Библиотека стандартных подсистем). Ниже разобраны рабочие варианты: от универсального разбора строки до готовых функций БСП, с примерами кода и типичными ошибками.

Способ 1. Объект «Файл» — универсальное решение

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

ПолныйПуть = "C:\Документы\Загрузка\прайс_январь.xlsx";

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

ИмяФайла = Файл.Имя; // "прайс_январь.xlsx"

ИмяБезРасширения = Файл.ИмяБезРасширения; // "прайс_январь"

Расширение = Файл.Расширение; // ".xlsx"

Каталог = Файл.Путь; // "C:\Документы\Загрузка\"

Обратите внимание: свойство Расширение возвращает значение с точкой в начале — «.xlsx», а не «xlsx». Если дальше расширение сравнивается со строкой без точки, сравнение молча не сработает. Убирайте точку через Сред(Файл.Расширение, 2) или добавляйте её в строку сравнения.

Если файл реально существует, через тот же объект доступны дополнительные свойства: Размер(), ПолучитьВремяИзменения(), Существует(). Для задачи «только разобрать путь» они не нужны, но при загрузке файлов полезно сразу проверить существование, чтобы не получить ошибку на следующем шаге.

Способ 2. Разбор строки пути вручную

Иногда объект Файл недоступен — например, в некоторых серверных контекстах веб-клиента или когда путь пришёл с другой операционной системы с нестандартным разделителем. Тогда имя файла извлекают строковыми функциями: ищут последний разделитель «\» или «/» и берут часть строки после него.

Функция ИмяФайлаИзПути(ПолныйПуть)

Путь = СтрЗаменить(ПолныйПуть, "/", "\");

Позиция = СтрНайти(Путь, "\", НаправлениеПоиска.СКонца);

Если Позиция = 0 Тогда

Возврат Путь; // разделителя нет — это уже имя файла

Иначе

Возврат Сред(Путь, Позиция + 1);

КонецЕсли;

КонецФункции

Чтобы дополнительно отделить расширение, ищите последнюю точку уже в полученном имени. Важный нюанс: точка может встречаться в имени самого файла («отчет.итоговый.xlsx»), поэтому отсекать нужно только по последней точке, а не по первой. Также файл может вообще не иметь расширения — проверяйте, что позиция точки больше нуля.

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

Способ 3. Функции БСП (Библиотека стандартных подсистем)

Если конфигурация построена на БСП (1С:Бухгалтерия, 1С:Управление торговлей, 1С:ERP и большинство типовых), используйте готовые функции вместо собственного кода. Они учитывают особенности клиент-серверной работы и уже протестированы.

  • ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПолноеИмяФайла) — возвращает структуру с полями «Имя», «ИмяБезРасширения», «Расширение», «Путь»;
  • РаботаСФайламиКлиентСервер — набор функций для работы с именами и расширениями присоединенных файлов;
  • ФайловаяСистемаКлиент — диалоги выбора и операции с файлами в асинхронном режиме.
ЧастиИмени = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(

"C:\Документы\прайс_январь.xlsx");

ИмяФайла = ЧастиИмени.Имя; // "прайс_январь.xlsx"

Расширение = ЧастиИмени.Расширение; // ".xlsx"

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

Сравнение способов

Объект Файл

Универсально, работает везде, где доступна файловая система. Не подходит для веб-клиента без расширения.

Ручной разбор строки

Работает в любом контексте, включая сервер и запросы. Требует аккуратной обработки точек и разделителей.

Функции БСП

Самый чистый код в типовых конфигурациях. Недоступен, если конфигурация без БСП.

Получение имени файла через диалог выбора

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

// Обычные формы

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

Диалог.Фильтр = "Файлы данных (.xlsx)|.xlsx";

Если Диалог.Выбрать() Тогда

Файл = Новый Файл(Диалог.ПолноеИмяФайла);

Сообщить("Выбран файл: " + Файл.Имя);

КонецЕсли;

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

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

Частые ошибки и ограничения

Первая типичная ошибка — сравнение расширения без учёта точки и регистра. Платформа возвращает расширение в том регистре, в котором оно указано в пути: «.XLSX» и «.xlsx» при сравнении строк дадут «Ложь». Приводите обе стороны к одному регистру через НРег().

Вторая ошибка — попытка использовать модальные диалоги в управляемом приложении. Код с Диалог.Выбрать() в тонком клиенте с режимом модальности «не использовать» просто не выполнится. Переписывайте на асинхронные вызовы с оповещениями.

Третья группа проблем связана с путями: сетевые пути «\\server\share\file.txt», пути Linux с прямыми слэшами, пробелы и кириллица в именах. Объект Файл корректно обрабатывает большинство таких случаев, но ручной разбор строки нужно писать с учётом обоих разделителей.

Типичные ошибки
01
Сравнение расширения без точки: Файл.Расширение = "xlsx" никогда не выполнится, нужно ".xlsx" или Сред(Расширение, 2)
02
Игнорирование регистра: ".XLSX" и ".xlsx" не равны при сравнении строк — используйте НРег()
03
Модальный диалог в управляемой форме: код не работает в тонком и веб-клиенте, нужен асинхронный вызов
04
Отсечение имени по первой точке: файл "отчет.итоговый.xlsx" обрежется до "отчет" вместо "отчет.итоговый"
05
Обращение к диску на веб-клиенте без расширения работы с файлами: методы падают с ошибкой доступа

Проверка результата

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

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

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

ВызватьИсключение "Файл не найден: " + ПолныйПуть;

КонецЕсли;

Если НРег(Файл.Расширение) <> ".xlsx" Тогда

ВызватьИсключение "Ожидается файл Excel, выбран: " + Файл.Имя;

КонецЕсли;

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

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

Имя файла
Норма

Содержит имя с расширением без пути: "прайс.xlsx"

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

Пустая строка или в имени остались фрагменты пути со слэшами

Расширение
Норма

Совпадает с ожидаемым с учётом точки и регистра

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

Сравнение не проходит из-за регистра или лишней точки

Существование файла
Норма

Файл.Существует() возвращает Истина перед чтением

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

Ошибка чтения на этапе загрузки данных

FAQ

Как получить имя файла без расширения?

Используйте свойство ИмяБезРасширения объекта Файл: Новый Файл(Путь).ИмяБезРасширения. При ручном разборе найдите последнюю точку в имени и возьмите часть строки до неё, предварительно проверив, что точка вообще есть.

Почему Файл.Расширение возвращает значение с точкой?

Таково поведение платформы: расширение включает ведущую точку, чтобы его можно было напрямую подставлять при формировании нового имени файла. Для сравнения либо добавляйте точку в эталонную строку, либо отсекайте её через Сред(Расширение, 2).

Как получить имя файла на сервере 1С?

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

Работает ли объект Файл в веб-клиенте?

Разбор пути через конструктор работает, но методы, обращающиеся к файловой системе (Существует, Размер, чтение), требуют установленного расширения работы с файлами в браузере. Без него используйте механизмы помещения файлов во временное хранилище.

Как извлечь имя файла из пути с прямыми слэшами (Linux)?

Перед разбором замените разделители: СтрЗаменить(Путь, "/", "\"), затем ищите последний обратный слэш. Объект Файл на Windows-сервере также корректно обрабатывает большинство смешанных путей, но нормализация строки делает код предсказуемее.

Чем отличается Имя от ПолноеИмя у объекта Файл?

ПолноеИмя — это весь путь целиком («C:\Документы\прайс.xlsx»), а Имя — только последняя часть с расширением («прайс.xlsx»). Для отображения пользователю обычно достаточно Имя, для повторного открытия файла нужно ПолноеИмя.

Итог

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

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