Как перехватить или переопределить команду «Файл — Сохранить как» для печатной формы в 1С?

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

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

Архитектурное ограничение платформы: почему нет обработчика события

Проанализируем работу системного меню платформы. Команда Файл — Сохранить как... (а также стандартная дискета на панели инструментов) реализована на уровне ядра платформы (C++). Во встроенном языке 1С отсутствует событие уровня формы или табличного документа (такое как ПередСохранениемФайла), которое вызывалось бы при клике на этот штатный пункт.

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

Решение 1. Создание собственной кнопки сохранения с использованием ДиалогВыбораФайла и метода Записать

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

Разберем по шагам реализацию обработчика сохранения табличного документа:

  1. Создаем диалог выбора файла с помощью объекта ДиалогВыбораФайла, указав режим сохранения.
  2. Задаем фильтр доступных форматов и имя файла по умолчанию.
  3. Вызываем метод Записать() у объекта ТабличныйДокумент.

Посмотрим на пример программного кода для обычной формы печати:


Процедура ДействияФормыСохранитьКак(Кнопка)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.Заголовок = "Выберите файл для сохранения печатной формы";
	Диалог.ПолноеИмяФайла = "ПечатнаяФорма_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd");
	Диалог.Фильтр = "Лист Excel (*.xlsx)|*.xlsx|Документ PDF (*.pdf)|*.pdf|Табличный документ (*.mxl)|*.mxl";
	
	Если Диалог.Выбрать() Тогда
		
		// Определяем тип файла по расширению
		Расширение = Врег(Прав(Диалог.ПолноеИмяФайла, 4));
		
		Если Расширение = "XLSX" Тогда
			ТипФайла = ТипФайлаТабличногоДокумента.XLSX;
		ИначеЕсли Расширение = ".PDF" Тогда
			ТипФайла = ТипФайлаТабличногоДокумента.PDF;
		Иначе
			ТипФайла = ТипФайлаТабличногоДокумента.MXL;
		КонецЕсли;
		
		Попытка
			ЭлементыФормы.ПолеТабличногоДокумента.Записать(Диалог.ПолноеИмяФайла, ТипФайла);
			ОповеститьПользователя("Файл успешно сохранен: " + Диалог.ПолноеИмяФайла);
		Исключение
			Предупреждение("Ошибка при сохранении файла: " + ОписаниеОшибки());
		КонецПопытки;
		
	КонецЕсли;

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

Решение 2. Переопределение горячих клавиш сохранения

Пользователи часто используют комбинации клавиш Ctrl+S или Ctrl+Shift+S вместо использования меню. Чтобы перенаправить эти действия на свой обработчик, выполним следующую настройку:

  1. Добавляем на форму кнопку или команду.
  2. В свойствах элемента в поле СочетаниеКлавиш назначаем нужную комбинацию (например, Ctrl+S).
  3. В обработчик нажатия кнопки помещаем процедуру собственного сохранения.

В этом случае платформа при нажатии горячих клавиш передаст управление коду 1С, переопределяя системное платформенное действие.

Решение 3. Блокировка штатного сохранения через свойства ТабличногоДокумента и права

Если задача заключается в том, чтобы запретить неконтролируемое сохранение печатной формы через системное меню, рассмотрим встроенные инструменты защиты:

  1. Свойство ИспользованиеВывода: при формировании табличного документа программно устанавливаем: ТабличныйДокумент.ИспользованиеВывода = ИспользованиеВывода.Запретить; Это полностью отключает в главном меню платформы команды сохранения, печати и копирования данных в буфер обмена для данного документа.
  2. Свойство Защита: установка ТабличныйДокумент.Защита = Истина блокирует выделение и редактирование ячеек.
  3. Ролевая модель: снятие права Вывод у конкретной роли пользователя отключает возможность экспорта и печати любых табличных документов на уровне прав доступа.

Решение 4. Использование подсистемы печати БСП

В современных конфигурациях на управляемых формах для унификации работы с печатными формами используется подсистема печати Библиотеки стандартных подсистем (БСП). В ней вывод осуществляется в специализированную форму управления печатью, где штатные команды платформы заменены командами общего модуля УправлениеПечатьюКлиент. Это позволяет централизованно управлять форматами экспорта, именами файлов и отправкой документов по электронной почте.

← На главную