Имя: Пароль:
1C
1С v8
Как получить описание типа по значению?
0 Галахад
 
гуру
23.01.13
11:34
Задача:
Добавить в таблицу значений колонку
с типом колонки другой таблицы значений. :-)

Написал вот такой код. Нерабочий.
ТипКолонки = ТипЗнч(тз1[0][ИмяКолонки]);
тз2.Колонки.Добавить(ИмяКолонки, ТипКолонки);

Какой будет рабочим?
1 acsent
 
23.01.13
11:35
Тип <> ОписаниеТипа
2 Галахад
 
гуру
23.01.13
11:36
(1) Спасибо Кэп. А как описание получить.
Можно не из типа, а из значения.
3 samozvanec
 
23.01.13
11:37
СП читать не предлагать?
4 mzelensky
 
23.01.13
11:38
СП:


ОписаниеТипов (TypeDescription)
На основании объекта ОписаниеТипов
Синтаксис:

Новый ОписаниеТипов(<ИсходноеОписаниеТипов>, <ДобавляемыеТипы>, <ВычитаемыеТипы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)
Параметры:

<ИсходноеОписаниеТипов> (необязательный)

Тип: ОписаниеТипов.
Исходное описание типов, на основании которого будет строиться новое.
<ДобавляемыеТипы> (необязательный)

Тип: Массив; Строка.
Массив значений типа Тип, состоящий из типов, которые будут использованы в объекте, или строка содержащая имена типов разделенных запятыми.
<ВычитаемыеТипы> (необязательный)

Тип: Массив; Строка.
Массив значений типа Тип (или строка, содержащая имена типов, разделенных запятыми), состоящий из типов, которые будут исключены из исходного описания, указанного в первом параметре.
<КвалификаторыЧисла> (необязательный)

Тип: КвалификаторыЧисла.
Квалификаторы числа, описывающие допустимые значения числового типа.
<КвалификаторыСтроки> (необязательный)

Тип: КвалификаторыСтроки.
Квалификаторы строки, описывающие допустимые значения строкового типа.
<КвалификаторыДаты> (необязательный)

Тип: КвалификаторыДаты.
Квалификаторы даты, описывающие допустимые значения типа Дата.
<КвалификаторыДвоичныхДанных> (необязательный)

Тип: КвалификаторыДвоичныхДанных.
Квалификаторы двоичных данных.
Описание:

Создает описание типов на основании другого описания типов, путем добавления одних и исключения других типов. Если новый квалификатор не указан, будут оставлены квалификаторы исходного описания типов.
Пример:

// расширим описание ДопустимыеТипы новыми типами
Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.Методы"));
Массив.Добавить(Тип("Число"));
Знак = ДопустимыйЗнак.Неотрицательный;
КвЧисла = Новый КвалификаторыЧисла(10, 2, Знак);

ДопустимыеТипы = Новый ОписаниеТипов(ДопустимыеТипы, Массив, , КвЧисла);
5 НафНаф
 
23.01.13
11:39
(4) это не тот конструктор, ему другой нужен
6 samozvanec
 
23.01.13
11:39
(4) на основании типов надо
7 samozvanec
 
23.01.13
11:40
+(6) тоже самое, только массив с типами первым параметром. это для тех, у кого нет СП
8 mzelensky
 
23.01.13
11:43
(5) почему? подходит! ток вместо

Тип("СправочникСсылка.Методы")

нужно

ТипЗнч(тз1[0][ИмяКолонки])

и вроде все.

Вот кусок из рабочего кода:

МассивТипов = Новый Массив;
                       МассивТипов.Добавить(Тип("Строка"));
                       МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
                       Тип=Новый ОписаниеТипов(МассивТипов);

ТЗ.Колонки.Добавить(ИмяКолонкиТЗ, Новый ОписаниеТипов("Строка") );
9 Галахад
 
гуру
23.01.13
11:45
ТипКолонки = ТипЗнч(тз1[0][ИмяКолонки]);
       
Массив = Новый Массив;
Массив.Добавить(ТипКолонки);
       
Описание = Новый ОписаниеТипов(, Массив, , );

Ошибка при вызове конструктора (ОписаниеТипов): Несоответствие типов (параметр номер '2')
       Описание = Новый ОписаниеТипов(, Массив, , );

Что я делаю не так?
10 mzelensky
 
23.01.13
11:45
Ой, не то вставил


вместо

ТЗ.Колонки.Добавить(ИмяКолонкиТЗ, Новый ОписаниеТипов("Строка") );

надо

ТабЗагрузки.Колонки.Добавить(ИмяКолонкиТЗ,Тип );
11 viktor_vv
 
23.01.13
11:45
(8) Че так сложно-то

ТЗ.Колонки.Добавить(ИмяКолонкиТЗ, Новый ОписаниеТипов(тз1.Колонки[ИмяКолонки].ТипЗначения) )
12 acsent
 
23.01.13
11:46
(11) можно даже проще
ТЗ.Колонки.Добавить(ИмяКолонкиТЗ, тз1.Колонки[ИмяКолонки].ТипЗначения)
13 mzelensky
 
23.01.13
11:47
(11) у меня там просто составные типы и много условий. Поэтому для мня так проще :)
14 samozvanec
 
23.01.13
11:47
попытка телепатии: копировать колонки не предлагать?
15 Nzn
 
23.01.13
11:48
(9) ТипЗнч возвращает Тип
16 viktor_vv
 
23.01.13
11:49
(12) Точно. Если не надо модифицировать исходное описание типов, то таки да.

(13) Я так понял тебе один в один надо описание типов из исходной ТЗ.
17 samozvanec
 
23.01.13
11:49
(9) массив первым параметром
18 х86
 
23.01.13
11:50
(0)ну чо мудрить???

ня    Таб1 = Новый ТаблицаЗначений;
   Таб1.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
   
   Таб2 = Новый ТаблицаЗначений;
   Таб2.Колонки.Добавить("Номенклатура", Таб1.Колонки[0].ТипЗначения);
19 viktor_vv
 
23.01.13
11:50
(16) Попутал (13) с ТС'ом.
20 samozvanec
 
23.01.13
11:51
ТС, ответь на (14), пытаюсь развивать навыки
21 Галахад
 
гуру
23.01.13
11:55
(11) Спасибо. Я знал, что все просто. :-)

(17) Да, спасибо, заработало.

(14) Вопроса не понял. Как можно скопировать колонку?
22 samozvanec
 
23.01.13
12:00
(21) ПустаяТЗСНужнымиКолонками = ТвояТЗ.СкопироватьКолонки("СписокИменНужныхКолонокЧерезЗапятую");
23 х86
 
23.01.13
12:01
(22)+ 100500
проще бывает скопировать ТЗ и очистить её
24 Галахад
 
гуру
23.01.13
12:01
(22) А, понял. Но, тз2 не пустая таблица.
25 samozvanec
 
23.01.13
12:02
(24) ну вот, без левелапа остался(
Ошибка? Это не ошибка, это системная функция.