helpf.pro
Регистрация

v8: Запись в регистр сведений при записи документа

Anjut-ka4
03.08.2015 12:11Прочитано: 9402

Есть документ, в котором свойство "проведение" установлено "запретить". Запись в периодический регистр сведений проводится в процедуре "При записи" следующим образом:

Код 1C v 8.х
 Движения.ТС_ПоказанияСчетчиков.Записывать = Истина;

Если ПоказанияСчетчиков.Количество() > 0 Тогда //табл.часть
ТЗ = ПоказанияСчетчиков.Выгрузить();
ТЗ.Сортировать("НомерСчетчика, НаКонец убыв");
ном_сч = "";
Для каждого ел Из ТЗ Цикл
Если ЗначениеЗаполнено(ел.НомерСчетчика) Тогда 
Если ном_сч = ел.НомерСчетчика Тогда
Продолжить;
КонецЕсли;
Движение = Движения.ТС_ПоказанияСчетчиков.Добавить();
Движение.Период        = ПериодРегистрации;
Движение.НомерСчетчика = ел.НомерСчетчика;
Движение.Значение      = ел.НаКонец;
ном_сч = ел.НомерСчетчика;
КонецЕсли;
КонецЦикла; 
КонецЕсли;

Движения.Записать();

Если нажимаю "Ок" в документе - документ записывается без всяких ошибок. 

Если нажимаю "Записать", то запись в регистр сведений тоже отрабатывает правильно. НО если нажимаю еще раз "Записать" - ОШИБКА "Запись с такими ключевыми полями существует!". Номер строки выводит следующий, т.е. если в регистре 12 записей, в ошибке выводится на 13-й строке.

И не важно менялся документ или нет. 

Т.е. один раз нажимаю "записать" - все хорошо, на второй раз - ошибка!

Что это такое? Подскажите, пожалуйста!

Yandex
Возможно, вас также заинтересует
Реклама на портале
IBReiter
03.08.2015 13:04Ответ № 1

Возможно, свойство документа "Удалять движения автоматически" Вас спасёт

IBReiter
03.08.2015 13:11Ответ № 2

Ну и ещё перед условием добавить Движения.ТС_ПоказанияСчетчиков.Очистить()

Anjut-ka4
03.08.2015 13:35Ответ № 3

"Удалять движения автоматически" - неактивно, т.к. "проведение" - "запретить"

Движения.ТС_ПоказанияСчетчиков.Очистить() - помогло, спасибо! 

Но как все-таки происходит запись - почему на нечетные разы нажатия "Записать" - ошибки нет? 

Почему при нажатии "ок" - нет ошибки?

И еще.. После записи в  регистр сведений идет запись в регистр накопления - и там отрабатывает все отлично.. там не стоит Очистить()..

IBReiter
03.08.2015 14:47Ответ № 4

Дело не в четной или нечетной записи, дело в том, что при первой записи набор записей регистра не прочитан.

Поэтому при первой записи набор пустой, в него записи добавляются и он записывается - и тогда все нормально, а при последующей записи - набор уже прочитан и него эти записи уже добавляются с теми же измерениями - вот и получается задвоение.

И вот нашел еще в описании платформы:

Записи, относящиеся к одному регистратору, называются движениями этого регистратора. Движения не являются частью владеющего ими документа, при записи и чтении документа они не записываются и не считываются. Однако они тесно связаны с ним.

Движения могут создаваться при проведении документов, при записи документов, могут формироваться интерактивно или в виде набора записей регистра (с отбором по регистратору).

Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.