Урок по треку Разработка на 1С 6 мин

Производительность в 1С

Запрос в цикле, обращение через точку, индексы, замер, технологический журнал и ЦУП.

Медленные системы на 1С почти всегда тормозят по одним и тем же причинам. На собесе дают код и просят найти проблемы, а senior рассказывают, как расследовали инцидент.

Типовые ошибки в коде

Запрос в цикле. Каждая итерация это обращение к СУБД. Решение: один запрос по всем строкам (параметр-массив, табличная часть во временной таблице).

Обращение через точку. Строка.Номенклатура.ВидНоменклатуры во встроенном языке читает объект номенклатуры целиком. В цикле это тысячи чтений. Решение: запрос со всеми нужными полями, для единичных случаев функции БСП:

Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Контрагент, "ИНН, КПП");

ПолучитьОбъект ради чтения. Загружает объект с табличными частями.

Поиск по наименованию. Медленно и ненадёжно, ищут по коду, артикулу, ИНН, GUID.

Лишние серверные вызовы с формы и передача контекста формы.

Ошибки в запросах

  • Условия на измерения в ГДЕ вместо параметров виртуальных таблиц.
  • Цепочки точек и точки от составных полей.
  • Соединения с подзапросами и виртуальными таблицами без отбора: оптимизатор СУБД ошибается в оценках. Рекомендация: временная таблица с индексом.
  • Функции над полями в условиях (ГОД(Дата) = 2026) мешают индексам: используйте диапазоны.
  • ПОДОБНО с % в начале не использует индекс.
  • Отбор по неиндексированным реквизитам: у реквизита свойство «Индексировать».

Длинные транзакции

Тяжёлое проведение, обмены одной транзакцией, внешние вызовы внутри транзакции: всё это держит блокировки и останавливает других пользователей.

Инструменты

ВопросИнструмент
Какая строка моей операции медленнаяЗамер производительности в отладчике
Какие запросы на сервере долгиеТехнологический журнал, DBMSSQL или DBPOSTGRS
Кто кого ждалТехнологический журнал, TLOCK, TTIMEOUT, TDEADLOCK
Как меняется скорость ключевых операцийЦУП, APDEX
Кто изменил документЖурнал регистрации

Технологический журнал настраивается файлом logcfg.xml: события, пороги длительности, свойства (контекст, текст запроса, план).

APDEX = (довольные + терпимые / 2) / все замеры. Довольные уложились в целевое время T, терпимые в 4T. 1 означает «всё быстро».

Как расследовать

  1. Понять картину: всегда или иногда, у кого, когда. «Иногда» часто означает блокировки или особые данные.
  2. Замерить: код, запросы, ожидания.
  3. Найти узкое место, а не оптимизировать всё подряд.
  4. Исправить и замерить на копии с рабочими данными.
  5. Поставить ключевую операцию на мониторинг.

Пример переписывания

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

Что спросят на собесе

  • Найдите проблемы производительности в коде.
  • Почему обращение через точку медленное и как его заменить?
  • Как найти медленные запросы на рабочем сервере?
  • Что такое APDEX и ЦУП?
  • Расскажите, как вы расследовали медленную операцию.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.