Что такое временный расчет регистров

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

 

Материал предоставлен сайтом learn1c.ru/

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

Для этого нам потребуются более глубокие знания о способе хранения информации в регистре. На самом деле каждый регистр физически представлен парой файлов (для DBF-версии) или таблиц (для SQL-версии) (для простоты далее по тексту я буду использовать термин "таблица"):

  1. Таблицы, начинающиеся с RA, хранят все движения, выполненные документами по регистрам.
  2. Таблицы, начинающиеся с RG, хранят промежуточные итоги с периодичностью, заданной на форме "Управление итогами" (пункт меню "Операции" -> Управление оперативными итогами), а также итоги на ТА.

    Форма 'Управление итогами'

Более подробные сведения о внутренней структуре объектов 1С можно получить по ссылке www.metaprog.uran.biz.ua

Получение итогов на ТА

Когда мы запрашиваем итоги по определенному регистру и не даем никаких указаний, на какой момент времени получить итоги, система 1С получает итоги на ТА и обращается только к таблице RG. Чтобы убедиться в этом, напишем небольшую программу:

Получение итогов на ТА

Примечание: ВыбМатериал - это реквизит на форме.

Примечание: в тестовой базе ТА находится на 18.03.06 14:54:38, период сохранения остатков - 10 дней.

Запустим ее и посмотрим в профайлере (Profiler), какой запрос отправляется на SQL Server:

Select SP3826 ,SP20380 ,SP33495 ,SP3827 from RG3824 (NOLOCK) where PERIOD=''20060311'' and SP4227 = @P1 and SP3990 = @P2 ORDER BY PERIOD,SP4227,SP3990,SP3826,SP20380,SP33495

По тексту запроса видно, что данные берутся из одной таблицы RG3824. Время получения итогов на ТА приведено ниже (в мс):

Время получения итогов на ТА

Среднее время - 5 мс.

Получение итогов на "заднее число"

Теперь немного изменим программу и получим итоги на начало 18.03.06:

Получения итогов на 'заднее число'

Регистр "МестаХранения" будет участвовать во временном расчете. Смотрим текст запроса:

Текст запроса при расчете остатков на'заднее число'

В первом подзапросе данные берутся из таблицы RG3824 - аналогично получению итогов на ТА. Второй подзапрос отвечает за выборку информации из таблицы RA3824. Выбираются движения по регистру, произведенные за период с 11.03.06 по 17.03.06. Здесь нет ошибки: остатки на начало 18.03.06 равны остаткам на конец 17.03.06. Результаты двух подзапросов объединяются и получаются остатки на начало 18.03.06.

Другими словами, при расчете итогов на "заднее" число берутся промежуточные итоги из таблицы RG, к ним добавляются движения из таблицы RA, произведенные с момента сохранения промежуточных итогов до момента, на который рассчитываются итоги.

Я думаю, разницу между получением итогов на ТА и на "заднее" число Вы заметили.

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

Кстати, давайте посмотрим на время выгрузки итогов на 18.03.06:

Время получения итогов на 'заднее число'

Среднее время - 513 мс.

Теперь сравните с временем получения итогов на ТА. Вот Вам одна из причин, из-за которых следует так организовывать работу с программой 1С, чтобы документы проводились на ТА.

 

Справедливости ради надо отметить, что само обеспечение платформой 1С выполнения временного расчета занимает процессорное время. Чтобы продемонстрировать это, я перенес в тестовой базе ТА на начало 11.03.06 - дату сохранения промежуточных итогов. Позиция ТА стала 11.03.06 00:00:00. Теперь и для получения итогов на ТА, и для получения итогов на 11.03.06 используется только таблица RG:

//Запрос, выполняемый при временном расчете на 11.03.06 Select SP3826, SP20380, SP33495, SP3827 from RG3824(NOLOCK) where PERIOD=''20060301'' and SP4227 = @P1 and SP3990 = @P2 // Запрос, выполняемый при выгрузке итогов на ТА Select SP3826 ,SP20380 ,SP33495 ,SP3827 from RG3824 (NOLOCK) where PERIOD=''20060311'' and SP4227 = @P1 and SP3990 = @P2 ORDER BY PERIOD,SP4227,SP3990,SP3826,SP20380,SP33495

Однако время получения итогов разное:

  • на ТА - 5 мс
  • на 11.03.06 - 396 мс.

Учитывайте это при написании программ.

Какие выводы можно сделать из этой статьи? Старайтесь по мере возможности проводить документы на ТА, используйте команду ИтогиАктуальны() для проверки актуальности итогов на момент проведения документа и не забывайте делать временный расчет, если проводите документ "задним" числом.

P.S. При сдаче аттестационного экзамена по компоненте "Оперативный учет" невыполнение временного расчета там, где это необходимо, означает провал экзамена.

Примечание: в статье отражено мое мнение по поводу временного расчета. Оно может не совпадать с Вашим мнением и / или мнением других специалистов.

Начать дискуссию