Поделитесь в соцсетях

Квалификаторы и ОписаниеТипов

Квалификаторы и ОписаниеТипов

 

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

 

Что такое Квалификаторы?


В программе 1с есть простые типы: Число, Дата, Строка. Но иногда необходимо уточнить, что переменная будет не просто числом, а например, числом длиной 17 символов и 2 разрядами после запятой, при этом неотрицательное. В простых типах это сделать невозможно т.к. тип не имеет соответствующих свойств. Для таких случаев и нужен объект «Квалификатор». Это именно объект, создается он методом «Новый»:

КЧ17_2 = Новый КвалификаторыЧисла(17,2);



У каждого простого типа есть свой квалификатор. Соответственно есть также квалификаторы:

КС17 = Новый КвалификаторыСтроки(17);

КД_Время = Новый КвалификаторыДаты(ЧастиДаты.Время);

 

Что такое Описание типов?


ОписаниеТипов – это объект который содержит массив допустимых типов, но т.к. в массиве нет возможности указать дополнительные данные, то отдельно для простых типов(Число, Строка, Дата) можно уточнить свойства квалификаторами. 

У описания типов есть 4 параметра, первый – обязательный, в нем указываются типы. Остальные – необязательные, в них указываются квалификаторы. Для создания описания типов существует несколько вариантов.

Указание типа строкой:

ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.Склад");



Можно указать несколько типов разделяя их запятыми:

ОписаниеТипов = Новый ОписаниеТипов("СправочникСсылка.Склад, ДокументСсылка.РеализацияТоваровУслуг");



Можно передать массив типов:

МассивТипов = Новый Массив.
МассивТипов.Добавить(Тип("СправочникСсылка.Склад"));
МассивТипов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг"));
МассивТипов.Добавить(Тип("Строка"));
КС17 = Новый КвалификаторыСтроки(17);
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,,КС17);



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

P.S.

Итак, подытожим. Описание типов это объект, который используется, чтобы ограничить ввод данных, а квалификаторы это объекты которые дополняют ограничения для простых типов. Квалификаторов в описании типов 3 по одному для простых типов: Число, Строка, Дата. Соответственно у объекта ОписаниеТипов при создании 4 параметра: - первый массив доступных типов, последние три - квалификаторы. Т.к. квалификатор для каждого простого типа передается один, то соответственно нельзя назначить более одного ограничения для простого типа. Указывать все квалификаторы не обязательно, поэтому в вышеприведенном примере мы передали квалификатор для Строки(3 параметр), а для Числа(2-ой) и Даты(4-ый) не передавали.

Для наглядности проведу аналогию объекта ОписаниеТипов с ограничением типов в реквизитах, по сути это один механизм.

Аналогия ОписаниеТипов и ограничения типов реквизита

При редактировании типов данных реквизита мы увидим окно указанное выше. Что же здесь происходит, по сути, отметив флажками, типы мы добавим их в массив доступных типов объекта ОписаниеТипов для этого реквизита. А если тип простой, то внизу можно дополнительно его ограничить, указав значения, при этом будет создан квалификатор. Здесь наглядно видно, что нет смысла передавать несколько квалификаторов для одного простого типа, просто следует указать описание максимально возможного значения. Например, если могут записываться как число "12,258" так и "235,5",то необходимо установить Длина: 6, Точность:3.

Небольшое пояснение: ограничение для числа действует не как обрезание строки. Т.е. если было число "25,12" то указав квалификатор Длина:2, Точность:1 получится число "9,9", а не "5,1".

Чтобы было проще запомнить объект ОписаниеТипов, приведу следующую картинку:

 

ОписаниеТипов визуальное представление

3 ключевых момента работы с описанием типов:

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

Комментарии   

+4 #5 3dHelg 30.06.2015 12:54
Крутяк! 8)
Очень помогла статейка в реализации универсального документа..
Автору респект! 8)
+3 #4 Игорь__ 23.07.2013 10:27
Спасибо за статью!
Очень понятно и ничего лишнего!
Успехов!
+3 #3 Administrator 11.03.2012 14:48
Здравствуйте, Mik.
Постарался разъяснить вопросы в статье, смотрите раздел P.S.
+1 #2 Guest 11.03.2012 07:02
Прежде всего спасибо за информацию. И есть несколько вопросов.
1. ОписаниеТипов - что это? как правильно называть?
метод,
функция,
или что то еще?
2. Сколько у него (допустим метода) всего бывает параметров и какие они бывают?
3. В последнем примере
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,,КС17), КС17 - передан в третьем параметре. Почему именно в третьем? Что может быть передано во втором параметре?
4. Правильно я понимаю что в одном
ОписаниеТипов который состоит из нескольких типов может быть только одна строка, одно число, и одна дата
5. Если в описании типов будет и число и строка и дата (и еще другие типы), как на все простые типы передать квалификаторы?

Прошу прошения, вопросов много, но думаю многим будет интересно.
+1 #1 Guest 29.02.2012 15:42
За квалификаторы отдельное спасибо !

Недостаточно прав для комментирования