Почему зависает ОСВ по счету 43 с отбором по складам в 1С:Бухгалтерии и как это исправить?

Системный администратор 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При работе в клиент-серверном варианте базы данных на MS SQL Server пользователи часто сталкиваются со специфической проблемой: отчет «Оборотно-сальдовая ведомость по счету» для счета 43 («Готовая продукция») намертво зависает, если в настройках установлен отбор по конкретному складу. При этом формирование отчета с группировкой по складам без отбора или напрямую по конкретным субсчетам (43.01, 43.02) может отрабатывать за считанные секунды. Проанализируем причину такого поведения и разберем эффективные шаги по устранению неполадки.

Выполнение тестирования и исправления информационной базы (ТиИ)

Основным и наиболее эффективным решением со стороны платформы является запуск комплексной процедуры тестирования и исправления. Нарушения в таблицах итогов или повреждения структурных связей регистра бухгалтерии приводят к тому, что платформенный генератор запросов начинает бесконечный обход записей при попытке развернуть иерархию родительского счета с фильтрацией по субконто.

Разберем по шагам порядок действий для восстановления работоспособности базы:

  1. Выполним создание резервной копии информационной базы средствами СУБД MS SQL Server или административной выгрузкой.
  2. Запустим конфигуратор 1С:Предприятия в монопольном режиме.
  3. Перейдем в меню Администрирование — Тестирование и исправление...
  4. Установим флаги напротив всех доступных проверок:
    • Проверка логической целостности информационной базы
    • Проверка ссылочной целостности информационной базы
    • Переиндексация таблиц информационной базы
    • Реструктуризация таблиц информационной базы
    • Пересчет итогов
  5. В разделах при наличии неразрешимых ссылок выберем режим «Создавать объекты» или «Очищать ссылки» в зависимости от регламента обслуживания базы данных и нажмем кнопку Выполнить.

Как показывает практика, полная реструктуризация таблиц совместно с пересчетом итогов сбрасывает ошибочные состояния таблиц регистра бухгалтерии и восстанавливает нормальную скорость формирования отчета.

Настройка параметров СУБД MS SQL Server

Если тестирование и исправление базы не решило проблему полностью, проанализируем настройки СУБД. Зависание отчета по родительскому счету 43 при выборе фильтра по субконто часто связано со спецификой оптимизатора запросов MS SQL Server (явление Parameter Sniffing) и неоптимальной работой параллелизма.

Когда запрос адресуется к родительскому счету 43, система генерирует обращение к виртуальной таблице ОстаткиИОбороты с параметризованным фильтром. Если оптимизатор СУБД сохраняет кэшированный план, построенный для иных условий, выполняя внутренний оператор Nested Loops вместо Hash Match, построение отчета зависает.

Для исправления работы оптимизатора СУБД выполним следующие операции:

  1. Настройка степени параллелизма (MAXDOP): установим значение параметра Max Degree of Parallelism в экземпляре SQL Server равным 1 (или от 2 до 4 для многоядерных систем согласно рекомендациям 1С). Это предотвратит зацикливание потоков СУБД и появление ожиданий типа CXPACKET при обработке сложных иерархических выборок.
  2. Сброс кэша планов выполнения: очистим процедурный кэш СУБД с помощью команды: DBCC FREEPROCCACHE;
  3. Проверка целостности базы данных: убедимся в отсутствии физических повреждений таблиц СУБД, выполнив проверку: DBCC CHECKDB ('ИмяБазыДанных');

Обслуживание TempDB и обновление статистик

Сложные бухгалтерские отчеты активно используют служебную базу TempDB для создания временных таблиц при сопоставлении субконто и счетов. Чтобы исключить задержки на уровне дискового ввода-вывода, проверим настройки серверного окружения:

  1. Разделим TempDB на несколько файлов данных равного размера (из расчета 1 файл на ядро процессора, но не более 8 файлов).
  2. Обновим статистику по таблицам базы данных с параметром полного сканирования, выполнив запрос: EXEC sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN';

Очистка серверного кэша и перезапуск служб

Рабочие процессы сервера 1С:Предприятия (rphost) могут удерживать устаревшие схемы компоновки данных. Для полного сброса состояний выполним следующие действия:

  1. Завершим работы всех пользователей и остановим службу сервера 1С:Предприятие.
  2. Остановим службу MS SQL Server.
  3. Перейдем в каталог данных сервера 1С (каталог srvinfo) и удалим содержимое папок кэша сеансов для проблемной базы.
  4. Запустим службу MS SQL Server, затем службу сервера 1С.

Обходные пути формирования отчета

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

← На главную