Разработка и Конфигурация · 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Создайте объект Файл по полному пути и проверьте существование файла методом Существует()
- 2Получите ИмяБезРасширения и Путь, сформируйте новое имя с целевым расширением
- 3Убедитесь, что файл с новым именем ещё не существует, либо осознанно удалите его
- 4Выполните ПереместитьФайл со старого имени на новое
- 5Проверьте результат: файл с новым именем существует, старый отсутствует
Замена расширения при сохранении нового файла
Не всегда нужно переименовывать существующий файл. Часто правильнее сразу записать данные под нужным именем: текстовые данные сохраняют через ЗаписьТекста или ТекстовыйДокумент.Записать(), табличный документ — через ТабДок.Записать() с указанием типа файла. В этом случае расширение в имени должно соответствовать типу записи, иначе приёмная система не распознает файл.
Пример сохранения текстового файла с заменой расширения относительно исходного:
Файл = Новый Файл(ИсходныйПуть);
НовоеИмя = Файл.Путь + Файл.ИмяБезРасширения + ".csv";
Текст = Новый ЗаписьТекста(НовоеИмя, КодировкаТекста.UTF8);
Текст.ЗаписатьСтроку("Артикул;Наименование;Цена");
// ... выгрузка строк ...
Текст.Закрыть();
Такой подход безопаснее переименования: исходный файл остаётся нетронутым, а содержимое нового файла гарантированно соответствует его расширению. Для табличных документов тип файла задаётся явно — например, ТипФайлаТабличногоДокумента.XLSX или ТипФайлаТабличногоДокумента.PDF, и платформа сама формирует корректную внутреннюю структуру.
Переименование или новая запись
Подходит, когда содержимое файла уже корректно и меняется только имя, например .tmp в готовый .xml. Быстро, но не меняет формат данных.
Подходит, когда нужно реально сформировать файл целевого формата. Занимает больше времени и места, зато гарантирует соответствие содержимого расширению.
Разовая операция для пользователя без доступа к коду. Требует включённого показа расширений и понимания, что формат данных не меняется.
Как поменять расширение файла из 1С вручную, без кода
Если задача разовая — например, нужно открыть выгруженный из 1С файл в программе, привязанной к другому расширению, — достаточно переименовать файл в проводнике Windows. По умолчанию система скрывает расширения известных типов, поэтому сначала включите их отображение: в проводнике откройте вкладку «Вид» и установите флажок «Расширения имён файлов». После этого полное имя файла, включая часть после точки, станет редактируемым.
Далее нажмите на файл правой кнопкой, выберите «Переименовать» и замените часть после последней точки на нужное расширение. Windows покажет предупреждение, что файл может стать недоступным — это штатное уведомление, а не ошибка. Если после переименования файл не открывается, верните исходное расширение тем же способом.
Учтите, что внутри самой 1С расширение часто задаётся при сохранении: в диалоге сохранения файла выберите нужный тип в поле «Тип файла» — тогда платформа сразу подставит правильное расширение, и переименовывать ничего не придётся.
Проверка результата и типичные ошибки
После замены расширения убедитесь, что операция прошла корректно: файл с новым именем существует, открывается целевой программой и содержит ожидаемые данные. В коде проверку делают повторным созданием объекта Файл и вызовом Существует() для нового пути, а также проверкой отсутствия старого файла после переименования.
Наиболее частые проблемы связаны не с самой заменой, а с окружением: файл занят другим процессом (открыт в Excel или заблокирован антивирусом), у пользователя сеанса нет прав на запись в каталог, либо целевой файл уже существует и ПереместитьФайл завершается ошибкой. Все эти ситуации стоит обрабатывать через Попытка...Исключение с понятным сообщением пользователю.
Как проверить результат
Файл существует по новому пути, Файл.Существует() возвращает Истина
Файла нет — переименование не выполнено, смотрите текст исключения
Исходный файл отсутствует после ПереместитьФайл
Старый файл на месте — возможно, выполнилось копирование другим методом или операция не запускалась
Файл открывается в приложении, ассоциированном с новым расширением
Программа сообщает о неверном формате — содержимое не соответствует расширению, нужна конвертация, а не переименование
Размер нового файла совпадает с исходным при переименовании
Размер нулевой или сильно отличается — файл мог быть повреждён или перезаписан
FAQ: частые вопросы о замене расширения в 1С
Меняется ли содержимое файла при замене расширения?
Нет. Переименование затрагивает только имя файла — байты внутри остаются прежними. Если нужно реально преобразовать формат, используйте методы записи 1С (ЗаписьТекста, ТабличныйДокумент.Записать с нужным типом) или внешние конвертеры.
Как заменить расширение у всех файлов в каталоге?
Используйте функцию НайтиФайлы с маской, например НайтиФайлы("C:\Обмен", "*.txt"), затем в цикле для каждого найденного файла формируйте новое имя через ИмяБезРасширения и вызывайте ПереместитьФайл. Перед массовой операцией сделайте копию каталога.
Почему ПереместитьФайл выдаёт ошибку?
Частые причины: файл открыт другой программой, нет прав на запись в каталог, целевой файл уже существует или путь содержит недопустимые символы. Оберните вызов в Попытка...Исключение и выведите ОписаниеОшибки() — в нём указана конкретная причина.
Как узнать текущее расширение файла в коде?
Создайте объект Файл по пути и прочитайте свойство Расширение — оно возвращает строку с точкой, например «.xml». Для сравнения приводите значение к нижнему регистру функцией НРег(), чтобы «.XML» и «.xml» считались одинаковыми.
Можно ли заменить расширение у файла во временном хранилище?
Файл во временном хранилище не имеет имени — это двоичные данные по адресу. Имя и расширение задаются в момент получения данных из хранилища: например, ПолучитьИзВременногоХранилища с записью под нужным именем или передача имени при интерактивном сохранении через диалог.
Что важно запомнить
Замена расширения в 1С — это формирование нового имени через объект Файл (ИмяБезРасширения + новое расширение) и переименование методом ПереместитьФайл либо запись нового файла. Переименование не конвертирует данные: если нужен другой формат, записывайте файл соответствующим методом. Всегда проверяйте существование файлов и обрабатывайте ошибки доступа.