Имя: Пароль:
1C
1С v8
При записи элемента справочника в регистр сведений
0 Надежда25
 
29.09.11
14:27
1сv8.2 У справочника Номенклатура есть табличная часть Свойства (реквизиты Свойство, Значение). Есть Регистр сведений непериодический, независимый ЗначенияСвойствНоменклатуры (измерения Номенклатура, Свойство; Ресурс - ЗначениеСвойства). Хочу, чтобы при записи элемента номенклатуры справочника в регистр сведений попадали данные из табличной части. Попытка:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
НаборЗаписей = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьНаборЗаписей();
   НаборЗаписей.Отбор.Номенклатура.Установить(Объект.Наименование);
       НоваяЗапись = НаборЗаписей.Добавить();
   НоваяЗапись. Номенклатура = Объект.Наименование;
   Для Каждого Элементы.Свойства.ТекущиеДанные Из Объект Цикл
       НаборЗаписей.Отбор.Свойство.Установить(Свойство);
       НоваяЗапись.Свойство = Объект.Свойство;
       НоваяЗапись.Значение = Объект.Значение;
       НаборЗаписей.Записать();
   КонецЦикла;
КонецПроцедуры
Ошибки..
1 hhhh
 
29.09.11
14:36
и кто автор этого чуда?
2 Шапокляк
 
29.09.11
14:38
жуть какая...
3 aleks-id
 
29.09.11
14:39
и фотки нет...
4 Надежда25
 
29.09.11
14:39
Если вопрос понятен, на текст можно не смотреть. Но писать собираюсь в
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи).
Может кто подскажет, что на самом деле надо писать?
5 Жан Пердежон
 
29.09.11
14:39
Процедура ОбновитьСвойство(Объект, Свойство, Значение);
   Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
   Запись.Объект = Объект;
   Запись.Свойство = Свойство;
   Запись.Значение = Значение;
   Запись.Записать();
КонецПроцедуры
6 zladenuw
 
29.09.11
14:39
та да
7 Надежда25
 
29.09.11
14:46
Свойство и Значение - реквизиты табличной части Свойства справочника Номенклатура. Как к ним обратиться? Иначе:
{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(74,23)}: Переменная не определена (Свойство)
   Запись.Свойство = <<?>>Свойство; (Проверка: Сервер)
8 Шапокляк
 
29.09.11
14:50
(7) Для Каждого Стр Из Объект.свойства Цикл
Свойство=Стр.свойство;
Значение=Стр.значение;
ОбновитьСвойство(Объект, Свойство,Значение);
КонецЦикла;
9 Надежда25
 
29.09.11
15:19
Спасибо большое! Почти работает, но измерение Номенклатура в Рег.Свед. не заполнено. Пробовала вместо Объекта Наименование (Номенклатура = Объект.Наименование;) - все равно Номенклатура пусто.
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   Для Каждого Стр Из Объект.Свойства Цикл
       Свойство=Стр.свойство;
       Значение=Стр.значение;
       ОбновитьСвойство(Объект, Свойство,Значение);
   КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ОбновитьСвойство(Объект, Свойство, Значение);
   Запись = РегистрыСведений.ЗначенияСвойствНоменклатуры.СоздатьМенеджерЗаписи();
   Запись.Номенклатура = Объект;
   Запись.Свойство = Свойство;
   Запись.ЗначениеСвойства = Значение;
   Запись.Записать();
КонецПроцедуры
10 Шапокляк
 
29.09.11
15:24
Проверьте тип значения измерения "Номенклатура" в регистре сведений.
11 Надежда25
 
29.09.11
15:29
СправочникСсылка.Номенклатура
12 catena
 
29.09.11
15:31
А если это ПередЗаписью, Объект не будет пуст, случайно?
13 catena
 
29.09.11
15:31
Ну, в смысле, ссылки нет...
14 hhhh
 
