К статье
Практический материал

Отчеты и Аналитика · 11 мин

1С СКД: как убрать дубли строк в отчете

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

Дубли строк в отчете на системе компоновки данных (СКД) — одна из самых частых проблем при разработке отчетов в 1С. Пользователь видит повторяющиеся номенклатурные позиции, контрагентов или документы, суммы «размножаются», а итоги перестают сходиться с первичными данными. Причина почти всегда лежит не в «глюке» платформы, а в логике построения запроса, соединений наборов данных или настроек группировок.

Важно понимать: СКД не «добавляет» строки сама по себе. Она выводит ровно то, что вернул запрос или что получилось при соединении наборов данных. Поэтому устранение дублей начинается с диагностики: определяем, на каком уровне появляется задвоение — в запросе, в связях наборов, в ресурсах или в детализации группировок.

Ниже разобраны основные причины дублей и конкретные способы их устранения: от настройки группировок и ресурсов до исправления запросов и связей наборов данных. Материал ориентирован на разработчиков и продвинутых пользователей, работающих с конструктором СКД в конфигураторе или в режиме «Предприятие» через расширенные настройки отчета.

Как определить источник дублей: запрос, связи или настройки

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

Быстрый способ проверки — выполнить текст запроса из схемы компоновки в консоли запросов с теми же параметрами. Если дубли видны уже там, проблема в запросе, и настройки СКД трогать бессмысленно. Если в консоли данных чисто, а в отчете дубли — ищите причину в связях наборов данных или в структуре варианта.

Строки полностью идентичныДубль в данных

Проверяйте запрос и соединения таблиц в нем

Строки отличаются одним полемЛишняя детализация

Проверяйте группировки и поля, вытащенные в настройки

Дубли только при соединении наборовСвязь наборов данных

Проверяйте выражение связи и параметры связи

Суммы задвоены, строк нетРесурсы и итоги

Проверяйте выражение ресурса и группировки расчета

Убираем дубли на уровне запроса

Самая частая причина — соединение таблиц с кратностью «один ко многим». Классический пример: к таблице товаров документа присоединяют таблицу серий или штрихкодов без дополнительных условий. Каждая строка товара умножается на количество связанных строк, и в отчете появляются «дубли».

Порядок действий в этом случае такой. Во-первых, проверьте все левые соединения: для каждого задайте вопрос «может ли по этому условию вернуться больше одной строки?». Если да — либо добавьте условия, сужающие связь до одной строки, либо предварительно сгруппируйте присоединяемую таблицу во вложенном запросе. Во-вторых, не злоупотребляйте конструкцией РАЗЛИЧНЫЕ: она маскирует проблему, но может скрыть реальные ошибки в логике и замедлить выполнение на больших объемах.

Типовой прием — заменить прямое соединение на вложенный запрос с группировкой:

ЛЕВОЕ СОЕДИНЕНИЕ

(ВЫБРАТЬ

Штрихкоды.Номенклатура КАК Номенклатура,

МАКСИМУМ(Штрихкоды.Штрихкод) КАК Штрихкод

ИЗ

РегистрСведений.Штрихкоды КАК Штрихкоды

СГРУППИРОВАТЬ ПО

Штрихкоды.Номенклатура) КАК Штрихкоды

ПО Товары.Номенклатура = Штрихкоды.Номенклатура

После такой группировки на каждую номенклатуру гарантированно приходится одна строка, и умножение записей исчезает. Аналогично поступают с договорами, основными складами, ответственными лицами и любыми справочными данными, где по бизнес-логике нужно одно значение.

bsl
ВЫБРАТЬ РАЗЛИЧНЫЕ
	Продажи.Номенклатура КАК Номенклатура,
	СУММА(Продажи.Количество) КАК Количество
ИЗ
	РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
	Продажи.Номенклатура

Устраняем дубли через группировки и структуру варианта

Если данные в запросе корректны, но пользователь видит повторы, причина обычно в структуре отчета. Например, в группировку по номенклатуре случайно добавлено поле «Склад» или «Характеристика», либо в выбранные поля вытащен регистратор, и СКД честно разворачивает данные по каждому его значению.

Откройте настройки варианта отчета и проверьте три вещи. Первое — состав группировок: уберите из группировки поля, по которым детализация не нужна; если детализация нужна только в отдельном сценарии, создайте вложенную группировку, а не тащите поле на верхний уровень. Второе — выбранные поля: поле, добавленное в выборку на уровне детальных записей, может провоцировать разворот строк. Третье — автополя: если в группировке стоит «Авто», СКД подтягивает поля из ресурсов и порядка, что иногда дает неожиданную детализацию.

Дубли при соединении нескольких наборов данных

Когда отчет строится на объединении или соединении нескольких наборов (например, план и факт, продажи и остатки), дубли почти всегда рождаются на вкладке «Связи наборов данных». Если выражение связи не обеспечивает однозначное соответствие, СКД перемножает строки наборов.

Ключевые правила здесь следующие. Связь должна идти по полному набору измерений, который определяет уникальность строки: если аналитика ведется по номенклатуре и складу, связывать только по номенклатуре — ошибка. При необходимости добавляйте несколько связей между одними и теми же наборами по разным полям. Также проверьте параметры связи: если в дочернем наборе есть отбор по параметру, который не передан через связь, результат может расшириться неожиданным образом.

