3ERP

3ERP - простая и бесплатная программа для бухгалтерского и оперативного учёта в учреждениях сферы торговли и услуг, общественного питания, складского хранения, автосервиса, медицины, логистики, производства, управления работами и заявками, поддерживающая до 100 пользователей, на русском языке и полностью бесплатная для 1 пользователя. На сайт (скачать)

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 не чувствителен к регистру имён таблиц и полей
3546 | 0 | 3546 | 368 | 182 | 49