Книга знаний

1С:Предприятие / Объекты конфигурации / Регистры

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

При проведении документа "задним числом" часто требуется знать, какие остатки были до его проведения (без учета последующих документов на временной оси). Автор статьи: romix | Редакторы:
Последняя редакция №2 от 11.03.07 | История
URL: http://kb.mista.ru/article.php?id=498

Ключевые слова: УстановитьЗначениеФильтра, ИтогиАктуальны, ВременныйРасчет, РассчитатьРегистрыНа


Создаем объект типа Регистр



    рег=СоздатьОбъект("Регистр.Остатки");


Ставим фильтры


При наличии фильтров (если они необходимы) временные рассчеты идут быстрее
    рег.УстановитьЗначениеФильтра("Фирма",ршФирма);
    рег.УстановитьЗначениеФильтра("Склад",ршСклад);


Проверяем, актуальны ли итоги


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

    Если ИтогиАктуальны()=0 Тогда //Проверяем необходимость временного рассчета регистров
        рег.ВременныйРасчет(1); //Включаем временный рассчет для регистра рег
        РассчитатьРегистрыНа(ТекущийДокумент()); //рассчитываем итоги на документ
    КонецЕсли;


Включаем регистры во временный рассчет


Временный рассчет выполняется не для всех, а только для указанных регистров (точнее, объектов типа "регистр").
        рег.ВременныйРасчет(1); //Включаем временный рассчет для регистра рег


Выполняем временный рассчет


РассчитатьРегистрыНа(ТекущийДокумент()); //рассчитываем итоги на документ        
//Теперь итоги регистра содержат значения на позицию до документа



Все вместе



Процедура ОбработкаПроведения()
    
    рег=СоздатьОбъект("Регистр.Остатки");
        //Сначала ставим фильтры, чтобы временные расчеты шли быстрее
    рег.УстановитьЗначениеФильтра("Фирма",ршФирма);
    рег.УстановитьЗначениеФильтра("Склад",ршСклад);
    
    
    Если ИтогиАктуальны()=0 Тогда //Неоперативное проведение (юзер что-то правит "задним числом")
        Сообщить("Временный расчет регистров...");
        рег.ВременныйРасчет(1);
        РассчитатьРегистрыНа(ТекущийДокумент());
    КонецЕсли;
    //Теперь итоги регистра содержат значения на позицию до документа

КонецПроцедуры

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика