Почему недоступно поле «Дополнительная форма» в обработке 1С и как его разблокировать для удаления связанной формы

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

В процессе разработки и поддержки конфигураций на платформе «1С:Предприятие 8» программисты часто сталкиваются с необходимостью оптимизации кода и удаления устаревших объектов. Типичный сценарий: при очистке старой обработки от неиспользуемых элементов обнаруживается «зависшая» форма, которую система не позволяет удалить, выдавая сообщение о наличии ссылок на нее. При анализе выясняется, что эта форма назначена в качестве Дополнительной формы обработки. Однако сама кнопка выбора и очистки этого поля в свойствах объекта оказывается заблокированной (недоступной для редактирования).

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

Выясняем причину: техническая логика платформы «1С:Предприятие»

Для понимания природы проблемы обратимся к архитектуре платформы. Свойство Дополнительная форма было введено разработчиками 1С в период активного перехода с обычных форм (ОФ) на управляемые формы (УФ). Оно предназначено исключительно для бесконфликтного сосуществования двух разных технологических типов интерфейса в рамках одного объекта метаданных.

Платформа накладывает жесткое системное ограничение: тип дополнительной формы должен быть строго противоположен типу основной формы. Работает это по следующему правилу:

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

Разбираем по шагам: как разблокировать поле и удалить «зависшую» форму

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

Шаг 1. Настройка свойств конфигурации

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

  1. Откроем конфигуратор и перейдем в корень дерева метаданных (нажмем правой кнопкой мыши на название конфигурации и выберем пункт Свойства).
  2. В палитре свойств найдем раздел совместимости и свойство Использовать обычные формы в управляемом приложении.
  3. Временно установим данное свойство в значение Истина.

Шаг 2. Изменение режима запуска конфигуратора

Теперь укажем редактору конфигуратора, что мы хотим работать с обоими типами интерфейсов одновременно:

  1. В главном меню конфигуратора перейдем по пути: Сервис — Параметры.
  2. В открывшемся окне выберем вкладку Общие.
  3. В разделе Режим запуска установим переключатель в положение Управляемое приложение и обычное приложение (в некоторых версиях достаточно выбрать режим Обычное приложение). Нажмем кнопку Применить.

Шаг 3. Создание временного объекта-пустышки

Для того чтобы обмануть валидацию платформы и сделать заблокированное поле активным, создадим временную обычную форму:

  1. Перейдем к нашей обработке в дереве метаданных и развернем ветку Формы.
  2. Нажмем кнопку Добавить для создания новой формы.
  3. В открывшемся конструкторе обязательно выберем тип формы — Обычная. Назовем её, например, ВременнаяОбычнаяФорма и нажмем Готово.

Шаг 4. Очистка свойства «Дополнительная форма»

После создания обычной формы платформа увидит подходящий по типу объект, и поле выбора станет доступным:

  1. Откроем свойства нашей обработки.
  2. Найдем поле Дополнительная форма. Теперь оно активно!
  3. Нажмем на кнопку очистки (красный крестик «Х») рядом с полем, либо выберем созданную обычную форму, а затем очистим поле. Связь с заблокированной управляемой формой будет разорвана.

Шаг 5. Наведение порядка и возврат настроек

После того как связь удалена, мы можем завершить оптимизацию:

  1. Удалим старую неиспользуемую управляемую форму, которая ранее выдавала ошибку.
  2. Удалим созданную нами ВременнуюОбычнуюФорму.
  3. Вернем настройки в меню Сервис — Параметры — Общие и свойства конфигурации в исходное состояние, чтобы не засорять среду разработки неиспользуемыми режимами.

Как платформа выбирает, какую форму открыть пользователю?

Проанализируем ситуацию, когда в объекте заполнены оба поля — и основная, и дополнительная формы. Платформа осуществляет выбор формы «на лету» в зависимости от контекста запуска сеанса пользователя:

Современное развитие механизма в платформе 8.3.22+ и 8.5

Стоит отметить, что в современных версиях платформы назначение свойства Дополнительная форма получило принципиально новое развитие. Теперь оно используется не только для разделения устаревших ОФ и современных УФ, но и для плавной адаптации интерфейса при переходе между различными стилями управляемого приложения (например, при переходе с интерфейса «Такси» на новый интерфейс платформы «Версия 8.5»).

Для управляемых форм добавлено свойство Использование в режиме совместимости интерфейса со следующими вариантами:

Разработчик может спроектировать две разные управляемые формы: одну адаптировать под компактный стиль «Такси», а вторую — под новые стандарты отображения версии 8.5. Назначив одну форму основной, а вторую дополнительной, мы позволяем платформе автоматически определять текущий стиль интерфейса клиента и открывать наиболее подходящую форму для конкретного пользователя.

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


ПараметрыПерехода = Новый Структура;
ПараметрыПерехода.Вставить("КлючНастройки", "РежимСовместимости");

// Программный вызов конкретной формы в обход автоматического выбора платформы
ОткрытьФорму("ВнешняяОбработка.МояОбработка.Форма.ФормаУправляемая", ПараметрыПерехода);

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

← На главную