16. Синтаксис запросов
В платформе используется SQLite в качестве базы данных. Все запросы в отчётах и в функции ЗАПРОС() выполняются на SQLite.
16.1. Поддерживаемые SQL-конструкции
- SELECT, FROM, WHERE, JOIN, LEFT JOIN, INNER JOIN
- GROUP BY, HAVING, ORDER BY, LIMIT
- Подзапросы (SELECT внутри WHERE или FROM)
- Агрегатные функции: SUM, COUNT, AVG, MIN, MAX
- Функции даты: date(), time(), datetime(), strftime()
16.2. Имена таблиц
Таблицы создаются автоматически на основе имён коллекций и документов:
| Тип объекта | Имя таблицы |
|---|---|
| Коллекция | Название коллекции (как в DSL) |
| Документ | Название документа (как в DSL) |
| Табличная часть | НазваниеДокумента_НазваниеТЧ |
| Регистр (ЖУРНАЛ) | Журнал_НазваниеРегистра |
16.3. Системные поля
У каждого объекта есть системные поля:
id— первичный ключ_posted— статус проведения (для документов, 0/1)_created_at— дата создания записи_updated_at— дата последнего изменения_created_by— ID пользователя, создавшего запись_updated_by— ID пользователя, изменившего запись
16.4. Примеры запросов
Простой SELECT:
SELECT id, Наименование, Телефон FROM Клиенты WHERE СкидкаПроцент > 5 ORDER BY Наименование
JOIN двух таблиц:
SELECT
З.Номер,
К.Наименование as Клиент,
З.ИтогоСумма
FROM ЗаказНаряд З
JOIN Клиенты К ON З.Клиент = К.id
WHERE З.Дата >= '2024-01-01'
Агрегация с GROUP BY:
SELECT
Клиент,
COUNT(id) as КоличествоЗаказов,
SUM(ИтогоСумма) as ОбщаяСумма
FROM ЗаказНаряд
GROUP BY Клиент
HAVING ОбщаяСумма > 100000
Подзапрос:
SELECT * FROM Клиенты
WHERE id IN (
SELECT DISTINCT Клиент FROM ЗаказНаряд
WHERE ИтогоСумма > 100000
)
Запрос к регистру (остатки):
SELECT
Номенклатура,
SUM(_type * Количество) as Остаток
FROM Журнал_ОстаткиЗапчастей
GROUP BY Номенклатура
HAVING Остаток > 0
Функции даты:
-- Заказы за последние 30 дней
SELECT * FROM ЗаказНаряд
WHERE Дата >= date('now', '-30 days')
-- Продажи по месяцам
SELECT
strftime('%Y-%m', Дата) as Месяц,
SUM(ИтогоСумма) as Сумма
FROM ЗаказНаряд
GROUP BY Месяц
16.5. Особенности
- Для регистров используйте
SUM(_type * Ресурс)для расчёта остатка - Для табличных частей имя таблицы =
Документ_ИмяТЧ - Строковые значения должны быть в одинарных кавычках
- SQLite не чувствителен к регистру имён таблиц и полей