Купили коробками, списываем штуками: единицы измерения и возвраты в ERPNext без путаницы на складе
Закупку в коробках и списание в штуках в ERPNext настраивают в карточке Item: складская единица плюс таблица коэффициентов UOM Conversion Factor. Возврат оформляют отдельными документами: Purchase Return, Credit Note с Update Stock или обратным Stock Entry. Ниже настройки, ловушки и условный пример со склада плитки.
Как закупать в одних единицах, а хранить в других: UOM Conversion Factor
Склад ведут в одной единице, а покупают в другой почти везде: плитку — коробками, а считают метрами, кабель — бухтами, а отпускают метрами, саморезы — упаковками, а выдают штуками. Если система этого не умеет, кладовщик пересчитывает на калькуляторе, и ошибки накапливаются. В решении на ERPNext я решаю это на уровне карточки номенклатуры и не пишу ни строки кода: единицы и коэффициенты настраиваются штатно.
Устройство такое. В карточке Item задаётся складская единица (поле stock_uom), в которой система хранит остатки и ведёт складскую книгу Stock Ledger. Рядом есть закупочная (purchase_uom) и продажная (sales_uom) единицы, а в таблице uoms (дочерний DocType UOM Conversion Detail) для каждой дополнительной единицы указан коэффициент пересчёта. По коду version-15 в этой таблице обязательна сама единица, а для складской единицы коэффициент строго равен 1: при другом значении система выдаст ошибку. Пример: складская единица Nos (штуки), дополнительная Box с коэффициентом 12 — то есть 1 коробка равна 12 штукам.
Что происходит в документах. В заказе поставщику вы выбираете единицу Box и количество 10, система берёт коэффициент из карточки и считает складское количество: 120 штук. В складской книге остаток появляется именно в штуках. Когда прораб получает материал по заявке и списывает его на объект документом Stock Entry с типом Material Issue, он работает уже в штуках: например, списывает на объект 36 штук из 120, то есть три коробки, не думая о коробках. Это и есть то, что нужно: снабженец оперирует тем, что видит в счёте поставщика, а склад и объект — тем, что можно пересчитать руками.
Важное условие порядка. Складскую единицу меняют только до первых движений. Код version-15 прямо запрещает менять stock_uom у номенклатуры, по которой уже есть записи складской книги: сообщение гласит, что для другой единицы придётся создать новую номенклатуру. Поэтому единицу выбирайте до загрузки остатков и подумайте дважды: плитка в квадратных метрах или в штуках? Правильный выбор — та единица, в которой вы будете списывать и считать остаток на объекте, а не та, в которой выставлен счёт.
- Складская единица (stock_uom): в чём хранится остаток и ведётся складская книга
- Закупочная и продажная единицы (purchase_uom, sales_uom): в чём заказывают и продают
- Таблица коэффициентов (uoms): сколько складских единиц в одной дополнительной
- Для самой складской единицы коэффициент всегда равен 1
Где в документах ERPNext видна закупочная единица, а где складская
В строке заказа поставщику есть несколько связанных полей: количество и единица закупки (qty, uom), коэффициент пересчёта (conversion_factor), складская единица (stock_uom) и количество в ней (stock_qty). Складское количество и единица в описании поля помечены как обязательные и вычисляются системой, а коэффициент подтягивается из карточки номенклатуры. Если закупочная единица совпадает со складской, коэффициент равен единице и вы ничего не замечаете.
Таблица показывает, где какую единицу видит каждая роль. Она же — текстовая версия схемы «одна позиция, две единицы» ниже (числа условные). | Документ | В какой единице количество | Кто смотрит | |---|---|---| | Заявка (Material Request) | в единице строки заявки | прораб | | Заказ поставщику (Purchase Order) | закупочная, например Box | снабженец | | Приёмка (Purchase Receipt) | закупочная, плюс складское количество | кладовщик | | Складская книга (Stock Ledger) | только складская, например Nos | кладовщик, бухгалтер | | Списание на объект (Material Issue) | складская | прораб |
Два флага в настройках склада регулируют строгость. Первый — «Allow UOM with Conversion Rate Defined in Item» (по описанию в коде: если включить, система разрешает выбирать в закупках и продажах только те единицы, коэффициент которых задан в карточке номенклатуры). Я включаю его всегда: так сотрудник не выберет случайную единицу и не получит неожиданный пересчёт. Второй флаг мы обсудим в следующем разделе.
Типичная жалоба «в приёмке 8, а на складе 96» — не ошибка системы, а разные единицы в разных строках одной цепочки. Смотрите колонку единицы и коэффициент: если коэффициент 12, а вы ожидали 1, значит, в карточке стоит дополнительная единица, и документ считает по ней. Это самая частая причина вопросов к кладовщику в первую неделю после запуска.
Что делать, если коэффициент неточный: ручная правка количества на складе
Коэффициент хорош, пока он точный. Но в коробке бывает 11 или 13 штук, в мешке затирки — 24,5 килограмма вместо 25, а в бухте кабеля — 303 метра вместо 305. Если жёстко пересчитывать по коэффициенту, складской остаток начнёт расходиться с реальным, и разница вылезет на инвентаризации.
Для этого в Stock Settings есть две опции: «Allow to Edit Stock UOM Qty for Purchase Documents» и такая же для продаж (поля allow_to_edit_stock_uom_qty_for_purchase и allow_to_edit_stock_uom_qty_for_sales; по умолчанию обе выключены). Если включить опцию для закупок, кладовщик при приёмке сможет вручную поправить складское количество в строке и не менять коэффициент для всей номенклатуры. Количество в закупочной единице при этом остаётся прежним, а коэффициент в этой строке система пересчитывает сама как складское количество, делённое на закупочное: пришло 10 коробок, в штуках записано 118, потому что две коробки оказались неполными, и в строке будет коэффициент 11,8, а в карточке номенклатуры останется 12.
Мой подход к опции осторожный. Она размывает контроль: любой, кто видит поле, может «подогнать» остаток. Поэтому я включаю её только для закупок, а не для продаж, ограничиваю правами роли кладовщика и фиксирую в регламенте: правка допустима только с пометкой в комментарии документа. Если расхождения систематические (всегда на две штуки меньше), правильное решение — поменять коэффициент в карточке, а не править каждую приёмку.
Есть и третий путь для россыпных материалов: вообще не использовать коробку как единицу учёта, а закупать в штуках, указывая в описании «упаковка 12 шт». Он проще, но теряет удобство: снабженец не видит, сколько коробок заказал. Выбирайте по тому, что для вашей компании важнее: простота склада или удобство снабжения.
Возврат от покупателя или излишков с объекта: Credit Note и галочка Update Stock
Возвраты — три разных сюжета с тремя разными документами, и их часто путают. Первый: покупатель вернул товар. В ERPNext это документ Sales Invoice с признаком возврата (в описании поля is_return у него значение Is Return (Credit Note)) или возврат по накладной Delivery Note. По документации, из проведённого счёта создаётся «Return / Credit Note», количества вводятся отрицательными, а чекбокс Update Stock включают только тогда, когда товар физически возвращается именно через этот документ. Если вернули по отдельной накладной, Update Stock отключают, иначе остаток увеличится дважды.
Второй сюжет — возврат поставщику. Документация описывает два пути: из проведённой приёмки (Create, Purchase Return) или из счёта поставщика (Return / Debit Note). В первом случае при проведении система уменьшает остаток на складе по цене исходной приёмки, и у приёмки обновляется поле возвращённого количества; при полном возврате статус приёмки становится Return Issued, а если по приёмке уже полностью выставлен счёт поставщика (fully billed), статус остаётся Completed. Во втором случае дебетовая нота меняет склад, только если в ней включён Update Stock. Такое же правило, как у покупателя: товар должен идти через один документ, а не через два.
Третий сюжет — излишки на объекте. Прораб заказал с запасом и хочет вернуть остаток на центральный склад. Деньги тут не движутся, поэтому нужен не возврат, а обратное перемещение: документ Stock Entry с типом Material Transfer со склада объекта на центральный. Остаток объекта уменьшается, центрального растёт, а поставщик и счёт не участвуют. Путаница возникает, когда сотрудники оформляют это как возврат поставщику, и тогда по бухгалтерии получается долг, которого нет.
Схема выбора в виде таблицы: | Кто вернул | Документ | Что меняется | |---|---|---| | Покупатель | Sales Invoice: Return / Credit Note, при необходимости Update Stock | дебиторка уменьшается, склад растёт при включённом Update Stock | | Мы поставщику | Purchase Return по приёмке или Debit Note по счёту | склад уменьшается, кредиторка уменьшается | | Объект на склад | Stock Entry: Material Transfer | склад объекта уменьшается, центральный растёт |
Как «Керамика Север Опт» учла плитку в коробках и квадратных метрах на 24 рабочих места
Условный пример: оптовый поставщик отделочных материалов «Керамика Север Опт», 24 рабочих места. Плитку закупали коробками, продавали квадратными метрами, остатки на складе кладовщики считали штуками, и три сотрудника держали у себя три таблицы пересчёта. Затирку покупали мешками, продавали килограммами; профиль — упаковками, продавали штуками. Числа в примере иллюстративны.
Мы завели для каждой группы номенклатуры схему единиц. Для плитки складская единица — квадратный метр, закупочная — коробка с коэффициентом 1,44 (в одной коробке 1,44 м²), продажная — квадратный метр. Для затирки складская — килограмм, закупочная — мешок с коэффициентом 25. Для профиля складская — штука, закупочная — упаковка с коэффициентом 10. Флаг «Allow UOM with Conversion Rate Defined in Item» включили, чтобы никто не выбрал единицу вне таблицы.
Ручную правку складского количества включили только для закупок и только роли старшего кладовщика: у затирки реальный вес мешка отличался от паспортного. Возвраты от покупателей пошли через Credit Note с включённым Update Stock, если товар приезжал на склад, а возвраты поставщику — через Purchase Return по приёмке. С излишками из торговых точек работали через Material Transfer.
Что осталось под вопросом, о чём мы предупредили заказчика. Скидки поставщиков считались за коробку, а не за квадратный метр, и для нескольких позиций цену в закупочной и складской единицах пришлось сверять вручную. Кроме того, мы заложили проверку на стенде: закупка в альтернативной единице с коэффициентом не 1:1 может давать расхождение суммы в контроле бюджета, и этот сценарий мы прогнали отдельно на тестовой заявке. Посмотреть настройку на демо-данных можно на демостенде erp-demo.itfresh.ru по запросу.
Где ломается учёт единиц: бухты кабеля, бюджет и альтернативная единица
Первое место — бухты кабеля. Закупка в бухтах и списание в метрах настраивается тем же коэффициентом, но бухта на практике не равна паспортной длине: 305 метров по паспорту, 301 по факту, а остаток после монтажа — обрезок, который не пересчитывается в бухты. Поэтому для кабеля я всегда держу складскую единицу «метр», разрешаю правку складского количества при приёмке и провожу инвентаризацию чаще, чем для твёрдых материалов. Закупку кабеля в бухтах и списание в метрах через коэффициент я рекомендую проверять на стенде до запуска: остаток-обрезок и правка количества при приёмке ведут себя по-разному в разных сборках.
Второе — бюджет. Контроль бюджета сравнивает с лимитом сумму документа, а сумма строится из количества, коэффициента и цены за единицу; если цену ввели за штуку, а количество в коробках, сумма в бюджете может разойтись с суммой заказа. Это не подтверждённый факт, а пункт проверки: если вы используете Budget, прогоните тестовую заявку в коробках и убедитесь, что сумма в бюджете совпадает с суммой заказа.
Третье — единицы после начала работы. Раз складская единица закрыта для изменения после первых проводок, ошибку выбора единицы нельзя исправить обычной правкой карточки: придётся заводить новую номенклатуру и переносить остатки. Дешевле проверить на пилоте, чем исправлять на боевой базе.
Четвёртое — отчёты. В отчётах по складу количество показывается в складской единице, а в закупочных документах — в закупочной, и директор, привыкший к коробкам, будет путаться. Я выношу в сводку обе колонки или добавляю пояснение «в штуках». О ТСД и обмене с 1С, где единицы тоже важны, у нас есть статья ТСД на складе и интеграция с 1С, а о том, как выглядит склад в другой системе, — кейс по Odoo, CRM и складу в оптовой торговле. Когда ERPNext для склада не подходит: если вам нужна сложная работа с адресным хранением и сканерами «из коробки», сравните системы на пилоте, а не по описаниям.
Частые вопросы
Как в ERPNext закупить товар коробками, а списывать штуками?
В карточке Item задайте складскую единицу (stock_uom), например Nos, и в таблице UOM Conversion Detail добавьте Box с коэффициентом 12. В заказе поставщику выберите Box, а Stock Ledger будет вестись в штуках автоматически. Для складской единицы коэффициент всегда равен 1.
Что делать, если коэффициент пересчёта неточный?
В Stock Settings есть опции Allow to Edit Stock UOM Qty для закупок и для продаж, по умолчанию выключенные. Если включить первую, кладовщик при приёмке вручную поправит складское количество. Используйте осторожно: ограничьте права и требуйте комментарий, а при систематических расхождениях лучше изменить коэффициент.
Как вернуть поставщику часть материалов в ERPNext?
Из проведённой приёмки выберите Create, Purchase Return или оформите Return / Debit Note по счёту поставщика. Приёмка уменьшит остаток по цене исходного поступления, а дебетовая нота меняет склад только при включённом Update Stock. Проверьте поведение на тестовых данных своей версии.
Как оформить возврат от покупателя в ERPNext?
Из проведённого Sales Invoice создайте Return / Credit Note, введите отрицательные количества и включите Update Stock, только если товар возвращается физически через этот документ. Если возврат уже оформлен накладной, Update Stock отключают, иначе остаток увеличится дважды, а долг покупателя уменьшится.
Можно ли вернуть излишки с объекта на центральный склад?
Да, обратным перемещением: документ Stock Entry с типом Material Transfer со склада объекта на центральный. Остаток объекта уменьшается, центрального растёт, поставщик и счёт в операции не участвуют. Возвратом поставщику это оформлять не нужно, иначе в учёте появится несуществующий долг.
Источники
- GitHub frappe/erpnext — Item, UOM Conversion Detail, Stock Settings (version-15) — Поля stock_uom, purchase_uom, sales_uom, uoms; флаги allow_to_edit_stock_uom_qty_*, allow_uom_with_conversion_rate_defined_in_item; проверено 01.10.2026: https://github.com/frappe/erpnext/blob/version-15/erpnext/stock/doctype/stock_settings/stock_settings.json
- GitHub frappe/erpnext — item.py (version-15) — Коэффициент складской единицы равен 1; запрет смены stock_uom после проводок; проверено 01.10.2026: https://github.com/frappe/erpnext/blob/version-15/erpnext/stock/doctype/item/item.py
- GitHub frappe/erpnext — Purchase Order Item (version-15) — Поля qty, uom, conversion_factor, stock_uom, stock_qty, проверено 01.10.2026: https://github.com/frappe/erpnext/blob/version-15/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json
- ERPNext Docs — Purchase Return — Возврат по приёмке и Debit Note, Update Stock, статус Return Issued, проверено 01.10.2026: https://docs.frappe.io/erpnext/purchase-return
- ERPNext Docs — Sales Return — Return / Credit Note, Update Stock, влияние на дебиторку, проверено 01.10.2026: https://docs.frappe.io/erpnext/sales-return
