Перейти к основному содержимому

Управляемые формы 1С

Разработчику

Play ITЗагрузка интерактивного демо…


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

Код формы выполняется в двух контекстах:

  • Клиент — интерфейс, реакция на клики, лёгкая валидация;
  • Сервер — работа с базой, тяжёлые вычисления, запросы.

Разделение контекстов — центральная тема разработки под тонким и веб-клиентом.


Конструирование формы

Реквизиты формы

Реквизит — переменная формы с типом. Реквизиты бывают:

  • Основной — объект, который редактирует форма (документ, элемент справочника, обработка);
  • Дополнительные — служебные данные (фильтры, флаги, ТаблицаЗначений для списка на форме).

Реквизиты создаются в редакторе формы или программно. Имена реквизитов используются в выражениях элементов (Объект.Контрагент, СписокОтбора).

Элементы формы

ЭлементНазначение
Поле вводаРедактирование реквизита
Поле надписиТолько отображение
Поле флажка / переключателяБулево, выбор из вариантов
КнопкаВызов команды
Группа, страницыКомпоновка интерфейса
ТаблицаОтображение ТаблицаЗначений или табличной части
ДекорацияЗаголовки, отступы

Элемент привязывается к пути к данным — строке вида Объект.Реквизит или СписокСтрок.Колонка.

Команды

Команда — именованное действие формы или конфигурации.

  • Локальные — только на этой форме (ВыполнитьРасчёт);
  • Глобальные — из метаданных (стандартные "Записать", "Провести" или добавленные вручную).

Обработчик команды — процедура в модуле формы, обычно с директивой &НаКлиенте.


Клиент и сервер

Директивы компиляции

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

Код ITЗагрузка примера кода…

ДирективаГде выполняетсяТипичные задачи
&НаКлиентеКлиентское приложениеКлики, диалоги, обновление формы
&НаСервереСервер 1СЗапросы, запись в БД, ТаблицаЗначений
&НаСервереБезКонтекстаСервер без привязки к формеОбщие расчёты без доступа к Объект формы
Тонкий и веб-клиент

На клиенте нельзя напрямую обращаться к базе и создавать ТаблицаЗначений. Любая работа с данными — через серверную процедуру или запрос на сервере. Подробнее — в таблицах значений.

Вызов сервера с клиента

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

Паттерн: короткий обработчик на клиенте → один вызов сервера → обновление реквизитов формы.


События формы

Частые обработчики в модуле формы:

СобытиеКогда срабатывает
ПриСозданииНаСервереФорма создаётся, можно заполнить реквизиты по умолчанию
ПриОткрытииФорма показана пользователю (клиент)
ПередЗаписью / ПослеЗаписиСохранение объекта
ПриИзменении (элемента)Пользователь изменил поле

Тяжёлую инициализацию (запросы, заполнение таблиц) размещайте в ПриСозданииНаСервере, а не в клиентских обработчиках.


Открытие формы из кода

// Существующий объект
ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", Новый Структура("Ключ", СсылкаНаТовар));

// Новый объект
Параметры = Новый Структура;
Параметры.Вставить("ЗначенияЗаполнения", Новый Структура("Наименование", "Новый товар"));
ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", Параметры);

Параметры формы передаются вторым аргументом; в модуле формы их читают в ПриСозданииНаСервере через Параметры.Свойство("Имя", Значение).


Типичные ошибки

СимптомПричинаЧто сделать
"Объект недоступен на клиенте"Запрос или запись в &НаКлиентеПеренести код в &НаСервере
Форма "зависает"Длинный цикл или запрос на клиентеСервер + индикатор или фоновое задание
Данные на форме не обновляютсяИзменили объект на сервере без возврата на клиентВернуть значения или перечитать объект
Команда не виднаНе добавлена в командный интерфейс формыПроверить "Командный интерфейс" в редакторе

Связанные материалы