В процессе разработки и поддержки конфигураций на платформе «1С:Предприятие 8» программисты часто сталкиваются с необходимостью оптимизации кода и удаления устаревших объектов. Типичный сценарий: при очистке старой обработки от неиспользуемых элементов обнаруживается «зависшая» форма, которую система не позволяет удалить, выдавая сообщение о наличии ссылок на нее. При анализе выясняется, что эта форма назначена в качестве Дополнительной формы обработки. Однако сама кнопка выбора и очистки этого поля в свойствах объекта оказывается заблокированной (недоступной для редактирования).
В этой статье мы подробно разберем, почему платформа блокирует поле Дополнительная форма, по каким правилам работает этот механизм и как пошагово обойти это ограничение, чтобы успешно удалить ненужные интерфейсные объекты.
Для понимания природы проблемы обратимся к архитектуре платформы. Свойство Дополнительная форма было введено разработчиками 1С в период активного перехода с обычных форм (ОФ) на управляемые формы (УФ). Оно предназначено исключительно для бесконфликтного сосуществования двух разных технологических типов интерфейса в рамках одного объекта метаданных.
Платформа накладывает жесткое системное ограничение: тип дополнительной формы должен быть строго противоположен типу основной формы. Работает это по следующему правилу:
Основной формы выбрана Управляемая форма, то в поле Дополнительная форма система позволит выбрать только Обычную форму.Основной формы выбрана Обычная форма, то в качестве дополнительной может быть назначена только Управляемая форма.Если в вашей обработке созданы только управляемые формы (как это по умолчанию происходит в современных конфигурациях), платформа не находит среди подчиненных объектов ни одной обычной формы. В результате поле Дополнительная форма автоматически блокируется и становится серым, так как системе физически нечего предложить вам для выбора.
Рассмотрим практический алгоритм решения проблемы, когда форму невозможно удалить из-за скрытой или заблокированной связи. Нам потребуется временно переключить конфигуратор в режим совместимости интерфейсов, чтобы вернуть доступ к редактированию свойства.
Шаг 1. Настройка свойств конфигурации
Прежде всего нам необходимо убедиться, что в самой конфигурации разрешено использование обычных форм. Для этого выполним следующие действия:
Использовать обычные формы в управляемом приложении.Истина.Шаг 2. Изменение режима запуска конфигуратора
Теперь укажем редактору конфигуратора, что мы хотим работать с обоими типами интерфейсов одновременно:
Управляемое приложение и обычное приложение (в некоторых версиях достаточно выбрать режим Обычное приложение). Нажмем кнопку Применить.Шаг 3. Создание временного объекта-пустышки
Для того чтобы обмануть валидацию платформы и сделать заблокированное поле активным, создадим временную обычную форму:
Обычная. Назовем её, например, ВременнаяОбычнаяФорма и нажмем Готово.Шаг 4. Очистка свойства «Дополнительная форма»
После создания обычной формы платформа увидит подходящий по типу объект, и поле выбора станет доступным:
Дополнительная форма. Теперь оно активно!Шаг 5. Наведение порядка и возврат настроек
После того как связь удалена, мы можем завершить оптимизацию:
ВременнуюОбычнуюФорму.Проанализируем ситуацию, когда в объекте заполнены оба поля — и основная, и дополнительная формы. Платформа осуществляет выбор формы «на лету» в зависимости от контекста запуска сеанса пользователя:
Стоит отметить, что в современных версиях платформы назначение свойства Дополнительная форма получило принципиально новое развитие. Теперь оно используется не только для разделения устаревших ОФ и современных УФ, но и для плавной адаптации интерфейса при переходе между различными стилями управляемого приложения (например, при переходе с интерфейса «Такси» на новый интерфейс платформы «Версия 8.5»).
Для управляемых форм добавлено свойство Использование в режиме совместимости интерфейса со следующими вариантами:
ЛюбойВерсия 8.5ТаксиРазработчик может спроектировать две разные управляемые формы: одну адаптировать под компактный стиль «Такси», а вторую — под новые стандарты отображения версии 8.5. Назначив одну форму основной, а вторую дополнительной, мы позволяем платформе автоматически определять текущий стиль интерфейса клиента и открывать наиболее подходящую форму для конкретного пользователя.
Если вам требуется программно определить или открыть форму в зависимости от переданных параметров, мы можем использовать стандартные методы глобального контекста. Посмотрим на пример программного вызова конкретной формы:
ПараметрыПерехода = Новый Структура;
ПараметрыПерехода.Вставить("КлючНастройки", "РежимСовместимости");
// Программный вызов конкретной формы в обход автоматического выбора платформы
ОткрытьФорму("ВнешняяОбработка.МояОбработка.Форма.ФормаУправляемая", ПараметрыПерехода);
Таким образом, понимание внутренней логики работы платформы с типами форм позволяет не только избегать трудностей при редактировании метаданных, но и гибко настраивать современные динамические интерфейсы для пользователей различных версий систем.