3ERP

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

07. Журналы и движения

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

Журналы — это таблицы для хранения учётных данных: остатков, оборотов, взаиморасчётов. В отличие от документов, журналы не редактируются вручную — они заполняются автоматически при проведении документов через механизм ДВИЖЕНИЙ.

Ключевые понятия:

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

Зачем нужны журналы:

  • Быстрый расчёт остатков (не нужно суммировать все документы каждый раз)
  • Контроль отрицательных остатков
  • Аналитика и отчёты
  • Бухгалтерские проводки

7.2. Структура журнала

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

Системные поля, добавляемые автоматически к каждому журналу:

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

7.3. Движения в документах

Типы движений:

ТипКлючевое словоЗнак _typeЭффектКогда использовать
ПриходПРИХОД+1Увеличивает ресурсПоступление товаров, начисление зарплаты
РасходРАСХОД-1Уменьшает ресурсОтгрузка, списание, выплата
Бухгалтерская проводкаДЕБЕТ ... КРЕДИТ ...0 (особый)Двойная записьБухгалтерский учёт

Синтаксис движений:

ДВИЖЕНИЕ ИмяЖурнала ПРИХОД 
    ПОЛЯ ПолеЖурнала = ПолеДокумента,
          ДругоеПоле = ТабличнаяЧасть.Колонка

ДВИЖЕНИЕ Проводки ДЕБЕТ 10 КРЕДИТ 60
    ПОЛЯ Сумма = СуммаДокумента,
          СубконтоДт1 = Номенклатура

7.4. Контроль отрицательных остатков

ЖУРНАЛ ОстаткиЗапчастей
    КОНТРОЛЬ_ОСТАТКОВ ДА
    ...
КОНЕЦ

При попытке провести документ с РАСХОД, если остаток становится отрицательным — проведение блокируется с ошибкой.

Ручная проверка остатков (если контроль отключён):

ПРОЦЕДУРА ПроверитьОстатки
    ВЫЧИСЛИТЬ Запрос = "
        SELECT SUM(_type * Количество) as Остаток
        FROM Журнал_ОстаткиЗапчастей
        WHERE Номенклатура = " + Товар + "
        AND Склад = " + Склад + "
    "
    ВЫЧИСЛИТЬ Результат = ЗАПРОС(Запрос)
    ...
КОНЕЦ_ПРОЦЕДУРЫ

7.5. Бухгалтерские проводки

План счетов:

ПЛАН_СЧЕТОВ Хозрасчетный
    СЧЕТ 10 "Материалы" СУБКОНТО Номенклатура
    СЧЕТ 60 "Расчеты с поставщиками" СУБКОНТО Контрагенты
    СЧЕТ 62 "Расчеты с покупателями" СУБКОНТО Клиенты
    СЧЕТ 90 "Продажи" СУБКОНТО Номенклатура
КОНЕЦ

Журнал проводок:

ЖУРНАЛ Проводки ПО_ПЛАНУ Хозрасчетный
    ИЗМЕРЕНИЕ Дата ДАТАВРЕМЯ
    ИЗМЕРЕНИЕ Номер СТРОКА
    ИЗМЕРЕНИЕ Документ СТРОКА
    РЕСУРС Сумма ЧИСЛО
    СУБКОНТО СубконтоДт1
    СУБКОНТО СубконтоКт1
КОНЕЦ

7.6. Расчёт остатков и оборотов

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

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'

7.7. Полные примеры

Пример 1: Складской учёт с контролем остатков

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

ДОКУМЕНТ ПоступлениеТоваров
    ДВИЖЕНИЕ СкладскиеОстатки ПРИХОД 
        ПОЛЯ Склад = Склад,
              Товар = Товары.Номенклатура,
              Количество = Товары.Количество,
              Сумма = Товары.Сумма
КОНЕЦ

ДОКУМЕНТ ОтгрузкаТоваров
    ДВИЖЕНИЕ СкладскиеОстатки РАСХОД 
        ПОЛЯ Склад = Склад,
              Товар = Товары.Номенклатура,
              Количество = Товары.Количество,
              Сумма = Товары.Цена * Товары.Количество
КОНЕЦ

Пример 2: Взаиморасчёты с клиентами (без контроля остатков)

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

ДОКУМЕНТ Реализация
    ДВИЖЕНИЕ ВзаиморасчетыСКлиентами ПРИХОД 
        ПОЛЯ Клиент = Клиент,
              Сумма = ИтогоСумма
КОНЕЦ

ДОКУМЕНТ ОплатаОтКлиента
    ДВИЖЕНИЕ ВзаиморасчетыСКлиентами РАСХОД 
        ПОЛЯ Клиент = Клиент,
              Сумма = СуммаОплаты
КОНЕЦ

7.8. Best Practices

  • Всегда включайте КОНТРОЛЬ_ОСТАТКОВ ДА для складских журналов — это защитит от ошибок учёта.
  • Правильно выбирайте измерения: включайте всё, по чему будете делать отчёты. Не включайте уникальные значения (например, ID документа).
  • Используйте СУБКОНТО для бухгалтерских счетов — это даст аналитику по контрагентам, товарам, сотрудникам.
  • Для взаиморасчётов НЕ включайте контроль остатков, если допускается переплата (отрицательный долг).
  • Один документ может формировать несколько движений — и в разные журналы, и в один журнал несколько раз.
  • При изменении документа старые движения автоматически удаляются и создаются новые (перезапись). Не нужно писать логику для сторно.
  • Не храните в журналах то, что можно вычислить из документов — журналы для скорости, а не для архивации.
3559 | 0 | 3559 | 381 | 195 | 62