ERPNext BOM и себестоимость производства 2026 — АйТи Фреш
АйТи Фреш
IT-аутсорсинг и бизнес

Спецификация BOM в ERPNext: как посчитать себестоимость выпуска и не дать ей устареть

Автор: , директор ООО «АйТи-Фреш» · · ~17 мин чтения
Спецификация BOM в ERPNext: сырьё и операции собираются в себестоимость готового изделия
Себестоимость — это сумма сырья и работы, а не одна цифра из таблицы.

Себестоимость в ERPNext считается из спецификации BOM: ставки сырья плюс стоимость операций на рабочих местах, делённые на выход. Это плановая цена, а фактическую даёт Work Order со Stock Entry. Ниже: какие поля BOM влияют на цену, как её пересчитывать, где копится расхождение и как я это настраивал в отеле на 48 рабочих мест.

Что такое BOM в ERPNext и из чего складывается себестоимость изделия

BOM (Bill of Materials) в ERPNext — это рецепт изделия: что и в каком количестве идёт в выпуск, какие операции нужны и на каких рабочих местах. Документ лежит в Manufacturing > Bill of Materials, и в нём есть поле Quantity — сколько единиц изделия получается по этой спецификации. Эта цифра важнее, чем кажется: себестоимость единицы система получает, деля стоимость всего состава на выход. Если в BOM указан выход 24 штуки, а вы поставили 1, цена изделия будет завышена в 24 раза, и ошибка спокойно проживёт полгода. Мы в АйТи-Фреш внедряем ERPNext под ключ, и первая проверка на любом проекте — именно выход в BOM.

Себестоимость в карточке BOM складывается из двух частей: стоимость сырья и полуфабрикатов по их ставкам плюс стоимость операций. В документации блок Costing прямо назван приблизительной стоимостью производства. Я это повторяю каждому клиенту, потому что директор, увидевший в BOM цифру, начинает считать её фактом. Это плановый норматив. Факт появляется только когда проведён выпуск: списаны реальные партии по реальной оценке запасов, а трудозатраты зафиксированы по карточкам работ. Разница между планом и фактом и есть то, за чем нужно следить.

Отсюда простая схема, на которой держится весь материал. BOM даёт норматив. Production Plan и Work Order превращают норматив в задание на выпуск. Stock Entry типа Manufacture проводит реальное движение, и там уже работает та оценка запасов, которую вы выбрали для номенклатуры. О самом выборе метода я писал отдельно, в разборе про FIFO и скользящую среднюю, здесь эту тему не повторяю.

Соседняя тема тоже разобрана отдельно. Общий взгляд на ERPNext как систему для малого цеха есть в статье про открытую ERP для производства. Эта статья уже, она про одну цепочку: спецификация, цена, выпуск, расхождение.

Памятка: Что такое BOM в ERPNext и из чего складывается себестоимость изделия — схема
Памятка: Что такое BOM в ERPNext и из чего складывается себестоимость изделия. Открыть схему в полном размере

Как собрать спецификацию: поля BOM, которые влияют на цену

Создаётся BOM так: выбираете изделие в поле Item, и система сама подтягивает название, единицу измерения, компанию и валюту. Дальше заполняете таблицу Items: сырьё и количество. У каждой строки есть флаг Include Item in Manufacturing. Для настоящего сырья он должен стоять. Снимают его для статей, которые вы хотите видеть в стоимости, но которые не являются складским товаром — например, услуга. Ещё полезные поля строки: Source Warehouse (откуда брать), Scrap percentage (доля потерь) и Default BOM, который подставляется сам, если строка — полуфабрикат с собственной спецификацией. Так получается многоуровневая BOM: у каждого узла своя спецификация, всё вместе — дерево.

Проведённую спецификацию править нельзя, и это правильно: иначе вы бы меняли прошлое задним числом. Если состав изменился, документ отменяют или делают копию и проводят её. Для рабочих версий есть два флага: Is Active (выключить старую спецификацию в пользу альтернативной) и Is Default (какую BOM система подставляет в Work Order по умолчанию). Я советую на каждом проекте завести правило: новая версия рецепта — новая BOM, старая переводится в неактивные. Тогда в истории видно, по какому нормативу выпускали в марте и по какому — в сентябре.

Отдельный раздел — потери и побочные продукты. В блоке Scrap указывается scrap-позиция и количество, у побочного продукта может быть ставка, у отхода — не обязана. Если scrap-позиция совпадает с самим изделием, она становится Process Loss Item, и её количество вычитается из выпуска. В ERPNext v16 таблица Scrap Items заменена на Secondary Items — если вы на обновлении, проверьте, как ведут себя ваши спецификации после перехода с v15 на v16, прежде чем трогать рабочие спецификации. Спецификации с сотнями строк никто не набирает руками, их загружают из таблиц, и как это делается, я разбирал на примере загрузки спецификаций из Excel через импорт данных.

Есть и необязательные флаги, о которых полезно знать заранее. Do Not Explode оставляет полуфабрикат в одной строке и не раскрывает его в таблицу Exploded Items. Is Phantom BOM — по документации такая спецификация ничего не производит, это логическая группировка сырья, состав которой раскрывается при использовании в другой BOM. Флаг появился в свежих версиях, так что проверьте его наличие в своей. Set rate of sub-assembly item based on BOM заставляет брать ставку полуфабриката из его спецификации, а не из его оценки на складе. Для Phantom-позиций ставка всегда берётся из состава.

Проверьте поле Quantity в шапке BOM, прежде чем сравнивать цены. Спецификация на 24 штуки с выходом 1 даёт цену в 24 раза выше, и это самая частая ошибка при первичной загрузке.
Спецификация BOM в ERPNext: как посчитать себестоимость выпуска и не дать ей устареть — схема
Схема к статье. Открыть схему в полном размере

Откуда ERPNext берёт цену материала и как её обновлять

Ставку сырья в BOM определяет поле Rate Of Materials Based On. Вариантов три: Valuation Rate (оценочная ставка из карточки товара), Last Purchase Rate (по последней закупке) и Price List (прайс-лист, то есть записи Item Price). Это ключевое решение для всей себестоимости. Если выбрать прайс-лист, то цена в BOM зависит от того, кто и когда обновил прайс. Если оценочную ставку, она двигается вместе с проводками прихода и методом оценки. Для документации поведение Last Purchase Rate описано кратко, поэтому поймайте его на тестовой базе в своей версии, прежде чем ссылаться на него в регламенте.

Вторая половина вопроса — как цена обновляется. Автоматически она сама в проведённой BOM не меняется: в карточке есть кнопка Update Cost, которая пересчитывает стоимость, если спецификация была проведена до того, как цены обновились. Глобальный вариант — Manufacturing Settings, флаг Update BOM Cost Automatically: по документации система обновляет стоимость спецификаций сама, раз в день. Источник ставки при этом остаётся тем, что вы выбрали: оценка, прайс или последняя закупка. Для цеха, где цены на сырьё скачут, я включаю автообновление всегда, иначе директор утром смотрит вчерашнюю цену изделия.

Для разовых действий есть инструмент BOM Update Tool (Manufacturing > Tools). У него две функции. Replace BOM заменяет спецификацию полуфабриката во всех родительских BOM, где он используется: вы создаёте новую BOM полуфабриката, выбираете Current BOM и New BOM и нажимаете Replace. Работает только для полуфабрикатов, у которых есть собственная спецификация. Вторая кнопка, Update latest price in all BOMs, пересчитывает стоимость всех BOM по свежим ставкам сырья и выполняется фоновым заданием, потому что при большом числе спецификаций это может занять несколько минут.

Сравнение трёх источников цены я свожу в таблицу, которую показываю клиенту на первой встрече: | Источник ставки | Что это | Когда выбирать | |---|---|---| | Valuation Rate | оценочная ставка из карточки товара | есть склад и дисциплина проводок прихода | | Last Purchase Rate | ставка по последней закупке | цены на сырьё часто меняются, нужна «свежая» цена | | Price List | запись Item Price из прайс-листа | цены фиксируются договором или прайсом поставщика | Одинакового правильного ответа нет. Я выбираю оценочную ставку там, где склад ведётся честно, и прайс-лист там, где закупки идут по договорам с фиксированной ценой.

Как в себестоимость попадают операции, рабочие места и труд

Чтобы в цену вошли не только продукты, а и работа, в BOM ставится галочка With Operations. Появляется таблица Operations, и для каждой строки задаются рабочее место (Workstation), Operating Hourly Rate, Operation Time в минутах и Batch Size. Operating Cost система считает сама из этих полей. Для BOM с операциями обязательно поле Transfer Material Against: оно определяет, передаются ли материалы в производство по Work Order целиком или по отдельным Job Card. Типовые наборы операций можно собирать из шаблона Routing, чтобы не вбивать их в каждую спецификацию заново.

Рабочее место (Workstation) в ERPNext — справочник, где описываются статьи затрат: электричество, аренда, расходные материалы и зарплата. Тут же задаются рабочие часы (в том числе по сменам), список выходных и Production Capacity — сколько заданий место выполняет одновременно. Рабочее место нужно для расчёта стоимости операций и планирования загрузки, складом оно не является: остатки сырья ведутся по складам, указанным в BOM и Work Order. Поэтому ставку часа лучше посчитать один раз вместе с бухгалтером и записать, а не угадывать на ходу.

Плановые операции в BOM — это норматив. Фактические трудозатраты фиксирует Job Card: она создаётся из Work Order, привязана к одной операции на одном рабочем месте, в ней есть Time Logs с From Time и To Time (можно нажать Start Job и Complete Job), количество выполненных единиц и таблица Scrap Items для брака. В Work Order итоговая стоимость операций равна Actual Operating Cost плюс Additional Operating Cost, причём фактические значения приходят из Job Card. Поле Additional Operating Cost нужно для расходов, которые нельзя разнести по операциям, например аренды на весь цех. Как именно система превращает время в деньги внутри Job Card, в документации не раскрыто, поэтому проверьте это на тестовом выпуске.

Если же табель на рабочем месте вести нерационально, для многоуровневых спецификаций есть настройка в Manufacturing Settings: Set Operating Cost / Scrape Items From Sub-assemblies. Она добавляет в готовую продукцию стоимость операций и scrap-позиций полуфабрикатов без Job Card. Для малого цеха это часто разумный компромисс. Я предпочитаю начинать без Job Card, а подключать их, когда нормативы стабилизировались и есть человек, который готов отмечать начало и конец операций.

От BOM к выпуску: Production Plan, Work Order и фактическая себестоимость

План выпуска строится в Production Plan (Manufacturing > Production). Поле Get Items From принимает значения Sales Order или Material Request, а кнопка Get Items for Work Order подтягивает только те изделия, у которых есть BOM. Чекбокс Include Exploded Items добавляет сырьё полуфабрикатов, а Consolidate Items объединяет позиции с одинаковой спецификацией. Skip Available Raw Materials вычитает остатки: потребность равна количеству по BOM минус прогнозный остаток. Таблицу потребности можно скачать в Excel кнопкой Download Material Request Plan и передать снабженцу. Контроль перерасхода по нормативу, о котором я рассказывал отдельно, удобно настраивать как раз на этом этапе: см. контроль перерасхода по спецификации.

Work Order создаётся из плана, заказа покупателя или запроса материалов. При выборе изделия подставляется Default BOM, и его можно сменить. Поле Use Multi-Level BOM по умолчанию включено. Склады: Source Warehouse, Work-in-Progress Warehouse, Target Warehouse и Scrap Warehouse; для последних трёх значения по умолчанию задаются в Manufacturing Settings (Default Work In Progress, Finished Goods и Scrap Warehouse), а склад сырья подставляется из настроек номенклатуры или строк BOM. При проведении Work Order по его операциям создаются Job Card. Кнопка Start оформляет Stock Entry типа Material Transfer for Manufacture (сырьё уходит на склад незавершённого производства), а кнопка Finish — Stock Entry типа Manufacture: со склада WIP списываются сырьё и полуфабрикаты, а готовая продукция приходит на склад готовой продукции. Выпуск можно проводить частями.

В Manufacturing Settings есть настройка Backflush Raw Materials Based On: расход считается либо по тому, что реально передано в производство, либо по BOM. С версии v15 доступна Validate Components and Quantities Per BOM: при списании по BOM система отмечает записи, где изменили количества или удалили позиции. Для расчёта себестоимости это принципиально. Списание по BOM даёт красивую плановую цену, но скрывает перерасход. Списание по реально переданному даёт честный факт, но требует дисциплины на складе. В цеху с опытным кладовщиком я выбираю второе.

Потери и брак влияют на цену напрямую. По документации Stock Entry, Process Loss не движет остатки, но его стоимость добавляется к стоимости готовой продукции: если запланировано 100 единиц, выпущено 80, то цена 20 недополученных единиц ложится на 80 выпущенных. Дополнительные расходы в приходных Stock Entry оформляются таблицей Additional Costs: сумма распределяется по позициям пропорционально их базовой сумме и входит в Valuation Rate. Про доставку, которую нужно включать в цену материала, у нас есть отдельная статья про доставку в себестоимость (landed cost).

Кейс: кухня и кондитерская отеля «Гостевой дом Звезда», 48 рабочих мест

Отель «Гостевой дом Звезда» — условный клиент: 48 рабочих мест, из них 11 в собственной кухне и кондитерской, которые делают выпечку для завтраков и банкетов. До проекта себестоимость позиций жила в таблице шефа. Цены сырья в ней обновлялись раз в квартал, потери на выпечке не учитывались, труд пекаря и стоимость печи были вне расчёта. Директор видел наценку на круассан около 60 процентов, но по итогам месяца кондитерский цех стабильно выходил в ноль. Мы развернули ERPNext v15, завели 9 готовых позиций и 31 позицию сырья, три рабочих места и первые спецификации. На всё ушло три недели вместе с обучением шефа и кладовщика.

Покажу расчёт одной партии, потому что именно он убедил шефа. BOM на 24 круассана: мука 1,5 кг по 60 ₽, масло 0,8 кг по 760 ₽, дрожжи, сахар, молоко 0,4 л и три яйца. Сырьё в сумме даёт 801,1 ₽, то есть 33,4 ₽ за штуку: это та цифра, которая была в таблице. Операций две: замес и раскатка 90 минут по 450 ₽ в час (675 ₽) и выпечка 40 минут по 300 ₽ в час (200 ₽). Итого 1 676,1 ₽ на партию, или 69,8 ₽ за штуку. Цена выросла вдвое не потому, что что-то подорожало, а потому, что в неё впервые вошла работа.

Сырьё на 24 шт:      801,10 ₽  (33,38 ₽/шт)
Замес и раскатка:    90 мин x 450 ₽/ч = 675,00 ₽
Выпечка:             40 мин x 300 ₽/ч = 200,00 ₽
Итого на партию:   1 676,10 ₽  (69,84 ₽/шт)

Настройки, которые я выставил. Rate Of Materials Based On — Valuation Rate, потому что склад ведёт один кладовщик и приходы проводятся в день поставки. Update BOM Cost Automatically — включено, чтобы масло и мука, цены на которые меняются от поставки к поставке, не застывали в спецификациях. Backflush Raw Materials Based On — по переданному в производство. Job Card не включали: в первый месяц считали по нормативам BOM. Складов три: сырьё, незавершённое производство и готовая выпечка; WIP и склад готовой продукции подставляют настройки по умолчанию, склад сырья прописан в строках BOM. Рецепты версионируем: новый рецепт означает новую BOM, прежняя уходит в неактивные.

Итог за первые два месяца. Цена круассана в меню пересмотрена: наценка в 60 процентов считалась от 33,4 ₽ сырья, а от полной себестоимости в 69,8 ₽ она оказывалась намного скромнее. Банкетное меню пересчитали по спецификациям, две позиции с отрицательной маржой убрали. Не всё решено: фактическое время операций пока берём из норматива, а не из карточек работ, поэтому труд в факте остаётся плановым. Следующий шаг, о котором мы договорились с шефом, — подключить Job Card на замесе, где разброс по времени самый большой, и сравнить факт с нормативом через квартал.

Цифры и версии: Кейс: кухня и кондитерская отеля «Гостевой дом Звезда», 48 рабочих мест — схема
Цифры и версии: Кейс: кухня и кондитерская отеля «Гостевой дом Звезда», 48 рабочих мест. Открыть схему в полном размере

Частые вопросы

Как ERPNext считает себестоимость по BOM?

Система складывает стоимость сырья и полуфабрикатов по выбранному источнику ставки (Valuation Rate, Last Purchase Rate или Price List) и стоимость операций из таблицы Operations, затем делит сумму на выход из поля Quantity. Это приблизительная плановая цена, фактическую даёт Work Order со Stock Entry Manufacture.

Как обновить стоимость BOM после изменения цен на сырьё?

Вручную кнопкой Update Cost в самой BOM или кнопкой Update latest price in all BOMs в инструменте BOM Update Tool. Автоматически: включить Update BOM Cost Automatically в Manufacturing Settings, и система будет обновлять стоимость спецификаций ежедневно.

Можно ли изменить проведённую спецификацию?

Нет. Проведённую BOM отменяют или делают её копию и проводят её. Старую версию переводят в неактивные снятием Is Active, актуальную отмечают как Is Default. Для замены спецификации полуфабриката сразу во всех родительских BOM используют Replace BOM в BOM Update Tool.

Как учесть в себестоимости потери и брак?

В BOM указывают scrap-позиции. Если scrap совпадает с изделием, это Process Loss Item, и его количество вычитается из выпуска. По документации Stock Entry, стоимость Process Loss добавляется к стоимости выпущенной готовой продукции.

Нужны ли Job Card, чтобы считать себестоимость?

Нет. Плановую стоимость операций даёт сама BOM. Job Card нужны для фактического времени и стоимости операций по рабочим местам. В малом цехе можно начать без них и подключить позже на самых нестабильных операциях.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи