Расход и перемещение — бизнес-логика
Расход списывает товар со склада без факта продажи клиенту: перемещение
между собственными складами, отгрузка компании без выручки, списание,
возврат поставщику. Отличается от продажи именно этим — деньги на расходе
не фиксируются как выручка (см. Продажа для
противоположного случая, у обоих общая обработка).
Товар берётся только с реального остатка
Строка расхода — это не свободная позиция, а «срез» конкретной партии
склада на момент выбора: товар, количество и цена партии фиксируются в
строке документа. Списать больше, чем есть на складе, нельзя — эта
проверка обязательна и при выборе строки, и повторно при обработке. Если
партия изменилась между выбором и обработкой (кто-то успел провести другой
документ) — обработка отклоняется, а не проводится «по старым данным».
Если по товару не хватает количества в одной партии — расход автоматически
разбирается по нескольким партиям по принципу «старое сначала», с
подтверждением пользователя.
Что происходит при обработке
Для каждой строки:
- Проверка партии-источника — товар и цена должны совпадать с тем, что
зафиксировано в строке (иначе обработка отклоняется). - Проверка количества — партии должно хватать.
- Списание с партии: количество уменьшается; если остаток дошёл до нуля —
партия помечается неактивной, но не удаляется (партии не удаляются
никогда, только исчерпываются — это и есть история). - Снятие резерва — если по этому товару было мягкое резервирование под
заказ или документ, резерв уменьшается на отгруженное количество (не
больше, чем было). - Если указан склад-приёмник — это перемещение: на приёмном складе
создаётся (или пополняется) новая партия. Себестоимость на приёмном
складе становится равной цене отгрузки исходной строки — то есть
перемещение может «поднять» или «опустить» учётную цену товара на новом
складе. Приходная сторона перемещения создаётся автоматически, уже в
обработанном состоянии — пользователь не вводит её отдельно.
Почему цена может измениться при перемещении: себестоимость — не
абстрактное число, а свойство конкретной партии. Партия физически
переезжает на другой склад с той ценой, по которой её отгрузили, — если
эта цена отличается от исходной (например, включает долю расходов на
доставку), партия на новом складе законно стоит дороже или дешевле.
Резерв снимается не всегда
Снятие резерва при расходе выполняется, только если указан партнёр
(«отгрузка в кредит» конкретному контрагенту) — обычное перемещение между
собственными складами резервы не трогает, потому что оно никому не
«обещано». Для продажи резерв снимается всегда (см.
Продажа).
Долг или оплата
Та же логика, что и на приходе, только в обратную сторону: если указан
партнёр, а счёт не указан — сумма документа вычитается из его баланса,
образуется задолженность («отгрузка в кредит»). Если указан счёт — при
обработке автоматически создаётся денежный документ-двойник на сумму
расхода, деньги считаются полученными сразу, баланс контрагента не
корректируется.
Отчётность: перемещения считаются отдельно
Обычные реестры прихода/расхода намеренно исключают перемещения — товар не
покинул компанию, значит для отчёта «сколько ушло насовсем» это не
событие. Для перемещений — отдельный реестр, по одному складу за раз, с
колонками «отдал» и «принял» (один склад может быть и источником, и
приёмником в разных документах периода).