|
Добавление, запись значений в регистр сведений | ☑ | ||
---|---|---|---|---|
0
falselight
11.06.18
✎
06:13
|
УТ 10.3. Регистр сведений ЗначенияСвойствОбъектов.
С обработки нужно добавить или изменить его свойства длина, ширина, высота у справочника номенклатура. Как это правильно делать в коде? Подойдет ли такой пример? НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); Валюта = Справочники.Валюты.НайтиПоНаименованию("EUR"); НаборЗаписей.Отбор.Валюта.Установить(Валюта); НаборЗаписей.Отбор.Период.Установить(НачалоДня(ТекущаяДата())); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда //Добавление новой записи НоваяЗапсиь = НаборЗаписей.Добавить(); НоваяЗапсиь.Валюта = Валюта; НоваяЗапсиь.Период = ТекущаяДата(); НоваяЗапсиь.Курс = 10.00; Иначе //Изменение существующей записи НаборЗаписей[0].Валюта = Валюта; НаборЗаписей[0].Период = ТекущаяДата(); НаборЗаписей[0].Курс = 10.00; КонецЕсли; //Удалить существующую запись НаборЗаписей.Удалить(НаборЗаписей[0]); //После добавления, изменения, удаления записей //необходимо вызвать метод Записать НаборЗаписей.Записать(); |
|||
1
Cool_Profi
11.06.18
✎
06:39
|
Прокатит. Ты начал делать успехи...
|
|||
2
Сти
11.06.18
✎
07:00
|
А НаборЗаписей.Удалить(НаборЗаписей[0]) зачем? Удалить то, что только что создал/изменил?
|
|||
3
Смотрящий
11.06.18
✎
07:03
|
(0) А ты уверен что получаешь одну запись ?
|
|||
4
falselight
11.06.18
✎
07:11
|
(2) В примере так было.
А если регистр непериодический независимый? |
|||
5
falselight
11.06.18
✎
07:11
|
(3) В примере так было, я узнаю как правильно нужно.
|
|||
6
Смотрящий
11.06.18
✎
07:35
|
(5) Посмотри как пишет ут10.3 регистр сведений при записи номенклатуры
|
|||
7
falselight
11.06.18
✎
07:45
|
(6) В каком модуле?
|
|||
8
falselight
11.06.18
✎
07:45
|
(6) Типовой код лучше не смотреть вообще!!! Что бы голову не сломать.....
|
|||
9
falselight
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) Когда выполняется "Набор.Прочитать()" - в набор выбираются все СУЩЕСТВУЮЩИЕ записи определенные отбором.
Потом вы над этим набором изгаляетесь (добавляете/корректируете/удаляете/очищаете...). При выполнении "Набор.Записать()" все что было в соответствии с отбором заменяется на то, что в наборе. |
|||
15
falselight
11.06.18
✎
08:23
|
(11) В одной ветке есть добавить()
|
|||
16
falselight
11.06.18
✎
08:24
|
Подскажите правильный аналог (9)
|
|||
17
Остап Сулейманович
11.06.18
✎
08:27
|
(15)
Если НаборЗаписей.Количество() = 0 Тогда //Добавление новой записи НоваяЗапсиь = НаборЗаписей.Добавить(); НоваяЗапсиь.Значение = Значение; Иначе //Изменение существующей записи НоваяЗапсиь = НаборЗаписей.Добавить(); НоваяЗапсиь.Значение = Значение; КонецЕсли; Найдите 2 отличия кроме комментария. |
|||
18
Остап Сулейманович
11.06.18
✎
08:28
|
(16)
Если НаборЗаписей.Количество() = 0 Тогда НоваяЗапсиь = НаборЗаписей.Добавить(); КонецЕсли; НаборЗаписей[0].Значение = Значение; |
|||
19
falselight
11.06.18
✎
08:49
|
(18) Опечатка там была, вот так верно?
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение) НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Номенклатура); НаборЗаписей.Отбор.Свойство.Установить(Свойство); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда //Добавление новой записи НоваяЗапсиь = НаборЗаписей.Добавить(); НоваяЗапсиь.Значение = Значение; Иначе //Изменение существующей записи НоваяЗапсиь.Значение = Значение; КонецЕсли; НаборЗаписей.Записать(); КонецПроцедуры |
|||
20
falselight
11.06.18
✎
08:50
|
(10) Как верно подскажите?
|
|||
21
Мимохожий Однако
11.06.18
✎
08:54
|
После Иначе ошибка
нет перебора записей. Ты же объявил набор записей. ............ Лучше использовать .СоздатьМенеджерЗаписи() как советовали в (9) |
|||
22
falselight
11.06.18
✎
08:54
|
(19) Это не работает, подскажите как правильно?
|
|||
23
Остап Сулейманович
11.06.18
✎
08:58
|
(22) У тебя пост (18) не отображается?
|
|||
24
Остап Сулейманович
11.06.18
✎
09:03
|
Вот так будет работать гарантировано.
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение) НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Номенклатура); НаборЗаписей.Отбор.Свойство.Установить(Свойство); НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); //пока просто так. Без объяснений НоваяЗапсиь = НаборЗаписей.Добавить(); НоваяЗапсиь.Значение = Значение; НаборЗаписей.Записать(); КонецПроцедуры |
|||
25
falselight
11.06.18
✎
09:05
|
(24) Спасибо, беру пробовать.
А как будет если через менеджер записи? |
|||
26
falselight
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) Так при вызове нужно Номеклатуру указывать.
|
|||
30
falselight
11.06.18
✎
09:12
|
Это пример на изменение записи.
А если нужно добавить? Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение) НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Номенклатура); НаборЗаписей.Отбор.Свойство.Установить(Свойство); НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Объект = Номенклатура; НоваяЗапись.Свойство = Свойство; НоваяЗапись.Значение = Значение; НаборЗаписей.Записать(); КонецПроцедуры |
|||
31
Остап Сулейманович
11.06.18
✎
09:16
|
(30) Тогда не нужно НаборЗаписей.Очистить();
Но есть одна фишка. Не может быть несколько записей с одинаковым набором измерений. Будешь пытаться множить такие записи - получишь ошибку. |
|||
32
falselight
11.06.18
✎
09:18
|
(31) Если без очистить, дублировать же будет??????
Создавать новые???? |
|||
33
falselight
11.06.18
✎
09:19
|
(32 +) Тут и нужно вставлять если.
Или добавлять или изменять. |
|||
34
Остап Сулейманович
11.06.18
✎
09:24
|
(33) Ты (18) уже осознал? Или где?
|
|||
35
falselight
11.06.18
✎
09:41
|
(34) Учитывая 18 какой будет финальный вариант?
|
|||
36
Остап Сулейманович
11.06.18
✎
09:45
|
(35) На.
Процедура ЗаписатьЗначениеСвойства(Номенклатура, Свойство, Значение) НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Номенклатура); НаборЗаписей.Отбор.Свойство.Установить(Свойство); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() = 0 Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Объект = Номенклатура; НоваяЗапись.Свойство = Свойство; Иначе НоваяЗапись = НаборЗаписей[0]; КонецЕсли; НоваяЗапись.Значение = Значение; НаборЗаписей.Записать(); КонецПроцедуры |
|||
37
falselight
11.06.18
✎
10:01
|
(36) Большое спасибо!
|
|||
38
1Сергей
11.06.18
✎
10:34
|
как можно было так протупить имея пример из (0)?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |