Очень часто возникает необходимость где-то задать перечисление типов. Например, это может быть колонка таблицы значений, в которой могут содержаться значения разных типов. Для создания списка типов используется общий объект Описание типов 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 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009