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

Почему процедура, помеченная &НаСервереБезКонтекста, не может обращаться к данным формы

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

В платформе 1С:Предприятие существует механизм разделения кода на клиентскую и серверную части. Это необходимо для оптимизации работы приложения и обеспечения безопасности данных. Одним из ключевых элементов этого механизма является использование директивы компиляции &НаСервереБезКонтекста.

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

Директива &НаСервереБезКонтекста указывает, что процедура или функция должна выполняться на сервере и не имеет доступа к контексту клиентской формы. Это означает, что такая процедура не может взаимодействовать с данными, которые находятся на клиентской стороне, например, с элементами управления формы или переменными, определенными в модуле формы.

Почему это важно

  1. Безопасность и производительность: Выполнение кода на сервере позволяет защитить данные и логику от несанкционированного доступа и манипуляций на клиентской стороне. Это также позволяет использовать серверные ресурсы для выполнения сложных вычислений, освобождая клиент от этой нагрузки.

  2. Изоляция контекста: Процедуры, помеченные &НаСервереБезКонтекста, изолированы от клиентского контекста, что предотвращает случайное или намеренное изменение данных формы, которые могут быть критичными для бизнес-логики.

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

Рассмотрим пример, где необходимо выполнить сложный расчет на сервере:

&НаСервереБезКонтекста
Процедура ВыполнитьРасчет(Параметры)
    // Здесь выполняется сложный расчет на сервере
    Результат = СложныйРасчет(Параметры);
​
    // Возвращаем результат на клиент
    Возврат Результат;
КонецПроцедуры
  • &НаСервереБезКонтекста: Указывает, что процедура выполняется на сервере без доступа к клиентскому контексту.
  • Параметры: Параметры, передаваемые в процедуру, должны быть сериализуемыми, так как они передаются между клиентом и сервером.
  • СложныйРасчет: Внутри процедуры выполняется расчет, который может быть ресурсоемким и требует серверных мощностей.
  • Возврат Результат: Результат вычислений возвращается на клиентскую часть для дальнейшего использования.

Ограничения

  • Нет доступа к данным формы: Процедура не может напрямую обращаться к элементам управления или переменным формы.
  • Только сериализуемые данные: Параметры и возвращаемые значения должны быть сериализуемыми, чтобы их можно было передать между клиентом и сервером.

Заключение

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

Тема: Формы и клиент-сервер
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки