В практической работе торговых компаний часто возникает задача оценки потенциальной или промежуточной прибыли по заказам, которые еще не были отгружены клиентам, но по которым уже получена полная или частичная предоплата. Менеджеры и руководители хотят видеть эти данные в едином отчете по валовой прибыли — для этого подойдёт оперативный дашборд руководителя с показателями продаж и прибыли. Однако при попытке настроить стандартный отчет «Валовая прибыль предприятия» в конфигурации 1С:Управление торговлей 11 (УТ 11) пользователи сталкиваются с тем, что неотгруженные заказы туда просто не попадают.
В этой статье мы подробно разберем, почему типовая конфигурация работает именно так, рассмотрим альтернативные стандартные механизмы оценки рентабельности и предоставим готовое техническое решение для создания собственного отчета на схеме компоновки данных (СКД).
Для начала выясним причину такого поведения системы с точки зрения методологии учета. В 1С:УТ 11 финансовый результат (выручка, себестоимость и, как следствие, валовая прибыль) рассчитывается по методу начисления (по отгрузке).
Это означает следующее:
Реализация товаров и услуг. До момента проведения реализации любые полученные от клиента деньги (даже 100% предоплата) считаются авансом (кредиторской задолженностью компании перед клиентом) и не являются выручкой.Основным источником данных для отчета «Валовая прибыль» является оборотный регистр накопления ВыручкаИСебестоимостьПродаж. Записи в этот регистр делают исключительно документы отгрузки (Реализации, Акты выполненных работ, Выкупы). Документ Заказ клиента сам по себе движений по этому регистру не производит, поэтому стандартный отчет физически не может увидеть неотгруженные заказы.
Некоторые компании пытаются решить проблему организационным путем: запрещают проводить заказы до тех пор, пока не поступит оплата. Проанализируем эту ситуацию. Такой подход является крайне ошибочным и ломает всю логику работы цепочки продаж в 1С:УТ 11.
Если заказ клиента не проведен:
Следовательно, проведение заказа и факт его оплаты должны оставаться независимыми процессами.
Если вам нужно оценить маржинальность конкретной сделки до того, как она будет отгружена, рассмотрим подробнее типовой инструмент 1С — есть готовый расчет маржинальности в заказе по последней закупке для 1С:УТ 11. В самом документе Заказ клиента предусмотрен встроенный отчет.
Пошаговый алгоритм для просмотра рентабельности заказа:
Заказ клиента — для этой задачи есть расширение с аналитикой цен и наценки в форме заказа 1С:УТ 11.Этот отчет рассчитывает плановую себестоимость и выводит предполагаемую прибыль — для этого также есть анализ рентабельности и прибыли в 1С:УТ 11 без закрытия месяца. Настройку расчета плановой себестоимости для этого отчета можно задать в меню: НСИ и администрирование -> Настройка разделов -> Продажи -> Оптовые продажи -> Правила оценки рентабельности продаж. Здесь можно указать, рассчитывать ли рентабельность по расчетной себестоимости (из закрытия предыдущего месяца) либо по определенному нормативному виду цен (например, «Закупочная»).
Если стандартный отчет по одному заказу вам не подходит и требуется общая картина по всем менеджерам и заказам (включая оплаченные, но не отгруженные), единственным верным решением будет создание внешнего отчета на базе Системы компоновки данных (СКД) — для этого подойдёт внешний отчет по валовой прибыли по заказам без отгрузки. Разберем по шагам, как спроектировать такой отчет.
ВыручкаИСебестоимостьПродаж.Для реализации этой логики нам потребуется объединить данные из нескольких источников. Ниже представлен пример структуры запроса, который можно использовать в наборе данных СКД.
ВЫБРАТЬ
ЗаказКлиента.Менеджер КАК Менеджер,
ЗаказКлиента.Ссылка КАК ЗаказКлиента,
ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
ЗаказКлиентаТовары.Количество КАК Количество,
ЗаказКлиентаТовары.Сумма КАК Выручка,
// Вычисляем плановую себестоимость по последней закупке
ЕСТЬNULL(ПоследниеЗакупки.ЦенаЗакупки * ЗаказКлиентаТовары.Количество, 0) КАК Себестоимость
ПОМЕСТИТЬ ВТ_НеотгруженныеЗаказы
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента
ПО ЗаказКлиентаТовары.Ссылка = ЗаказКлиента.Ссылка
// Соединяем с регистром расчетов, чтобы проверить оплату
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСКлиентами.Остатки КАК РасчетыОстатки
ПО РасчетыОстатки.АналитикаУчетаПоПартнерам.ОбъектРасчетов = ЗаказКлиента.Ссылка
// Левое соединение для получения последней цены закупки товара
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
Закупки.Номенклатура КАК Номенклатура,
МАКСИМУМ(Закупки.Ссылка.Дата) КАК ДатаЗакупки,
СРЕДНЕЕ(Закупки.Цена) КАК ЦенаЗакупки
ИЗ
Документ.ПриобретениеТоваровУслуг.Товары КАК Закупки
ГРУППИРОВАТЬ ПО
Закупки.Номенклатура
) КАК ПоследниеЗакупки ПО ЗаказКлиентаТовары.Номенклатура = ПоследниеЗакупки.Номенклатура
ГДЕ
ЗаказКлиента.Проведен = ИСТИНА
И НЕ ЗаказКлиента.Ссылка В (
ВЫБРАТЬ РАЗЛИЧНЫЕ
Реализация.ЗаказКлиента
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Проведен = ИСТИНА
)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПродажиОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
ПродажиОбороты.ЗаказКлиента КАК ЗаказКлиента,
ПродажиОбороты.ЗаказКлиента.Менеджер КАК Менеджер,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.ВыручкаОборот КАК Выручка,
ПродажиОбороты.СебестоимостьОборот КАК Себестоимость
ПОМЕСТИТЬ ВТ_ОтгруженныеПродажи
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВсеДанные.Менеджер КАК Менеджер,
ВсеДанные.ЗаказКлиента КАК ЗаказКлиента,
ВсеДанные.Номенклатура КАК Номенклатура,
СУММА(ВсеДанные.Количество) КАК Количество,
СУММА(ВсеДанные.Выручка) КАК Выручка,
СУММА(ВсеДанные.Себестоимость) КАК Себестоимость,
СУММА(ВсеДанные.Выручка) - СУММА(ВсеДанные.Себестоимость) КАК ВаловаяПрибыль
ИЗ
(
ВЫБРАТЬ * ИЗ ВТ_НеотгруженныеЗаказы
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ * ИЗ ВТ_ОтгруженныеПродажи
) КАК ВсеДанные
ГРУППИРОВАТЬ ПО
ВсеДанные.Менеджер,
ВсеДанные.ЗаказКлиента,
ВсеДанные.Номенклатура
Предложенный выше запрос решает базовую задачу объединения данных по отгруженным продажам и оплаченным, но еще неотгруженным заказам. Однако при промышленной эксплуатации отчета рекомендуем учесть следующие нюансы:
РасчетыСКлиентами. Если по заказу пришел аванс в размере 10%, возможно, вы захотите пропорционально уменьшить отражаемую «виртуальную» выручку. Для этого в СКД необходимо будет добавить поле коэффициента оплаты: СуммаОплаты / СуммаДокумента.ПриобретениеТоваровУслуг может замедлить работу отчета на больших базах данных. Более производительным решением будет использование цен из регистра сведений ЦеныНоменклатуры по конкретному виду цен (например, «Закупочная»), получая срез последних на дату заказа клиента.Используя данный подход на СКД, вы получите гибкий инструмент для контроля маржинальности сделок на любом этапе их выполнения — от получения первой предоплаты до фактического перехода права собственности на товар.