При создании аналитических отчетов в 1С:Управление торговлей 11.5 часто возникает необходимость не просто вывести данные о продажах, но и сопоставить их с соответствующими закупочными ценами или себестоимостью. Это позволяет оценить прибыльность, анализировать динамику цен за период и эффективность торговой деятельности. Однако задача вывода этих данных по дням, особенно когда закупочные цены меняются, имеет свои нюансы.
Рассмотрим ситуацию: нам нужно сформировать отчет по продажам номенклатуры с количеством, ценой продажи и закупочной ценой по дням за определенный период, например, за месяц. Если данные о продажах легко получить из соответствующих регистров, то с закупочной ценой возникает вопрос: какую цену считать актуальной на день продажи? Последнюю закупочную цену на момент продажи или реальную себестоимость проданного товара, рассчитанную по принятому методу учета?
В данной статье мы подробно разберем два основных подхода к решению этой задачи в 1С:УТ 11.5, используя Систему Компоновки Данных (СКД), и выясним, какой из них будет наиболее корректным для различных аналитических целей, включая анализ сглаженных и пиковых продаж.
Первый подход подразумевает получение последней зафиксированной закупочной цены на конкретную дату продажи. Этот метод может быть полезен для оперативного анализа ценовой политики, сравнения текущих цен поставщиков или просто для получения справочной информации. Однако важно понимать, что такая "последняя цена" может не совпадать с реальной учетной себестоимостью именно того товара, который был продан, особенно если у вас партионный учет.
Для реализации этого подхода мы будем использовать регистры сведений, хранящие информацию о ценах:
ЦеныНоменклатуры: Хранит розничные, оптовые и другие виды цен, установленные для номенклатуры. В некоторых случаях, если закупочная цена вводится как отдельный вид цен, она может храниться здесь.ЦеныНоменклатурыПоставщиков: Более специализированный регистр, который напрямую хранит цены, по которым мы закупаем товары у конкретных поставщиков. Для работы с этим регистром удобно использовать помощник анализа цен поставщиков.Разберем по шагам, как это реализовать в СКД:
ПродажиОбороты или к движениям документов реализации (например, РеализацияТоваровУслуг), как это реализовано в готовых отчетах по оптовым и розничным продажам. Этот набор данных будет содержать информацию о номенклатуре, количестве и цене продажи за каждый день.
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.Дата КАК ДатаПродажи,
ПродажиОбороты.КоличествоОборот КАК КоличествоПродажи,
ПродажиОбороты.СуммаОборот КАК СуммаПродажи
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ПродажиОбороты
СрезПоследних одного из регистров сведений о ценах. Ключевой момент: чтобы получить цену на каждую дату продажи, нам нужно передавать дату продажи в параметр виртуальной таблицы СрезПоследних. Это можно сделать двумя способами:
Для получения среза последних цен на каждую дату продажи нам потребуется выполнить запрос к регистру сведений ЦеныНоменклатуры (или ЦеныНоменклатурыПоставщиков), указав в качестве параметра периода дату продажи. Поскольку в СКД это не всегда просто сделать напрямую в одном запросе, мы можем использовать следующий подход:
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена КАК ЗакупочнаяЦена,
ЦеныНоменклатурыСрезПоследних.Период КАК ДатаУстановкиЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЗакупочнойЦены) КАК ЦеныНоменклатурыСрезПоследних
В этом запросе &Дата будет передаваться из основного набора данных по продажам. В СКД это реализуется через параметры связи наборов данных, где параметр &Дата из набора цен связывается с полем ДатаПродажи из набора продаж.
Номенклатура и, что критически важно, по ДатаПродажи (из набора продаж) и параметру &Дата (из набора цен), чтобы получать срез цен на *каждый день продажи*. Тип соединения обычно Левое внешнее соединение, чтобы видеть все продажи, даже если для них не найдена закупочная цена.Номенклатура, ДатаПродажи, КоличествоПродажи, СуммаПродажи и ЗакупочнаяЦена. Вы также сможете добавить расчеты, например, разницу между ценой продажи и закупочной ценой.Этот метод позволяет получить оперативную информацию о "последней" закупочной цене, но для полноценного анализа прибыльности он может быть недостаточен.
Для корректной оценки прибыльности и формирования отчета, отражающего реальное финансовое положение, необходимо использовать учетную себестоимость проданного товара. 1С:УТ 11.5 специально разработана для ведения такого учета, и все необходимые данные уже хранятся в системе.
Почему учетная себестоимость лучше "последней закупочной цены"? Как справедливо отмечалось в обсуждении, вы можете купить товар 10 раз по 100 рублей, а затем один раз по 50 рублей. Если вы продадите товар за 70 рублей, "последняя закупочная цена" в 50 рублей покажет прибыль в 20 рублей. Однако, если по методу ФИФО были списаны товары, купленные по 100 рублей, то вы на самом деле получили убыток в 30 рублей. Учетная себестоимость учитывает выбранный метод списания (ФИФО, средняя за месяц, скользящая средняя) и дает истинную картину.
Основным источником данных для учетной себестоимости является регистр накопления СебестоимостьТоваров. Этот регистр хранит информацию о стоимости товаров в разрезе партий (если ведется партионный учет) и позволяет получить себестоимость по выбранному методу учета.
Разберем по шагам, как это реализовать в СКД:
СебестоимостьТоваров. Для получения данных о себестоимости нам подойдут следующие виртуальные таблицы:
Обороты: Позволяет получить обороты по себестоимости за период, что идеально подходит для анализа продаж.ПартииТоваров: Если требуется детальный партионный учет (например, по ФИФО), эта таблица может предоставить информацию о партиях и их стоимости.Наиболее универсальным для этой задачи является использование виртуальной таблицы Обороты регистра СебестоимостьТоваров.
ВЫБРАТЬ
СебестоимостьТоваровОбороты.Номенклатура,
СебестоимостьТоваровОбороты.ПериодДня КАК ДатаПродажи,
СебестоимостьТоваровОбороты.КоличествоРасход КАК КоличествоПродажи,
СебестоимостьТоваровОбороты.СтоимостьРасход КАК СебестоимостьПродажи
ИЗ
РегистрНакопления.СебестоимостьТоваров.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК СебестоимостьТоваровОбороты
ГДЕ
СебестоимостьТоваровОбороты.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
Обратите внимание: Мы отбираем ВидДвиженияНакопления.Расход, так как именно он соответствует списанию себестоимости при продаже.
СебестоимостьТоваров. Мы можем добавить к этому запросу информацию о цене продажи из регистра ПродажиОбороты или из документов реализации.
Пример объединения данных о продажах (выручке) и себестоимости:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.Дата КАК Дата,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СуммаОборот КАК СуммаПродажи,
ЕСТЬNULL(СебестоимостьОбороты.СтоимостьРасход, 0) КАК Себестоимость
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ПродажиОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СебестоимостьТоваров.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК СебестоимостьОбороты
ПО ПродажиОбороты.Номенклатура = СебестоимостьОбороты.Номенклатура
И ПродажиОбороты.Дата = СебестоимостьОбороты.ПериодДня
И СебестоимостьОбороты.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
В этом запросе мы соединяем данные о продажах с данными о себестоимости по номенклатуре и дате. Это позволит нам вывести в отчете количество, сумму продажи и соответствующую себестоимость.
Номенклатура, Дата, Количество, СуммаПродажи и Себестоимость. Дополнительно можно рассчитать Прибыль = СуммаПродажи - Себестоимость и Рентабельность = Прибыль / СуммаПродажи * 100 как вычисляемые поля или ресурсы отчета.Важные аспекты при работе с регистром СебестоимостьТоваров:
СебестоимостьТоваров.Независимо от выбранного подхода, работа в Системе Компоновки Данных будет включать общие шаги:
&НачалоПериода и &КонецПериода.Количество, СуммаПродажи, Себестоимость. Для полей, которые нужно усреднить (например, цена продажи за единицу или себестоимость за единицу), используйте выражение Сумма(СуммаПродажи) / Сумма(Количество).Дата и Номенклатура, чтобы получить детализацию по дням и позициям.Важный совет: Если вы столкнулись с трудностями, всегда можете посмотреть, как строятся стандартные отчеты 1С:УТ 11.5, которые выводят себестоимость или учетные цены (например, отчет "Валовая прибыль"). Их структура СКД может подсказать оптимальные решения.
В заключение, для принятия обоснованных управленческих решений настоятельно рекомендуем использовать данные из регистра СебестоимостьТоваров, так как они отражают реальную учетную себестоимость, а не просто последнюю закупочную цену, которая может быть вводящей в заблуждение.