К статье
Практический материал

Администрирование · 11 мин

Как отключить текущие серверные вызовы в 1С

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

Текущие серверные вызовы — это обращения клиентского приложения 1С к серверу, которые платформа выполняет при открытии форм, пересчёте данных, обращении к реквизитам объектов и выполнении процедур с директивой &НаСервере. Когда таких вызовов слишком много, интерфейс начинает «подтормаживать»: каждое нажатие сопровождается паузой, особенно заметной при работе через интернет или на медленном канале.

Полностью «выключить» серверные вызовы нельзя — клиент-серверная архитектура 1С построена на них. Но можно отключить лишние вызовы, которые возникают из-за неоптимального кода, неверных настроек формы и избыточных обработчиков. Результат — сокращение количества обращений к серверу в разы и заметное ускорение работы пользователей.

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

Что такое серверный вызов и почему он замедляет работу

В управляемом приложении 1С код выполняется в двух средах: на клиенте (интерфейс, простые вычисления) и на сервере (запросы к базе данных, обращения к объектам, проведение документов). Каждый раз, когда клиентскому коду нужны данные с сервера, платформа выполняет вызов — упаковывает запрос, передаёт по сети, выполняет на сервере и возвращает результат. Даже «пустой» вызов занимает время: при работе через веб-сервер или VPN задержка одного вызова может составлять десятки и сотни миллисекунд.

Проблема усугубляется тем, что вызовы часто идут пакетами. Например, обращение в клиентском коде к реквизиту объекта через точку (Объект.Контрагент.ИНН) может порождать несколько отдельных обращений к серверу: сначала за ссылкой, потом за данными объекта. Форма с десятком таких обращений при открытии генерирует десятки вызовов — и пользователь ждёт несколько секунд, хотя «ничего тяжёлого» не происходит.

Как найти источники лишних вызовов

Прежде чем что-то отключать, нужно понять, какие именно вызовы выполняются и откуда они инициируются. Основной инструмент — замер производительности в конфигураторе: меню «Отладка» → «Замер производительности». Запустите замер, выполните в клиенте проблемное действие (например, откройте форму), остановите замер и изучите дерево вызовов. В нём видно, какие процедуры и обращения заняли больше всего времени.

Дополнительно полезен технологический журнал: включите в файле logcfg.xml сбор событий CALL и SCALL — они фиксируют каждый клиентский и серверный вызов с длительностью. Это позволяет точно посчитать, сколько обращений происходит при конкретном действии пользователя, и сравнить цифры до и после оптимизации.

Типичные источники лишних вызовов: обращения к реквизитам объектов через точку в клиентском коде, процедуры &НаСервере, вызываемые в цикле, обработчики ожидания с маленьким интервалом, выполняющие серверный код, и неявные вызовы при работе динамических списков и полей ввода с автоподбором.

Форма открывается дольше 2–3 секундВероятны множественные вызовы при создании формы

Сделайте замер производительности при открытии

Подтормаживание при вводе в полеАвтоподбор или обработчик изменения дёргает сервер

Проверьте обработчики ПриИзменении и АвтоПодбор

Периодические паузы без действийРаботает обработчик ожидания с серверным кодом

Найдите ПодключитьОбработчикОжидания в модуле формы

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

Считайте количество вызовов, а не только их длительность

Как отключить вызовы через директивы компиляции

Самый частый случай — процедура или функция помечена директивой &НаСервере, хотя ничего серверного в ней нет: она работает только с данными формы, вычисляет суммы, управляет видимостью элементов. Такой код вызывает обращение к серверу без всякой необходимости. Решение — сменить директиву на &НаКлиенте, если процедура не обращается к базе данных, запросам и объектам.

Обратная ситуация: клиентский код обращается к данным объекта через точку, и платформа тянет их с сервера по кусочкам. Здесь правильнее сделать один контекстный серверный вызов (&НаСервере в модуле формы), который за одно обращение соберёт все нужные данные и вернёт их структурой. Один «толстый» вызов всегда дешевле десяти «тонких».

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

Порядок оптимизации модуля формы
  1. 1
    Сделайте замер производительности при проблемном действии
  2. 2
    Найдите серверные процедуры без обращений к базе данных
  3. 3
    Смените директиву на &НаКлиенте
  4. 4
    Обращения к данным объекта соберите в один серверный вызов, возвращающий структуру
  5. 5
    Повторите замер и сравните количество вызовов
  6. 6
    Проверьте работу формы вручную по основному сценарию

Как уменьшить вызовы в типовых механизмах без доработки кода

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

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

