Немного теории
Точка актуальности (ТА) - одно из основных понятий компоненты "Оперативный учет", и от того, насколько хорошо вы понимаете, что это такое, зависит качество ваших программ. А это и скорость работы, и достоверность выдаваемой информации, и предсказуемость поведения программы.
Для начала ознакомимся с определениями, представленными фирмой 1С:
- "Оперативный учет" Руководство пользователя.
Дата и время, по которое включительно обрабатываются проведенные документы, называется "точкой актуальности итогов". В общем случае, в качестве точки актуальности итогов берется дата и время самого "старшего" документа.
Режим "Управление итогами" позволяет "вручную" сдвигать точку актуальности итогов во времени как вперед, так и назад, при этом производится пересчет итогов. Проведенные документы, оказавшиеся после точки актуальности итогов, при пересчете итогов не учитываются.
Так оно и есть на самом деле. Только вот начинающему программисту и уж тем более пользователю, я думаю, из этой формулировки мало что понятно. Какое-то общее представление будет, но на вопрос "Что такое ТА?" они ответить не сумеют.
В этом определении не понятно, что скрывается за словом "обрабатываются", о какой обработке проведенных документов идет речь.
С другой стороны здесь есть и очень полезная информация: ТА - это дата и время. Заметьте, это не только дата, или не только время, а дата и время вместе. Об этом надо помнить всегда.
- "Описание встроенного языка" Часть 1.
Под термином "остаток" ресурса для регистра остатков следует понимать числовое значение, которое имеет ресурс на какой-то момент времени. Именно здесь и проявляется понятие точки актуальности.
ТА - это тот момент времени (дата+время), на который все необоротные регистры содержат текущие значения своих ресурсов. Другими словами, если просто запросить у регистра остатков значение какого-либо ресурса, то он выдаст его именно на момент ТА.
Если необходимо узнать значение ресурса на какой-либо прошедший момент времени, то надо либо сдвинуть в прошлое ТА, либо при помощи средств встроенного языка следует запустить "временный расчет" регистра. При "временном расчете" регистра остатков можно задать момент времени, на который необходимо получить значение ресурса. В этом случае значение ресурса рассчитывается, что требует несколько большего времени процессора, чем если получать ресурс на ТА.
Однако, "временный расчет" рассчитывается не с начала всех времен, а от начала месяца. Регистры остатков хранят промежуточные значения ресурсов на начало каждого месяца. Таким образом, если при "временном расчете" указать момент времени в начале месяца, то, в общем случае, расчет будет выполнен быстрее, чем если указать конец месяца.
В этом описании тоже все верно (ну разве что промежуточные значения можно сохранять не только на начало месяца). Становится понятным, что:
- ТА имеет отношение к получению остатков(а не оборотов) по ресурсам регистра;
- на ТА регистры содержат текущие значения остатков по ресурсам;
- на ТА остатки получаются быстрее, чем при получении на какое-либо заднее число;
- для получения остатков на заднее число необходимо делать "временный расчет";
- "временный расчет" требует дополнительных затрат процессорного времени;
- "временный расчет" на момент времени в начале месяца выполняется быстрее "временного расчета" на момент времени в конце месяца.
Что же такое ТА?
Теперь попробуем сформулировать определение ТА, которым было бы удобно пользоваться программисту 1С:
ТА - это момент времени, на который программа 1С хранит итоги по регистрам, и эти итоги можно получить без применения временного расчета.
... или более развернуто ...
ТА - это момент времени (позиция на оси времени), на конец которого программа 1С хранит итоги по ресурсам регистров, и эти итоги можно получить без применения временного расчета.
На любой момент времени, находящийся до ТА, можно получить итоги по ресурсам регистров, предварительно сделав временный расчет.
На любой момент времени, находящийся после ТА, итоги не рассчитаны, к ним нельзя обратиться.
Точку актуальности можно установить:
- на произвольный документ - из журнала через пункт контекстного меню "Установить ТА на документ";
- на начало дня через "Управление оперативными итогами". В этом случае ТА может быть не привязана к документу;
- на начало/конец даты, документа или позиции документа - средствами языка программирования.
Если ТА "находится" на документе, который выполняет движения по регистрам, то в итогах регистров будут учитываться движения этого документа. Вот почему в определении ТА было сказано "на конец которого". Если ТА не привязана к документу или документ не "двигает" регистры, тогда не важно - "на начало" или "на конец" этого момента времени поддерживаются итоги.
Чтобы все встало на свои места, давайте определимся с понятиями расчета остатков "на начало" и "на конец" применительно к проведению документов оперативного учета. Документ имеет некоторую "протяженность", представленную движениями регистров:
Если выполняется расчет остатков "на начало" документа, то движения, сделанные документом, не учитываются при расчете остатков.
При расчете остатков "на конец" документа, движения этого документа учитываются в остатках. Если документ не выполняет движения по регистрам, остатки "на начало" и "на конец" совпадают.
Практическое занятие
Теперь, после теоретической подготовки, предлагаю Вам самостоятельно проверить, что в момент проведения документа, находящегося на ТА, в регистрах хранятся остатки, учитывающие движения этого документа.
Для эксперимента возьмите демонстрационную базу "1С: Торговля и Склад": во-первых, в ней мало документов, а во-вторых, ничего страшного не будет, если при тестировании Вы ее испортите.
Выберите документ, на котором будем проводить испытания, например, "Заявка покупателя", и внесите изменения в модуль проведения:
- Закомментируйте очистку движений регистров в процедуре ПроведениеПоРегистрам. Это приведет к тому, что уже существующие движения по регистрам не будут удаляться при проведении документа.
- После участка программы, проверяющего актуальность итогов, добавьте следующий фрагмент:
Итоги по регистру "Заявки" будут выгружаться в таблицу значений, и на экран будет выводиться приглашение выбрать строку из этой таблицы.
Примечание: никогда не делайте такого в рабочих версиях программ.
Вот и все доработки. Запускайте программу и тестируйте. Мои результаты приведены ниже. Я сделал заявку на 1 пару кирзовых сапог:
- Проведение №1 - проведение непроведенного документа
- Проведение №2 - проведение проведенного документа
- Проведение №3 - проведение проведенного документа
На этом статья, посвященная ТА, завершена.
|