Регистр сведений "Свойства объектов"

1. wrooom 175 17.08.19 17:51 Сейчас в теме
Здравствуйте.
Код в модуле объекта справочника "Контрагенты" в процедуре ПриЗаписи:
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); 
	//НаборЗаписей.Отбор.Объект.Установить(ЭтотОбъект.Ссылка); 
	НаборЗаписей.Отбор.Объект.Значение = ЭтотОбъект.Ссылка;
	НаборЗаписей.Отбор.Объект.Использование = Истина;
	//НаборЗаписей.Отбор.Свойство.Установить(ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов")); 
	НаборЗаписей.Отбор.Свойство.Значение = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов");
	НаборЗаписей.Отбор.Свойство.Использование = Истина;
	НаборЗаписей.Записывать = Истина;
	//НаборЗаписей.Прочитать();
	
	НоваяЗапись = НаборЗаписей.Добавить(); 
    НоваяЗапись.Объект = ЭтотОбъект.Ссылка;   
    НоваяЗапись.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов");  
	
	НоваяЗапись.Значение = ТекущаяДата(); 

    НаборЗаписей.Записать(); 
Показать

-Не работает. Просто нажимаю записать. В отладке НаборЗаписей.Записать() проходит, а в регистре запись с объектом ЭтотОбъект не появляется.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
36. wrooom 175 20.08.19 17:41 Сейчас в теме +1 $m
Перенес код в Форму - Процедура "ПослеЗаписи ()", и все заработало.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. independ 1520 17.08.19 18:00 Сейчас в теме
(1)
Функция ЗаписатьЗначениеСвойства(Значение,ЗначениеСвойства,ВыбОбъект) Экспорт
	ПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
	МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.Объект = ВыбОБъект.Ссылка;
	МенеджерЗаписи.Свойство = ПВХ.Ссылка;
	МенеджерЗаписи.Значение = Значение;
	МенеджерЗаписи.Записать()
КонецФункции
Показать
5. wrooom 175 17.08.19 18:07 Сейчас в теме
(4)
ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = ВыбОБъект.Ссылка;
МенеджерЗаписи.Свойство = ПВХ.Ссылка;
МенеджерЗаписи.Значение = Значение;
МенеджерЗаписи.Записать()


Нет.. то же результат.
6. independ 1520 17.08.19 18:13 Сейчас в теме
(5) это универсальная функция
ЗаписатьЗначениеСвойства(ТекущаяДата(),"ДатаИзмененияКонтрагентов",ЭтотОбъект.Ссылка)
7. wrooom 175 17.08.19 18:18 Сейчас в теме
(6)
ЗаписатьЗначениеСвойства

СП о ней не знает.
8. independ 1520 17.08.19 18:21 Сейчас в теме
9. wrooom 175 17.08.19 18:25 Сейчас в теме
(8) о ней знает Обработка.ЗагрузкаДанныхCommerceML.Модуль .. А как к нему правильно обратится
10. wrooom 175 17.08.19 18:28 Сейчас в теме
(9)Там тоже самое через набор записей
11. independ 1520 17.08.19 18:28 Сейчас в теме
(9) я написал код функции в в (4), пользуюсь сам, если нужно записать свойство объекта
12. wrooom 175 17.08.19 18:34 Сейчас в теме
(6)
ТекущаяДата(),"ДатаИзмененияКонтрагентов",ЭтотОбъект.Ссылка


Вставил Функцию.. Нет изменений в регистре.
13. independ 1520 17.08.19 18:42 Сейчас в теме
(12) тогда отладка, нужно установить точку останова в строке МенеджерЗаписи.Записать() и проверить, что в МенеджерЗаписи.Свойство
14. wrooom 175 17.08.19 18:45 Сейчас в теме
(13)ДатаИзмененияКонтрагентов Тип ПВХСсылка.СвойстваОбъектов
15. independ 1520 17.08.19 18:57 Сейчас в теме
(14) а тип значения - Дата?
17. wrooom 175 17.08.19 19:00 Сейчас в теме
35. wrooom 175 20.08.19 14:51 Сейчас в теме
Нашел решение (точнее подсказали). Процедуру ввода данных в регистр надо вводить в модуле формы ПослеЗаписи().
2. wrooom 175 17.08.19 17:53 Сейчас в теме
А забыл сказать ... Это в УТ 10.3.18.3
3. wrooom 175 17.08.19 17:59 Сейчас в теме
В ПВХ СвойстваОбъектов добавил элемент "ДатаИзмененияКонтрагентов" с назначением Справочник "Контрагенты" и типом Дата
16. wrooom 175 17.08.19 18:59 Сейчас в теме
18. wrooom 175 17.08.19 23:14 Сейчас в теме
19. dhurricane 17.08.19 23:39 Сейчас в теме
(18) Во-первых, убедитесь с помощью отладчика, что при записи набора измерение "Свойство" заполнено. Удается ли найти элемент ПВХ по имени "ДатаИзмененияКонтрагентов"?

Во-вторых, добавьте сразу после записи набора запрос к регистру дополнительных свойств с отбором только по контрагенту и выгрузите результат в таблицу значений. Убедитесь, что запрос вернет в том числе и то, что Вы только что записали.

Если оба пункта отработают корректно, то следует искать проблему не в записи, а дальше в обработчиках объекта. Может какая-то другая подписка на события очищает Ваши изменения. Или один из обработчиков в модуле объекта / модуле формы. Найдите все обработчики, связанные с записью объекта, расставьте точки останова и выполните в них запрос к данными регистра. Так Вы поймете, в какой момент добавленные Вами записи пропадают.
20. wrooom 175 18.08.19 10:07 Сейчас в теме
Первое) Удается.. Пока иду по списку, сделал изменения и обнаружил следующее: Установил в ПВХ Тип для значения ---Дата, а присваиваю Строка.... и присваивается.. без ошибки..
22. dhurricane 18.08.19 11:48 Сейчас в теме
(20)
присваиваю Строка
Это странно... учитывая, что в исходном посте Вы присваиваете значение функции ТекущаяДата. Видимо, Вы уже переработали свой алгоритм.

(20)
и присваивается.. без ошибки.
А тут уже ничего странного. Ресурс "Значение" имеет составной тип и может хранить в себе как дату, так и строку. Что присвоите, то и будет - платформа не контролирует этот процесс, т.к. в общем случае измерение "Свойство" и ресурс "Значение" могут быть и не связаны между собой. Да и изменение типа свойства может происходить уже после записи в регистр. Т.о. за типом значения должен следить сам разработчик.
23. wrooom 175 18.08.19 11:52 Сейчас в теме
(22)
Видимо, Вы уже переработали свой алгоритм.

только что бы показать, Что можно присвоить и строку.
А тут уже ничего странного
21. wrooom 175 18.08.19 10:12 Сейчас в теме
Скрин
Прикрепленные файлы:
24. wrooom 175 18.08.19 12:28 Сейчас в теме
25. wrooom 175 18.08.19 13:13 Сейчас в теме
Во-вторых)

Тут нет (это режим предприятия, РегистрСведений.ЗначенияСвойствОбъектов, отбор по контрагенту "Петя" )
Прикрепленные файлы:
26. wrooom 175 18.08.19 13:14 Сейчас в теме
А тут есть ( режим отладки в конфигураторе, РегистрСведений.ЗначенияСвойствОбъектов )
Прикрепленные файлы:
27. wrooom 175 18.08.19 13:20 Сейчас в теме
А если не записывать в регистр, то нет . Возможно запись и вправду кто то удаляет.
28. wrooom 175 18.08.19 13:25 Сейчас в теме
Как искать - Что удаляет? Есть идеи?
29. dmurk 19.08.19 05:22 Сейчас в теме
(28)
Первое - убедитесь, что что при повторной записи набора в регистре сведений нет такой записи, для этого используйте
МенеджерЗаписи.Записать(Ложь)

В случае, если запись уже существует в регистре сведений, сработает исключение.

Второе - в отладчике проверьте методом
ТранзакцияАктивна()

наличие открытой и не зафиксированной транзакции.

В первом случае проверяйте ограничения прав доступа на уровне записей, во втором - найдите место, где должна быть зафиксирована, и не фиксируется транзакция.
30. catena 110 19.08.19 07:57 Сейчас в теме
(28)Посмотреть в модуле набора записей регистра, например.
Более универсально: после точки останова на записи в вашем коде, включаете замер производительности и потом анализируете, где алгоритм гуляет после записи.
31. пользователь 19.08.19 08:56
Сообщение было скрыто модератором.
...
32. Kerim09 18 19.08.19 10:37 Сейчас в теме
Как добавить записи в независимый регистр сведений?
Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект РегистрСведенийМенеджерЗаписи.<имя>.

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

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

МенеджерЗаписи.Записать();

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

Если требуется добавить несколько записей в регистр сведений, можно использовать объект РегистрСведенийНаборЗаписей.<имя>.

Например, для того, чтобы в тот же самый регистр сведений "ЗначенияСвойствОбъектов" добавить несколько записей о значениях различных свойств выбранной номенклатуры, можно использовать следующий код (предполагается, что свойства и соответствующие им значения находятся в таблице значений "ТаблицаСвойств", сформированной заранее):

НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Объект.Установить(ПолеВводаНоменклатура); 

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

НаборЗаписей.Записать(); 
Показать

В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения "Объект" (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
33. KirinaAS 101 19.08.19 11:56 Сейчас в теме
А не в наименовании свойства дело?

ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов (Контрагенты)");
34. FetisovAN 19.08.19 15:31 Сейчас в теме
проверьте модули самого регистра и отсутствие другой подписки
36. wrooom 175 20.08.19 17:41 Сейчас в теме +1 $m
Перенес код в Форму - Процедура "ПослеЗаписи ()", и все заработало.
Оставьте свое сообщение

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