Обработка выполняет свертку (сжатие) базы 1С:ERP. Самый длительный этап свертки - удаление старых записей регистров и пометка на удаление старых документов выполняется в многопоточном режиме. Выбирайте число потоков самостоятельно. В планах добавить отбор по организации при свертке (пишите, если вам это необходимо).
Алгоритм создания вводов остатков взят из стандартной обработки свертки 1С:ERP.
Свертка базы выполняется в три этапа:
Некоторые данные не могут быть свернуты:
Эти сведения при свертке будут удалены. Не рекомендуется выполнять свертку информационной базы, если используется перечисленный функционал.
Необходимо иметь в виду, что при свертке информационной базы удаляется вся история взаимоотношений с партнерами. В этой связи после свертки информационной базы могут иначе работать механизмы расчета скидок, а также нельзя будет выполнить мониторинг целевых показателей за свернутый период.
С развитием компании и ростом документооборота информационная база 1С:ERP со временем значительно разрастается. Накопление старых и ненужных документов приводит к большим объемам данных (иногда сотни гигабайт) и снижает быстродействие системы. Для оптимизации работы и сокращения базы 1С применяется процедура свертки базы. Свертка — это «обрезка» истории: все документы и записи регистров до указанной даты свертки заменяются их итоговыми остатками. В результате вместо множества бухгалтерских и управленческих движений остаётся один набор «вводов остатков», а база данных освобождается от тысяч старых записей. Этот процесс требует подготовки и аккуратного выполнения: всегда делайте резервную копию ИБ и работайте с ней.
Стандартный механизм свертки 1С:ERP, встроенный в платформу, состоит из трёх этапов: (1) ввод начальных остатков по всем регистрам на дату свертки; (2) удаление данных прошлых периодов: стираются движения регистров и старые документы отмечаются на удаление; (3) сверка остатков с исходной базой. При этом формируются специальные документы «Ввод начальных остатков» по остаткам ТМЦ, взаиморасчетам, деньгам и другим учетным регистрам. Затем стандартная свертка помечает ненужные документы на удаление, но не всегда физически удаляет их из БД. После пометки разработчику приходится запускать дополнительные процедуры очистки: стандартный механизм удаления помеченных объектов часто «зависает» при десятках тысяч записей. В результате весь процесс свертки на больших базах может занимать дни и даже не привести к реальному уменьшению БД.
Для ускорения длительных операций в 1С:ERP используется механизм фоновых заданий и многопоточности (через расширение «Длительные операции» или функции платформы). Такой подход особенно эффективен, когда данные можно разбить на независимые блоки. Параллельное выполнение разнородных участков кода позволяет значительно повысить производительность на больших объёмах данных. В частности, можно обрабатывать сразу несколько блоков регистров или документов в отдельных потоках, если они «не пересекаются» по измерениям. Например, при большом количестве движений по регистрам можно разделить дату или диапазон документов на несколько частей и запустить удаление каждой части в параллельном задании. Как отмечено экспертами, возможность «разделить фоновый процесс на потоки и выполнять операцию в потоках» позволяет ускорить операции с большим объёмом данных.
Первый этап свертки – формирование документов ввода остатков – выполняется по стандартному алгоритму 1С:ERP. Наша обработка использует именно этот проверенный механизм. Система автоматически рассчитывает остатки по каждому регистру (балансовые и управленческие) на конец указанной даты и заполняет документы «Корректировка записей регистров накопления» или специальные «Ввод начальных остатков». Например, после выбора даты свертки 31.12.2024 обычно создаются документы на дату 01.01.2025 по всем видам остатков: складские запасы, остатки по кассе и счетам, взаиморасчёты с контрагентами и т.д. Ключевой момент – дату документов ввода остатков ставят следующим днём после свёрнутой даты; иначе эти документы попали бы под свертку. Это гарантирует, что остатки сформируются корректно и в соответствии с алгоритмами платформы.
Ключевой новинкой нашей обработки является именно второй этап – удаление старых записей – в многопоточном режиме. После создания документов ввода остатков система должна удалить движения регистров и отметить на удаление документы за всё время до даты свертки. В стандартной обработке это делается последовательно и может занимать очень много времени. Мы разделяем эту задачу на N потоков, которые одновременно чистят разные части данных. Алгоритм следующий:
При запуске многопоточной свертки пользователь задаёт число потоков – обычно равное или немного больше числу ядер сервера. (Заметьте: слишком много потоков не даёт пропорционального ускорения и может привести к переключению контекста CPU; оптимальное количество обычно 4–8, но его стоит подобрать экспериментально.) Кроме того, в планах реализовать в обработке опциональный отбор по организации: т.е. при необходимости можно очищать данные только по одной фирме. Пока фильтр не реализован, но при заказе расширенной версии мы учтём пожелания по отбору. Возможность указать организации будет полезна, если в холдинге в одной базе ведётся учет нескольких компаний, и нужно сжимать данные выборочно.
Ниже приведён пример шагов для сверки базы с нашим решением (ссылка на физический запуск зависит от интерфейса вашей системы):
Обратите внимание на важные нюансы: свертку ИБ следует выполнять под учётной записью администратора и только на стабильной копии. Запуск процедуры на живой базе может привести к сбоям. Обычно свертку делают на выходных: параллельно пока одни специалисты очищают базу, другие продолжают вести учёт в «новом» (свежем) экземпляре. Будьте готовы к тому, что сами документы вводов остатков после свертки нужно проверить вручную – их возможно придётся скорректировать, если в учетной базе были ошибки. Полная автоматическая корректировка не всегда возможна.
Применение многопоточной свертки 1С:ERP позволяет существенно сократить время очистки регистров на больших объёмах данных и поддерживать базу в оптимальном состоянии. Такой подход особенно эффективен на многопроцессорных серверах: вместо последовательного удаления сотен тысяч записей, система выполняет параллельные операции, что даёт мультикратный выигрыш в скорости. Мы рекомендуем использовать этот метод для крупных баз или когда стандартная свертка занимает слишком много времени. Благодаря знакомым алгоритмам ввода остатков наша обработка гарантируюет корректность итоговых данных. Если вы хотите узнать больше или заказать внедрение многопоточной свертки — свяжитесь с командой MoscowSoft, подпишитесь на нашу рассылку и ознакомьтесь с другими статьями на сайте. Задавайте вопросы – мы рады помочь сделать вашу 1С:ERP быстрее и стабильнее!