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

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

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

Проверка механизма «Автозаполнение»

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

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

Влияние функциональных опций

Одной из наиболее неочевидных причин является работа механизма Функциональных опций (ФО). В типовых конфигурациях, таких как «1С:Управление торговлей 11» или «1С:ERP», видимость реквизитов часто зависит от констант.

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

  1. Проверить свойства реквизита в Конфигураторе и посмотреть, в какие функциональные опции он включен.
  2. Убедиться, что соответствующие константы в режиме «Предприятие» установлены в значение Истина.
  3. Если функциональная опция выключена намеренно, поле не появится в доступных, пока опция не будет активирована.

Ограничения в настройках набора данных

Посмотрим на закладку Наборы данных более внимательно. В таблице полей есть колонки, отвечающие за ограничения. Проанализируем их влияние:

Иногда возникают аномалии: например, если установить флаг «Поле недоступно для выбора», оно может странным образом отобразиться в списке, но потерять часть функционала. Проверьте, чтобы для нужного вам поля все эти флаги были сняты.

Ошибки типизации и виртуальные таблицы

Рассмотрим ситуацию, когда запрос обращается к виртуальным таблицам (например, ОстаткиИОбороты). Если поле Контрагент выбирается через левое соединение или из вложенного запроса, платформа может некорректно определить его тип, особенно если в одной из веток объединения (ОБЪЕДИНИТЬ ALL) поле имеет значение NULL или тип Неопределено.

В таких случаях рекомендуется явно указывать тип поля в Конструкторе запроса или использовать функцию ВЫРАЗИТЬ. Пример кода для обеспечения корректной типизации:


ВЫБРАТЬ
    ВЫРАЗИТЬ(Продажи.Контрагент КАК Справочник.Контрагенты) КАК Контрагент,
    Продажи.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

Это гарантирует, что компоновка данных однозначно определит тип поля и включит его в список доступных для всех видов настроек.

Использование поля в качестве ресурса

Выясним еще одну деталь: не добавлено ли ваше поле в список Ресурсов на соответствующей закладке. Когда поле становится ресурсом, оно по умолчанию ведет себя иначе в настройках компоновки. Рассмотрим ситуацию: если вы случайно сделали Контрагент ресурсом с функцией Количество(), оно может переместиться в категорию суммируемых полей и исчезнуть из обычного списка полей для группировки.

Технические сбои и кэш платформы

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

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

Особенности системных полей

Важно помнить, что свое поле не стоит искать внутри группы Системные поля. Пользовательские поля и поля набора данных всегда располагаются выше или в корне иерархии доступных полей. Если вы видите только Системные поля (Номер по порядку, Уровень и т.д.), значит, набор данных вообще не передал информацию о полях в настройки. В этом случае вернитесь к пункту проверки текста запроса и флага Автозаполнение.

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

← На главную