Как найти исходный код и формы в 1С, если они не отображаются в конфигураторе?

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

Разработка и поддержка сложных, сильно доработанных конфигураций 1С часто преподносит сюрпризы: мы видим кнопку в интерфейсе, нажимаем на неё, открывается форма с логикой, но при попытке найти эту форму в Конфигураторе мы терпим неудачу. Это типичная ситуация для систем, где активно используются механизмы расширений, динамического создания интерфейса или внешних обработок. Разберем по шагам, как локализовать «невидимый» код и понять, что происходит при нажатии кнопки.

Метод 1: Использование замера производительности

Проанализируем самый эффективный способ, который помог автору вопроса. Замер производительности — это инструмент, который фиксирует выполнение каждой строки кода в реальном времени. Если вы не можете найти код поиском, заставьте платформу саму показать, какие модули она исполняет.

Рассмотрим алгоритм действий:

  1. Откроем 1С:Предприятие и подготовим документ, в котором находится нужная кнопка.
  2. Перейдем в Конфигуратор и включим замер производительности через меню Отладка — Замер производительности.
  3. Вернемся в режим пользователя и нажмем на злополучную кнопку. Дождемся открытия модального окна и выполним в нем какое-нибудь действие.
  4. Снова перейдем в Конфигуратор и выключим замер.

После этого откроется таблица со списком всех выполненных процедур и функций. Отсортируем их по количеству вызовов или по времени выполнения. Нам нужно искать вызовы методов ОткрытьФорму() или ОткрытьМодально(). Как правило, в колонке «Исходный текст» будет четко указано имя объекта и модуля. В ситуации автора именно этот метод позволил обнаружить, что форма принадлежит не документу, а внешней обработке.

Метод 2: Анализ программного создания элементов

Выясним причину, почему кнопки нет на форме в Конфигураторе. Часто разработчики добавляют элементы управления динамически, чтобы не загромождать типовые формы или обходить ограничения поддержки. Проанализируем модуль формы документа, обратив внимание на обработчик ПриСозданииНаСервере.

Посмотрим на пример кода, который может создавать «невидимую» кнопку:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Динамическое создание команды
    НоваяКоманда = Команды.Добавить("СпецДействие");
    НоваяКоманда.Действие = "Подключаемый_ВыполнитьСпецДействие";
    НоваяКоманда.Заголовок = "Выполнить логику";
    
    // Добавление кнопки на командную панель
    НовыйЭлемент = Элементы.Добавить("КнопкаСпецДействие", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
    НовыйЭлемент.ИмяКоманды = "СпецДействие";
КонецПроцедуры

Если мы видим подобный код, нам достаточно найти процедуру Подключаемый_ВыполнитьСпецДействие (в данном примере), чтобы понять, какая логика запускается.

Метод 3: Стек вызовов и принудительная остановка

Рассмотрим ситуацию, когда мы не знаем, где поставить точку останова. Проанализируем метод «быстрой руки», предложенный опытными разработчиками. В меню Отладка есть пункт Остановить. Попробуем следующий трюк:

  1. Нажимаем кнопку в интерфейсе пользователя.
  2. Пока система «думает» или пока открыто модальное окно, мгновенно переключаемся в Конфигуратор и нажимаем Остановить.
  3. Если нам повезет, выполнение прервется именно в тот момент, когда работает нужный нам код.
  4. Теперь откроем Стек вызовов (Ctrl + Alt + C).

Стек вызовов покажет нам всю цепочку — от самой нижней процедуры до того места, где выполнение находится сейчас. Это позволяет проследить путь «вглубь» кода, даже если он проходит через десятки общих модулей или расширений.

Метод 4: Поиск через идентификаторы и расширения

Выясним, не спрятан ли код в Расширениях конфигурации. Современные стандарты разработки предполагают использование расширений для доработки типовых решений. Если вы ищете код в основной конфигурации, а кнопка добавлена в расширении, глобальный поиск по умолчанию может её не найти.

Рассмотрим, на что обратить внимание:

Метод 5: Использование консоли кода для определения имени формы

Если форма уже открыта на экране, но мы не понимаем, что это за объект, мы можем программно спросить у системы имя этого объекта. Разберем, как это сделать через «Вычислить выражение» в режиме отладки или через консоль разработчика.

Если у нас есть доступ к контексту формы, выполним команду:

ЭтаФорма.ИмяФормы

Результат может выглядеть так: ВнешняяОбработка.ЗагрузкаДанныхИзExcel.Форма.ФормаНастройки. Это сразу снимет все вопросы о местонахождении объекта. Если пункт «Открыть в конфигураторе» неактивен, это верный признак того, что форма либо создана динамически, либо является частью расширения/внешнего объекта, к которому в данный момент у конфигуратора нет прямого пути в дереве метаданных.

Метод 6: Проверка общих команд и БСП

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

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

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

Поиск «потерянного» кода в 1С — это всегда детективная работа. Мы рассмотрели основные инструменты: замер производительности для отслеживания пути выполнения, отладчик для анализа текущего состояния, и поиск по метаданным с учетом расширений. Помните, что код никогда не берется «из ниоткуда» — он либо жестко прописан в модулях, либо динамически подгружен извне. Используя системный подход, вы всегда сможете найти истинный источник логики приложения.

← На главную