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