Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

1C_EXCESSIVE_SERVER_CALLS 1С:Предприятие и СУБД

Оптимизация клиент-серверного взаимодействия 1С: контекстные вызовы

Обновлено: 26.08.2026 · Официальная документация ↗
  • Интерфейс управляемого приложения «лагает» и подвисает при изменении реквизитов формы.
  • Большое количество серверных вызовов в технологическом журнале по событию CALL.
  • Высокий сетевой трафик между тонкими клиентами и сервером 1С.

1. Разница директив &НаСервере и &НаСервереБезКонтекста

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

2. Рефакторинг кода: переход на вызовы без контекста

// ПЛОХО: Передается вся форма со всеми строками табличных частей!
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
    ПолучитьЦенуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПолучитьЦенуНаСервере()
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    ТекущаяСтрока.Цена = Ценообразование.ПолучитьЦену(ТекущаяСтрока.Номенклатура);
КонецПроцедуры

// ХОРОШО: Передаются только конкретные значения, форма не гоняется по сети
&НаКлиенте
Процедура НоменклатураПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    ТекущиеДанные.Цена = ПолучитьЦенуБезКонтекста(ТекущиеДанные.Номенклатура, Объект.Дата);
КонецПроцедуры

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

3. Минимизация вызовов внутри циклов на клиенте

Никогда не вызывайте сервер внутри цикла обработки табличной части на клиенте. Выполняйте всю обработку за один серверный вызов.

💡 Практика специалистов: Золотое правило оптимизации интерфейса 1С: один пользовательский клик = максимум один вызов сервера. Все проверки и предварительные расчеты выполняйте на клиенте или пакетом.

Частые вопросы (FAQ)

Почему директива &НаСервере замедляет работу через медленный интернет?

При каждом вызове &НаСервере сериализуется весь XML/JSON контекст управляемой формы. Если в табличной части 1000 строк, размер пакета может достигать нескольких мегабайт на каждый клик.

Когда обязательно использовать директиву &НаСервере с контекстом?

Только тогда, когда на сервере требуется напрямую модифицировать свойства элементов интерфейса, видимость кнопок или перечитывать объект целиком.

Как замерить количество клиент-серверных вызовов в 1С?

В режиме '1С:Предприятие' включите 'Показывать показатели производительности' в меню настроек параметров (отобразится счетчик вызовов, объем переданных данных и время сервера).

Что такое кэширование на клиенте?

Сохранение редко меняющихся данных (например, структуры констант или настроек пользователя) в переменных модуля клиентского приложения для исключения повторных запросов к серверу.

Полезные материалы
Рекомендуем