Система типов данных
Система типов данных 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”: “это строка” } |