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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с печатными формами и табличными документами в 1С разработчики часто сталкиваются с задачей: необходимо, чтобы при выборе пункта меню Файл \ Сохранить как... система автоматически предлагала понятное имя файла (например, "Счет на оплату №123 от 12.08.2026"), а не стандартное наименование "Табличный документ".

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

Причина поведения платформы при сохранении

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

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

Способ 1. Использование второго параметра метода Показать()

Рассмотрим наиболее простой и эффективный способ для управляемых форм и клиентского кода. Метод Показать() объекта ТабличныйДокумент принимает два основных параметра: заголовок окна и подставляемое имя файла при сохранении.

Синтаксис метода:

ТабличныйДокумент.Показать(<Заголовок>, <ИмяФайла>)

Посмотрим на пример реализации команды печати на клиенте:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    ТабДок = Новый ТабличныйДокумент;
    
    // Заполняем табличный документ на сервере
    СформироватьПечатнуюФорму(ТабДок, ПараметрКоманды);
    
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    
    // Формируем понятное имя файла без недопустимых символов
    ИмяФайла = "Счет на оплату " + СтрЗаменить(Строка(ПараметрКоманды[0]), "/", "-");
    ЗаголовокОкна = "Печать счета";
    
    // Передаем заголовок окна первым параметром, а имя файла — вторым
    ТабДок.Показать(ЗаголовокОкна, ИмяФайла);
    
КонецПроцедуры

В данном случае при вызове диалога Сохранить как... платформа автоматически подставит строку из второго параметра в качестве имени файла.

Способ 2. Вызов кастомного диалога сохранения файла

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

Рассмотрим пример программного вызова диалога с явным указанием имени сохранения:


&НаКлиенте
Процедура СохранитьТабличныйДокументВФайл()

    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок = "Выберите путь для сохранения";
    
    // Задаем предлагаемое имя файла
    ИмяДокумента = СтрЗаменить(ЭтаФорма.Заголовок, ".", "_");
    Диалог.ПолноеИмяФайла = ИмяДокумента + ".xlsx";
    Диалог.Фильтр = "Файл Excel (*.xlsx)|*.xlsx|Табличный документ (*.mxl)|*.mxl";
    
    Если Диалог.Выбрать() Тогда
        ИмяФайла = Диалог.ПолноеИмяФайла;
        Попытка
            // Определяем тип файла по расширению и записываем
            Если Прав(ИмяФайла, 4) = "xlsx" Тогда
                Элементы.ПолеТабличногоДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
            Иначе
                Элементы.ПолеТабличногоДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL);
            КонецЕсли;
        Исключение
            ПоказатьПредупреждение(, "Ошибка при записи файла.");
        КонецПопытки;
    КонецЕсли;

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

Способ 3. Передача заголовка в типовые механизмы печати (обычные формы)

В конфигурациях на обычных формах (например, Управление торговлей 10.3 или Бухгалтерия предприятия 1.6/2.0) вывод печатных форм часто выполняется через процедуру общего модуля УниверсальныеМеханизмы.НапечататьДокумент.

За заголовок окна и предлагаемое имя файла отвечает четвертый параметр данной процедуры:


// В конце функции Печать() внешней или встроенной печатной формы:
ЗаголовокФормы = "Счет на оплату № " + Шапка.Номер + " от " + Формат(Шапка.Дата, "ДФ=dd.MM.yyyy");

УниверсальныеМеханизмы.НапечататьДокумент(
    ТабДокумент, 
    КоличествоЭкземпляров, 
    НаПринтер, 
    ЗаголовокФормы, // Данный параметр задает имя окна и файла
    НепосредственнаяПечать
);

Важные нюансы при формировании имени файла

  1. Спецсимволы в именах файлов: Операционные системы запрещают использовать в именах файлов символы /, \, :, *, ?, ", <, >, |. Если номер документа содержит слэш (например, 0000-001/1), перед подстановкой строки в имя файла необходимо обязательно очистить её с помощью функции СтрЗаменить().
  2. Контекст исполнения: Интерактивные диалоги (ДиалогВыбораФайла, метод Показать()) работают только в контексте клиента (&НаКлиенте). На сервере для автоматического формирования и сохранения файлов используется прямой метод ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайла).
← На главную