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