Групповое проведение документов. Штатные методы оптимизации.

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

Похожие статьи:

Hosted by uCoz