Что с чем путают в 1С

НаСервере и НаСервереБезКонтекста в 1С:
что передавать в процедуру

Обе директивы относятся к серверу, но доступ к данным формы у них разный. Разберём это на коротком расчёте, где сразу видно, откуда берутся количество и цена.

Клиентский обработчик Рассчитать вызывает НаСервере, где читаются реквизиты формы
  • Контекст формы и явные параметры
  • Два варианта одного расчёта
  • Без лишних серверных вызовов
  • Граница учебного примера
Содержание

Подготовьте реквизиты формы

В управляемой форме учебной обработки создайте числовые реквизиты «Количество», «Цена», «Сумма». Добавьте команду «Рассчитать» и её клиентский обработчик. Введите количество 2 и цену 250.

Оба серверных варианта ниже предназначены для модуля этой формы. Не переносите их без изменений в общий модуль: у общих модулей свои свойства доступности и другой способ вызова.

Управляемая форма 1С: реквизиты Количество, Цена и Сумма, поля ввода и команда Рассчитать
Справа — три числовых реквизита, слева — элементы, которые показывают их пользователю, и команда «Рассчитать». Это форма именно учебного расчёта из статьи, открытая в Конфигураторе.

Вариант с контекстом формы

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

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

Клиентский обработчик Рассчитать вызывает НаСервере, где читаются реквизиты формы
В модуле видна граница: клиентская процедура вызывает серверную, а серверная обращается к Количество, Цена и Сумма без параметров. Результат запуска этого же кода показан ниже.
Учебный пример 1С
&НаКлиенте
Процедура Рассчитать(Команда)
    РассчитатьНаСервере();
КонецПроцедуры

&НаСервере
Процедура РассчитатьНаСервере()
    Сумма = Количество * Цена;
КонецПроцедуры

Вариант без контекста формы

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

Не вставляйте оба клиентских обработчика одновременно: у них одинаковое имя. Сначала проверьте один вариант, затем замените его вторым и повторите те же данные.

Учебный пример 1С
&НаКлиенте
Процедура Рассчитать(Команда)
    Сумма = СтоимостьНаСервере(Количество, Цена);
КонецПроцедуры

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

Без контекста не означает без проверок

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

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

Проверьте вызов и результат

Для 2 и 250 оба варианта дают 500. Измените количество на 3: ожидается 750. В собственной учебной базе поставьте точку останова в серверном методе: F9 в Windows и macOS (на Mac при необходимости Fn+F9). Запустите отладку через F5 (на Mac при необходимости Fn+F5), проверьте подключение серверного выполнения и убедитесь, что одно нажатие приводит к одному вызову.

Затем оставьте умножение на клиенте и объясните, почему результат для этой задачи не изменился. Для следующего упражнения выберите настоящую серверную работу: получить сведения о выбранном товаре. Передайте только нужную ссылку, не весь большой набор данных формы.

  1. С контекстом формы — 500

    Запущен первый вариант кода. Серверная процедура прочитала реквизиты формы и изменила Сумма.

    Учебный расчёт с контекстом формы в 1С: количество 2, цена 250, сумма 500
    Реальный запуск первого варианта: 2 × 250 = 500. На форме не видно места выполнения — его определяем по модулю, а не по внешнему виду полей.
  2. Без контекста формы — тоже 500

    Запущен второй вариант. Количество и цена переданы параметрами, функция вернула результат клиентскому обработчику.

    Учебный расчёт без контекста формы в 1С: количество 2, цена 250, сумма 500
    Те же исходные данные и итог во втором варианте. Совпадение результата не делает два способа обращения к данным одинаковыми.

Самопроверка

Частые вопросы

Без контекста работает на клиенте?

Нет. Это серверный метод, который не получает контекст формы.

Этот вариант всегда быстрее?

Нет универсальной гарантии. Нужно учитывать объём передаваемых данных, число вызовов и работу внутри метода.

Можно ли писать в базу из клиентского обработчика?

В управляемом приложении работу с базой организуют на сервере с проверкой прав и входных данных.

Первичные источники

Что проверить дополнительно

·

Полезный материал

Поделиться статьёй

Сохраните материал или отправьте его тому, кому он пригодится.

Шаг 3 из 5

Формы 1С: от первой кнопки до сохранения заказа

Закрепите результат: рассчитайте заказ и проверьте пустое поле, отрицательную цену и повторное нажатие.

Следующий шаг

От прочитанного примера — к своему решению

В «1С код» — 153 бесплатные задачи по языку, коллекциям и запросам. Формат похож на LeetCode: небольшое условие, ваше решение и результат проверки. Начните с простой задачи и попробуйте объяснить свой код.

Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.
Попробовать «1С код» бесплатно →