При работе с печатными формами и табличными документами в 1С разработчики часто сталкиваются с задачей: необходимо, чтобы при выборе пункта меню Файл \ Сохранить как... система автоматически предлагала понятное имя файла (например, "Счет на оплату №123 от 12.08.2026"), а не стандартное наименование "Табличный документ".
Разберем подробно, как работает этот механизм в платформе 1С:Предприятие, почему свойство ИспользуемоеИмяФайла не всегда дает нужный эффект и какими способами можно программно установить имя подставляемого файла.
Проанализируем логику работы платформы 1С. Когда табличный документ формируется в оперативной памяти и отображается пользователю в окне, платформа по умолчанию подставляет в диалог сохранения заголовок текущей формы (окна), в котором открыт документ.
Свойство табличного документа ИспользуемоеИмяФайла применяется при считывании или записи файла с диска через методы Прочитать() и Записать(). Однако при интерактивном вызове стандартного меню сохранения файла сформированный в памяти документ ещё не привязан к конкретному пути на диске, поэтому значение этого свойства может игнорироваться стандартным платформенным диалогом.
Рассмотрим наиболее простой и эффективный способ для управляемых форм и клиентского кода. Метод Показать() объекта ТабличныйДокумент принимает два основных параметра: заголовок окна и подставляемое имя файла при сохранении.
Синтаксис метода:
ТабличныйДокумент.Показать(<Заголовок>, <ИмяФайла>)
Посмотрим на пример реализации команды печати на клиенте:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ТабДок = Новый ТабличныйДокумент;
// Заполняем табличный документ на сервере
СформироватьПечатнуюФорму(ТабДок, ПараметрКоманды);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Истина;
// Формируем понятное имя файла без недопустимых символов
ИмяФайла = "Счет на оплату " + СтрЗаменить(Строка(ПараметрКоманды[0]), "/", "-");
ЗаголовокОкна = "Печать счета";
// Передаем заголовок окна первым параметром, а имя файла — вторым
ТабДок.Показать(ЗаголовокОкна, ИмяФайла);
КонецПроцедуры
В данном случае при вызове диалога Сохранить как... платформа автоматически подставит строку из второго параметра в качестве имени файла.
Если требуется полностью перехватить процесс сохранения (например, добавить собственную кнопку "Сохранить" на форму с печатной формой), можно использовать объект ДиалогВыбораФайла.
Рассмотрим пример программного вызова диалога с явным указанием имени сохранения:
&НаКлиенте
Процедура СохранитьТабличныйДокументВФайл()
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выберите путь для сохранения";
// Задаем предлагаемое имя файла
ИмяДокумента = СтрЗаменить(ЭтаФорма.Заголовок, ".", "_");
Диалог.ПолноеИмяФайла = ИмяДокумента + ".xlsx";
Диалог.Фильтр = "Файл Excel (*.xlsx)|*.xlsx|Табличный документ (*.mxl)|*.mxl";
Если Диалог.Выбрать() Тогда
ИмяФайла = Диалог.ПолноеИмяФайла;
Попытка
// Определяем тип файла по расширению и записываем
Если Прав(ИмяФайла, 4) = "xlsx" Тогда
Элементы.ПолеТабличногоДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
Иначе
Элементы.ПолеТабличногоДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL);
КонецЕсли;
Исключение
ПоказатьПредупреждение(, "Ошибка при записи файла.");
КонецПопытки;
КонецЕсли;
КонецПроцедуры
В конфигурациях на обычных формах (например, Управление торговлей 10.3 или Бухгалтерия предприятия 1.6/2.0) вывод печатных форм часто выполняется через процедуру общего модуля УниверсальныеМеханизмы.НапечататьДокумент.
За заголовок окна и предлагаемое имя файла отвечает четвертый параметр данной процедуры:
// В конце функции Печать() внешней или встроенной печатной формы:
ЗаголовокФормы = "Счет на оплату № " + Шапка.Номер + " от " + Формат(Шапка.Дата, "ДФ=dd.MM.yyyy");
УниверсальныеМеханизмы.НапечататьДокумент(
ТабДокумент,
КоличествоЭкземпляров,
НаПринтер,
ЗаголовокФормы, // Данный параметр задает имя окна и файла
НепосредственнаяПечать
);
/, \, :, *, ?, ", <, >, |. Если номер документа содержит слэш (например, 0000-001/1), перед подстановкой строки в имя файла необходимо обязательно очистить её с помощью функции СтрЗаменить().ДиалогВыбораФайла, метод Показать()) работают только в контексте клиента (&НаКлиенте). На сервере для автоматического формирования и сохранения файлов используется прямой метод ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайла).