При работе с внешними печатными формами в 1С:Предприятие 8.3 часто возникает задача автоматического формирования имени файла при сохранении документа на диск. По умолчанию система может предлагать техническое имя макета или стандартное название «Табличный документ». В этой статье мы подробно разберем, как реализовать механизм, при котором файл будет называться осмысленно, например, «Счет на оплату № 322».
В современных конфигурациях 1С (таких как УТ 11, БП 3.0, ERP 2) печать реализуется через общие механизмы БСП. Основной точкой взаимодействия является процедура ВывестиТабличныйДокументВКоллекцию. Рассмотрим, как правильно передать имя файла в этом случае.
Проанализируем стандартный вызов этой процедуры в модуле внешней печатной формы. Обычно он выглядит следующим образом:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"СчетНаОплатуВРТУ",
"Счет на оплату (внешний)",
СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)
);
Здесь третий параметр — это синоним макета. Именно он по умолчанию подставляется системой в качестве имени файла при нажатии кнопки «Сохранить». Если нам нужно динамическое имя, мы можем сформировать его заранее и передать в этот параметр.
Разберем пример реализации динамического имени:
// Получаем данные для заголовка (например, номер и дату документа)
ДанныеОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(МассивОбъектов[0], "Номер, Дата");
ИмяДляСохранения = СтрШаблон("Счет на оплату № %1 от %2", ДанныеОбъекта.Номер, Формат(ДанныеОбъекта.Дата, "ДФ=dd.MM.yyyy"));
// Выводим в коллекцию с новым именем
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"СчетНаОплатуВРТУ",
ИмяДляСохранения,
СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)
);
Важное замечание: изменение третьего параметра изменит не только имя файла, но и название печатной формы в списке выбора, если пользователю доступно несколько вариантов печати. Если вы хотите сохранить краткое название в интерфейсе, но задать длинное имя файла, следует использовать дополнительные возможности БСП.
Выясним причину, почему первый метод не всегда удобен. Если мы печатаем сразу пакет документов, нам нужно, чтобы каждый файл назывался по-своему. В последних версиях БСП процедура ВывестиТабличныйДокументВКоллекцию поддерживает дополнительные параметры. Седьмой параметр этой функции предназначен специально для задания имени файла.
Рассмотрим, как это работает программно:
ТабДок = СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати);
ИмяФайла = "Счет_на_оплату_№_" + СокрЛП(МассивОбъектов[0].Номер);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"СчетНаОплату",
"Счет на оплату",
ТабДок,
, // Картинка
, // Полный путь к макету
ИмяФайла // 7-й параметр: Имя файла печатной формы
);
Если печать выполняется для списка документов, в этот параметр можно передать объект Соответствие, где ключом будет ссылка на объект, а значением — желаемое имя файла.
Если ваша печатная форма не использует механизмы БСП или вы работаете в упрощенном режиме, можно воспользоваться прямым свойством объекта ТабличныйДокумент. Существует реквизит ИспользуемоеИмяФайла, который напрямую сообщает платформе, какое имя предложить пользователю.
Посмотрим на пример заполнения в коде:
Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати)
ТабДок = Новый ТабличныйДокумент;
// ... Логика заполнения ТабДок данными из макета ...
// Задаем имя для сохранения
ТабДок.ИспользуемоеИмяФайла = "Счет_на_оплату_" + СсылкаНаОбъект.Номер;
// Дополнительно можно задать заголовок окна
ТабДок.Заголовок = "Счет на оплату №" + СсылкаНаОбъект.Номер;
Возврат ТабДок;
КонецФункции
Также стоит помнить про свойство ТабДок.Заголовок. В некоторых случаях, если ИспользуемоеИмяФайла не заполнено, система берет значение именно из заголовка табличного документа.
Проанализируем ситуацию: что будет, если в номере документа содержится символ косой черты (например, «001/А»)? Windows не позволит сохранить файл с таким именем, и система выдаст ошибку или заменит символы на подчеркивание.
Чтобы избежать проблем, крайне рекомендуется обрабатывать строку перед установкой имени. В БСП для этого есть удобная функция. Рассмотрим её применение:
ИмяФайла = "Счет № " + Объект.Номер;
// Удаляем символы /, \, :, *, ?, ", <, >, |
ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, "-");
ТабДок.ИспользуемоеИмяФайла = ИмяФайла;
Для корректного именования файлов при сохранении печатных форм в 1С мы можем использовать несколько подходов:
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.ИспользуемоеИмяФайла объекта ТабличныйДокумент.Выбор конкретного метода зависит от архитектуры вашей печатной формы, но использование параметров УправлениеПечатью считается наиболее правильным и современным способом для управляемого приложения.