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