Имя: Пароль:
1C
1С v8
Перезапись регистра сведений (Непериодического, Независимого). Помогите разобраться.
🠗 (Волшебник 30.11.2017 09:39)
,
0 Румата
 
30.11.17
08:51
В процедуре "ПередЗаписью" в форме элемента справочника "Номенклатуры" хочу данные из реквизита справочника записывать в свойство (регистр сведений  "ЗначениеСвойствОбъектов"). Название реквизита "НоменклатурнаяГруппа", название свойства "ВидНоменклатуры".


Вот код :

Процедура ПередЗаписью(Отказ)
УстановитьСвойствоУНоменклатуры("Вид номенклатуры",НоменклатурнаяГруппа.Наименование);
КонецПроцедуры

=====================

Процедура УстановитьСвойствоУНоменклатуры(НаименованиеСвойства,ЗначениеСвойства)
    НашеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(НаименованиеСвойства);
    НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(ЭтотОбъект.Ссылка);
    НаборЗаписей.Отбор.Свойство.Установить(НашеСвойство);
    НаборЗаписей.Прочитать();
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Объект = Ссылка;
    НоваяЗапись.Свойство = НашеСвойство;
    НоваяЗапись.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
    НаборЗаписей.Записать(Истина);
КонецПроцедуры    

===========================

Вот ошибка :
Ошибка при вызове метода контекста (Записать) НаборЗаписей.Записать(Истина);
по причине:
Запись с такими ключевыми полями существует!

============================

Помогите пожалуйста разобраться, что я не так делаю. Спасибо !
1 Mankubus
 
30.11.17
08:55
(0)
НашеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(НаименованиеСвойства);
    НоваяЗапись  = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НоваяЗапись.Объект = Ссылка;
    НоваяЗапись.Свойство = НашеСвойство;
    НоваяЗапись.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
    НаборЗаписей.Записать(Истина);
2 Mankubus
 
30.11.17
08:56
(1) то есть так:
НашеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(НаименованиеСвойства);
    НоваяЗапись  = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписей();
    НоваяЗапись.Объект = Ссылка;
    НоваяЗапись.Свойство = НашеСвойство;
    НоваяЗапись.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
    НаборЗаписей.Записать(Истина);
3 rphosts
 
30.11.17
08:57
НаборЗаписей.Прочитать();
   НоваяЗапись = НаборЗаписей.Добавить();
замени на
   НаборЗаписей.Прочитать();
   НаборЗаписей.Очистить();
    НоваяЗапись = НаборЗаписей.Добавить();
4 Румата
 
30.11.17
09:22
( rphosts) Ошибки не возникает, но не перезаписывает новые значения. Наверное где-то ещё идет запись в этот регистр ...
5 Румата
 
30.11.17
09:22
Сейчас буду разбираться ...
6 1sanekmaloi1
 
30.11.17
09:23
Чтение набора вообще накой надо, без Прочитать() все будет работать?
7 Волшебник
 
модератор
30.11.17
09:25
Используй менеджер записи или проверяй, что отбор действительно установился
8 Mankubus
 
30.11.17
09:43
(4) а мой вариант чем не устроил?
9 Румата
 
30.11.17
10:14
( Mankubus) Не рабочий вариант, сейчас подправлю, попробую ...
Что-то не могу разобраться, значения не перезаполняются через набор записей
10 Румата
 
30.11.17
10:18
Вот так переделал процедуру, но все равно остаются старые значения в регистре... Голову уже сломал...


Процедура УстановитьСвойствоУНоменклатуры(НаименованиеСвойства,ЗначениеСвойства)
    НашеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(НаименованиеСвойства);
    НоваяЗапись  = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    НоваяЗапись.Объект = Ссылка;
    НоваяЗапись.Свойство = НашеСвойство;
    НоваяЗапись.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
    НоваяЗапись.Записать(Истина);
КонецПроцедуры
11 Румата
 
30.11.17
10:24
Господа, помогите пожалуйста... Уже не первый час пытаюсь разобраться )
12 Румата
 
30.11.17
11:36
Разобрался. Всему виной Обработка "ЗначенияСвойств" Табличная часть "СвойстваИЗначения" ;)
13 Румата
 
30.11.17
11:44
Вот код, может кому-нибудь пригодится :
Процедура УстановитьСвойствоУНоменклатуры(НаименованиеСвойства,ЗначениеСвойства)
    НашеСвойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(НаименованиеСвойства);
    НайденнаяСтрока = ОбработкаОбъектЗначенияСвойств.СвойстваИЗначения.Найти(НашеСвойство,"Свойство");
    Если НайденнаяСтрока <> Неопределено Тогда
         НайденнаяСтрока.Значение =  Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
    КонецЕсли;    
КонецПроцедуры