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

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

Как заменить расширение файла в 1С

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

Задача заменить расширение файла в 1С возникает в двух разных ситуациях. Первая — программная обработка файлов в коде: обмен данными, выгрузка отчётов, конвертация XML в TXT или переименование вложений перед отправкой. Вторая — работа пользователя в операционной системе, когда файл, созданный из 1С, нужно открыть другой программой и для этого поменять его расширение вручную. Оба сценария решаются быстро, если понимать, как 1С работает с именами файлов.

Во встроенном языке 1С нет отдельной команды «заменить расширение» — операция собирается из двух шагов: отсечь старое расширение от имени файла и присоединить новое. Для этого используются функции работы со строками и объект Файл, который возвращает свойства файла, включая расширение и имя без расширения. Ниже разобраны готовые примеры кода, ручной способ и проверка результата.

Когда требуется заменить расширение в 1С

Чаще всего замена расширения нужна при обмене данными с внешними системами. Банковские клиенты, онлайн-кассы, EDI-провайдеры и сторонние программы могут требовать файл строго определённого формата: например, выгрузка сформирована как .txt, а загрузить её нужно как .xml, или наоборот. Второй типичный случай — временные файлы: обработка создаёт файл с расширением .tmp, а после успешного завершения переименовывает его в целевой формат, чтобы другие процессы не подхватили недозаписанный файл.

Отдельная ситуация — пользовательская работа без программирования. Из 1С сохранён отчёт или печатная форма, и файл нужно открыть в программе, которая ассоциирована с другим расширением. Здесь достаточно переименовать файл в проводнике, но важно понимать: смена расширения не конвертирует содержимое. Если внутри файла двоичные данные Excel, переименование в .csv не сделает его текстовым — файл просто перестанет открываться.

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

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

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

ИсходныйПуть = "C:\Обмен\Выгрузка.txt";

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

НовоеИмя = Файл.Путь + Файл.ИмяБезРасширения + ".xml";

Сообщить(НовоеИмя); // C:\Обмен\Выгрузка.xml

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

Замена расширения с физическим переименованием файла

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

Готовая процедура замены расширения:

Процедура ЗаменитьРасширение(ПутьКФайлу, НовоеРасширение) Экспорт

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

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

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

КонецЕсли;

Если СтрНачинаетсяС(НовоеРасширение, ".") Тогда

РасширениеСТочкой = НовоеРасширение;

Иначе

РасширениеСТочкой = "." + НовоеРасширение;

КонецЕсли;

НовоеИмя = Файл.Путь + Файл.ИмяБезРасширения + РасширениеСТочкой;

Если НРег(Файл.Расширение) = НРег(РасширениеСТочкой) Тогда

Возврат; // расширение уже нужное

КонецЕсли;

ПереместитьФайл(ПутьКФайлу, НовоеИмя);

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

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

Порядок действий при замене расширения кодом
  1. 1
    Создайте объект Файл по полному пути и проверьте существование файла методом Существует()
  2. 2
    Получите ИмяБезРасширения и Путь, сформируйте новое имя с целевым расширением
  3. 3
    Убедитесь, что файл с новым именем ещё не существует, либо осознанно удалите его
  4. 4
    Выполните ПереместитьФайл со старого имени на новое
  5. 5
    Проверьте результат: файл с новым именем существует, старый отсутствует

Замена расширения при сохранении нового файла

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

Пример сохранения текстового файла с заменой расширения относительно исходного:

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

НовоеИмя = Файл.Путь + Файл.ИмяБезРасширения + ".csv";

Текст = Новый ЗаписьТекста(НовоеИмя, КодировкаТекста.UTF8);

Текст.ЗаписатьСтроку("Артикул;Наименование;Цена");

// ... выгрузка строк ...

Текст.Закрыть();

Такой подход безопаснее переименования: исходный файл остаётся нетронутым, а содержимое нового файла гарантированно соответствует его расширению. Для табличных документов тип файла задаётся явно — например, ТипФайлаТабличногоДокумента.XLSX или ТипФайлаТабличногоДокумента.PDF, и платформа сама формирует корректную внутреннюю структуру.

Переименование или новая запись

