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

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

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

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


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

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


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

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

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

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

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

Тут нет (это режим предприятия, РегистрСведений.ЗначенияСвойствОбъектов, отбор по контрагенту "Петя" )
Прикрепленные файлы:
26. wrooom 171 18.08.19 13:14 Сейчас в теме
А тут есть ( режим отладки в конфигураторе, РегистрСведений.ЗначенияСвойствОбъектов )
Прикрепленные файлы:
27. wrooom 171 18.08.19 13:20 Сейчас в теме
А если не записывать в регистр, то нет . Возможно запись и вправду кто то удаляет.
28. wrooom 171 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 100 19.08.19 11:56 Сейчас в теме
А не в наименовании свойства дело?

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

Программист 1С:ERP
Москва
зарплата от 100 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день