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