Почему в отчете на СКД не отображается поле «Дата рождения» или «Возраст»?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда запрос в консоли запросов отрабатывает идеально, выводя все колонки, но в режиме «1С:Предприятие» в доступных полях отчета некоторые реквизиты (например, ДатаРождения или вычисляемое поле Возраст) просто отсутствуют. Рассмотрим подробно причины этого поведения и разберем по шагам, как вернуть недостающие данные в отчет.

Проблема доступа к персональным данным (RLS и права по полям)

Первая и самая частая причина исчезновения таких полей, как ДатаРождения, СНИЛС или ИНН, — это ограничение прав доступа на уровне отдельных полей (Field Level Security). В современных типовых и самописных конфигурациях на платформе 8.3 даже наличие «Полных прав» не всегда гарантирует доступ к чтению персональных данных (ПДн).

Проанализируем ситуацию: если поле доступно в консоли запросов, но не в СКД, это может означать, что консоль запущена в привилегированном режиме или под пользователем с расширенными правами, в то время как отчет СКД строго следует настройкам ролей текущего сеанса. Выясним причину через проверку ролей:

  1. Откроем конфигуратор и найдем роль, отвечающую за работу с физлицами (например, «Чтение персональных данных физических лиц»).
  2. Проверим вкладку «Ограничение доступа к данным». Если для справочника ФизическиеЛица настроены ограничения по полям, СКД автоматически исключит «запрещенные» поля из списка доступных, чтобы не нарушать политику безопасности.
  3. Убедимся, что у пользователя назначены роли, позволяющие просматривать именно те реквизиты, которые используются в расчете возраста.

Влияние функциональных опций

В системе 1С многие механизмы и реквизиты могут быть жестко привязаны к функциональным опциям. Если функциональная опция, к которой привязан реквизит ДатаРождения, отключена в константах или настройках программы, платформа «скрывает» этот реквизит из метаданных для интерфейса и СКД.

Посмотрим на пример: если в настройках учета отключен учет сотрудников или работа с персональными данными (в специфических конфигурациях), поле может физически отсутствовать в доступных полях компоновки. Чтобы исключить этот вариант, необходимо найти реквизит в дереве метаданных и проверить свойство «Функциональные опции» в его палитре свойств.

Настройка доступности полей в самой схеме СКД

Часто причина кроется в настройках самой схемы компоновки данных на вкладке «Наборы данных». Разберем, на что обратить внимание в конструкторе:

В колонке «Ограничения» для каждого поля есть флажки, которые могут быть случайно установлены:

Проанализируем также поле Возраст. Поскольку оно является результатом выражения в запросе, важно явно указать его Тип значения. Если СКД не может однозначно определить тип (например, при использовании сложных конструкций ВЫБОР или РАЗНОСТЬДАТ), она может посчитать поле некорректным. Рекомендуется в колонке «Тип значения» указать Число(15, 0).

Особенности работы с виртуальными таблицами и левыми соединениями

Рассмотрим фрагмент запроса из обращения пользователя:


ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗП_ТрудовыеДоговораСрезПоследних.Сотрудник КАК Сотрудник,
    ЗП_ТрудовыеДоговораСрезПоследних.Сотрудник.Физлицо.ДатаРождения КАК ДатаРождения,
    ВЫРАЗИТЬ(РАЗНОСТЬДАТ(ЗП_ТрудовыеДоговораСрезПоследних.Сотрудник.Fizlico.ДатаРождения, &ОтчетнаяДата, ДЕНЬ) / 365 КАК ЧИСЛО(15, 0)) КАК возраст
ИЗ
    РегистрСведений.ЗП_ТрудовыеДоговора.СрезПоследних(&ОтчетнаяДата, ) КАК ЗП_ТрудовыеДоговораСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗП_ТрудовыеДоговора.СрезПервых(, ) КАК ЗП_ТрудовыеДоговораСрезПервых
    ПО ЗП_ТрудовыеДоговораСрезПоследних.Сотрудник = ЗП_ТрудовыеДоговораСрезПервых.Сотрудник

При использовании ЛЕВОЕ СОЕДИНЕНИЕ, если в правой таблице (СрезПервых) нет данных, поле ДатаПриема примет значение NULL. Однако, если сама ДатаРождения берется через точку от Сотрудника, и у сотрудника не заполнено физлицо, расчет возраста также вернет NULL. В некоторых случаях СКД при автоматическом заполнении полей может некорректно интерпретировать поля, полученные «через точку» от ссылочных типов, если на них наложены ограничения прав.

Важный совет по оптимизации запроса: вместо проверки типа регистратора через ТИПЗНАЧЕНИЯ, лучше использовать оператор ССЫЛКА. Это работает быстрее и стабильнее внутри механизмов СКД.

Вместо:

И ТИПЗНАЧЕНИЯ(ЗП_ТрудовыеДоговораСрезПоследних.Регистратор) <> ТИП(Документ.ЗП_Увольнение)

Правильнее использовать:

И НЕ ЗП_ТрудовыеДоговораСрезПоследних.Регистратор ССЫЛКА Документ.ЗП_Увольнение

Очистка кэша и обновление пользовательских настроек

Если права проверены, функциональные опции включены, а поля в СКД все равно не появляются, велика вероятность проблемы с кэшем метаданных или сохраненными настройками варианта отчета.

Выполним следующие шаги для исправления:

  1. Сброс настроек в Предприятии: Зайдите в отчет, нажмите кнопку «Еще» — «Установить стандартные настройки». Часто бывает, что старая структура полей закэшировалась в пользовательских настройках (хранилище настроек), и новые поля просто не отображаются в текущем сеансе.
  2. Изменение имени поля: Попробуйте в конфигураторе в схеме СКД изменить «Путь к данным» или «Заголовок» для проблемного поля (например, переименуйте возраст в ВозрастСотрудника). Это заставит систему перестроить модель данных для этого отчета.
  3. Очистка кэша платформы: Запустите базу с параметром /ClearCache или удалите базу из списка и добавьте её заново.

Итоги и рекомендации

Подводя итог, если в СКД пропадают поля ДатаРождения или связанные с ними вычисления, алгоритм действий должен быть следующим:

  1. Проверить, не ограничены ли права на чтение конкретно этого реквизита в ролях пользователя (даже при полных правах).
  2. Убедиться, что поле не скрыто функциональной опцией.
  3. Проверить настройки вкладки «Наборы данных» в СКД на предмет установленных галочек «Ограничение».
  4. Явно типизировать вычисляемые поля (Число, Дата).
  5. Сбросить настройки отчета в режиме «1С:Предприятие» до стандартных.

Соблюдение этих шагов позволит вам быстро диагностировать и устранить причины невидимости полей, обеспечив корректную работу отчетов для пользователей.

← На главную