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

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

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

Анализ исходной ситуации

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


ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
    МАКСИМУМ(РеализацияТоваровУслугТовары.Номенклатура) КАК Номенклатура,
    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество
ПОМЕСТИТЬ втДанныеОТоваре
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугТовары.Ссылка;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслуг.Дата КАК Дата,
    РеализацияТоваровУслуг.Перевозчик КАК Перевозчик,
    РеализацияТоваровУслуг.Автомобиль КАК Автомобиль,
    РеализацияТоваровУслуг.ПунктПогрузки КАК ПунктПогрузки,
    РеализацияТоваровУслуг.ПунктРазгрузки КАК ПунктРазгрузки,
    втДанныеОТоваре.Номенклатура КАК Номенклатура,
    втДанныеОТоваре.Количество КАК Количество,
    РеализацияТоваровУслуг.ТСЛ_Водитель КАК Водитель,
    РеализацияТоваровУслуг.Контрагент КАК Контрагент
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ втДанныеОТоваре КАК втДанныеОТоваре
        ПО (втДанныеОТоваре.Реализация = РеализацияТоваровУслуг.Ссылка)
ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2

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

Причина 1: Влияние функциональных опций (ФО)

Это наиболее вероятная причина для конфигураций на базе 1С:ERP, КА 2 или УТ 11. В этих системах многие реквизиты объектов «привязаны» к функциональным опциям. Если опция выключена, платформа считает, что данный функционал не используется, и скрывает поле из интерфейса и отчетов.

Важно понимать: Консоль запросов выполняет прямой SQL-запрос к базе данных и игнорирует настройки функциональных опций. Именно поэтому в консоли вы видите данные, а в СКД — нет. СКД является частью метаданных и подчиняется логике интерфейса. Если реквизит Контрагент в документе связан с ФО, которая в данный момент отключена (например, включен режим работы только с партнерами), СКД автоматически исключит это поле из доступных на лету.

Проверьте в конфигураторе свойство «Функциональные опции» у конкретного реквизита. Если они есть, убедитесь, что соответствующие константы в пользовательском режиме включены.

Причина 2: Специфика расширений конфигурации

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

  1. Добавление объектов в расширение: Убедитесь, что справочник Контрагенты и сам реквизит Контрагент документа РеализацияТоваровУслуг добавлены в расширение. Без этого СКД в контексте расширения может не увидеть метаданные поля.
  2. Синхронизация имен: Если вы переименовывали отчет или меняли его структуру, платформа могла закешировать старую версию схемы.
  3. Обновление вспомогательных данных: Иногда требуется выполнить процедуру ОбновитьВспомогательныеДанные или перезапустить сеанс с параметром /ЗапуститьОбновлениеИнформационнойБазы, чтобы система перестроила кэш метаданных для прав доступа и функциональных опций.

Причина 3: Кэш пользовательских настроек

Стандартная кнопка «Установить стандартные настройки» в интерфейсе отчета сбрасывает только видимые настройки компоновщика. Однако настройки колонок (ширина, видимость, порядок) могут «зависнуть» в системном хранилище (SystemSettingsStorage). Для автоматического выявления и очистки таких проблемных настроек можно использовать обработку для проверки несуществующих полей в настройках СКД.

Рассмотрим порядок действий для полной очистки:

  1. Зайдите в раздел Администрирование — Настройки пользователей и прав.
  2. Выберите пункт Очистка настроек.
  3. Найдите нужного пользователя и конкретный отчет.
  4. Удалите все сохраненные настройки для этого отчета.

Только после этого платформа принудительно прочитает структуру настроек из вашей новой схемы СКД.

Причина 4: Ограничения в схеме компоновки данных

Проанализируем закладку «Наборы данных» в схеме компоновки. Найдите ваше новое поле в таблице и посмотрите на колонки ограничений:

Причина 5: Права доступа (RLS)

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

Причина 6: Использование макетов

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

Специфика УТ 11: Партнеры и Контрагенты

В конфигурациях «Управление торговлей», «ERP» и «Комплексная автоматизация» используется разделение на Партнеров (управленческий учет) и Контрагентов (юридические лица). Очень часто реквизит Контрагент программно скрыт и не заполняется, если в настройках программы включено использование партнеров. В этом случае в запросах следует использовать поле Партнер.

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

Подводя итог, если поле не появляется, первым делом проверьте Функциональные опции и Системное хранилище настроек. В 90% случаев проблема кроется именно в этих механизмах, которые работают «поверх» вашего текста запроса.

← На главную