Часто при внедрении сторонних решений от поставщиков мы сталкиваемся с расширениями, программный код которых закрыт паролем или поставляется в скомпилированном виде. Основная сложность здесь заключается в настройке прав доступа: непонятно, к каким именно справочникам, документам или регистрам обращается расширение в процессе работы. Разберем по шагам эффективные методы, которые помогут нам составить полный список необходимых объектов метаданных.
Прежде чем переходить к сложным техническим средствам, проанализируем ситуацию простым осмотром. Даже если модули расширения закрыты, структура его метаданных остается видимой. Откроем список расширений в Конфигураторе и развернем дерево объектов интересующего нас расширения.
Обратим внимание на следующие моменты:
В платформе 1С существует мощный инструмент аудита, который по умолчанию выключен. Выясним причину, по которой нам стоит его включить: событие _$Access$_ фиксирует не только ошибки, но и каждое успешное чтение данных. Это позволяет получить полный список объектов, к которым обращался сеанс.
Для активации этого механизма воспользуемся программным кодом:
УстановитьИспользованиеСобытияЖурналаРегистрации("_$Access$_", Истина);
// После этого необходимо выполнить действия в расширении под полными правами
// И не забыть выключить фиксацию, чтобы не перегружать ЖР
УстановитьИспользованиеСобытияЖурналаРегистрации("_$Access$_", Ложь);
После "прокликивания" функций расширения откроем Журнал регистрации и установим отбор по событию "Доступ". Мы увидим детальный отчет со ссылками на все объекты, которые были прочитаны или изменены.
Если нам требуется еще более глубокий анализ, рассмотрим подробнее возможности Технологического журнала (ТЖ). Настроив сбор событий SDBL (Simple DataBase Language), мы сможем увидеть все запросы, которые платформа отправляет к базе данных.
В логах ТЖ будут фигурировать имена таблиц в формате SQL (например, _Reference10). Чтобы сопоставить их с привычными нам объектами 1С, воспользуемся методом:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
// Проанализируем полученную таблицу, чтобы найти соответствие имен SQL и метаданных
Также полезно отслеживать событие SCALL, которое показывает серверные вызовы. Даже в закрытом коде имена вызываемых методов часто дают понять, с каким функционалом идет работа.
Посмотрим на пример использования штатного инструмента «Замер производительности». Запустим замер в Конфигураторе и выполним основные операции в пользовательском режиме. Несмотря на то что текст модулей нам недоступен, в окне замера отобразятся строки с именами объектов и экспортных процедур/функций. Это отличный способ быстро понять «круг интересов» закрытого расширения.
В самых сложных случаях мы можем прибегнуть к помощи SQL Server Profiler (для MS SQL) или аналогичных инструментов для PostgreSQL. Профильтровав трассировку по имени базы данных и конкретному пользователю, мы получим список всех таблиц, к которым выполнялись запросы SELECT, INSERT или UPDATE. Это дает 100% гарантию обнаружения всех задействованных данных, хотя и требует навыков сопоставления имен таблиц СУБД с метаданными 1С.
Самый простой, но трудоемкий способ — запустить программу под пользователем с минимальными правами и последовательно устранять возникающие ошибки. Проанализируем ситуацию: в Журнале регистрации будут фиксироваться отказы в доступе. Однако помните, что этот процесс может быть итерационным, так как выполнение кода часто прерывается на первой же ошибке прав доступа.