Разработка отчетов на схеме компоновки данных (СКД) в 1С — это процесс, требующий понимания того, как платформа преобразует исходный запрос под капотом. Очень часто разработчики сталкиваются с ситуацией, когда запрос, запущенный в Консоли запросов, возвращает полные и корректные данные, но при переносе этого же запроса в СКД колонка со значениями (например, показатели датчиков, пробега или счетчиков) остается абсолютно пустой или вовсе исчезает из результирующего отчета. Особенно часто это происходит при работе с регистрами сведений, такими как уатСчетчикиТС в отраслевых решениях для управления автотранспортом.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы СКД и пошагово исправим все возможные ошибки настройки.
Когда мы выполняем запрос в консоли, платформа выполняет его «как есть» — напрямую обращается к СУБД с жестко заданными параметрами. СКД же работает иначе. Она является декларативной системой: ваш запрос для нее — лишь декларация намерений. Перед отправкой запроса в базу данных СКД полностью перестраивает его, ориентируясь на настройки компоновки: группировки, выбранные поля, отборы и параметры. Если настройки выполнены некорректно, СКД может просто исключить «лишние» с ее точки зрения поля или вернуть пустой результат.
Рассмотрим детально основные причины, по которым колонка со значением может не выводиться в отчет, и методы их решения.
Самая банальная и наиболее распространенная причина — отсутствие полей в настройках вывода или некорректная структура группировок. Если в схеме компоновки данных определен набор данных, но на вкладке «Настройки» не настроена структура, отчет будет пустым.
Давайте разберем, как правильно настроить структуру вывода:
ТС (Транспортное средство), то обычные реквизиты (такие как Значение счетчика или Период) не выведутся в строках группировок автоматически. Для их отображения нужно либо раскрывать группировку до детальных записей, либо рассчитывать их как ресурсы.ТС, ТипСчетчика, Значение и Период. Если это окно пустое, то СКД просто не поймет, какие колонки нужно вывести пользователю на экран.Очень часто разработчики совершают ошибку при работе с параметрами виртуальных таблиц в СКД, пытаясь накладывать условия через секцию ГДЕ или передавая параметры напрямую, как в обычном запросе:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
уатСчетчикиТС.Период КАК Период,
уатСчетчикиТС.ТС КАК ТС,
уатСчетчикиТС.Значение КАК Значение
ИЗ
РегистрСведений.уатСчетчикиТС КАК уатСчетчикиТС
ГДЕ
уатСчетчикиТС.Период = &ДатаОкончания
Такой подход в корне неверен по двум причинам. Во-первых, обращение идет к физической таблице регистра вместо виртуальной, что крайне неоптимально для производительности. Во-вторых, фильтрация по равенству периода лишает нас смысла получения именно «среза последних» на определенную дату.
Правильный запрос должен использовать виртуальную таблицу СрезПоследних. При этом параметры виртуальной таблицы СКД умеет определять автоматически. Для стабильной работы рекомендуется использовать фигурные скобки, которые указывают СКД на возможность гибкого управления параметрами:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
уатСчетчикиТССрезПоследних.Период КАК Период,
уатСчетчикиТССрезПоследних.ТС КАК ТС,
уатСчетчикиТССрезПоследних.ТипСчетчика КАК ТипСчетчика,
уатСчетчикиТССрезПоследних.Значение КАК Значение
ИЗ
РегистрСведений.уатСчетчикиТС.СрезПоследних({(&Период)}, {TS КАК ТС}) КАК уатСчетчикиТССрезПоследних
В этом случае СКД свяжет стандартный параметр компоновки Период с параметром виртуальной таблицы. Обязательно проверьте вкладку «Параметры» в СКД: убедитесь, что для параметра Период (или используемого вами имени даты) не стоит флаг «Ограничение доступности», мешающий пользователю или системе установить его значение при запуске отчета.
Если в вашем отчете используется группировка по транспортному средству (поле ТС), а поле Значение (показание счетчика) вы хотите видеть в этой же строке группировки, СКД не выведет его, пока вы не объявите это поле ресурсом.
Выясним, как это исправить:
Значение в правое окно доступных ресурсов.Максимум(Значение) или Сумма(Значение) (в зависимости от бизнес-логики счетчика).После этого СКД сможет рассчитать и отобразить значение ресурса на уровне группировок любого порядка, а не только в детальных записях.
Если технически отчет настроен абсолютно верно, но колонка со значениями по-прежнему пуста у рядовых пользователей (при этом у администратора с полными правами все работает), проблема кроется в правах доступа (ролях) или механизме RLS (Row-Level Security).
Для чтения данных из регистра сведений пользователю необходимы не просто права на чтение самого регистра, но и права на «Просмотр» конкретного реквизита Значение. Если в роли конфигуратора снят флаг «Просмотр» для этого поля, СКД молча исключит его из выборки, не выдавая никаких ошибок доступа.
Также в отраслевых решениях (например, линейки «Управление автотранспортом») поля могут быть связаны с функциональными опциями. Если в настройках системы отключен функционал ведения учета по конкретным счетчикам, платформа автоматически скрывает связанные реквизиты из всех отчетов СКД.
Часто в процессе разработки мы меняем структуру СКД: добавляем новые поля, переименовываем их или меняем настройки вывода. Однако при запуске отчета в режиме «1С:Предприятие» изменения могут не примениться.
Это связано с тем, что система кэширует настройки отчета для каждого конкретного пользователя. Чтобы применить новую схему компоновки, необходимо сбросить кэш настроек. Для этого в форме отчета нажмите кнопку «Еще» -> «Установить стандартные настройки». Данное действие заставит СКД перечитать структуру схемы из конфигурации с нуля.