Часто при работе с доработанными конфигурациями 1С разработчики сталкиваются с тем, что элементы форм содержат множество команд, логику работы которых крайне трудно обнаружить через стандартный поиск. Рассмотрим подробно, как устроены глобальные параметризуемые команды и как найти «спрятанный» программный код.
Первое, что нужно уяснить: большинство команд в меню «Создать на основании» не имеют явного обработчика в модуле формы текущего справочника. Это механизм платформенного поведения. Когда объект добавлен в список «Вводится на основании» для другого объекта, платформа сама формирует командный интерфейс.
В этом случае при нажатии на кнопку платформа выполняет следующее:
ОбработкаЗаполнения в модуле объекта нового документа.Если вы хотите увидеть, какой именно код исполняется, не тратьте время на глобальный поиск по конфигурации. Воспользуйтесь мощным инструментом — отладчиком.
Выполним поиск по шагам:
ЗаказКлиента).ОбработкаЗаполнения.В окне стека вы увидите всю цепочку вызовов, начиная от нажатия кнопки на форме до инициализации документа. Это даст вам полное понимание того, откуда именно была вызвана процедура и какие параметры были переданы.
Иногда команды, которые вы видите, не являются стандартным «Вводом на основании», а представляют собой Общие команды. Если у такой команды в свойстве «Тип параметра команды» указан ваш справочник, она автоматически появится на форме.
Чтобы найти их обработчик:
Общие -> Команды.ОбработкаКоманды. Именно там будет сосредоточена вся логика, выполняемая при нажатии.Если ваша задача состоит в том, чтобы передать реквизит из справочника в табличную часть создаваемого документа, вам не нужно менять саму команду. Достаточно внести изменения в ОбработкаЗаполнения. Рассмотрим пример того, как это может выглядеть в коде:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
// Проверяем, что заполнение идет из нашего справочника
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.НашСправочник") Тогда
// Добавляем строку в табличную часть и переносим данные
НоваяСтрока = Товары.Добавить();
НоваяСтрока.Номенклатура = ДанныеЗаполнения.ОсновнаяНоменклатура;
// Здесь можно добавить перенос других реквизитов
КонецЕсли;
КонецПроцедуры
Именно в этой процедуре вы можете управлять тем, как именно будут заполняться данные, учитывая любые проверки, условия или автоматические расчеты, которые требуют бизнес-процессы вашей организации.
Если после выполнения всех действий вы все еще не видите явного кода, возможно, перед вами один из следующих случаев:
ПодпискиНаСобытия, которые могут отрабатывать при создании или записи объекта. Это часто встречается в типовых конфигурациях.Используйте стек вызова как ваш главный навигатор. Это самый надежный способ «приземлиться» именно в ту строку кода, которая отвечает за вашу задачу. Удачи в изучении чужого кода!