При работе с отраслевыми решениями на платформе «1С:Предприятие 8» (например, линейками «ДАЛИОН» или «Трактиръ» от разработчика «СофтБаланс») программисты часто сталкиваются с ситуацией, когда невозможно быстро перейти к определению функции или процедуры. Вы нажимаете клавишу F12, но система никак не реагирует, а глобальный поиск выдает только места вызова этой процедуры, но не ее объявление.
В этой статье мы подробно разберем, почему возникает эта проблема, как устроена защита программных модулей в 1С, что такое глобальные общие модули и какими техническими методами можно проанализировать логику работы защищенного программного кода.
Основная причина, по которой Конфигуратор 1С не позволяет «провалиться» в процедуру при нажатии F12, заключается в использовании механизма «Поставки конфигурации без исходных текстов».
При сборке коммерческих тиражных решений разработчики скрывают исходный код ключевых модулей для защиты своей интеллектуальной собственности и предотвращения несанкционированного изменения логики программы (особенно в модулях интеграции с государственными системами, такими как ЕГАИС, «Честный ЗНАК» или «Меркурий»).
Давайте проанализируем, как это работает на уровне платформы:
F12 становится невозможным.Второй важный вопрос, который возникает у разработчиков при анализе подобных строк кода:
СписокПодчиненныхДокументов = ЕГАИС_ИнвентаризацияАлкогольнойПродукцииЗаполнитьСписокПодчиненныхДокументов(ЭтотОбъект, ПараметрыРучныхКорректировок);
Обратите внимание, что в коде вызывается функция ЕГАИС_ИнвентаризацияАлкогольнойПродукцииЗаполнитьСписокПодчиненныхДокументов напрямую, без указания имени какого-либо общего модуля (например, нет конструкции вида ИмяОбщегоМодуля.ИмяПроцедуры). При этом глобальный поиск по конфигурации находит только вызовы данной функции в открытых модулях объектов, но не само её объявление.
Разберем эту ситуацию по шагам:
Функция ЕГАИС_...). А из-за отсутствия префикса модуля в месте вызова визуально невозможно определить, к какому именно общему модулю относится эта функция.Даже если исходный код закрыт, программисту часто требуется понять структуру вызываемой функции, типы передаваемых параметров или возвращаемое значение. Рассмотрим эффективные методы анализа таких модулей.
Для того чтобы узнать точные сигнатуры (имена параметров) закрытых функций, мы можем использовать штатный механизм платформы по выгрузке конфигурации в XML-файлы. Для этого выполним следующие действия:
ЕГАИС_ИнвентаризацияАлкогольнойПродукцииЗаполнитьСписокПодчиненныхДокументов.В результате вы найдете XML-файл описания метаданных закрытого общего модуля. В нем не будет тела самой функции, но платформа сохраняет объявления методов и их параметры, что позволит вам увидеть точную структуру сигнатуры функции.
Давайте выясним, как ведет себя закрытый модуль при замере производительности и отладке в платформе 1С:
Поскольку напрямую отредактировать код в закрытом модуле невозможно, для решения практических задач разработчики используют механизмы кастомизации без изменения типового кода поставщика:
&Перед, &После или &Вместо для перехвата вызова защищенного метода. Даже если исходный код метода закрыт, платформа позволяет переопределять его вызовы через механизмы расширений, если метод является экспортным.