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