Где найти обработчик глобальной команды формы и как отследить вызов «Ввода на основании» в 1С?

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

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

Понимание природы глобальных команд

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

В этом случае при нажатии на кнопку платформа выполняет следующее:

  1. Создает новый экземпляр объекта (документа).
  2. Автоматически вызывает процедуру ОбработкаЗаполнения в модуле объекта нового документа.

Как найти код через отладчик: работа со стеком вызовов

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

Выполним поиск по шагам:

  1. Откройте модуль объекта того документа, который создается при нажатии на команду (например, ЗаказКлиента).
  2. Найдите процедуру ОбработкаЗаполнения.
  3. Установите точку останова на первой строке этой процедуры.
  4. Запустите «1С:Предприятие» в режиме отладки и нажмите нужную команду в интерфейсе справочника.
  5. Когда выполнение остановится на точке останова, откройте окно «Стек вызова» (меню «Отладка» -> «Стек вызова»).

В окне стека вы увидите всю цепочку вызовов, начиная от нажатия кнопки на форме до инициализации документа. Это даст вам полное понимание того, откуда именно была вызвана процедура и какие параметры были переданы.

Особенности работы с общими командами

Иногда команды, которые вы видите, не являются стандартным «Вводом на основании», а представляют собой Общие команды. Если у такой команды в свойстве «Тип параметра команды» указан ваш справочник, она автоматически появится на форме.

Чтобы найти их обработчик:

Практический совет: перенос данных в табличную часть

Если ваша задача состоит в том, чтобы передать реквизит из справочника в табличную часть создаваемого документа, вам не нужно менять саму команду. Достаточно внести изменения в ОбработкаЗаполнения. Рассмотрим пример того, как это может выглядеть в коде:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    // Проверяем, что заполнение идет из нашего справочника
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.НашСправочник") Тогда
        // Добавляем строку в табличную часть и переносим данные
        НоваяСтрока = Товары.Добавить();
        НоваяСтрока.Номенклатура = ДанныеЗаполнения.ОсновнаяНоменклатура;
        // Здесь можно добавить перенос других реквизитов
    КонецЕсли;
КонецПроцедуры

Именно в этой процедуре вы можете управлять тем, как именно будут заполняться данные, учитывая любые проверки, условия или автоматические расчеты, которые требуют бизнес-процессы вашей организации.

Что делать, если код не найден?

Если после выполнения всех действий вы все еще не видите явного кода, возможно, перед вами один из следующих случаев:

Используйте стек вызова как ваш главный навигатор. Это самый надежный способ «приземлиться» именно в ту строку кода, которая отвечает за вашу задачу. Удачи в изучении чужого кода!

← На главную