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

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

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

Анализ исходной ситуации в запросе

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


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

Затем эти данные соединяются с основной таблицей остатков и оборотов регистра ТоварыНаСкладах. Проблема заключается в том, что поле ЦенаРасход отображается в доступных полях, а ЦенаПриход — нет, хотя логика добавления идентична. Выясним причину этой аномалии.

Шаг 1. Проверка ограничений в схеме компоновки данных

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

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

Шаг 2. Влияние функциональных опций — скрытая причина

В современных конфигурациях 1С (УТ 11, ERP) активно используются Функциональные опции. Это механизм, который позволяет отключать ненужный функционал прямо в пользовательском режиме. Если функциональная опция, связанная с объектом метаданных, выключена, платформа 1С ведет себя следующим образом:

В нашем случае поле ЦенаПриход выбирается из документа ПоступлениеТоваровНаСклад. Проанализируем ситуацию: в актуальных версиях УТ 11 документ ПоступлениеТоваровНаСклад часто используется только при ордерной схеме или в специфических сценариях. Основным документом закупки является ПриобретениеТоваровУслуг. Если в настройках системы использование документа ПоступлениеТоваровНаСклад не активировано, то поле, полученное из него, просто исчезнет из отчета, даже если оно прописано в тексте запроса.

Решение: Замените в тексте запроса обращение к таблицам Документ.ПоступлениеТоваровНаСклад на Документ.ПриобретениеТоваровУслуг или убедитесь, что соответствующая функциональная опция включена в разделе «НСИ и администрирование».

Шаг 3. Отладка реального запроса

Чтобы окончательно убедиться, что именно СКД «вырезает» наше поле, проанализируем реальный текст запроса, который отправляется в СУБД. Платформа 1С динамически модифицирует ваш текст запроса в зависимости от настроек пользователя и прав доступа. Рассмотрим, как это увидеть:

Используйте консоль системы компоновки данных (внешняя обработка). Загрузите туда вашу схему и сформируйте отчет. В консоли можно увидеть «Исполняемый запрос». Если вы увидите, что в итоговом тексте отсутствует ЛЕВОЕ СОЕДИНЕНИЕ с вашей временной таблицей или поле ЦенаПриход заменено на NULL, значит, срабатывает либо механизм функциональных опций, либо RLS (ограничение доступа на уровне записей).

Шаг 4. Особенности использования Регистратора в соединениях

В типовых отчетах, таких как «Ведомость по товарам на складах», часто используется соединение по полю Регистратор. Проанализируем фрагмент кода соединения:


ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяПриход КАК ВременнаяПриход
ПО ТоварыНаСкладахОстаткиИОбороты.Регистратор = ВременнаяПриход.Ссылка
    И ТоварыНаСкладахОстаткиИОбороты.Склад = ВременнаяПриход.Склад
    И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ВременнаяПриход.Номенклатура

Поскольку Регистратор имеет составной тип данных, при левом соединении с конкретной таблицей документа (например, ПоступлениеТоваровНаСклад) система может оптимизировать запрос так, что при отсутствии прав или выключенной функциональной опции на этот документ, все поле будет исключено из выборки.

Совет: При работе с УТ 11 старайтесь получать цены и стоимостные показатели не из документов, а из регистров накопления, таких как ВыручкаИСебестоимостьПродаж или Закупки. Это не только решит проблему с «исчезающими» полями, но и значительно ускорит работу отчета, так как данные в регистрах уже оптимизированы для аналитики.

Резюме и выводы

Подведем итог нашему исследованию. Если в СКД пропало поле, пройдем по чек-листу:

  1. Проверим вкладку «Наборы данных» на наличие ограничений.
  2. Убедимся, что поле не отмечено как «Обязательное» или не имеет специфических ролей, мешающих выводу.
  3. Самое важное: проверим, включены ли функциональные опции для документов, используемых в запросе. В УТ 11/ERP это причина №1.
  4. Проверим права доступа текущего пользователя (RLS) к объектам, из которых выбираются данные.

Использование правильных объектов метаданных (например, ПриобретениеТоваровУслуг вместо устаревших или специфических документов) позволяет избежать большинства проблем с видимостью полей и гарантирует корректную работу отчета у всех пользователей системы.

← На главную