Как правильно вывести продажи номенклатуры с закупочными ценами или себестоимостью по дням в отчете 1С:УТ 11.5?

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

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

Рассмотрим ситуацию: нам нужно сформировать отчет по продажам номенклатуры с количеством, ценой продажи и закупочной ценой по дням за определенный период, например, за месяц. Если данные о продажах легко получить из соответствующих регистров, то с закупочной ценой возникает вопрос: какую цену считать актуальной на день продажи? Последнюю закупочную цену на момент продажи или реальную себестоимость проданного товара, рассчитанную по принятому методу учета?

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

Подход 1: Получение последней закупочной цены на момент продажи

Первый подход подразумевает получение последней зафиксированной закупочной цены на конкретную дату продажи. Этот метод может быть полезен для оперативного анализа ценовой политики, сравнения текущих цен поставщиков или просто для получения справочной информации. Однако важно понимать, что такая "последняя цена" может не совпадать с реальной учетной себестоимостью именно того товара, который был продан, особенно если у вас партионный учет.

Для реализации этого подхода мы будем использовать регистры сведений, хранящие информацию о ценах:

  1. ЦеныНоменклатуры: Хранит розничные, оптовые и другие виды цен, установленные для номенклатуры. В некоторых случаях, если закупочная цена вводится как отдельный вид цен, она может храниться здесь.
  2. ЦеныНоменклатурыПоставщиков: Более специализированный регистр, который напрямую хранит цены, по которым мы закупаем товары у конкретных поставщиков. Для работы с этим регистром удобно использовать помощник анализа цен поставщиков.

Разберем по шагам, как это реализовать в СКД:

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

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

    
    ВЫБРАТЬ
        ЦеныНоменклатурыСрезПоследних.Номенклатура,
        ЦеныНоменклатурыСрезПоследних.Цена КАК ЗакупочнаяЦена,
        ЦеныНоменклатурыСрезПоследних.Период КАК ДатаУстановкиЦены
    ИЗ
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЗакупочнойЦены) КАК ЦеныНоменклатурыСрезПоследних
    

    В этом запросе &Дата будет передаваться из основного набора данных по продажам. В СКД это реализуется через параметры связи наборов данных, где параметр &Дата из набора цен связывается с полем ДатаПродажи из набора продаж.

  3. Связываем наборы данных. В настройках СКД мы создаем связь между основным набором данных (продажи) и дополнительным (цены). Связывание производится по полю Номенклатура и, что критически важно, по ДатаПродажи (из набора продаж) и параметру &Дата (из набора цен), чтобы получать срез цен на *каждый день продажи*. Тип соединения обычно Левое внешнее соединение, чтобы видеть все продажи, даже если для них не найдена закупочная цена.
  4. Настраиваем поля и ресурсы. В результате у нас появятся поля для вывода: Номенклатура, ДатаПродажи, КоличествоПродажи, СуммаПродажи и ЗакупочнаяЦена. Вы также сможете добавить расчеты, например, разницу между ценой продажи и закупочной ценой.

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

Подход 2: Получение учетной себестоимости (рекомендуемый способ)

Для корректной оценки прибыльности и формирования отчета, отражающего реальное финансовое положение, необходимо использовать учетную себестоимость проданного товара. 1С:УТ 11.5 специально разработана для ведения такого учета, и все необходимые данные уже хранятся в системе.

Почему учетная себестоимость лучше "последней закупочной цены"? Как справедливо отмечалось в обсуждении, вы можете купить товар 10 раз по 100 рублей, а затем один раз по 50 рублей. Если вы продадите товар за 70 рублей, "последняя закупочная цена" в 50 рублей покажет прибыль в 20 рублей. Однако, если по методу ФИФО были списаны товары, купленные по 100 рублей, то вы на самом деле получили убыток в 30 рублей. Учетная себестоимость учитывает выбранный метод списания (ФИФО, средняя за месяц, скользящая средняя) и дает истинную картину.

