3ERP

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

04. Журналы

4.1. Общая концепция

Журналы (в синтаксисе DSL — ЖУРНАЛ) предназначены для хранения учётных данных: остатков, оборотов, взаиморасчётов. Заполняются автоматически при проведении документов через механизм ДВИЖЕНИЕ.

Ключевые особенности:

  • Журналы не редактируются вручную — только через движения документов
  • Позволяют быстро рассчитывать остатки и обороты
  • Поддерживают контроль отрицательных остатков
  • Каждое движение имеет тип: ПРИХОД (увеличение) или РАСХОД (уменьшение)

4.2. Синтаксис журнала

ЖУРНАЛ ИмяЖурнала
    КОНТРОЛЬ_ОСТАТКОВ ДА|НЕТ
    
    ИЗМЕРЕНИЕ ИмяИзмерения ТИП_ДАННЫХ
    ИЗМЕРЕНИЕ ИмяДругогоИзмерения ТИП_ДАННЫХ
    
    РЕСУРС ИмяРесурса ТИП_ДАННЫХ
    РЕСУРС ИмяДругогоРесурса ТИП_ДАННЫХ
    
    КНОПКА "Записать" ЗАПИСАТЬ
    КНОПКА "Отмена" ЗАКРЫТЬ
КОНЕЦ

4.3. Пример журнала остатков

ЖУРНАЛ ОстаткиЗапчастей
    КОНТРОЛЬ_ОСТАТКОВ ДА
    
    ИЗМЕРЕНИЕ Организация ВЫБОР Организации
    ИЗМЕРЕНИЕ Склад ВЫБОР Склады
    ИЗМЕРЕНИЕ Номенклатура ВЫБОР Номенклатура
    
    РЕСУРС Количество ЧИСЛО
    РЕСУРС Сумма ЧИСЛО
    
    КНОПКА "Записать" ЗАПИСАТЬ
    КНОПКА "Отмена" ЗАКРЫТЬ
КОНЕЦ

4.4. Системные поля журналов

Платформа автоматически добавляет к каждому журналу следующие поля:

Поле Тип Описание
Дата ДАТАВРЕМЯ Дата движения (из документа)
Номер СТРОКА Номер документа
Документ СТРОКА Строковое представление документа
parent_id ЧИСЛО ID документа-источника
parent_type СТРОКА Тип документа (например, "ПоступлениеЗапчастей")
_type ЧИСЛО 1 = ПРИХОД, -1 = РАСХОД

4.5. Контроль остатков

При КОНТРОЛЬ_ОСТАТКОВ ДА платформа блокирует проведение документа с расходом, если остаток становится отрицательным.

При КОНТРОЛЬ_ОСТАТКОВ НЕТ допускается отрицательный остаток (используется для взаиморасчётов, где возможна переплата).

4.6. Движения по журналу в документах

В документах движения описываются блоком ДВИЖЕНИЕ:

ДВИЖЕНИЕ ОстаткиЗапчастей ПРИХОД 
    ПОЛЯ Организация = Организация,
          Склад = Склад,
          Номенклатура = Запчасти.Номенклатура,
          Количество = Запчасти.Количество,
          Сумма = Запчасти.Сумма

4.7. Расчёт остатков (SQL-запросы)

Текущий остаток:

SELECT 
    Номенклатура,
    SUM(_type * Количество) as Остаток
FROM Журнал_ОстаткиЗапчастей
GROUP BY Номенклатура

Обороты за период:

SELECT 
    SUM(CASE WHEN _type = 1 THEN Количество ELSE 0 END) as Приход,
    SUM(CASE WHEN _type = -1 THEN Количество ELSE 0 END) as Расход
FROM Журнал_ОстаткиЗапчастей
WHERE Дата BETWEEN '2024-01-01' AND '2024-12-31'

Остатки на конкретную дату:

SELECT 
    Номенклатура,
    SUM(_type * Количество) as Остаток
FROM Журнал_ОстаткиЗапчастей
WHERE Дата <= '2024-12-31'
GROUP BY Номенклатура

4.8. Пример журнала взаиморасчётов (без контроля остатков)

ЖУРНАЛ Взаиморасчеты
    КОНТРОЛЬ_ОСТАТКОВ НЕТ   # Допускается переплата (отрицательный долг)
    
    ИЗМЕРЕНИЕ Организация ВЫБОР Организации
    ИЗМЕРЕНИЕ Клиент ВЫБОР Клиенты
    ИЗМЕРЕНИЕ ЗаказНаряд ВЫБОР ЗаказНаряд
    
    РЕСУРС Сумма ЧИСЛО
    
    КНОПКА "Записать" ЗАПИСАТЬ
    КНОПКА "Отмена" ЗАКРЫТЬ
КОНЕЦ

4.9. Best Practices

  • Всегда включайте КОНТРОЛЬ_ОСТАТКОВ ДА для складских журналов — это защитит от ошибок учёта.
  • Правильно выбирайте измерения: включайте в измерения всё, по чему потом будете делать отчёты (склад, товар, организация). Не включайте в измерения то, что всегда уникально (например, ID документа).
  • Для взаиморасчётов НЕ включайте контроль остатков, если допускается переплата (отрицательный долг).
  • Один документ может формировать несколько движений — и в разные журналы, и в один журнал несколько раз.
  • При изменении документа старые движения автоматически удаляются и создаются новые (перезапись). Не нужно писать логику для сторно.
  • Не храните в журналах то, что можно вычислить из документов — журналы для скорости, а не для архивации.
  • Для расчёта остатков всегда используйте SUM(_type * Ресурс) — это учитывает знак движения (приход/расход).
3550 | 0 | 3550 | 372 | 186 | 53