Складской учёт в ERPNext: партии, сроки годности, штрихкоды
АйТи Фреш
IT-аутсорсинг и бизнес

Складской учёт в ERPNext для торговли стройматериалами: номенклатура, партии, FEFO и штрихкоды

Автор: , директор ООО «АйТи-Фреш» · · ~16 мин чтения
Стеллаж склада стройматериалов с партиями и датами, сканер подсвечивает ближайшую: склад ERPNext и FEFO
Склад по партиям отгружает то, что раньше истекает, а не то, что ближе.

Склад в ERPNext начинается с трёх справочников: номенклатура Item, дерево складов Warehouse и единицы измерения. Партии со сроком годности включаются в карточке товара, а отгрузка по FEFO задаётся порядком подбора по сроку. Штрихкоды сканируются в строках документов. Ниже настройки по шагам и ограничения версий.

С чего начинается склад в ERPNext: Item, Warehouse и Maintain Stock

Складской учёт ERPNext опирается на два справочника, и ошибки в них потом исправлять дороже всего. Первый — Item, номенклатура. Второй — Warehouse, склады, организованные деревом. Перед первым приходом нужны ещё компания, план счетов и единицы измерения. Если вы планируете вести склад в рамках внедрения ERPNext под ключ, эту подготовку мы делаем в первую неделю, потому что документы прихода без неё просто не проведутся.

В карточке товара главный флажок называется Maintain Stock. Он включает количественный учёт: остатки, резервы, движения. Для услуг и работ его снимают: тогда списание фиксируется только в финансовых проводках, а склад про них ничего не знает. Для торговли стройматериалами это обычно путаница номер один: доставка, разгрузка, подъём на этаж заведены как номенклатура, и кто-то пытается приходовать «доставку» на склад. Услуги я завожу отдельной группой и сразу снимаю флажок.

Склады строятся деревом. Для торговой компании я делаю верхний уровень «Склады», под ним основной склад, склад брака и транзитный склад, а при необходимости торговые точки. При непрерывном учёте запасов (Perpetual Inventory) каждый склад принадлежит компании и привязан к счёту учёта запасов, и этот момент нужно согласовать с бухгалтером до первого прихода. Метод оценки по умолчанию (FIFO, Moving Average или LIFO) задаётся в Stock Settings, а для отдельной позиции его можно переопределить в карточке товара. Решение принимают до первого прихода: менять метод на живых данных рискованно.

Порядок настройки, который я использую, выглядит так. Сначала компания и план счетов. Потом дерево складов. Затем группы номенклатуры и сама номенклатура с единицами измерения, налоговыми шаблонами и штрихкодами. Последними заводятся партии и серийные номера, потому что они возникают из документов прихода, а не создаются вручную заранее. И только после этого загружаются остатки на дату старта. История движений прошлых лет не переносится: достаточно закрывающего остатка, иначе вы получите чистку на недели без пользы для работы.

Единицы измерения: закупка коробками, учёт поштучно

В стройматериалах одна и та же позиция живёт в трёх единицах. Поставщик продаёт паллетами, вы принимаете мешками, клиент покупает килограммами или квадратными метрами. ERPNext решает это таблицей единиц в карточке товара (UOM Conversion Detail): вы указываете коэффициент пересчёта, например, один паллет равен 48 мешкам. В заказе поставщику можно выбрать паллеты, а складской регистр останется в мешках. Это экономит ручной пересчёт и главное, убирает ошибки при вводе.

Две подводные вещи. Первая: если коэффициент нецелый или поставщик «округляет» упаковку, остаток получается дробным. Для таких случаев в Stock Settings есть флажки Allow to Edit Stock UOM Qty отдельно для документов продаж и закупок: они разрешают править количество в складской единице вручную. Я её включаю точечно, а не по умолчанию, чтобы не приучать кладовщиков править количество «на глаз». Вторая: есть известная ловушка контроля бюджета на заявке, когда позиция заказывается в альтернативной единице с коэффициентом не 1:1. Поэтому позиции с пересчётом я отдельно прогоняю в тестовом сценарии.

Какие позиции требуют пересчёта в торговле стройматериалами, по моему опыту. Сухие смеси: поддон, мешок, килограмм. Кабель и профиль: бухта или хлыст, метр. Листовые материалы: пачка, лист, квадратный метр. Крепёж: коробка, упаковка, штука. Для каждой позиции лучше один раз договориться, в чём ведётся остаток, и не менять это после запуска. Хранить остаток в самой мелкой единице проще и надёжнее: крупные единицы получаются из неё делением. | Позиция | Закупка | Учёт на складе | Продажа | |---|---|---|---| | Сухая смесь | паллет | мешок | мешок | | Кабель | бухта | метр | метр | | Гипсокартон | пачка | лист | лист | | Крепёж | коробка | штука | штука или упаковка |

Что стоит записать в регламент: кто имеет право менять коэффициент пересчёта, и что делать, если поставщик сменил упаковку. Ответ второй: завести новую позицию или новую единицу, а старые движения не переписывать. Иначе остатки прошлых периодов потеряют смысл, а система не умеет откатывать ошибочный коэффициент задним числом без пересчёта.

Партии и сроки годности: как включить Batch и отгружать по FEFO

Партионный учёт нужен там, где у товара есть срок годности или происхождение партии влияет на качество: сухие строительные смеси, клеи, герметики, краски. В карточке номенклатуры включается флажок Has Batch No. Если нужны сроки, добавляется Has Expiry Date и срок хранения в днях (Shelf Life In Days). Есть и удобный флажок Automatically Create New Batch, и он создаёт партию автоматически при оприходовании. В Stock Settings на вкладке Serial & Batch Item задаётся, как система подбирает и резервирует партии и показывать ли прямые поля партии в строках документов (Use Serial / Batch Fields).

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

FEFO, «первым уходит то, что раньше истечёт», в ERPNext настраивается в Stock Settings полем Pick Serial / Batch Based On. У него три значения: FIFO, LIFO и Expiry. Именно Expiry реализует FEFO: при создании складских документов на расход система сама подбирает партии с ближайшим сроком годности. В обзорах эту функцию называют стратегией FEFO, но в интерфейсе ищите именно это поле. Настройка работает при автоматическом формировании пакетов серий и партий, и порядок подбора лучше проверить на тестовой отгрузке, а не доверять названию.

Покажу, как это читается на практике, на условных числах. | Партия | До истечения срока | Остаток, мешков | Что произойдёт при заказе на 10 мешков | |---|---|---|---| | A | 15 дней | 6 | уйдёт целиком | | B | 40 дней | 20 | уйдёт 4 мешка | | C | 90 дней | 50 | не затрагивается | Партию A, у которой осталось меньше месяца, мы видим красным ещё до отгрузки, и можно решить: продать со скидкой или отдать большому клиенту. Для корректировки остатков по партиям используется Stock Reconciliation: документ с загрузкой шаблона, и я подробнее разбираю его в статье про инвентаризацию. Любые заявления вроде «стопроцентное соблюдение FEFO» без замера не принимайте, сверяйте результат отчётом по партиям.

FEFO зависит от настройки и от дисциплины ввода сроков. Если при приходе срок годности не указан, система не сможет выбрать партию по сроку.

Серийные номера и Serial and Batch Bundle: что изменилось в новых версиях

Серийные номера нужны для штучного контроля: электроинструмент, измерительные приборы, оборудование. Включаются флажком Has Serial No в карточке. Серийный номер в v15 уникален во всей базе: имя документа Serial No совпадает с самим номером. Поэтому у двух разных позиций не может быть одинакового номера, и при импорте заводских номеров разных производителей совпадения нужно ловить заранее, например добавляя префикс. Для торговли стройматериалами серийный учёт чаще нужен для дорогого инструмента, который сдаётся в прокат или идёт по гарантии, а для расходников он избыточен.

Начиная с версии 15, партии и серийные номера в складских документах оформляются через Serial and Batch Bundle: отдельный документ, который хранит перечень номеров и партий, связанных со строкой. Документация по Stock Reconciliation отдельно отмечает поддержку этих пакетов в версии 15 и выше. В настройках есть и поле Use Serial / Batch Fields, оно возвращает прямой ввод номеров и партий в строку документа без пакетов. Что выбрать, зависит от команды: пакеты строже и надёжнее, прямые поля проще для кладовщика. Я пробую оба варианта на тестовом сайте и показываю кладовщику, потому что ему с этим работать.

