Какие директивные компиляции могут быть в модуле формы
1. Атрибуты «где исполнять» (шифруют вызов между клиентом и сервером)
&НаКлиенте
Процедура или функция выполняется только на клиенте (UI-потоке).
<br/>&НаКлиенте
Процедура ОбновитьКартинку(Команда)
// рисуем что-то в форме
КонецПроцедуры
&НаСервере
Выполнение только на сервере (база данных, фоновая задача). Параметры и результат автоматически сериализуются.
<br/>&НаСервере
Функция ПолучитьОстатки(МассивСкладов)
// тяжёлая работа с БД
КонецФункции
&НаКлиентеСервере
Двойная реализация: сначала пробует выполнить на клиенте, если нет — на сервере. Полезно для код-reuse.
<br/>&НаКлиентеСервере
Функция РасчитатьИтого(Таблица)
КонецФункции
2. Привязка к командам и событиям формы
&Команда("ИмяКоманды")
Делает процедуру обработчиком пользовательской команды формы (в разделе «Команды»).
<br/>&Команда("ПечатьОтчёта")
Процедура ПечатьОтчётаКоманда(Команда)
ПоказатьОтчёт();
КонецПроцедуры
&КомандаБезПараметров или &БезПараметров
Для команд, не передающих объект-команду как параметр.
<br/>&КомандаБезПараметров
Процедура ОбновитьДанные()
// нет аргумента «Команда»
КонецПроцедуры
&Переопределение
Если вы расширяете базовую (родительскую) процедуру/функцию формы в расширении.
<br/>&Переопределение
Процедура ПриОткрытииФормы()
// дополняем стандартное
Предок();
// свой код
КонецПроцедуры
3. Общие и вспомогательные атрибуты
&Журналировать
Автоматически пишет в журнал регистрации факт и входные/выходные данные вызова процедуры.
<br/>&Журналировать
Процедура СохранитьДанные(Параметры)
КонецПроцедуры
&ИспользоватьСборку("ИмяСборки")
Подключение внешней .NET-сборки прямо в модуле (редко встречается в формах).
<br/>&ИспользоватьСборку("MyDotNetLibrary")
&ИспользоватьОбщийМодуль("ИмяМодуля")
Чтобы вызвать процедуры из общего модуля как будто они в том же модуле формы.
<br/>&ИспользоватьОбщийМодуль("УправлениеОбменами")
4. Препроцессорные директивы (#…)
4.1. Условная компиляция
Позволяет включать/отключать участки кода в зависимости от платформы или контекста:
Если Сервер Тогда
// код только на сервере
ИначеЕсли Клиент Тогда
// только на клиенте
КонецЕсли
4.2. Группировка кода
За счёт #Область можно сворачивать большие фрагменты:
Область ОбработчикиКоманд
&Команда("Refresh")
Процедура RefreshКоманда(Команда) … КонецПроцедуры
&Команда("Save")
Процедура SaveКоманда(Команда) … КонецПроцедуры
#КонецОбласть
5. Когда и зачем использовать
-
&НаКлиенте / &НаСервере / &НаКлиентеСервере
— чёткое разграничение, чтобы не «упростить» и не сломать сериализацию или производительность. -
&Команда / &БезПараметров
— надёжная привязка обработчиков к кнопкам и пунктам меню, без «магии» из интерфейса. -
&Переопределение
— безопасная доработка типовых форм в расширениях, без копирования базового кода. -
Условная компиляция (#Если … #КонецЕсли)
— писать универсальные модули, работающие и в толстом, и в тонком клиенте, и в кластере сервера. -
Группировка (#Область)
— повышает читаемость длинных модулей, ускоряет навигацию в коде.
Итог
Правильное и осознанное использование директив компиляции позволяет:
-
Сохранять понятное разделение клиент-серверного кода.
-
Обеспечивать кросс-платформенную (тонкий/толстый) работу модулей.
-
Удобно структурировать и документировать большой объём логики в одном модуле формы.
В реальном проекте не стоит «загаживать» модуль избыточными директивами — применяйте только там, где без них невозможно гарантировать корректность работы или удобство сопровождения.