При разработке внешних отчетов в системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда результат вывода содержит дублирующиеся строки. Особенно часто это происходит при комбинировании внешних наборов данных (ТаблицаЗначений) и стандартных запросов к виртуальным таблицам. В этой статье мы подробно разберем, почему возникает эффект «1 1, 2 2, 3 3» в детальных записях, и как устранить эту проблему шаг за шагом.
Как показывает практика и опыт участников обсуждения, одной из самых коварных причин «глюков» в СКД является кэширование. Даже если вы исправили ошибку в схеме компоновки данных, система может продолжать использовать старую структуру, сохраненную в локальном кэше пользователя или в настройках варианта отчета.
Проанализируем ситуацию: если системное поле Номер по порядку выводится одинаковым для двух идущих подряд строк, это означает, что сама СКД воспринимает эти записи как одну и ту же строку данных, но по какой-то причине отрисовывает ее дважды.
Как решить проблему через очистку:
%AppData%\1C\1Cv8).Рассмотрим случай, когда вы используете Набор данных - объект (внешняя таблица) и Набор данных - запрос (например, к таблице ХозрасчетныйОстаткиИОбороты). При настройке связей на соответствующей вкладке СКД важно помнить следующее:
Связь в СКД работает по принципу LEFT JOIN. Если в ведомом наборе (запросе) по полям связи находится более одной записи, количество строк в итоговом результате увеличится. Выясним, по каким полям настроена связь. Если вы связываете данные только по полю Счет, но не учитываете Субконто или Организацию, то на каждую строку из внешнего набора прилетят все варианты аналитики из запроса.
Рекомендации по настройке связей:
ТаблицеЗначений. Если колонка в ТЗ не имеет четко заданного типа (ОписаниеТипов), СКД может некорректно сопоставить ее с полями из базы данных, что приведет к непредсказуемым результатам при объединении.Виртуальные таблицы регистров бухгалтерии, такие как ХозрасчетныйОстаткиИОбороты, крайне чувствительны к параметрам. Если в запросе выбрана периодичность (например, «День» или «Авто»), а в настройках отчета эти поля не выведены в группировки, записи будут визуально дублироваться. На самом деле это будут разные записи за разные даты, которые в «Детальных записях» выглядят одинаково.
Разберем пример запроса:
|ВЫБРАТЬ
| ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
| ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
| ХозрасчетныйОстаткиИОбороты.СуммаОборот КАК СуммаОборот
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , , , ) КАК ХозрасчетныйОстаткиИОбороты
Если за указанный период было несколько движений в разные дни, параметр Авто заставит таблицу вернуть строки по каждому периоду. Чтобы этого избежать, установите периодичность в значение Период (что означает получение итогов за весь указанный интервал одной строкой).
Существует специфическая особенность (баг) некоторых версий платформы: если в настройках отчета на вкладке Другие настройки параметр Расположение итогов установлен в значение Конец, при выводе детальных записей может происходить их удвоение. Попробуйте изменить это значение на Начало или Нет и проверьте результат.
Посмотрим на закладку Наборы данных. У каждого поля есть колонка Роль. Для корректной работы СКД при соединении наборов данных важно правильно расставить роли:
Счет помечено как измерение.Если вы столкнулись с задваиванием, выполните следующие действия:
ПриКомпоновкеРезультата выгрузите вашу ТаблицуЗначений в отладчике и убедитесь, что в ней нет дублей.Соблюдение этих правил и внимательный анализ связей наборов данных позволяют избежать большинства проблем с корректностью вывода данных в 1С.