Почему поле «Контрагент» не отображается в доступных полях отбора СКД и как это исправить?

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

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

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

1. Влияние функциональных опций на метаданные

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

Рассмотрим конкретный пример с сущностями Партнер и Контрагент. В линейке ERP/УТ 11 управленческий учет ведется в разрезе партнеров, а регламентированный — в разрезе контрагентов. Существует функциональная опция ИспользоватьПартнеровИКонтрагентов. Выясним, как это влияет на СКД:

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

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

2. Настройка ограничений в схеме компоновки данных

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

Обратите внимание на следующие флаги:

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

3. Особенности пакетных запросов и псевдонимов

Рассмотрим ситуацию, когда данные собираются пакетным запросом. СКД иногда некорректно интерпретирует поля, если в разных временных таблицах или в итоговом запросе используются одинаковые псевдонимы или если поле не выведено в финальную выборку пакета.

Проанализируем пример структуры запроса:


ВЫБРАТЬ
    Продажи.Контрагент КАК Контрагент,
    Продажи.СуммаОбороти КАК Сумма
ПОМЕСТИТЬ ВТ_Данные
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Данные.Контрагент,
    ВТ_Данные.Сумма
ИЗ
    ВТ_Данные КАК ВТ_Данные

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

4. Программная модификация схемы в модуле менеджера

В типовых конфигурациях 1С (ERP, УТ 11) отчеты часто строятся не на «чистой» СКД, а проходят через горнило процедур в модуле менеджера отчета или модуле объекта. Выясним, не удаляется ли ваше поле программно.

Найдите в модуле объекта отчета процедуру ПриКомпоновкеРезультата. Часто там вызывается общий модуль, например, ОтчетыКлиентСервер.УстановитьНастройкиПоУмолчанию. Внутри этих механизмов может быть прописан код, который:

Попробуйте поставить точку останова в начале процедуры ПриКомпоновкеРезультата и посмотреть содержимое объекта КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора. Если поля там нет, значит, оно отсекается платформой или кодом еще до начала вывода.

5. Ограничение прав доступа (RLS)

Проанализируем влияние механизма Record Level Security (RLS). Если у пользователя ограничены права на чтение справочника Контрагенты или связанных с ним объектов, платформа 1С может превентивно скрывать поля этого типа из настроек отбора. Это делается для того, чтобы пользователь не мог путем перебора условий в отборе «вычислить» наличие записей, к которым у него нет прямого доступа.

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

6. Очистка кэша и сброс настроек

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

Выполните следующие шаги в пользовательском режиме:

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

Резюме решения

В большинстве случаев для ERP-систем решение кроется в пункте 1. Система «умно» прячет контрагента, если считает, что вы должны работать с партнерами. Попробуйте добавить в запрос поле РТУ.Партнер, и вы увидите, что оно моментально станет доступным для отбора. Если же вам принципиально нужен именно контрагент, убедитесь, что включена соответствующая функциональная опция и у поля в СКД не стоят флаги ограничений.

← На главную