ОписаниеТипов используется для описания допустимых типов, которые можно будет использовать в свойствах, например в колонках таблицы значений.
Создание
Для создания объекта ОписаниеТипов можно использовать два вида конструктора. Первый на основании самого типа:
//тип можно указать строкой
СтроковыйТип = Новый ОписаниеТипов("Строка");
СсылочныйТип = Новый ОписаниеТипов("СправочникСсылка.Поставщики");
//для составного типа нужно перечислить типы через запятую
СоставнойТип = Новый ОписаниеТипов("Число, Булево");
//также можно создавать через массив типов
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
СтроковыйТип = Новый ОписаниеТипов(МассивТипов);
//составной тип через массив типов
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
МассивТипов.Добавить(Тип("СправочникСсылка.Поставщики"));
СоставнойТип = Новый ОписаниеТипов(МассивТипов);
Второй на основании уже существующего описания типов, с возможностью добавления новых типов или удаления текущих:
//сначала создадим ОписаниеТипов
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
МассивТипов.Добавить(Тип("СправочникСсылка.Поставщики"));
СоставнойТип = Новый ОписаниеТипов(МассивТипов);
//теперь на основании него создадим новое ОписаниеТипов, добавив тип Число.
//добавляемые типы указываются вторым параметром
//Типы также можно указывать через массив или строкой
НовоеОписание = Новый ОписаниеТипов(СоставнойТип, "Число");
//третьим параметром можно передать типы, которые нужно исключить из
//нового описания типов
НовоеОписание = Новый ОписаниеТипов(НовоеОписание,, "Строка");
Созданный объект описание типов можно присваивать различным свойствам, например для определения типа колонки таблицы значений:
СоставнаяТЗ = Новый ТаблицаЗначений;
СоставнаяТЗ.Колонки.Добавить("Составная", СоставнойТип);
//СоставнойТип - это объект ОписаниеТипов
Квалификаторы
Квалификаторы позволяют конкретизировать тип данных. Указываются в конструкторе при создании объекта ОписаниеТипов.
Квалификаторы числа
Для числа можно указать общее количество разрядов (включая количество разрядов после запятой), количество разрядов после запятой и допустимый знак (любые числа или только положительные):
КвалЧ = Новый КвалификаторыЧисла(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-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки