Колонки добавить справочник

  • автор:

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

Теги: 1С:Предприятие • Квалификаторы • ОписаниеТипов • ТипыДанных

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

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

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

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

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

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

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

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

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

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

Создает описание типов на основании заданных типов и квалификаторов для типов Число, Строка, Дата.

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

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

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

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

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

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

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

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

Описание типов — это объект, который используется, чтобы ограничить ввод данных, а квалификаторы — это объекты, которые дополняют ограничения для простых типов. Квалификаторов в описании типов три — по одному для каждого простого типа: Число, Строка, Дата.

Для наглядности посмотрим на ограничение типов в реквизитах объекта конфигурации. По сути, это один механизм:

Поиск: 1С:Предприятие • Квалификаторы • Описание типов • Типы данных

Печать (Ctrl+P)

Описание объекта ОписаниеТипов находится в разделе Общие объекты/описание типов значений в синтаксис – помощнике электронной документации платформы

Объект ОписаниеТипов представляет собой объект для управления допустимыми типами значений. В основном предназначен для присвоения в качестве значений соответствующим свойствам других объектов. Набор допустимых типов и квалификаторы примитивных типов задаются при создании объекта. Существуют 2 вида конструктора описания типов:

  • На основании объекта ОписаниеТипов :

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

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

Пример

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

  • На основании типов и квалификаторов :

Новый ОписаниеТипов(<Типы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)

Данный конструктор создает описание типов на основании заданных типов и квалификаторов для типов Число, Строка, Дата.

Пример, составной тип из строки и ссылки на справочник Номенклатуры.

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип(«СправочникСсылка.Номенклатура»));
МассивТипов.Добавить(Тип(«Строка»));
ПараметрыСтроки = Новый КвалификаторыСтроки(20);
ДопустимыеТипы = Новый ОписаниеТипов(МассивТипов, , ПараметрыСтроки);

Методы объекта описания типа

  • ПривестиЗначение
  • СодержитТип
  • Типы

Метод ПривестиЗначение

ПривестиЗначение(<Значение>)

Формирует значение на основании описания типа и переданного значения.

Например 1. В форме расположено табличное поле Товары, в котором для ячейки колонки Номенклатура определено событие НачалоВыбора, процедура обработчик которого приведена в следующем примере :

Процедура ТоварыНоменклатураНачалоВыбора(Элемент,СтандартнаяОбработка)

ТипСтр = «СправочникСсылка.Номенклатура»;
Элемент.ОграничениеТипа = Новый ОписаниеТипов(ТипСтр);
Значение = Элемент.Значение;
Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Значение);
Элемент.ВыбиратьТип = Ложь;
КонецПроцедуры

Пример 2. В форме есть таблица отбора с тремя колонками : ВидОтбора (строка) , ВидСравнения (перечисление) и ПодборЗначние ( составной тип значения) и нужно установить пустое значение по типу из списка доступных полей отбора компоновщика настройки:

ДоступноеПоле = КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти(ИмяЭлементаОтбора);
Если ДоступноеПоле <> Неопределено Тогда
ОписаниеТипа = Новый ОписаниеТипов(ДоступноеПоле.Тип);
Значение =ОписаниеТипа.ПривестиЗначение();
Нов = ТабличноеПолеВидыОтбора.Добавить();
Нов.ВидОтбора=Строка(Параметр.ЛевоеЗначение);
Нов.ПодборЗначения= Значение;
Нов.ВидСравнения= Параметр.ВидСравнения;
Нов.Пометка =ложь;
КонецЕсли;

Метод СодержитТип

СодержитТип(<Тип>)

Определяет, входит ли указанный тип в используемые данным объектом типы. Возвращает значение Истина если указанный тип входит в используемые типы; Ложь – в противном случае

Пример:

ПроверяемыйТип = Тип(«Строка»);
Если ДопустимыеТипы.СодержитТип(ПроверяемыйТип) Тогда
Сообщить(«Описание типов содержит тип » + ПроверяемыйТип);
Иначе
Сообщить(«Описание типов не содержит тип » + ПроверяемыйТип);
КонецЕсли;

Метод Типы

Типы()

Получает типы, используемые в объекте описания типов. Возвращает массив значений типа Тип, состоящий из используемых типов.

Пример заполнение списка типов документов по указанному элементу формы . Параметр Элемент (Элемент формы) имеет составной тип :

СписокТиповДокументов = Новый СписокЗначений;
Для каждого ТипДокумента Из Элемент.ТипЗначения.Типы() Цикл
ДокументСсылка = Новый(ТипДокумента);
Имя = ДокументСсылка.Метаданные().Имя;
Синоним = ДокументСсылка.Метаданные().Синоним;
СписокТиповДокументов.Добавить(Имя, Синоним);
КонецЦикла;

См. также:

  • Особенности использования объекта “ОписаниеТипов”
  • Анализ типов значений

Когда требуется работать со списком типов – используется объект ОписаниеТипов (см. «Получение доступных типов», «Работа с типами реквизитов в метаданных конфигурации», «Указать фильтр типов в фильтре»).

Получить список типов

Предположим, что Вы получили готовый объект ОписаниеТипов:

  • ЭлементыФормы.ИмяПоля.ТипЗначения
  • ДокументСсылка.Метаданные().Реквизиты.ИмяРеквизита.Тип
  • СписокЗначений.ДоступныеЗначения

Получить список типов из объекта ОписаниеТипов можно с помощью метода .Типы(), например:
Для каждого ДоступныйТип из ЭлементыФормы.ИмяПоля.ТипЗначения Цикл
Если ДоступныйТип = Тип(«Строка») Тогда
//…
КонецЕсли;
КонецЦикла;

Проверка наличия типа в списке

Приведение значения к разрешенному типу

Если у Вас имеется значение (например, переменная со значением) и имеется фильтр типов значений в объекте ОписаниеТипов, то возможно привести значение к тем ограничениям типов, которые указаны в объекте ОписаниеТипов.

Например:
ЗначениеРазрешенногоТипа = ОписаниеТиповФильтр.ПривестиЗначение( НекотороеЗначение );

Создание описания типов

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

Если в списке разрешенных типов присутствует только один тип, то в качестве параметра при создании объекта ОписаниеТипов указывается просто название типа (см. выше «Работа с типами»).

Например:
ФильтрТипов = Новый ОписаниеТипов(«Строка»);

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

Например:

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

При добавлении базовых типов (строка, число, дата) Вы указываете имя типа. Но ведь базовые типы имеют настройки – длину строки, разрядность числа, дата и время или только дата.

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

Настройки числа

Создадим настройку для целого числа с 5 цифрами: 99 999
НастройкаТипаЧисла = Новый КвалификаторыЧисла(5,0);

Создадим настройку для дробного числа с 5 цифрами до запятой и 2 цифрами после запятой: 99 999,99
НастройкаТипаЧисла = Новый КвалификаторыЧисла(5,2);

Настройка для того же числа, что и выше, и дополнительно – неотрицательного:

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Настройки строки

Если необходимо использовать строку неограниченной длины – настройку указывать не надо.

Настройка для строки длиной 100 символов:
НастройкаТипаСтроки = Новый КвалификаторыСтроки(100);

Настройка для строки длиной 100 символов, значения которой дополняются до 100 символов пробелами:

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Настройки даты

Если необходимо использовать дату и время – настройку указывать не надо.

Настройка для только даты, без времени (значение будет содержать время 00:00:00):
НастройкаТипаДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата);

Настройка для только времени, без даты (значение будет содержать дату 01.01.0001):
НастройкаТипаДаты = Новый КвалификаторыДаты(ЧастиДаты.Время);

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

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