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 документа).
- Используйте СУБКОНТО для бухгалтерских счетов — это даст аналитику по контрагентам, товарам, сотрудникам.
- Для взаиморасчётов НЕ включайте контроль остатков, если допускается переплата (отрицательный долг).
- Один документ может формировать несколько движений — и в разные журналы, и в один журнал несколько раз.
- При изменении документа старые движения автоматически удаляются и создаются новые (перезапись). Не нужно писать логику для сторно.
- Не храните в журналах то, что можно вычислить из документов — журналы для скорости, а не для архивации.