|
Остатки регистра накопления | ☑ | ||
---|---|---|---|---|
0
dizpers
13.05.12
✎
22:33
|
Есть РН Счет с измерением Абонет (ссылка на справочник) и реквизитом Сумма (число). Есть документ ПополнитьСчет. У документа следующий обработчик проведения:
Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр Счет Приход Движение = Движения.Счет.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Сумма = Сумма; Движение.Абонент = Абонент; Фильтр = Новый Структура("Абонент", Абонент); тзОстатокНаСчете = РегистрыНакопления.Счет.Остатки(ТекущаяДата(), Фильтр); Сообщить(тзОстатокНаСчете[0].Сумма); //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры При этом каждый раз сообщением он выводит не то что надо. Надо, чтобы он выводил остаток на счете учитывая текущую операцию, а выводит остаток на счете до этой операции. Подскажите, в чем проблема? |
|||
1
Grusswelle
13.05.12
✎
22:37
|
(0) Транзакция не завершена потому что.
Сообщить(тзОстатокНаСчете[0].Сумма + Сумма); |
|||
2
Feanor
13.05.12
✎
22:38
|
тзОстатокНаСчете = РегистрыНакопления.Счет.Остатки(Новый Граница(ТекущаяДата(), ВидГраницы.Включая), Фильтр);
|
|||
3
Feanor
13.05.12
✎
22:38
|
(1) точно)
|
|||
4
dizpers
13.05.12
✎
22:47
|
(2) А что за финт с границей? Это для того, чтобы остатки считались по концу дня?
|
|||
5
dizpers
13.05.12
✎
22:49
|
(1) Спасибо! А у такого варианта нет проблем, то есть я всегда в таком случае получу остаток на счете, включая последнюю операцию?
|
|||
6
Grusswelle
13.05.12
✎
22:55
|
(4) Это бред. До завершения транзакции (Процедура ОбработкаПроведения) данных в регистре нет, и никакими границами их оттуда считать невозможно.
(5) Пожалуйста! Да. |
|||
7
Feanor
13.05.12
✎
23:06
|
(5) в (1) отличный пример быдлокода)
вот так всё же удачнее: Движение = Движения.Счет.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Сумма = Сумма; Движение.Абонент = Абонент; Движения.Счет.Записать(); Движения.Счет.Записывать = Ложь; Фильтр = Новый Структура("Абонент", Абонент); тзОстатокНаСчете = РегистрыНакопления.Счет.Остатки(Новый Граница(ТекущаяДата(), ВидГраницы.Включая), Фильтр); Сообщить(тзОстатокНаСчете[0].Сумма); |
|||
8
Лефмихалыч
13.05.12
✎
23:07
|
(7) остатки и так получаются по границу "включая"
|
|||
9
Grusswelle
13.05.12
✎
23:08
|
(7) Ой, спасибо! :-))
|
|||
10
Feanor
13.05.12
✎
23:08
|
(8) неправда
|
|||
11
Лефмихалыч
13.05.12
✎
23:13
|
(10) да, правильно - неправда
РегистрНакопленияМенеджер.<Имя регистра накопления>.Остатки (AccumulationRegisterManager.<Имя регистра накопления>.Balance) РегистрНакопленияМенеджер.<Имя регистра накопления> (AccumulationRegisterManager.<Имя регистра накопления>) Остатки (Balance) Синтаксис: Остатки(<МоментВремени>, <Отбор>, <Измерения>, <Ресурсы>) Параметры: <МоментВремени> (необязательный) Тип: Дата; МоментВремени; Граница. Момент времени, на который необходимо получить остатки. Если параметр не указан, то будут получены текущие остатки (на максимальную дату движений регистра). Если в качестве параметра передана Дата, то остатки будут получены на начало дня, если МоментВремени - то в остатках не будут учтены движения регистра, произошедшие в тот же момент времени. |
|||
12
dizpers
13.05.12
✎
23:31
|
(7), опробовал твой метод
Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // регистр Счет Приход Движение = Движения.Счет.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Сумма = Сумма; Движение.Абонент = Абонент; Фильтр = Новый Структура("Абонент", Абонент); тзОстатокНаСчете = РегистрыНакопления.Счет.Остатки(ТекущаяДата(), Фильтр); тзОстатокНаСчете = РегистрыНакопления.Счет.Остатки(Новый Граница(ТекущаяДата(), ВидГраницы.Включая), Фильтр); Сообщить(тзОстатокНаСчете[0].Сумма); //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Все также получаю предыдущее значение остатка на счете. Все-таки (1) верно отметил, что транзакция не завершена - и инфа о новом движении в РН еще не попала. |
|||
13
dizpers
13.05.12
✎
23:32
|
Тьфу, не по глазам. Не увидел, что ты там закрыл транзакцию %)
|
|||
14
Feanor
13.05.12
✎
23:32
|
(13) ничего я там не закрывал :) просто записал движения в регистр
|
|||
15
dizpers
13.05.12
✎
23:34
|
При использовании (7) ругается, что у Движения.Счет нет поля Записывать.
|
|||
16
Feanor
13.05.12
✎
23:35
|
(15) у тебя 8.1 О.о
|
|||
17
dizpers
13.05.12
✎
23:35
|
(14) а такой вариант действительно лучше, чем (1) ?
|
|||
18
dizpers
13.05.12
✎
23:35
|
(16) да
|
|||
19
Feanor
13.05.12
✎
23:36
|
(18) она уже мёртвая давно, ставь 8.2
|
|||
20
dizpers
13.05.12
✎
23:39
|
(19) А если относительно 8.1 говорить - как можно в ее контексте записать твой вариант?
|
|||
21
Feanor
13.05.12
✎
23:39
|
(20) тогда печаль - движения дважды будут записываться в БД, что не очень красиво
|
|||
22
Feanor
13.05.12
✎
23:40
|
(17) к примеру, в случае суммы и абонента в табличной части, такой способ уже будет испытывать неудобства.
|
|||
23
dizpers
13.05.12
✎
23:43
|
Спасибо за разъяснения, видимо (1) в таком случае лучший выход:)
|
|||
24
GROOVY
14.05.12
✎
00:03
|
Кто же Вас всех учит остатки объектной моделью получать?
|
|||
25
dizpers
14.05.12
✎
00:11
|
(24) Научите, как правильно:) Запросом?
|
|||
26
GROOVY
14.05.12
✎
00:15
|
Конечно запросом. И записывать движения правильнее не обращаясь к конкретному объекту коллекции, а ко всей коллекции "Движения.Записать()". Но это только в 8.2 и выше. Переходите на нормальную платформу.
|
|||
27
dizpers
14.05.12
✎
00:16
|
Если лучше запросом, то зачем тогда вообще существует метод Остатки у РН?
|
|||
28
GROOVY
14.05.12
✎
00:19
|
(27) Этот вопрос лучше всего адресовать в фирму 1С.
Метод "Остатки" как и много других порождают неуправляемый запрос к БД. Нам нужны запросы которыми мы не можем управлять? Нет! => ... |
|||
29
GROOVY
14.05.12
✎
00:21
|
Но если честно, то объектная модель для чтения данных осталась для более низкого порога вхождения прогеров переучивающихся с 7.7.
|
|||
30
dizpers
14.05.12
✎
00:32
|
Интересно:) Тоесть везде где нужно получать информацию надо использовать запрос, и забыть про объектную модель, так?
|
|||
31
GROOVY
14.05.12
✎
00:35
|
(30) Точно.
|
|||
32
АцкийЖипер
14.05.12
✎
00:36
|
(29) Скорее не для прогеров, а для быстрого перевода конф с последующим постепенным рефакторингом.
|
|||
33
GROOVY
14.05.12
✎
00:37
|
(32) Спорить не буду, выразил свое субъективное мнение.
Перевод конф = написанию новых. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |