Товар уходит со склада только с номером накладной. Остатка не хватает — отгрузки нет, штуки остаются на месте.
Отгрузить можно, когда есть компания, позиция, количество и номер накладной, и остатка хватает. Иначе решение «не отгружать», склад не меняется. Повтор той же накладной второй раз не списывает. Накладная скачивается только у строки «отгрузить». Пустой остаток — «нет», не ноль.
Часть решения. Отдельно не продаётся.
Входит в «На складе неясно, что лежит». Цена решения 660 000 ₽. Одна эта карточка проблему не закрывает.

Собственнику, у которого товар уезжает со склада и нельзя списать то, чего нет, или отгрузить без накладной.
Один HTML и запуск в один клик. Сервера и ключей нет. Склад остаётся в браузере. В банк и в 1С файл не ходит. Пустой день пишет «отгрузок нет».
Отгрузка — это не «минус в ячейке». Это ответ, можно ли отдать этой компании это количество по этой накладной. Остатка меньше, чем просят — файл пишет «не отгружать», штуки остаются. Номера накладной нет — склад это движение не касается. Та же накладная второй раз ничего не списывает: одна бумага, одно движение.
Собственнику, у которого товар «ушёл», накладной нет, а остаток уже уменьшили. Потом приход догоняют задним числом, и непонятно, это продажа или дыра.
По каждой строке «отгрузить» или «не отгружать» и почему. У строки «отгрузить» скачивается накладная. Пустой день пишет «отгрузок нет», не ноль.
Вечером видно, какая отгрузка прошла по бумаге, а какая осталась желанием. Утром не надо собирать чат «кто что отдал».
Отгрузку воздуха, отгрузку больше остатка и двойное списание одной накладной.
Партии и сроки годности не ведёт. В банк не ходит. Приход за вас не создаёт: не оприходовано — отгружать нечего.

Решение и нехватка на одном экране. Болт уже списан до 6.

Накладная ТН-1. Остаток 6, было 10.

Гайки просят 5, на складе 2. Склад не тронут.

Скачивается только у строки «отгрузить».