Отрицательные остатки. Allow Negative Stock можно включить, но он ломает корректную работу FIFO и скользящей средней: система не может честно посчитать себестоимость товара, которого физически нет. Для партионных позиций отрицательные остатки по умолчанию запрещены даже при включённом Allow Negative Stock; в свежих сборках v15 появился отдельный флажок Allow Negative Stock for Batch, но я его не включаю. Для торговли это означает дисциплину: сначала оприходовать товар, потом отгружать. Если кладовщик не успел оформить приход, а покупатель уже ждёт, правильный выход — быстро оформить приход, а не включать отрицательные остатки.

Есть и версионная ловушка. Если у вас серийные номера созданы до версии 15, пересчёт оценки может давать неверную ставку: в документации Stock Reposting Settings описана опция, которая заставляет брать ставку из реальных приходных операций, а не из записи серийного номера. Выглядит мелочью, но при миграции со старой версии она влияет на себестоимость. Если вы обновляетесь с версии 14, заложите тест на нескольких серийных позициях до переключения.

Штрихкоды: сканирование в строках документа и массовая проверка

К карточке товара штрихкоды привязываются таблицей Barcodes: у одной позиции может быть несколько кодов, например, заводской и внутренний. В таблице строк документа (приход, расход, перемещение, инвентаризация) работает сканирование: сканер вводит код, система находит позицию и добавляет строку. Документация по Stock Reconciliation прямо называет сканирование штрихкодов одним из способов набора позиций, где каждое считывание увеличивает количество. Поле штрихкода в складских документах включается флажком Show Barcode Field in Stock Transactions в Stock Settings.

Правила контроля. Система не даст привязать штрихкод, который уже закреплён за другой позицией: это защита от самой частой ошибки при импорте. Массовая проверка и правка штрихкодов делается через Data Import в режиме Update: выгружаете справочник, правите в таблице, загружаете обратно. Для торговой компании это основной способ завести тысячи кодов, а не вводить их вручную.

Что оборудование делает, а что ERPNext. Кладовщик с обычным USB-сканером работает так же, как с клавиатурой: код попадает в активное поле. Терминалы сбора данных, этикетки и печать штрихкодов на ценниках требуют дополнительных настроек или интеграций. Если вам нужен ТСД с полноценным обменом и 1С, сравните подходы с материалом про ТСД на складе и интеграцию с 1С: там схема другая, но вопросы оборудования те же.

Практический совет по этикеткам. Если у поставщика штрихкоды на упаковке есть, используйте их и внесите в справочник при первом приходе. Если нет, придётся клеить свои, и тогда продумайте, где именно напечатаны коды, чтобы их можно было сканировать из любой позиции на стеллаже. Этикетка, которую не получается прочитать, превращает автоматизацию в ручной ввод.

Разбор: «Штукатур и Сын» разводит остатки сухих смесей по партиям

Условный пример: компания «Штукатур и Сын», девятнадцать рабочих мест, торгует отделочными материалами и сухими смесями. Названия и числа придуманы для иллюстрации. Основной склад, небольшой склад для брака и транзитный склад для поставок между точками. Проблема до внедрения: у сухих смесей и клеёв есть срок годности, но остаток по партиям в таблицах не вёлся, и просроченные мешки обнаруживались при инвентаризации.

Что сделано. В карточках позиций включены партии и сроки годности, автоматическое создание партии при приходе, порядок подбора Expiry в Stock Settings. Остатки на дату старта загружены с партиями через Stock Reconciliation. Кладовщик при приходе вносит срок годности, а при отгрузке видит предложенную партию. Для штрихкодов использованы заводские коды, которые внесены в справочник при первой поставке. Услуги доставки и разгрузки заведены отдельной группой со снятым Maintain Stock.

Что получилось в работе. Менеджер при оформлении расхода видит партию и срок и может предложить покупателю то, что скоро истечёт. Отчёт по остаткам партий показывает позиции с короткими сроками. Разделённые партии не создают путаницы, потому что движение между складами оформляется перемещением. Чего пример не показывает, так это процента «снижения потерь»: цифры вроде «потери упали на столько-то» без замера до и после я не привожу.

