Имя: Пароль:
1C
1С v8
Как определить тип переменной (Объект, ссылка, менеджер)?
0 1Сергей
 
26.12.13
15:30
ТипЗнч что-то не придумаю как применить

ЗЫ сорри за тупняк
1 Gusarm
 
26.12.13
15:33
Встроенные функции языка (Script functions)
ТипЗнч (TypeOf)
Синтаксис:

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

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

Тип: Произвольный.
Значение, тип которого необходимо получить.
Возвращаемое значение:

Тип: Тип.

Описание:

Получает тип значения.

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

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:

Если ТипЗнч(ТекОбъект) = Тип("СправочникСсылка.Номенклатура") Тогда
    ...
КонецЕсли;
2 Maxus43
 
26.12.13
15:34
что конкретно не получается?
3 1Сергей
 
26.12.13
15:34
(1) там может быть Номенклатура, а может быть Склад. Со всеми справочниками сравнивать?
4 Avganec
 
26.12.13
15:35
(3) альтернатива? зачем тебе знать тип? по другому никак не ограничить?
5 Gusarm
 
26.12.13
15:36
ты напиши, что конкретно тебе нужно
6 1Сергей
 
26.12.13
15:37
(5) нужно определить, является ли переменна Ссылкой, или Объектом, или Менеджером, или строкой.
7 1Сергей
 
26.12.13
15:38
вот так могу определить, что переменная является документом ссылкой:

Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Документ))

Как проверить, что она Объект?
8 Avganec
 
26.12.13
15:42
(7) Найти(ТипЗнч(Объект), "Объект") такое что-то?
9 1Сергей
 
26.12.13
15:43
(8) не самое удачное решение. Есть, например, такой справочник: ЗначенияСвойствОбъектов
10 Avganec
 
26.12.13
15:45
(9) согласен, но какой вопрос изначально? ты хочешь вообще по переменной определить куда она относится? или что именно?
11 Zero on a dice
 
26.12.13
15:47
метаданные(), не?
12 Zero on a dice
 
26.12.13
15:52
хотя костылей больше может получиться
13 Wobland
 
26.12.13
15:57
xmlтип или что-то в этом роде подойдёт?
14 Maxus43
 
26.12.13
15:57
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Документ.Ссылка)) И Не окументы.ТипВсеСсылки().СодержитТип(ТипЗнч(Документ)) ТОгда

вот тебе и объект
15 1Сергей
 
26.12.13
16:00
(13)

ы4 = XMLТипЗнч(Документы.РеализацияТоваровУслуг.НайтиПоНомеру("АТР00036986", Дата(2013, 10, 3)));
ы5 = XMLТипЗнч(Документы.РеализацияТоваровУслуг.НайтиПоНомеру("АТР00036986", Дата(2013, 10, 3)).Ссылка);
ы6 = ы4 = ы5; // Истина
16 1Сергей
 
26.12.13
16:01
(15) + Оно не знает что такое Объект, что такое ссылка
17 1Сергей
 
26.12.13
16:01
Ладно, видимо на программировать так, чтобы не было желания (0)
18 Maxus43
 
26.12.13
16:01
(15) у тебя там нет Объекта если чо, ПолучитьОбъект Забыл
19 1Сергей
 
26.12.13
16:01
*видимо, надо программировать так...
20 1Сергей
 
26.12.13
16:02
(18) Серъёзно? А "Документы.РеализацияТоваровУслуг.НайтиПоНомеру("АТР00036986", Дата(2013, 10, 3))" что вернет?
21 Maxus43
 
26.12.13
16:02
но всё ранво XMLТипЗнч сведётся к (8)
22 Maxus43
 
26.12.13
16:02
(20) ссылку конечно. с какого бодуна он в объект превратится?
23 Wobland
 
26.12.13
16:03
(20) ссылку
24 программистище
 
26.12.13
16:04
Если Объект.Ссылка = Объект Тогда
это  ссылка
Иначе
объект
КонецЕсли;
25 1Сергей
 
26.12.13
16:05
(22) (23) Точно. ступил
26 Maxus43
 
26.12.13
16:05
В общем конечно надо не допускать такого, это кривой код получается когда не знаешь что к тебе в процедуру лезет
27 Wobland
 
26.12.13
16:05
(24) особенно хорошо это работает со строками
28 программистище
 
26.12.13
16:07
Если ТипЗнч(Объект) = Тип("Строка")
тогда строка
...промежуточные проверки...
ИначеЕсли Объект.Ссылка = Объект Тогда
это  ссылка
Иначе
объект
КонецЕсли;
29 программистище
 
26.12.13
16:07
(27) так подойдет (28) ?
30 Wobland
 
26.12.13
16:08
(29) господин ведущий, отвечать будет 1Сергей
31 программистище
 
26.12.13
16:08
разрешаю
32 1Сергей
 
26.12.13
16:10
(28) а кроме строки, Ссылки и объекта есть ещё другие типы. Например, Менеджер
33 1Сергей
 
26.12.13
16:13
Ладно, не парьтесь, ребята. Как я уже сказал - (17)

Переделал логику так, что в функцию передаются либо строка, либо объект, либо ссылка. А там:


    Если ТипЗнч(Документ) = Тип("Строка") Тогда
        ИмяДокумента = Документ;
    Иначе
        Попытка
            ИмяДокумента = Документ.Метаданные().Имя;
        Исключение
            Возврат Ложь;
        КонецПопытки;
    КонецЕсли;
34 Maxus43
 
26.12.13
16:13
(32) такой зоопарк только через Попытку Исключение разбирать, оно надо? переделай лучше
35 hhhh
 
26.12.13
16:14
(32) ну в типовые слазий. В общие модули, планы обмена. Там этот вопрос досконально обсосан.
36 1Сергей
 
26.12.13
16:14
(34) прав. изблавлюсь от попытки
37 Kvestin
 
26.12.13
21:44
(36)
Если у тебя осталось три варианта Строка Объект и Ссылка, то первый отсей по Если ТипЗнч(Документ) = Тип("Строка")

Далее просто бери Документ = Документ.Ссылка и у тебя гарантировано в Документ будет ссылка.
Конечно если тебе не нужен сам передаваемый объект.
38 Мимохожий Однако
 
26.12.13
21:50
В типовых есть общий модуль с функциями проверки на тип
39 User_Agronom
 
26.12.13
21:55
А преобразовать в строку и поиском по ключевому слову? Не, не пойдёт?
40 Kvestin
 
26.12.13
22:19
(39) см. (9).