Как узнать список объектов, к которым обращается расширение с закрытым кодом?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Метод 1. Анализ состава расширения через Конфигуратор

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

Обратим внимание на следующие моменты:

  1. Заимствованные объекты: Все объекты основной конфигурации, которые были добавлены в расширение (они отмечены серыми иконками), — это и есть те объекты, с которыми расширение взаимодействует напрямую (читает, изменяет или использует в запросах).
  2. Собственные объекты: Проверим ветки справочников, документов и регистров, которые созданы непосредственно в расширении. К ним пользователю точно понадобятся права.
  3. Роли: Посмотрим состав ролей, включенных в расширение. Часто поставщики уже закладывают необходимые права в свои роли, которые достаточно назначить пользователю.

Метод 2. Использование системного события «Доступ» в Журнале регистрации

В платформе 1С существует мощный инструмент аудита, который по умолчанию выключен. Выясним причину, по которой нам стоит его включить: событие _$Access$_ фиксирует не только ошибки, но и каждое успешное чтение данных. Это позволяет получить полный список объектов, к которым обращался сеанс.

Для активации этого механизма воспользуемся программным кодом:


УстановитьИспользованиеСобытияЖурналаРегистрации("_$Access$_", Истина);
// После этого необходимо выполнить действия в расширении под полными правами
// И не забыть выключить фиксацию, чтобы не перегружать ЖР
УстановитьИспользованиеСобытияЖурналаРегистрации("_$Access$_", Ложь);

После "прокликивания" функций расширения откроем Журнал регистрации и установим отбор по событию "Доступ". Мы увидим детальный отчет со ссылками на все объекты, которые были прочитаны или изменены.

Метод 3. Технологический журнал и SDBL-запросы

Если нам требуется еще более глубокий анализ, рассмотрим подробнее возможности Технологического журнала (ТЖ). Настроив сбор событий SDBL (Simple DataBase Language), мы сможем увидеть все запросы, которые платформа отправляет к базе данных.

В логах ТЖ будут фигурировать имена таблиц в формате SQL (например, _Reference10). Чтобы сопоставить их с привычными нам объектами 1С, воспользуемся методом:


СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
// Проанализируем полученную таблицу, чтобы найти соответствие имен SQL и метаданных

Также полезно отслеживать событие SCALL, которое показывает серверные вызовы. Даже в закрытом коде имена вызываемых методов часто дают понять, с каким функционалом идет работа.

Метод 4. Замер производительности

Посмотрим на пример использования штатного инструмента «Замер производительности». Запустим замер в Конфигураторе и выполним основные операции в пользовательском режиме. Несмотря на то что текст модулей нам недоступен, в окне замера отобразятся строки с именами объектов и экспортных процедур/функций. Это отличный способ быстро понять «круг интересов» закрытого расширения.

Метод 5. Мониторинг на уровне СУБД

В самых сложных случаях мы можем прибегнуть к помощи SQL Server Profiler (для MS SQL) или аналогичных инструментов для PostgreSQL. Профильтровав трассировку по имени базы данных и конкретному пользователю, мы получим список всех таблиц, к которым выполнялись запросы SELECT, INSERT или UPDATE. Это дает 100% гарантию обнаружения всех задействованных данных, хотя и требует навыков сопоставления имен таблиц СУБД с метаданными 1С.

Метод 6. Минимальные права и анализ ошибок

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

← На главную