11.01.2011

Групповое перепроведение документов

Краткое описание механизма

Данный механизм позволяет выполнить перепроведение большого количества документов за период более быстрым по сравнению со стандартными средствами способом.

Описание принципов действия

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

Чтобы понять, в чем именно заключается причина увеличения времени обращения к неактуальным итогам, следует представлять, каким образом платформой 1С:Предприятие 8 получаются остатки из этих регистров (на примере регистра накопления).

Данные регистра накопления (с видом Остатки) сохраняются в БД в двух таблицах: "таблице движений" и "таблице итогов". Структура первой таблицы известна, именно из нее получаются данные при выполнении запроса вида:

Копировать в буфер обмена

ВЫБРАТЬ * ИЗ РегистрНакопления.ТоварыНаСкладах

Вторая таблица является служебной, в ней хранятся рассчитанные остатки по измерениям регистра по периодам (месяцам). В этой таблице всегда присутствуют записи актуальных остатков (на текущую дату), записи по другим периодам добавляются в таблицу при выполнении операции установки актуальности итогов. При этом добавляемые записи соответствуют остаткам регистра, рассчитанных на начало месяца, следующего после указанной даты.

То есть если регистр был рассчитан по 31.10.2005, в таблице будут присутствовать записи на 01.11.2005 0:00:00.
Соответственно, получение остатка по набору измерений из регистра на произвольную (не текущую) дату упрощенно можно представить следующим образом:

  1. Из "таблицы итогов" получается первый более поздний относительно необходимой даты рассчитанный остаток. Если рассчитанных итогов нет, берется актуальный (текущий) остаток, который присутствует всегда.
  2. От полученного остатка "отнимаются" движения, полученные из "таблицы движений" регистра по данному набору измерений, за период от необходимой даты до момента найденного в п. 1 остатка.

Пример

Регистр накопления ТоварыНаСкладах рассчитан по 31.10.2005.
Требуется получить остаток на 05.10.2005 13:00:00.
В этом случае из "таблицы итогов" будет "взят" остаток на 01.11.2005.
От полученного остатка будут "вычтены" движения по данному набору измерений, где {05.10.2005 13:00:00} <= период  < {01.11.2005 0:00:00}.

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

Рассматриваемый здесь механизм позволяет выполнить перепроведение документов с учетом данной особенности. Это достигается удалением из регистров всех "мешающих" движений, попадающих в период между моментом времени проводимого документа и ближайшего рассчитанного остатка.
То есть групповое перепроведение выполняется в два этапа:

Особенности применения

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

Также следует учитывать, что данный механизм не удаляет движения документов, "введенных вручную". То есть документов, чьи движения формируются не в процедуре ОбработкаПроведения(), а вводятся непосредственно пользователем. Примером такого документа может служить документ Операция (бухгалтерский и налоговый учет) типовой конфигурации Бухгалтерия предприятия, в котором движения по регистру бухгалтерии Хозрасчетный заполняются пользователем непосредственно в форме документа.

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

Область применения

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