Остатки регистра накопления

1. user719210 22.05.17 05:49 Сейчас в теме
Добрый день.

Возникла проблема с регистрами накопления.
У меня есть документ - ПриходДенежныхСредств (реквизиты:КошелекПоступления, Сумма, Отправитель). И есть Регистр накопления - РегистрОстатков (измерения: кошелек, ресурс: сумма). При проведении документа, мне нужно, чтобы в регистре накопления в колонке "сумма" отражался остаток по данному кошельку.
Например:
проведен документ1 на Кошелек1 сумма - 1000
в регистре запись - Кошелек1 1000
документ2 на Кошелек1 сумма - 500
в регистре запись - Кошелек1 1500
документ 3 на Кошелек1 сумма 300
в регистре запись - Кошелек1 1800 (а у меня выходит Кошелек1 2800, суммируются все значения колонки "сумма" по данному кошельку и добавляется сумма с документа и при каждом последующем проведении добавляется еще), не могу это исправить.
Вот код
Процедура ОбработкаПроведения(Отказ, Режим)
	
	// регистр РегистрОстатков
	Движения.РегистрОстатков.Записывать = Истина;
	Движение = Движения.РегистрОстатков.Добавить();
	Движение.Период = Дата;
	Движение.Кошелек = КошелекПоступления;
	Фильтр   = Новый Структура;
	Фильтр.Вставить("Кошелек",Движение.Кошелек);
	Движение.Сумма = Сумма + РегистрыНакопления.РегистрОстатков.Остатки(Дата,фильтр,"Кошелек","Сумма").Итог("Сумма");
КонецПроцедуры
Показать
+
По теме из базы знаний
Найденные решения
4. tritus 22.05.17 06:46 Сейчас в теме
по хорошему надо оставлять так
Процедура ОбработкаПроведения(Отказ, Режим)
    
    // регистр РегистрОстатков
    Движения.РегистрОстатков.Записывать = Истина;
    Движение = Движения.РегистрОстатков.Добавить();
    Движение.Период = Дата;
    Движение.Кошелек = КошелекПоступления;
    Фильтр   = Новый Структура;
    Фильтр.Вставить("Кошелек",Движение.Кошелек);
    Движение.Сумма = Сумма
КонецПроцедуры
Показать

потому что РегистрНакопления сам суммирует измерения.

http://programmist1s.ru/registryi-nakopleniya-v-1s/
user719210; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tritus 22.05.17 06:25 Сейчас в теме
потому что ты обращаешься к остатку. А нужно делать запрос на последнюю запись.
user719210; +1
3. user719210 22.05.17 06:38 Сейчас в теме
(2)
хмм, а как это сделать? Программирую только неделю, не очень понял Вас.
+
4. tritus 22.05.17 06:46 Сейчас в теме
по хорошему надо оставлять так
Процедура ОбработкаПроведения(Отказ, Режим)
    
    // регистр РегистрОстатков
    Движения.РегистрОстатков.Записывать = Истина;
    Движение = Движения.РегистрОстатков.Добавить();
    Движение.Период = Дата;
    Движение.Кошелек = КошелекПоступления;
    Фильтр   = Новый Структура;
    Фильтр.Вставить("Кошелек",Движение.Кошелек);
    Движение.Сумма = Сумма
КонецПроцедуры
Показать

потому что РегистрНакопления сам суммирует измерения.

http://programmist1s.ru/registryi-nakopleniya-v-1s/
user719210; +1
5. user719210 22.05.17 06:54 Сейчас в теме
Изначально так и было, просто хотел сделать чтобы можно было видеть остаток по конкретному кошельку в регистре, а не только в отчете.
Ну мне это не принципиально, оставлю тогда так, спасибо за ответ.
+
8. ResetAtreides 22.05.17 10:02 Сейчас в теме
(5) Не надо так делать. Во-первых, некорректное использование регистра остатков. Сразу незачет на сертификации 1С. Во-вторых, действия необратимы при отмене проведения. Хочется видеть остаток в регистре - нарисуйте ему свою форму. А механизмы 1С нужно по назначению использовать
user719210; +1
9. user719210 22.05.17 10:03 Сейчас в теме
(8)
Я и не стал, решил вернуть как было.
+
10. ResetAtreides 22.05.17 10:06 Сейчас в теме
(9) Как было это в 1м посте? Тоже неверно. Движение.Сумма должно быть просто суммой, без учета предыдущих остатков. Регистр остатков остатки сам посчитает
user719210; +1
11. user719210 22.05.17 10:19 Сейчас в теме
(10)
я понял, я вернул к тому, как это было до того, как я решил это сделать) т.е. как в 4ом посте, только без фильтра
+
6. tritus 22.05.17 06:59 Сейчас в теме
ну если так хотите то примерно так

Процедура ОбработкаПроведения(Отказ, Режим)
    
    // регистр РегистрОстатков
    Движения.РегистрОстатков.Записывать = Истина;
    Движение = Движения.РегистрОстатков.Добавить();
    Движение.Период = Дата;
    Движение.Кошелек = КошелекПоступления;
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ ПЕРВЫЕ 1
             |	РегистрОстатков.Сумма КАК Сумма
             |ИЗ
             |	РегистрНакопления.РегистрОстатков КАК РегистрОстатков
             |ГДЕ
             |	РегистрОстатков.ВидДвижения = &ВидДвижения
             |	И РегистрОстатков.Период <= &Период
             |	И РегистрОстатков.Кошелек = &Кошелек
             |
             |УПОРЯДОЧИТЬ ПО
             |	РегистрОстатков.Период УБЫВ"

Запрос.УстановитьПараметр("ВидДвижения",ВидДвиженияНакопления.Приход);
Запрос.УстановитьПараметр("Период",Дата);//тут надо использовать Границу()
Запрос.УстановитьПараметр("Кошелек",КошелекПоступления);


Выборка=Запрос.Выполнить().Выбрать();
если выборка.Следующий() тогда 
	ПоследняяСумма=Выборка.Сумма;
иначе
	ПоследняяСумма=0;
конецесли;
Движение.Сумма=ПоследняяСумма+Сумма;
   
КонецПроцедуры
Показать
user719210; +1
7. user719210 22.05.17 07:03 Сейчас в теме
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот