Ошибка записи в непереодический регистр сведений

1. user1089020 21.04.21 16:11 Сейчас в теме
Добрый вечер, отважные 1с-ники!

Имеется обработка с табличной частью, в которой проставляются статусы договорам. Задача сохранить проставленные статусы в регистре сведений. Для этой цели использую непериодический независимый регистр сведений. Запись произвожу вот таким образом:

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


Но возникает ошибочка:

{Форма.Форма.Форма(126)}: Ошибка при вызове метода контекста (Записать)
НаборЗаписей.Записать();
по причине:
Запись с такими ключевыми полями существует! : МойРС: (Регистр сведений: МойРС; Номер строки: 2)

Сам регистр пустой. Намекните пожалуйста, что тут не так?
По теме из базы знаний
Найденные решения
10. andy_zhav 197 21.04.21 16:53 Сейчас в теме
(8) Если у договора может быть несколько статусов - вынести статус в измерение и свернуть таблицу по статусам и договорам, чтобы не было дублей. Как вариант.

Если различается дата всегда - можно сделать или периодический регистр или дату в измерение вынести. Тогда статус можно в ресурсы. Даже наверное этот вариант лучше. У вас же не может быть в одно и то же время несколько статусов у договора?
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DenisCh 21.04.21 16:15 Сейчас в теме
В строке 1 и 2 - одинаковый набор измерений...
3. soft_wind 21.04.21 16:18 Сейчас в теме
нуууу
НоваяЗапись.Договор = Строка.НаименованиеДоговора;
4. user1089020 21.04.21 16:21 Сейчас в теме
(3)
Договор
- это у меня измерение в регистре, а
НаименованиеДоговора
название колонки в табличной части. Я записываю значение колонки в регистр.
5. soft_wind 21.04.21 16:27 Сейчас в теме
НаименованиеДоговора - что за тип?
проверьте что бы у вас совпадали типы

да и отборы надо использовать иначе вы будете затирать ранее сохраненные данные
9. user1089020 21.04.21 16:50 Сейчас в теме
(5) Типы действительно не совпадали - привел в соответствие.

(5)
да и отборы надо использовать иначе вы будете затирать ранее сохраненные данные


Поделитесь пожалуйста, что Вы имеете в виду?
6. andy_zhav 197 21.04.21 16:32 Сейчас в теме
(1) Какие измерения у регистра?
7. andy_zhav 197 21.04.21 16:33 Сейчас в теме
Если только договор и в таблице несколько записей с одним договором - запись не пройдет
8. user1089020 21.04.21 16:49 Сейчас в теме
(7) Да, в измерении один договор, а остальное ресурсы. И что тогда делать?
10. andy_zhav 197 21.04.21 16:53 Сейчас в теме
(8) Если у договора может быть несколько статусов - вынести статус в измерение и свернуть таблицу по статусам и договорам, чтобы не было дублей. Как вариант.

Если различается дата всегда - можно сделать или периодический регистр или дату в измерение вынести. Тогда статус можно в ресурсы. Даже наверное этот вариант лучше. У вас же не может быть в одно и то же время несколько статусов у договора?
12. user1089020 21.04.21 17:01 Сейчас в теме
(10) Спасибо за советы, очень хорошие и полезные. Буду думать и делать )
11. soft_wind 21.04.21 17:01 Сейчас в теме
если у вас только одно измерение - Договор
то надо устанавливать отбор
примерно так, ди и запись только по одному договору, если/когда что-то дописывать или менять будете

Процедура КнопкаВыполнитьНажатие (Элемент)
НаборЗаписей = РегистрыСведений.МойРС.СоздатьНаборЗаписей();
Для Каждого Строка Из ТабличноеПоле Цикл
НаборЗаписей.Очистить();
НаборЗаписей.Отбор.Договор.Установить(Строка.Договор); //Отбор
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Договор = Строка.Договор;//здесь должна быть ссылка на Договор
НоваяЗапись.Статус = Строка.Статус;
НоваяЗапись.Дата = Строка.ДатаСтатуса;
НоваяЗапись.Комментарий = Строка.Комментарий;
НаборЗаписей.Записать();
КонецЦикла;
КонецПроцедуры
15. user1089020 21.04.21 17:13 Сейчас в теме
Спасибо за помощь, подумаю
13. andy_zhav 197 21.04.21 17:04 Сейчас в теме
(11) Вы предлагаете при заполнении набора записей в цикле, в каждой итерации очищать набор записей? Бред. У вас в итоге в наборе записей будет только одна последняя запись. Отбор здесь не нужен.
14. andy_zhav 197 21.04.21 17:08 Сейчас в теме
увидел что вы записываете набор в цикле. Поправлюсь. Возможно все записи запишутся, но так крайне не правильно делать. В этом случае лучше использовать менеджер записи регистра сведений. Смысл набора записей, чтобы обрабатывать записи пакетом. Создаем набор записей, устанавливаем отборы, работаем с записями в цикле
16. soft_wind 21.04.21 17:14 Сейчас в теме
(14)
1.менеджер записи пишет данные через набор
2.да в цикле не очень красиво, была сделана оговорка что актуально при добавлении или изменении (статусов)
если идет начальная загрузка в пустой регистр, то действительно можно без отбора и сразу все договора
17. b100 22.04.21 14:22 Сейчас в теме
У Вас, пропущен выбор записи для изменения и если новая запись, запишется, а при существующей даст ошибку. Во второй строке добавьте отбор: НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот