Капитально об программе 1С 8.0-8.3-8.4, 7.7

Типы значений 1С

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

Группы типов данных

Простые типы

Типы-объекты

Объекты из метаданных (прикладные)

Интерфейсные

Связанные с окнами, формами  и элементами форм (полей, надписей, табличных данных и других)

Другие варианты подразделения значений

Задание типов значений

Значение может быть установлено:

Непосредственно

Это_Переменная = "Это строковое значение";

Через создание объекта

Это_Переменная = Новый Цвет;

Через результат вызова системной функции

Это_Переменная = Дата(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;

//ответ на вопрос: тип значения переменной "ЭтоЧисло" является ли типом "Число"
ЭтоБулево = ТипЗнч(ЭтоЧисло) = Тип("Число");
//Первый знак "=" - присвоение
//Второй "=" -  сравнение на равенство

Сам объект «Тип» является вспомогательным и не может быть записан в реквизиты

Сравнение значений

Производится:

 

Более подробно на типах останавливаться не буду, лучше их прочувствовать в реальных задачах или узких примерах