В процессе эксплуатации 1С:Бухгалтерия 3.0 (БП 3.0) пользователи часто сталкиваются с резким снижением производительности при проведении «тяжелых» документов, таких как Отчет о розничных продажах. Особенно это заметно, когда данные переносятся из внешних систем, например, через синхронизацию с 1С:Розница. Проблема часто локализуется на этапе записи объекта НаборЗаписей, что может занимать минуты, превращая работу бухгалтерии в ожидание. Давайте подробно разберем причины этой ситуации и пошагово рассмотрим способы оптимизации системы.
Первым делом проанализируем ситуацию с помощью встроенного инструмента «Замер производительности». Если замер показывает, что основное время (иногда до 90% и более) уходит на метод Записать() для регистров накопления или бухгалтерии, это верный признак проблем с индексами, итогами или настройками СУБД.
Разберем типичный сценарий: документ проводится около 9 минут в клиент-серверном варианте (SQL), в то время как в файловой копии тот же процесс может занимать значительно меньше времени. Рассмотрим подробнее, почему так происходит и как с этим бороться.
Часто проблема кроется в «замусоривании» базы данных и неактуальности индексов. Проанализируем основные действия, которые необходимо выполнить в рамках стандартного обслуживания:
Важно помнить последовательность действий. Рекомендуется сначала выполнять пересчет итогов, а уже затем реиндексацию, так как массовое обновление записей при расчете итогов может снова фрагментировать только что созданные индексы.
Если ваша база работает на SQL-сервере, стандартного ТиС внутри 1С может быть недостаточно. Рассмотрим более глубокие настройки СУБД, которые напрямую влияют на запись НаборЗаписей.
Во-первых, выясним состояние статистики. SQL Server строит планы запросов на основе статистических данных. Если статистика устарела, сервер выберет неэффективный план записи или чтения. Попробуем выполнить очистку кеша планов и принудительный пересчет статистики с помощью следующих команд в SQL Management Studio:
-- Очистка процедурного кеша
DBCC FREEPROCCACHE;
-- Пересчет статистики для всех таблиц базы данных
EXEC sp_MSforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN';
-- Обновление использования места
DBCC UPDATEUSAGE (Имя_Ваши_Базы);
Во-вторых, обратим внимание на параметр MAXDOP (Maximum Degree of Parallelism). Для баз данных 1С настоятельно рекомендуется устанавливать MAXDOP = 1. Это заставляет SQL-сервер выполнять одну операцию в одном потоке, что предотвращает избыточные блокировки и конфликты при записи наборов записей, которые в 1С по своей природе транзакционны и последовательны.
Проанализируем настройки итогов в самой 1С. Перейдем в раздел «Обслуживание» — «Управление итогами и агрегатами». Проверим дату, по которую рассчитаны итоги. Если вы проводите документы за январь 2024 года, а итоги рассчитаны только по декабрь 2023, система будет тормозить.
Обратите внимание на регистры бухгалтерии (Хозрасчетный) и регистры накопления. Если граница рассчитанных итогов сильно отстает от текущей даты, выполним операцию «Установить период рассчитанных итогов» на конец текущего или следующего месяца.
Выясним еще одну деталь: если документ проводится за старый период (например, перепроведение прошлого года), а итоги установлены на текущую дату, 1С приходится выполнять большой объем работы по пересчету всех последующих периодов. В таких случаях временное смещение границы итогов назад (на период проведения) может ускорить процесс записи НаборЗаписей.
Интересный факт: иногда файловая база работает быстрее SQL при проведении одного документа. Разберем, почему так происходит:
Shared Memory.НаборЗаписей в SQL — это серия команд между сервером приложений и сервером БД. Каждая команда имеет микро-задержку (latency). В файловой версии доступ к данным идет напрямую через файловую систему.Однако, как только количество одновременно работающих пользователей увеличивается, файловая версия начинает проигрывать из-за блокировок всего файла базы данных. Поэтому для SQL-версии крайне важно следить за производительностью дисковой подсистемы, особенно за скоростью записи в лог транзакций (.ldf файл).
Проанализируем, что именно делает этот документ. Он списывает товары, формирует выручку и часто делает записи в большое количество регистров (НДС, Продажи, Бухгалтерия). Если в документе сотни или тысячи строк, объем НаборЗаписей становится критическим.
Посмотрим на настройки учетной политики. Если включен расчет себестоимости при проведении (особенно по «средней»), 1С делает сложные запросы к остаткам для каждой строки. Попробуем в тестовой базе отключить расчет себестоимости при проведении и сравнить время. Если скорость значительно вырастет, значит, проблема в объеме анализируемых данных при расчете остатков.
Подведем итог и составим план действий для ускорения проведения документов в БП 3.0:
UPDATE STATISTICS для актуализации планов запросов..mdf, .ldf) и временные файлы сервера 1С из сканирования. Антивирусная проверка при записи каждого набора записей способна замедлить процесс в несколько раз.После выполнения этих действий, как показывает практика, время проведения документа Отчет о розничных продажах сокращается в несколько раз. Например, в рассмотренном случае время уменьшилось с 9 минут до 1.5–2 минут, что является приемлемым результатом для базы объемом около 20 Гб.