Альтернатива связям наборов — собрать все данные одним запросом с объединениями и полными соединениями внутри текста запроса. Это сложнее в написании, но дает полный контроль над кратностью и часто работает быстрее, потому что соединение выполняется на стороне СУБД, а не механизмом компоновки.

Ресурсы, итоги и «ложные» дубли сумм

Отдельный класс проблем — когда строки не повторяются визуально, но итоги завышены ровно в два-три раза. Это признак того, что ресурс рассчитывается неправильно: например, в выражении ресурса стоит Сумма(Количество), но группировки расчета ресурса настроены так, что сумма берется с уровня, где данные уже задвоены соединением.

Проверьте на вкладке «Ресурсы» выражение каждого ресурса и поля группировки, по которым он рассчитывается. Для ресурсов-остатков используйте правильные функции: КонечныйОстаток и НачальныйОстаток нельзя просто суммировать по периодам — нужны соответствующие выражения СКД. Если ресурс должен показывать количество уникальных значений (например, число документов), используйте Количество(Различные Документ) вместо обычной суммы.

Типичные ошибки
01
Добавление РАЗЛИЧНЫЕ в запрос без поиска причины — дубли визуально исчезают, но суммы остаются неверными
02
Связь наборов только по части измерений — строки перемножаются по неучтенной аналитике
03
Суммирование остатков по периодам вместо функций остатков — итоги завышены
04
Поле регистратора в выбранных полях при сводном отчете — детализация разворачивает строки
05
Исправление в режиме Предприятия без сохранения варианта — настройки теряются у других пользователей

Проверка результата и границы самостоятельной работы

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

Работайте на копии базы или в тестовом контуре, особенно если меняете схему компоновки встроенного отчета конфигурации. Изменение типовых отчетов напрямую в конфигураторе усложняет обновление; предпочтительный путь — внешний отчет или расширение конфигурации. Перед изменениями сохраните исходную схему в файл, чтобы иметь возможность откатиться.

Контрольные точки

Как проверить результат

Итог отчета против типового отчета по регистру
Норма

Суммы совпадают до копейки

Тревожный признак

Расхождение даже на небольшую сумму

Количество строк по одному элементу
Норма

Элемент встречается один раз в своей группировке

Тревожный признак

Повторы с идентичными значениями

Отчет при разных отборах и периодах
Норма

Структура стабильна, дублей нет

Тревожный признак

Дубли появляются на отдельных периодах

Время формирования
Норма

Сопоставимо с типовыми отчетами

Тревожный признак

Резкий рост после добавления РАЗЛИЧНЫЕ

Частые вопросы

Помогает ли флажок «РАЗЛИЧНЫЕ» в запросе убрать дубли?

Только визуально и только если дубли полностью идентичны по всем выбранным полям. Если задвоение вызвано соединением «один ко многим», агрегатные суммы могут остаться неверными. Правильный подход — найти и исправить соединение, а РАЗЛИЧНЫЕ использовать осознанно, когда повторы допустимы по логике данных.

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

Чаще всего причина в персональных настройках варианта отчета: пользователь добавил лишнее поле в группировку или выборку. Сбросьте настройки на стандартные через «Еще — Изменить вариант» или сравните его настройки с эталонными. Реже причина в разных правах (RLS), меняющих состав доступных данных.

Как убрать дубли в отчете без доступа к конфигуратору?

Откройте расширенные настройки отчета (кнопка «Настройки» или «Изменить вариант»), уберите лишние поля из группировок и выбранных полей, проверьте структуру вложенных группировок. Если дубль заложен в самом запросе схемы, без доработки схемы в конфигураторе или через расширение обойтись нельзя.

Чем отличается объединение наборов от соединения в СКД?

Объединение складывает строки наборов друг под другом (как ОБЪЕДИНИТЬ в запросе) и не создает перемножения. Соединение связывает строки по условию, и при неоднозначной связи строки перемножаются — именно это порождает дубли. Если наборы независимы и их нужно просто вывести вместе, используйте объединение.

Почему итог задвоен, хотя строки в отчете не повторяются?

Вероятно, ресурс рассчитывается на уровне группировки, где данные уже задвоены скрытым соединением, либо в выражении ресурса суммируется поле, которое само получено умножением строк. Проверьте выражение ресурса и список группировок, по которым он вычисляется, на вкладке «Ресурсы» схемы компоновки.

Можно ли убрать дубли через итоги по группировке вместо исправления запроса?

Иногда да: если детализация не нужна, достаточно поднять данные на уровень группировки и считать ресурсы агрегатами. Но это работает только когда сам запрос возвращает корректные детальные данные. Если в запросе перемножение строк, группировка лишь спрячет проблему, а суммы придется перепроверять отдельно.

Итог

Что важно запомнить

Дубли в СКД — это следствие, а не болезнь: ищите причину по цепочке «запрос → связи наборов → ресурсы → структура варианта». Проверяйте результат сверкой итогов с независимым источником и вносите изменения на копии базы или через расширение.