Разработка и Конфигурация · 12 мин
Обычная форма 1С: что это такое и как с ней работать
Разбираем, что такое обычная форма 1С, как она устроена, чем отличается от управляемой формы и в каких конфигурациях используется. Практические советы по работе.
Обычная форма 1С — это классический механизм построения пользовательского интерфейса в платформе «1С:Предприятие», который применялся до появления управляемых форм. В обычной форме разработчик вручную размещает элементы управления (поля ввода, кнопки, таблицы) на форме и задаёт их положение в пикселях или через привязки к границам. Такая форма целиком рисуется и обрабатывается на клиентском компьютере.
Обычные формы были основным способом создания интерфейса в платформе 8.0 и 8.1 и продолжают использоваться в конфигурациях, работающих в режиме обычного приложения: «Управление торговлей 10.3», «Управление производственным предприятием 1.3», «Бухгалтерия 1.6/2.0» и множестве отраслевых решений. Если вы открываете старую базу и видите «классический» интерфейс с жёстко зафиксированными окнами — перед вами обычные формы.
Понимать устройство обычных форм необходимо, даже если вы работаете с современными конфигурациями: многие организации до сих пор эксплуатируют старые решения, а доработка и поддержка таких систем требует именно знания классического механизма.
Как устроена обычная форма
Обычная форма хранится в конфигурации как отдельный объект и состоит из трёх связанных частей: визуального представления (диалога), модуля формы со встроенным кодом и реквизитов формы. Диалог создаётся в визуальном редакторе конфигуратора: разработчик перетаскивает на форму поля ввода, надписи, табличные поля, кнопки и задаёт их координаты.
Модуль формы содержит обработчики событий — процедуры и функции на встроенном языке, которые выполняются при открытии формы, нажатии кнопок, изменении данных. Весь код обычной формы исполняется на клиенте: и бизнес-логика, и обращения к данным, и управление интерфейсом. Понятия «клиент» и «сервер» в контексте формы здесь отсутствуют.
Реквизиты формы — это данные, которые форма хранит и отображает, но которые не обязательно связаны с объектом базы данных. Например, у формы документа основной реквизит — сам документ, а дополнительные реквизиты могут использоваться для временных вычислений и настроек отображения.
Чем обычная форма отличается от управляемой
Главное отличие — в том, кто формирует внешний вид. В обычной форме разработчик сам определяет расположение каждого элемента. В управляемой форме разработчик лишь описывает структуру: какие элементы есть, как они сгруппированы, а платформа сама решает, как их отобразить на конкретном клиенте — тонком, веб-клиенте или мобильном.
Второе принципиальное отличие — модель исполнения кода. Управляемая форма компилируется дважды: на клиенте и на сервере, и разработчик явно управляет контекстом выполнения через директивы &НаКлиенте и &НаСервере. В обычной форме такого разделения нет — код целиком выполняется на клиенте, что упрощает разработку, но создаёт нагрузку на сеть при клиент-серверной работе.
| Критерий | Обычная форма | Управляемая форма |
|---|---|---|
| Размещение элементов | Вручную, с координатами и привязками | Автоматически, по описанию структуры |
| Исполнение кода | Только на клиенте | Клиент и сервер, с директивами |
| Веб-клиент | Не поддерживается | Поддерживается |
| Тонкий клиент | Не поддерживается | Поддерживается |
| Режим запуска | Обычное приложение | Управляемое приложение |
Когда какая форма уместна
Поддержка старых конфигураций на обычном приложении. Ограничение: только толстый клиент, нет веб-доступа.
Новые разработки и современные конфигурации. Ограничение: более сложная модель программирования с разделением контекста.
Какие виды обычных форм существуют
У объектов конфигурации (справочников, документов, отчётов) может быть несколько обычных форм разного назначения. Для справочника это форма элемента, форма списка, форма группы, форма выбора. Для документа — форма документа, форма списка, форма выбора. Каждая решает свою задачу: список отображает множество записей, форма элемента — одну запись для редактирования.
Формы делятся на основные и произвольные. Основная форма назначается в свойствах объекта и открывается платформой автоматически при стандартных действиях пользователя — например, при двойном щелчке по элементу списка. Произвольные формы создаются для специальных сценариев и открываются программно методом ПолучитьФорму().
Отдельно стоит упомянуть общие формы — они не привязаны к конкретному объекту и используются для диалогов настроек, помощников, обработок. Внешние обработки и отчёты (файлы .epf и .erf) также могут содержать обычные формы, которые будут работать при запуске в обычном приложении.
Как создать и отредактировать обычную форму
Создание выполняется в конфигураторе. Откройте ветку нужного объекта, например справочника, перейдите на закладку «Формы» или вызовите контекстное меню и выберите «Добавить форму». Запустится конструктор: укажите тип формы (элемента, списка, произвольная), имя и набор реквизитов, которые нужно вывести на форму. Платформа автоматически разместит элементы, после чего их можно переставить вручную.
При редактировании обратите внимание на привязки границ элементов. Если окно формы может изменять размер, элементы без корректных привязок останутся на месте или «уедут». Для табличных полей обычно задают привязку ко всем четырём сторонам, чтобы таблица растягивалась вместе с окном.
- 1Откройте конфигуратор и найдите нужный объект (справочник, документ, отчёт)
- 2На закладке «Формы» нажмите «Добавить» и выберите тип формы
- 3В конструкторе отметьте реквизиты для вывода на форму и завершите создание
- 4Настройте расположение элементов и привязки границ в редакторе формы
- 5Добавьте обработчики событий в модуле формы при необходимости
- 6Обновите конфигурацию базы данных и проверьте форму в режиме предприятия (обычное приложение)
Как программно работать с обычной формой
Открытие формы из кода выполняется методом ПолучитьФорму(). У объекта метаданных или у самого объекта данных вызывается ПолучитьФорму("ИмяФормы"), после чего у полученной формы вызывается Открыть() или ОткрытьМодально(). Если имя не указано, откроется основная форма соответствующего вида.
Типовые обработчики событий модуля формы: ПриОткрытии() — инициализация при открытии, ПередЗаписью() и ПриЗаписи() — контроль и дополнительные действия при сохранении объекта, обработчики элементов формы — например, ПриИзменении() у поля ввода. Внутри модуля доступен объект данных через свойство, соответствующее основному реквизиту формы.
Форма = Справочники.Номенклатура.ПолучитьФорму("ФормаЭлемента");
Форма.Открыть();
// Модально, с ожиданием закрытия
Результат = Форма.ОткрытьМодально();Важно помнить: модальное открытие блокирует интерфейс до закрытия окна. В старых конфигурациях это нормальная практика, но при переносе логики в управляемые формы модальные вызовы придётся заменять на обработчики оповещений.
Типичные проблемы и ограничения обычных форм
Ключевое ограничение — обычные формы работают только в толстом клиенте в режиме обычного приложения. Если конфигурацию запустить в режиме управляемого приложения, обычные формы не откроются: платформа либо покажет автоматически сгенерированную управляемую форму (если обычная не задана как единственная), либо выдаст ошибку при попытке открыть обычную форму программно.
При клиент-серверной работе обычные формы могут давать заметную нагрузку на сеть: каждое обращение к данным из модуля формы идёт с клиента на сервер отдельным вызовом. Медленное открытие форм списков и документов в терминальном или клиент-серверном режиме — частый симптом именно этой особенности.
Ещё одна распространённая ситуация — «поехавшая» вёрстка при другом разрешении экрана или масштабе шрифтов. Поскольку элементы размещены жёстко, форма, нарисованная под одно разрешение, на другом мониторе может отображаться с обрезанными полями. Лечится корректной настройкой привязок, а не фиксацией размера окна.
Как проверить результат и что учесть при миграции
После создания или доработки формы проверьте её в условиях, близких к реальным: откройте в режиме предприятия, измените размер окна, проверьте работу кнопок и обработчиков, убедитесь, что данные корректно читаются и записываются. Если база клиент-серверная, оцените скорость открытия формы именно в клиент-серверном варианте, а не только в файловом.
Как проверить доработанную форму
Элементы растягиваются и не обрезаются
Поля наезжают друг на друга или исчезают
Форма открывается без ошибок и заметной задержки
Ошибки компиляции модуля или пауза в несколько секунд
Данные сохраняются, обработчики отрабатывают
Ошибки в ПередЗаписью или потеря введённых данных
Форма открывается в обычном приложении
Ошибка при запуске в управляемом приложении или тонком клиенте
Если планируется переход конфигурации на управляемое приложение, обычные формы придётся перерабатывать в управляемые. Автоматической конвертации не существует: управляемая форма создаётся заново, а код модуля переписывается с разделением на клиентские и серверные процедуры. На практике миграцию делают постепенно, начиная с самых массовых форм — списков и форм документов.
При оценке объёма работ учитывайте, что в управляемых формах недоступна часть привычных возможностей: прямое обращение к элементам формы из серверного кода, модальные диалоги, некоторые методы работы с табличными полями. Поэтому перенос — это не копирование, а перепроектирование логики.
Как выбрать действие
Частые вопросы
Можно ли открыть обычную форму в управляемом приложении?
Нет, обычные формы не работают в режиме управляемого приложения, тонком и веб-клиенте. Если у объекта есть только обычная форма, при запуске в управляемом режиме платформа сгенерирует управляемую форму автоматически, а программный вызов обычной формы вызовет ошибку.
Как узнать, какие формы в конфигурации обычные?
В конфигураторе откройте свойства формы: у обычной формы нет признака «управляемая», а её модуль не содержит директив компиляции &НаКлиенте и &НаСервере. Также можно проверить режим запуска конфигурации в свойствах корня конфигурации — параметр «Режим запуска».
Почему обычная форма открывается медленно?
Чаще всего причина — тяжёлые запросы или обходы больших выборок в обработчике ПриОткрытии, а также обращения к данным из клиентского кода в клиент-серверном режиме. Вынесите вычисления в серверные процедуры общих модулей и загружайте в форму только нужные данные.
Чем заменить модальное открытие формы?
В обычных формах модальность допустима, но при переносе в управляемые формы используйте метод ОткрытьФорму() с описанием оповещения о закрытии — результат обрабатывается в отдельной процедуре после закрытия формы, без блокировки интерфейса.
Нужно ли изучать обычные формы новичку в 1С?
Да, если вы планируете поддерживать старые конфигурации — таких систем в эксплуатации много. Если работаете только с современными решениями, достаточно понимать общие отличия и ограничения обычных форм, а углублённо изучать управляемые.
Что важно запомнить
Обычная форма — классический тип формы 1С с ручным размещением элементов и исполнением всего кода на клиенте. Она работает только в обычном приложении и толстом клиенте. Для старых конфигураций дорабатывайте обычные формы с корректными привязками и оптимизацией запросов; новую функциональность при переходе на современную платформу создавайте в управляемых формах.