В 1С очень много предопределенных типов значений, их можно подразделить на несколько групп.
Группы типов данных
- простые (примитивные) типы
- типы-объекты и их подчиненные
- типы-объекты из метаданных (прикладные типы)
- интерфейсные типы
- прочие типы общего назначения
Простые типы
- Строка (задается значением в кавычках “”)
- Число (Задается десятичным числом)
- Дата (дата и время)
- Булево (Истина,Ложь.
Типы-объекты
- Коллекции значений (Массивы, Структуры, ТаблицыЗначений и другие)
- Интеграционные (Com, файлы, внешние объекты, zip, WS)
- Общего назначения
Объекты из метаданных (прикладные)
- Константы
- Справочники
- Документы
- Перечисления
- Отчеты
- Обработки
- Планы счетов
- Задачи
- Регистры сведений
- Регистры накоплений
- Регистры бухгалтерского учета
- и другие…
Интерфейсные
Связанные с окнами, формами и элементами форм (полей, надписей, табличных данных и других)
Другие варианты подразделения значений
- Значения, которые можно записать в реквизит объекта (в поле информационной базы) и те, которые нельзя
- Объекты, которые можно визуально представить, и те, которые имеют виртуальную сущность
- Типы значений которые, связаны с конфигурацией и ее объектами или работающие обособленно
- Которые могут быть разграничены по правам пользователей- не могут
- Могут достаточно просто преобразовываться – либо требуется вспомогательная конвертация
- Есть свойства и методы – либо отсутствуют
Задание типов значений
Значение может быть установлено:
Непосредственно
Это_Переменная = "Это строковое значение";
Через создание объекта
Это_Переменная = Новый Цвет;
Через результат вызова системной функции
Это_Переменная = Дата(2016,1,1);
Через обращение к свойству объекта
Это_Переменная_Объект_Цвет = Новый Цвет; Это_Переменная = Это_Переменная_Объект_Цвет.Зеленый;
Составные и простые типы
Если не указано специально, то тип значений не ограничивается.
В случае реквизитов объектов метаданных, тип значений задается на этапе конфигурирования из типов доступных к записи (примитивные, ссылки на объекты, хранилище значений), а так же от вида объекта и контекста(среды, места) исполнения. При этом доступно ограничение реквизита одним типом или несколькими. Например, нам необходимо записывать в одно поле, либо значение “строки”, либо “числа”.
Для других объектов, тип реквизитов может остаться не ограниченными (произвольного типа), либо ограничен через специальный тип “ОписаниеТипов“
Например, для простого случая
ОписаниеТипа = Новый ОписаниеТипов("Число,Строка");
Данный объект также используется для ограничения выбора или внесения данных в диалоговых формах
Приведение значений
Производится автоматически при присвоении к реквизиту (свойству) объекта, если данный реквизит не может хранить данное значение
Также при операциях конкатенации, производится к сначала первому слагаемому, при вычитании, если допустимо, ко втором, а затем уже к результату.
Цвет = Новый Цвет(255,0,0); Цвет2 = Новый Цвет("2"+59-Цвет.Красный,0,0); //В данном случае произойдет поэтапно //"2"+59 ="259" //259-255 = 4 //Цвет2 = Новый Цвет(4,0,0);
Такие “сложные” преобразования требуется проводить с осторожностью.
Приведение значений через встроенные функции преобразования
ЭтоБудетЧисло = Число("15"); ЭтоБудетСтрока = Строка(ЭтоБудетЧисло); ЭтоБудетСтрока = Формат(ЭтоБудетЧисло,"");//возможно указание строки форматирования значения ЭтоБудетДата = Дата("201601+ЭтоБудетЧисло);//время будет 00:00:00 //Приведение через объект МожетБытьТолькоЧислом = Новый ОписаниеТипов("Число"); ЭтоБудетЧисло = МожетБытьТолькоЧислом.ПривестиЗначение("12");
Следует обратить внимание, что некоторые преобразования система не сможет сделать, и это вызовет ошибку исполнения, поэтому проверка должна производится разработчиком
ЭтоПрисвоениеНеПроизойет = Дата("12:45:45");
Проверка типов
Сравнение производится через специальные функции ТипЗнч() и Тип().
Первая возвращает значение передаваемого типа, вторая задает тип для проверки
ЭтоЧисло = 15; //ответ на вопрос: тип значения переменной "ЭтоЧисло" является ли типом "Число" ЭтоБулево = ТипЗнч(ЭтоЧисло) = Тип("Число"); //Первый знак "=" - присвоение //Второй "=" - сравнение на равенство
Сам объект “Тип” является вспомогательным и не может быть записан в реквизиты
Сравнение значений
Производится:
- при сравнении на равенство по четкому совпадению типа и значения, приведение не производится
- сравнение на > или < (на больше-меньше) допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
Более подробно на типах останавливаться не буду, лучше их прочувствовать в реальных задачах или узких примерах
Женщина побеждает как реклама: повторяя одно и то же.