Что осталось на ручной работе. Ввод срока годности при приходе: система не угадает его по упаковке. Решение о скидке на партию с коротким сроком: ERPNext покажет проблему, но не примет за вас коммерческое решение. Сверка остатков с физическим пересчётом: её проводят документом Stock Reconciliation раз в квартал или чаще, подробнее в нашем материале про склад в других системах и в статье про инвентаризацию ERPNext.

Какие ограничения склада стоит знать до запуска

Первое ограничение — версии. Серийные номера и партии в версии 15 и новее работают через Serial and Batch Bundle, а в более старых иначе. Документацию нужно читать для своей ветки, и ряд обзоров в интернете описывает старый механизм. Если вы переносите данные со старой установки, проверьте серийные позиции отдельно. Если ставите новую установку, берите актуальную версию и настройки из её документации.

Второе: ERPNext — не WMS. Адресного хранения на уровне ячеек, волновой комплектации и маршрутов отбора по складу в коробке нет, это либо доработка, либо отдельная система. Для компании с одним-двумя складами и несколькими тысячами позиций этого хватает с запасом. Для распределительного центра с десятками тысяч позиций я бы рассматривал специализированное решение. Сравнивать системы по масштабу склада можно в обзоре систем учёта на Linux.

Третье: бухгалтерия. Складские проводки ERPNext формирует по своей логике, а российский регламентированный учёт остаётся в 1С. Складские документы ERPNext не заменяют накладные в формате, который требует ваш контрагент или налоговая, и печатные формы вроде ТОРГ-12 нужно настраивать отдельно. Если ваш бухгалтер не готов принимать операционные данные из ERPNext, склад придётся вести в 1С. Для микропредприятий есть и более лёгкий путь, он разобран в материале про учёт для микробизнеса.

Четвёртое: производительность. Пересчёт оценки запасов при проведении документов задним числом создаёт нагрузку, а в рабочие часы может приводить к блокировкам. Ограничение времени пересчёта внепиковыми часами настраивается в Stock Reposting Settings, а проведение документов далеко задним числом лучше ограничить регламентом. Для компании на девятнадцать мест этого достаточно, но ограничения стоит заложить в регламент: «приходы вносим в день поставки».

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

Как включить партионный учёт в ERPNext?

В карточке номенклатуры включается Has Batch No, для сроков годности добавляется Has Expiry Date и срок хранения в днях. Флажок Automatically Create New Batch создаёт партию при приходе. После этого поступление и отгрузка идут с номером партии, а настройку лучше проверить на тестовом документе.

Как настроить отгрузку по FEFO?

В Stock Settings есть поле Pick Serial / Batch Based On со значениями FIFO, LIFO и Expiry. Значение Expiry подбирает партию с ближайшим сроком годности при автоматическом формировании пакета на расход. Сроки годности должны быть заполнены при приходе, иначе подбирать нечего.

Что делать, если закупаем коробками, а списываем штуками?

В карточке товара задаётся таблица единиц с коэффициентом пересчёта, например одна коробка равна двенадцати штукам. В заказе поставщику указывают коробки, а складской регистр ведётся в штуках. Если коэффициент неточный, ручная правка количества в складской единице включается флажками Allow to Edit Stock UOM Qty в Stock Settings.

Можно ли работать со штрихкодами без доработки?

Да: у товара есть таблица Barcodes, а строки документов поддерживают сканирование. Массовая проверка и правка кодов идёт через Data Import в режиме Update. Система не даст привязать код, который уже закреплён за другой позицией. Терминалы и печать этикеток настраиваются отдельно.

Разрешены ли отрицательные остатки в ERPNext?

Allow Negative Stock включить можно, но он мешает корректной работе FIFO и скользящей средней. Для партионных позиций минус по умолчанию запрещён даже при включённом Allow Negative Stock (отдельный флажок Allow Negative Stock for Batch есть в свежих сборках v15). Правильный путь: сначала оформить приход, потом отгружать.

Как отражать услуги и работы в номенклатуре без остатка?

У услуги в карточке снимается флажок Maintain Stock. Количественный учёт не ведётся, а затраты и выручка отражаются в финансовых проводках. Услуги удобно держать в отдельной группе номенклатуры, чтобы их не путали с товаром при приходе.

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

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

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

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

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

Источники

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