Вход | Регистрация



Добавление, запись значений в регистр сведений

Добавление, запись значений в регистр сведений
Я
   falselight
 
11.06.18 - 06:13
УТ 10.3. Регистр сведений ЗначенияСвойствОбъектов.
С обработки нужно добавить или изменить его свойства
длина, ширина, высота у справочника номенклатура.
Как это правильно делать в коде?

Подойдет ли такой пример?

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

Если НаборЗаписей.Количество() = 0 Тогда
    
    //Добавление новой записи    

    НоваяЗапсиь = НаборЗаписей.Добавить();
    НоваяЗапсиь.Валюта = Валюта;
    НоваяЗапсиь.Период = ТекущаяДата();
    НоваяЗапсиь.Курс = 10.00;
    
Иначе    
    
    //Изменение существующей записи

    НаборЗаписей[0].Валюта = Валюта;
    НаборЗаписей[0].Период = ТекущаяДата();
    НаборЗаписей[0].Курс = 10.00;
    
КонецЕсли;

//Удалить существующую запись

НаборЗаписей.Удалить(НаборЗаписей[0]);

//После добавления, изменения, удаления записей 

//необходимо вызвать метод Записать
НаборЗаписей.Записать();
 
 
   Cool_Profi
 
1 - 11.06.18 - 06:39
Прокатит. Ты начал делать успехи...
   Сти
 
2 - 11.06.18 - 07:00
А НаборЗаписей.Удалить(НаборЗаписей[0]) зачем? Удалить то, что только что создал/изменил?
   Смотрящий
 
3 - 11.06.18 - 07:03
(0) А ты уверен что получаешь одну запись ?
   falselight
 
4 - 11.06.18 - 07:11
(2) В примере так было.

А если регистр непериодический независимый?
   falselight
 
5 - 11.06.18 - 07:11
(3) В примере так было, я узнаю как правильно нужно.
   Смотрящий
 
6 - 11.06.18 - 07:35
(5) Посмотри как пишет ут10.3 регистр сведений при записи номенклатуры
   falselight
 
7 - 11.06.18 - 07:45
(6) В каком модуле?
   falselight
 
8 - 11.06.18 - 07:45
(6) Типовой код лучше не смотреть вообще!!! Что бы голову не сломать.....
   falselight
 
9 - 11.06.18 - 07:49
Запись в непериодический, независимый регистр сведений
ЗначенияСвойствОбъектов вот так верно?
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение)
    НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(Номенклатура);
    НаборЗаписей.Отбор.Свойство.Установить(Свойство);
    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() = 0 Тогда
        //Добавление новой записи    

        НоваяЗапсиь          = НаборЗаписей.Добавить();
        НоваяЗапсиь.Значение = Значение;
    Иначе    
        //Изменение существующей записи

        НоваяЗапсиь          = НаборЗаписей.Добавить();
        НоваяЗапсиь.Значение = Значение;
    КонецЕсли;
    НаборЗаписей.Записать();
КонецПроцедуры
   Смотрящий
 
10 - 11.06.18 - 08:17
(9) НаборЗаписей вотличии от менеджера работает не с одной записьвю а с кучей. Куча определяется в .Отбор, твое записать вызовет очистку кучи и запись одной записи.
 
 Рекламное место пустует
   Остап Сулейманович
 
11 - 11.06.18 - 08:17
(9)
1. Зачем нужно "Если" когда код и в ветке "Да" и в ветке "Нет" один и тот же?
2. Для работы с единственной записью проще использовать МенеджерЗаписи. Например :
Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
Запись.Номенклатура = ...;
Запись.Свойство = ...;
Запись.Значение = Значение;
Запись.Записать(Истина);//Параметр "Истина" позволяет не беспокоиться по поводу наличия/отсутствия записи.
   Остап Сулейманович
 
12 - 11.06.18 - 08:18
(10) "записать вызовет очистку". Не вызовет. Именно очистку.
   Смотрящий
 
13 - 11.06.18 - 08:20
(12) и что же оно сделает ?
   Остап Сулейманович
 
14 - 11.06.18 - 08:21
+ (12) Когда выполняется "Набор.Прочитать()" - в набор выбираются все СУЩЕСТВУЮЩИЕ записи определенные отбором.
Потом вы над этим набором изгаляетесь (добавляете/корректируете/удаляете/очищаете...). При выполнении "Набор.Записать()" все что было в соответствии с отбором заменяется на то, что в наборе.
   falselight
 
15 - 11.06.18 - 08:23
(11) В одной ветке есть добавить()
   falselight
 
16 - 11.06.18 - 08:24
Подскажите правильный аналог (9)
   Остап Сулейманович
 
17 - 11.06.18 - 08:27
(15)
Если НаборЗаписей.Количество() = 0 Тогда
    //Добавление новой записи    

    НоваяЗапсиь          = НаборЗаписей.Добавить();
    НоваяЗапсиь.Значение = Значение;
Иначе    
    //Изменение существующей записи

    НоваяЗапсиь          = НаборЗаписей.Добавить();
    НоваяЗапсиь.Значение = Значение;
КонецЕсли;

Найдите 2 отличия кроме комментария.
   Остап Сулейманович
 
18 - 11.06.18 - 08:28
(16)
Если НаборЗаписей.Количество() = 0 Тогда
    НоваяЗапсиь = НаборЗаписей.Добавить();
КонецЕсли;
НаборЗаписей[0].Значение = Значение;
   falselight
 
19 - 11.06.18 - 08:49
(18) Опечатка там была, вот так верно?




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

        НоваяЗапсиь          = НаборЗаписей.Добавить();
        НоваяЗапсиь.Значение = Значение;
    Иначе    
        //Изменение существующей записи

        НоваяЗапсиь.Значение = Значение;
    КонецЕсли;
    НаборЗаписей.Записать();
КонецПроцедуры
   falselight
 
20 - 11.06.18 - 08:50
(10) Как верно подскажите?
   МимохожийОднако
 
21 - 11.06.18 - 08:54
После Иначе ошибка
нет перебора записей. Ты же объявил набор записей.
............
Лучше использовать .СоздатьМенеджерЗаписи()
как советовали в (9)
   falselight
 
22 - 11.06.18 - 08:54
(19) Это не работает, подскажите как правильно?
   Остап Сулейманович
 
23 - 11.06.18 - 08:58
(22) У тебя пост (18) не отображается?
   Остап Сулейманович
 
24 - 11.06.18 - 09:03
Вот так будет работать гарантировано.
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение)
    НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(Номенклатура);
    НаборЗаписей.Отбор.Свойство.Установить(Свойство);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();//пока просто так. Без объяснений

    НоваяЗапсиь          = НаборЗаписей.Добавить();
    НоваяЗапсиь.Значение = Значение;
    НаборЗаписей.Записать();
КонецПроцедуры
   falselight
 
25 - 11.06.18 - 09:05
(24) Спасибо, беру пробовать.

А как будет если через менеджер записи?
   falselight
 
26 - 11.06.18 - 09:07
   Остап Сулейманович
 
27 - 11.06.18 - 09:07
(25)
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение)
    Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    Запись.Номенклатура = Номенклатура;
    Запись.Свойство = Свойство;
    Запсиь.Значение = Значение;
    Записей.Записать(Истина);
КонецПроцедуры
   Остап Сулейманович
 
28 - 11.06.18 - 09:08
(27) Исправить
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение)
    Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
    Запись.Объект = Номенклатура;//Вот здесь

    Запись.Свойство = Свойство;
    Запсиь.Значение = Значение;
    Записей.Записать(Истина);
КонецПроцедуры
   Остап Сулейманович
 
29 - 11.06.18 - 09:09
(26) Так при вызове нужно Номеклатуру указывать.
   falselight
 
30 - 11.06.18 - 09:12
Это пример на изменение записи.
А если нужно добавить?
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение)
    НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(Номенклатура);
    НаборЗаписей.Отбор.Свойство.Установить(Свойство);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();

    НоваяЗапись          = НаборЗаписей.Добавить();
    НоваяЗапись.Объект   = Номенклатура;
    НоваяЗапись.Свойство = Свойство;
    НоваяЗапись.Значение = Значение;
    НаборЗаписей.Записать();
КонецПроцедуры
   Остап Сулейманович
 
31 - 11.06.18 - 09:16
(30) Тогда не нужно НаборЗаписей.Очистить();
Но есть одна фишка. Не может быть несколько записей с одинаковым набором измерений. Будешь пытаться множить такие записи - получишь ошибку.
   falselight
 
32 - 11.06.18 - 09:18
(31) Если без очистить, дублировать же будет??????
Создавать новые????
   falselight
 
33 - 11.06.18 - 09:19
(32 +) Тут и нужно вставлять если.
Или добавлять или изменять.
 
 
   Остап Сулейманович
 
34 - 11.06.18 - 09:24
(33) Ты (18) уже осознал? Или где?
   falselight
 
35 - 11.06.18 - 09:41
(34) Учитывая 18 какой будет финальный вариант?
   Остап Сулейманович
 
36 - 11.06.18 - 09:45
(35) На.
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение)
    НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(Номенклатура);
    НаборЗаписей.Отбор.Свойство.Установить(Свойство);
    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() = 0 Тогда
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Объект   = Номенклатура;
        НоваяЗапись.Свойство = Свойство;
    Иначе
        НоваяЗапись = НаборЗаписей[0];
    КонецЕсли;
    НоваяЗапись.Значение = Значение;
    НаборЗаписей.Записать();
КонецПроцедуры
   falselight
 
37 - 11.06.18 - 10:01
(36) Большое спасибо!
   1Сергей
 
38 - 11.06.18 - 10:34
как можно было так протупить имея пример из (0)?


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует