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

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

При работе с внешними печатными формами в 1С:Предприятие 8.3 часто возникает задача автоматического формирования имени файла при сохранении документа на диск. По умолчанию система может предлагать техническое имя макета или стандартное название «Табличный документ». В этой статье мы подробно разберем, как реализовать механизм, при котором файл будет называться осмысленно, например, «Счет на оплату № 322».

Метод 1: Использование параметров Библиотеки стандартных подсистем (БСП)

В современных конфигурациях 1С (таких как УТ 11, БП 3.0, ERP 2) печать реализуется через общие механизмы БСП. Основной точкой взаимодействия является процедура ВывестиТабличныйДокументВКоллекцию. Рассмотрим, как правильно передать имя файла в этом случае.

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


УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм, 
    "СчетНаОплатуВРТУ", 
    "Счет на оплату (внешний)", 
    СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)
);

Здесь третий параметр — это синоним макета. Именно он по умолчанию подставляется системой в качестве имени файла при нажатии кнопки «Сохранить». Если нам нужно динамическое имя, мы можем сформировать его заранее и передать в этот параметр.

Разберем пример реализации динамического имени:


// Получаем данные для заголовка (например, номер и дату документа)
ДанныеОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(МассивОбъектов[0], "Номер, Дата");
ИмяДляСохранения = СтрШаблон("Счет на оплату № %1 от %2", ДанныеОбъекта.Номер, Формат(ДанныеОбъекта.Дата, "ДФ=dd.MM.yyyy"));

// Выводим в коллекцию с новым именем
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм, 
    "СчетНаОплатуВРТУ", 
    ИмяДляСохранения, 
    СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)
);

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

Метод 2: Работа с расширенными параметрами БСП (7-й параметр)

Выясним причину, почему первый метод не всегда удобен. Если мы печатаем сразу пакет документов, нам нужно, чтобы каждый файл назывался по-своему. В последних версиях БСП процедура ВывестиТабличныйДокументВКоллекцию поддерживает дополнительные параметры. Седьмой параметр этой функции предназначен специально для задания имени файла.

Рассмотрим, как это работает программно:


ТабДок = СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати);
ИмяФайла = "Счет_на_оплату_№_" + СокрЛП(МассивОбъектов[0].Номер);

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм, 
    "СчетНаОплату", 
    "Счет на оплату", 
    ТабДок, 
    , // Картинка
    , // Полный путь к макету
    ИмяФайла // 7-й параметр: Имя файла печатной формы
);

Если печать выполняется для списка документов, в этот параметр можно передать объект Соответствие, где ключом будет ссылка на объект, а значением — желаемое имя файла.

Метод 3: Использование свойств Табличного Документа

Если ваша печатная форма не использует механизмы БСП или вы работаете в упрощенном режиме, можно воспользоваться прямым свойством объекта ТабличныйДокумент. Существует реквизит ИспользуемоеИмяФайла, который напрямую сообщает платформе, какое имя предложить пользователю.

Посмотрим на пример заполнения в коде:


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

Также стоит помнить про свойство ТабДок.Заголовок. В некоторых случаях, если ИспользуемоеИмяФайла не заполнено, система берет значение именно из заголовка табличного документа.

Очистка имени файла от недопустимых символов

Проанализируем ситуацию: что будет, если в номере документа содержится символ косой черты (например, «001/А»)? Windows не позволит сохранить файл с таким именем, и система выдаст ошибку или заменит символы на подчеркивание.

Чтобы избежать проблем, крайне рекомендуется обрабатывать строку перед установкой имени. В БСП для этого есть удобная функция. Рассмотрим её применение:


ИмяФайла = "Счет № " + Объект.Номер;
// Удаляем символы /, \, :, *, ?, ", <, >, |
ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, "-");

ТабДок.ИспользуемоеИмяФайла = ИмяФайла;

Подведем итоги

Для корректного именования файлов при сохранении печатных форм в 1С мы можем использовать несколько подходов:

  1. Для типовых конфигураций на БСП: передавать имя в 3-й (синоним) или 7-й (имя файла) параметр процедуры УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию.
  2. Для произвольных отчетов и форм: напрямую заполнять свойство ИспользуемоеИмяФайла объекта ТабличныйДокумент.
  3. Обязательно: всегда очищать итоговую строку от спецсимволов, которые запрещены в файловой системе.

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

← На главную