Ещё один безболезненный шаг — использование тонкого клиента вместо веб-клиента там, где это возможно: при одинаковом числе вызовов тонкий клиент обычно работает быстрее за счёт более эффективного протокола обмена. Это не отключает вызовы, но снижает их стоимость для пользователя.

Способы сократить вызовы

Смена директивы на &НаКлиенте

Подходит для кода без обращений к базе; требует доступа к конфигуратору и тестирования

Один контекстный вызов вместо обращений через точку

Лучший вариант для чтения данных объекта; требует доработки модуля формы

Настройка динамических списков и полей ввода

Без изменения кода; эффект зависит от конкретной формы

Переход на тонкий клиент

Не уменьшает число вызовов, но ускоряет каждый; не всегда доступен по лицензиям и инфраструктуре

Ограничения и риски при отключении вызовов

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

Есть и функциональные риски. Код, перенесённый на клиент, теряет доступ к серверному контексту: запросам, менеджерам объектов, привилегированному режиму. Если в процедуре скрыто обращение к базе (например, через вызов общего серверного модуля), после смены директивы она перестанет компилироваться или начнёт работать иначе. Поэтому каждое изменение проверяется на реальном сценарии, а не только фактом «формы открылась».

Отдельное предупреждение по технологическому журналу: сбор событий CALL и SCALL на рабочей базе сильно увеличивает объём логов и нагрузку на диск. Включайте его на ограниченное время и на конкретные процессы, после диагностики отключайте.

Как проверить результат оптимизации

Критерий успеха — не субъективное «стало быстрее», а измеримые цифры. Повторите замер производительности на том же сценарии и сравните: количество вызовов, суммарное время, время открытия формы. Хорошим результатом считается сокращение числа вызовов в несколько раз при сохранении полной функциональности формы.

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

Контрольные точки

Как проверить результат

Количество вызовов в замере
Норма

Сократилось в разы по сравнению с исходным замером

Тревожный признак

Осталось прежним или выросло

Время открытия формы
Норма

Заметно меньше при том же сценарии и канале связи

Тревожный признак

Не изменилось — источник лишних вызовов не найден

Работоспособность формы
Норма

Все кнопки, поля и проведение работают как раньше

Тревожный признак

Часть функций недоступна или выдаёт ошибки

Технологический журнал
Норма

События CALL/SCALL отключены после диагностики

Тревожный признак

Логирование осталось включённым на рабочей базе

Типичные ошибки при работе с серверными вызовами

Типичные ошибки
01
Меняют директивы вслепую, без замера — убирают не те вызовы, а проблема остаётся
02
Переносят на клиент код с обращением к базе — форма перестаёт компилироваться или работать
03
Правят типовую конфигурацию напрямую — теряют поддержку и ломают обновление
04
Оптимизируют на локальной базе и не проверяют на реальном канале — эффект у пользователей не виден
05
Оставляют включённым технологический журнал — растут логи и падает производительность дисков

Главная ошибка — оптимизация без измерений. Серверные вызовы накапливаются незаметно, и «на глаз» определить их источник почти невозможно. Второе место занимает правка рабочей базы без копии: модуль формы — чувствительное место, и откат изменений должен быть быстрым.

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

Можно ли полностью отключить серверные вызовы в 1С?

Нет. Клиент-серверная архитектура платформы предполагает обращения к серверу для работы с данными. Можно только убрать лишние вызовы и объединить мелкие обращения в более крупные, сократив их общее количество.

Чем отличаются директивы &НаСервере и &НаСервереБезКонтекста?

Контекстная серверная процедура имеет доступ к данным формы и реквизитам объекта, но при вызове передаёт на сервер весь контекст формы. Бесконтекстная передаёт только параметры — она «дешевле», но не видит данные формы. Для разовых операций с данными часто выгоднее бесконтекстный вызов с явными параметрами.

Почему форма тормозит только у удалённых пользователей?

При высокой сетевой задержке стоимость каждого вызова возрастает. Форма с десятками мелких обращений локально открывается быстро, а через интернет — за несколько секунд. Решение — уменьшать именно количество вызовов, а не их длительность на сервере.

Как узнать, сколько вызовов делает форма, без конфигуратора?

Через технологический журнал с событиями CALL и SCALL — он фиксирует каждый вызов с длительностью. Настройка выполняется в файле logcfg.xml на сервере, доступ к конфигуратору не обязателен, но нужны права администратора сервера 1С.

Безопасно ли менять директивы в типовой конфигурации?

Прямая правка модулей снимает объекты с полной поддержки и усложняет обновления. Безопасный путь — расширение конфигурации: переопределите обработчики формы в расширении, а типовой код останется нетронутым.

Что делать, если после оптимизации форма стала выдавать ошибки?

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

Итог

Что важно запомнить

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