К статье
Практический материал

Разработка и Конфигурация · 12 мин

Обычная форма 1С: что это такое и как с ней работать

Разбираем, что такое обычная форма 1С, как она устроена, чем отличается от управляемой формы и в каких конфигурациях используется. Практические советы по работе.

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

Обычные формы были основным способом создания интерфейса в платформе 8.0 и 8.1 и продолжают использоваться в конфигурациях, работающих в режиме обычного приложения: «Управление торговлей 10.3», «Управление производственным предприятием 1.3», «Бухгалтерия 1.6/2.0» и множестве отраслевых решений. Если вы открываете старую базу и видите «классический» интерфейс с жёстко зафиксированными окнами — перед вами обычные формы.

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

Как устроена обычная форма

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

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

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

Чем обычная форма отличается от управляемой

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

Второе принципиальное отличие — модель исполнения кода. Управляемая форма компилируется дважды: на клиенте и на сервере, и разработчик явно управляет контекстом выполнения через директивы &НаКлиенте и &НаСервере. В обычной форме такого разделения нет — код целиком выполняется на клиенте, что упрощает разработку, но создаёт нагрузку на сеть при клиент-серверной работе.

КритерийОбычная формаУправляемая форма
Размещение элементовВручную, с координатами и привязкамиАвтоматически, по описанию структуры
Исполнение кодаТолько на клиентеКлиент и сервер, с директивами
Веб-клиентНе поддерживаетсяПоддерживается
Тонкий клиентНе поддерживаетсяПоддерживается
Режим запускаОбычное приложениеУправляемое приложение

Когда какая форма уместна

Обычная форма

Поддержка старых конфигураций на обычном приложении. Ограничение: только толстый клиент, нет веб-доступа.

Управляемая форма

Новые разработки и современные конфигурации. Ограничение: более сложная модель программирования с разделением контекста.

Какие виды обычных форм существуют

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

Формы делятся на основные и произвольные. Основная форма назначается в свойствах объекта и открывается платформой автоматически при стандартных действиях пользователя — например, при двойном щелчке по элементу списка. Произвольные формы создаются для специальных сценариев и открываются программно методом ПолучитьФорму().

Отдельно стоит упомянуть общие формы — они не привязаны к конкретному объекту и используются для диалогов настроек, помощников, обработок. Внешние обработки и отчёты (файлы .epf и .erf) также могут содержать обычные формы, которые будут работать при запуске в обычном приложении.

Как создать и отредактировать обычную форму

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

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

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

Как программно работать с обычной формой

Открытие формы из кода выполняется методом ПолучитьФорму(). У объекта метаданных или у самого объекта данных вызывается ПолучитьФорму("ИмяФормы"), после чего у полученной формы вызывается Открыть() или ОткрытьМодально(). Если имя не указано, откроется основная форма соответствующего вида.

Типовые обработчики событий модуля формы: ПриОткрытии() — инициализация при открытии, ПередЗаписью() и ПриЗаписи() — контроль и дополнительные действия при сохранении объекта, обработчики элементов формы — например, ПриИзменении() у поля ввода. Внутри модуля доступен объект данных через свойство, соответствующее основному реквизиту формы.

1c
Форма = Справочники.Номенклатура.ПолучитьФорму("ФормаЭлемента");
Форма.Открыть();

// Модально, с ожиданием закрытия
Результат = Форма.ОткрытьМодально();

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

Типичные проблемы и ограничения обычных форм

Ключевое ограничение — обычные формы работают только в толстом клиенте в режиме обычного приложения. Если конфигурацию запустить в режиме управляемого приложения, обычные формы не откроются: платформа либо покажет автоматически сгенерированную управляемую форму (если обычная не задана как единственная), либо выдаст ошибку при попытке открыть обычную форму программно.

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

Ещё одна распространённая ситуация — «поехавшая» вёрстка при другом разрешении экрана или масштабе шрифтов. Поскольку элементы размещены жёстко, форма, нарисованная под одно разрешение, на другом мониторе может отображаться с обрезанными полями. Лечится корректной настройкой привязок, а не фиксацией размера окна.

Типичные ошибки при работе с обычными формами
01
Не заданы привязки элементов — при изменении размера окна поля обрезаются или наезжают друг на друга
02
Тяжёлые запросы в обработчике ПриОткрытии — форма открывается с заметной паузой
03
Попытка открыть обычную форму в управляемом приложении — ошибка вызова ПолучитьФорму
04
Модальные вызовы в коде, который планируется переносить на управляемые формы — придётся переписывать логику
05
Дублирование бизнес-логики в модуле формы вместо модуля объекта — код невозможно переиспользовать

Как проверить результат и что учесть при миграции

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

Контрольные точки

Как проверить доработанную форму

Изменение размера окна
Норма

Элементы растягиваются и не обрезаются

Тревожный признак

Поля наезжают друг на друга или исчезают

Открытие формы
Норма

Форма открывается без ошибок и заметной задержки

Тревожный признак

Ошибки компиляции модуля или пауза в несколько секунд

Запись объекта
Норма

Данные сохраняются, обработчики отрабатывают

Тревожный признак

Ошибки в ПередЗаписью или потеря введённых данных

Запуск в целевом режиме
Норма

Форма открывается в обычном приложении

Тревожный признак

Ошибка при запуске в управляемом приложении или тонком клиенте

Если планируется переход конфигурации на управляемое приложение, обычные формы придётся перерабатывать в управляемые. Автоматической конвертации не существует: управляемая форма создаётся заново, а код модуля переписывается с разделением на клиентские и серверные процедуры. На практике миграцию делают постепенно, начиная с самых массовых форм — списков и форм документов.

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

Маршрут решения

Как выбрать действие

Конфигурация работает в обычном приложении и переезд не планируетсяДорабатывайте обычные формы как есть, соблюдая привязки и оптимизируя запросы
Планируется переход на управляемое приложение или веб-клиентНовую функциональность создавайте сразу в управляемых формах
Нужна внешняя обработка для старой конфигурацииСоздавайте обработку с обычной формой и проверяйте запуск в толстом клиенте
Форма тормозит в клиент-серверном режимеПеренесите тяжёлые запросы из обработчиков формы в серверные процедуры общего модуля

Частые вопросы

Можно ли открыть обычную форму в управляемом приложении?

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

Как узнать, какие формы в конфигурации обычные?

В конфигураторе откройте свойства формы: у обычной формы нет признака «управляемая», а её модуль не содержит директив компиляции &НаКлиенте и &НаСервере. Также можно проверить режим запуска конфигурации в свойствах корня конфигурации — параметр «Режим запуска».

Почему обычная форма открывается медленно?

Чаще всего причина — тяжёлые запросы или обходы больших выборок в обработчике ПриОткрытии, а также обращения к данным из клиентского кода в клиент-серверном режиме. Вынесите вычисления в серверные процедуры общих модулей и загружайте в форму только нужные данные.

Чем заменить модальное открытие формы?

В обычных формах модальность допустима, но при переносе в управляемые формы используйте метод ОткрытьФорму() с описанием оповещения о закрытии — результат обрабатывается в отдельной процедуре после закрытия формы, без блокировки интерфейса.

Нужно ли изучать обычные формы новичку в 1С?

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

Итог

Что важно запомнить

Обычная форма — классический тип формы 1С с ручным размещением элементов и исполнением всего кода на клиенте. Она работает только в обычном приложении и толстом клиенте. Для старых конфигураций дорабатывайте обычные формы с корректными привязками и оптимизацией запросов; новую функциональность при переходе на современную платформу создавайте в управляемых формах.