В 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;

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

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

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

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

  • при сравнении на равенство по четкому совпадению типа и значения, приведение не производится
  • сравнение на > или < (на больше-меньше) допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)

 

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

Женщина побеждает как реклама: повторяя одно и то же.

— Янина Ипохорская