Почему процедура вызывается в коде 1С, но её невозможно найти в конфигурации?

Программист 1С v8.3 (Обычные формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

В процессе разработки или доработки типовых и отраслевых конфигураций 1С на обычных формах программисты часто сталкиваются с загадочной ситуацией: в коде присутствует явный вызов процедуры, например, ПолучитьЦеныНоменклатурыПоАкции, глобальный поиск по конфигурации находит десятки мест её использования, но при попытке перейти к определению (клавиша F12) или найти само тело процедуры поиск не дает результатов. Давайте вместе разберем, почему так происходит, куда исчезает программный код и как работать в подобных условиях.

Выясним причину: феномен «пустого модуля»

Проанализируем типичную ситуацию. Вы открываете общий модуль, в котором, судя по логике, должна находиться искомая процедура, но вместо строк кода видите пустое окно или лаконичный комментарий: «Модуль не содержит исходного текста». Это не ошибка платформы и не сбой конфигурации. Мы имеем дело с закрытым (защищенным) модулем.

Рассмотрим, почему это реализовано именно так. Разработчики отраслевых решений (например, компании «1С-Рарус» или «IT-Trend») защищают свои интеллектуальные наработки. При сборке дистрибутива конфигурации для конечного пользователя применяется процедура удаления исходного кода. Платформа 1С сохраняет возможность исполнять этот код (так как внутри остается скомпилированный байт-код), но прочитать его человеческим глазом в конфигураторе невозможно.

Где чаще всего встречаются скрытые процедуры

Посмотрим на примеры конфигураций, где скрытие логики является стандартом поставки. Чаще всего это решения на базе «1С:Розница 8», такие как:

В этих программах сложные механизмы, такие как расчет маркетинговых акций, бонусных баллов или специфика учета лекарственных средств, выносятся в модули типа МенеджерОтраслевыхРешений или специальные защищенные общие модули. Искомая вами процедура ПолучитьЦеныНоменклатурыПоАкции — классический пример функции, логика которой скрыта в «коробочном» решении для обеспечения лицензионного контроля.

Разберем механизмы защиты: СЛК и байт-код

Проанализируем техническую сторону вопроса. Существует два основных способа, которыми разработчики скрывают код:

  1. Поставка без исходных кодов. При создании файла поставки (.cf или .cfu) снимается галочка «Исходный текст». В результате в конфигурации остаются только заголовки экспортных процедур и функций, чтобы другие части системы могли к ним обращаться, но само «тело» отсутствует.
  2. Система логического контроля (СЛК). В этом случае часть кода вообще не находится в модулях 1С. Она вынесена во внешние компоненты (файлы .dll), которые подключаются динамически. Процедура в 1С выступает лишь «оберткой», которая передает параметры внешней библиотеке. Именно поэтому при отсутствии ключа защиты или лицензии такие процедуры могут выдавать ошибку или возвращать пустые значения.

Как работать с кодом, если он закрыт?

Поскольку мы не можем прочитать алгоритм напрямую, нам необходимо использовать методы «черного ящика». Рассмотрим по шагам, как понять, что делает процедура ПолучитьЦеныНоменклатурыПоАкции, не видя её текста.

Шаг 1: Анализ входных и выходных данных через отладчик.

Посмотрим на типичный вызов процедуры:


ПолучитьЦеныНоменклатурыПоАкции(МенеджерВременныхТаблиц, "ТаблицаТоваров", ПараметрыРасчета);

Для понимания логики нам нужно поставить точку останова ДО вызова процедуры и ПОСЛЕ него. Воспользуемся табло отладчика:

Шаг 2: Использование замера производительности.

Запустите «Замер производительности» в конфигураторе и выполните действие в пользовательском режиме, которое вызывает скрытую процедуру. В отчете замера вы увидите строку с вашей процедурой. Хотя войти в неё не получится, вы сможете увидеть:

Шаг 3: Изучение документации и макетов.

Часто в отраслевых конфигурациях логика закрытых модулей опирается на настройки, хранящиеся в справочниках или макетах. Посмотрите справочники «Скидки (наценки)», «Маркетинговые акции» или настройки параметров учета. Логика кода обычно строго следует этим настройкам.

Можно ли восстановить закрытый код?

Выясним правовой и технический аспекты этого вопроса. Существуют инструменты для декомпиляции байт-кода 1С, однако мы крайне не рекомендуем их использовать по следующим причинам:

Подведем итоги

Если вы столкнулись с процедурой, которой «нигде нет», — это признак профессионального отраслевого решения с механизмами защиты. Не пытайтесь найти её текст в конфигураторе. Вместо этого сосредоточьтесь на анализе изменения данных в отладчике. Понимание того, что приходит «на вход» и что получается «на выходе», в 90% случаев достаточно для успешной интеграции или поиска ошибок в работе системы.

← На главную