Имя: Пароль:
1C
1С v8
Изменить записи непериодического регистра сведний
0 breezee
 
02.06.16
09:27
Нужно изменить записи РС. Нашел код (код ниже). При попытке выборки - вылетает ошибка "недопустимое значение для параметра1" Читаю СП - написано что выборка может быть получена с отбором только по ведущим или индексированным измерениям. У меня измерение Аналитика1 - не индексировано. Можно как-то сделать выборку не объектной и по ней получать менеджер записи?

код
ЛичныеДанные.Вставить("Аналитика1", ном);
    ЛичныеДанные.Вставить("Версия", ВыборкаДетальныеЗаписи.Ссылка1);

Выборка = РегистрыСведений.ЗначенияПоказателейОтчетов5.Выбрать( ЛичныеДанные);
Пока Выборка.Следующий() Цикл

        // изменение существующей
        МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();
        МенеджерЗаписи.Прочитать();
        МенеджерЗаписи.Аналитика1 = номЧтоНужна;
        //МенеджерЗаписи.Записать();
1 Nuobu
 
02.06.16
09:33
(0) А это все измерения, которые есть в регистре?
2 hhhh
 
02.06.16
09:55
(0) делайте как все, через запрос. Зачем выпендриваться?
3 breezee
 
02.06.16
10:39
Делаю запросом (код ниже) ругается на "Запись не верна! Значение поля не соответствует установленному отбору:" по идеи верно - у меня же старый отбор и ноове значение, по которому отбор. Но как это обойти? Мне не нужно создать новый набор, нужно изменить текущий


код
Набор =  РегистрыСведений.ЗначенияПоказателейОтчетов5.СоздатьНаборЗаписей();
        Набор.Отбор.версия.Установить(ВыборкаДетальныеЗаписи.Ссылка1);
        Набор.Отбор.Аналитика1.Установить(ном); // если надо
        Набор.Прочитать();
        
        Если Набор.Количество() <> 0 Тогда                                
            НовыйКурс = Набор[0];  
            НовыйКурс.Аналитика1 = номЧтоНужна;
            Попытка
            Набор.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
            КонецПопытки;
            КонецЕсли;
4 breezee
 
02.06.16
10:45
ап
5 Nuobu
 
02.06.16
10:54
Набор.Отбор.Аналитика1.Установить(ном);// если надо

НовыйКурс.Аналитика1 = номЧтоНужна;

Не удивительно, что ругается.
Нужно так:

Набор =  РегистрыСведений.ЗначенияПоказателейОтчетов5.СоздатьНаборЗаписей();
        Набор.Отбор.версия.Установить(ВыборкаДетальныеЗаписи.Ссылка1);
        //Набор.Отбор.Аналитика1.Установить(ном);// НЕ надо

        Набор.Прочитать();
        
        Если Набор.Количество() <> 0 Тогда                                
            НовыйКурс = Набор[0];

Если НовыйКурс.Аналитика1 = Ном Тогда  
            НовыйКурс.Аналитика1 = номЧтоНужна;
КонецЕсли;

            Попытка
            Набор.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
            КонецПопытки;
            КонецЕсли;
6 breezee
 
02.06.16
10:59
(5) Спасибо! Сейчас сделал то же самое, только вообще без отборов, через пол часа может отработает, тогда проверю
7 hhhh
 
02.06.16
11:02
(3) как-то так

Набор =  РегистрыСведений.ЗначенияПоказателейОтчетов5.СоздатьНаборЗаписей();
        Набор.Отбор.версия.Установить(ВыборкаДетальныеЗаписи.Ссылка1);
        Набор.Отбор.Аналитика1.Установить(ном);// если надо

        Набор.Прочитать();
  

        
        Если Набор.Количество() <> 0 Тогда

        ТЗ = Набор.Выгрузить();
        Набор.Очистить();
            Попытка
            Набор.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;


Набор.Отбор.версия.Установить(ВыборкаДетальныеЗаписи.Ссылка1);
        Набор.Отбор.Аналитика1.Установить(номЧтоНужна);// если надо
        ТЗ.ЗаполнитьЗначения(номЧтоНужна, "Аналитика1");
                        
        Набор.Загрузить(ТЗ);
            Попытка
            Набор.Записать();
        Исключение
            Сообщить(ОписаниеОшибки());
            КонецПопытки;
            КонецЕсли;
8 breezee
 
02.06.16
11:12
(7) Тоже большое спасибо! Хотя вариант (5) мне больше понравился лаконичностью, хотя с 1 отбором будет намного больше выбирать чем с двумя, так что ваш вариант оптимальней
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой