Имя: Пароль:
1C
 
Запись в набор записей регистра сведений
0 NurSagen
 
14.01.22
13:32
Есть непереодический независимый регистр сведений, с одним измерением. Он имеет уже некоторые записи. Нужно массово в него добавить еще записей.

Я сделал примерно так:

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

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

P.S. я честно говоря, думал, что в "НаборЗаписей.Записать(Истина)" параметр Истина как-раз таки и будет замещать повторяющиеся записи..
1 NurSagen
 
14.01.22
13:33
Делать каждый раз отбор по документу и прочитывать в цикле заново и проверять есть ли что-то уже тоже мне не нравиться, кажется что будет долго.
2 Галахад
 
гуру
14.01.22
13:37
В массиве-то дублей нет?
3 hhhh
 
14.01.22
13:38
(1) делай в транзакции, тогда будет быстро
4 NurSagen
 
14.01.22
13:40
(2) нет
5 youalex
 
14.01.22
14:44
А Прочитать() зачем?
6 Ёпрст
 
14.01.22
14:46
(0) выкинуть прочитать, добавить отбор
7 Kassern
 
14.01.22
14:47
(0)
НаборЗаписей = РегистрыСведений.РС.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(ПодготовленнаяТаблицаСДокументами);
НаборЗаписей.записать();
8 Kassern
 
14.01.22
14:48
(7) Запросом получаете все необходимые записи для РС и пихаете в таблицу значений
9 timurhv
 
14.01.22
15:01
(8) И через 0.05 сек другой сеанс загружает свои данные, удаляя изменения предыдущего? Блокировки тогда ставить на весь регистр.
10 Kassern
 
14.01.22
15:04
(9) надо с пониманием к этому способу подходить. Актуален, когда надо перезаполнить львиную долю регистра