Почему в расширении 1С пропадают события у таблицы формы и как с этим работать?

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

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

Разбираемся с цветовой индикацией объектов

Прежде всего, обратим внимание на визуальные сигналы, которые подает нам конфигуратор. Если вы заметили, что реквизит Объект или элементы формы окрашены не в привычный черный, а в оливковый (или рыже-болотный) цвет — это не ошибка. Проанализируем, что сообщает нам платформа с помощью цвета в контексте расширения:

  1. Оливковый (коричневый) цвет: Указывает на то, что данный объект является заимствованным. Это означает, что объект физически существует в основной конфигурации, а в расширении создана лишь ссылка на него, позволяющая изменять его свойства или перехватывать методы.
  2. Синий цвет: Означает, что объект был создан непосредственно в расширении. Этого объекта нет в основной базе, он существует только в рамках вашего патча или дополнения.
  3. Черный цвет: Обычно это стандартные элементы, которые еще не подвергались изменениям или заимствованию в текущем контексте окна.

Таким образом, «рыже-болотный» цвет реквизита Объект подтверждает, что форма и ее основные данные успешно связаны с основной конфигурацией.

Выясняем причину «исчезновения» событий

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

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

2. Особенности заимствования данных. Часто события таблицы (например, ПриИзменении, ПередУдалением) завязаны на данные. Если вы добавили форму в расширение, но забыли заимствовать саму табличную часть документа (как объект метаданных), платформа может скрывать часть специфических событий, так как «не видит» источника данных для этой таблицы.

3. Режим совместимости. Важно проверить режим совместимости расширения. Если он ниже, чем у основной конфигурации (особенно ниже версии 8.3.15), некоторые возможности отображения событий в интерфейсе конфигуратора могут быть ограничены.

Как создать обработчик события в расширении

Для того чтобы «вернуть» события и начать ими управлять, воспользуемся стандартным механизмом заимствования обработчиков. Рассмотрим этот процесс по шагам:

  1. Откроем форму в расширении и выберем нужный элемент (например, таблицу Товары).
  2. В палитре свойств перейдем к списку событий.
  3. Напротив нужного события (например, ПриАктивизацииСтроки) нажмем на кнопку с лупой.
  4. Платформа предложит создать новый обработчик. Здесь крайне важно выбрать тип аннотации, который определит, как ваш код будет взаимодействовать с основным кодом конфигурации.

Работа с аннотациями: &Перед, &После, &Вместо

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

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


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

Аннотация &После (&After): Код расширения выполнится сразу после завершения основной процедуры. Идеально подходит для изменения результатов расчета или вывода дополнительных уведомлений.


&НаКлиенте
&После("ТоварыПриИзменении")
Процедура Расш1_ТоварыПриИзмененииПосле(Элемент)
    // Основной расчет уже завершен, можем внести правки
    РассчитатьДополнительнуюСкидку();
КонецПроцедуры

Аннотация &Вместо (&Instead): Полностью блокирует выполнение основного кода и запускает только ваш. Используйте с осторожностью, так как это может нарушить типовую логику программы.

Восстановление стандартных команд таблицы

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

Рекомендации по исправлению ситуации

Если вы все же не видите нужного события в списке, попробуйте выполнить следующие действия:

  1. Повторное заимствование: Правой кнопкой мыши нажмите на таблицу в дереве элементов формы и выберите «Добавить в расширение», даже если форма уже там. Это обновит связи метаданных.
  2. Проверка данных: Убедитесь, что в расширение добавлены реквизиты, к которым привязана таблица. Если ПутьКДанным указывает на Объект.Товары, то табличная часть Товары должна быть заимствована в ветке «Документы» вашего расширения.
  3. Ручное создание: Если платформа по какой-то причине не предлагает создать обработчик через интерфейс, вы можете написать его вручную в модуле формы, соблюдая синтаксис аннотаций, и связь установится автоматически при компиляции.

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

← На главную