Временный рассчет регистров в модуле проведенияПри проведении документа "задним числом" часто требуется знать, какие остатки были до его проведения (без учета последующих документов на временной оси). | | Автор статьи: romix | Редакторы: Последняя редакция №2 от 11.03.07 | История URL: http://kb.mista.ru/article.php?id=498 | |
Ключевые слова: УстановитьЗначениеФильтра, ИтогиАктуальны, ВременныйРасчет, РассчитатьРегистрыНа
Создаем объект типа Регистр
рег=СоздатьОбъект("Регистр.Остатки");
Ставим фильтры
При наличии фильтров (если они необходимы) временные рассчеты идут быстрее
рег.УстановитьЗначениеФильтра("Фирма",ршФирма);
рег.УстановитьЗначениеФильтра("Склад",ршСклад);
Проверяем, актуальны ли итоги
Временные рассчеты необходимо заключать в проверку их необходимости: как правило, они производятся длительное время, и существенно затормаживают проведение документов. Они не нужны, если проведение производится со сдвигом ТА (например, в монопольном режиме из меню Операции-Проведение документов) или оперативно (когда пользователи проводят документы не задним числом).
Если ИтогиАктуальны()=0 Тогда //Проверяем необходимость временного рассчета регистров
рег.ВременныйРасчет(1); //Включаем временный рассчет для регистра рег
РассчитатьРегистрыНа(ТекущийДокумент()); //рассчитываем итоги на документ
КонецЕсли;
Включаем регистры во временный рассчет
Временный рассчет выполняется не для всех, а только для указанных регистров (точнее, объектов типа "регистр").
рег.ВременныйРасчет(1); //Включаем временный рассчет для регистра рег
Выполняем временный рассчет
РассчитатьРегистрыНа(ТекущийДокумент()); //рассчитываем итоги на документ
//Теперь итоги регистра содержат значения на позицию до документа
Все вместе
Процедура ОбработкаПроведения()
рег=СоздатьОбъект("Регистр.Остатки");
//Сначала ставим фильтры, чтобы временные расчеты шли быстрее
рег.УстановитьЗначениеФильтра("Фирма",ршФирма);
рег.УстановитьЗначениеФильтра("Склад",ршСклад);
Если ИтогиАктуальны()=0 Тогда //Неоперативное проведение (юзер что-то правит "задним числом")
Сообщить("Временный расчет регистров...");
рег.ВременныйРасчет(1);
РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
//Теперь итоги регистра содержат значения на позицию до документа
КонецПроцедуры
|