ПереместитьФайл (переименование)

Подходит, когда содержимое файла уже корректно и меняется только имя, например .tmp в готовый .xml. Быстро, но не меняет формат данных.

Запись нового файла

Подходит, когда нужно реально сформировать файл целевого формата. Занимает больше времени и места, зато гарантирует соответствие содержимого расширению.

Ручное переименование в проводнике

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

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

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

Далее нажмите на файл правой кнопкой, выберите «Переименовать» и замените часть после последней точки на нужное расширение. Windows покажет предупреждение, что файл может стать недоступным — это штатное уведомление, а не ошибка. Если после переименования файл не открывается, верните исходное расширение тем же способом.

Учтите, что внутри самой 1С расширение часто задаётся при сохранении: в диалоге сохранения файла выберите нужный тип в поле «Тип файла» — тогда платформа сразу подставит правильное расширение, и переименовывать ничего не придётся.

Проверка результата и типичные ошибки

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

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

Типичные ошибки
01
Переименование вместо конвертации: файл .xls переименован в .csv и перестал открываться, потому что формат данных не изменился
02
Потеря точки: новое расширение присоединено без точки, получилось имя вида «отчетxml», и система не распознаёт тип
03
Отсутствие проверки существования целевого файла: ПереместитьФайл падает с ошибкой или затирает нужные данные
04
Сравнение расширений без приведения регистра: «.XML» и «.xml» считаются разными, и обработка выполняет лишние действия
05
Обработка несуществующего файла: объект Файл создан, но метод Существует() не вызван, и ошибка всплывает только на этапе переименования
Контрольные точки

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

Наличие файла с новым именем
Норма

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

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

Файла нет — переименование не выполнено, смотрите текст исключения

Отсутствие старого файла
Норма

Исходный файл отсутствует после ПереместитьФайл

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

Старый файл на месте — возможно, выполнилось копирование другим методом или операция не запускалась

Открытие целевой программой
Норма

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

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

Программа сообщает о неверном формате — содержимое не соответствует расширению, нужна конвертация, а не переименование

Размер файла
Норма

Размер нового файла совпадает с исходным при переименовании

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

Размер нулевой или сильно отличается — файл мог быть повреждён или перезаписан

FAQ: частые вопросы о замене расширения в 1С

Меняется ли содержимое файла при замене расширения?

Нет. Переименование затрагивает только имя файла — байты внутри остаются прежними. Если нужно реально преобразовать формат, используйте методы записи 1С (ЗаписьТекста, ТабличныйДокумент.Записать с нужным типом) или внешние конвертеры.

Как заменить расширение у всех файлов в каталоге?

Используйте функцию НайтиФайлы с маской, например НайтиФайлы("C:\Обмен", "*.txt"), затем в цикле для каждого найденного файла формируйте новое имя через ИмяБезРасширения и вызывайте ПереместитьФайл. Перед массовой операцией сделайте копию каталога.

Почему ПереместитьФайл выдаёт ошибку?

Частые причины: файл открыт другой программой, нет прав на запись в каталог, целевой файл уже существует или путь содержит недопустимые символы. Оберните вызов в Попытка...Исключение и выведите ОписаниеОшибки() — в нём указана конкретная причина.

Как узнать текущее расширение файла в коде?

Создайте объект Файл по пути и прочитайте свойство Расширение — оно возвращает строку с точкой, например «.xml». Для сравнения приводите значение к нижнему регистру функцией НРег(), чтобы «.XML» и «.xml» считались одинаковыми.

Можно ли заменить расширение у файла во временном хранилище?

Файл во временном хранилище не имеет имени — это двоичные данные по адресу. Имя и расширение задаются в момент получения данных из хранилища: например, ПолучитьИзВременногоХранилища с записью под нужным именем или передача имени при интерактивном сохранении через диалог.

Итог

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

Замена расширения в 1С — это формирование нового имени через объект Файл (ИмяБезРасширения + новое расширение) и переименование методом ПереместитьФайл либо запись нового файла. Переименование не конвертирует данные: если нужен другой формат, записывайте файл соответствующим методом. Всегда проверяйте существование файлов и обрабатывайте ошибки доступа.