В языке «1С:Предприятия» составной (как и любой другой) тип данных указать было нельзя. Набор составных типов можно было задать только на этапе конфигурирования свойств прикладных объектов. Например, реквизиту справочника можно было указать составной тип Строка, Число. Тогда в модуле объекта переменная, соответствующая этому реквизиту, имела составной тип (рис. 2.4):
Рис. 2.4. Составной тип данных у реквизита справочника
Теперь в языке «Элемента» можно указать, что переменная, параметр и т. п. будут принимать значение одного из нескольких типов. Для этого при объявлении им присваивается составной тип. Для задания составного типа используется синтаксис перечисления типов, разделенных символом «|» без пробелов с обеих сторон от вертикальной черты.
Например, чтобы указать, что переменная может принимать значения типов Строка, Число или Булево, ее нужно объявить следующим образом:
пер Переменная1: Строка|Число|Булево = 7
Одним из перечисляемых типов может быть тип Неопределено.
Если в составном типе есть тип Неопределено, то переменная инициализируется значением Неопределено. А если нет типа Неопределено, то тогда обязательно должен быть указан инициализатор переменной (литерал либо выражение, значение которого будет иметь объявляемая переменная). В приведенном выше примере переменная инициализирована значением 7 – литералом типа Число.
Если в составном типе присутствует тип Неопределено, то в списке типов его явно указывать не нужно – вместо него лучше использовать сокращение «?», которое рекомендуется писать:
//Переменная может принимать значения типа Строка или Неопределено
пер Переменная1: Строка?
//Переменная может принимать значения типа Строка, Число или Неопределено
пер Переменная1: Строка|Число|?
Составной тип также может быть указан в качестве типа параметра метода и типа возвращаемого методом значения. Например:
//Объявление метода с параметрами составного типа
метод МойМетод1(Парам1: Число|Строка, Парам2: Число?)
...
;
//Объявление метода, возвращающего значениие составного типа
метод МойМетод2(Парам1: Число, Парам2: Число): Число|Строка
пер Результат = Парам1 + Парам2
возврат Результат
;