Разработка отчетов на Системе компоновки данных (СКД) — это процесс, который часто преподносит сюрпризы. Одна из самых распространенных и в то же время загадочных ситуаций: вы написали запрос, проверили его в консоли запросов, увидели корректные данные, но при запуске того же самого отчета в пользовательском режиме одна или несколько колонок остаются пустыми. При этом никаких ошибок система не выдает.
В этой статье мы подробно разберем, почему так происходит, и рассмотрим основные причины этого поведения, начиная от конфликтов в структуре наборов данных и заканчивая тонкими настройками прав доступа.
Рассмотрим ситуацию, когда в вашей схеме компоновки используется не один запрос, а несколько (например, два набора данных — объект или запрос). Как показывает практика практикующих разработчиков, это самая частая причина "пропажи" данных.
Если в разных наборах данных поля называются одинаково (например, и в Наборе1, и в Наборе2 есть поле Сумма), СКД может некорректно сопоставить эти поля при генерации итогового макета. В результате платформа может попытаться взять значение поля из того набора, где оно в данный момент равно NULL или просто не заполнено для данной строки.
Как решить:
Для всех полей во всех наборах данных необходимо задавать уникальные псевдонимы (имена полей компоновки). Если у вас есть два запроса, соединяемых в СКД, назовите поля максимально конкретно.
Например, вместо универсального названия:
// В первом наборе
ВЫБРАТЬ Продажи.Сумма КАК Сумма ...
// Во втором наборе
ВЫБРАТЬ Остатки.Сумма КАК Сумма ...
Используйте различающиеся псевдонимы:
// В первом наборе
ВЫБРАТЬ Продажи.Сумма КАК СуммаПродаж ...
// Во втором наборе
ВЫБРАТЬ Остатки.Сумма КАК СуммаОстатков ...
Это гарантирует, что компоновщик данных не "перепутает" источники и выведет именно те данные, которые вы ожидаете увидеть в конкретной колонке.
Проанализируем следующий важный момент: запрос, который вы видите в конфигураторе, — это еще не тот запрос, который исполняется в базе данных. СКД динамически перестраивает текст запроса в зависимости от выбранных полей, настроек группировок, отборов и параметров.
Чтобы понять, что именно идет не так, нужно увидеть результирующий запрос. Для этого опытные разработчики используют специальные инструменты, такие как Консоль компоновки данных (например, из состава инструментов разработчика — ИР). Это позволяет увидеть текст запроса со всеми временными таблицами и условиями, которые СКД добавила "от себя".
Разберем по шагам, что дает такой анализ:
ГДЕ были добавлены автоматически.Выясним, как настройки на вкладке "Наборы данных" влияют на видимость значений. У каждого поля в СКД есть свойство Роль. Если здесь допущена ошибка, данные могут исчезнуть.
Особое внимание уделите следующим флажкам в настройках роли:
Ситуация: в консоли запросов (запущенной под полными правами) данные есть, а у пользователя в отчете — нет. Это классический признак работы RLS (Row Level Security). В 1С СКД работает "молча": если у пользователя нет прав на чтение конкретной таблицы или даже отдельного поля (реквизита), участвующего в соединении, система не выдаст ошибку доступа. Она просто вернет NULL или пустую строку.
Проанализируем ситуацию: если ваше поле в отчете получается через точку (например, Номенклатура.СтавкаНДС), а у пользователя нет прав на справочник СтавкиНДС, то вся колонка будет пустой, хотя сама Номенклатура будет отображаться корректно.
Если в вашем отчете используется более одного набора данных, проверьте вкладку "Связи наборов данных". Важно помнить, что в СКД связи всегда работают по принципу ЛЕВОЕ СОЕДИНЕНИЕ. Первый набор данных в связке является ведущим.
Посмотрим на типичные ошибки в связях:
Складу или Организации) не выполняется, то данные из подчиненного набора не попадут в отчет, и колонка будет пустой.Числом и Строкой (даже если визуально они похожи) приведет к разрыву связи.Иногда колонка пуста, потому что она определена как вычисляемое поле или ресурс. Рассмотрим подробнее:
Если вы добавили поле в список "Ресурсы", оно перестает выводиться в секции "Детальные записи", если для него не настроен расчет. Также проверьте формулу вычисляемого поля. Обращение к реквизиту через пустую ссылку всегда дает пустой результат. Например, если формула выглядит как Контрагент.ОсновнойДоговор.Код, и у контрагента не выбран основной договор, вы не получите ошибку, а просто увидите пустую ячейку.
Напоследок проверим самый простой, но часто забываемый момент — настройки оформления. Зайдите в настройки отчета и проверьте вкладку "Условное оформление". Возможно, там установлено правило, которое делает текст невидимым (цвет текста совпадает с цветом фона) или просто скрывает значение при определенных условиях.
Также не забывайте о кэшировании и сохраненных настройках. Если вы изменили структуру запроса (например, поменяли псевдоним поля Склад на СкладОтправитель), а пользователь открывает отчет с ранее сохраненными настройками, СКД будет пытаться найти старое имя поля. В лучшем случае колонка просто исчезнет, в худшем — останется, но будет пустой. Попробуйте сбросить настройки отчета на "Стандартные".
Таким образом, решение проблемы пустой колонки всегда кроется в системном подходе: от проверки уникальности имен полей до анализа прав доступа и результирующего запроса через консоль компоновки.