Традиционная свёртка предполагает следующий алгоритм: вычисление остатков на дату свёртки, формирование документов начальных данных и удаление предшествующих. Если база велика, а она велика, иначе нет смысла её сворачивать, процесс может затянуться. Важно отметить, что в процессе свёртки штатная работа с базой не проводится, дабы не нарушить целостность и непротиворечивость данных. Есть и другой подход: создать распределённую информационную базу, выгрузить с определённой даты данные в подчинённый узел и отвязать его от базы. Но и в этом случае процесс длительный и не предполагает штатную работу пользователей.
Учетная система 1С:Предприятия построена на регистрах, которые, как правило, наполняются документами при их проведении. Если мы удалим документ, то удалим и движения этого документа. Чтобы сохранить движения при удалении документа мы можем подменить стандартный реквизит регистра - "Регистратор" на другой документ. При этом вся важная учетная информация не изменится. Не изменятся ни остатки на складах или задолженности контрагентов, ни текущее сальдо по счетам бухгалтерского учета, ни курс условной единицы, ни размер начислений и удержаний, ни отработанное время сотрудников. В качестве документа-подмены необходимо использовать те, у которых свойство "Проведение" имеет значение "Запретить". Такие документы в типовых конфигурациях есть, например "Операция" или "Корректировка записей регистров накопления". Однако существует ограничение в использовании документов вроде "Корректировка записей регистров накопления" - далеко не все регистры имеют в качестве регистратора документы этого типа. Чтобы убрать это ограничение можно указать документ "Корректировка записей регистров накопления" в качестве регистратора для всех регистров. Можно и по другому - создать еще один документ такого типа и тем самым избежать проблем при обновлении типовых конфигураций.
Что дает такой подход к свёртке? Прежде всего мы можем запустить перманентный (перманентный — постоянный, непрекращающийся, нескончаемый, неуклонный, систематический, методический, методичный, хронический, неустанный, безустанный, бесперебойный, безостановочный...) процесс свёртки, не оказывающий заметного влияния на штатную работу пользователей. Мы можем в любой момент запустить свёртку и в любой момент прекратить её. мы можем отобрать для свёртки документы определенного типа или какой-то конкретной организации. Написать такую обработку, причем универсальную, для любых конфигураций, не составляет большого труда. Но корректно свёртывать в общем случае она не сможет. Почему? Дело в том, что довольно часто проведение документов зависит от "окружающей среды". Как пример можно рассмотреть проведение документа "Поступление товаров и услуг" в БП 2.0. Если у такого документа уже введен счет-фактура, то записи формируются одни, если нет - то другие. Поэтому при удалении документов свертываемого периода важно удалить сначала счет-фактуру.
Чтобы идентифицировать подобного рода проблемы, для дальнейшего анализа и разрешения введен специальный режим: "Отладка". При включенной отладке запоминается состояние регистров перед удалением документа и сравнивается с состоянием после удаления и подмены. Если состояние изменилось, свертка прекращается с выдачей соответствующего сообщения. Режим отладки можно не использовать, ускоряя ход выполнения свертки, однако в этом случае требуется тщательная сверка остатков на начало периода. Документы можно удалять непосредственно, включением соответствующего режима или только помечать на удаление. Переключение режимов осуществляется двойным кликом по надписи на форме.
Инструкция по применению. Скачиваем файл _Свёртка_.cf и объединяем со своей конфигурацией. В результате появятся два новых объекта — документ "_УниверсальныйРегистраторЗаписейРегистров_" и обработка "_СвёрткаБазыДанных_". Документ следует назначить регистратором всех регистров конфигурации (закладка Движения), а в обработке реквизиту "Организация" назначить соответствующий тип данных. При включенном режиме непосредственного удаления, возможны конфликтные ситуации с правами доступа, в том числе на уровне записей.