Приёмка материалов на объект в ERPNext: Purchase Receipt, склад стройплощадки и списание на проект
Чтобы принять материалы на объект в ERPNext, оформите Purchase Receipt на склад объекта, перемещайте со склада базы через Stock Entry Material Transfer и списывайте на проект Material Issue. Так остаток площадки виден отдельно, а затраты ложатся на Project. Ниже порядок, допуски и ограничения.
Как принять материалы на объект в ERPNext: Purchase Receipt по шагам
Приёмка материалов оформляется документом Purchase Receipt. Он фиксирует физический приход, двигает остатки на складе и записывает проводку в Stock Ledger. Счёт поставщика и долг перед ним — другая история, её отражает Purchase Invoice. Для компании, которая ведёт учёт по схеме ERPNext под ключ, я всегда разделяю эти два документа: приёмку делает человек, который видит груз, а счёт вводит тот, кто отвечает за расчёты. Так ошибка в количестве не смешивается с ошибкой в сумме.
Приёмку удобнее создавать не с нуля, а из проведённого заказа поставщику: система подтянет позиции, количества и цены. Тогда связь «заказано, принято, оплачено» сохраняется, а в заказе виден процент принятого. В карточке прихода вам нужны четыре вещи: поставщик, номер накладной поставщика в поле Supplier Delivery Note, склад приёмки и проект. В строках позиций поле Warehouse (в интерфейсе Accepted Warehouse) задаёт, куда приходит материал, а поле Project связывает строку с объектом. Если в заголовке указать склад в Accepted Warehouse документа, он подставится во все строки сразу.
Статус приёмки виден в списке: у Purchase Receipt в версии 15 есть значения Draft, To Bill, Partly Billed, Completed, Return, Return Issued, Cancelled и Closed. Пока счёт не введён, приход висит как To Bill. Это нормально и даже полезно: в списке видно, что материал принят, а счёт ещё не пришёл. Руководителю проекта достаточно открыть список приходов с фильтром «To Bill», чтобы увидеть неоформленные счета.
| Документ | Что отражает | Двигает остатки | Двигает долг перед поставщиком | |---|---|---|---| | Purchase Order | Заказ и цены | нет | нет | | Purchase Receipt | Физический приход на склад | да | нет (до счёта) | | Purchase Invoice | Счёт поставщика | только с Update Stock | да | В таблице смысл простой: остатки двигает приёмка, долг двигает счёт. Ловушка с Update Stock такая. Если счёт создан из приёмки (строки ссылаются на Purchase Receipt), в v15 система сама не даст включить Update Stock и выдаст ошибку «Stock Update Not Allowed». А вот если бухгалтер ввёл счёт с нуля, без ссылки на приёмку, и включил Update Stock, остаток задвоится: оба документа сделают приход. Поэтому счёт всегда создаётся из приёмки.
- Откройте проведённый заказ поставщику и создайте из него Purchase Receipt.
- Впишите номер накладной поставщика в Supplier Delivery Note.
- Проверьте склад приёмки: это склад объекта, а не центральный склад.
- Сверьте принятое количество с фактическим, при необходимости разделите на принятое и отклонённое.
- Укажите проект в строках и проведите документ.
Склад на каждый объект: дерево Warehouse и транзитный склад
Остатки по объектам видны только тогда, когда у каждого объекта есть свой склад. В ERPNext склады образуют дерево: групповой склад (Is Group) содержит дочерние. Я строю такую иерархию: «Объекты» как группа, внутри неё «Объект 001», «Объект 002», а на крупном объекте ещё и «Площадка монтажа». Центральный склад (база, бытовка, арендованное помещение) живёт отдельно, вне группы «Объекты». При непрерывном учёте (Perpetual Inventory) склад принадлежит организации Company и привязан к счёту учёта запасов, поэтому организацию в складе указывайте сразу, без неё запись не пройдёт.
Отдельная история — транзит. В карточке склада есть поле Warehouse Type, и значение Transit отмечает склад «в пути». В организации (Company) предусмотрено поле Default In-Transit Warehouse, где выбирается склад по умолчанию. Один транзитный склад на организацию обычно хватает. Он нужен, чтобы материал, который уехал с базы, но ещё не принят на объекте, не пропадал из отчётов и не числился на объекте раньше времени.
Название склада должно быть понятно прорабу. «Склад Объект 001» лучше, чем «WH-1», потому что прораб выбирает склад на телефоне, а выбор из списка с десятком похожих кодов — источник ошибок. Если пользователь видит только свой объект, список складов для него сокращается: это делается через User Permission на Warehouse, подробный разбор ограничения доступа по проектам и складам вынесен в отдельную статью ветки про ERPNext.
Одно ограничение стоит запомнить. Дерево складов хорошо для учёта «где лежит материал», но оно ничего не знает о смете. Остатки показывают, что есть на складе, и не показывают, сколько по смете ещё положено. Для контроля по объёмам нужна другая связка: бюджет или спецификация договора, и это отдельный разговор. Здесь мы говорим именно про физику склада.
Передача с центрального склада на объект: Material Transfer и Add to Transit
Материал с базы на объект перевозится документом Stock Entry с типом Material Transfer. В нём заполняются склад-источник (Source Warehouse) и склад-получатель (Target Warehouse). Главная ошибка начинающих: сразу списать материал с центрального склада типом Material Issue. Формально это сработает, но вы потеряете контроль остатка на площадке: система решит, что материал израсходован, хотя он лежит в бытовке и ждёт монтажа. Через месяц инвентаризация объекта покажет «излишки», которых система не видит.
Опция Add to Transit включает двухшаговую передачу. По исходникам ERPNext версии 15 флажок доступен только при типе Material Transfer и пока документ не создан из исходящего. Целевой склад при этом должен иметь тип Transit в той же организации, иначе проведение остановит проверка. Первый документ отправляет материал на транзитный склад, а второй создаётся из первого и фиксирует получение на объекте. У второго документа есть поле «Stock Entry (Outward GIT)» со ссылкой на исходящий. Пока приёмка не оформлена, в отчётах материал виден в пути, а не на остатках объекта.
Практический вывод для небольшой фирмы: транзит нужен не всегда. Если база и объект в одном городе и разъезд занимает час, двух шагов может быть много, и я делаю прямой Material Transfer. Если привозят через сутки-двое или передача идёт между объектами, транзит окупается: в системе сразу видно, что 60 мешков вышли с базы и не доехали. Статус заявки на материалы (Material Request) при этом тоже меняется: в коде проведения Stock Entry для передачи в пути выставляется статус «In Transit», а после получения «Completed».
Если вам нужна автоматизация приёмки сканером штрихкода, то сходные вопросы разобраны в материале про ТСД на складе, а про обмен накладными с поставщиками в электронном виде — в статье про EDI-обмен накладными. Это соседние темы: в ERPNext работа со сканером и ЭДО подключается отдельно.
Списание на проект: Material Issue, Expense Account и Project
Расход материала на объекте оформляется Stock Entry с типом Material Issue. Склад-источник — склад объекта, а в заголовке документа указывается проект. Если в организации включён непрерывный учёт, в строках нужен счёт расходов: поле Expense Account (на экране Difference Account). Без него проведение остановит проверка, и система попросит указать счёт или задать счёт корректировки запасов по умолчанию для организации. Я заранее завожу отдельный счёт «Материалы на объектах» и ставлю его по умолчанию, чтобы прорабу не приходилось выбирать.
Связь списания с проектом работает не только в отчётах. В коде проведения Stock Entry после проведения вызывается пересчёт стоимости в проекте: в карточке Project обновляется поле total_consumed_material_cost. Поэтому валовая маржа проекта собирается из нескольких источников: работы, закупки напрямую на проект и списанные материалы. Это то, что руководитель видит по объекту без таблиц в Excel. При этом нужно помнить, что стоимость списания определяется методом оценки запаса (FIFO или скользящая средняя), и о нём отдельный разбор есть среди статей про ERPNext.
Для проверки остатка перед заявкой в ERPNext есть Quick Stock Balance. Это одиночный документ, где вы выбираете склад и позицию и сразу видите количество и стоимость. Я показываю его прорабам первым: нажал, увидел, что на объекте осталось 40 мешков, и не заказал лишнего. Это экономит звонки снабженцу и спорные заявки.
| Способ | Остаток площадки | Привязка затрат к Project | Когда использовать | |---|---|---|---| | Material Issue сразу с центрального склада | неизвестен | да, но без контроля площадки | почти никогда | | Material Transfer на склад объекта, затем Material Issue | виден | да | основной сценарий | | Прямой приход Purchase Receipt на склад объекта, затем Material Issue | виден | да | поставка прямо на площадку | Последний вариант самый короткий: если поставщик везёт материал прямо на объект, приёмку можно оформлять сразу на склад объекта и обойтись без передачи.
Частичная приёмка, брак и допуск перебора
Поставки на стройку редко приходят идеально. В Purchase Receipt для каждой строки есть три количества: Received Quantity (получено), Accepted Quantity (принято) и Rejected Quantity (отклонено). Если приехало 100 мешков, а 5 из них порваны, вводите получено 100, отклонено 5, принято 95. Принятые встают на склад приёмки, а отклонённые уходят на отдельный склад брака, который задаётся в поле Rejected Warehouse. Это даёт два плюса: остаток объекта не засоряется негодным материалом, а у снабженца остаётся документ для претензии поставщику.
Теперь о перебое. Бывает, что поставщик привёз больше заказанного: упаковка кратна, довезли «с запасом». В ERPNext это регулируется допуском Over Delivery/Receipt Allowance (%). Он есть в Stock Settings и может быть переопределён на позиции. Рядом настраивается роль в поле Role Allowed to Over Deliver/Receive: пользователи с такой ролью могут принимать сверх допуска, остальных система остановит. Для прораба я оставляю допуск небольшим и без роли исключения, а сверх этого принимает руководитель. Это простой барьер от случайного «принял на глаз».
Хочу предупредить о версиях. В документации к версии 16 встречается настройка допуска на перебор заказа (Over Order Allowance), а в коде версии 15 отдельного поля под неё я не нашёл. Допуск на приёмку и допуск на выставление счёта живут отдельно: счёт ограничивает Over Billing Allowance в Accounts Settings, и его не стоит путать с приёмкой. Перед внедрением откройте настройки своей версии и сверьте названия полей.
И ещё одна деталь о возвратах. Если вы приняли материал и позже вернули его поставщику, оформляется возврат (Purchase Receipt с признаком Is Return), а не удаление прихода. Он уменьшает остаток и сохраняет историю. Эту привычку нужно привить всем: проведённый документ не правят задним числом, а создают встречный.
Разбор: «Наливной Стандарт» принимает смеси на трёх объектах
Условный пример: подрядчик по устройству полов «Наливной Стандарт», 8 рабочих мест, три активных объекта. Сухие смеси закупаются партиями в мешках, часть везут прямо на площадку, часть на базу. До внедрения остатки по объектам знал только прораб, а снабженец заказывал «по звонку». Числа в разборе условные и нужны, чтобы показать ход настройки, а не для обещаний результата.
Склады завели такие: центральный «База», группа «Объекты» с тремя дочерними складами и один транзитный. Допуск на приёмку в Stock Settings поставили небольшой (условно 2 %), роль для приёмки сверх допуска дали руководителю проектов. Поставка на объект 2 пришла в количестве 120 мешков при заказе 120: четыре мешка оказались с порванной упаковкой. Прораб оформил приёмку 116 принятых и 4 отклонённых со складом брака, и снабженец сразу получил документ для претензии. Затем на объект 2 со склада «База» передали ещё 60 мешков через Material Transfer с Add to Transit: пока машина ехала, 60 мешков числились в пути.
В течение недели прораб списывал расход Material Issue на проект, указывая объект. Остаток склада объекта он проверял через Quick Stock Balance перед созданием заявки. По итогам недели руководитель открыл карточку проекта и увидел, что списанные материалы попали в затраты объекта. Проблем две: снабженец сначала ввёл счёт поставщика с нуля с флажком Update Stock и получил задвоение остатка, потом отменил лишний документ и закрепил правило «счёт только из приёмки», и пришлось обучить прорабов не списывать «напрямую с базы». На демостенде по запросу покажу этот сценарий вживую.
Что этот сценарий не закрывает
Приёмка через Purchase Receipt не знает о смете. Система не остановит, если прораб принял материала больше, чем заложено по объёму работ: допуск Over Receipt Allowance сравнивает принятое с заказом, а не со сметой. Контроль по смете — отдельная настройка: бюджет по проекту или собственный контроль по спецификации договора, и о его границах нужно говорить отдельно. Не путайте их, иначе в отчёте перерасход будет выглядеть как нормальная приёмка.
Второе ограничение — связь. Приёмку на объекте оформляют на телефоне или ноутбуке, и без интернета ERPNext из коробки не работает офлайн. Если связь на площадке нестабильна, процесс должен допускать приёмку на бумаге с последующим вводом, и сроки ввода нужно закрепить в регламенте. Третье ограничение — оценка. Остатки по объектам верны ровно настолько, насколько дисциплинированно оформляются передачи и списания: в моей практике основная причина расхождений не программа, а привычка «взять со склада без документа».
Для складов с партиями и серийными номерами нужен строгий учёт: отрицательные остатки по партиям в v15 регулируются отдельным флажком Allow Negative Stock for Batch, и его лучше держать выключенным. Об этом лучше прочитать отдельно в материале про партии и штрихкоды ветки ERPNext. Если же вы выбираете систему учёта в целом, а не только схему приёмки, полезен обзор выбора системы учёта на Linux, где ERPNext рассмотрен рядом с другими вариантами.
Частые вопросы
Как оприходовать материалы на склад объекта в ERPNext?
Оформите Purchase Receipt: лучше из проведённого заказа поставщику, чтобы подтянулись позиции и цены. В поле склада приёмки выберите склад объекта из дерева Warehouse и укажите проект. Документ двигает остатки и пишет проводки в Stock Ledger. Финансовое обязательство перед поставщиком отражает отдельный Purchase Invoice.
Чем Purchase Receipt отличается от Purchase Invoice?
Purchase Receipt фиксирует физический приход на склад и двигает остатки, Purchase Invoice отражает счёт поставщика и долг перед ним. Приход можно создать и из счёта через флажок Update Stock. Если счёт сделан из приёмки, v15 не даст включить флажок; если счёт введён с нуля и флажок включён, остатки задвоятся. Выберите один путь прихода и закрепите его в регламенте.
Как принять часть партии и отбраковать остальное?
В строке Purchase Receipt укажите получено 100, отклонено 5, принято 95. Принятое количество встанет на склад приёмки, отклонённое уйдёт на склад, указанный в Rejected Warehouse. Так остаток объекта не засоряется негодным материалом, а у снабженца остаётся документ для претензии поставщику.
Можно ли списывать материалы на проект сразу с центрального склада?
Технически можно через Material Issue, но тогда пропадает контроль остатков на площадке: система считает материал израсходованным, хотя он лежит на объекте. Правильнее передать его на склад объекта через Material Transfer и списать по факту расхода уже со склада объекта с указанием проекта.
Что значит Add to Transit в перемещении материалов?
Флажок включает двухшаговую передачу: первый Stock Entry отправляет материал на склад типа Transit, второй создаётся из первого и фиксирует получение на объекте. Пока второго документа нет, материал виден в отчётах как находящийся в пути. Флажок доступен только для типа Material Transfer.
Может ли прораб принять больше, чем заказано?
Только в пределах допуска Over Delivery/Receipt Allowance, который задаётся в Stock Settings и может быть переопределён на позиции. Сверх допуска принять могут пользователи с ролью из поля Role Allowed to Over Deliver/Receive. Остальным система выдаст ошибку и документ не проведёт.
Источники
- Исходники ERPNext v15: Stock Settings — Проверены поля over_delivery_receipt_allowance (Over Delivery/Receipt Allowance, %) и role_allowed_to_over_deliver_receive. https://github.com/frappe/erpnext/blob/version-15/erpnext/stock/doctype/stock_settings/stock_settings.json
- Исходники ERPNext v15: Purchase Receipt и Purchase Receipt Item — Проверены поля received_qty, qty (Accepted Quantity), rejected_qty, warehouse, rejected_warehouse, project, supplier_delivery_note и набор статусов. https://github.com/frappe/erpnext/blob/version-15/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
- Исходники ERPNext v15: Stock Entry — Проверены Add to Transit (только Material Transfer), проверка склада типа Transit, outgoing_stock_entry, статусы Material Request In Transit и Completed, обновление стоимости в проекте, обязательный счёт при непрерывном учёте. https://github.com/frappe/erpnext/blob/version-15/erpnext/stock/doctype/stock_entry/stock_entry.py
- Исходники ERPNext v15: Company, Warehouse, Project — Проверены default_in_transit_warehouse, тип склада Transit, поле total_consumed_material_cost в Project, документ Quick Stock Balance. https://github.com/frappe/erpnext/tree/version-15/erpnext/stock/doctype/quick_stock_balance
