Управляемые формы 1С
Зачем нужны управляемые формы
Управляемая форма — основной способ показать пользователю данные и принять ввод в современных конфигурациях на платформе 8.3. Форма связывает реквизиты (данные) с элементами (поля, кнопки, таблицы) и командами (действия пользователя).
Код формы выполняется в двух контекстах:
- Клиент — интерфейс, реакция на клики, лёгкая валидация;
- Сервер — работа с базой, тяжёлые вычисления, запросы.
Разделение контекстов — центральная тема разработки под тонким и веб-клиентом.
Конструирование формы
Реквизиты формы
Реквизит — переменная формы с типом. Реквизиты бывают:
- Основной — объект, который редактирует форма (документ, элемент справочника, обработка);
- Дополнительные — служебные данные (фильтры, флаги,
ТаблицаЗначенийдля списка на форме).
Реквизиты создаются в редакторе формы или программно. Имена реквизитов используются в выражениях элементов (Объект.Контрагент, СписокОтбора).
Элементы формы
| Элемент | Назначение |
|---|---|
| Поле ввода | Редактирование реквизита |
| Поле надписи | Только отображение |
| Поле флажка / переключателя | Булево, выбор из вариантов |
| Кнопка | Вызов команды |
| Группа, страницы | Компоновка интерфейса |
| Таблица | Отображение ТаблицаЗначений или табличной части |
| Декорация | Заголовки, отступы |
Элемент привязывается к пути к данным — строке вида Объект.Реквизит или СписокСтрок.Колонка.
Команды
Команда — именованное действие формы или конфигурации.
- Локальные — только на этой форме (
ВыполнитьРасчёт); - Глобальные — из метаданных (стандартные «Записать», «Провести» или добавленные вручную).
Обработчик команды — процедура в модуле формы, обычно с директивой &НаКлиенте.
Клиент и сервер
Директивы компиляции
Перед процедурой или функцией указывают, где будет выполняться код:
&НаКлиенте
Процедура Рассчитать(Команда)
Если НЕ ЗначениеЗаполнено(Объект.Количество) Тогда
Предупреждение("Укажите количество");
Возврат;
КонецЕсли;
Сумма = РассчитатьНаСервере(Объект.Количество, Объект.Цена);
Объект.Сумма = Сумма;
КонецПроцедуры
&НаСервере
Функция РассчитатьНаСервере(Количество, Цена)
Возврат Количество * Цена;
КонецФункции
| Директива | Где выполняется | Типичные задачи |
|---|---|---|
&НаКлиенте | Клиентское приложение | Клики, диалоги, обновление формы |
&НаСервере | Сервер 1С | Запросы, запись в БД, ТаблицаЗначений |
&НаСервереБезКонтекста | Сервер без привязки к форме | Общие расчёты без доступа к Объект формы |
ТаблицаЗначений. Любая работа с данными — через серверную процедуру или запрос на сервере. Подробнее — в таблицах значений.Вызов сервера с клиента
Клиентская процедура вызывает серверную по имени. Платформа сериализует параметры, выполняет серверный код и возвращает результат. Ссылочные типы (СправочникСсылка, ДокументОбъект) передаются по правилам платформы — лишние обращения к серверу замедляют форму.
Паттерн: короткий обработчик на клиенте → один вызов сервера → обновление реквизитов формы.
События формы
Частые обработчики в модуле формы:
| Событие | Когда срабатывает |
|---|---|
ПриСозданииНаСервере | Форма создаётся, можно заполнить реквизиты по умолчанию |
ПриОткрытии | Форма показана пользователю (клиент) |
ПередЗаписью / ПослеЗаписи | Сохранение объекта |
ПриИзменении (элемента) | Пользователь изменил поле |
Тяжёлую инициализацию (запросы, заполнение таблиц) размещайте в ПриСозданииНаСервере, а не в клиентских обработчиках.
Открытие формы из кода
// Существующий объект
ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", Новый Структура("Ключ", СсылкаНаТовар));
// Новый объект
Параметры = Новый Структура;
Параметры.Вставить("ЗначенияЗаполнения", Новый Структура("Наименование", "Новый товар"));
ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", Параметры);
Параметры формы передаются вторым аргументом; в модуле формы их читают в ПриСозданииНаСервере через Параметры.Свойство("Имя", Значение).
Типичные ошибки
| Симптом | Причина | Что сделать |
|---|---|---|
| «Объект недоступен на клиенте» | Запрос или запись в &НаКлиенте | Перенести код в &НаСервере |
| Форма «зависает» | Длинный цикл или запрос на клиенте | Сервер + индикатор или фоновое задание |
| Данные на форме не обновляются | Изменили объект на сервере без возврата на клиент | Вернуть значения или перечитать объект |
| Команда не видна | Не добавлена в командный интерфейс формы | Проверить «Командный интерфейс» в редакторе |
Связанные материалы
- Архитектура и модули — модуль формы среди других модулей конфигурации
- Таблицы значений на форме
- Объекты и проведение
- Первая программа — внешняя обработка с кнопкой
Практика 15 минут
- Создайте внешнюю обработку с управляемой формой.
- Добавьте реквизит
Числои кнопку «Удвоить». - В
&НаКлиентевызовите&НаСерверефункцию, которая умножает число на 2. - Выведите результат через
Сообщитьили поле на форме. - Поставьте точку останова в конфигураторе и пройдите вызов клиент → сервер.
Лаборатория — форма документа (60 минут)
Выполняйте после мини-склада, когда есть документ ПоступлениеТоваров.
| Этап | Действие |
|---|---|
| 1 | Откройте форму документа → добавьте команду «Пересчитать сумму» |
| 2 | &НаКлиенте — обработчик вызывает ПересчитатьСуммуНаСервере() |
| 3 | &НаСервере — цикл по Объект.Товары, сумма в реквизит Объект.СуммаДокумента (добавьте реквизит) |
| 4 | При изменении Количество в ТЧ — подписка ТоварыКоличествоПриИзменении на клиенте с тем же вызовом |
| 5 | Добавьте ПередЗаписью на сервере — запрет записи при пустой ТЧ |
Критерий: при изменении количества сумма на форме обновляется без записи документа; при пустых строках запись блокируется с сообщением.
Параметры при открытии
В общей форме списка документов добавьте команду «Создать копию» — открытие с параметром:
&НаКлиенте
Процедура СоздатьКопию(Команда)
Параметры = Новый Структура("ЗначенияЗаполнения", Новый Структура("Склад", Объект.Склад));
ОткрытьФорму("Документ.ПоступлениеТоваров.ФормаОбъекта", Параметры);
КонецПроцедуры
Проверка себя
- Чем реквизит формы отличается от реквизита объекта метаданных?
- Когда нужна директива
&НаСервереБезКонтекста? - Почему запрос в обработчике
ПриНажатиина клиенте вызовет ошибку в тонком клиенте?
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Платформа 1С - архитектура среды исполнения, назначение и место в автоматизации бизнес-процессов. История 1С - развитие платформы, ключевые этапы роста и влияние на цифровизацию бизнеса и госсектора. Экосистема 1С - продукты платформы, инструменты разработки, внедрение и сопровождение корпоративных решений. Архитектура платформы 1С, объекты метаданных, регистры, модули и исполнение прикладного кода. Пошаговое создание учебной конфигурации: справочники, документ, регистры, проведение, подсистемы и роли. Синтаксис и пунктуация 1С - базовые правила записи кода, операторы и структура выражений. Типизация, набор правил определения типа данных значений языка. Управление потоком выполнения в 1С - последовательность операций, ветвления и контроль выполнения сценариев. Функции и процедуры 1С - различия, правила использования и организация переиспользуемой бизнес-логики. Объекты и классы 1С - модель метаданных, экземпляры объектов и работа с прикладными сущностями. Данные — это конкретные записи, созданные пользователями или автоматически системой в рамках определённых объектов. Каждая запись имеет уникальный идентификатор и соответствует описанию в метаданных. Обработка ошибок в 1С - перехват исключений, диагностика сбоев и устойчивые сценарии обработки.Платформа 1С
История 1С
Экосистема 1С
Архитектура и мета-объекты 1С
Конфигурирование — мини-склад
Синтаксис и пунктуация 1С
Переменные и типы данных 1С
Управление потоком выполнения 1С
Функции и процедуры 1С
Объекты и классы 1С
Работа с базами данных 1С
Обработка ошибок 1С