Имя: Пароль:
1C
1C 7.7
v7: Сохранение элемента справочника в списке значений (периодические реквизиты)
0 Roman2012
 
14.03.16
05:14
Здравствуйте

Нужно скопировать содержимое ветки справочника в другую ветку (с некоторыми изменениями)

написал следующую обработку

    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СписЗнач =  СоздатьОбъект("СписокЗначений");
    
    СпрНом.ИспользоватьРодителя(СпрОткуда);
    СпрНом.ИспользоватьДату(РабочаяДата());
    
    СпрНом.ВыбратьЭлементы(1);
    Пока СпрНом.ПолучитьЭлемент()=1 Цикл
        
        СписЗнач.ДобавитьЗначение(СпрНом.ТекущийЭлемент());
        Сообщить("СпрНом=["+СпрНом+"] цена спр="+СпрНом.Цена);
        
    КонецЦикла;    
    
    СпрНом.ИспользоватьРодителя(СпрКуда);
    СпрНом.ИспользоватьДату(РабочаяДата());
    
    Для Сч = 1 По СписЗнач.РазмерСписка() Цикл
        ТекЗнач = СписЗнач.ПолучитьЗначение(Сч);
        СпрНом.Новый();
        
        Для Рек = 1 По Метаданные.Справочник("Номенклатура").Реквизит() Цикл

            ИД = Метаданные.Справочник("Номенклатура").Реквизит(Рек).Идентификатор;
            ТекущийРеквизит = Метаданные.Справочник("Номенклатура").Реквизит(Рек);
            

                СпрНом.УстановитьАтрибут(ИД, ТекЗнач.ПолучитьАтрибут(ИД) )
            
КонецЦикла;

Все нормально копируются, кроме цены (периодический реквизит)

пробовал вставлять следующий код

            Если ТекущийРеквизит.Периодический = 0 тогда
            СпрНом.УстановитьАтрибут(ИД, ТекЗнач.ПолучитьАтрибут(ИД) )
            Иначе
                // периодический
                
                ИсторияИсточник=СоздатьОбъект("Периодический");
                ИсторияИсточник.ИспользоватьОбъект(ИД, ТекущийРеквизит);
                
                ИсторияПриемник=СоздатьОбъект("Периодический");
                ИсторияПриемник.ИспользоватьОбъект(ИД, СпрНом.ТекущийЭлемент());
                                
                ИсторияИсточник.ВыбратьЗначения();
                Пока ИсторияИсточник.ПолучитьЗначение()=1 Цикл
                    ИсторияПриемник.ДатаЗнач=ИсторияИсточник.ДатаЗнач;
                    ИсторияПриемник.Значение=ИсторияИсточник.Значение;
                    ИсторияПриемник.Записать();
                КонецЦикла
            КонецЕсли    


однако, хотя ТекущийРеквизит - периодический (в отладчике "Периодический"=1), но ИспользоватьОбъект выдает ошибку
"Цена не является константой или периодическим параметром"

Поэтому вопрос - при сохранении объекта типа справочник в списке значений - сохраняются ли в нем периодические реквизиты? И как можно решить проблему?

В принципе, устроил бы даже вариант с передачей последнего значения цены, но она не передается никак. ИспользоватьДату() не помогает

Заранее спасибо!
1 Rie
 
14.03.16
05:56
(0) Убери
СпрНом.ИспользоватьДату(РабочаяДата());
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший