Разработка и Конфигурация · 10 мин
Как сделать форму по умолчанию в 1С
Как назначить форму по умолчанию в 1С: основные формы объекта в конфигураторе, переопределение в модуле менеджера, типичные ошибки и проверка результата.
Форма по умолчанию в 1С — это форма, которая открывается автоматически при стандартном действии пользователя: создании нового элемента справочника, открытии документа, просмотре списка. Если у объекта несколько форм одного вида, платформа должна знать, какую из них показывать. Назначить такую форму можно двумя способами: через свойство объекта в конфигураторе или программно в модуле менеджера.
Выбор способа зависит от задачи. Если форма должна открываться всегда и для всех пользователей — достаточно указать её в свойствах объекта метаданных. Если форма зависит от условий (роль пользователя, вид операции, режим работы), понадобится обработчик ОбработкаПолученияФормы. Оба подхода рассмотрены ниже с конкретными действиями и кодом.
Какие виды основных форм существуют у объекта
У объектов метаданных (справочников, документов, обработок, регистров) есть несколько свойств, отвечающих за формы по умолчанию. Каждое из них срабатывает в своей ситуации, поэтому важно понимать разницу.
- Основная форма объекта — открывается при создании нового элемента и при открытии существующего.
- Основная форма списка — показывается при открытии списка объектов (например, по команде в интерфейсе).
- Основная форма для выбора — используется, когда пользователь подбирает значение в поле ввода.
- Основная форма для выбора групп — применяется для выбора папок в иерархических справочниках.
- Основная форма записи — у регистров сведений, открывается при редактировании отдельной записи.
Если ни одно свойство не заполнено, платформа генерирует форму автоматически по структуре объекта. Такая автогенерируемая форма работоспособна, но не учитывает прикладную логику: порядок полей, группировку, условное оформление. Поэтому в доработанных конфигурациях основные формы обычно назначают явно.
Назначение основной формы в конфигураторе
Это базовый и самый распространённый способ. Он подходит, когда форма должна открываться всегда, без условий.
- 1Откройте конфигуратор и найдите нужный объект в дереве конфигурации (справочник, документ, обработка).
- 2Откройте контекстное меню объекта и выберите «Свойства» (или нажмите Alt+Enter).
- 3Прокрутите палитру свойств до группы «Формы»: там находятся поля «Основная форма объекта», «Основная форма списка» и другие.
- 4Нажмите кнопку выбора в нужном поле и укажите существующую форму из списка либо создайте новую через конструктор.
- 5Сохраните конфигурацию (Ctrl+S) и обновите конфигурацию базы данных (F7), если требуется.
- 6Запустите режим предприятия и проверьте, что при стандартном действии открывается назначенная форма.
При выборе формы в свойстве платформа показывает только формы подходящего вида: для поля «Основная форма списка» — формы списка, для «Основная форма объекта» — формы объекта. Если нужной формы в списке нет, сначала создайте её на закладке «Формы» того же объекта.
В управляемом приложении тип формы определяется при её создании конструктором: вы выбираете «Форма элемента справочника», «Форма списка» и т.д. Изменить тип существующей формы нельзя — при ошибке форму придётся пересоздать.
Программное переопределение формы через модуль менеджера
Когда форма по умолчанию зависит от условий, свойств объекта недостаточно. Для этого служит обработчик ОбработкаПолученияФормы в модуле менеджера объекта. Он вызывается платформой каждый раз, когда запрашивается форма, и позволяет подменить её.
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаОбъекта" Тогда
Если ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "Кладовщик" Тогда
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = "ФормаОбъектаУпрощенная";
КонецЕсли;
КонецЕсли;
КонецПроцедурыКлючевые моменты работы обработчика:
- Параметр
ВидФормысодержит строку: «ФормаОбъекта», «ФормаСписка», «ФормаВыбора» и т.д. Проверяйте его, иначе подмена сработает во всех режимах. - Присвоение
СтандартнаяОбработка = Ложьотключает стандартное поведение — без этого платформа проигнорирует выбранную форму. - В
ВыбраннаяФормаможно передать имя формы строкой или полный путь вида«Справочник.Номенклатура.Форма.ФормаОбъектаУпрощенная». - Через
Параметрыдоступны переданные при открытии параметры, например ключ записи или значения заполнения — на них тоже можно строить условия.
Открытие конкретной формы из кода
Третий сценарий — когда форму нужно открыть принудительно из прикладного кода, минуя настройки по умолчанию. Для этого используются методы ОткрытьФорму и ПолучитьФорму.
// Открытие конкретной формы элемента с параметрами
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент);
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаОбъектаРасширенная", ПараметрыФормы);Метод ОткрытьФорму предпочтительнее в управляемом приложении: он работает асинхронно-дружелюбно и не блокирует интерфейс. ПолучитьФорму возвращает сам объект формы и нужен, когда требуется программно обратиться к её данным до открытия, но он не поддерживается в некоторых режимах и считается менее предпочтительным.
Учтите: открытие формы по полному пути игнорирует и свойство основной формы, и обработчик ОбработкаПолученияФормы. Это осознанный обход стандартного механизма — используйте его там, где действительно нужна конкретная форма, например для мастера настройки или печатной формы.
Сравнение способов назначения формы
Сравнение вариантов
Подходит, когда форма одна и постоянна. Самый простой способ, не требует кода. Ограничение: нет условий и гибкости.
Нужен, когда форма зависит от роли, параметров, режима работы. Требует кода и аккуратной обработки всех видов форм.
Применяется для точечного открытия из прикладной логики. Игнорирует настройки по умолчанию — не заменяет их, а обходит.
На практике способы комбинируют: основная форма назначается в свойствах как базовый вариант, а частные случаи (упрощённая форма для отдельной роли, форма быстрого ввода) переопределяются в модуле менеджера. Такой подход проще сопровождать, чем размещение всей логики в одном обработчике.
Типичные ошибки и ограничения
Отдельное ограничение касается типовых конфигураций на поддержке. Изменение основных форм и модулей менеджера снимает объекты с полной поддержки и усложняет обновления. Если конфигурация типовая, предпочтительнее использовать расширение конфигурации: в расширении можно заимствовать объект, добавить свою форму и назначить её основной, не трогая основную конфигурацию.
Проверка результата
После назначения формы проверьте все стандартные сценарии, а не только основной. Форма объекта и форма списка настраиваются независимо, и корректная работа одной не гарантирует корректность другой.
Как проверить результат
Открывается назначенная форма объекта
Открывается автогенерируемая или старая форма
Показывается назначенная форма списка
Открывается стандартный список без доработок
Открывается форма выбора с нужным составом колонок
Открывается форма списка или объектная форма
Каждой роли открывается своя форма согласно условиям
Всем открывается одна форма или возникает ошибка
Если форма не открывается, первым делом смотрите журнал регистрации и сообщения об ошибках: типовая причина — неверное имя формы в коде или ссылка на удалённую форму в свойствах. Имена форм чувствительны к точному написанию, и переименование формы не обновляет строковые ссылки на неё в коде автоматически.
Что важно запомнить
Постоянную форму по умолчанию назначайте в свойствах объекта конфигурации, условную — в обработчике ОбработкаПолученияФормы модуля менеджера, а разовое открытие конкретной формы делайте через ОткрытьФорму. После изменений обновляйте конфигурацию базы данных и проверяйте все сценарии: создание, просмотр, список и выбор.
Частые вопросы
Почему после назначения основной формы открывается старая?
Чаще всего не обновлена конфигурация базы данных: изменения в конфигураторе применяются к рабочей базе только после F7. Также проверьте, нет ли в модуле менеджера обработчика ОбработкаПолученияФормы, который подменяет форму, и не открывается ли объект из кода через ОткрытьФорму с явным путём.
Можно ли назначить разные формы по умолчанию для разных пользователей?
Напрямую через свойства — нет, основная форма одна для всех. Для различения по пользователям или ролям используйте ОбработкаПолученияФормы: в нём проверяйте текущего пользователя или наличие роли и подменяйте выбранную форму с отключением стандартной обработки.
Как сделать форму по умолчанию в типовой конфигурации без снятия с поддержки?
Используйте расширение конфигурации: заимствуйте объект, добавьте собственную форму и назначьте её в свойствах заимствованного объекта внутри расширения. Основная конфигурация при этом не изменяется, и обновления типового релиза проходят штатно.
Чем отличается основная форма объекта от основной формы для выбора?
Форма объекта открывается при создании и редактировании элемента, форма выбора — при подборе значения в поле ввода другого объекта. Это независимые свойства: можно назначить полную форму для редактирования и упрощённую форму выбора для подбора.
Что будет, если удалить форму, назначенную основной?
При попытке открытия объекта возникнет ошибка о ненайденной форме. Перед удалением формы очистите соответствующее свойство объекта и найдите строковые ссылки на её имя в коде — поиск по имени формы по всей конфигурации (Ctrl+Shift+F) покажет все обращения.
Работает ли ОбработкаПолученияФормы в обычном приложении?
Нет, этот обработчик относится к управляемому приложению. В обычных формах выбор формы выполнялся через свойства объекта и метод ПолучитьФорму. Современные версии платформы ориентированы на управляемое приложение, поэтому для новых разработок используйте описанные в статье механизмы.