29.09.11
15:39
(11) а чего же вы Наименование туда лепите? Ведь даже в детском саду детишки знают, что Наименование имее тип Строка.
15 Надежда25
 
29.09.11
15:40
В Отладчике открывала Объект: Наименование заполнено, но тип реквизита Наименование - строка. А в Регистре сведений Номенклатура имеет тип СправочникСсылка.Номенклатура. Как быть?
16 catena
 
29.09.11
15:41
(15)Записывать туда что-то с типом СправочникСсылка.Номенклатура...
17 hhhh
 
29.09.11
15:42
(15) Объект.Ссылка попробуйте
18 Aprobator
 
29.09.11
15:42
цикл прикольный однако. И где там обход табличной части то вообще?
19 Шапокляк
 
29.09.11
15:43
(15) А если еще раз записать, т.е. когда элемент справочника не новый? Все равно номенклатура в регистре пустая?
Судя по (9) вы записываете туда именно объект.
(18) Где в (9) цикл?
20 Aprobator
 
29.09.11
15:43
впрочем, там табличной части быть то и не должно.
21 Aprobator
 
29.09.11
15:44
(19) Для каждого ...
22 Шапокляк
 
29.09.11
15:45
(21) Там у ТС табличная часть Свойства, вот ее и шебуршат. Такой вот нестандартный подход к хранению свойств.
23 Aprobator
 
29.09.11
15:47
(22) опс - не иначе самопись.
24 Надежда25
 
29.09.11
15:52
Вообще-то это задача. (19) При повторной записи все равно номенклатура в регистре пустая. Возможно, надо указать текущий элемент, но как? Или это все так нелогично, что надо идти другим путем?
25 Шапокляк
 
29.09.11
15:54
(24) Я в управляемом приложении не сильна... Не пробовали
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   Для Каждого Стр Из Объект.Свойства Цикл
       Свойство=Стр.свойство;
       Значение=Стр.значение;
//        ОбновитьСвойство(Объект, Свойство,Значение);
    ОбновитьСвойство(ТекущийОбъект, Свойство,Значение);
   КонецЦикла;
КонецПроцедуры
26 Надежда25
 
29.09.11
15:54
Вместо табличной части делать подчиненный справочник? Но если будет работать, меня и так все устроит.
27 Надежда25
 
29.09.11
15:57
(25) Спасибо, но все так же.
28 Шапокляк
 
29.09.11
15:57
(26) А зачем вообще такие приключения? Не проще  непосредственно в форму вывести форму списка регистра сведений или содрать из типовой механизм использования обработки по заполнению свойств объектов?
29 Надежда25
 
29.09.11
16:09
Ой, не знаю. Неужели невозможно реализовать как у меня? Осталось только текущий элемент записать в регистр сведений.
30 rutony
 
29.09.11
16:37
Зачем такой вилосипед изобретать...
Кинуть на форму табличное поле, указать что данные из регистра и указать связь текущего объекта с регистром.
Все, вся реализация 10 секунд...
31 Надежда25
 
30.09.11
10:54
Спасибо за участие. Извините, если не все поняла. У меня Управляемое приложение (8.2). Пробовала и реквизит добавить, и элемент управления Поле, но при выборе типа данных регистров сведений в перечне вообще нет.? А в предложенном варианте (30) можно будет находясь в справочнике, заносить и записывать данные в регистр?
32 Lexa_msk
 
30.09.11
11:20
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

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

 НЗ = РегистрСведений.<ИмяРегистра>.СоздатьНаборЗаписей()
 НЗ.Отбор.Установить(ТекущийОбъект.Ссылка);
 Нз.Загрузить(ТЗ);

 Попытка
    НЗ.Записать();
 Исключение
    Отказ = Истина;
    // вякнуть пользователю об ошибке
 КонецПопытки

КонецПроцедуры


а вообще не совсем понятно зачем дублировать данные. в справочнике и регистре...ну да ладно