|
8.2 Чтение и запись регистра сведений | ☑ | ||
---|---|---|---|---|
0
Надежда25
02.11.11
✎
14:16
|
Добрый день!
Очень нужна помощь. v8.2. Есть справочник Номенклатура с табличной частью Характеристики (тип РегистрСведенийНаборЗаписей.ЗначенияСвойствНоменклатуры). Регистр независимый, непериодический. Измерения: Номенклатура, Свойство, ресурс: ЗначениеСвойства. При открытии формы элемента справочника надо читать из регистра, при записи - записывать. Не происходит ни того, ни другого. Вот код: &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) НаборЗаписей = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); Для Каждого Запись Из НаборЗаписей Цикл НаборЗаписей.Отбор.Номенклатура.Установить(Объект.Ссылка); ТекущийОбъект.ХарактеристикиСвойство = Запись.Свойство; ТекущийОбъект.ХарактеристикиЗначениеСвойства = Запись.ЗначениеСвойства; КонецЦикла; НаборЗаписей.Прочитать(); НаборЗаписей.Записать(); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Для Каждого Стр Из ТекущийОбъект.Характеристики Цикл Запись = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьМенеджерЗаписи(); Запись.Номенклатура = ТекущийОбъект.Ссылка; Запись.Свойство = Стр.Свойство; Запись.ЗначениеСвойства = Стр.ЗначениеСвойства; Запись.Записать(); КонецЦикла; КонецПроцедуры |
|||
1
Axel2009
02.11.11
✎
14:21
|
при чтении для каждого набора записей можно установить только один отбор. либо список указывать. и зачем при чтении записывать?
|
|||
2
luckyluke
02.11.11
✎
14:23
|
(0) в момент когда ты перебираешь записи - набор записей пустой.
Попробуй так: &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) НаборЗаписей = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Объект.Ссылка); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл ТекущийОбъект.ХарактеристикиСвойство = Запись.Свойство; ТекущийОбъект.ХарактеристикиЗначениеСвойства = Запись.ЗначениеСвойства; КонецЦикла; КонецПроцедуры |
|||
3
Надежда25
02.11.11
✎
14:30
|
(2) Все равно не пишет.
|
|||
4
ice777
02.11.11
✎
14:31
|
(3) а Записать()
|
|||
5
Надежда25
02.11.11
✎
14:48
|
Сейчас так:
&НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) НаборЗаписей = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Номенклатура.Установить(Объект.Ссылка); НаборЗаписей.Прочитать(); Для Каждого Запись Из НаборЗаписей Цикл ХарактеристикиСвойство = Запись.Свойство; ХарактеристикиЗначениеСвойства = Запись.ЗначениеСвойства; НаборЗаписей.Записать(Истина); КонецЦикла; КонецПроцедуры В отладчике вижу, что читает, но на форме пусто. |
|||
6
Axel2009
02.11.11
✎
14:53
|
а где добавление новой строки в табличную часть обработки? это не 7ка
|
|||
7
Надежда25
02.11.11
✎
15:25
|
Я не знаю, как это сделать. Какой конкретно метод читать? Это на сервере? А на клиенте тоже надо обновить, или само?
|
|||
8
Axel2009
02.11.11
✎
15:26
|
Добавить()
|
|||
9
evgen2011
02.11.11
✎
15:34
|
(0) без фото не взлетит )
|
|||
10
Леха Дум
02.11.11
✎
15:52
|
(5) Жесть... Зачем перезаписывать при чтении те же самые данные? Да еще в цикле перебора набора.
|
|||
11
Надежда25
02.11.11
✎
15:58
|
(10) не поняла. Надо прочитать данные из регистра сведений в табличную часть справочника. Можно сделать проще? Хотя и это читает, но на форме не отображает.
|
|||
12
Леха Дум
02.11.11
✎
16:11
|
Таблица на форме какой тип значения имеет? Дерево, таблица значений, динамический список?
|
|||
13
Надежда25
02.11.11
✎
16:13
|
Тип: РегистрСведенийНаборЗаписей.ЗначенияСвойствНоменклатуры
|
|||
14
hhhh
02.11.11
✎
16:24
|
(13) а в поле Данные что написано?
|
|||
15
Axel2009
02.11.11
✎
16:25
|
там нужно отбор устанавливать по объекту и вызывать прочитать. ничего присваивать не нужно. это уже реализовано в ЗначенияСвойствОбъектов в типовой
|
|||
16
ice777
02.11.11
✎
16:33
|
(5) не в том месте записываешь.)
без сисек не взлетит. |
|||
17
Леха Дум
02.11.11
✎
16:52
|
Если очень хочется, то наверно так:
Набор = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Номенклатура.ВидСравнения = ВидСравнения.Равно; Набор.Отбор.Номенклатура.Значение = ТекущийОбъект.Ссылка; Набор.Отбор.Номенклатура.Использование = Истина; Набор.Прочитать(); ЗначениеВРеквизитФормы(Набор, "ЗдесьНаписатьИмяРеквизитаФормы"); |
|||
18
Леха Дум
02.11.11
✎
16:53
|
+(17) конечно же в событии:
&НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) |
|||
19
Надежда25
03.11.11
✎
10:32
|
(17) Спасибо за ответ, но не работает. Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы)
ЗначениеВРеквизитФормы(Набор, "Свойство"); Недопустимое значение параметра (параметр номер '2') В отладчике Набор.Отбор Значение Номенклатура ="Сигары", Свойство ="". |
|||
20
hhhh
03.11.11
✎
11:19
|
(19) причем здесь отбор? Как называется у тебя элемент формы твоя таблица? Неужели "Свойство"? Не верю.
|
|||
21
Надежда25
03.11.11
✎
11:31
|
(20) Точно, спасибо большое. ЗначениеВРеквизитФормы(Набор, "Характеристики");
А как записать, причем если записи были изменены - удалить старые, записать новые? |
|||
22
dumb851
03.11.11
✎
11:35
|
НаборЗаписей.Прочитать(); - чтение данных из базы
НаборЗаписей.Записать(); - запись тех же данных обратно в базу вот ничего и не меняется |
|||
23
Надежда25
03.11.11
✎
12:02
|
Пишу:
&НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Набор = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Номенклатура.Установить(ТекущийОбъект.Ссылка); НоваяЗапись = Набор.Добавить(); НоваяЗапись. Номенклатура = ТекущийОбъект.Ссылка; НоваяЗапись.Свойство = Объект.Характеристики.Свойство; НоваяЗапись.ЗначениеСвойства = Объект.Характеристики.ЗначениеСвойства; Набор.Записать(); КонецПроцедуры Поле объекта не обнаружено (Свойство) НоваяЗапись.Свойство = Объект.Характеристики.Свойство; |
|||
24
Леха Дум
03.11.11
✎
12:03
|
если есть ЗначениеВРеквизитФормы, то наверно есть и обратное действо?
Набор = РеквизитФормыВЗначение("Характеристики"); Набор.Записать(); |
|||
25
Надежда25
03.11.11
✎
12:20
|
Вот так измененные записи перезаписываются, а новые - нет, хотя и не ругается.
&НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Набор = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Номенклатура.Установить(ТекущийОбъект.Ссылка); Для Каждого Стр Из ТекущийОбъект.Характеристики Цикл НоваяЗапись = Набор.Добавить(); НоваяЗапись. Номенклатура = ТекущийОбъект.Ссылка; НоваяЗапись.Свойство = Стр.Свойство; НоваяЗапись.ЗначениеСвойства = Стр.ЗначениеСвойства; Набор = РеквизитФормыВЗначение("Характеристики"); Набор.Записать(); КонецЦикла; |
|||
26
Леха Дум
03.11.11
✎
12:45
|
Попробуй как нарисовал в (24), только не забудь, что поле записи "Номенклатура" должно быть заполнено. Его можно заполнять в процессе добавления на форме, а можно перебрать набор:
Набор = РеквизитФормыВЗначение("Характеристики"); Для Каждого Запись Из Набор Цикл Запись.Номенклатура = ТекущийОбъект.Ссылка; КонецЦикла; Набор.Записать(); И НЕ НАДО ЗАПИСЫВАТЬ В ЦИКЛЕ перебора записей НАБОР! ФОТКУ СВОЮ В СТУДИЮ! |
|||
27
Надежда25
03.11.11
✎
12:56
|
Если не в цикле, то не пойму, как присвоить Свойство.
Набор.Отбор.Свойство.Установить(??? здесь перепробовано все); &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Набор = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Номенклатура.Установить(ТекущийОбъект.Ссылка); Набор.Отбор.Свойство.Установить(ХарактеристикиСвойство); - ругается Набор = РеквизитФормыВЗначение("Характеристики"); Набор.Записать(); КонецПроцедуры |
|||
28
Леха Дум
03.11.11
✎
13:04
|
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Набор = РеквизитФормыВЗначение("Характеристики"); Для Каждого Запись Из Набор Цикл Запись.Номенклатура = ТекущийОбъект.Ссылка; КонецЦикла; Набор.Записать(); КонецПроцедуры попробуйте хотя бы прочитать СП по тем методам и объектам, что используются в коде не вижу фотки в личке |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |