В процессе доработки или анализа конфигурации 1С разработчики часто сталкиваются с ситуацией: есть макет печатной формы, например, ПФ_MXL_УниверсальныйКорректировочныйДокумент982, но стандартный глобальный поиск по этому имени в конфигураторе не находит ни одного места его использования. Это может поставить в тупик, особенно если нужно внести изменения в логику формирования печатной формы. Давайте разберем, почему так происходит и какие существуют способы найти нужный код.
Основная причина, по которой поиск не срабатывает, — динамическое формирование имени макета. В коде имя может собираться из нескольких частей, например, из префикса, названия документа и какого-либо суффикса (версии, кода формы). В таких случаях прямой поиск по полной строке бесполезен. Рассмотрим несколько эффективных методов, которые помогут нам отследить вызов нужного макета.
Самый простой и быстрый способ начать расследование — это предположить, что имя макета собирается из частей. Проанализируем наше имя ПФ_MXL_УниверсальныйКорректировочныйДокумент982. Явно выделяются смысловые блоки.
Ctrl+Shift+F) по наиболее уникальной части имени, например, УниверсальныйКорректировочныйДокумент. Велика вероятность, что мы найдем строки кода, где эта часть используется для конструирования полного имени макета.ПолучитьМакет(). Мы можем выполнить глобальный поиск по этой строке. Результатов будет много, но просматривая их в контексте нужного нам документа или обработки, можно быстро найти место, где имя макета передается в эту функцию в виде переменной.Этот метод хорошо работает, когда логика формирования имени не слишком сложна и части имени присутствуют в коде в явном виде.
Это один из самых надежных, хотя и "силовых" методов. Его суть — заставить программу "споткнуться" именно в тот момент, когда она обращается к нашему макету. Разберем по шагам, как это сделать.
=ААА. Или просто вписать в текстовую ячейку какой-нибудь некорректный символ. Главное — чтобы при попытке обработать макет система гарантированно выдала ошибку.Этот метод практически всегда дает стопроцентный результат, если макет действительно используется в системе.
Этот элегантный способ основан на том, как программа работает с макетом. Любой табличный макет состоит из именованных областей (например, "Шапка", "Строка", "Подвал"). Процедура печати не просто получает макет целиком, она обращается к его областям по имени, чтобы заполнить их данными.
ШапкаДокумента, СтрокаТовары, ИтогиНДС.Ctrl+Shift+F) по этим именам областей. В коде мы найдем строки вида:
ОбластьШапка = Макет.ПолучитьОбласть("ШапкаДокумента");
// ...
ТабДокумент.Вывести(ОбластьШапка);
Такой поиск с очень высокой вероятностью приведет нас прямо в процедуру формирования печатной формы, так как обращение к областям — неотъемлемая часть работы с макетом. Этот метод особенно хорош, когда имя самого макета формируется очень сложно, а имена областей остаются статичными.
Современные конфигурации, особенно отраслевые (как "Ювелирный торговый дом", основанный на "Рознице"), используют Библиотеку стандартных подсистем (БСП). В БСП механизмы печати унифицированы и вынесены в общие модули.
В этом случае логику печати нужно искать не в форме документа, а в его модуле менеджера. Именно там происходит "регистрация" печатных форм, которые будут доступны пользователю по кнопке "Печать".
ДобавитьКомандыПечати. Именно она отвечает за формирование списка доступных печатных форм.УправлениеПечатью. Проанализировав параметры, передаваемые в эти функции, вы найдете идентификатор печатной формы и имя макета, которое ей соответствует.Этот подход требует понимания архитектуры БСП, но позволяет быстро находить нужные места в типовых и основанных на них конфигурациях.
Если ни один из перечисленных методов не дал результата, стоит рассмотреть гипотезу, что макет не используется. В процессе разработки часто создаются копии макетов для экспериментов, сохраняются старые версии (например, `...981` — старая форма, а `...982` — новая, которая так и не была внедрена). Такой "мусор" может оставаться в конфигурации годами.
В этом случае ваша задача меняется: нужно не найти, где используется именно этот макет, а понять, какой макет используется вместо него. Поищите макеты с похожими именами (например, поиском по `УниверсальныйКорректировочныйДокумент`). Возможно, вы найдете актуальную версию и сможете внести изменения уже в нее или использовать ее как основу для вашей задачи.