Почему в отчете на СКД не появляется новое поле у пользователя и как это исправить

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

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

Причина 1: Кэширование пользовательских настроек в ХранилищеОбщихНастроек

Это самая распространенная причина. Когда пользователь хотя бы раз открывал отчет, 1С сохраняет его персональные настройки (структуру, выбранные поля, отборы) в системную таблицу SystemSettingsStorage. Даже если вы обновили конфигурацию или файл внешнего отчета, система при открытии в первую очередь пытается наложить старые сохраненные настройки на новую схему. Для автоматического выявления неактуальных или устаревших полей в сохраненных настройках пользователей можно использовать инструмент проверки корректности настроек СКД.

Что мы можем сделать:

  1. Рассмотрим вариант с интерактивным сбросом. Попросим пользователя зайти в меню «Настройки», затем нажать «Еще» — «Установить стандартные настройки». Это должно сбросить текущий вариант к тому виду, который зашит в схему компоновки.
  2. Если стандартный сброс не помогает, проанализируем ситуацию глубже. Иногда «хвосты» настроек остаются привязанными к идентификатору варианта. В этом случае эффективно будет программно очистить настройки для конкретного пользователя и отчета. Используем следующий код (например, во внешней обработке):

ИмяХранилища = "ОбщееХранилищеНастроекДанныхФорм"; // или другое хранилище, если используется БСП
КлючОбъекта = "Отчет.НазваниеВашегоОтчета/КлючВарианта";
Пользователь = "ИмяПользователя";
ХранилищеОбщихНастроек.Удалить(КлючОбъекта, Неопределено, Пользователь);

Причина 2: Ограничение доступности поля на уровне схемы СКД

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

Разберем по шагам проверку ограничений:

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

Причина 3: Особенности работы с внешними отчетами и кэш сервера

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

Рассмотрим методы решения:

Причина 4: Влияние функциональных опций и прав доступа (RLS)

Проанализируем ситуацию, когда поле берется из регистра или справочника, доступ к которому ограничен. Даже если у пользователя «Полные права», система может накладывать ограничения через Функциональные опции или RLS (Record Level Security). Для обхода подобных ограничений при выводе данных СКД можно использовать способ запуска отчета в привилегированном режиме.

Посмотрим на важные моменты:

  1. Если поле Цена связано с какой-то функциональной опцией (например, «Использовать несколько видов цен»), и эта опция выключена в базе, то СКД автоматически исключит это поле из всех настроек.
  2. Проверим настройки RLS. Если в запросе СКД используется объект, на который у пользователя нет прав доступа на чтение конкретных полей, СКД «тихо» удаляет эти поля из результата запроса, чтобы не вызывать ошибку доступа. В итоге поле просто пропадает из списка.

Причина 5: Автополе в настройках варианта

Посмотрим, как настроены «Выбранные поля» в самом варианте отчета. Если вы используете элемент «Автополе», новое поле должно автоматически появиться в отчете, только если оно добавлено в список доступных на уровне схемы.

Рекомендация: Вместо надежды на Автополе, перейдем в настройки варианта на закладку «Выбранные поля» и добавим наше новое поле явно. Это гарантирует, что система попытается вывести именно его, а в случае ошибки доступа мы хотя бы сможем диагностировать проблему по пустому столбцу или предупреждению.

Итоговый алгоритм действий для исправления ситуации

Чтобы окончательно решить проблему, рекомендуем выполнить следующие действия в строгом порядке:

  1. В конфигураторе проверьте, что у нового поля в СКД сняты все галочки в колонках «Ограничение доступности».
  2. Сохраните отчет через «Сохранить копию», дав файлу новое имя.
  3. Загрузите этот файл в базу.
  4. Под пользователем зайдите в отчет и обязательно выберите «Установить стандартные настройки».
  5. Если поле не появилось — проверьте, включены ли соответствующие функциональные опции в разделе «НСИ и администрирование».

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

← На главную