|
Заполнить дополнительный реквизит типа булево программно | ☑ | ||
---|---|---|---|---|
0
Надмозг
20.07.23
✎
11:28
|
Казалось бы избитая тема, как заполнить доп. реквизит программно, но есть нюансы.
Всегда думал, что мы можем использовать типовую процедуру УправлениеСвойствами.ЗаписатьСвойстваУОбъекта, но, заметил такую особенность. У нас есть доп. реквизит типа булево. 1) Делаем запрос к ТЧ Дополнительные реквизиты с отбором по ссылке и свойству. В результате ничего нет, естественно, т.к. мы еще не устанавливали значение. 2) Открываем форму объекта, устанавливаем значение доп. реквизита Истина, записываем. Делаем тот же запрос. У нас предсказуемо появляется строчка со значением Истина. А дальше идет расхождение 3.1) Открываем форму еще раз, устанавливаем Ложь, записываем, смотрим запрос, там - пусто, т.е. строчка из ТЧ была удалена. 3.2) Вместо предыдущего пункта используем процедуру УправлениеСвойствами.ЗаписатьСвойстваУОбъекта, смотрим запрос - там есть строка со значением доп. реквизита Ложь В итоге получается, что типовая процедура УправлениеСвойствами.ЗаписатьСвойстваУОбъекта работает не так, как если бы мы редактировали реквизит на форме объекта. В связи с этим вопрос: Может быть, надо использовать другую процедуру для того чтобы работало по-типовому вместо или дополнительно к ЗаписатьСвойстваУОбъекта? |
|||
1
1CBaseV8
20.07.23
✎
11:39
|
Заполнить на форме или через объект?
Через объект вообще проблемы не вижу? Что-то типа: объНомен = Справочники.Номенклатура.ПустаяСсылка().ПолучитьОбъект(); пвхРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ИмяДопРеквизита") хххЗначение = "ХХХ"; Если ЗначениеЗаполнено(пвхРеквизит) Тогда стрРекв = Неопределено; ДЛя каждого стрДоп из объНомен.ДополнительныеРеквизиты цикл Если стрДоп.Свойство = пвхРеквизит тогда стрРекв = стрДоп; Прервать; КонецЦикла; КонецЕсли; Если не ЗначениеЗаполнено(стрРекв) Тогда стрРекв = объНомен.ДополнительныеРеквизиты.Добавить(); стрРекв.Свойство = пвхРеквизит; КонецЕсли; стрРекв.Значение = хххЗначение; КонецЕсли; |
|||
2
1CBaseV8
20.07.23
✎
11:40
|
(0) Может забыл записать объект послу установки реквизита?
|
|||
3
Timon1405
20.07.23
✎
11:41
|
(0) если не булево, а другой тип так записать, работает?
|
|||
4
Надмозг
20.07.23
✎
11:47
|
(1) Я не понял, что ты хочешь сказать. Задача в том, чтобы при установке доп. реквизита в значение Ложь, работало как по типовому при снятии флажка на форме, т.е. удалялась строка из ТЧ Дополнителные реквизиты. Твой код это не делает
|
|||
5
Надмозг
20.07.23
✎
11:48
|
(2) Я записываю объект из другой формы, напрямую с ним не работаю, передаю ссылку в типовую процедуру УправлениеСвойствами.ЗаписатьСвойстваУОбъекта, она там сама все записывает, в этом и смысл, чтобы использовать типовой механизм
|
|||
6
Надмозг
20.07.23
✎
11:52
|
(3) да, сейчас проверил. Если удалить ссылку в поле со значением ссылочного доп. реквизита и оставить пустую ссылку, эта строка так же удаляется из ТЧ
|
|||
7
ass1c
20.07.23
✎
12:40
|
(0) Не парься, так и работай. Это похоже на типовой функционал. УправлениеСвойствами.ЗаписатьСвойстваУОбъекта - используется по конфе в типовых решениях и записывает все переданные свойства с любыми значениями. А при записи из формы - свойства с пустыми значениями или со значением = Ложь удаляются из ТЧ - это если свойство имеет 1 тип значений. Если свойство имеет более 1 типа значений - то все значения будут записаны в ТЧ, кроме когда Значение = Неопределено (не выбран тип - нажата шифт F4).
В любом случае если ты запишешь значения программно, а кто-то потом перезапишет форму - то значения пустые удалятся. Хз зачем так сделано - может для оптимизации... |
|||
8
Donkey_hot
20.07.23
✎
12:47
|
Проблемы вроде нет. В запросах если надо выбрать ложь, используем ЕстьNULL(Значение, ЛОЖЬ).
|
|||
9
Надмозг
21.07.23
✎
11:44
|
(8) я знаю, что это можно учитывать при разработке прописав соответствующие проверки. Вопрос в том, почему при использовании типовых механизмов состояние базы данных различное. Это как-то странно
|
|||
10
Надмозг
21.07.23
✎
11:45
|
(7) понятно, про составной тип интересный момент
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |