Создание колонки таблицы значений в 1С 8.1. Объект «Описание типов» (1С: Программисту)

Вопрос Создание колонки таблицы значений различных типов в 1С v8
Ответ
При создании колонки таблицы значений в качестве типа можно передавать массив типов, и можно конкретный тип. Массив типов используется, когда нужно указать несколько различных типов для одной колонки.

Для указания типов используется «общий объект» — «Описание типов». Поэтому сначала поясним, что такое «Описание типов» («Описание типов значений»).

«Описание типов значений». Для описания допустимых типов значений свойств различных объектов в системе используется специальный объект «ОписаниеТипов». При помощи данного объекта можно описывать допустимые типы значений, которые можно будет присваивать свойствам. Для дополнительного ограничения возможных значений примитивных типов Число, Строка и Дата предусмотрены квалификаторы. Квалификаторы описывают такие параметры, как длина строки или числа, допустимые части даты и т.п.

Синтаксис метода «Описание типов»

Новый ОписаниеТипов(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Параметры:
<Исходное описание типов> (необязательный)
Тип: ОписаниеТипов. Исходное описание типов, на основании которого будет строиться новое.
<Добавляемые типы> (необязательный)
Тип: Массив, Строка. Массив значений типа Тип, состоящий из типов, которые будут использованы в объекте, или строка содержащая имена типов разделенных запятыми.
<Вычитаемые типы> (необязательный)
Тип: Массив, Строка. Массив значений типа Тип (или строка, содержащая имена типов, разделенных запятыми), состоящий из типов, которые будут исключены из исходного описания, указанного в первом параметре.
<Квалификаторы числа> (необязательный)
Тип: КвалификаторыЧисла. Квалификаторы числа, описывающие допустимые значения числового типа.
<Квалификаторы строки> (необязательный)
Тип: КвалификаторыСтроки. Квалификаторы строки, описывающие допустимые значения строкового типа.
<Квалификаторы даты> (необязательный)
Тип: КвалификаторыДаты. Квалификаторы даты, описывающие допустимые значения типа Дата.
Описание:
Создает описание типов на основании другого описания типов, путем добавления одних и исключения других типов. Если новый квалификатор не указан, будут оставлены квалификаторы исходного описания типов.
Пример использования объекта «Описание типов»:

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

В общем случае достаточно определить типы колонок таким образом:

	ТЗ.Колонки.Добавить("ИндексСортировки"		, Новый ОписаниеТипов("Число"));
	ТЗ.Колонки.Добавить("ИмяРаздела"		, Новый ОписаниеТипов("Строка"));
	ТЗ.Колонки.Добавить("ДатаКорр"			, Новый ОписаниеТипов("Дата"));
	ТЗ.Колонки.Добавить("БезусловноеУдаление"	, Новый ОписаниеТипов("Булево"));
	ТЗ.Колонки.Добавить("Номенклатура"		, Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	ТЗ.Колонки.Добавить("ДанныеРаздела"		, Новый ОписаниеТипов("Структура"));
	// пример создания колонок "число" и "строка" с уточнением параметров:
	ТЗ.Колонки.Добавить("ПроцентВыполнения"		, Новый ОписаниеТипов("Число"	, Новый КвалификаторыЧисла(18, 2)));
	ТЗ.Колонки.Добавить("ИмяРаздела"		, Новый ОписаниеТипов("Строка"	, , Новый КвалификаторыСтроки(200, ДопустимаяДлина.Переменная)));
	ТЗ.Колонки.Добавить("ДатаСписаания"		, Новый ОписаниеТипов("Дата"	, , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));

Однако, в более общем случае, в качестве типа колонки передается массив. Массив используется в том случае, когда одной колонке нужно задать несколько типов. Тогда определение структуры будет примерно таким (приведены примеры для разных типов колонок, когда тип — массив, но состав массива для упрощения дан одного типа, чтобы не путаться)

	////////////////////////////////////////////////////////
	////// формирование структуры ТЗ (создание колонок)
	//// определим квалификаторы для подстановки в полях квалификаторов ТЗ
	КЧ = Новый КвалификаторыЧисла(18,9);
	КС = Новый КвалификаторыСтроки(200);
	КД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
	//// определим описания типов для будущих колонок ТЗ
	// Массив - это исходное описание типов, на основании которого будет строиться новое
	// Обратите внимание, что для колонок ТЗ исходное описание типов в этом примере - массив
	Массив = Новый Массив;
	Массив.Добавить(Тип("Строка"));
	ОписаниеТиповСтрока			 = Новый ОписаниеТипов(Массив,	,	КС);

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

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

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

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

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

	Массив.Очистить();
	Массив.Добавить(Тип("Булево"));
	ОписаниеТиповБулево			 = Новый ОписаниеТипов(Массив);

	// собственно добавление колонок в ТЗ (создание структуры будущей ТЗ)
	ТЗ.Колонки.Добавить("Номенклатура",	ОписаниеТиповНоменклатура);
	ТЗ.Колонки.Добавить("Код",		ОписаниеТиповСтрока);
	ТЗ.Колонки.Добавить("СерияНоменклатуры",ОписаниеТиповСерия);
	ТЗ.Колонки.Добавить("КонтрагентКод",	ОписаниеТиповСтрока);
	ТЗ.Колонки.Добавить("ДатаДействия",	ОписаниеТиповДата);
	ТЗ.Колонки.Добавить("Качество",		ОписаниеТиповКачество);
	ТЗ.Колонки.Добавить("КоличествоУС",	ОписаниеТиповЧисло);
	ТЗ.Колонки.Добавить("Списывать",	ОписаниеТиповБулево);
	...

	//////// формирование структуры ТЗ (создание колонок)
	////////////////////////////////////////////////////////

О добавлении строки в таблицу значений см. http://www.1c-h.ru/?p=255

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *