← Назад к вопросам

Что такое контекст формы в 1С?

2.0 Middle🔥 241 комментариев
#Формы и интерфейс

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ответ

Контекст формы — это совокупность всех данных и состояния, которые относятся к конкретной форме в 1С, включая значения реквизитов, переменные, свойства элементов управления и другую информацию.

Определение контекста

Когда вы открываете форму, создаётся её контекст — область памяти, которая содержит:

  1. Реквизиты формы — поля для хранения данных (Объект и его значения)
  2. Переменные формы — временные переменные, существующие только во время работы формы
  3. Таблицы значений — коллекции данных на форме
  4. Состояние элементов управления — видимость, доступность, значения кнопок
  5. Спомогательные данные — параметры открытия, расширения формы и т.д.

Структура контекста формы

Контекст Формы
├── Реквизиты (данные объекта)
│   ├── Объект
│   │   ├── Наименование
│   │   ├── Количество
│   │   └── Цена
│   ├── Ответственный
│   └── Переменная1
├── Переменные формы
│   ├── РежимДобавления
│   ├── ФлагРедактирования
│   └── ВремЧисловое
├── Элементы управления
│   ├── ПолеНаименование
│   ├── ПолеКоличество
│   └── КнопкаСохранить
└── Параметры
    ├── Ключ
    ├── РежимОткрытия
    └── РежимДиалога

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

Основной способ хранения данных в контексте формы:

// В дизайнере формы вы создаёте реквизиты
// Реквизит "Объект" типа "Ссылка на Справочник.Товары"
// Реквизит "Количество" типа "Число"
// Реквизит "Флаг" типа "Булево"

// В коде вы обращаетесь к ним как к переменным
Процедура ПриОткрытии(Отмена)
    // Контекст форм доступен в &НаСервере процедурах
    Объект.Наименование = "Новый товар";
    Количество = 10;  // переменная также в контексте
КонецПроцедуры

Типы переменных в контексте

1. Реквизиты формы — объявлены в дизайнере

Объект        // Основной реквизит (объект справочника/документа)
Ответственный // Дополнительный реквизит (ссылка на пользователя)
Флаг           // Булева переменная

2. Переменные формы — объявлены в коде

Переменная Ваше_Переменная;

Процедура ОбработатьДанные()
    Ваше_Переменная = 42;
КонецПроцедуры

3. Глобальные переменные модуля

// На верхнем уровне модуля формы
Глобальная ПеременнаяМодуля = Новый СписокЗначений();

Передача контекста между клиентом и сервером

Это важный аспект — контекст передаётся между клиентом и сервером:

// На клиенте (тонкий/веб-клиент)
&НаКлиенте
Процедура КнопкаСохранить_Нажатие(Кнопка, ДополнительныеПараметры)
    // Здесь доступен контекст формы
    Если Объект.Наименование = "" Тогда
        Сообщить("Заполните наименование");
        Возврат;
    КонецЕсли;
    
    // Вызов серверной процедуры
    ОсновнаяОбработка();
КонецПроцедуры

// На сервере (толстый клиент)
&НаСервере
Процедура ОсновнаяОбработка()
    // Здесь также доступен весь контекст формы
    // Объект передаётся автоматически (сериализация)
    Объект.Записать();
КонецПроцедуры

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

Практический пример

// Форма справочника "Товары"

Переменная РазвёрнутаФорма = Истина;  // Глобальная переменная модуля

&НаСервере
Процедура ПриОткрытии(Отмена)
    // Реквизиты формы инициализируются автоматически
    // Объект содержит данные справочника
    
    // Добавляем переменную формы
    Если ПараметрыОткрытия.РежимПросмотра = Истина Тогда
        Элементы.ГруппаРедактирования.Видимость = Ложь;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПолеНаименование_ПриИзменении(Элемент)
    // Контекст доступен: Объект.Наименование уже обновлён
    Если ДлинаСтроки(Объект.Наименование) > 100 Тогда
        Элемент.ЦветТекста = WebЦвета.Красный;
    Иначе
        Элемент.ЦветТекста = WebЦвета.ЧёрныйОсновной;
    КонецЕсли;
КонецПроцедуры

Важные свойства контекста

Модифицированность:

Если Модифицирована Тогда
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "Есть несохранённые изменения";
    Сообщение.Сообщить();
КонецЕсли;

Управление элементами:

// Контекст позволяет изменять видимость и доступность
Элементы.КнопкаУдалить.Видимость = Пользователи.ЕстьПраво("Удаление");
Элементы.ПолеДата.ДоступныхДля = РежимДоступностиДляРедактирования.Запрещённый;

Очистка контекста

Когда форма закрывается, её контекст удаляется из памяти. Важно правильно управлять большими данными в контексте:

// Плохо: большой контекст
ТабличнаяЧасть.ВсеДанные.Очистить();  // Сохранит в памяти

// Хорошо: явно удалить
ТабличнаяЧасть = Новый ТаблицаЗначений();

Различие между контекстом формы и контекстом объекта

АспектКонтекст формыОбъект
СуществуетТолько во время открытияВсегда (в БД)
ХранилищеВ памяти клиентаВ БД
ИзмененияВидны сразу на формеВидны только после Записать()
Область видимостиТолько данная формаГлобально

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