dvorec_analytics → public → fifo_v2_receiptsentity — организация,
receipt_date — дата поступления,
sku — артикул,
qty — количество,
unit_cost — себестоимость за штуку,
include_flag — 1=включено в расчёт
fifo_auto_update.py)dvorec_analytics → public → fifo_v2_salesentity, source, sale_date, sku (артикул),
qty_signed (положительное = продажа, отрицательное = возврат)
wb — WB финотчёт (из таблицы fin_wb), фильтр doc_type IN ('Продажа','Возврат')wb_real — WB реализация (из таблицы wb_realization_report, API reportDetailByPeriod), фильтр doc_type_name IN ('Продажа','Возврат')ozon — Ozon финотчёт (из Google Sheets «ФО для БД»)ym — Яндекс.Маркет (из Google Sheets «ФО для БД»)ke — Купер/Магнит Маркет (из Google Sheets «ФО для БД»)dvorec_analytics → public → fifo_v2_bommixer_sku (какой смеситель), consumable_sku (какой расходник), qty_per_1 (сколько штук на 1 смеситель), start_week_end/end_week_end (период действия)КС 8217
→
списать 1 × «Ключ пластиковый для ДС»
+
1 × «Короб цветной + пенка для ДС»
сво кс 203254 д → СДВ КС 203254dvorec_analytics → public → fifo_v2_weekly_reportПоступление включено в расчёт FIFO. Используется для формирования FIFO-слоёв и расчёта себестоимости.
Поступление исключено из расчёта. Например, тестовые или ошибочные данные. Хранится в базе, но не участвует в FIFO.
flag=1 происходит ТОЛЬКО на этапе расчёта.
Сейчас все 4 122 поступления имеют flag=1.
fin_wb: только doc_type IN ('Продажа', 'Возврат') — исключаются строки комиссий, логистики, храненияwb_realization_report: только doc_type_name IN ('Продажа', 'Возврат')qty_signed (уменьшают расход товара)Первые поступившие товары продаются первыми. Себестоимость проданного товара равна цене той партии, из которой он был отгружен.
qty_incum_out_endcum_out_startcum_in_prevfifo_layersБерём все поступления из fifo_v2_receipts с flag=1, qty>0, unit_cost>0.
Каждая строка = одна партия (слой). Считаем накопительное поступление: cum_in = SUM(qty) по артикулу, упорядоченное по дате.
sales_weeklyБерём все продажи из fifo_v2_sales. Группируем по: entity + артикул + неделя
(week_end = ближайшее воскресенье). Суммируем qty_signed → получаем чистые продажи за неделю (продажи минус возвраты).
consumable_outflowДля каждого смесителя, проданного на Шаге 2, проверяем BOM-таблицу.
Если есть правило (например: КС 8217 → Ключ ×1), создаём дополнительный расход расходника.
Учитываем период действия правила (start_week_end ≤ week_end ≤ end_week_end).
combined_outflowСкладываем прямые продажи (Шаг 2) и списание расходников (Шаг 3).
Считаем накопительный расход (cum_out) по каждому артикулу.
calcДля каждой недели и каждого артикула:
fifo_v2_weekly_reportЗаписываем результат в таблицу с колонками:
entity — организация,
week_end — конец недели,
sku_group — артикул,
out_qty — продано,
end_qty — остаток,
end_value — стоимость остатка,
cogs — себестоимость проданного,
avg_cogs — средняя себестоимость,
uncovered — непокрытые продажи
| Неделя | Продано, шт. | COGS, руб. | Ср. себестоимость | Остаток, шт. | Стоимость остатка | Непокрытые |
|---|---|---|---|---|---|---|
| 02.02.2026 | 58 | 138 864 | 2 394 | 5 149 | 12 297 900 | 0 |
| 09.02.2026 | 71 | 170 556 | 2 402 | 5 178 | 12 437 556 | 0 |
| 16.02.2026 | 64 | 153 984 | 2 406 | 5 114 | 12 304 284 | 0 |
| 23.02.2026 | 55 | 133 980 | 2 436 | 5 159 | 12 567 324 | 0 |
| 02.03.2026 | 67 | 163 212 | 2 436 | 5 192 | 12 647 712 | 0 |
| 09.03.2026 | 73 | 177 828 | 2 436 | 5 119 | 12 469 884 | 0 |
| 15.03.2026 | 60 | 146 160 | 2 436 | 5 059 | 12 323 724 | 0 |
| 22.03.2026 | 62 | 151 032 | 2 436 | 5 059 | 12 118 080 | 0 |
СДВ КС 101254), а в продажах — в нижнем (сдв кс 101254). JOIN не находил совпадений.UPPER() во все JOIN-условия FIFO SQLwb_realization_report не содержала данных ИП и Весна