ОписаниеТипов в 1С

Apr 03, 2022 17:06

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

Создание

Для создания объекта ОписаниеТипов можно использовать два вида конструктора. Первый на основании самого типа:

//тип можно указать строкой
СтроковыйТип = Новый ОписаниеТипов("Строка");
СсылочныйТип = Новый ОписаниеТипов("СправочникСсылка.Поставщики");

//для составного типа нужно перечислить типы через запятую
СоставнойТип = Новый ОписаниеТипов("Число, Булево");

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

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


Второй на основании уже существующего описания типов, с возможностью добавления новых типов или удаления текущих:

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

//теперь на основании него создадим новое ОписаниеТипов, добавив тип Число.
//добавляемые типы указываются вторым параметром
//Типы также можно указывать через массив или строкой
НовоеОписание = Новый ОписаниеТипов(СоставнойТип, "Число");

//третьим параметром можно передать типы, которые нужно исключить из
//нового описания типов
НовоеОписание = Новый ОписаниеТипов(НовоеОписание,, "Строка");

Созданный объект описание типов можно присваивать различным свойствам, например для определения типа колонки таблицы значений:

СоставнаяТЗ = Новый ТаблицаЗначений;
СоставнаяТЗ.Колонки.Добавить("Составная", СоставнойТип);
//СоставнойТип - это объект ОписаниеТипов

Квалификаторы

Квалификаторы позволяют конкретизировать тип данных. Указываются в конструкторе при создании объекта ОписаниеТипов.

Квалификаторы числа

Для числа можно указать общее количество разрядов (включая количество разрядов после запятой), количество разрядов после запятой и допустимый знак (любые числа или только положительные):

КвалЧ = Новый КвалификаторыЧисла(10, 4, ДопустимыйЗнак.Неотрицательный);
ЧисловойТип = Новый ОписаниеТипов("Число", КвалЧ);

ТЗЧисла = Новый ТаблицаЗначений;
ТЗЧисла.Колонки.Добавить("КвалификаторыЧисла", ЧисловойТип);

СтрТабл = ТЗЧисла.Добавить();
СтрТабл.КвалификаторыЧисла = 1234567890;
//в строке будет 99999999,99

СтрТабл = ТЗЧисла.Добавить();
СтрТабл.КвалификаторыЧисла = 123.456789;
//в строке будет 123.46

СтрТабл = ТЗЧисла.Добавить();
СтрТабл.КвалификаторыЧисла = -2;
//в строке будет 0

Если данное описание типов присвоить колонке таблицы значений, а потом добавить в эту колонку число 1234567890, то из-за ограничения данное число будет преобразовано в 99999999,99. Если присвоить число 123.456789, то оно будет округлено до двух знаков после запятой 123.46. Если присвоить -2, то так как запрещены отрицательные числа, то оно будет преобразовано в 0.

Квалификаторы строки

Строка может быть неограниченной длины и ограниченной. Ограниченная строка может быть переменной или фиксированной длины. Например, если указать длину строки равной 5, то при использовании переменной длины строка «Стр» будет равна «Стр» и ее фактическая длина будет равна трем. При использовании фиксированной длины, строка «Стр» будет дополнена справа пробелами и получится: «Стр «. То есть ее фактическая длина всегда равна длине, которая была указана при описании типа.

Данные параметры можно указать через квалификаторы строки:

КвалСтр = Новый КвалификаторыСтроки(5);
//по умолчанию используется переменная длина
СтроковыйТип = Новый ОписаниеТипов("Строка", КвалСтр);

ТЗСтроки = Новый ТаблицаЗначений;
ТЗСтроки.Колонки.Добавить("КвалификаторыСтроки", СтроковыйТип);

СтрТабл = ТЗСтроки.Добавить();
СтрТабл.КвалификаторыСтроки = "Стр";

СтрТабл = ТЗСтроки.Добавить();
СтрТабл.КвалификаторыСтроки = "Строка"; //влезло только Строк

В данном примере была создана ограниченная строка с переменной длиной в 5 символов. Поэтому во второй строке будет «Строк», а не «Строка».

Для указания строки неограниченной длины нужно указать ее длину равной нулю:

КвалСтр = Новый КвалификаторыСтроки(0);
//если первый параметр равен 0, то второй параметр игнорируется,
//какой бы он ни был указан
СтроковыйТип = Новый ОписаниеТипов("Строка", КвалСтр);

ТЗСтроки = Новый ТаблицаЗначений;
ТЗСтроки.Колонки.Добавить("КвалификаторыСтроки", СтроковыйТип);

СтрТабл = ТЗСтроки.Добавить();
СтрТабл.КвалификаторыСтроки = "Стр";

СтрТабл = ТЗСтроки.Добавить();
СтрТабл.КвалификаторыСтроки = "Строка"; //все влезло

Чтобы сделать строку фиксированной нужно указать второй параметр в конструкторе КвалификаторыСтроки:

КвалСтр = Новый КвалификаторыСтроки(5, ДопустимаяДлина.Фиксированная);
СтроковыйТип = Новый ОписаниеТипов("Строка", КвалСтр);

ТЗСтроки = Новый ТаблицаЗначений;
ТЗСтроки.Колонки.Добавить("КвалификаторыСтроки", СтроковыйТип);

СтрТабл = ТЗСтроки.Добавить();
СтрТабл.КвалификаторыСтроки = "Стр"; //было добавлено 2 пробела "Стр "

СтрТабл = ТЗСтроки.Добавить();
СтрТабл.КвалификаторыСтроки = "Строка"; //влезло только Строк

В этом случае в первой строке было добавлено 2 пробела в конце строки, чтобы ее длина была равна 5.

Квалификаторы даты

Для даты можно указать части даты:

- Дата и время
- Только дата, без времени
- Только время, без даты

КвалД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
ТипДата = Новый ОписаниеТипов("Дата", КвалД);

ТЗДаты = Новый ТаблицаЗначений;
ТЗДаты.Колонки.Добавить("КвалификаторыДаты", ТипДата);

СтрТабл = ТЗДаты.Добавить();
СтрТабл.КвалификаторыДаты = Дата(2021, 3, 5, 21,0,0); //5 марта 2021 21:00

В данном примере в строке будет полная дата со временем 5 марта 2021 года , время 21:00.

Если указать только дату, то время будет равно времени по умолчанию: 0 часов, 0 минут, 0 секунд.

КвалД = Новый КвалификаторыДаты(ЧастиДаты.Дата);
ТипДата = Новый ОписаниеТипов("Дата", КвалД);

ТЗДаты = Новый ТаблицаЗначений;
ТЗДаты.Колонки.Добавить("КвалификаторыДаты", ТипДата);

СтрТабл = ТЗДаты.Добавить();
СтрТабл.КвалификаторыДаты = Дата(2021, 3, 5, 21,0,0); //5 марта 2021 00:00

Если указать только время, то дата будет равна дате по умолчанию: 1 января 1 года.

КвалД = Новый КвалификаторыДаты(ЧастиДаты.Время);
ТипДата = Новый ОписаниеТипов("Дата", КвалД);

ТЗДаты = Новый ТаблицаЗначений;
ТЗДаты.Колонки.Добавить("КвалификаторыДаты", ТипДата);

СтрТабл = ТЗДаты.Добавить();
СтрТабл.КвалификаторыДаты = Дата(2021, 3, 5, 21,0,0); //01.01.01 21:00

Как привести значение к нужному типу

Чтобы привести некоторое значение к нужному типу можно использовать метод ПривестиЗначение:

КвалЧ = Новый КвалификаторыЧисла(15,4);
ЧисловойТип = Новый ОписаниеТипов("Число", КвалЧ);

Пер = 12.345;
ОкрПер = ЧисловойТип.ПривестиЗначение(Пер); //12.35

В данном примере переменная Пер была округлена до двух знаков после запятой.

Данный метод можно использовать чтобы получить значение по умолчанию для типа. Для этого нужно ничего не передавать в параметрах:

КвалЧ = Новый КвалификаторыЧисла(15,2);
ЧисловойТип = Новый ОписаниеТипов("Число", КвалЧ);
ЧислоПоУмолчанию = ЧисловойТип.ПривестиЗначение(); //0

Как проверить входит ли Тип в ОписаниеТипов

Для этого можно воспользоваться методом СодержитТип. Данный метод вернет Истина, если переданный ему в параметрах тип присутствует в описании типов:

КвалЧ = Новый КвалификаторыЧисла(15,2);
ЧисловойТип = Новый ОписаниеТипов("Число", КвалЧ);

ТипЧисло = Тип("Число");
ТипСтрока = Тип("Строка");

ЕстьЧисло = ЧисловойТип.СодержитТип(ТипЧисло);
ЕстьСтрока = ЧисловойТип.СодержитТип(ТипСтрока);

Сообщить(ЕстьЧисло); //Истина
Сообщить(ЕстьСтрока); //Ложь

Как получить все используемые типы из описания типов

Для этого предназначен метод Типы, который вернет массив всех используемых типов:

СоставнойТип = Новый ОписаниеТипов("Булево, Строка, Дата");

ВсеТипы = СоставнойТип.Типы();

В переменной ВсеТипы будет массив с тремя элементами типа Тип: Булево, Строка и Дата.

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up