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