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

В чём разница между директивами &НаСервере и &НаСервереБезКонтекста?

2.3 Middle🔥 201 комментариев
#Стандарты разработки#Формы и интерфейс

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

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

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

Ответ

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

Основная разница

&НаСервере — выполняется на сервере с доступом к контексту формы (переменные формы, реквизиты, управляемые элементы).

&НаСервереБезКонтекста — выполняется на сервере без доступа к контексту формы, это обычная серверная функция.

Детальное сравнение

Аспект&НаСервере&НаСервереБезКонтекста
Доступ к контексту формыДа, полный доступНет, только параметры
Доступ к реквизитамДа, автоматическиНет, через параметры
ПроизводительностьМедленнее (сериализация контекста)Быстрее (минимум данных)
Использование памятиБольше (копирование контекста)Меньше
Синтаксис вызоваОбъект.МояПроцедура()МояПроцедура() (нужна передача параметров)
Область примененияИзменение формы, работа с элементамиУтилиты, вспомогательные функции

Примеры использования

&НаСервере — с контекстом

&НаСервере
Процедура ЗаполнитьДанные()
    // Доступ к реквизитам формы
    Объект.Сумма = 100;
    Объект.НДС = 18;
    
    // Доступ к управляемым элементам
    Элементы.ПолеНаименование.Видимость = Истина;
    
    // Изменения сразу в контексте
КонецПроцедуры

// Вызов
ЗаполнитьДанные();  // Контекст передаётся автоматически

&НаСервереБезКонтекста — без контекста

&НаСервереБезКонтекста
Функция ВычислитьСумму(Товары, НДСПроцент)
    Результат = 0;
    Для каждого Товар Из Товары Цикл
        Результат = Результат + Товар.Цена * Товар.Количество;
    КонецЦикла;
    Результат = Результат * (1 + НДСПроцент / 100);
    Возврат Результат;
КонецФункции

// Вызов требует передачи параметров
Сумма = ВычислитьСумму(Объект.Товары, 18);

Практические рекомендации

Используйте &НаСервере когда:

  • Нужно изменить реквизиты объекта формы
  • Нужно управлять видимостью/доступностью элементов
  • Нужно заполнить таблицы значений на форме
  • Логика тесно связана с состоянием формы

Используйте &НаСервереБезКонтекста когда:

  • Чистые вычисления без доступа к состоянию формы
  • Утилиты для работы с данными
  • Функции, которые можно переиспользовать в разных местах
  • Нужна максимальная производительность

Пример комбинированного использования

// Утилита для расчёта
&НаСервереБезКонтекста
Функция РассчитатьНДС(Сумма, ПроцентНДС)
    Возврат Сумма * ПроцентНДС / 100;
КонецФункции

// Заполнение формы с использованием утилиты
&НаСервере
Процедура ПересчитатьСумму()
    Объект.НДС = РассчитатьНДС(Объект.СуммаБезНДС, 18);
    Объект.СуммаСНДС = Объект.СуммаБезНДС + Объект.НДС;
КонецПроцедуры

Производительность и оптимизация

Важный момент: При вызове &НаСервере из клиента целый контекст формы сериализуется, отправляется на сервер, там десериализуется, выполняется, затем результаты сериализуются обратно. Это дорогостоящая операция.

Для частых расчётов лучше использовать &НаСервереБезКонтекста, так как передаются только необходимые параметры.

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