Как устранить задержки и окно ожидания при открытии документов в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

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

Использование замера производительности для поиска узких мест

Первым делом нам необходимо выяснить, где именно происходит задержка: на стороне сервера 1С, на стороне СУБД или при отрисовке интерфейса. Для этого мы воспользуемся встроенным инструментом Замер производительности. Разберем алгоритм действий:

  1. Запустим конфигуратор и перейдем в режим отладки.
  2. В пользовательском режиме откроем нужный список документов, но не будем открывать сам документ.
  3. В конфигураторе включим замер производительности (меню Отладка — Замер производительности).
  4. Выполним открытие проблемного документа.
  5. Как только форма полностью отобразится, выключим замер.

Проанализируем полученную таблицу. Нас интересуют строки с наибольшим значением в колонке «Чистое время». Часто виновниками оказываются обработчики событий формы. Рассмотрим пример кода, который может вызывать задержки при неоптимальном написании:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Неоптимальный запрос в цикле или получение тяжелых данных
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        СтрокаТЧ.Остаток = РегистрыНакопления.ТоварыНаСкладах.Остаток(КонецДня(Объект.Дата), Новый Структура("Номенклатура", СтрокаТЧ.Номенклатура));
    КонецЦикла;
КонецПроцедуры

В данном примере выполнение запроса в цикле для каждой строки табличной части является классической ошибкой. Мы рекомендуем переписать такой код с использованием одного запроса ко всей таблице товаров.

Анализ влияния механизмов RLS (Row Level Security)

Одной из наиболее частых причин медленной работы 1С:ERP является ограничение доступа на уровне записей (RLS). Когда пользователь открывает документ, система автоматически добавляет к запросам условия, ограничивающие видимость данных. Выясним, является ли RLS причиной задержки, выполнив следующие действия:

Попробуем открыть документ под пользователем с полными правами. Если под полными правами открытие происходит мгновенно, значит, проблема локализована в шаблонах RLS. В современных версиях 1С:ERP используется Производительный режим RLS. Проверим его включение в разделе «НСИ и администрирование» — «Настройка пользователей и прав».

Если используется старый режим, система создает сложные вложенные запросы, которые СУБД (особенно PostgreSQL) может обрабатывать неоптимально. Проанализируем типичный запрос, который генерирует платформа при проверке прав, и обратим внимание на использование временных таблиц для хранения разрешенных значений групп доступа.

Оптимизация работы СУБД PostgreSQL

Если замер производительности показывает, что основное время уходит на выполнение серверных вызовов, связанных с получением данных (ПриЧтенииНаСервере), необходимо обратить внимание на состояние базы данных. Рассмотрим критически важные настройки для PostgreSQL:

  1. Обновление статистики: Убедимся, что регламентное задание ANALYZE выполняется регулярно. Устаревшая статистика заставляет планировщик PostgreSQL выбирать неверные планы выполнения запросов.
  2. Регламентные операции: Проверим выполнение VACUUM. Накопление «мертвых» строк (dead tuples) в таблицах ссылочных типов и регистров сведений значительно замедляет чтение.
  3. Настройка параметров: Проанализируем файл postgresql.conf. Особое внимание уделим параметрам shared_buffers, work_mem и effective_cache_size.

Для диагностики на стороне СУБД можно использовать расширение pg_stat_statements, которое позволяет увидеть самые «тяжелые» запросы, выполняемые к базе данных 1С.

Проверка обработчиков событий формы и модулей объекта

Посмотрим на цепочку событий при открытии документа. Порядок вызовов следующий: ПриЧтенииНаСервере -> ПриСозданииНаСервере -> ПриОткрытии. Часто разработчики избыточно нагружают событие ПриЧтенииНаСервере. Выясним, нет ли там вызовов, которые обращаются к сторонним веб-сервисам или выполняют сложные расчеты.

Рассмотрим пример правильной организации кода для минимизации клиент-серверных вызовов:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    // Используем закэшированные значения или параметры сеанса
    Если ПараметрыСеанса.ИспользоватьРасширеннуюВизуализацию Тогда
        УстановитьВидимостьЭлементов(ТекущийОбъект);
    КонецЕсли;
КонецПроцедуры

Также стоит проверить наличие подписок на события, такие как ПриКопировании или ОбработкаПолученияФормы. Иногда логика, заложенная в расширениях (Extensions), может конфликтовать с типовым функционалом и вызывать рекурсивные вызовы или избыточные блокировки.

Исследование регистров сведений и состава документов

В конфигурациях на базе 1С:ERP существуют служебные регистры, которые хранят состояния документов (например, Состав документов для формирования записей книги покупок/продаж или Статусы документов). Если эти регистры переполнены или не имеют подходящих индексов, обращение к ним при открытии формы может занимать значительное время.

Проанализируем ситуацию: при открытии формы документа «Приобретение товаров и услуг» система может выполнять запрос к регистру сведений, чтобы определить, нужно ли выводить предупреждение о незаполненных данных. Если запрос не использует индексированные поля, СУБД выполнит полное сканирование таблицы (Full Table Scan).

Рекомендуем выполнить очистку устаревших записей в подобных регистрах или добавить необходимые индексы через механизм Расширений, если это не предусмотрено типовым решением.

Диагностика сетевых задержек и клиентской части

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

Для детального анализа взаимодействия клиента и сервера мы можем использовать запуск с ключом /LogUI, который записывает все действия интерфейса в лог-файл, позволяя увидеть задержки на уровне отрисовки форм.

Заключение и выводы

Подводя итог, отметим, что решение проблемы медленного открытия документов требует комплексного подхода. Мы рассмотрели основные инструменты: ЗамерПроизводительности, консоль запросов, анализ планов запросов в PostgreSQL и проверку прав доступа. Систематический анализ каждого этапа — от выполнения кода на сервере до передачи данных по сети — позволяет выявить истинную причину деградации производительности и устранить её, обеспечив комфортную работу пользователей в 1С:ERP.

← На главную