При доработке типового отчета Валовая прибыль в конфигурации 1С:Управление торговлей 11 часто возникает необходимость включить в расчет дополнительные коммерческие расходы — например, стоимость доставки за счет продавца. Если расходы регистрируются с детализацией только до клиента (партнера), а продажи в отчете выводятся до уровня конкретного заказа и номенклатуры, стандартное соединение таблиц в запросе приводит к многократному завышению расходов, искажению себестоимости и некорректному расчету рентабельности.
Разберем подробно, почему возникает эта ошибка в схеме компоновки данных (СКД), и рассмотрим несколько способов ее решения.
Проанализируем механику возникновения ошибки при попытке объединить продажи и расходы в одном отчете:
ВыручкаИСебестоимостьПродаж детализированы до уровня ЗаказКлиента и Номенклатура. Данные по дополнительным затратам берутся с аналитикой только до Партнер и Организация. При использовании операции ЛЕВОЕ СОЕДИНЕНИЕ в тексте одного SQL-запроса сумма расхода партнера дублируется на каждую строку номенклатуры, проданную этому клиенту.ПрочиеРасходы полностью списывается и закрывается при распределении затрат на финансовый результат. Если отчет обращается к остаткам регистра, то после выполнения регламентных процедур закрытия периода данные о расходах перестанут попадать в отчет.Рассмотрим наиболее правильный способ интеграции данных разного уровня детализации средствами схемы компоновки данных без прямого соединения таблиц в SQL-запросе.
Разберем по шагам настройку схемы компоновки данных:
НаборДанныхПродажи — выбирает данные из регистра ВыручкаИСебестоимостьПродажОбороты с полями Организация, Партнер, ЗаказКлиента, Номенклатура, Выручка, Себестоимость.НаборДанныхРасходы — выбирает обороты расходов по полям Организация, Партнер, СуммаРасходов.НаборДанныхПродажи (источник) с НаборДанныхРасходы (приемник) по полям Организация и Партнер.СуммаРасходов с явным указанием уровней группировки:
Сумма(СуммаРасходов)
В колонке Рассчитывать по... указываем только группировки Партнер, Организация и ОбщийИтог. Для группировок ЗаказКлиента и Номенклатура расчет оставляем отключенным.
СуммаРасходов.Если в отчете используется единый запрос с левым соединением, сумму расходов необходимо скорректировать на уровне языка выражений СКД, исключив дублирование при суммировании итогов.
Рассмотрим пример настройки выражения ресурса на вкладке Ресурсы для поля расходов:
Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(СуммаРасходов)", "Партнер"))
Выясним, как работает это выражение: функция ВычислитьВыражениеСГруппировкойМассив берет максимальное (не продублированное) значение расхода для каждого уникального партнера, помещает его в массив, а внешняя функция Сумма() складывает полученные значения для вышестоящих группировок и общего итога отчета.
Проанализируем типовые возможности программы, которые позволяют избежать нетиповых доработок отчетов.
СтатьиРасходов для доставки настраиваем:
На финансовый результат (расходы текущего периода).Расходы на продажу.Заказ клиента или Реализация товаров и услуг.ПриобретениеУслугИПрочихАктивов относит расходы напрямую на конкретную сделку, что обеспечивает одинаковую гранулярность данных с продажами.
ЗакрытиеМесяца.