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

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

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

Давайте разберемся, почему так происходит, является ли это ошибкой, и рассмотрим несколько проверенных способов решения этой задачи. Мы проанализируем как настройки интерфейса, так и альтернативные методы разработки.

Природа проблемы: ошибка или особенность?

Согласно информации из обсуждений и официальных багрепортов, данное поведение в релизе 8.3.23 связано с изменением механизмов отрисовки интерфейса самого Конфигуратора (переход на новые технологии UI). Это привело к тому, что механизм Drag-and-Drop (перетаскивания) стал работать с задержкой или конфликтовать с контекстом расширения.

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

Способ 1. Использование команды "Добавить в расширение"

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

Давайте выполним следующие действия:

  1. Откроем форму в расширении.
  2. Обратим внимание на командную панель в верхней части редактора формы (над деревом элементов).
  3. Найдем кнопку, которая называется "Добавить в расширение" (обычно она выглядит как значок плюса или стрелки в иерархию).
  4. Нажмем на неё.

После нажатия этой "волшебной кнопки" платформа принудительно захватывает контекст формы в расширение, и возможность перетаскивания реквизитов (Drag-and-Drop) восстанавливается. Это действие явно сообщает платформе: "Я хочу редактировать состав элементов этой формы именно здесь".

Способ 2. Ручное создание элемента и привязка пути

Если перетаскивание по-прежнему не работает или интерфейс "глючит", мы можем пойти путем ручного конструирования. Этот метод работает безотказно, так как не зависит от механизма Drag-and-Drop. Для добавления полей и реквизитов без визуального редактора Конфигуратора также подойдёт инструмент для добавления реквизитов и элементов на управляемые формы.

Давайте сделаем это пошагово:

  1. В дереве элементов формы выделим родительскую группу, куда хотим добавить поле.
  2. Нажмем кнопку Добавить (или клавишу Insert) и выберем тип элемента Поле.
  3. В палитре свойств справа найдем свойство ПутьКДанным.
  4. Важный момент: кнопка выбора ("...") может быть неактивна или не открывать окно выбора. Не пугайтесь. Мы можем ввести путь вручную.
  5. Введем путь текстом, например: Объект.НашНовыйРеквизит или Объект.Контрагент.
  6. Нажмем Enter.

Платформа автоматически распознает тип данных по введенному пути и настроит вид поля (строка, ссылка, число и т.д.). Даже если интерфейс визуально блокирует выбор, текстовый ввод работает корректно.

Способ 3. Особенность перетаскивания (Метод "Долгого клика")

В релизе 8.3.23 была замечена особенность обработки событий мыши. Интерфейс теперь требует подтверждения намерения перетащить объект, чтобы отличить его от простого клика или выделения.

Попробуем изменить нашу привычку работы с мышью:

  1. Наведем курсор на нужный реквизит в списке справа (в данных объекта).
  2. Нажмем левую кнопку мыши и удержим её нажатой в течение 1–2 секунд, не двигая курсор.
  3. Только после этой паузы начнем перетаскивание в дерево элементов формы.

Эта небольшая задержка позволяет платформе корректно обработать начало события Drag-and-Drop. Многим разработчикам это помогло вернуть привычный стиль работы без отката платформы.

Способ 4. Копирование и вставка (Ctrl+C / Ctrl+V)

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

Рассмотрим алгоритм:

  1. Если у нас есть уже созданный элемент формы, ссылающийся на похожий тип данных, или мы можем создать его в основной конфигурации (для теста), выделим его.
  2. Нажмем Ctrl+C.
  3. Перейдем в дерево элементов в расширении и нажмем Ctrl+V.
  4. После вставки зайдем в свойства нового элемента и просто изменим ПутьКДанным на нужный нам реквизит (как в Способе 2).

Способ 5. Программное добавление элементов

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

Нам потребуется использовать аннотацию &НаСервере и событие ПриСозданииНаСервере. Мы будем использовать расширение метода (аннотация &После или &Вместо, в зависимости от задачи, но безопаснее использовать &После).

Разберем пример кода, который добавляет поле ввода для реквизита "Комментарий" на форму:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	// Проверяем, не добавлен ли элемент уже (для избежания дублей при повторных вызовах)
	Если Элементы.Найти("Расш1_Комментарий") <> Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	// Добавляем новый элемент в коллекцию элементов формы
	// Параметры: Имя элемента, Тип элемента, Родитель (куда добавляем)
	НовыйЭлемент = Элементы.Добавить("Расш1_Комментарий", Тип("ПолеФормы"), Элементы.ГруппаКомментарий);
	
	// Настраиваем связь с данными
	НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
	НовыйЭлемент.ПутьКДанным = "Объект.Комментарий";
	НовыйЭлемент.Заголовок = "Комментарий (из расширения)";
	
	// Можно настроить положение
	НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево;
	
КонецПроцедуры

Этот метод является самым надежным с точки зрения архитектуры, так как он будет работать вне зависимости от глюков визуального редактора конфигуратора. Однако он требует написания кода и понимания структуры формы (названий групп-родителей). Для стандартизации и ускорения этой разработки можно использовать готовый модуль для программного изменения форм.

Заключение

Проблема с добавлением реквизитов в расширении на платформе 8.3.23 — это известная неудобность, с которой столкнулось сообщество. Мы выяснили, что это не тупиковая ситуация.

В большинстве случаев помогает:

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

← На главную