Главная »
Ресурсы » Здесь
Жоаннес Верморель, июль 2016 г.Согласно принципу FIFO (первый пришел — первый ушел), товары, которые были приобретены первыми, должны быть проданы первыми. Модель FIFO можно использовать как теоретическое основание для организации реальных товарных потоков в бухгалтерии и финансах. Метод FIFO можно применять на практике в цепях поставок для контроля срока годности и устаревания продукции, негативно влияющие на запасы. Благодаря FIFO-анализу запасов можно рассчитать "возраст" запасов, найти товары с низкой оборачиваемостью и неликвидные запасы. На данной странице описана процедура проведения FIFO-анализа на практике, а также теоретические и практические ограничения данного подхода.
Физический аспект метода FIFO
С точки зрения цепей поставок, то есть при работе с реальными товарными потоками, обычно имеет смысл в первую очередь отгружать товары, которые были закуплены первыми. Благодаря этому компания сможет свести к минимуму потери из-за истечения срока годности, при условии что в запасе у нее хранится не чрезмерное количество товара. Кроме того, данный метод позволяет ограничить другие мелкие последствия длительного хранения товаров (например, потускнение упаковки).
Например, в сфере торговли одеждой через Интернет возвраты могут достигать 50% от всех сделок. В данной ситуации обычно рекомендуется в первую очередь продавать товары, которые были возвращены ранее. Это дополнение к методу FIFO, которое позволяет надлежащим образом учитывать возврат товаров. Данный метод позволяет работать с вторичными каналами продаж при окончании реализации текущей коллекции товаров.
Многие складские системы вообще не различают, какая именно единица товара отгружается клиенту. Как следствие, в продажу уходит любая единица товара, а не самая старая. Анализ данной процедуры в данной статье не рассматривается.
FIFO-анализ
В отличие от физического аспекта данного метода FIFO-анализ представляет собой теоретический подход к товарным запасам. Он основан на предположении, что товары, которые были приобретены первыми, отгружаются первыми независимо от реального товарного потока. Подход с точки зрения метода FIFO значительно упрощает финансовый анализ товарных запасов.
На практике для проведения FIFO-анализа необходимо следующее:
- текущий уровень запасов
- история заказов на закупку с датами доставки
На основании этих данных с помощью FIFO-анализа можно рассчитать следующие значения:
- оценка запасов, учитывающая различные закупочные цены
- ожидаемая прибыль, которая зависит от закупочных цен
- средний возраст запасов (а также соответствующие крайние значения)
В следующем разделе мы рассмотрим, как вышеперечисленное можно рассчитать на практике.
Envision и FIFO-анализ
В системе Lokad используется язык программирования
Envision, который нужен для количественной оптимизации цепей поставок. Функция
fifo()
в Envision специально предназначена для FIFO-анализа.
При наличии известного текущего уровня запасов и данных о размещенных заказах на закупку товаров метод
fifo()
позволяет так или иначе подробно описать состав запасов с указанием возраста каждой единицы товара. Таким образом, каждая единица товара привязана к одной строке заказа на закупку. Это может показаться незначительным, однако данный метод позволяет рассчитывать количество
нераспроданных'’ единиц товара для каждой строки заказа на закупку с учетом текущего уровня запасов.
Как следствие, данные о количестве нераспроданного товара можно использовать для определения важных показателей финансовой эффективности. Давайте разберемся, как функция fifo()
рассчитывает количество нераспроданного товара по каждой строке заказа на закупку:
read "/sample/Lokad_Items.tsv"
read "/sample/Lokad_PurchaseOrders.tsv" as PO with
"Quantity" as Qty
PO.Unsold = fifo(StockOnHand, PO.Date, PO.Qty)
show table "Unsold" with
Id
PO.Date
PO.Unsold
Сценарий, показанный выше, начинается с чтения двух файлов: списка наименований и списка заказов на закупку, полученного из образца набора данных. Затем в строке 5 выполняется вызов функции fifo()
. У данной функции есть три аргумента:
- текущий уровень запасов
- дата заказа на закупку (обычно дата доставки)
- количество товара, привязанное к заказу на закупку
В строке 6 оператор show table
позволяет вывести на экран результаты расчетов.
Оценка товарных запасов
Оценку товарных запасов можно легко выполнить с помощью следующего сценария:
read "/sample/Lokad_Items.tsv"
read "/sample/Lokad_PurchaseOrders.tsv" as PO with
"Quantity" as Qty
PO.Unsold = fifo(StockOnHand, PO.Date, PO.Qty)
StockValue = sum(PO.Unsold * PO.NetAmount / PO.Qty)
show table "Total stock value" with
sum(StockValue)
В сценарии выше количество нераспроданных товаров PO.Unsold
умножается на исходную цену закупки единицы товара, которая рассчитывается следующим образом PO.NetAmount / PO.Qty
.
Средняя цена закупки
Рассчитать среднюю цену закупки можно с помощью метода FIFO. Сценарий, показанный ниже, получен из предыдущего сценария, и он предназначен для этой цели:
read "/sample/Lokad_Items.tsv"
read "/sample/Lokad_PurchaseOrders.tsv" as PO with
"Quantity" as Qty
PO.Unsold = fifo(StockOnHand, PO.Date, PO.Qty)
StockValue = sum(PO.Unsold * PO.NetAmount / PO.Qty)
PP = StockValue /. sum(PO.Unsold)
where PP > 0 // фильтр наименований без заказов на закупку
show table "Purchase prices" with
Id
Name
PP
Вектор PP
содержит закупочные цены на все наименования. Мы используем оператор деления /.
, который возвращает значение равное нулю, если делитель равен нулю. Благодаря этому в строке 8 мы можем отделить все наименования, для которых невозможно рассчитать закупочные цены из-за отсутствия соответствующих заказов на закупку.
Возраст запасов
Возраст запасов также относительно легко рассчитать, однако для этого требуется еще кое-что: дата, соответствующая настоящему моменту''. Возраст данных о запасах может составлять всего лишь несколько дней, а текущая календарная дата может не подходить для проведения анализа. В примере ниже мы вводим переменную с именем «today», которую можно подгонять под реальные условия.
read "/sample/Lokad_Items.tsv"
read "/sample/Lokad_PurchaseOrders.tsv" as PO with
"Quantity" as Qty
// последняя дата в данных
today := max(PO.Date) + 1
PO.Unsold = fifo(StockOnHand, PO.Date, PO.Qty)
PO.Age = (today - PO.Date) // возраст в днях
Age = sum(PO.Unsold * PO.Age) /. sum(PO.Unsold)
show table "Stock age" with
Id
Name
Age
order by Age desc
Сценарий выше выводит на экран список всех наименований товаров в запасе, упорядоченный по возрасту запасов, причем самые старые наименования помещаются вверх списка. В строках 8-10 производятся расчеты среднего возраста для всех заказов на закупку на основании данных о нераспроданных товарах.
Ограничения FIFO-анализа
Показатели FIFO-анализа основаны на определенных предположениях о потоке товарных запасов. Тем не менее, когда данные или фактический товарный поток не соответствует этим предположениям, качество результатов, как правило, заметно страдает. В данном разделе мы рассмотрим самые распространенные проблемы, связанные с FIFO-анализом.
Ограниченные данные о закупках
Для проведения качественного FIFO-анализа не требуются чрезвычайно подробные данные о закупках с самого начала существования компании, однако зачастую получается, что самые старые товары находятся в запасе дольше, чем можно проследить по истории закупок. В некоторых отраслях, таких как аэрокосмическая промышленность, часто используются запчасти, которым по 10 лет, однако извлечение 10-летней истории закупок из инвентарной системы — сложная задача.
Симуляция случаев дефицита товара
Если в вашем распоряжении есть история закупок и история продаж, можно предположить, что историю случаев дефицита товара можно рассчитать, проанализировав вышеупомянутые данные в хронологическом порядке. Теоретически при проведении такой симуляции можно рассчитать уровень запасов на любой момент времени и отметить периоды, когда он был на нуле в виде случаев дефицита.
Однако опыт Lokad показывает, что данный подход, к сожалению, практически никогда не работает. В данном случае даже малейшие несоответствия (например, не была учтена одна единица товара) нарушают ход анализа, потому что в периоды дефицита товара уровень запасов практически никогда не бывает на нуле — как правило, это небольшие положительные или отрицательные значения, что не позволяет идентифицировать искомые случаи.
Товары с серийными номерами
Когда все единицы товара имеют уникальные серийные номера и когда все перемещения запасов отслеживаются на уровне серийного номера, FIFO-анализ можно считать грубым приближением. Если запасы есть смысл отслеживать по серийному номеру, то их уровень почти всегда можно анализировать с помощью дополнительных параметров, которые предоставляет серийный номер.