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

Какие директивы компиляции могут быть в модуле управляемой формы?

1.7 Middle🔥 191 комментариев
#Конфигурации и типовые#Опыт и софт-скиллы#Стандарты разработки

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

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

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

Какие директивы компиляции могут быть в модуле управляемой формы

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

Основные директивы компиляции

1. Директива &НаКлиенте

Обозначает, что процедура выполняется только на клиентской части (в браузере).

&НаКлиенте
Процедура ОбновитьДанные()
    // Этот код выполняется только на клиенте
    // Здесь можно работать с элементами управления формы
    Элементы.ТекущееОкно.Видимость = Ложь;
КонецПроцедуры

Применение:

  • Работа с элементами управления (кнопки, поля ввода)
  • Изменение видимости и доступности элементов
  • Обработка событий мыши и клавиатуры
  • Диалоговые окна и сообщения
  • Работа с JavaScript интеграциями

2. Директива &НаСервере

Обозначает, что процедура выполняется только на серверной части (на 1С сервере).

&НаСервере
Процедура ПолучитьДанныеИзБазы()
    // Этот код выполняется только на сервере
    // Здесь можно работать с базой данных
    Запрос = Новый Запрос();
    Запрос.Текст = "Выбрать * Из Справочник.Номенклатура";
    Результат = Запрос.Выполнить();
КонецПроцедуры

Применение:

  • Работа с базой данных
  • Чтение и запись данных
  • Выполнение запросов
  • Работа с объектами базы (справочники, документы)
  • Правило доступа к данным

3. Директива &НаКлиентеНаСервере

Обозначает, что процедура может выполняться как на клиенте, так и на сервере. Очень полезна для функций, которые работают в обоих контекстах.

&НаКлиентеНаСервере
Функция ВычислитьСумму(Количество, Цена)
    Возврат Количество * Цена;
КонецФункции

&НаКлиенте
Процедура КнопкаПереучётНажатие(Команда)
    // На клиенте
    Сумма = ВычислитьСумму(10, 100); // Работает
КонецПроцедуры

&НаСервере
Процедура СохранитьДокумент()
    // На сервере
    Итого = ВычислитьСумму(Объект.Количество, Объект.Цена); // Работает
КонецПроцедуры

Применение:

  • Математические функции
  • Функции проверки значений
  • Функции форматирования строк
  • Функции валидации данных

4. Директива &НаКлиентеНаСервереБезКонтекста

Процедура без контекста — это значит, что она не использует переменные из контекста формы (Объект, Элементы и т.д.). Такие процедуры компилируются более эффективно.

&НаКлиентеНаСервереБезКонтекста
Функция ПреобразоватьСтроку(Строка)
    // Не используем Объект, Элементы и другие переменные контекста
    Возврат ВРег(Строка);
КонецФункции

Преимущества:

  • Быстрее компилируется
  • Меньше памяти
  • Может использоваться в разных модулях

5. Директива &Игнорировать

Указывает, что процедура не используется и компилятор не должен выдавать предупреждение о неиспользуемом коде.

&Игнорировать
Процедура СтарыйКодДляМиграции()
    // Этот код оставлен для совместимости
    // но больше не используется
КонецПроцедуры

6. Директива &Атом

Указывает, что операция должна быть атомарной (неделимой) и выполняться в одной транзакции.

&НаСервере
&Атом
Процедура СохранитьДокумент()
    // Если произойдёт ошибка на любом шаге,
    // все изменения откатятся
    Объект.Записать();
    Константы.ПоследнийНомер.Установить(Константы.ПоследнийНомер.Получить() + 1);
КонецПроцедуры

Конкретные директивы для управляемых форм

Полный пример модуля управляемой формы:

// Модуль формы "НоменклатураФорма"

&НаКлиенте
Процедура ПриОткрытии()
    // Выполняется на клиенте при открытии формы
    ОбновитьДанные();
КонецПроцедуры

&НаСервере
Процедура ОбновитьДанные()
    // Получить свежие данные из БД
    Запрос = Новый Запрос();
    Запрос.Текст = "Выбрать * Из Справочник.Номенклатура";
    Результат = Запрос.Выполнить();
    // Передача на клиент
КонецПроцедуры

&НаКлиентеНаСервере
Функция ПроверитьЗаполнение()
    // Может использоваться везде
    Если Объект.Наименование = "" Тогда
        Возврат Ложь;
    КонецЕсли;
    Возврат Истина;
КонецФункции

&НаКлиент
Процедура КнопкаСохранитьНажатие(Команда)
    // Событие нажатия кнопки
    Если ПроверитьЗаполнение() Тогда
        СохранитьНаСервере();
        Сообщение("Данные сохранены");
    Иначе
        Сообщение("Заполните необходимые поля");
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура СохранитьНаСервере()
    Объект.Записать();
КонецПроцедуры

Когда какую директиву использовать

ЗадачаДирективаПример
Работа с элементами формыНаКлиентеИзменить видимость поля
Работа с БДНаСервереЗагрузить данные
ВычисленияНаКлиентеНаСерверРасчёт суммы
Атомарная операцияАтомСохранение с инкрементом
Невиспользуемый кодИгнорироватьLegacy код

Типичные ошибки

Ошибка 1: Обращение к элементам формы на сервере

// НЕПРАВИЛЬНО
&НаСервере
Процедура ОбновитьДанные()
    Элементы.Таблица.Видимость = Ложь; // ОШИБКА!
КонецПроцедуры

Правильно:

&НаСервере
Процедура ОбновитьДанныеНаСервере()
    // Работаем с данными
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанные()
    ОбновитьДанныеНаСервере();
    // Теперь работаем с элементами
    Элементы.Таблица.Видимость = Ложь;
КонецПроцедуры

Ошибка 2: Использование переменных контекста в НаКлиентеНаСервереБезКонтекста

// НЕПРАВИЛЬНО
&НаКлиентеНаСервереБезКонтекста
Функция ВычислитьЦену()
    Возврат Объект.Цена * 1.2; // ОШИБКА! Нет доступа к Объект
КонецФункции

// ПРАВИЛЬНО
&НаКлиентеНаСервереБезКонтекста
Функция ВычислитьЦену(Цена)
    Возврат Цена * 1.2; // Передаём как параметр
КонецФункции

Порядок директив

Директивы должны идти перед объявлением процедуры/функции:

&НаКлиенте
&Атом  // Если нужны несколько директив
Процедура МояПроцедура()
    // код
КонецПроцедуры

Директивы компиляции — это мощный инструмент для оптимизации и контроля поведения кода в 1С. Правильное их использование делает приложение более надёжным и производительным.

Какие директивы компиляции могут быть в модуле управляемой формы? | PrepBro