|
Как отличить созданный объект от пустого? | ☑ | ||
|---|---|---|---|---|
|
0
AlexYa
27.05.10
✎
16:36
|
Есть реквизит формы типа СправочникОбъект. При открытии формы он пустой.
Затем он либо находиться в Справочнике, либо создается. Но вновь созданный от пустого никак не могу отличить. Например, при работе с формой нужно понять, объект создан или нет, чтобы не получить исключение "Элемент не выбран!". Вот примерный код: Функция ОбъектПолучить(Владелец) Перем ОбъектНайден; //Объект создан Если (Объект.Ссылка <> Справочники.Спр1.ПустаяСсылка()) Тогда Возврат Истина; //Уже есть объект КонецЕсли; ОбъектНайден = Ложь; //Ищем первый по владельцу Выборка = Справочники.Спр1.Выбрать(, Владелец); Если Выборка.Следующий() Тогда Объект = ВыборкаМодификацияУГП.Ссылка.ПолучитьОбъект(); ОбъектНайден = Истина; КонецЕсли; Если Не ОбъектНайден Тогда Объект = Справочники.Спр1.СоздатьЭлемент(); СоздатьСсылкуНовомуОбъекту( Объект); Возврат Ложь; //Новый объект КонецЕсли; Возврат Истина; КонецФункции Процедура СоздатьСсылкуНовомуОбъекту(пОбъект, СсылкаНового = Неопределено) Экспорт Если пОбъект.ЭтоНовый() Тогда СсылкаНового = пОбъект.ПолучитьСсылкуНового(); Если НЕ ЗначениеЗаполнено(СсылкаНового) Тогда СсылкаНового = Справочники[пОбъект.Метаданные().Имя].ПолучитьСсылку(); КонецЕсли; Если НЕ ЗначениеЗаполнено(пОбъект.ПолучитьСсылкуНового()) Тогда пОбъект.УстановитьСсылкуНового(СсылкаНового); КонецЕсли; КонецЕсли; КонецПроцедуры Дело в том, что после создания Объект.Ссылка всегда пустая, даже после последней процедуры. При этом до создания Объект.Ссылка.Пустая() выдает ошибку, а после = Истина. Т.е. два варианта пустоты :). Совсем пустая и не совсем. Вариант обработки исключений или переменная в модуле - выход из положения. Но я хотел бы системное решение, которое позволит отличить пустой реквизит типа Объект от созданного Объекта. Форум посмотрел, но ничего пока не нашел. Кто что предложит? |
|||
|
1
Mort
27.05.10
✎
16:41
|
Какая жесть
|
|||
|
2
levlvov
27.05.10
✎
16:43
|
СовсемПустая = (Объект.Ссылка = Объект.Ссылка);
НеСовсемПустая = Ложь; Попытка НеСовсемПустая = (Объект.Ссылка.Пустая() = Объект.Ссылка.Пустая()); Исключение КонецПопытки; |
|||
|
3
nop
27.05.10
✎
16:45
|
ппц сколько вас...
Объект = Новый (ТипЗнч(Объект)) |
|||
|
4
nop
27.05.10
✎
16:46
|
"Форум посмотрел, но ничего пока не нашел. "
вот соседняя ветка v8: НайтиПоРеквизиту. Если ничего не найдено... |
|||
|
5
AlexNew
27.05.10
✎
16:46
|
ЭтоНовый()
|
|||
|
6
Mitriy
27.05.10
✎
16:50
|
это что тут было вообще?
|
|||
|
7
levlvov
27.05.10
✎
16:51
|
(3) а им читать некогда...
|
|||
|
8
Aprobator
27.05.10
✎
17:18
|
(0) нефига не понял - нужна проверка на заполнение реквизита формы или где?
|
|||
|
9
AlexYa
27.05.10
✎
23:28
|
Спасибо всем, кто давил на клавиши.
Было бы ещё лучше, если бы предварительно проверяли то ,что пишут. Итак (3) всегда Ложь (2) для попытки есть более надежный вариант Объект.ЭтоНовый() (4) немного не тот звон Пока однозначный вариант дает ЭтоНесозданный = Ложь; ЭтоНовый = Ложь; Попытка ЭтоНовый = Объект.ЭтоНовый(); Исключение ЭтоНесозданный = Истина; КонецПопытки; Хотелось, конечно, изящный и простой вариант определения состояния (объект не создан - объект создан новый - объект есть в справочнике). Но увы... Для (8). У формы есть реквизит типа СправочникОбъект. Заполнить и сохранить его нельзя до тех пор, пока он не будет приравнен созданному элементу: Объект = Справочники.Спр1.СоздатьЭлемент() (0) Исправление: Вместо Объект = ВыборкаМодификацияУГП.Ссылка.ПолучитьОбъект(); Надо Объект = Выборка.Ссылка.ПолучитьОбъект(); |
|||
|
10
levlvov
27.05.10
✎
23:34
|
(9) Атлична, топик в книгу знаний...
|
|||
|
11
nop
28.05.10
✎
08:28
|
(9) 1. Подумай когда Истина будет. Если не менять поля наверно.
2. Используй Объект.ДополнительныеСвойства, раз переменная модуля не устраивает |
|||
|
12
Aprobator
28.05.10
✎
15:38
|
(() народ где вы такие задачи тока берете?
|
|||
|
13
Ненавижу 1С
гуру
31.05.10
✎
10:34
|
(9) если хочется изящней, то анализировать тип значения переменной
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |