Задача получения информации о закупочных ценах для проданных товаров часто возникает у пользователей 1С:Розница 2.3 при анализе эффективности продаж. Однако важно понимать, что типовая конфигурация «1С:Розница» не является полноценной учетной системой с жестким партионным учетом. Давайте разберем, как подступиться к этой задаче и какие варианты решения у нас есть.
Прежде чем приступать к разработке отчета, проанализируем ситуацию: что именно мы подразумеваем под «закупочной ценой»? В системе существуют два принципиально разных подхода:
Установка цен номенклатуры. Она не всегда совпадает с реальной ценой прихода, так как может меняться централизованно или по маркетинговым соображениям.Поступление товаров. Получить ее сложнее, так как один и тот же товар мог приходить по разным ценам в разные периоды времени.Важно помнить, что «Розница» не хранит историю себестоимости в разрезе каждого проданного чека, поэтому для получения точных данных нам потребуется анализировать движения регистров.
Если вам достаточно оценочных данных, начните с типового функционала. В конфигурации есть отчет Валовая прибыль. Если в настройках учета включено использование закупочных цен, этот отчет может выводить данные о себестоимости продаж на основе документов поступления. Это самый быстрый путь, не требующий программирования.
Также можно использовать отчет Ведомость по поступлениям товаров, который поможет увидеть историю закупок, но он не покажет прямую связь с конкретными продажами.
Если типовых отчетов недостаточно, мы разработаем собственный отчет, используя Систему компоновки данных (СКД). Рассмотрим пошагово, как это реализовать.
Основным источником данных о продажах является регистр накопления Продажи. Однако он содержит информацию о количестве и сумме выручки, но в нем нет закупочной цены. Чтобы дополнить его данными о ценах, нам нужно соединить его с данными о закупках или установленных ценах.
Если вам достаточно текущих или исторических установленных цен, мы используем регистр сведений ЦеныНоменклатуры. В СКД мы создаем запрос, который берет данные из регистра Продажи и соединяет их с виртуальной таблицей СрезПоследних регистра ЦеныНоменклатуры.
Пример логики запроса в СКД:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот,
ЦеныНоменклатурыСрезПоследних.Цена КАК ЗакупочнаяЦена
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК ПродажиОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &ВидЦенЗакупочные) КАК ЦеныНоменклатурыСрезПоследних
ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
Этот метод позволит вывести закупочную цену, актуальную на момент продажи, если вы регулярно обновляли цены в системе.
Если же задача — узнать именно ту цену, по которой товар пришел на склад, нам потребуется регистр накопления Закупки. Здесь ситуация сложнее, так как отчет должен уметь «смешивать» разные цены поступлений (метод средневзвешенной цены).
В СКД мы можем настроить объединение данных из двух наборов:
Связываем эти наборы по полю Номенклатура. Таким образом, для каждой позиции в отчете мы увидим среднюю цену закупки, которая будет выступать индикатором ваших затрат на проданный товар.
Для корректной работы отчетов всегда учитывайте следующие моменты:
СрезПоследних обращайте внимание на параметр даты — если передать текущую дату, вы получите текущие цены, а не цены, которые действовали в момент продажи в прошлом.Разработка собственного отчета на СКД — это наиболее гибкий путь, который позволит вам вывести именно ту аналитику, которая необходима для вашего бизнеса, будь то плановая закупочная цена или средняя фактическая себестоимость.