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