Программно изменить запись в регистре сведений

Иногда требуется по каким либо причинам изменить записьв регистре сведений программно.
В таком случае есть два варианта которыми можно эту задачу решить, первый используя объект МенеджерЗаписи, второй — используя НаборЗаписей регистра сведений.

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

Это конечно не ошибка, так можно, но все же есть есть риск что при ошибочном наложении отбора при создании НабораЗаписей есть вероятность отобрать а последствии изменить не те данные которые предполагалось изменить. Поэтому я считаю для изменения одиночной записи безопаснее и методологически правильным использовать именно МенеджерЗаписи.

Вариант через МенеджерЗаписи

Ниже приведу примерный код такого варианта.

	Менеджер = РегистрыСведений._КомментарийКонтрагентов.СоздатьМенеджерЗаписи();
	Менеджер.Контрагент =Контрагент;
	Менеджер.ДоговорКонтрагента =ДоговорКонтрагент;
	Менеджер.Период = Период;
	Менеджер.Прочитать();

	
	Если Менеджер.Выбран() Тогда
		Менеджер.ДоговорКонтрагента = НовыйДоговор;
		Менеджер.Записать();
	КонецЕсли;

Отдельно отмечу следующий момент, если РегистрСведений периодический то не надо забывать накладывать отбор на измерение Период, иначе одиночную запись вы не получите.

Вариант через НаборЗаписей

Ниже приведу код который меняет запись регистра сведений через набор записей.

Процедура УстановитьКомментарииКонтрагентов(Период, Контрагент, ДоговорКонтрагента )
	Набор = РегистрыСведений._КомментарийКонтрагентов.СоздатьНаборЗаписей();
	Набор.Отбор.Период.Установить(Период);
	Набор.Отбор.Контрагент.Установить(Контрагент);
        Набор.Отбор.ДоговорКонтрагента .Установить(ДоговорКонтрагента );
	Набор.Прочитать();
	Если Набор.Количество() Тогда
		Запись = Набор[0];
		Запись.ДоговорКонтрагента = НовыйДоговор;
		Набор.Записать();
	КонецЕсли;
КонецПроцедуры

Оба варианта делают одно и тоже, но используют разные механизмы. Какой вариант использовать решить вам.

Вам также может понравиться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика