Как правильно рассчитать средний чек в 1С:Управление торговлей 11?

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

При построении отчетов в СКД многие разработчики совершают типичную ошибку — обращаются напрямую к табличным частям документов РеализацияТоваровУслуг или ПриходныйКассовыйОрдер. Это приводит к тому, что отчеты работают медленно, а данные оказываются неполными или неверными из-за разрывов в датах проведения оплат, наличия возвратов или сторнирующих записей. Давайте разберем, как построить надежный механизм расчета среднего чека.

Почему не стоит использовать документы в качестве источника данных?

Когда мы работаем с документами напрямую, мы сталкиваемся с тремя критическими проблемами:

Используем регистры накопления — архитектурный подход

Профессиональный подход в 1С предполагает работу с регистрами. Для анализа продаж основным источником является регистр накопления Продажи. Он содержит уже свернутые данные, включая суммы, количества и ссылки на документы-регистраторы.

Разберем, как составить запрос, объединяющий розничные Чеки ККМ и оптовые продажи. Мы используем оператор ОБЪЕДИНИТЬ ВСЕ для приведения разных источников данных к единому виду.

Пример реализации запроса через объединение

Рассмотрим структуру запроса, которая позволяет собрать данные из разных источников и привести их к общему знаменателю для расчета среднего чека:


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

ОБЪЕДИНИТЬ ВСЕ 

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

Как правильно учитывать возвраты и оплаты

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

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

Используя этот подход, вы избавитесь от необходимости «вылавливать» документы с поздними датами — данные в регистрах накопления формируются в момент проведения документа, и вы всегда работаете с актуальным состоянием взаиморасчетов.

Рекомендации по настройке СКД

Когда данные подготовлены через регистры, перенесите их в СКД. В настройках отчета используйте:

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

← На главную