В практике программиста 1С часто встречается ситуация, когда в коде конфигурации или другой обработки обнаруживается обращение к макету через менеджер внешних обработок. Например, строка кода выглядит так: ВнешниеОбработки.СчетФактураВыданный1137.СчетФактура1137. На первый взгляд кажется, что макет находится где-то внутри конфигурации, но на самом деле он скрыт во внешнем объекте. Если в базе зарегистрированы сотни дополнительных отчетов и обработок, найти нужную «вручную» становится настоящей проблемой. В этой статье мы подробно разберем, как локализовать источник макета и быстро найти нужный файл.
Прежде всего, разберем, как работает платформа. Когда мы видим обращение ВнешниеОбработки.ИмяОбъекта, это означает, что 1С пытается обратиться к объекту, который был программно подключен к сеансу. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), внешние печатные формы хранятся в справочнике ДополнительныеОтчетыИОбработки в виде двоичных данных.
Важно понимать разницу: Наименование в справочнике — это то, что видит пользователь, а Имя объекта — это программный идентификатор, который прописывается внутри самой обработки в функции СведенияОВнешнейОбработке(). Именно этот идентификатор используется в коде, и именно по нему мы будем вести поиск.
Если в справочнике сотни записей, поиск через стандартный интерфейс может быть затруднен, так как поле «Имя объекта» часто скрыто. Проанализируем ситуацию с помощью простого запроса. Это позволит нам мгновенно найти ссылку на элемент справочника, содержащий нужный макет.
Откроем консоль запросов и выполним следующий код:
ВЫБРАТЬ
ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка,
ДополнительныеОтчетыИОбработки.Наименование КАК Наименование,
ДополнительныеОтчетыИОбработки.ИмяОбъекта КАК ИмяОбъекта,
ДополнительныеОтчетыИОбработки.Вид КАК Вид
ИЗ
Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
ГДЕ
ДополнительныеОтчетыИОбработки.ИмяОбъекта ПОДОБНО "%СчетФактураВыданный1137%"
Рассмотрим подробнее, что нам даст этот запрос. Мы получим прямую ссылку на элемент. После этого мы можем открыть карточку обработки, нажать кнопку «Выгрузить в файл», сохранить .epf файл на диск и открыть его в конфигураторе. Там, в ветке «Макеты», вы и обнаружите искомый макет СчетФактура1137.
Иногда внешние обработки хранятся не в базе данных, а в виде отдельных файлов в сетевых каталогах или локальных папках разработчиков. Если запрос к справочнику не дал результатов, воспользуемся методом выгрузки и глобального поиска.
ДополнительныеОтчетыИОбработки в одну папку на диске.Ctrl+Shift+F).СчетФактура1137.Этот метод гарантированно найдет вхождение строки в бинарном файле или его текстовом представлении, если обработка была сохранена как набор файлов.
Выясним причину, по которой макет трудно найти: платформа при запуске внешней печати извлекает файл из хранилища значений и помещает его во временный каталог пользователя. Мы можем перехватить этот момент.
Разберем по шагам процесс отладки:
ПолныйПутьКМакету.Shift+F9).ВнешняяОбработка, мы можем посмотреть его свойства. Часто там можно увидеть путь к временному файлу в папке %AppData%\Local\Temp\v8_XXXX.epf.Скопируйте этот файл, пока сеанс 1С не закрыт (после закрытия временные файлы удаляются!), и откройте его для анализа макета.
Если поиск во внешних обработках не принес успеха, проанализируем современные механизмы подмены макетов. В 1С существуют две важные области, которые могут динамически подменять стандартную печатную форму:
1. Расширения конфигурации: Проверьте список установленных расширений. Программист мог заимствовать макет в расширение и изменить его там. В этом случае программный путь в коде может остаться прежним, но платформа приоритетно выберет макет из расширения.
2. Отредактированные макеты: В разделе «Администрирование» — «Печатные формы, отчеты и обработки» — «Макеты печатных форм» система позволяет пользователям редактировать макеты без изменения кода. Посмотрите, нет ли в списке макета с пометкой «Используется измененный макет». Несмотря на то что ваш код явно ссылается на внешнюю обработку, логика формирования печатной формы в БСП может перехватывать управление и подставлять отредактированный пользователем вариант.
Мы рассмотрели несколько эффективных способов поиска «потерянного» макета. Помните, что в 90% случаев при работе с внешними печатными формами ключом к разгадке является реквизит ИмяОбъекта в справочнике дополнительных обработок. Использование консоли запросов — самый надежный и быстрый способ связать программный код с физическими данными в базе.