0
DCKiller
13.07.11
✎
06:30
|
Ситуация следующая: есть регистр "Долги" с измерениями "Клиент" и "КредДокумент", по которому делают движения 2 документа (увеличение и уменьшение долга соответственно).Приход - увеличение, расход - уменьшение. В КредДокумент записывается, соответственно, документ, сформировавший движение в плюч или в минус. Если идет переплата, то документ уменьшения долга формирует движение прихода с указанием в кредДокумент себя любимого.
Проблема в следующем: если имеет место переплата, то ее нужно гасить следующим документом увеличения долга. Поэтому для получения остатков по клиенту в процедуре проведения документов предусмотрено обращение к итогам регистра.
ВремРегистры = СоздатьОбъект("Регистры");
Если ИтогиАктуальны() = 0 Тогда
ВремРегистры.Актуальность(1);
ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
Оплачено = Сумма;
ЗаписаноДвижений = 1;
ВремДолги = ВремРегистры.Долги;
ВремДолги.УстановитьЗначениеФильтра("Клиент", Клиент, 1);
ВремДолги.ВыбратьИтоги();
Пока ВремДолги.ПолучитьИтог() = 1 Цикл
//погашение сумм авансов...
КонецЦикла;
По идее, итоги должны рассчитываться на позицию ТОЛЬКО следующего после оплаты документа. Однако, если имелась переплата по данному клиенту, и введена она документом оплаты, скажем, от 13.07.11, (т.е. остаток имеется на 13.07.11), а ты заходишь в 12.07.11 и перепроводишь по этому же клиенту документ увеличения долга, то он этот будущий остаток ВИДИТ! В чем проблема? Смотрел как сделано в типовой, вроде все так же. Где что я упустил? Как сделать, чтобы док видел остатки только на свою позицию и не залезал вперед? Пробовал убрать метод Актуальность(), но результат тот же самый.
|
|
1
zak555
13.07.11
✎
06:34
|
> В КредДокумент записывается, соответственно, документ, сформировавший движение в плюч или в минус.
с этого момента по-подробнее
|
|
2
DCKiller
13.07.11
✎
06:36
|
(1) Что поподробнее?
По сути, ситуация в том, что регистры всегда рассчитываются не на позицию конкретного документа, а на точку актуальности. Вот ее и надо исправить.
|
|
4
Андрей_Андреич
naïve
13.07.11
✎
06:38
|
ВремРегистры = СоздатьОбъект("Регистры");
ВремДолги = ВремРегистры.Долги; // АНик
ВремДолги.УстановитьЗначениеФильтра("Клиент", Клиент, 1); // АНик
Если ИтогиАктуальны() = 0 Тогда
ВремДолги.ВременныйРасчет(); // АНик
ВремРегистры.Актуальность(1);
ВремРегистры.РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
Оплачено = Сумма;
ЗаписаноДвижений = 1;
//АНик ВремДолги = ВремРегистры.Долги;
//АНик ВремДолги.УстановитьЗначениеФильтра("Клиент", Клиент, 1);
ВремДолги.ВыбратьИтоги();
Пока ВремДолги.ПолучитьИтог() = 1 Цикл
//погашение сумм авансов...
КонецЦикла
|
|