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