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

Очень часто возникает необходимость где-то задать перечисление типов. Например, это может быть колонка таблицы значений, в которой могут содержаться значения разных типов.  Для создания списка типов используется общий объект Описание типов 1С.

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

ОписаниеЧисла = Новый ОписаниеТипов("Число");

А, для строки, даты и булево — следующее описание типов:

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

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

ОписаниеПеречисление = Новый ОписаниеТипов("ПеречислениеСсылка.ВидРегиона");
ОписаниеСправочник = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
ОписаниеДокумент = Новый ОписаниеТипов("ДокументСсылка.ПродажаТоваров");

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

Описание типа 1С

После того, как мы создали описание типов, этот объект можно использовать, например, при создании таблицы значений.

ОписаниеЧисла = Новый ОписаниеТипов("Число");
ОписаниеСтроки = Новый ОписаниеТипов("Строка");
ОписаниеДокумент = Новый ОписаниеТипов("ДокументСсылка.ПродажаТоваров"); 
	
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("КолонкаЧисло", ОписаниеЧисла);
ТЗ.Колонки.Добавить("КолонкаСтрока", ОписаниеСтроки);
ТЗ.Колонки.Добавить("КолонкаДокумент", ОписаниеДокумент);

Выше показано самое простое использование описания типов.  Для числа, строки и даты мы можем использовать Квалификаторы. Это общие объекты – КвалификаторыЧисла,  КвалификаторыСтроки, КвалификаторыДаты. Они также задаются при помощи конструктора Новый и имеют следующие синтаксисы.

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

Для числа будет следующий синтаксис квалификатора.

Новый КвалификаторыЧисла(<ЧислоРазрядов>, <ЧислоРазрядовДробнойЧасти>, <ДопустимыйЗнак>)

Где: ЧислоРазрядов – общее число разрядов;

ЧислоРазрядовДробнойЧасти – число разрядов после запятой;

ДопустимыйЗнак – системное перечисления (значения Любой, Неотрицательный).

Например, задать неотрицательно число с 6 разрядами и 2 дробными разрядами будет так:

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

Квалификатор строки 1С

Для строки будет следующий синтаксис квалификатора.

Новый КвалификаторыСтроки(<ДлинаСтроки>, <ДопустимаяДлина>)

Где:  ДлинаСтроки – длина задаваемой строки

ДопустимаяДлина – системное перечисление ДопустимаяДлина, которое определяет, будет строка переменная или фиксированная.

Например, задать строку длинной 10 символов фиксированной длины нужно так:

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

Обратите внимание, что КвалификаторСтроки задаем третьим параметром.

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

Для даты будет следующий синтаксис квалификатора.

Новый КвалификаторыДаты(<ЧастиДаты>)

Где ЧастиДаты – системное перечисление, с тремя значениями Время, Дата, ДатаВремя.

Например, задать дату, которая будет иметь формат времени нужно так:

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

Обратите внимание, что КвалификаторДаты задаем третьим параметром.

Общий вариант синтаксиса с использование типов выглядит так:

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

Массив типов в описание типов

Кроме использования одного типа в синтаксисе описания типов, можно использовать массив типов, например, сделаем колонку таблицы значений, у которая может принимать значения примитивных типов Строка, Число, Дата, Булево. Для этого нужно все типы перечислить в массиве, причём типы должны быть не в виде строк, как мы делали ранее, а в виде значений типа Тип.

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));
МассивТипов.Добавить(Тип("Строка"));
МассивТипов.Добавить(Тип("Дата"));
МассивТипов.Добавить(Тип("Булево"));	
КвалификаторЧисла = Новый КвалификаторыЧисла(6,2,ДопустимыйЗнак.Неотрицательный);
КвалификаторСтроки = Новый КвалификаторыСтроки(10,ДопустимаяДлина.Фиксированная);
КвалификаторДаты = Новый КвалификаторыДаты(ЧастиДаты.Время);
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,КвалификаторЧисла,КвалификаторСтроки,КвалификаторДаты);

Также можно «собрать» массив из ссылочных типов, например из справочников:

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

Описание типов на основании описания типов

Выше был рассмотрен один вариант синтаксиса описания типов, на основания какого-то типа (или перечисления типов), но также можно создать описание типа на основании другого описания типов, т.е. дополнить имеющееся описание.

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

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

Теперь нам нужно новое описание типов, в котором будут такие типы как Число, Строка и Дата (тип Булево нам не нужно).

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

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

Где, в качестве первого параметра указывается описание типов, на основании которого создается это описание, а в качестве второго и третьего параметра – добавляемые и вычитаемые типы (могут быть как в виде массивов, так и в виде строк).

Давайте продолжим код выше:

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

В этом код в новое описание типов, мы добавили тип Дата, и вычли тип Булево.

Более подробно о работе с другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

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

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