При запуске тонкого клиента «1С:Предприятие» (особенно в процессе разработки или после обновления платформы) в левом нижнем углу экрана часто появляется небольшое всплывающее окно с загадочными цифрами: «Текущие вызовы: 0, Накопленные вызовы: 7». Через несколько секунд эта плашка бесследно исчезает, но при совершении любых действий пользователя (открытие формы, проведение документа) возникает снова. В этой статье мы подробно разберем, что означает это окно, для чего оно нужно разработчикам, почему оно появляется у обычных пользователей и как его правильно настроить или полностью отключить.
Появление этой панели связано со встроенным механизмом платформы «1С:Предприятие», предназначенным для оценки производительности и оптимизации кода управляемого приложения. При проектировании современных конфигураций критически важно минимизировать объем трафика между клиентским приложением и сервером, а также сократить частоту обращений к серверной части. Данное окно в режиме реального времени визуализирует нагрузку на каналы связи.
Давайте проанализируем полный состав показателей производительности, которые умеет отслеживать этот инструмент:
Обычным пользователям эти технические параметры не несут никакой полезной информации и могут сильно отвлекать от работы. Давайте разберем по шагам, как выключить отображение этого окна.
Способ 1. Отключение непосредственно в режиме «1С:Предприятие»
Для отключения панели выполним следующие действия:
Если в вашем меню «Параметры» данный пункт отсутствует, это означает, что у вашей учетной записи недостаточно прав на изменение настроек отладки, либо отображение жестко заблокировано платформой при запуске.
Способ 2. Отключение параметров запуска в Конфигураторе
Очень часто разработчики сталкиваются с тем, что панель включается сама по себе при каждом запуске сеанса отладки из Конфигуратора (по клавише F5). Чтобы переопределить это поведение по умолчанию, выполним настройку среды разработки:
Способ 3. Использование ключей командной строки
Если вам необходимо централизованно управлять поведением программы при запуске на рабочих местах пользователей, мы можем использовать специальный ключ запуска платформы. Ключ /Performance принудительно включает отображение параметров производительности, а ключ /DisableStartupMessages может использоваться для подавления различных системных уведомлений при старте.
Для разработчиков эта небольшая плашка является полноценным интерактивным инструментом отладки. Рассмотрим несколько неочевидных функций управления панелью:
У обычных пользователей часто возникает паническое ощущение, что программа без их ведома тайно отправляет конфиденциальные данные в интернет, особенно когда база работает локально без подключения к сети. Выясним физическую природу этих вызовов.
Платформа «1С:Предприятие 8.2/8.3» построена на строгой трехзвенной архитектуре. Даже когда вы работаете в файловой базе данных на одном локальном компьютере без интернета, платформа эмулирует деление на две независимые логические зоны:
Таким образом, когда показатели фиксируют «вызов сервера» или «отправку байтов» в файловой версии, никакие данные не уходят во внешнюю сеть или интернет. Обмен происходит исключительно внутри оперативной памяти вашего компьютера между клиентской и серверной частями платформы 1С.
Зачем же тогда контролировать эти вызовы в локальной базе? Если конфигурация написана неоптимально и совершает тысячи локальных вызовов, то при переносе этой же базы в реальный клиент-серверный режим (например, в облако или на сервер предприятия) программа начнет катастрофически тормозить из-за сетевых задержек (ping). Инструмент показателей производительности помогает разработчику создавать оптимизированные решения заранее.
Проанализируем классическую ошибку начинающих разработчиков 1С, связанную с избыточными вызовами сервера. Представим задачу: на форме документа необходимо рассчитать цены для 10 000 строк табличной части.
Рассмотрим пример неоптимального кода:
// ПЛОХОЙ ВАРИАНТ: вызовы сервера происходят внутри цикла на клиенте
&НаКлиенте
Процедура РассчитатьЦеныНаКлиенте()
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
// Каждый проход цикла совершает один полноценный контекстный вызов сервера!
СтрокаТЧ.Цена = ПолучитьЦенуНаСервере(СтрокаТЧ.Номенклатура);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьЦенуНаСервере(ВыбраннаяНоменклатура)
Возврат Ценообразование.ПолучитьАктуальнуюЦену(ВыбраннаяНоменклатура);
КонецФункции
В этом случае панель показателей производительности мгновенно зафиксирует 10 000 текущих вызовов сервера! На локальном компьютере в файловой версии эта операция может выполниться за пару секунд, но при работе через медленный мобильный интернет или VPN-соединение система «зависнет» на несколько минут, так как клиент и сервер будут непрерывно обмениваться пакетами данных.
Теперь разберем правильный, оптимизированный подход к решению этой задачи:
// ХОРОШИЙ ВАРИАНТ: пакетная передача данных за один серверный вызов
&НаКлиенте
Процедура РассчитатьЦеныОптимизированно()
// Собираем массив номенклатуры на клиенте
МассивНоменклатуры = Новый Массив;
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
МассивНоменклатуры.Добавить(СтрокаТЧ.Номенклатура);
КонецЦикла;
// Делаем всего один вызов сервера для получения всех цен сразу
ТаблицаЦен = ПолучитьТаблицуЦенНаСервере(МассивНоменклатуры);
// Заполняем цены на клиенте из полученной таблицы
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
СтрокаТЧ.Цена = НайтиЦенуВТаблице(ТаблицаЦен, СтрокаТЧ.Номенклатура);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьТаблицуЦенНаСервере(МассивНоменклатуры)
Возврат Ценообразование.ПолучитьТаблицуАктуальныхЦен(МассивНоменклатуры);
КонецФункции
При использовании оптимизированного алгоритма панель зафиксирует ровно 1 вызов сервера вместо 10 000. Скорость выполнения операции в клиент-серверном режиме возрастет в сотни раз, а объем переданных байтов сократится до минимума. Для соблюдения архитектурных правил клиент-серверного взаимодействия можно использовать шаблоны для применения стандартов и методик разработки конфигураций 1С.
Чтобы окончательно убедиться в высоком качестве разработанного интерфейса, мы можем совместить использование окна показателей производительности со специальным встроенным режимом платформы — «Имитация задержки при вызове сервера».
Этот режим позволяет искусственно замедлить отклик локального «сервера» (даже в файловой версии), моделируя работу пользователя через медленные каналы связи (GPRS, 3G, спутниковый интернет или загруженный VPN-канал). Включив задержку, например, в 1.5 секунды, разработчик сразу же увидит, насколько отзывчивым останется интерфейс программы. Если при нажатии одной кнопки счетчик вызовов начнет стремительно увеличиваться, интерфейс заблокируется, наглядно демонстрируя необходимость срочного проведения рефакторинга кода.