Регистр сведений "Свойства объектов"
Здравствуйте.
Код в модуле объекта справочника "Контрагенты" в процедуре ПриЗаписи:
-Не работает. Просто нажимаю записать. В отладке НаборЗаписей.Записать() проходит, а в регистре запись с объектом ЭтотОбъект не появляется.
Код в модуле объекта справочника "Контрагенты" в процедуре ПриЗаписи:
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
//НаборЗаписей.Отбор.Объект.Установить(ЭтотОбъект.Ссылка);
НаборЗаписей.Отбор.Объект.Значение = ЭтотОбъект.Ссылка;
НаборЗаписей.Отбор.Объект.Использование = Истина;
//НаборЗаписей.Отбор.Свойство.Установить(ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов"));
НаборЗаписей.Отбор.Свойство.Значение = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов");
НаборЗаписей.Отбор.Свойство.Использование = Истина;
НаборЗаписей.Записывать = Истина;
//НаборЗаписей.Прочитать();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = ЭтотОбъект.Ссылка;
НоваяЗапись.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("ДатаИзмененияКонтрагентов");
НоваяЗапись.Значение = ТекущаяДата();
НаборЗаписей.Записать();
Показать-Не работает. Просто нажимаю записать. В отладке НаборЗаписей.Записать() проходит, а в регистре запись с объектом ЭтотОбъект не появляется.
По теме из базы знаний
- Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)
- Регистры сведений для аналитиков
- История данных независимых регистров сведений
- Нюансы Конвертации данных 2.1, или как небольшая задача привела нас к восстановлению регистра сведений из нескольких миллионов строк
- Автоматическое заполнение ввода начальных остатков материалов в эксплуатации. УПП
Найденные решения
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Функция ЗаписатьЗначениеСвойства(Значение,ЗначениеСвойства,ВыбОбъект) Экспорт
ПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = ВыбОБъект.Ссылка;
МенеджерЗаписи.Свойство = ПВХ.Ссылка;
МенеджерЗаписи.Значение = Значение;
МенеджерЗаписи.Записать()
КонецФункции
Показать
(4)
Нет.. то же результат.
ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ЗначениеСвойства);
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = ВыбОБъект.Ссылка;
МенеджерЗаписи.Свойство = ПВХ.Ссылка;
МенеджерЗаписи.Значение = Значение;
МенеджерЗаписи.Записать()
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = ВыбОБъект.Ссылка;
МенеджерЗаписи.Свойство = ПВХ.Ссылка;
МенеджерЗаписи.Значение = Значение;
МенеджерЗаписи.Записать()
Нет.. то же результат.
(18) Во-первых, убедитесь с помощью отладчика, что при записи набора измерение "Свойство" заполнено. Удается ли найти элемент ПВХ по имени "ДатаИзмененияКонтрагентов"?
Во-вторых, добавьте сразу после записи набора запрос к регистру дополнительных свойств с отбором только по контрагенту и выгрузите результат в таблицу значений. Убедитесь, что запрос вернет в том числе и то, что Вы только что записали.
Если оба пункта отработают корректно, то следует искать проблему не в записи, а дальше в обработчиках объекта. Может какая-то другая подписка на события очищает Ваши изменения. Или один из обработчиков в модуле объекта / модуле формы. Найдите все обработчики, связанные с записью объекта, расставьте точки останова и выполните в них запрос к данными регистра. Так Вы поймете, в какой момент добавленные Вами записи пропадают.
Во-вторых, добавьте сразу после записи набора запрос к регистру дополнительных свойств с отбором только по контрагенту и выгрузите результат в таблицу значений. Убедитесь, что запрос вернет в том числе и то, что Вы только что записали.
Если оба пункта отработают корректно, то следует искать проблему не в записи, а дальше в обработчиках объекта. Может какая-то другая подписка на события очищает Ваши изменения. Или один из обработчиков в модуле объекта / модуле формы. Найдите все обработчики, связанные с записью объекта, расставьте точки останова и выполните в них запрос к данными регистра. Так Вы поймете, в какой момент добавленные Вами записи пропадают.
(20)
(20)
присваиваю Строка
Это странно... учитывая, что в исходном посте Вы присваиваете значение функции ТекущаяДата. Видимо, Вы уже переработали свой алгоритм.
(20)
и присваивается.. без ошибки.
А тут уже ничего странного. Ресурс "Значение" имеет составной тип и может хранить в себе как дату, так и строку. Что присвоите, то и будет - платформа не контролирует этот процесс, т.к. в общем случае измерение "Свойство" и ресурс "Значение" могут быть и не связаны между собой. Да и изменение типа свойства может происходить уже после записи в регистр. Т.о. за типом значения должен следить сам разработчик.
(28)
Первое - убедитесь, что что при повторной записи набора в регистре сведений нет такой записи, для этого используйте
В случае, если запись уже существует в регистре сведений, сработает исключение.
Второе - в отладчике проверьте методом
наличие открытой и не зафиксированной транзакции.
В первом случае проверяйте ограничения прав доступа на уровне записей, во втором - найдите место, где должна быть зафиксирована, и не фиксируется транзакция.
Первое - убедитесь, что что при повторной записи набора в регистре сведений нет такой записи, для этого используйте
МенеджерЗаписи.Записать(Ложь)
В случае, если запись уже существует в регистре сведений, сработает исключение.
Второе - в отладчике проверьте методом
ТранзакцияАктивна()
наличие открытой и не зафиксированной транзакции.
В первом случае проверяйте ограничения прав доступа на уровне записей, во втором - найдите место, где должна быть зафиксирована, и не фиксируется транзакция.
Как добавить записи в независимый регистр сведений?
Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект РегистрСведенийМенеджерЗаписи.<имя>.
Например, для того, чтобы в независимый регистр сведений "ЗначенияСвойствОбъектов" с измерениями "Объект", "Свойство" и ресурсом "Значение" добавить одну запись, содержащую значение некоторого свойства выбранной номенклатуры, можно использовать следующий код:
В результате выполнения этого кода новая запись будет добавлена в регистр, или, если регистр уже содержит запись с выбранными значениями измерений "Объект" и "Свойство", - существующая запись будет заменена новой.
Если требуется добавить несколько записей в регистр сведений, можно использовать объект РегистрСведенийНаборЗаписей.<имя>.
Например, для того, чтобы в тот же самый регистр сведений "ЗначенияСвойствОбъектов" добавить несколько записей о значениях различных свойств выбранной номенклатуры, можно использовать следующий код (предполагается, что свойства и соответствующие им значения находятся в таблице значений "ТаблицаСвойств", сформированной заранее):
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения "Объект" (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
Для добавления отдельной записи в регистр сведений, не подчиненный регистратору, можно использовать объект РегистрСведенийМенеджерЗаписи.<имя>.
Например, для того, чтобы в независимый регистр сведений "ЗначенияСвойствОбъектов" с измерениями "Объект", "Свойство" и ресурсом "Значение" добавить одну запись, содержащую значение некоторого свойства выбранной номенклатуры, можно использовать следующий код:
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = ПолеВводаНоменклатура;
МенеджерЗаписи.Свойство = ПолеВводаСвойствоНоменклатуры;
МенеджерЗаписи.Значение = ПолеВводаЗначениеСвойства;
МенеджерЗаписи.Записать();
В результате выполнения этого кода новая запись будет добавлена в регистр, или, если регистр уже содержит запись с выбранными значениями измерений "Объект" и "Свойство", - существующая запись будет заменена новой.
Если требуется добавить несколько записей в регистр сведений, можно использовать объект РегистрСведенийНаборЗаписей.<имя>.
Например, для того, чтобы в тот же самый регистр сведений "ЗначенияСвойствОбъектов" добавить несколько записей о значениях различных свойств выбранной номенклатуры, можно использовать следующий код (предполагается, что свойства и соответствующие им значения находятся в таблице значений "ТаблицаСвойств", сформированной заранее):
НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(ПолеВводаНоменклатура);
Для Каждого СтрокаТаблицы Из ТаблицаСвойств Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = ПолеВводаНоменклатура;
НоваяЗапись.Свойство = СтрокаТаблицы.Свойство;
НоваяЗапись.Значение = СтрокаТаблицы.ЗначениеСвойства;
КонецЦикла;
НаборЗаписей.Записать();
ПоказатьВ результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения "Объект" (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.