|
Как получить пустое значение заранее неизвестного типа? | ☑ | ||
|---|---|---|---|---|
|
0
Chai Nic
12.01.07
✎
16:53
|
Задача такая - есть реквизит какого-то типа. Заранее неизвестно какого (может быть строка, может быть СправочникСсылка, может быть вообще составного типа). Нужно ему присвоить пустое значение. Как это сделать "красиво", то есть без кучи явных проверок? Может, как-то использовать объект Метаданные?
|
|||
|
1
ТелепатБот
гуру
12.01.07
✎
16:53
|
||||
|
2
MikleV
12.01.07
✎
16:55
|
а неопределено не подойдёт?
|
|||
|
3
MikleV
12.01.07
✎
16:56
|
опс..не так.. нада узнать тип реквизита ну и сооств. смотреть чего там такое..если спр - пустая ссылка ну и далее
|
|||
|
4
Chai Nic
12.01.07
✎
17:01
|
(3) А как получить пустую ссылку справочника, если известен его тип (ТипЗнч)?
|
|||
|
5
Scooter
12.01.07
✎
17:04
|
както так
Справочники["Номенклатура"].ПустаяСсылка() |
|||
|
6
Господин ПЖ
12.01.07
✎
17:06
|
(4) Новый(Тип)...
|
|||
|
7
DK_L
12.01.07
✎
17:12
|
Для Каждого Справочник Из Метаданные.Справочники Цикл
Если ТипЗнч(Реквизит) = Тип(Строка(Справочники[Справочник.Имя])) Тогда Реквизит = Справочники[Справочник.Имя]).ПустаяСсылка(); КонецЕсли; КонецЦикла; Для документов, перечислений тоже самое ИМХО так должно быть |
|||
|
8
Господин ПЖ
12.01.07
✎
17:17
|
(7) мдя...
Накуя придумали ОписаниеТипов и ТипВсеСсылки() даже не знаю... |
|||
|
9
Advan
12.01.07
✎
17:17
|
(0)Это глуюоко философский вопрос: как получит то - чего нет?
|
|||
|
10
Chai Nic
12.01.07
✎
17:20
|
(7) Это очевидный способ, но он для меня не подходит. В конфигурации может быть несколько десятков типов справочников и документов. А операция установки пустого значения должна будет выполняться в цикле - следовательно получается двойной цикл, что неприемлемо с точки зрения быстродействия.
|
|||
|
11
Господин ПЖ
12.01.07
✎
17:22
|
(10) Читал (6) и (8) ?
|
|||
|
12
Chai Nic
12.01.07
✎
17:26
|
(11) Пожалуйста, конкретнее. У меня есть реквизит "ссылка на справочник заранее неизвестного типа". Я получил ТипСпр=ТипЗнч(Реквизит). Как мне получить ПустаяСсылка() для этого ТипСпр?
|
|||
|
13
MikleV
12.01.07
✎
17:27
|
жкк почитать..
кстати, "ссылка на справочник заранее неизвестного типа" ка то плохо контачит с заявленным в (0) любым типом.. |
|||
|
14
Chai Nic
12.01.07
✎
17:30
|
(13) "плохо контачит с заявленным" - это я уже понял, что в один прием задачу не решить.. пришлось разбить её на подзадачи. А в ЖКК найти ответ на такой вопрос не найти - это только справочник, а не howto.
|
|||
|
15
Господин ПЖ
12.01.07
✎
17:31
|
Новый (New)
Новый (New) Синтаксис (вариант 1): Новый <Идентификатор типа>[(<Парам1>, <Парам2>, …)] Параметры: Идентификатор типа Указывается идентификатор типа, значение которого создается. <Парам1>, <Парам2>, … После идентификатора типа в скобках могут указываться параметры, если они определены в конструкторах для данного типа. Допустимое количество параметров и их назначение указывается в описании конструкторов объекта. Синтаксис (вариант 2): Новый(<Тип>[, <ПараметрыКонструктра>]) Параметры: Тип Имя типа или значение типа Тип ПараметрыКонструктора Массив параметров конструктора Описание: Оператор позволяет создать значение указанного типа. Допустим только для тех типов, для которых разрешено создание с помощью данного оператора (подробнее см. описание объектов языка). Вариант 2 синтаксиса может использоваться и для некоторых типов, для которых не указано, что они могут создаваться с помощью оператора Новый (например, для ссылочных типов - СправочникСсылка.Номенклатура). Однако использование объектов, полученных таким образом, ограничено. Пример1: СписокСохранения = Новый Структура; ХранилищеДанных = Новый ХранилищеЗначения(СписокСохранения); Пример2: ТипЗначения = Тип("КвалификаторыСтроки"); Параметры = Новый Массив(2); Параметры[0] = 20; Параметры[1] = ДопустимаяДлина.Переменная; КвСтр = Новый(ТипЗначения, Параметры); Вариант 2. получишь объект, а от него уже ПустаяСсылка() |
|||
|
16
Господин ПЖ
12.01.07
✎
17:32
|
(14) >>это только справочник, а не howto
Это зависит как читать... Там еще примеры есть. |
|||
|
17
Chai Nic
12.01.07
✎
17:37
|
"Вариант 2. получишь объект, а от него уже ПустаяСсылка()"
Я так понял, что Новый(ТипЗнч(СсылкаСпр)) это и есть пустая ссылка. Вроде работает... Хотя в документации об этом ни слова... :( |
|||
|
18
vde69
12.01.07
✎
17:41
|
(0) в типовой УТ есть такая функция (в общем модуле)
|
|||
|
19
vde69
12.01.07
✎
17:42
|
// Предназначена для получения пустого значения заданного типа:
// примитивного, или ссылочного. Используется // // Параметры: // ЗаданныйТип - тип, пустое значение которого нужно получить // Функция ПустоеЗначениеТипа(ЗаданныйТип) Экспорт Если ЗаданныйТип = Тип("Число") Тогда Возврат 0; ИначеЕсли ЗаданныйТип = Тип("Строка") Тогда Возврат ""; ИначеЕсли ЗаданныйТип = Тип("Дата") Тогда Возврат '00010101000000'; ИначеЕсли ЗаданныйТип = Тип("Булево") Тогда Возврат Ложь; Иначе Возврат Новый (ЗаданныйТип); КонецЕсли; КонецФункции // ПустоеЗначениеТипа(); |
|||
|
20
Chai Nic
12.01.07
✎
17:50
|
(19) :-) Офигеть. То есть круто. В УПП оно тоже есть..
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |