Непонятно - почему при повтором оперативном проведении документа в ОбработкеПроведения не происходит очистка РегистраНакопления (Ячейки, Себестоимость), ведь в //1 и //2 указано - Движения.....Очистить() ? Без очистки - неверные значения в таблице итогов - неверен результат запроса //4.
Если же, разкомментировать участок кода - //3, т.е. принудительно запишем пустой набор записей в РегистрНакопления, то очистка происходит, в таблице итогов - верные значения и результат запроса - верен.
Вопрос - так и нужно делать, или как-то по другому?
Имеется обработка проведения (куски):
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Ячейки.Записывать = Истина;
//1
Движения.Ячейки.Очистить();
Движения.Себестоимость.Записывать = Истина;
//2
Движения.Себестоимость.Очистить();
//3
//Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
// Движения.Ячейки.Очистить();
// Движения.Себестоимость.Очистить();
// Движения.Записать();
// Движения.Себестоимость.Записывать = Истина;
// Движения.Ячейки.Записывать = Истина;
//КонецЕсли;
//4
Запрос = Новый Запрос;
//запрос к регистру "ячейки" из которого получаем остатки на "МоментИтогов"
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
МоментИтогов = Дата(1,1,1);
Иначе
МоментИтогов = МоментВремени(); //без движений самого документа
КонецЕсли;
Запрос.УстановитьПараметр("МоментИтогов", МоментИтогов);
ВыборкаНоменклатура = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
//обработка запроса
КонецЦикла;
...
(3)Наверное зависит от методики проведения. Если это новая методика, когда с начало пишутся движения, а потом читаются то можно не очищать, на одну запись в базу меньше. Если старая методика, когда нам нужны для проведения данные регистра, а не только данные документа, то надо очистить движения записав пустой набор записей.
Движения.Себестоимость.Очистить();
В управляемых формах движения можно не очищать. Достаточно просто записать движения, будет записан пустой набор.
3.
user659168_xec8787
325.05.18 14:20 Сейчас в теме
(2) Получается, что для корректности остатков нужно использовать след. кусок:
//3
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Движения.Ячейки.Очистить();
Движения.Себестоимость.Очистить();
Движения.Записать();
(3)Наверное зависит от методики проведения. Если это новая методика, когда с начало пишутся движения, а потом читаются то можно не очищать, на одну запись в базу меньше. Если старая методика, когда нам нужны для проведения данные регистра, а не только данные документа, то надо очистить движения записав пустой набор записей.
Движения.Себестоимость.Очистить();
В управляемых формах движения можно не очищать. Достаточно просто записать движения, будет записан пустой набор.