| 
    
            
         
         | 
    
  | 
При записи элемента справочника в регистр сведений | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
  
        ТЗ = Объект.Свойства.Выгрузить(); ТЗ.Колонки.Добавить("Номенклатура"); ТЗ.ЗаполнитьЗначения(ТекущийОбъект.Ссылка, "Номенклатура"); НЗ = РегистрСведений.<ИмяРегистра>.СоздатьНаборЗаписей() НЗ.Отбор.Установить(ТекущийОбъект.Ссылка); Нз.Загрузить(ТЗ); Попытка НЗ.Записать(); Исключение Отказ = Истина; // вякнуть пользователю об ошибке КонецПопытки КонецПроцедуры а вообще не совсем понятно зачем дублировать данные. в справочнике и регистре...ну да ладно  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |