Добрый день.

Возникла проблема с регистрами накопления.
У меня есть документ - ПриходДенежныхСредств (реквизиты:КошелекПоступления, Сумма, Отправитель). И есть Регистр накопления - РегистрОстатков (измерения: кошелек, ресурс: сумма). При проведении документа, мне нужно, чтобы в регистре накопления в колонке "сумма" отражался остаток по данному кошельку.
Например:
проведен документ1 на Кошелек1 сумма - 1000
в регистре запись - Кошелек1 1000
документ2 на Кошелек1 сумма - 500
в регистре запись - Кошелек1 1500
документ 3 на Кошелек1 сумма 300
в регистре запись - Кошелек1 1800 (а у меня выходит Кошелек1 2800, суммируются все значения колонки "сумма" по данному кошельку и добавляется сумма с документа и при каждом последующем проведении добавляется еще), не могу это исправить.
Вот код

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

    // регистр РегистрОстатков
    Движения.РегистрОстатков.Записывать = Истина;
    Движение = Движения.РегистрОстатков.Добавить();
    Движение.Период = Дата;
    Движение.Кошелек = КошелекПоступления;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Кошелек",Движение.Кошелек);
    Движение.Сумма = Сумма + РегистрыНакопления.РегистрОстатков.Остатки(Дата,фильтр,"Кошелек","Сумма").Итог("Сумма");
    КонецПроцедуры
```
---
по хорошему надо оставлять так

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

    // регистр РегистрОстатков
    Движения.РегистрОстатков.Записывать = Истина;
    Движение = Движения.РегистрОстатков.Добавить();
    Движение.Период = Дата;
    Движение.Кошелек = КошелекПоступления;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Кошелек",Движение.Кошелек);
    Движение.Сумма = Сумма
    КонецПроцедуры
```

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

http://programmist1s.ru/registryi-nakopleniya-v-1s/
---
потому что ты обращаешься к остатку. А нужно делать запрос на последнюю запись.
---
хмм, а как это сделать? Программирую только неделю, не очень понял Вас.
---
по хорошему надо оставлять так

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

    // регистр РегистрОстатков
    Движения.РегистрОстатков.Записывать = Истина;
    Движение = Движения.РегистрОстатков.Добавить();
    Движение.Период = Дата;
    Движение.Кошелек = КошелекПоступления;
    Фильтр = Новый Структура;
    Фильтр.Вставить("Кошелек",Движение.Кошелек);
    Движение.Сумма = Сумма
    КонецПроцедуры
```

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

http://programmist1s.ru/registryi-nakopleniya-v-1s/
---
Изначально так и было, просто хотел сделать чтобы можно было видеть остаток по конкретному кошельку в регистре, а не только в отчете.
Ну мне это не принципиально, оставлю тогда так, спасибо за ответ.
---
Не надо так делать. Во-первых, некорректное использование регистра остатков. Сразу незачет на сертификации 1С. Во-вторых, действия необратимы при отмене проведения. Хочется видеть остаток в регистре - нарисуйте ему свою форму. А механизмы 1С нужно по назначению использовать
---
Я и не стал, решил вернуть как было.
---
Как было это в 1м посте? Тоже неверно. Движение.Сумма должно быть просто суммой, без учета предыдущих остатков. Регистр остатков остатки сам посчитает
---
я понял, я вернул к тому, как это было до того, как я решил это сделать) т.е. как в 4ом посте, только без фильтра
---
ну если так хотите то примерно так

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)

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

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

    Выборка=Запрос.Выполнить().Выбрать();
    если выборка.Следующий() тогда
    ПоследняяСумма=Выборка.Сумма;
    иначе
    ПоследняяСумма=0;
    конецесли;
    Движение.Сумма=ПоследняяСумма+Сумма;

    КонецПроцедуры
```
---
Спасибо!