Добрый день! Подскажите пожалуйста, как изменить модуль объекта во внешней печатной форме, чтобы при сохранении печатной формы в документ pdf, имя этого документа изменилось
Сейчас: Доверенность (М-2) № (НомерДокумента) от (ДатаДокумента)
В процедуре Печать Можно изменить "Доверенность (М-2)" а вот (НомерДокумента) и (ДатуДокумента) не знаю как получить

```1c
    Функция СведенияОВнешнейОбработке() Экспорт

    //Заменяем всё что ЗАГЛАВНЫМИ БУКВАМИ

    //массив назначений: Указываем только объект для которого предназначена печ.форма
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.уатДоверенность"); //Документ к которому делаем внешнюю печ. форму

    //команды: Не меняем!
    ТаблицаКоманд = Новый ТаблицаЗначений;
    ТаблицаКоманд.Колонки.Добавить("Представление" , Новый ОписаниеТипов("Строка")); //Как будет выглядеть описание печ.формы для пользователя
    ТаблицаКоманд.Колонки.Добавить("Идентификатор" , Новый ОписаниеТипов("Строка")); //Имя нашего макета печатной формы
    ТаблицаКоманд.Колонки.Добавить("Использование" , Новый ОписаниеТипов("Строка")); //здесь можно прописать использование как серверного так и клиентского, отличие в том, что серверный метод будет обращаться к экспортной процедуре из модуля объекта, клиентский - к экспортной процедуре из модуля формы объекта
    ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); //Истина
    ТаблицаКоманд.Колонки.Добавить("Модификатор" , Новый ОписаниеТипов("Строка")); //ПечатьМХL

    //новая команда: Заполняем необходимыми данными
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "Доверенность (М-2)(Печать и подпись)"; //Синоним
    НоваяКоманда.Идентификатор = "ПараметрыПечати_Доверенность_Доверенность"; //Наименование макета печатной формы
    НоваяКоманда.Использование = "ВызовСерверногоМетода"; //варианты: "ВызовКлиентскогоМетода или ВызовСерверногоМетода"
    НоваяКоманда.ПоказыватьОповещение = Истина; //Без изменения
    НоваяКоманда.Модификатор = "ПечатьMXL"; //Без изменения

    //параметры регистрации: Заполняем необходимыми данными
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид" , "ПечатнаяФорма"); //Варианты: "ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов"
    ПараметрыРегистрации.Вставить("Назначение" , МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование" , "ПараметрыПечати_Доверенность_Доверенность");//Имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Версия" , "1.0"); //Номер версии
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Информация" , "Доверенность (М-2)(Печать и подпись)"); //Заполняем необходимой информаией(Полное Название и Назначение Печатной формы)
    ПараметрыРегистрации.Вставить("Команды" , ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

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

    Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность", "Доверенность (М-2)", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, "М2"));

    //////////ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "М2а") Тогда
    ////////// УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "М2а", "Доверенность (М-2а)", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, "М2а"));

    КонецЕсли;

    //////////уатОбщегоНазначенияСервер.УстановитьРедактированиеПечатныхФормДокумента(КоллекцияПечатныхФорм);

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

    Функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, НазваниеМакета)

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_Доверенность";

    ПервыйДокумент = Истина;

    Для Каждого ТекущийДокумент Из МассивОбъектов Цикл

    Если Не ПервыйДокумент Тогда
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    ПервыйДокумент = Ложь;

    НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ТекущийДокумент", ТекущийДокумент.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    | Доверенность.Номер КАК НомерДокумента,
    | Доверенность.Дата КАК ДатаДокумента,
    | Доверенность.Организация КАК Руководители,
    | Доверенность.Организация,
    | Доверенность.Сотрудник,
    | Доверенность.Сотрудник.Наименование КАК ФамилияИмяОтчествоДоверенного,
    | Доверенность.БанковскийСчетОрганизации КАК БанковскийСчет,
    | Доверенность.Контрагент КАК Поставщик,
    | Доверенность.НаПолучениеОт КАК ПоставщикПредставление,
    | Доверенность.ДатаДействия КАК СрокДействия,
    | Доверенность.ПоДокументу КАК РеквизитыДокументаНаПолучение,
    | Доверенность.Товары.(
    | НомерСтроки КАК Номер,
    | НаименованиеТовара КАК Ценности,
    | НаименованиеТовара КАК ЦенностиПредставление,
    | ЕдиницаПоКлассификатору КАК ЕдиницаИзмерения,
    | ЕдиницаПоКлассификатору.Представление КАК ЕдиницаИзмеренияПредставление,
    | Количество
    | )
    |ИЗ
    | Документ.уатДоверенность КАК Доверенность
    |ГДЕ
    | Доверенность.Ссылка = &ТекущийДокумент";
    Шапка = Запрос.Выполнить().Выбрать();
    Шапка.Следующий();
    ВыборкаСтрокТовары = Шапка.Товары.Выбрать();

    ТабличныйДокумент.ИмяПараметровПечати = "ПараметрыПечати_Доверенность_Доверенность";
    //Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.ПФ_MXL_М2");
    Макет = ПолучитьМакет("ПФ_MXL_М3");

    ДанныеОФизЛице = уатОбщегоНазначенияТиповыеСервер.ДанныеФизЛица(ТекущийДокумент.Организация, ТекущийДокумент.Сотрудник.ФизическоеЛицо, ТекущийДокумент.Дата);

    ФамилияИмяОтчествоДоверенного = СокрЛП(ДанныеОФизЛице.Фамилия) + " " + СокрЛП(ДанныеОФизЛице.Имя) + " " + СокрЛП(ДанныеОФизЛице.Отчество);
    Должность = СокрЛП(ДанныеОФизЛице.Должность);

    Если НазваниеМакета = "М2" тогда
    ОбластьМакета = Макет.ПолучитьОбласть("Отрез");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    ОбластьМакета.Параметры.НомерДокумента = уатОбщегоНазначенияТиповые.уатПолучитьНомерНаПечать(ТекущийДокумент);
    ОбластьМакета.Параметры.ФИОДоверенного = " + ?(ПустаяСтрока(Должность), ", Должность + ", " + Символы.ПС) + (ФамилияИмяОтчествоДоверенного);
    ТабличныйДокумент.Вывести(ОбластьМакета);
    НазваниеФормы = "Типовая межотраслевая форма № М-2";
    Иначе
    НазваниеФормы = "Типовая межотраслевая форма № М-2а";
    КонецЕсли;

    Руководители = уатОбщегоНазначенияТиповые.уатОтветственныеЛицаОрганизаций(ТекущийДокумент.Организация, ТекущийДокумент.Дата);
    Руководитель = Руководители.Руководитель;
    Бухгалтер = Руководители.ГлавныйБухгалтер;

    СведенияОбОрганизации = уатОбщегоНазначенияСервер.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента,, Шапка.БанковскийСчет);

    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    ОбластьМакета.Параметры.НомерДокумента = уатОбщегоНазначенияТиповые.уатПолучитьНомерНаПечать(ТекущийДокумент);
    ОбластьМакета.Параметры.НазваниеФормы = НазваниеФормы;
    ОбластьМакета.Параметры.ОрганизацияПредставление = уатОбщегоНазначенияТиповыеСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
    ОбластьМакета.Параметры.РеквизитыСчета = уатОбщегоНазначенияТиповыеСервер.ОписаниеОрганизации(СведенияОбОрганизации, "НомерСчета,Банк,БИК,КоррСчет,");
    ОбластьМакета.Параметры.РеквизитыПотребителя = уатОбщегоНазначенияТиповыеСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
    Попытка //попытка сделана для корректной работе в УПП, т.к. там обе области называются РеквизитыПотребителя
    ОбластьМакета.Параметры.РеквизитыПлательщика = уатОбщегоНазначенияТиповыеСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,");
    Исключение
    КонецПопытки;
    ОбластьМакета.Параметры.ОрганизацияКодПоОКПО = СведенияОбОрганизации.КодПоОКПО;
    ОбластьМакета.Параметры.ПаспортСерия = ДанныеОФизЛице.ДокументСерия;
    ОбластьМакета.Параметры.ПаспортНомер = ДанныеОФизЛице.ДокументНомер;
    ОбластьМакета.Параметры.ПаспортВыдан = ДанныеОФизЛице.ДокументКемВыдан;
    ОбластьМакета.Параметры.ПаспортДатаВыдачи = ДанныеОФизЛице.ДокументДатаВыдачи;
    ОбластьМакета.Параметры.ФамилияИмяОтчествоДоверенного = ФамилияИмяОтчествоДоверенного;
    ОбластьМакета.Параметры.ДолжностьДоверенного = Должность;
    ТабличныйДокумент.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ТабличныйДокумент.Вывести(ОбластьМакета);

    ОбластьМакета = Макет.ПолучитьОбласть("Строка");

    Пока ВыборкаСтрокТовары.Следующий() Цикл

    ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары);
    ОбластьМакета.Параметры.КоличествоПрописью = ?(ВыборкаСтрокТовары.Количество = 0,
    ",
    Строка(ВыборкаСтрокТовары.Количество) + " (" + КоличествоПрописью(ВыборкаСтрокТовары.Количество) + ")");
    ТабличныйДокумент.Вывести(ОбластьМакета);

    КонецЦикла;

    ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
    ОбластьМакета.Параметры.Заполнить(Шапка);

    Если ЗначениеЗаполнено(Руководитель) Тогда
    ОбластьМакета.Параметры.ФИОРуководителя = Руководитель;
    ОбластьМакета.Параметры.Руководитель = Руководитель;
    КонецЕсли;

    Если ЗначениеЗаполнено(Бухгалтер) Тогда
    ОбластьМакета.Параметры.ФИОГлавногоБухгалтера = Бухгалтер;
    ОбластьМакета.Параметры.ГлавныйБухгалтер = Бухгалтер;
    КонецЕсли;

    // Выводим Рисунки
    ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    //

    ТабличныйДокумент.Вывести(ОбластьМакета);

    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ТекущийДокумент);

    КонецЦикла;

    ТабличныйДокумент.АвтоМасштаб = Истина;

    Возврат ТабличныйДокумент;

    КонецФункции // ПечатнаяФорма()

    Функция КоличествоПрописью(Количество)

    ЦелаяЧасть = Цел(Количество);
    ДробнаяЧасть = Окр(Количество - ЦелаяЧасть, 3);

    Если ДробнаяЧасть = Окр(ДробнаяЧасть,0) Тогда
    ПараметрыПрописи = ", , , , , , , , 0";
    ИначеЕсли ДробнаяЧасть = Окр(ДробнаяЧасть, 1) Тогда
    ПараметрыПрописи = "целая, целых, целых, ж, десятая, десятых, десятых, м, 1";
    ИначеЕсли ДробнаяЧасть = Окр(ДробнаяЧасть, 2) Тогда
    ПараметрыПрописи = "целая, целых, целых, ж, сотая, сотых, сотых, м, 2";
    Иначе
    ПараметрыПрописи = "целая, целых, целых, ж, тысячная, тысячных, тысячных, м, 3";
    КонецЕсли;

    Возврат ЧислоПрописью(Количество, ,ПараметрыПрописи);

    КонецФункции // КоличествоПрописью()
```
---
Никаких заморочек там нет. Вам же в 16ом ответе написали. Имя файла задается последним параметром процедуры ВывестиТабличныйДокументВКоллекцию. Вот туда помещайте любую строку, какую хотите сформировать. Строку формируете сами из данных документа уж. На скрине все понятно. Там даже подсказка по параметрам функции вылезает. Я например просто строку туда загнал.
---
Ни пашет этот вариант на бух 3.0.108.31
А вот если в эту же УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию передать в третий по порядку параметр (СинонимМакета) любой текст то файлик и сохранится с именем этого текста
---
// Процедура формирует имя сохраняемого файла путем формирования представления документа и удаления из него символов "точка"
Процедура УстановитьИмяСохраняемогоФайла(ОбъектыПечати, КоллекцияПечатныхФорм, ИмяФайлаПоВходящимНомерам)

 Если НЕ КоллекцияПечатныхФорм.Количество() = 1 Тогда
  Возврат;
 КонецЕсли;

 ПечатнаяФорма = КоллекцияПечатныхФорм[0];
 Если ЗначениеЗаполнено(ПечатнаяФорма.ИмяФайлаПечатнойФормы) Тогда
  // Имя файла уже задано ранее, не меняем его.
  Возврат;
 КонецЕсли;

 ИмяФайлаПечатнойФормы = Новый Соответствие;

 Для Каждого ОбъектПечати Из ОбъектыПечати Цикл

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

  ПредставлениеДокументаДляПечатнойФормы = СтрЗаменить(ПредставлениеДокументаДляПечатнойФормы, ".", "");

  //*** ШО 2023-11-23
  Если ОбъектПечати.Значение.Ссылка.Метаданные().Имя = "АктСверкиВзаиморасчетов" Тогда
       ПредставлениеДокументаДляПечатнойФормы = ОбъектПечати.Значение.Контрагент.Наименование + " " + ПредставлениеДокументаДляПечатнойФормы;
  КонецЕсли;
  //*** шо 2023-11-23

  ИмяФайлаПечатнойФормы.Вставить(ОбъектПечати.Значение, ПредставлениеДокументаДляПечатнойФормы);

 КонецЦикла;

 ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;

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

В БП 83 общий модуль общегоназначенияБП
---
копай дальше, сохранение документа происходит после того, как сформируется табличный документ. Например, в УТ 11.2 при сохранении печатной формы в файл название файла формируется в дебрях общих модулей с принудительной очисткой номера от префикса и нулей (хотя процедуры позволяют изменить поведение через передаваемые параметры, но настраивается это только через изменение этих модулей, увы).
---
Номер документа задается в этой строке
 ОбластьМакета.Параметры.НомерДокумента = уатОбщегоНазначенияТиповые.уатПолучитьНомерНаПечать(ТекущийДокумент);

Дата заполняется скорее всего в строке ОбластьМакета.Параметры.Заполнить(Шапка);, т.е. берется прямо из запроса. Что тут сложного поменять эти значения?
---
(3)
Как заполняются эти данные, (НомерДокумента) и (ДатуДокумента) это понятно.
Сохраненный документ выглядит "Доверенность (М-2)" № (НомерДокумента) от (ДатаДокумента)
А вот где указывается, что Номер и Дата передаются в название документа, с этим не могу разобраться.
---
если речь идет не о тексте в макете, а наименовании файла о котором идет речь. То это не в этой части кода. При сохранении вызывается другой обработчик и в нем формируется название. Можно конечно свое все повызавать, но какой толк в этом.
---
Да, задача получить код, в котором происходит формирование наименования файла.
Вот если в этой строчке

```1c
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность", "Доверенность (М-2)", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, "М2"));
```

Изменить на

```1c
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность", ", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, "М2"));
```

Тогда файл сохранения будет (НомерДокумента) от (ДатаДокумента).pdf
---
как уже сказали название файла генерируется не в модуле п.ф. Знать бы еще как происходит сохранение в файл, и оттуда уже отталкиваться.
---
Я правильно понимаю, что здесь происходит сохранение в файл?
Модуль СохранениеПечатнойФормы

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

    #Если Не ВебКлиент Тогда
    Если ВариантСохранения = "СохранитьВПапку" И ПустаяСтрока(ВыбраннаяПапка) Тогда
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо указать папку.'"),,"ВыбраннаяПапка");
    Возврат;
    КонецЕсли;
    #КонецЕсли

    ФорматыСохранения = Новый Массив;

    Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл
    Если ВыбранныйФормат.Пометка Тогда
    ФорматыСохранения.Добавить(ВыбранныйФормат.Значение);
    КонецЕсли;
    КонецЦикла;

    Если ФорматыСохранения.Количество() = 0 Тогда
    ПоказатьПредупреждение(,НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'"));
    Возврат;
    КонецЕсли;

    РезультатВыбора = Новый Структура;
    РезультатВыбора.Вставить("УпаковатьВАрхив", УпаковатьВАрхив);
    РезультатВыбора.Вставить("ФорматыСохранения", ФорматыСохранения);
    РезультатВыбора.Вставить("ВариантСохранения", ВариантСохранения);
    РезультатВыбора.Вставить("ПапкаДляСохранения", ВыбраннаяПапка);
    РезультатВыбора.Вставить("ОбъектДляПрикрепления", ВыбранныйОбъект);

    ОповеститьОВыборе(РезультатВыбора);

    КонецПроцедуры
```
---
ОповеститьОВыборе Дальше видимо передаётся в ОбработкуВыбора() в модуле формы
---
Я правильно понимаю что данные передаются в ОбработкуВыбора() в этой строке

```1c
    РезультатВыбора.Вставить("ОбъектДляПрикрепления", ВыбранныйОбъект);
```
---
Видимо так. Что там в обработке выбора то?
---
Модуль СохранениеПечатнойФормы

```1c
    #Область ОбработчикиСобытийФормы

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("АвтоТест") Тогда
    Возврат;
    КонецЕсли;

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

    // Заполнение списка выбора для присоединения файлов к объекту.
    Для Каждого ОбъектПечати Из Параметры.ОбъектыПечати Цикл
    Если КОбъектуМожноПрисоединятьФайлы(ОбъектПечати.Значение) Тогда
    Элементы.ВыбранныйОбъект.СписокВыбора.Добавить(ОбъектПечати.Значение);
    КонецЕсли;
    КонецЦикла;

    // Место сохранения по умолчанию.
    ВариантСохранения = "СохранитьВПапку";

    // настройка видимости
    ЭтоВебКлиент = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент();
    ЕстьВозможностьПрисоединения = Элементы.ВыбранныйОбъект.СписокВыбора.Количество() > 0;
    Элементы.ВыборМестаСохраненияФайла.Видимость = Не ЭтоВебКлиент Или ЕстьВозможностьПрисоединения;
    Элементы.ВариантСохранения.Видимость = ЕстьВозможностьПрисоединения;
    Если Не ЕстьВозможностьПрисоединения Тогда
    Элементы.ПапкаДляСохраненияФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
    КонецЕсли;
    Элементы.ПапкаДляСохраненияФайлов.Видимость = Не ЭтоВебКлиент;

    // Объект для присоединения по умолчанию.
    Если ЕстьВозможностьПрисоединения Тогда
    ВыбранныйОбъект = Элементы.ВыбранныйОбъект.СписокВыбора[0].Значение;
    КонецЕсли;
    Элементы.ВыбранныйОбъект.ТолькоПросмотр = Элементы.ВыбранныйОбъект.СписокВыбора.Количество() = 1;

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

    &НаСервере
    Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)

    ФорматыСохраненияИзНастроек = Настройки["ВыбранныеФорматыСохранения"];
    Если ФорматыСохраненияИзНастроек <> Неопределено Тогда
    Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл
    ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение);
    Если ФорматИзНастроек <> Неопределено Тогда
    ВыбранныйФормат.Пометка = ФорматИзНастроек.Пометка;
    КонецЕсли;
    КонецЦикла;
    Настройки.Удалить("ВыбранныеФорматыСохранения");
    КонецЕсли;

    Если Элементы.ВыбранныйОбъект.СписокВыбора.Количество() = 0 Тогда
    НастройкаВариантСохранения = Настройки["ВариантСохранения"];
    Если НастройкаВариантСохранения <> Неопределено Тогда
    Настройки.Удалить("ВариантСохранения");
    КонецЕсли;
    КонецЕсли;

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

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    УстановитьСтраницуМестаСохранения();
    КонецПроцедуры

    #КонецОбласти

    #Область ОбработчикиСобытийЭлементовШапкиФормы

    &НаКлиенте
    Процедура ВариантСохраненияПриИзменении(Элемент)
    УстановитьСтраницуМестаСохранения();
    ОчиститьСообщения();
    КонецПроцедуры

    &НаКлиенте
    Процедура ПапкаДляСохраненияФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ДиалогВыбораПапки = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    Если Не ПустаяСтрока(ВыбраннаяПапка) Тогда
    ДиалогВыбораПапки.Каталог = ВыбраннаяПапка;
    КонецЕсли;
    Если ДиалогВыбораПапки.Выбрать() Тогда
    ВыбраннаяПапка = ДиалогВыбораПапки.Каталог;
    ОчиститьСообщения();
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура ВыбранныйОбъектОчистка(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    КонецПроцедуры

    #КонецОбласти

    #Область ОбработчикиКомандФормы

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

    #Если Не ВебКлиент Тогда
    Если ВариантСохранения = "СохранитьВПапку" И ПустаяСтрока(ВыбраннаяПапка) Тогда
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо указать папку.'"),,"ВыбраннаяПапка");
    Возврат;
    КонецЕсли;
    #КонецЕсли

    ФорматыСохранения = Новый Массив;

    Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл
    Если ВыбранныйФормат.Пометка Тогда
    ФорматыСохранения.Добавить(ВыбранныйФормат.Значение);
    КонецЕсли;
    КонецЦикла;

    Если ФорматыСохранения.Количество() = 0 Тогда
    ПоказатьПредупреждение(,НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'"));
    Возврат;
    КонецЕсли;

    РезультатВыбора = Новый Структура;
    РезультатВыбора.Вставить("УпаковатьВАрхив", УпаковатьВАрхив);
    РезультатВыбора.Вставить("ФорматыСохранения", ФорматыСохранения);
    РезультатВыбора.Вставить("ВариантСохранения", ВариантСохранения);
    РезультатВыбора.Вставить("ПапкаДляСохранения", ВыбраннаяПапка);
    РезультатВыбора.Вставить("ОбъектДляПрикрепления", ВыбранныйОбъект);

    ОповеститьОВыборе(РезультатВыбора);

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

    #КонецОбласти

    #Область СлужебныеПроцедурыИФункции

    &НаКлиенте
    Процедура УстановитьСтраницуМестаСохранения()

    #Если ВебКлиент Тогда
    Элементы.ВыбранныйОбъект.Доступность = ВариантСохранения = "Присоединить";
    #Иначе
    Если ВариантСохранения = "Присоединить" Тогда
    Элементы.ГруппаМестаСохранения.ТекущаяСтраница = Элементы.СтраницаПрисоединениеКОбъекту;
    Иначе
    Элементы.ГруппаМестаСохранения.ТекущаяСтраница = Элементы.СтраницаСохранениеВПапку;
    КонецЕсли;
    #КонецЕсли

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

    &НаСервере
    Функция КОбъектуМожноПрисоединятьФайлы(СсылкаНаОбъект)
    Результат = Неопределено;

    УправлениеПечатью.ПриПроверкеВозможностиПрисоединенияФайловКОбъекту(СсылкаНаОбъект, Результат);

    Если Результат = Неопределено Тогда
    Результат = Ложь;
    КонецЕсли;

    Возврат Результат;
    КонецФункции

    #КонецОбласти
```
---
В процедуре Печать Можно изменить "Доверенность (М-2)" а вот (НомерДокумента) и (ДатуДокумента) не знаю как получить
У тебя идет код:

```1c
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(Шапка);
    ОбластьМакета.Параметры.НомерДокумента = уатОбщегоНазначенияТиповые.уатПолучитьНомерНаПечать(ТекущийДокумент);
```

Теперь открывай макет и смотри какие там параметры в шапке!
---
Просто по-моему название файла формируется в БСП печати и сделать его произвольным без вмешательства в конфигурацию не получится.
---
```1c
    Для верхнего
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность", "Доверенность (М-2)", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, "М2"));
    Для нижнего
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность") Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПараметрыПечати_Доверенность_Доверенность", ", ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, "М2"));
```
---
дата и номер берется из массива объектов. Так что все верно там печается.

```1c
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию
```

Вот там внутри нужно смотреть стек вызовов.
---
```1c
    // Добавляет табличный документ в коллекцию печатных форм.
    //
    // Параметры:
    // КоллекцияПечатныхФорм - ТаблицаЗначений - см. ПодготовитьКоллекциюПечатныхФорм();
    // ИмяМакета - Строка - имя макета;
    // СинонимМакета - Строка - представление макета;
    // ТабличныйДокумент - ТабличныйДокумент - печатная форма документа;
    // Картинка - Картинка;
    // ПолныйПутьКМакету - Строка - путь к макету в дереве метаданных, например:
    // "Документ.СчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ".
    // Если не указывать этот параметр, то редактирование макета пользователем будет
    // недоступно в форме ПечатьДокументов.
    // ИмяФайлаПечатнойФормы - Строка - имя, используемое при сохранении печатной формы в файл;
    // - Соответствие:
    // * Ключ - ЛюбаяСсылка - ссылка на объект печати;
    // * Значение - Строка - имя файла.
    Процедура ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, СинонимМакета, ТабличныйДокумент,
    Картинка = Неопределено, ПолныйПутьКМакету = ", ИмяФайлаПечатнойФормы = Неопределено) Экспорт

    ОписаниеПечатнойФормы = КоллекцияПечатныхФорм.Найти(ВРег(ИмяМакета), "ИмяВРЕГ");
    Если ОписаниеПечатнойФормы <> Неопределено Тогда
    ОписаниеПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент;
    ОписаниеПечатнойФормы.СинонимМакета = СинонимМакета;
    ОписаниеПечатнойФормы.Картинка = Картинка;
    ОписаниеПечатнойФормы.ПолныйПутьКМакету = ПолныйПутьКМакету;
    ОписаниеПечатнойФормы.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;
    КонецЕсли;

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

    // Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм.
    //
    Функция ПодготовитьКоллекциюПечатныхФорм(Знач ИменаМакетов) Экспорт

    Макеты = Новый ТаблицаЗначений;
    Макеты.Колонки.Добавить("ИмяМакета");
    Макеты.Колонки.Добавить("ИмяВРЕГ");
    Макеты.Колонки.Добавить("СинонимМакета");
    Макеты.Колонки.Добавить("ТабличныйДокумент");
    Макеты.Колонки.Добавить("Экземпляров");
    Макеты.Колонки.Добавить("Картинка");
    Макеты.Колонки.Добавить("ПолныйПутьКМакету");
    Макеты.Колонки.Добавить("ИмяФайлаПечатнойФормы");

    Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда
    ИменаМакетов = СтрРазделить(ИменаМакетов, ",");
    КонецЕсли;

    Для Каждого ИмяМакета Из ИменаМакетов Цикл
    Макет = Макеты.Найти(ИмяМакета, "ИмяМакета");
    Если Макет = Неопределено Тогда
    Макет = Макеты.Добавить();
    Макет.ИмяМакета = ИмяМакета;
    Макет.ИмяВРЕГ = ВРег(ИмяМакета);
    Макет.Экземпляров = 1;
    Иначе
    Макет.Экземпляров = Макет.Экземпляров + 1;
    КонецЕсли;
    КонецЦикла;

    Возврат Макеты;

    КонецФункции
```
---
ну вот последним параметром можешь указать имя файла.
---
Немного не понятно, подробнее пожалуйста
Ещё вопрос, эти настройки для сохранения всех ПФ, а не только Доверенностей?
---
Имя ПФ задается в ИмяФайлаПечатнойФормы, как я понимаю, вот в этих строчках

```1c
    Макет.ИмяМакета = ИмяМакета;
    Макет.ИмяВРЕГ = ВРег(ИмяМакета);
```
---
а зачем "курочить" типовой механизм с назначением имени файла?

В таком случае я "позволяю" типовому алгоритму называть файл как она считает нужным.

Потом в своей процедуре получаю этот файл и перемещаю его в том же каталоге где он расположен или в другой с новым именем.

чяднт?
---
(17)
(13)
(12)
(5)
(2)
Т.к. имя документа состоит из следующих частей,
(Имя)(НомерДокумента)от(ДатаДокумента).pdf
можно попробовать заменить данные о (НомерДокумента), чтобы в него выводилась информация о (Сотруднике), а для Сотрудника выводилась информация о НомереДокумента и соответственно переименовать в макете, но это такие костыли, а хотелось бы докопаться и сделать правильно.
---
написал же. Используйте свой код с нуля, будет как вам нужно!
---
А как вы это делаете? Можно поподробнее?
---
Никаких заморочек там нет. Вам же в 16ом ответе написали. Имя файла задается последним параметром процедуры ВывестиТабличныйДокументВКоллекцию. Вот туда помещайте любую строку, какую хотите сформировать. Строку формируете сами из данных документа уж. На скрине все понятно. Там даже подсказка по параметрам функции вылезает. Я например просто строку туда загнал.
---
, Видимо не во всех версия БСП. У меня работает, если в параметр СинонимМакета передать имя файла.
---
На УТ 11.5 сработало в СинонимМакета. Спасибо!
---
Ни пашет этот вариант на бух 3.0.108.31
А вот если в эту же УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию передать в третий по порядку параметр (СинонимМакета) любой текст то файлик и сохранится с именем этого текста
---
// Процедура формирует имя сохраняемого файла путем формирования представления документа и удаления из него символов "точка"
Процедура УстановитьИмяСохраняемогоФайла(ОбъектыПечати, КоллекцияПечатныхФорм, ИмяФайлаПоВходящимНомерам)

 Если НЕ КоллекцияПечатныхФорм.Количество() = 1 Тогда
  Возврат;
 КонецЕсли;

 ПечатнаяФорма = КоллекцияПечатныхФорм[0];
 Если ЗначениеЗаполнено(ПечатнаяФорма.ИмяФайлаПечатнойФормы) Тогда
  // Имя файла уже задано ранее, не меняем его.
  Возврат;
 КонецЕсли;

 ИмяФайлаПечатнойФормы = Новый Соответствие;

 Для Каждого ОбъектПечати Из ОбъектыПечати Цикл

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

  ПредставлениеДокументаДляПечатнойФормы = СтрЗаменить(ПредставлениеДокументаДляПечатнойФормы, ".", "");

  //*** ШО 2023-11-23
  Если ОбъектПечати.Значение.Ссылка.Метаданные().Имя = "АктСверкиВзаиморасчетов" Тогда
       ПредставлениеДокументаДляПечатнойФормы = ОбъектПечати.Значение.Контрагент.Наименование + " " + ПредставлениеДокументаДляПечатнойФормы;
  КонецЕсли;
  //*** шо 2023-11-23

  ИмяФайлаПечатнойФормы.Вставить(ОбъектПечати.Значение, ПредставлениеДокументаДляПечатнойФормы);

 КонецЦикла;

 ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;

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

В БП 83 общий модуль общегоназначенияБП