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