С чего всё началось
Проблема появилась не на искусственном тесте, а в реальной конфигурации. Пользователь изменял реквизит формы, после чего обработчик проходил по элементам тяжёлой формы, устанавливал флаг ТолькоПросмотр и обновлял оформление вкладок. Перед применением изменений пользователю задавался вопрос.
В старой реализации с синхронными вызовами ПоказатьВопрос()/ОписаниеОповещения этот участок выполнялся быстро. После перевода вопроса и последующего кода на современный синтаксис ВопросАсинх() и Ждать внешне та же реакция на изменение реквизита стала доходить примерно до восьми секунд.
Первое подозрение очевидно: асинхронные методы в 1С дороги. Но внутри медленного участка были сразу несколько возможных причин:
- цикл по вкладкам и полям;
- многократное обращение к коллекции Элементы;
- изменение цветов, видимости и других свойств;
- перекомпоновка тяжёлой формы.
Нужно было отделить их друг от друга.
Эксперимент, выполненный ИИ
Практически весь исследовательский цикл был выполнен ИИ-агентом: анализ гипотез, написание BSL-кода и формы, сборка EPF, проверка синтаксиса, управление тонким клиентом, запуск тестов, сохранение CSV и частичная подготовка статьи. Я в свою очередь грамотно сформулировал проблему, предоставил рабочее окружение и добавил в исследование дополнительную гипотезу.
По непрерывным сериям изменений исходников, сборок и замеров активная работа агента заняла около 1 часа 10 минут: примерно 37 минут ушло на стенд, сборку и первые 32 замера, ещё 32 минуты — на реализацию обхода, дополнительную серию из 12 замеров и подготовке черновика для статьи (отмечу что немалая часть времени была потрачена именно на передачу управления экраном агенту для проведения замеров).
Инструменты и контекст
Задачу я выполнял в ChatGPT с подключенным Unica и MCP v8std (спасибо Игорю Апресову за эти прекрасные инструменты) буквально в два подхода:

И уточнение, чтобы точно выяснить, где живет проблема:

Независимый стенд
Чтобы не смешивать платформенное поведение с логикой рабочей конфигурации, была создана внешняя обработка с намеренно тяжёлой формой:
- 20 вкладок;
- 400 полей ввода;
- отдельные флаги для каждого исследуемого свойства;
- вывод результатов в CSV.
Одна и та же процедура изменения формы запускалась четырьмя способами:
- напрямую, без диалога;
- непосредственно после Ждать ВопросАсинх();
- из одноразового обработчика ожидания, подключённого после Ждать;
- из ОписаниеОповещения после ПоказатьВопрос().
Проверялись пустой цикл, чтение элементов, ТолькоПросмотр, Доступность, Видимость, цвет и заголовки вкладок, свойство панели страниц и повторная запись уже установленного значения.
Условия основной серии: платформа 1С:Предприятие 8.5.1.960, тонкий клиент x64, файловая база, отладчик не подключён. Форма прошла структурную проверку, модули — платформенную проверку синтаксиса без ошибок и предупреждений.
Итоговые результаты
| Сценарий | Операций | Без диалога | Сразу после `Ждать` | ОписаниеОповещения | Обработчик после `Ждать` |
|---|---|---|---|---|---|
| Чистый цикл | 400 | 1 мс | 0 мс | 1 мс | — |
| Чтение элементов | 400 | 1 мс | 2 мс | 0 мс | — |
| ТолькоПросмотр полей | 400 | 9–11 мс | 10 мс | 8 мс | — |
| Цвет вкладок | 20 | 0 мс | 3 010–3 099 мс | 2 мс | 1–2 мс |
| Доступность полей | 400 | 2 мс | 8–13 мс | 8 мс | 7 мс |
| Видимость полей | 400 | 5 мс | 14 500–17 371 мс | 4 мс | 3–4 мс |
| Заголовки вкладок | 20 | 0 мс | 145 мс | 1 мс | — |
| ТолькоПросмотр группы страниц | 20 | 0 мс | 82 мс | 3 мс | — |
Сам цикл и чтение элементов не замедлились. Более того, установка ТолькоПросмотр у 400 обычных полей на независимом стенде также осталась быстрой. Значит, исходное наблюдение действительно проявлялось во время установки флага, но его нельзя объяснить универсальной дороговизной свойства ТолькоПросмотр.
Самыми сильными триггерами оказались свойства, меняющие компоновку и оформление формы: Видимость, цвет и заголовки вкладок.
Что можно утверждать
Эксперимент показал следующее:
- Сам синтаксис Асинх/Ждать не является медленным: пустой цикл и чтение элементов остаются быстрыми.
- Количество итераций само по себе не объясняет задержку.
- Проблему вызывают фактические изменения отдельных свойств формы (видимости и цвета) в конкретном контексте выполнения.
- Один возврат в очередь клиента устраняет аномальную стоимость цвета и видимости.
Наиболее вероятно различие в обработке инвалидаций, перекомпоновки или пакетирования изменений формы в той части асинхронной процедуры, которая выполняется сразу после Ждать. Но это гипотеза по внешнему поведению: стенд не раскрывает внутреннюю реализацию клиента 1С.
Заключение
На текущий момент стало возможно провести анализ производительности в фоне, получить при этом всю интересующую статистику и найти оптимальные решения, для этого нужно просто грамотно сформулировать задачу и подключить нужные инструменты. Что выглядит крайне эффективным инструментом для современного разработчика.
Всем спасибо за внимание, надеюсь, статья получилась полезной и интересной. Репозиторий с обработкой на github
Вступайте в нашу телеграмм-группу Инфостарт