Имя: Пароль:
1C
1С v8
Как правильно записать данные в независимый РС.ЗначенияСвойствОбъектов
0 ultrannge89
 
27.10.14
09:57
Сейчас пишу так:

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

            ЗафиксироватьТранзакцию();
            ВывестиДанныеНаФорму();
            Сообщить("Готово");
        Исключение
            ОтменитьТранзакцию();
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Изменений характеристик не найдено");
    КонецЕсли;

Но проблема в том что у меня этот объект имеет несколько характеристик. и когда я устанавливаю эту, предыдущие затираются, как мне правильно установить отбор и на объект и на свойство?
1 mergan
 
27.10.14
09:58
прочитать надо перед добавлением
2 ultrannge89
 
27.10.14
09:59
Пробовал:
НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(Выборка.ДоговорКонтрагента);
НаборЗаписейЗначенияСвойств.Отбор.Свойство.Установить(ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Снижение ДДУ"));

Начинают лететь ошибки...
3 ultrannge89
 
27.10.14
10:01
пробовал и так :
НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(Выборка.ДоговорКонтрагента);
            НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(Выборка.ДоговорКонтрагента);
            НаборЗаписейЗначенияСвойств.Отбор.Свойство.Установить(ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Снижение ДДУ"));
            НаборЗаписейЗначенияСвойств.Прочитать();
4 ultrannge89
 
27.10.14
10:02
Без первой
5 Крошка Ру
 
27.10.14
10:02
(3)Записать()  - это то же самое, что и Записать(Истина), затирает все предыдущие записи(если есть отбор, то только по отбору затирает)

Пиши Записать(Ложь)
6 ultrannge89
 
27.10.14
10:04
А можно вообще отбор установить и на объект и на свойство?
7 ultrannge89
 
27.10.14
10:07
{Форма.Форма.Форма(54)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : ЗначенияСвойствОбъектов: ДДУ №А-28/14 от 19.06.14г, Снижение ДДУ (Регистр сведений: Значения дополнительных реквизитов)

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

            ЗафиксироватьТранзакцию();
            ВывестиДанныеНаФорму();
            Сообщить("Готово");
        Исключение
            ОтменитьТранзакцию();
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Изменений характеристик не найдено");
    КонецЕсли;
8 Зеленый пень
 
27.10.14
10:08
(7) Устанавливай 2 отбор, но убери .Прочитать()
9 Зеленый пень
 
27.10.14
10:08
"2 отбора"
10 ultrannge89
 
27.10.14
10:12
(9), Так второй отбор не срабатывает, видимо надо его тоже через установить писать
11 ultrannge89
 
27.10.14
10:20
Эх, за пол года первый раз столкнулся с тем чтобы писать данные в независимый РС, вот те на...)
12 ultrannge89
 
27.10.14
10:21
Если НЕ Результат.Пустой() Тогда
        Выборка =Результат.Выбрать();
        Попытка
        НачатьТранзакцию();
        НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
        Пока Выборка.Следующий() Цикл
            НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(Выборка.ДоговорКонтрагента);
            НаборЗаписейЗначенияСвойств.Отбор.Свойство.Установить(ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Снижение ДДУ"));
            Запись = НаборЗаписейЗначенияСвойств.Добавить();
            Запись.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Снижение ДДУ");
            Запись.Объект   = Выборка.ДоговорКонтрагента;
            Запись.Значение = Выборка.СнижениеДДУ;
            КонецЦикла;
            НаборЗаписейЗначенияСвойств.Записать();

            ЗафиксироватьТранзакцию();
            ВывестиДанныеНаФорму();
            Сообщить("Готово");
        Исключение
            ОтменитьТранзакцию();
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Изменений характеристик не найдено");
    КонецЕсли;



Ошибка:
{Форма.Форма.Форма(54)}: Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля не соответствует установленному отбору: ЗначенияСвойствОбъектов: ДДУ хххххххххххххх, Снижение ДДУ (Регистр сведений: Значения дополнительных реквизитов; Поле: Объект
13 ultrannge89
 
27.10.14
10:25
Все работает:


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

            ЗафиксироватьТранзакцию();
            ВывестиДанныеНаФорму();
            Сообщить("Готово");
        Исключение
            ОтменитьТранзакцию();
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    Иначе
        Сообщить("Изменений характеристик не найдено");
    КонецЕсли;
14 ultrannge89
 
27.10.14
10:26
Просто я думал что можно надобавлять кучу записей в один набор а потом его записать...
15 ultrannge89
 
27.10.14
10:26
И чтобы у набора при этом для каждой записи были свои отборы, но нет...)