Своё имя файла в 1С: отчёты, обмены, встроенный язык

· 9 мин

Содержание

Пользователю название файла выгрузки в 1С меняется прямо в окне сохранения: впишите своё имя в поле «Имя файла» стандартного диалога Windows. В коде переименование делает метод ПереместитьФайл(СтароеИмя, НовоеИмя), а имя файла, который получает пользователь, задаёт ОписаниеПередаваемогоФайла.

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

Как 1С формирует имя файла и где оно живёт

Платформа 1С:Предприятие 8.3 не хранит «название выгрузки» в одном месте. Имя появляется в одном из трёх источников:

  • 📁 Диалог сохранения. Пользователь сам вводит имя, 1С подставляет только вариант по умолчанию (обычно название отчёта или документа).
  • ⚙️ Настройки конкретной выгрузки. Например, имя файла для клиент-банка хранится в настройках обмена с банком.
  • 💻 Встроенный язык. Имя собирает код обработки, обмена или печатной формы.

Для разработчика главное правило другое: файловая операция выполняется там, где выполняется код. Процедура с директивой &НаСервере видит диск сервера 1С, а не компьютер пользователя. Путь C:\Выгрузка на сервере и у бухгалтера на ноутбуке — две разные папки.

Части имени удобно разбирать объектом Файл:

СвойствоПример для D:\Обмен\Выписка_май.txt
ПолноеИмяD:\Обмен\Выписка_май.txt
ИмяВыписка_май.txt
ИмяБезРасширенияВыписка_май
Расширение.txt (с точкой)
Путькаталог файла

Метод Существует() объекта Файл проверяет, есть ли файл на диске. Им стоит пользоваться перед любым переименованием.

Изменение имени при сохранении отчёта или печатной формы

Здесь код не нужен. Порядок для отчёта в интерфейсе «Такси»:

  1. Сформируйте отчёт.
  2. Нажмите кнопку с дискетой «Сохранить» в командной панели отчёта или откройте главное меню (значок ☰ слева вверху) → Файл → Сохранить как….
  3. В поле «Тип файла» выберите формат: xlsx, pdf, docx, mxl и другие.
  4. В поле «Имя файла» сотрите предложенное название и введите своё.
  5. Нажмите «Сохранить».

Печатные формы документов в типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) сохраняются через кнопку «Сохранить» на форме печати. Откроется окно выбора форматов. Имя каждого файла 1С собирает из названия формы и представления документа, например «Счет на оплату № 15 от 12 мая». При сохранении на диск имя можно поправить уже в проводнике.

Какое имя выбрать, чтобы потом не путаться

Если файлы уходят контрагентам, в банк или в архив, договоритесь о шаблоне имени один раз:

  • 📅 дата в начале в виде ГГГГ-ММ-ДД или ГГГГММДД;
  • 🏢 короткое обозначение организации или ИНН, если в базе несколько юрлиц;
  • 📄 вид документа: «Акт», «Реестр», «Остатки»;
  • 🔢 номер документа без пробелов и знака «№»;
  • 🔤 латиница и подчёркивания для файлов, которые читают внешние программы.

Пример: 20260514_7701234567_Akt_118.pdf. Такое имя одинаково читается в Windows, на Linux-сервере, в почте и в архиве.

Если в имени нужна дата выгрузки, вписывайте её в формате ГГГГ-ММ-ДД. Тогда файлы в папке сортируются по порядку без дополнительных действий.

Выгрузки, где имя задаётся в настройках, и где его менять нельзя

Часть файлов 1С создаёт по заранее заданному имени. Одни можно переименовать без последствий, другие — нет.

ВыгрузкаИмя по умолчаниюМожно ли менять
Платёжные поручения в клиент-банк (БП 3.0)1c_to_kl.txtДа, в настройках обмена с банком
Загрузка выписки из клиент-банкаkl_to_1c.txtДа, но так же должен называться файл, который выгружает банк
Выгрузка базы из Конфигуратора1Cv8.dtДа, имя свободное
Универсальный обмен данными в формате XMLзадаёт пользовательДа, поле «Имя файла данных»
Обмен через каталог (синхронизация данных)собирается из кодов узловНет
Регламентированная отчётность в ФНСпо формату ФНСНет

Клиент-банк

В БП 3.0 откройте Банк и касса → Платежные поручения, выделите документы и запустите выгрузку в банк командой в панели списка. В форме выгрузки есть поле с путём и именем файла. Измените имя, например на platezhki_ooo_romashka.txt. Значение запоминается в настройках обмена для этого банковского счёта.

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

Обмен через каталог и отчёты в ФНС

При синхронизации через общую папку имя файла сообщения строится из кодов узлов плана обмена. Принимающая база ищет файл именно с таким именем. Переименуете его — обмен не увидит сообщение и не выдаст понятной ошибки.

С отчётами в налоговую ещё строже. Имя XML-файла совпадает с идентификатором файла, записанным внутри него. Переименованный файл ФНС не примет.

Для обменов и регламентированных отчётов меняйте папку, но не имя файла.

Переименование файла кодом на встроенном языке

Отдельного метода «Переименовать» в платформе нет. Его роль выполняет ПереместитьФайл: если оставить каталог прежним и сменить имя, файл будет переименован.

&НаСервере
Процедура ПереименоватьВыгрузку(СтароеИмя, НовоеКороткоеИмя)

	ИсходныйФайл = Новый Файл(СтароеИмя);
	Если Не ИсходныйФайл.Существует() Тогда
		ВызватьИсключение "Не найден файл " + СтароеИмя;
	КонецЕсли;

	НовоеИмя = ИсходныйФайл.Путь + НовоеКороткоеИмя;

	Если (Новый Файл(НовоеИмя)).Существует() Тогда
		УдалитьФайлы(НовоеИмя);
	КонецЕсли;

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

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

Что важно в этом примере:

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

Переименование на компьютере пользователя

Тот же ПереместитьФайл работает и в процедуре с директивой &НаКлиенте. В тонком клиенте он меняет имя файла на диске пользователя, например в папке «Загрузки». В веб-клиенте для этого нужно установленное расширение для работы с файлами.

В клиентском коде лучше использовать асинхронные варианты методов. В актуальных версиях платформы это ПереместитьФайлАсинх с Ждать внутри асинхронной процедуры. Синхронные вызовы на клиенте могут быть запрещены свойством конфигурации «Режим использования синхронных вызовов расширений платформы и внешних компонент».

Дата и номер в имени файла

Имя чаще всего собирают из даты и реквизитов документа. Дату форматируйте явно:

ИмяФайла = "Реестр_" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd_HHmmss") + ".xml";

Числа приклеивайте только через Формат(Число, "ЧГ=0"). Без этого номер 12345 превратится в «12 345» с неразрывным пробелом внутри имени.

Недопустимые символы

В представлении документа бывают символы \ / : * ? " < > |. Windows их в имени файла не пропускает. В конфигурациях на БСП есть готовая функция:

ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, "_");

Разделитель каталогов не пишите вручную, если сервер может работать на Linux. Используйте ПолучитьРазделительПути().

Временные файлы и своё имя при передаче пользователю

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

Схема в три шага:

  1. На сервере записать файл во временный каталог (ПолучитьИмяВременногоФайла("xlsx") или КаталогВременныхФайлов()).
  2. Прочитать его в ДвоичныеДанные, поместить во временное хранилище и удалить с диска.
  3. На клиенте передать файл пользователю через ОписаниеПередаваемогоФайла с нужным именем.
&НаСервере
Функция ПодготовитьФайлНаСервере()

	ИмяВременного = ПолучитьИмяВременногоФайла("xlsx");
	Результат.Записать(ИмяВременного, ТипФайлаТабличногоДокумента.XLSX);
	Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременного), УникальныйИдентификатор);
	УдалитьФайлы(ИмяВременного);
	Возврат Адрес;

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

&НаКлиенте
Процедура СохранитьВExcel(Команда)

	Адрес = ПодготовитьФайлНаСервере();
	ИмяФайла = "Остатки_" + Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + ".xlsx";

	Файлы = Новый Массив;
	Файлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес));
	НачатьПолучениеФайлов(Новый ОписаниеОповещения("ПослеСохраненияФайла", ЭтотОбъект), Файлы, , Истина);

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

&НаКлиенте
Процедура ПослеСохраненияФайла(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
КонецПроцедуры

Здесь Результат — реквизит формы типа ТабличныйДокумент. Последний параметр Истина открывает диалог: пользователь увидит предложенное имя «Остатки_2026-05-14.xlsx» и при желании изменит его.

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

Пакетное переименование файлов

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

Пример: добавить префикс с датой ко всем XML в папке выгрузки.

&НаСервере
Процедура ДобавитьПрефикс(Каталог)

	Префикс = Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd") + "_";
	Разделитель = ПолучитьРазделительПути();
	НайденныеФайлы = НайтиФайлы(Каталог, "*.xml", Ложь);

	Для Каждого ТекФайл Из НайденныеФайлы Цикл
		Если СтрНачинаетсяС(ТекФайл.Имя, Префикс) Тогда
			Продолжить;
		КонецЕсли;
		НовоеИмя = Каталог + Разделитель + Префикс + ТекФайл.Имя;
		ПереместитьФайл(ТекФайл.ПолноеИмя, НовоеИмя);
	КонецЦикла;

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

Каталог передавайте без завершающего разделителя. Третий параметр Ложь означает поиск без подкаталогов. Проверка через СтрНачинаетсяС защищает от повторного префикса при втором запуске.

Для больших пачек полезно обернуть ПереместитьФайл в Попытка … Исключение и складывать имена неудачных файлов в массив. Один заблокированный файл тогда не остановит весь цикл, а в конце вы получите список проблемных.

Переименование по правилу из таблицы

Бывает, что новые имена заданы списком: например, бухгалтер прислал таблицу «старое имя — новое имя». Загрузите её в таблицу значений с колонками Было и Стало и пройдите циклом:

Для Каждого Строка Из ТаблицаИмен Цикл
	Старое = Каталог + Разделитель + Строка.Было;
	Новое = Каталог + Разделитель + Строка.Стало;
	Если (Новый Файл(Старое)).Существует() И Не (Новый Файл(Новое)).Существует() Тогда
		ПереместитьФайл(Старое, Новое);
	КонецЕсли;
КонецЦикла;

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

Для русских имён, которые нужно перевести в латиницу, в конфигурациях на БСП есть функция транслитерации СтрокаЛатиницей в модуле строковых функций. Её удобно вызвать перед ЗаменитьНедопустимыеСимволыВИмениФайла.

ЗадачаЧем делать
Найти файлы по маскеНайтиФайлы(Каталог, Маска, ВПодкаталогах)
Переименовать или перенестиПереместитьФайл
Оставить оригинал и создать копию с новым именемКопироватьФайл
Упаковать результат в архивЗаписьZipФайла

Ошибки при переименовании и их причины

Большинство ошибок связано не с кодом, а с окружением: правами, блокировками и тем, на каком компьютере выполняется операция.

Диагностика: выберите симптом

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

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

Частые вопросы

Можно ли переименовать файл, не перемещая его?
Да. Вызовите ПереместитьФайл с тем же каталогом и новым именем: физически файл остаётся на месте, меняется только название.
Почему файл из обработки сохраняется без расширения?
В имени, переданном в ОписаниеПередаваемогоФайла, не указано расширение. Добавьте .xlsx, .pdf или нужное вручную: платформа его не подставляет.
Как сделать, чтобы выгрузка в банк не перезаписывала вчерашний файл?
Либо задайте в настройках обмена разные имена для разных счетов, либо после выгрузки переносите файл в архивную папку с датой в имени.
Можно ли изменить имя файла обмена между базами?
Нет. Принимающая база ищет сообщение по имени, собранному из кодов узлов. Меняйте каталог обмена, а не имя файла.
Чем ПереместитьФайл отличается от КопироватьФайл?
ПереместитьФайл убирает исходный файл, КопироватьФайл оставляет его и создаёт второй. Для переименования нужен первый метод.