Основным источником данных для учетной себестоимости является регистр накопления СебестоимостьТоваров. Этот регистр хранит информацию о стоимости товаров в разрезе партий (если ведется партионный учет) и позволяет получить себестоимость по выбранному методу учета.

Разберем по шагам, как это реализовать в СКД:

  1. Используем виртуальные таблицы регистра СебестоимостьТоваров. Для получения данных о себестоимости нам подойдут следующие виртуальные таблицы:
    • Обороты: Позволяет получить обороты по себестоимости за период, что идеально подходит для анализа продаж.
    • ПартииТоваров: Если требуется детальный партионный учет (например, по ФИФО), эта таблица может предоставить информацию о партиях и их стоимости.

    Наиболее универсальным для этой задачи является использование виртуальной таблицы Обороты регистра СебестоимостьТоваров.

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

    Обратите внимание: Мы отбираем ВидДвиженияНакопления.Расход, так как именно он соответствует списанию себестоимости при продаже.

  2. Совмещаем данные о продажах и себестоимости. В данном случае часто можно обойтись одним набором данных, если документ продажи является источником движения по регистру СебестоимостьТоваров. Мы можем добавить к этому запросу информацию о цене продажи из регистра ПродажиОбороты или из документов реализации.

    Пример объединения данных о продажах (выручке) и себестоимости:

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

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

  3. Настраиваем поля и ресурсы. После получения данных мы можем вывести Номенклатура, Дата, Количество, СуммаПродажи и Себестоимость. Дополнительно можно рассчитать Прибыль = СуммаПродажи - Себестоимость и Рентабельность = Прибыль / СуммаПродажи * 100 как вычисляемые поля или ресурсы отчета.

Важные аспекты при работе с регистром СебестоимостьТоваров:

  1. Регламентные операции: Для корректного расчета себестоимости в 1С:УТ 11.5 крайне важно, чтобы регулярно выполнялись регламентные операции по расчету себестоимости товаров. Эти операции могут запускаться по расписанию (например, в конце дня, недели, месяца) или вручную. Если расчет себестоимости не выполнен, данные в отчете могут быть некорректными или отсутствовать.
  2. Методы учета: Убедитесь, что в настройках вашей учетной политики установлен нужный метод учета себестоимости (ФИФО, средняя за месяц, скользящая средняя). Выбор метода напрямую влияет на значения в регистре СебестоимостьТоваров.
  3. Партионный учет: Если в организации ведется партионный учет (например, по ФИФО), то одна и та же номенклатура, проданная в один день, могла быть списана из разных партий с разной закупочной ценой. В таком случае, отчет может выводить одну и ту же номенклатуру несколькими строками, каждая из которых будет соответствовать конкретной партии и ее закупочной цене/себестоимости.

Построение отчета в СКД

Независимо от выбранного подхода, работа в Системе Компоновки Данных будет включать общие шаги:

  1. Создание схемы компоновки данных: Откройте конфигуратор, найдите нужный объект (например, отчет) или создайте новый. Перейдите на вкладку "Система компоновки данных".
  2. Добавление наборов данных: Добавьте один или несколько наборов данных, используя рассмотренные выше запросы. Если используете несколько наборов, не забудьте настроить связи.
  3. Настройка параметров: Определите параметры отчета, такие как &НачалоПериода и &КонецПериода.
  4. Настройка полей и ресурсов: Выберите поля, которые будут отображаться в отчете. Определите ресурсы (суммируемые поля), такие как Количество, СуммаПродажи, Себестоимость. Для полей, которые нужно усреднить (например, цена продажи за единицу или себестоимость за единицу), используйте выражение Сумма(СуммаПродажи) / Сумма(Количество).
  5. Настройка группировок: Сгруппируйте данные по Дата и Номенклатура, чтобы получить детализацию по дням и позициям.
  6. Настройка макетов: При необходимости настройте пользовательские макеты для более удобного отображения информации.

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

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

← На главную