Имя: Пароль:
1C
1С v8
работа с COM объектами
0 Black Dragon
 
21.09.11
16:05
Доброго дня!

как определить пустое значение у COM объекта?
тип имеется, по наименованию не надежно
1 Black Dragon
 
21.09.11
16:05
особенно актуально при работе со справочниками
2 zbv
 
21.09.11
16:07
ЗначениеЗаполнено()

в com соединении
3 Axel2009
 
21.09.11
16:08
Глобальный контекст.ЗначениеЗаполнено (Global context.ValueIsFilled)
Глобальный контекст (Global context)
ЗначениеЗаполнено (ValueIsFilled)
Синтаксис:

ЗначениеЗаполнено(<Значение>)
Параметры:

<Значение> (обязательный)

Тип: Произвольный. Значение для сравнения.
Возвращаемое значение:

Тип: Булево. Для значений типа Булево всегда возвращается Истина.
Для значений типа Строка возвращается Истина, если в строке есть не пробельные символы.
Для массивов и коллекций возвращается Истина, если в них есть хотя бы 1 элемент.
Описание:

Функция проверяет, отличается ли переданное значение от значения по умолчанию того же типа.
Не работает с мутабельными значениями. При передаче мутабельного значения функция вызывает исключение.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, [b]внешнее соединение[/b].
Примечание:

Источники данных не проверяются, значение считается заполненным всегда.
4 Black Dragon
 
21.09.11
16:09
не понятно...
ну, к примеру, Спр = Соединение.Справочник.Номенклатура;
тогда как?
5 Axel2009
 
21.09.11
16:09
перед значениезаполнено добавить соединение, не?
6 Black Dragon
 
21.09.11
16:10
и мутабельный тип тоже еще та штучка...
7 Shurjk
 
21.09.11
16:11
Проще всего проверить уже полученное значение, все равно ведь получаешь строку или число.
8 Black Dragon
 
21.09.11
16:13
может тогда так:
Спр = Соединение.Справочник.Номенклатура;
Если Спр.ValueIsFilled() Тогда
...
КонецЕсли;

(7) при проверке полученного значения мешается мутабельный тип данных
9 zbv
 
21.09.11
16:13
а "Спр = Соединение.Справочник.Номенклатура;" зачем проверять ?
10 Shurjk
 
21.09.11
16:13
+(7) В данном случае проверять вот это Спр = Соединение.Справочник.Номенклатура;
на заполненность вообще смысла не имеет а вот проверить примерно так СокрЛП(Соединение.Справочник.Номенклатура.Наименование) <> ""
вполне целесообразно.
11 Axel2009
 
21.09.11
16:14
(10) и сиди отлавливай потом после такого, где у нас надо код оптимизировать
12 Black Dragon
 
21.09.11
16:14
(10) а что мешает базе-источнику иметь элемент с незаполненным наименованием?
13 zbv
 
21.09.11
16:15
+ (9) хотя "Справочник" - это что ?
14 Black Dragon
 
21.09.11
16:15
у самого COM объекта есть свойство специальное для этих целей?
15 Shurjk
 
21.09.11
16:15
(11) (12) Иначе не проверишь Соединение.Справочник.Номенклатура - COM объект.
16 Black Dragon
 
21.09.11
16:16
(13) это определение типа данных, затем, к примеру, можно, так:
ПолученныеЭлементы = Спр.Выбрать();
17 hhhh
 
21.09.11
16:17
(14) ЗначениеЗаполнено - тебе же сказали
18 Black Dragon
 
21.09.11
16:18
у COM объекта есть свои служебные аттрибуты?
19 zbv
 
21.09.11
16:18
(16) тогда уж "СправочникИ"
а зачем проверять получил ты менеджера или нет ?
20 Black Dragon
 
21.09.11
16:20
применять ЗначениеЗаполнено(..) для полученного значения как-то не то...

(16) у элемента справочника либо реквизита дока могут ведь быть незаполненные значения? так ведь?
21 Shurjk
 
21.09.11
16:21
(20) Можешь проверить к примеру код, он всегда заполнен.
22 zbv
 
21.09.11
16:22
(20) почему "значениеЗаполнено" не то для проверки заполненности реквизитов ?
23 Axel2009
 
21.09.11
16:22
(15) да ладно?
24 Shurjk
 
21.09.11
16:23
(23) Проверь
25 Shurjk
 
21.09.11
16:23
+(24) А что это по вашему будет?
26 Axel2009
 
21.09.11
16:24
Истина или Ложь.
27 Shurjk
 
21.09.11
16:24
(26) Интресная логика и почему?
28 Black Dragon
 
21.09.11
16:24
вот, к примеру, так:

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

будет исключение по причине мутабельного значения!!!

(21) а ведь точно! а я блин, не догадался!!! Спасибо!
29 zbv
 
21.09.11
16:26
Если Соединение.ЗначениеЗаполнено(ПолученныеЗначения.СтранаПроисхождения) Тогда

// со (2) поста пытаемся до тебя мысль довести :)
30 hhhh
 
21.09.11
16:27
(28)

Соединение.ЗначениеЗаполнено(

кончай уже прикалываться.
31 Axel2009
 
21.09.11
16:31
(27) потому что метод надо вызывать в рамках области видимости. не что вижу то пою.
32 Shurjk
 
21.09.11
16:34
(31) Какой метод? речь идет о том какой тип будет у Соединение.Справочник.Номенклатура
33 Axel2009
 
21.09.11
16:37
(32) ЗначениеЗаполнено. тип будет Справочник.Номенклатура. но в области видимости Соединения
34 Axel2009
 
21.09.11
16:37
(33) для тех кто в тяжелых танках (29) и (30) уже прямо написали как надо реализовать (5)
35 Black Dragon
 
21.09.11
16:38
(33) не только...вчера буквально в этом убедился...если 8-ка с 8-кой
36 Shurjk
 
21.09.11
16:38
(34) Не смущает что такое решение будет работать часасми?
37 Axel2009
 
21.09.11
16:39
(36) ничуть не дольше, чем СокрЛП(Соединение.Справочник.Номенклатура.Наименование)
38 Axel2009
 
21.09.11
16:40
(37) более того, чтобы это реализовать, нужно обращаться к серверу через объект ком соединения. а в (29) написано будет только к объекту ком соединения и вернется результат.
39 Axel2009
 
21.09.11
16:41
(35) вообще читаем что тут пишут али как?
40 Black Dragon
 
21.09.11
16:44
Ну так что, тема закрыта? :)
41 Shurjk
 
21.09.11
18:34
(38) Зачем каждый раз обращаться получаем один раз выборку и все, а по вашему методу он действительно будет каждый раз обращаться.
Основная теорема систематики: Новые системы плодят новые проблемы.