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

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

Зачастую перед разработчиками встает задача автоматизировать процесс сохранения отчетов. Стандартная кнопка «Сохранить как» в 1С работает на уровне платформы и не предоставляет встроенных механизмов для подстановки пользовательского имени файла по шаблону, например: Работы_НазваниеКлиента_Период. В данной статье мы разберем, как реализовать этот функционал в расширении конфигурации для 1С:УНФ.

Почему не работает стандартный механизм?

Стандартный диалог сохранения файлов в управляемых формах 1С является вызовом системного диалога операционной системы. Платформа 1С:Предприятие не предоставляет «крючков» или событий (hooks), позволяющих перехватить нажатие кнопки «Сохранить» в стандартном меню отчета и изменить передаваемое имя файла «на лету». Поэтому попытки найти настройки в процедурах БСП обычно не приводят к результату — этот механизм просто не предназначен для модификации имен файлов пользовательских отчетов.

Решение: создание собственной кнопки сохранения

Единственный надежный способ контролировать имя сохраняемого файла — это создание собственной команды (кнопки) на форме отчета, расположенной в расширении. Рассмотрим пошаговый план реализации.

  1. Добавление команды на форму: В расширении конфигурации откройте форму отчета и добавьте новую кнопку в командную панель.
  2. Подготовка табличного документа: Убедитесь, что ваш отчет формируется в объект ТабличныйДокумент.
  3. Формирование имени файла: Программно сформируйте строку имени, используя данные из параметров отчета или полей формы.
  4. Использование диалога выбора файла: Вызовите системный объект ДиалогВыбораФайла для получения пути сохранения, заранее подставив туда сформированное имя.
  5. Запись файла: Используйте метод Записать() объекта ТабличныйДокумент.

Разбор процесса на примере кода

Рассмотрим, как реализовать этот процесс программно. Сначала нам нужно получить доступ к данным отчета, а затем инициировать процедуру сохранения.


// Пример обработчика команды сохранения
&НаКлиенте
Процедура СохранитьОтчетПоШаблону(Команда)
    // 1. Формируем имя файла
    НазваниеКлиента = Объект.Клиент.Наименование;
    Период = Формат(Объект.ДатаНачала, "ДФ=dd.MM.yyyy");
    ИмяФайла = "Работы_" + НазваниеКлиента + "_" + Период;
    
    // 2. Очистка от запрещенных символов (важно для файловой системы)
    ИмяФайла = СтрЗаменить(ИмяФайла, "/", "_");
    ИмяФайла = СтрЗаменить(ИмяФайла, ":", "_");
    
    // 3. Вызываем диалог выбора
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок = "Выберите место для сохранения отчета";
    Диалог.ПолноеИмяФайла = ИмяФайла + ".xlsx"; // Или другой формат
    Диалог.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx";
    
    Если Диалог.Выбрать() Тогда
        // 4. Запись табличного документа
        РезультатТабДок = ПолучитьРезультатОтчета(); // Ваша функция формирования
        РезультатТабДок.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    КонецЕсли;
КонецПроцедуры

Важные рекомендации по реализации

При работе с файловой системой крайне важно учитывать следующие аспекты:

Очистка имен: Файловая система Windows (и других ОС) не поддерживает определенные символы в именах файлов (/ \ : * ? " < > |). Всегда используйте функцию-обертку, которая заменяет эти символы на подчеркивание или пробел, иначе пользователь столкнется с ошибкой при попытке записи.

Объект ТабличныйДокумент: Помните, что свойство ТабличныйДокумент.ИмяФайла может быть задано программно, но при вызове метода Записать() лучше всегда явно передавать путь, полученный из ДиалогВыбораФайла. Это гарантирует, что файл попадет именно туда, куда указал пользователь.

Интеграция с БСП: Если ваш отчет использует типовые механизмы БСП для вывода (например, подсистему «Варианты отчетов»), вы можете вызывать стандартные методы формирования ТабличныйДокумент внутри вашего обработчика, просто подменяя финальный этап вывода на экран процессом сохранения с собственным именем.

Данный подход является «золотым стандартом» при разработке в расширениях, так как он не затрагивает типовой код конфигурации, минимизирует риски при обновлении и предоставляет полный контроль над пользовательским интерфейсом.

← На главную