Здравствуйте, друзья.
Веду разработку конфигурации для биржевой компании.
Конфигурация самописная.
Имеется документ "Формирование договора". В нем имеются статусы : Новый, Исполнен, а также платформа биржи : "Shop/Eshop" и "Dxarid/Exarid".
При внесении данных табличной части, высчитываются : залоговая сумма договора и комиссионный сбор.
Задача следующая:
Например для реестра платформы "EShop/Shop" имеется следующие данные:
-ЗалоговаяСумма - 10000
-Свободный остаток - 15000
-КомиссионыйСбор - 1000

Допустим, что у документа ЗалоговаяСумма договара равна 4320, а комиссионный сбор равен 216.
Если при проведении статус документа "Новый" тогда
в реестре
ЗалоговаяСумма = 10000 + 4320 (14320),
СвободныйОстаток = 15000-4320 (10680),
 КомиссионныйСбор = 1000 + 216 (1216)

Если при проведении статус документа "Исполнен/Закрыт" тогда
в реестре
ЗалоговаяСумма = 14320+ 4320,
СвободныйОстаток = 10860 + 4320,
 КомиссионныйСбор = 1216(остается без измений)

Проблема в том, что у меня идет сложении 2-х проводок по каждому документу.
Подскажите, где я мог допустить ошибку.
Заранее спасибо.

```1c
    Перем СуммаЗалогаДоговора,СуммаКомиссииДоговора,ОстатокЗалоговойСуммы,СвободныйОстатокСумма,ОстатокКоммиссионногоСбора;
    СуммаЗалогаДоговора = ЭтотОбъект.ПрайсЛист.Итог("ЗалоговаяСумма");
    СуммаКомиссииДоговора = ЭтотОбъект.ПрайсЛист.Итог("КомиссионныйСбор");
    ОстатокЗалоговойСуммы = ПолучитьЗалогОстаток();
    СвободныйОстатокСумма = ПолучитьСвободныйОстаток();
    ОстатокКоммиссионногоСбора = ПолучитьКоммиссияОстаток();
```

```1c
    #Область Функции
    &НаСервере
    Функция ПолучитьЗалогОстаток()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОборотыОбороты.ЗалоговаяСуммаОборот КАК ЗалоговаяСуммаОборот
    |ИЗ
    | РегистрНакопления.Обороты.Обороты(, , Регистратор, ПП = &ПП) КАК ОборотыОбороты";

    Запрос.УстановитьПараметр("ПП", ПП);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Возврат ВыборкаДетальныеЗаписи.ЗалоговаяСуммаОборот;
    КонецЦикла;
    КонецФункции
    &НаСервере
    Функция ПолучитьСвободныйОстаток()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОборотыОбороты.СвободныйОстатокОборот КАК СвободныйОстатокОборот
    |ИЗ
    | РегистрНакопления.Обороты.Обороты(, , Регистратор, ПП = &ПП) КАК ОборотыОбороты";

    Запрос.УстановитьПараметр("ПП", ПП);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Возврат ВыборкаДетальныеЗаписи.СвободныйОстатокОборот;
    КонецЦикла;
    КонецФункции
    &НаСервере
    Функция ПолучитьКоммиссияОстаток()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОборотыОбороты.КомиссионныйСборОборот КАК КомиссионныйСборОборот
    |ИЗ
    | РегистрНакопления.Обороты.Обороты(, , Регистратор, ПП = &ПП) КАК ОборотыОбороты";

    Запрос.УстановитьПараметр("ПП", ПП);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Возврат ВыборкаДетальныеЗаписи.КомиссионныйСборОборот;
    КонецЦикла;
    КонецФункции
    #КонецОбласти
```

```1c
    #Область РегистрНакопленияОбороты
    Если СтатусОплаты = ОбщегоНазначения.ПолучитьСтатус(1) Тогда
    Если Платформа = ОбщегоНазначения.ПолучитьОтдельно(1) ИЛИ Платформа = ОбщегоНазначения.ПолучитьОтдельно(2)Тогда
    Движения.Обороты.Записывать = Истина;
    Движение = Движения.Обороты.Добавить();
    Движение.Период = Дата;
    Движение.ПП = ОбщегоНазначения.ПолучитьПлатформу(2);
    Движение.ЗалоговаяСумма = ОстатокЗалоговойСуммы + СуммаЗалогаДоговора;
    Движение.КомиссионныйСбор = ОстатокКоммиссионногоСбора + СуммаКомиссииДоговора;
    Движение.СвободныйОстаток = СвободныйОстатокСумма - СуммаЗалогаДоговора;
    КонецЕсли;
    КонецЕсли;

    Если СтатусОплаты = ОбщегоНазначения.ПолучитьСтатус(3) Тогда
    Если Платформа = ОбщегоНазначения.ПолучитьОтдельно(1) ИЛИ Платформа = ОбщегоНазначения.ПолучитьОтдельно(2)Тогда
    Движения.Обороты.Записывать = Истина;
    Движение = Движения.Обороты.Добавить();
    Движение.Период = Дата;
    Движение.ПП = ОбщегоНазначения.ПолучитьПлатформу(2);
    Движение.ЗалоговаяСумма = ОстатокЗалоговойСуммы - СуммаЗалогаДоговора;
    Движение.КомиссионныйСбор = ОстатокКоммиссионногоСбора;
    Движение.СвободныйОстаток = СвободныйОстатокСумма + СуммаЗалогаДоговора;
    КонецЕсли;
    КонецЕсли;
    #КонецОбласти
```
---
Очищать регистры не пробовал перед получением данных?? Что то типа:

```1c
    Рег = регистрыНакопления.Обороты.СоздатьНаборЗаписей();
    Рег.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
    РегОтбор.Записать();
```

А потом получать обороты
---
Если у документа не стоит свойство "Удалять автоматически", то необходимо самому удалять движения. Не забутье при пометке удаление удалять движения также.
---
Очищать регистры не пробовал перед получением данных?? Что то типа:

```1c
    Рег = регистрыНакопления.Обороты.СоздатьНаборЗаписей();
    Рег.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
    РегОтбор.Записать();
```

А потом получать обороты
---
Спасибо, сделал что то в этом роде, все заработало.
Пришлось очищать данные как при проведении, так и при отмене проведения.
---
Если у документа не стоит свойство "Удалять автоматически", то необходимо самому удалять движения. Не забутье при пометке удаление удалять движения также.
---
С документом которым я мучился вчера и снова мучаюсь из-за глупости заказчика и его невнимательности, стоит свойство "Удалять автоматически", но он не является регистратором.
Все движение делаю ручками. Отмену движения делаю через обработчик модуля объекта "ОтменаПроведения".