Система типов данных
Система типов данных DaJet Script заимствована у платформы 1С:Предприятие 8. Однако, в отличие от неё, DaJet Script - это строго типизированный язык программирования. Такое решение обусловлено тем, что изначально DaJet Script разрабатывался как инструмент тесной интеграции информационных баз, именно платформы 1С:Предприятие 8, между собой. Таким образом DaJet Script, кроме всего прочего, поддерживает такие специфичные для этой платформы типы данных, как “Ссылка” entity
и “СоставнойТип” union
.
Тип данных
union
(составной тип) и его использование реализованы частично!
Только в минимально необходимом для работы с информационными базами 1С:Предприятие 8 объёме.
Объявить переменную типаunion
в коде DaJet Script невозможно!
Таблица типов данных DaJet Script
1С:Предприятие 8 | DaJet Script | C# | MS SQL Server | PostgreSQL |
---|---|---|---|---|
Неопределено | null | null | NULL | NULL |
Булево | boolean | bool | binary(1) | boolean |
Число | number | decimal int long |
numeric int bigint |
numeric integer bigint |
Дата | datetime | DateTime | datetime2 | timestamp without time zone |
Строка | string | string | nchar nvarchar |
mchar mvarchar |
Ссылка | entity | Entity | binary(16) | bytea |
Составной тип | union | Union | Все выше перечисленные |
Все выше перечисленные |
Бинарные данные | binary | byte[] | varbinary | bytea |
Уникальный идентификатор |
uuid | Guid | binary(16) | bytea |
Структура | object | DataObject | UDT | UDT |
Массив | array | List<DataObject> | UDT | UDT |
Тип данных entity
Ссылочные типы данных 1С:Предприятие 8 - это сущности, которые идентифицируются по уникальному ключу, и при помощи этого ключа на них можно ссылаться в свойствах других объектов или на уровне полей таблиц базы данных (первичные и внешние ключи). Например, к таким типам данных относятся справочники и документы. Полезно будет отметить, что ссылочный тип данных полностью соответствует определению Entity (reference object), которое даёт подобным прикладным объектам Эрик Эванс в своей книге “Предметно-ориентированное проектирование”.
Не очевидно, но факт: перечисления 1С:Предприятие 8 являются ссылочным типом данных!
entity
- это структура данных, которая на уровне СУБД состоит из одного или двух полей. Данная структура является указателем (ссылкой) на конкретный объект в базе данных или его отсутствие - “пустая ссылка”. Специальным значением является “нулевая ссылка”, то есть ссылка, которая ни на что не указывает - её значение не определенно.
“Пустая ссылка” всегда строго типизированна, то есть указывает на отсутствие объекта какого-то определённого типа, например, “Справочник.Номенклатура”.
Структура хранения ссылок на уровне СУБД
Поле СУБД | MS SQL Server | PostgreSQL | C# | DaJet Script | Примечание |
---|---|---|---|---|---|
_TRef | binary(4) | bytea | int | number | Код типа ссылки В определённых случаях может отсутствовать для оптимизации (уменьшения) объёма хранимых данных |
_RRef | binary(16) | bytea | Guid | uuid | Значение ссылки Обязательное поле |
Тип данных union
union
- это структура данных, которая на уровне СУБД состоит из нескольких полей. Количество и наличие тех или иных полей зависит от ситуации и настроек конфигурации (прикладного решения) 1С:Предприятие 8. Данный тип данных является реализацией дискриминированного объединения (tagged union). Аналогичен типу данных std::variant
в C++17.
Структура хранения составных типов на уровне СУБД
Поле СУБД | 1С:Предприятие 8 | MS SQL Server | PostgreSQL | DaJet Script | C# |
---|---|---|---|---|---|
_TYPE | Дискриминатор | binary(1) | bytea | number | byte |
_L | Булево | binary(1) | boolean | boolean | bool |
_N | Число | numeric | numeric | number | decimal int |
_T | Дата | datetime2 | timestamp without time zone |
datetime | DateTime |
_S | Строка | nchar nvarchar |
mchar mvarchar |
string | string |
_RTRef | Число | binary(4) | bytea | number | int |
_RRRef | Ссылка | binary(16) | bytea | uuid | Guid |
Типы данных object
и array
Типы данных object
и array
необходимы для универсализации системы типов данных среды выполнения DaJet Script, чтобы “подружить” между собой узлы интеграции, имеющие различные системы типов данных. Для 1С:Предприятие 8 наиболее близкими аналогами будут “Структура” и “Массив” соответственно.
object
моделирует любую структуру данных, в том числе иерархическую, может иметь вложенные объекты. В основном используется для отображения записей таблиц баз данных, объектов JSON, сообщений RabbitMQ и тому подобного. В общем и целом аналогичен одноимённому типу данных JavaScript. Набор свойств объекта и их тип выводится из контекста первого использования object
в скрипте DaJet.
array
- это динамический массив значений типа object
. В основном используется для получения и дальнейшей обработки результатов выборки данных из таблиц баз данных в оперативной памяти среды выполнения скрипта DaJet.
Значения типов
object
иarray
могут быть преобразованы в формат JSON (текст в кодировке UTF-8) при помощи предопределённой функцииJSON(<value>)
среды выполнения DaJet Script.
Полезные ссылки и дополнительные материалы
Анатомия метаданных 1С:Предприятие 8
Размещение данных 1С:Предприятия 8
Размещение данных 1С:Предприятия 8 (таблицы и поля)
Особенности хранения составных типов данных 1С:Предприятия 8
Литералы и кодирование в формат JSON
1С:Предприятие 8 | DaJet Script | Литерал | JSON |
---|---|---|---|
Неопределено | null | null | null |
Булево | boolean | true или false | true или false |
Число | number | 1 или 1.0 | 1 или 1.0 |
Дата | datetime | “2024-01-01T00:00:00” | “2024-01-01T00:00:00” |
Строка | string | ‘это строка’ | “это строка” |
Бинарные данные | binary | 0xFF | BASE64 |
Уникальный идентификатор |
uuid | ‘35521B2A-B154-4CA5-97FC-AE5733C4E473’ | “35521B2A-B154-4CA5-97FC-AE5733C4E473” |
Ссылка | entity | {123:35521B2A-B154-4CA5-97FC-AE5733C4E473} | “{123:35521B2A-B154-4CA5-97FC-AE5733C4E473}” |
Составной тип | union | нет | { “type”: “string”, “value”: “это строка” } |