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