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