Свертка ИБ в 1С 7.7


Мысли о том, как сделать процедуру свертки информационной базы эффективнее.

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

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

Потери времени здесь — это «распроведение» документов и поиск ссылок на помеченные объекты перед удалением. Если «отрезается» большая часть документов «с конца», такая свертка может занять по времени больше суток. Как альтернативный ей вариант — перенос документов и формирование документов ввода остатков в новой информационной базе. Тут мы, однозначно экономим время на удалении помеченных документов и, если период, за который переносятся документы из старой базы невелик, то и на проведении документов. Так, или иначе, достаточное время мы потратим на формирование выгрузки из базы-источника и принятие ее в базу-приемник. Проведение документов в новой базе также займет некоторое время, в зависимости от периода и документооборота предприятия.

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

Суть идеи и ее отличие от предыдущих в следующем: вместо того, чтобы формировать движения по регистрам на основе документа, мы поступим наоборот — формировать документ на основании движений регистров. Для этого, правда, нам придется «поступиться» новой датой начала учета. Точнее, она должна быть выбрана таким образом, чтобы в одну таблицу итогов не попадали результаты проведения удаляемых и неудаляемых из информационной базы документов одновременно. Этим мы исключим необходимость пересчитывать итоги при удалении движений документов. Как правило, периоды сохранения остатков совпадают с датами стандартных периодов, поэтому, вполне возможно, нам и не понадобится «двигать» дату начала учета в действительности.

Техника проста: для каждого регистра, находим две таблицы итогов, данные первой из которых сформированы полностью за счет движений удаляемых документов, данные второй — за счет неудаляемых. Обе эти таблицы итогов оставляем в таблицах регистра [копии — незабываем] базы. Предыдущие таблицы — удаляем. Записи в таблице движений регистра также удаляем вплоть до тех, на основе которых сформирована первая таблица итогов. Теперь, если все оставить в таком виде, база будет вполне работоспособна. По крайней мере, до того момента, когда кому-нибудь в голову не придет мысль пересчитать итоги. Чтобы и эта операция у нас проходила корректно, нужно по данным первой таблицы сформировать записи в таблице движений регистра и «прицепить» их к какому-нибудь документу, который, по факту станет документом ввода остатков.

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

Метод универсален для любых конфигураций информационных баз. Время выполнения операции последним методом не зависит от количества документов в информационной базе до и после новой даты начала учета. Равно как и не зависит от сложности вычислений, производимых при проведении документов каждого типа. Время напрямую зависит от количества регистров в информационной базе и от средних размеров таблиц итогов этих регистров. Фактически, счет времени выполнения операции идет на минуты.