← вся теориятеория к собесу · Проведение документов

Партии и себестоимость в 1С: списание по FIFO

разбор писал Даниил, автор Сеньорчика

Зачем это спрашивают

Себестоимость продажи зависит от того, из какой поставки списан товар. Партионный учёт хранит остаток в разрезе поставок, и на собесе часто дают задачу: списать по FIFO (first in, first out, первым пришёл, первым ушёл) и не потерять копейку. Код ниже прогнан в OneScript 2.1 на таблице значений вместо регистра.

// Так спрашивают: «Как списать товар по FIFO?» «Откуда берётся висящая копейка?» «Чем FIFO отличается от средней себестоимости?» «Почему в УТ 11 документы не считают себестоимость?»

Партии

Партией называют поступление со своей ценой закупки. Регистр партий хранит остаток в разрезе партий: измерения товар, склад и партия, где партия ссылается на документ поступления, ресурсы количество и сумма. Две поставки молока:

Цену закупки измерением не делают: две поставки по одной цене склеятся в одну строку, и порядок списания потеряется. Цена получается делением суммы на количество в момент списания.

Списание по FIFO

FIFO списывает с самых ранних партий. В запросе остатков партий порядок задают УПОРЯДОЧИТЬ ПО Партия.Дата, Партия.Ссылка, а дальше обходят партии, пока не набрали нужное количество. Себестоимость списания из партии равна сумме партии, делённой на количество и умноженной на списываемое. Списываем 15 штук:

Первая партия ушла целиком за 1 000, из второй взяли половину: 1 200 / 10 × 5 = 600. Себестоимость 1 600, а на складе остались 5 штук на 600. Средняя себестоимость посчитала бы иначе: (1 000 + 1 200) / 20 × 15 = 1 650, и партии ей не нужны, хватает суммы и количества остатка.

Нужно = 15;
Итого = 0;
Для Каждого П Из Партии Цикл
    Если Нужно = 0 Тогда
        Прервать;
    КонецЕсли;
    Взять = Мин(Нужно, П.Количество);
    Если Взять = П.Количество Тогда
        Сумма = П.Сумма;  // партия целиком уходит всей суммой
    Иначе
        Сумма = Окр(П.Сумма / П.Количество * Взять, 2);
    КонецЕсли;
    Сообщить(П.Партия + ": " + Взять + " шт на " + Сумма);
    П.Количество = П.Количество - Взять;
    П.Сумма = П.Сумма - Сумма;
    Итого = Итого + Сумма;
    Нужно = Нужно - Взять;
КонецЦикла;
Сообщить("себестоимость: " + Итого);

Висящая копейка

Партия 3 штуки на 100 рублей. Если списывать по одной штуке по округлённой цене 33.33, после трёх списаний количество станет 0, а на партии останется копейка. Сумма без количества висит в остатках и портит себестоимость:

Во втором варианте каждое списание считается от текущего остатка партии: 33.33, затем 66.67 / 2 = 33.34 (округление 33.335 до сотых), затем 33.33 / 1. Последнее списание забирает ровно то, что осталось, и копейка не висит. То же правило в коде FIFO выше: если партия уходит целиком, списывают всю её сумму.

Закрытие месяца

В 1С:Управление торговлей 11 (УТ 11) и 1С:ERP документы при проведении пишут только количественные движения. Стоимость считает регламентная операция закрытия месяца сразу по всем товарам: она решает систему уравнений, где себестоимость перемещений и сборок зависит от себестоимости входящих партий.

Отсюда следствие для проведения задним числом: при расчёте себестоимости закрытием месяца хвост документов не перепроводят, а повторяют закрытие с изменённого месяца.

Как отвечать: «Напиши, как списать 15 штук по FIFO из партий 10 по 100 и 10 по 120».

Получаю остатки партий запросом, упорядоченные по дате и ссылке партии. Обхожу их: из первой беру все 10 штук и списываю всю её сумму, 1 000, из второй беру 5, это 1 200 разделить на 10 и умножить на 5, то есть 600. Себестоимость 1 600. Если партия уходит целиком, списываю всю оставшуюся сумму, а не цену за штуку, иначе на партии с нулевым количеством останется копейка.

Кандидат решает задачу числами, называет порядок партий и сам вспоминает про копейку. На собесе это обычно отдельный добивающий вопрос, и тут он закрыт заранее.

На чём валят

  • −Делают цену закупки измерением регистра партий. Поставки по одной цене склеиваются. Партия ссылается на документ поступления, цена считается делением.
  • −Списывают по округлённой цене единицы. Остаётся висящая копейка. Считают долю от остатка, целую партию списывают всей суммой.
  • −Упорядочивают партии по номеру документа. Номер строковый. Порядок по дате и ссылке партии.
  • −Перепроводят документы после правки задним числом в УТ 11. Стоимость там считает закрытие месяца. Его и повторяют с изменённого месяца.

Проверь себя

Пять вопросов из банка по этой подтеме. Всего их 12, остальные разбираются в тренажёре.

  1. #oc_cost_batches1 / 5
    Чем учёт по средней себестоимости отличается от партионного?
    A)Единица стоит как среднее по остатку
    B)Себестоимость берётся из последнего поступления
    C)Себестоимость не хранится, считается в отчётах
    D)Средняя считается по ценам продаж за месяц
    показать ответ и разбор
    +A)Единица стоит как среднее по остатку

    // разбор: По средней списывают по стоимости, равной сумме остатков, делённой на количество: партии не нужны. Учёт проще, но себестоимость «размывается» между поступлениями. Партионный учёт точнее, но дороже в проведении и пересчётах.

  2. #oc_cost_batches2 / 5
    Какое измерение добавляют в регистр остатков товаров для партионного учёта?
    A)Номер строки поступления
    B)Цена закупки
    C)Дата поступления
    D)Партия — ссылка на документ поступления
    показать ответ и разбор
    +D)Партия — ссылка на документ поступления

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

  3. #oc_cost_batches3 / 5
    Как получить себестоимость списываемого количества 7 из партии с остатком 10 шт. на 1000 ₽?
    A)1000 × 7 = 7000 ₽
    B)1000 − 7 = 993 ₽
    C)1000 / 10 × 7 = 700 ₽
    D)Всю сумму партии, 1000 ₽
    показать ответ и разбор
    +C)1000 / 10 × 7 = 700 ₽

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

  4. #oc_cost_batches4 / 5
    Реализация на 15 шт. Партии по FIFO: 10 шт. по 100 ₽, 8 шт. по 120 ₽. Какая себестоимость?
    A)1800 ₽
    B)1500 ₽
    C)1600 ₽
    D)1660 ₽
    показать ответ и разбор
    +C)1600 ₽

    // разбор: По FIFO берём всю первую партию: 10 × 100 = 1000. Оставшиеся 5 шт. — из второй: 5 × 120 = 600. Итого 1600 ₽. Остаток второй партии — 3 шт. на 360 ₽. По средней получилось бы иначе: (1000 + 960) / 18 × 15 = 1633,33 ₽.

  5. #oc_cost_batches5 / 5
    Почему в ERP и УТ 11 себестоимость не считается при проведении реализации, а рассчитывается при закрытии месяца?
    A)Потому что платформа не умеет вести партии
    B)Без перепроводки хвоста и блокировок партий
    C)Потому что FIFO запрещён в учёте РФ
    D)Чтобы реализация не имела движений по складу
    показать ответ и разбор
    +B)Без перепроводки хвоста и блокировок партий

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

дальше

Теорию прочитал. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, бесплатная часть практики — одна сессия дня в сутки.