3.4 Типы данных системы
В любом языке программирования существует свой набор типов данных. Их обычно классифицируют по таким признакам, как набор допустимых операций, вид сохраняемой информации (числовые типы, строковые и т.д.), диапазон возможных значений.
Во встроенном языке программирования системы 1С: Предприятие типы данных принято подразделять на базовые и агрегатные.
Уже из самого названия становится ясно, что базовые величины носят универсальный характер, могут применяться как в составе объектов агрегатных типов, так и самостоятельно. Работа с ними проще, чем с агрегатными типами.
Программные объекты, имеющие один из агрегатных типов, имеют значительно более сложную структуру и в то же самое время они более узко специализированы, т.е. предназначены для хранения информации об объектах конфигурации определенного типа. Это становится совершенно очевидно, если сравнить, к примеру, текстовую строку и справочник товаров. В строке может содержаться самый разный набор символов, над ним могут выполниться всего несколько операций. А вот в элементе справочника товаров может храниться только информация о товарах, все его реквизиты, скорее всего, имеют свои ограничения по длине и смысловую направленность, над элементом справочника может выполняться множество действий.
Базовые типы данных
К базовым типам данных в 1С относятся:
числовой. В данных числового типа разрешается хранить любое десятичное число. Над ним определены арифметические и логические операции, операция присваивания. Явных ограничений на диапазон возможных значений переменных числового типа не накладывается;
строковый. В переменных строкового типа имеется возможность представления произвольной последовательности символов (возможна и пустая строка), применимы операции объединения, логического сравнения, присваивания;
дата. В переменных типа «дата» можно сохранять календарные даты в формате ДД.ММ.ГГ или ДД.ММ.ГГГГ (здесь ДД – это две цифры для представления дня месяца, ММ – номер месяца, ГГ (ГГГГ) – последние цифры (или полный номер) года).
Для базовых типов данных существует возможность автоматического преобразования типов при вычислении выражений или Выполнении операции присваивания. Рассмотрим следующие возможные правила преобразования:
ЧислоСтрока. Строковым преобразованием числа является его полное представление с учетом десятичной точки. Например, если у нас было число -34.5, то в результате такого преобразования мы получим строку "-34.5".
ДатаСтрока. При преобразовании даты в строку сохраняются разделители в виде точек. Если имелась дата '23.12.02', то она перейдет в строку "23.12.02".
СтрокаЧисло. При попытке (это не всегда возможно) преобразовать строку в число анализируются ее первые символы. Если они являются десятичными цифрами, то они и используются в качестве результата преобразования, иначе результирующее число равно 0. Например, строка "5 рублей" перейдет в число 5, а строка "пять рублей" – в 0.
ДатаЧисло. В результате мы получаем численное представление даты.
СтрокаДата. Ситуация несколько напоминает преобразование строки в число. Если в начале строки есть нечто, что могло бы быть строковым представлением даты в формате ДД.ММ.ГГ, то преобразование будет осуществлено. В противном случае мы получим нулевую дату '00.00.00'.
ЧислоДата. При этом вновь делается попытка проинтерпретировать целую часть числа как численное представление даты Оно и будет результатом; если же число отрицательно, то получится нулевая дата ('00.00.00').
Важно отметить, что, помимо рассмотренного неявного преобразования типов в языке, есть возможность преобразовывать типы явно. Для этого служат специальные системные функции Число(<выражение>), Строка(<выражение>) и Дата(<выражение>). В результате их применения значения выражений, переданных в качестве параметров функций, преобразуются в заданные типы (см. листинг 3.1).
Листинг 3.1. Пример программного модуля
//Объявляем явно переменные модуля, т.е. начинается раздел
//описания переменных
Перем a;
Перем б;
Перем стр;
Перем дат;
//Основная программа, (процедур и функций нет)
а=5; б=6; //Присваиваем значения двум переменным.
//Они, соответственно, приобретают числовой тип
стр = "Это строка"; //присваиваем значение переменной стр
дат = '01.01.03'; //то же соответственно
а = стр; //теперь а = "Это строка" и имеет строковый тип
б = 1*дат; //после выполнения этой строки б = 2452641
б = "" + б; //теперь б = "2452641", обратите
//внимание на способ приведения типа
стр = стр + " " + дат; //стр = "Это строка 01.01.03"
б = 1*стр; //б = 0
дат = Дата(2452640); //дат = '31.12.02'
//Применим специальные функции
а = Число(дат); //а = 2452641
стр = Строка((123+453)/5); //стр = "115.2"
дат = Дата("23.45.ыва"); //дат = ' . . ', т.е.
//преобразование не получилось
//конец программы (модуля)
Выше приведен очень простой пример программного модуля. В нем присутствуют два раздела: описания переменных и основной программы. Но он подробно комментируется, так что все должно быть вполне ясно.
Следует еще раз обратить внимание на важную особенность языка программирования 1С, которая заключается в том, что тип переменных может меняться неявно, т.е. без прямого указания. Это может иногда приводить к ошибкам, которые трудно найти, что требует внимательности, контроля за операциями, которые осуществляются с теми или иными переменными.
Во встроенном языке предусмотрена возможность использования одномерных массивов. Массив объявляется так же, как и обычная скалярная переменная:
Перем Элементы[5]; //объявлен массив из пяти элементов
Массивом называется такой объект данных, который содержит несколько значений, доступ к которым производится по их индексу. Размером массива является число его элементов. Приведенный выше пример массива (вектора). Элементы имеет размер пять элементов.
Обращение к элементам массива, осуществляется посредством указания имени массива и порядкового номера элемента (т.е. индекса). Первый элемент имеет индекс 1. Тип каждого элемента массива определяется исходя из типа присвоенного ему значения. В одном массиве могут содержаться элементы разных типов.
Элементы[1] = 234; //первый элемент - число
Элементы[2] = "второй элемент имеет строковой тип";
Определенным (инициализированным) считается такой массив, в котором для всех элементов заданы значения. Инициализацию элементов массива удобно производить при помощи цикла:
Перем М[10];
Для i = 1 По 10 Цикл
M[i] = 1; //все элементы массива будут равны 1
КонецЦикла;"