Доброго дня всем.
Есть два документа (Поступление и Списание) с одинаковыми свойствами проведения и удаления движений (неоперативно, удалять автоматически при отмене проведения). Двигают один и тот же регистр остатков. При перепроведении Списания движения дублируются, в Поступлении все нормально. Почему в Списании движения не перезаписываются, а дублируются?
---
Нашел в чем было дело. Навигационная ссылка на движения, свойство "Данные":
- в документе Поступление было "Объект.Ссылка"
- в документе Списание было "Объект.Движения.ОстаткиТМЦ.Отбор.Регистратор.Значение"
что и приводило к чтению движений при открытии формы.
Невнимательно создал команду данной ссылки в Списании.
---
сравните свойства документов Движение -> удаление движений. Если они одинаковые, значит процедуры обработки проведения разные, нужно уже смотреть в отладке в какой момент очищаются движения в Поступлении
---
Свойства одинаковые.

Движения в Поступлении в коде не очищаются:

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

    Движения.ОстаткиТМЦ.Записывать = Истина;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПоступлениеТМЦТМЦ.Номенклатура КАК Номенклатура,
    | СУММА(ПоступлениеТМЦТМЦ.Количество) КАК Количество
    |ИЗ
    | Документ.ПоступлениеТМЦ.ТМЦ КАК ПоступлениеТМЦТМЦ
    |ГДЕ
    | ПоступлениеТМЦТМЦ.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | ПоступлениеТМЦТМЦ.Номенклатура";

    Запрос.УстановитьПараметр("Ссылка", Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

    КонецПроцедуры // ОбработкаПроведения()
```

Списание:

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

    Движения.ОстаткиТМЦ.Записывать = Истина;
    Движения.Записать();

    Движения.ОстаткиТМЦ.Записывать = Истина;

    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТМЦ");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.УстановитьЗначение("Контрагент", Контрагент);
    ЭлементБлокировки.УстановитьЗначение("Склад", Склад);
    ЭлементБлокировки.ИсточникДанных = ТМЦ;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СписаниеТМЦТМЦ.Номенклатура КАК Номенклатура,
    | СУММА(СписаниеТМЦТМЦ.Количество) КАК Количество
    |ПОМЕСТИТЬ втТЧТовары
    |ИЗ
    | Документ.СписаниеТМЦ.ТМЦ КАК СписаниеТМЦТМЦ
    |ГДЕ
    | СписаниеТМЦТМЦ.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | СписаниеТМЦТМЦ.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    | Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | втТЧТовары.Номенклатура КАК Номенклатура,
    | втТЧТовары.Номенклатура.Представление КАК НоменклатураПредставление,
    | втТЧТовары.Количество КАК Количество,
    | ЕСТЬNULL(ОстаткиТМЦОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    | ОстаткиТМЦОстатки.ПриходныйДокумент КАК Партия
    |ИЗ
    | втТЧТовары КАК втТЧТовары
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТМЦ.Остатки(
    | &МоментВремени,
    | Номенклатура В
    | (ВЫБРАТЬ
    | втТЧТовары.Номенклатура КАК Номенклатура
    | ИЗ
    | втТЧТовары КАК втТЧТовары)
    | И Контрагент = &Контрагент
    | И Склад = &Склад) КАК ОстаткиТМЦОстатки
    | ПО втТЧТовары.Номенклатура = ОстаткиТМЦОстатки.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    | ОстаткиТМЦОстатки.ПриходныйДокумент.МоментВремени
    |ИТОГИ
    | МАКСИМУМ(Количество),
    | СУММА(КоличествоОстаток)
    |ПО
    | Номенклатура";

    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаНоменклатура.Следующий() Цикл

    Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
    Отказ = Истина;

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = СтрШаблон("Недостаточно товара %1 в количестве %2",
    ВыборкаНоменклатура.НоменклатураПредставление,
    ВыборкаНоменклатура.Количество - ВыборкаНоменклатура.КоличествоОстаток);
    Сообщение.Сообщить();
    КонецЕсли;

    Если Отказ Тогда
    Продолжить;
    КонецЕсли;

    КоличествоСписать = ВыборкаНоменклатура.Количество;

    ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    Количество = Мин(КоличествоСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);

    Движение = Движения.ОстаткиТМЦ.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Контрагент = Контрагент;
    Движение.Склад = Склад;
    Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.ПриходныйДокумент = ВыборкаДетальныеЗаписи.Партия;
    Движение.Количество = Количество;

    КоличествоСписать = КоличествоСписать - Количество;

    Если КоличествоСписать <= 0 Тогда
    Прервать;
    КонецЕсли;

    КонецЦикла;
    КонецЦикла;

    КонецПроцедуры
```
---
по идее вот эта строчка в списании должна была удалить старые движения

```1c
    Движения.ОстаткиТМЦ.Записывать = Истина;
    Движения.Записать();
```

Отладки нету?
---
Под отладчиком при входе в процедуру ОбработкаПроведения Поступления Движения.ОстаткиТМЦ.Количество() = 0, а в Списании столько сколько записей в движении. И после Движения.Записать() не становится = 0. Не пойму в чем дело. И почему Поступление перезаписывает свои движения, а Списание добавляет новые?
---
очисти из принудительно(Движения.ОстаткиТМЦ.Очистить()), кеш почисти . к спецу готовитесь?
---
Нет, пишу конфигурацию для склада временного хранения с нуля.
Да, Очистить работает. Я могу и свойство "Удаление движений" поставить в "Удалять автоматически" (для данной конфигурации пойдет), но хочется понять почему в Поступлении движения перезаписываются, а в Списании нет?
---
тоже сталкивался с этим когда свои документы создавал, не стал долго думать взял да и очистил. При чем в одном типе документа работало, а в другом нет
---
Но ведь движения документа должны перезаписываться. Почему этого не происходит?
---
Вот что нашел у Чистова:

"...Теперь вопрос, а зачем мы в модуле написали "Очистить()", тут все дело в том, что теперь у нас движения автоматом не очищаются... НО! При работе с управляемыми формами копия объекта БД может не загрузить старые движения, к примеру, зависит это и от свойства данных формы "Использовать всегда". К примеру, в зависимости от этого свойства, движения документа будут прочитаны (если галка стоит) при открытии формы или нет. А если даже галка не установлена, и в форме отображаются движения, то движения будут прочитаны при открытии формы.
А если движения прочитаны, то наборы записей в свойстве документа "Движения" не пустые, и добавление при проведении новых движений, как правило приводит к дублям движений. Так вот, чтобы не зависеть от обстоятельств, мы на всякий случай удаляем то, что возможно может находиться в коллекции движений..."

Т.е. по каким-то причинам при открытии формы документа Списание движения оказываются прочитаны (свойство "Использовать всегда" у Движения обоих документов снято, на форме обоих документов есть гиперссылка перехода к движениям).
---
свойство "Использовать всегда" у Движения обоих документов снято
Тут либо в модуле формы, например в ПередЗаписьюНаСервере, читаются движения, либо в модуле объекта, например ПередЗаписью. Проверил на тестовой: навигационная ссылка на движения, если она платформенная, не приводит к чтению движений на форме объекта. Есть возможность прикрепить файл конфигурации .cf?
---
Т.к. конфигурация делается с нуля (на основании БСП) и эти два документа созданы мной, то команд на чтение движений точно нет.
(12) Поиск по ".Прочитать()" дает результаты только в модулях БСП.
---
Можно еще пройтись глобальным поиском по конфигурации (Ctrl + Shift + F) с текстом ".Прочитать()"
---
Нашел в чем было дело. Навигационная ссылка на движения, свойство "Данные":
- в документе Поступление было "Объект.Ссылка"
- в документе Списание было "Объект.Движения.ОстаткиТМЦ.Отбор.Регистратор.Значение"
что и приводило к чтению движений при открытии формы.
Невнимательно создал команду данной ссылки в Списании.