Как правильно получить себестоимость товара на заданную дату в 1С:Управление торговлей 10.3?

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

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

Разграничение понятий: себестоимость остатков и себестоимость продаж

Первое, что нам необходимо сделать, — это четко разделить два разных вида себестоимости. Проанализируем, чем они отличаются:

  1. Себестоимость остатков: Это оценка товаров, которые в данный момент находятся на складе. Она хранится в регистре накопления ПартииТоваровНаСкладах. Именно эта сумма увеличивает валюту баланса и показывает, сколько денег «заморожено» в товаре.
  2. Себестоимость продаж: Это стоимость товаров, которые уже покинули склад в результате реализации. Эти данные фиксируются в регистре ПродажиСебестоимость. Она нужна для расчета валовой прибыли.

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

Анализ ключевых регистров накопления

Для получения данных мы чаще всего обращаемся к двум регистрам. Выясним их особенности в УТ 10.3.

Регистр «Партии товаров на складах (управленческий учет)»

Это основной источник данных для оценки остатков. Стоит обратить внимание на структуру его измерений. Многие программисты ищут в нем измерение Организация, но его там нет. Это обусловлено архитектурой УТ 10.3: одна конкретная партия (документ поступления) не может принадлежать сразу двум организациям. Организация является реквизитом документа-регистратора, создавшего запись в этом регистре.

Регистр «Продажи себестоимость»

Сюда данные попадают только в момент проведения документа РеализацияТоваровУслуг. Важно понимать, что этот регистр является производным: при проведении реализации система обращается к регистру партий, списывает оттуда стоимость и транслирует эту же сумму в регистр продаж. Если в «Партиях» себестоимость рассчитана неверно или товар списался «в минус» (без стоимости), то и в «Продажах» данные будут некорректными.

Влияние учетной политики на расчет

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

  1. Вести партионный учет по организациям: Если этот флаг установлен, система при списании партий будет жестко контролировать, чтобы товар, купленный на «Организацию А», не был списан при продаже от «Организации Б». Это разделяет себестоимость в разрезе компаний.
  2. Стратегия списания партий: По ФИФО или По средней. При методе «По средней» в УТ 10.3 крайне важно помнить о регламентном документе КорректировкаСтоимостиСписанияТоваров. Без его ежемесячного проведения «средняя» цена будет оперативной (на момент документа), а не средневзвешенной за месяц.

Почему «разъезжаются» ведомости по складам и партиям?

Рассмотрим типовую проблему: количество в Ведомости по товарам на складах не совпадает с количеством в Ведомости по партиям товаров на складах. Это происходит по следующим причинам:

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

Если нам необходимо получить себестоимость для корректировки или аналитики, рассмотрим алгоритм работы с запросом. Самый правильный способ — обращение к виртуальной таблице остатков регистра партий.

Посмотрим на пример запроса, который получает среднюю себестоимость единицы товара на заданный момент времени:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ПартииТоваровОстатки.Номенклатура КАК Номенклатура,
|	ВЫБОР
|		КОГДА ПартииТоваровОстатки.КоличествоОстаток = 0
|			ТОГДА 0
|		ИНАЧЕ ПартииТоваровОстатки.СтоимостьОстаток / ПартииТоваровОстатки.КоличествоОстаток
|	КОНЕЦ КАК СредняяСебестоимость
|ИЗ
|	РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаКонца, Номенклатура = &Номенклатура) КАК ПартииТоваровОстатки";

Запрос.УстановитьПараметр("ДатаКонца", Новый Граница(НужнаяДата, ВидГраницы.Включая));
Запрос.УстановитьПараметр("Номенклатура", ВыбраннаяНоменклатура);

Разберем, что делать, если остатка в партиях нет, а себестоимость получить нужно (например, для оприходования излишков). В таком случае рекомендуется использовать следующие приоритеты источников:

  1. Последняя закупочная цена: Проанализируем регистр накопления Закупки или найдем последний документ ПоступлениеТоваровУслуг. Это наиболее логичная оценка стоимости для управленческого учета.
  2. Тип цен номенклатуры: Можно обратиться к регистру сведений ЦеныНоменклатуры, выбрав тип цен «Закупочная».
  3. Срез последних движений по партиям: Посмотрим, по какой стоимости товар списывался или приходовался в последний раз, даже если сейчас остаток нулевой.

Восстановление последовательности как метод решения

Прежде чем приступать к написанию обработок корректировки, выясним, не решит ли проблему штатный механизм. В УТ 10.3 существует обработка Проведение по партиям. Она находится в меню «Документы» — «Дополнительно». Проанализируем ситуацию: если «граница последовательности» застряла на дате три месяца назад, то все отчеты по себестоимости за текущий период будут выдавать неверные данные.

Последовательность действий должна быть такой:

  1. Убедиться, что складские остатки (количество) верны.
  2. Запустить восстановление последовательности партионного учета.
  3. Выполнить документ Корректировка стоимости списания товаров (если используется учет «по среднему»).
  4. И только если после этих действий Ведомость по партиям все еще не совпадает с Ведомостью по складам, прибегать к ручной корректировке регистров.

Для корректировки используйте документ Корректировка записей регистров. При добавлении записей в ПартииТоваровНаСкладах в качестве документа-регистратора партии (измерение ДокументОприходования) обычно указывают сам документ корректировки или специально созданный пустой документ ОприходованиеТоваров, чтобы «закрыть» расхождение стоимостных показателей.

← На главную