Сталкивались ли вы с ситуацией, когда в отчете по продажам, сформированном за один и тот же период с одинаковыми отборами, итоговая сумма магическим образом меняется, как только вы добавляете новую группировку? Например, вы смотрите общие продажи, видите одну сумму, добавляете группировку по родительской папке номенклатуры — и сумма становится другой. Это одна из самых частых и запутанных проблем при работе с отчетами на системе компоновки данных (СКД) в 1С. Давайте вместе разберемся, почему так происходит и как найти причину.
Проанализируем конкретный случай: пользователь формирует отчет по продажам, чтобы увидеть чистую выручку без возвратов. Для этого используется поле Стоимость оборот. Пока отчет сформирован без дополнительных группировок, итоговая сумма верна. Но как только добавляется группировка по полю Родитель номенклатуры, итоговая сумма уменьшается на несколько тысяч. Период и отборы при этом остаются неизменными.
Выясним, в чем может быть причина и как провести диагностику.
Прежде чем перейти к нашему конкретному случаю, рассмотрим самую распространенную причину изменения итогов. В 90% случаев, когда суммы увеличиваются, виновато «размножение» строк из-за соединений таблиц в запросе отчета.
Представим, что отчет строится на данных из двух таблиц: "Продажи" и "Характеристики номенклатуры".
Когда вы формируете отчет просто по номенклатуре, вы видите одну строку: "Ноутбук — 100 000 руб." Но как только вы добавляете группировку по характеристикам, СКД для построения отчета соединяет эти таблицы. В результате получается две строки:
Итоговая сумма внезапно становится 200 000 руб. вместо 100 000. Это происходит потому, что сумма продажи была "размножена" для каждой связанной с ней характеристики. Хотя в нашем случае сумма уменьшается, этот механизм важно понимать, так как он лежит в основе многих проблем с СКД.
В нашем случае сумма не увеличивается, а уменьшается, что делает ситуацию менее тривиальной. Проблема, скорее всего, кроется в логике расчета ресурса Стоимость оборот в контексте новой группировки. Давайте проведем расследование по шагам.
Это первый и самый важный шаг, который был предложен на форуме. Идея состоит в том, чтобы временно упростить отчет и понять, какой именно элемент вызывает расхождение.
Стоимость оборот.Сумма продажи или Стоимость, и для него установите агрегатную функцию Сумма.Анализируем результат:
Стоимость оборот. СКД по-разному вычисляет его для отчета в целом и для группировки Родитель.Чтобы понять, не меняется ли состав данных, добавим в отчет счетчик записей. Это поможет наглядно увидеть, происходит ли дублирование или, наоборот, потеря строк.
Количество(*) или Количество(Различные ДокументПродажи). Это подсчитает количество строк или уникальных документов.Если количество записей меняется, это прямое указание на то, что структура запроса при добавлении группировки меняется так, что это влияет на итоговый набор данных. Например, из-за особенностей соединений какие-то записи о продажах могут отфильтровываться, если для них не найден родитель номенклатуры.
Итак, если мы выяснили, что проблема именно в ресурсе Стоимость оборот, давайте разберем, почему его расчет может "сломаться".
1. Особенности работы виртуальных таблиц.
Поле Стоимость оборот, как правило, берется из виртуальной таблицы оборотов, например, Продажи.Обороты. У этой таблицы есть параметры, в том числе и "измерения" — поля, в разрезе которых считаются обороты. Когда вы добавляете в отчет группировку Номенклатура.Родитель, СКД может неявно изменить набор измерений для запроса к виртуальной таблице. Это, в свою очередь, может повлиять на итоговый расчет оборота, особенно если в системе есть сложные взаимосвязи, сторно-записи или возвраты.
2. Настройка расчета ресурсов "Рассчитывать по..."
В настройках ресурса в СКД есть важное поле "Рассчитывать по...". Оно указывает, по каким группировкам нужно вычислять данный ресурс. Если там жестко задан определенный набор полей (например, только Номенклатура), то при добавлении группировки Родитель эта логика может нарушиться, и СКД начнет считать итог некорректно или вообще перестанет его считать для верхнего уровня.
Проверьте эту настройку для ресурса Стоимость оборот. Часто помогает установка значения "Авто" или явное добавление всех нужных полей группировки.
3. Неявные отборы и условия связей
В схеме компоновки данных могут быть настроены связи между наборами данных с определенными условиями. Например, набор данных с продажами связывается со справочником номенклатуры. Если условие связи неполное (например, только по наименованию, а не по уникальному идентификатору), при добавлении поля из связанной таблицы (Родитель) могут возникнуть ошибки, которые отфильтруют часть данных.
Подведем итог: изменение итоговых сумм в отчетах при смене группировок — это симптом того, что логика получения или агрегации данных в СКД меняется. Проблема почти всегда кроется либо в "размножении" строк из-за соединений, либо в некорректном расчете сложных ресурсов в контексте новой структуры отчета. Путь к решению лежит через методичную диагностику: упрощайте отчет, добавляйте счетчики и анализируйте, на каком именно шаге возникает расхождение.