Как правильно перевести учет товаров с ФИФО на среднюю стоимость в 1С: техническое руководство

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

Переход с метода ФИФО (First In, First Out) на оценку "По средней" — это не просто смена одной галочки в настройках. Для программиста 1С, особенно в контексте подготовки к экзамену "1С:Специалист" или при доработке самописных систем, эта задача требует глубокого понимания того, как меняется логика работы с регистрами накопления. В этой статье мы подробно разберем, как реализовать этот переход программно, какие изменения внести в алгоритмы проведения документов и на что обратить внимание при работе с остатками.

Различия в архитектуре запросов: ФИФО против Средней

Рассмотрим ситуацию, когда в системе реализован партионный учет. При ФИФО ключевым измерением в регистре накопления (например, ОстаткиНоменклатуры) является Партия (обычно это документ поступления). Проанализируем, как меняется выборка данных из базы при смене метода.

При методе ФИФО: Система должна получить остатки в разрезе каждой партии и отсортировать их по моменту времени (или номеру партии), чтобы списывать товары по очереди. Запрос к виртуальной таблице Остатки будет содержать параметры: Номенклатура, Склад и Партия.

При методе "По средней": Измерение Партия в запросе становится избыточным. Мы должны получить общее количество и общую сумму по Номенклатуре и Складу (если учет ведется в разрезе складов). Посмотрим на пример того, как должен выглядеть универсальный запрос, учитывающий учетную политику:


ТекстЗапроса = 
"ВЫБРАТЬ
|   Остатки.Номенклатура КАК Номенклатура,
|   Остатки.КоличествоОстаток КАК КоличествоОстаток,
|   Остатки.СуммаОстаток КАК СуммаОстаток" +
?(МетодФИФО, ", Остатки.Партия КАК Партия", "") +
" ИЗ
|   РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментВремени, Номенклатура = &Номенклатура) КАК Остатки
" +
?(МетодФИФО, "УПОРЯДОЧИТЬ ПО Остатки.Партия.МоментВремени", "");

Выясним причину такого подхода: если мы оставим Партию в группировке при расчете по средней, мы получим "среднюю в разрезе партий", что математически равносильно ФИФО или ЛИФО и не имеет смысла. Для метода "по средней" мы обязаны "схлопнуть" все партии в одну строку.

Алгоритм расчета себестоимости "на лету" (Скользящая средняя)

Разберем по шагам, как программно реализовать расчет при проведении документа отгрузки. В методе "по средней" формула кажется простой, но в ней кроется важный нюанс, связанный с точностью вычислений.

Проанализируем классический расчет себестоимости:

  1. Получаем текущие остатки по Номенклатуре (Количество и Сумма).
  2. Рассчитываем цену единицы: Цена = СуммаОстаток / КоличествоОстаток.
  3. Рассчитываем сумму списания: СуммаСписания = КоличествоКБронированию * Цена.

Важный момент: При полном списании товара со склада из-за округлений могут остаться "хвосты" в несколько копеек. Чтобы этого избежать, всегда добавляйте проверку: если количество списываемого товара равно количеству остатка, то сумма списания должна быть равна всей оставшейся сумме на регистре.


Если КоличествоСписания = Выборка.КоличествоОстаток Тогда
    СуммаСписания = Выборка.СуммаОстаток;
Иначе
    СуммаСписания = (Выборка.СуммаОстаток / Выборка.КоличествоОстаток) * КоличествоСписания;
КонецЕсли;

Методологические виды оценки "По средней"

В практике 1С выделяют два подхода к расчету средней стоимости, и важно понимать, какой именно требуется в вашей задаче:

1. Скользящая средняя: Себестоимость рассчитывается в момент проведения каждого документа (как в примере выше). Это позволяет видеть валовую прибыль сразу. Именно этот метод чаще всего требуется реализовать на экзамене 1С:Специалист по платформе.

2. Средневзвешенная (за месяц): Согласно этому методу, себестоимость всех продаж за месяц одинакова и рассчитывается только в конце периода. Рассмотрим алгоритм: в течение месяца документы списывают только количество. В конце месяца регламентная операция Закрытие месяца берет (СтоимостьОстаткаНаНачало + СтоимостьПоступлений) / (КолвоНаНачало + КолвоПоступлений) и корректирует все движения реализации за месяц. Этот метод сложнее в реализации, так как требует перепроведения или создания корректирующих записей.

Что делать со старыми партиями при переходе?

Рассмотрим ситуацию: организация работала по ФИФО, и в регистре накопления накопились остатки по сотням разных партий. Теперь мы переходим на среднюю. Нужно ли удалять данные из регистра?

Проанализируем два варианта решения:

  1. Автоматическое "схлопывание": При расчете по средней программа просто игнорирует измерение Партия. В движениях документа Расходная накладная значение партии оставляется пустым (Справочники.Партии.ПустаяСсылка() или Неопределено). Технически это допустимо: на остатках будут висеть записи с партиями, но списания будут идти без них. Однако это может привести к путанице в отчетах.
  2. Создание "Виртуальной партии": Это более "чистый" метод. На дату смены учетной политики (обычно 1 января) создается документ (например, Корректировка регистров), который списывает все остатки в разрезе партий и приходует их обратно на одну общую "виртуальную" партию (например, с названием "Остатки при переходе на среднюю"). Далее учет ведется только по этой позиции.

Ограничения и налоговый учет (УСН 15%)

Рассмотрим важный аспект, упомянутый в обсуждении на форуме. Если ваша организация применяет УСН (Доходы минус расходы), переход на среднюю стоимость в типовых конфигурациях 1С (таких как Бухгалтерия предприятия) практически невозможен или крайне не рекомендуется.

Выясним причину: для признания расходов при УСН необходимо выполнение трех условий: товар получен, товар оплачен поставщику, товар реализован. Чтобы отследить, какой именно товар (из какой поставки и оплачен ли он) был продан, системе жизненно необходим партионный учет. При методе "по средней" связь между закупкой и продажей теряется, что делает расчет налога по правилам НК РФ невозможным.

Резюме для разработчика

Подводя итог, для успешного программного перехода с ФИФО на среднюю нам необходимо:

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

← На главную