Почему зависает 1С УТ 10.3 при вводе документов на основании и как это исправить?

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

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

Анализ причин производительности

Зависания в файловой версии 1С при работе с базами объемом от 2-5 ГБ и выше — распространенная проблема. Файловый режим .1CD не рассчитан на интенсивную конкурентную работу. Основные причины тормозов включают:

Диагностика через замер производительности

Для начала нам нужно локализовать проблемный участок кода. В 1С для этого существует инструмент «Замер производительности». Если выполнение процедуры занимает 82 секунды, как в нашем примере, значит, проблема кроется в выполнении запроса к базе данных.

Давайте проанализируем процедуру ЗаполнитьТабличнуюЧастьПоПоступлениюНаОсновании. Основная нагрузка приходится на следующий программный блок:


Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата", РабочаяДата);
Запрос.УстановитьПараметр("ДокументОснование", ДокументПоступление);
Запрос.УстановитьПараметр("ПодчиненныеТипыЦен", ПодчиненныеТипыЦен);
Запрос.Текст = "ВЫБРАТЬ ... ИЗ ... ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних ...";
РезультатЗапроса = Запрос.Выполнить();

Здесь мы видим обращение к виртуальной таблице СрезПоследних. При большом объеме регистра ЦеныНоменклатуры, этот запрос требует значительных ресурсов для пересчета актуальных цен для каждой строки документа.

Пошаговое решение проблемы

Разберем, что мы можем предпринять для оптимизации работы системы:

  1. Оптимизация запроса в консоли: Скопируйте текст запроса из кода в Консоль запросов. Попробуйте максимально упростить его, убрав соединения. Замерьте время выполнения. Постепенно возвращайте части кода, чтобы понять, какой именно узел (ЛЕВОЕ СОЕДИНЕНИЕ или ГРУППИРОВКА) вызывает наибольшие задержки.
  2. Обслуживание базы данных: Регулярно выполняйте процедуру «Тестирование и исправление» (ТИИ) с установкой галочек «Реиндексация» и «Сжатие таблиц ИБ». Это поможет избавиться от фрагментации файла .1CD.
  3. Переход на клиент-серверный вариант: Если база превышает 4-8 ГБ и с ней работают несколько пользователей, файловый вариант себя исчерпал. Мы настоятельно рекомендуем перенос базы на SQL-сервер. Это перенесет всю тяжесть вычислений на сторону сервера, что в десятки раз ускорит выполнение сложных запросов к регистрам.
  4. Анализ технологического журнала: Если зависания продолжаются, настройте Технологический журнал для фиксации событий DBPOSTPROC и DBMSSQL. Это позволит увидеть, какие именно запросы блокируют работу системы в момент «зависания».

Рекомендации по доработкам

Многие полагают, что «снятие с замка» (снятие конфигурации с поддержки) замедляет работу. Это не совсем так. Скорость работы падает из-за качества самих доработок. Если вы планируете изменять конфигурацию:

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

← На главную