Как программно узнать имя внешней печатной формы в 1С?

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

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

Понимание архитектуры хранения

Важно уяснить, что при загрузке файла .epf в справочник конфигурации, платформа извлекает из него двоичные данные. Исходное имя файла на компьютере разработчика при этом теряется, так как оно не является свойством объекта метаданных. База данных оперирует уже «внутренним» представлением обработки. Поэтому попытки найти реквизит с именем файла в типовых справочниках, как правило, не приводят к успеху.

Способы получения файла для редактирования

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

  1. Выгрузка через временный файл: Если вы хотите получить исходный файл .epf, проще всего распечатать документ из этой формы. В этот момент платформа формирует временный файл. Перейдите в каталог временных файлов пользователя, найдите файл с расширением .tmp (например, PrnForm.tmp), скопируйте его и измените расширение на .epf. Этот файл можно смело открывать в Конфигураторе.
  2. Извлечение из ХранилищаЗначения: Если вы пишете обработку для администрирования, вы можете программно считать данные из реквизита типа ХранилищеЗначения справочника и записать их в файл методом Записать() объекта ДвоичныеДанные.

Как программно определить имя и свойства обработки

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

Рассмотрим метод использования свойств Метаданные. При создании объекта внешней обработки, мы можем обратиться к его метаданным:


// Создаем объект обработки из хранилища или файла
ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяФайла);
// Получаем внутреннее имя метаданных
Сообщить("Имя обработки: " + ОбработкаОбъект.Метаданные().Имя);

Также, если мы находимся внутри модуля формы самой внешней обработки, мы можем использовать свойство ИмяФормы. Оно всегда содержит строку вида ВнешняяОбработка.ИмяЭтойОбработки.Форма.Форма. Разберем способ получения имени через парсинг этой строки:


// Получаем имя обработки без серверного вызова
ИмяОбработки = СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];
Сообщить("Имя текущей внешней обработки: " + ИмяОбработки);

Использование синонима обработки

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


ОбъектВЗначение = РеквизитФормыВЗначение("Объект");
ТипОбработкиСтрокой = Строка(ТипЗнч(ОбъектВЗначение));
СинонимОбработки = Прав(ТипОбработкиСтрокой, СтрДлина(ТипОбработкиСтрокой) - СтрНайти(ТипОбработкиСтрокой, ":") - 1);
Сообщить("Синоним: " + СинонимОбработки);

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

Мы проанализировали ситуацию и рекомендуем вам не привязываться к именам файлов на диске. Имя файла — это субъективный фактор, который зависит от пользователя или разработчика. В профессиональной разработке 1С мы ориентируемся на:

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

← На главную