Разберем одну из самых «мистических» и в то же время классических проблем, с которой сталкиваются разработчики при модификации отчетов на Системе Компоновки Данных (СКД). Ситуация выглядит так: вы добавили новое поле в запрос, настроили его отображение в структуре, проверили под своими правами — все работает идеально. Однако, когда пользователь открывает тот же самый отчет, нового поля нет ни в выбранных полях, ни в настройках, ни даже в списке доступных полей для выбора. Проанализируем причины этого поведения и пошагово выясним, как заставить систему «увидеть» изменения.
Это самая распространенная причина. Когда пользователь хотя бы раз открывал отчет, 1С сохраняет его персональные настройки (структуру, выбранные поля, отборы) в системную таблицу SystemSettingsStorage. Даже если вы обновили конфигурацию или файл внешнего отчета, система при открытии в первую очередь пытается наложить старые сохраненные настройки на новую схему. Для автоматического выявления неактуальных или устаревших полей в сохраненных настройках пользователей можно использовать инструмент проверки корректности настроек СКД.
Что мы можем сделать:
ИмяХранилища = "ОбщееХранилищеНастроекДанныхФорм"; // или другое хранилище, если используется БСП
КлючОбъекта = "Отчет.НазваниеВашегоОтчета/КлючВарианта";
Пользователь = "ИмяПользователя";
ХранилищеОбщихНастроек.Удалить(КлючОбъекта, Неопределено, Пользователь);
Выясним, не заблокировано ли поле на уровне самой схемы. В конструкторе СКД на закладке «Наборы данных» для каждого поля есть колонки ограничений. Если там случайно установлена галочка, поле будет вести себя непредсказуемо для разных ролей.
Разберем по шагам проверку ограничений:
Цена).Если отчет подключается через справочник Дополнительные отчеты и обработки, замена файла в справочнике не всегда мгновенно обновляет файл во временной папке на сервере приложений. 1С сохраняет двоичные данные отчета в кэш сеанса.
Рассмотрим методы решения:
.erf внутренние идентификаторы (UUID) версии могут не обновиться. Попробуем выполнить цепочку действий:
Проанализируем ситуацию, когда поле берется из регистра или справочника, доступ к которому ограничен. Даже если у пользователя «Полные права», система может накладывать ограничения через Функциональные опции или RLS (Record Level Security). Для обхода подобных ограничений при выводе данных СКД можно использовать способ запуска отчета в привилегированном режиме.
Посмотрим на важные моменты:
Цена связано с какой-то функциональной опцией (например, «Использовать несколько видов цен»), и эта опция выключена в базе, то СКД автоматически исключит это поле из всех настроек.Посмотрим, как настроены «Выбранные поля» в самом варианте отчета. Если вы используете элемент «Автополе», новое поле должно автоматически появиться в отчете, только если оно добавлено в список доступных на уровне схемы.
Рекомендация: Вместо надежды на Автополе, перейдем в настройки варианта на закладку «Выбранные поля» и добавим наше новое поле явно. Это гарантирует, что система попытается вывести именно его, а в случае ошибки доступа мы хотя бы сможем диагностировать проблему по пустому столбцу или предупреждению.
Чтобы окончательно решить проблему, рекомендуем выполнить следующие действия в строгом порядке:
Таким образом, мы совместно разобрали все уровни возникновения проблемы: от платформенного кэширования до тонких настроек самой схемы компоновки данных. Применение этих шагов поможет восстановить корректную работу отчета у всех пользователей.