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

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

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

Причина 1: Флаг Автозаполнение и его влияние

Рассмотрим основной механизм, который управляет составом полей в СКД. На вкладке Наборы данных в верхней части окна находится флаг Автозаполнение. Проанализируем, как он работает:

  1. Автозаполнение включено: СКД автоматически анализирует текст запроса и вытягивает все поля, указанные в секции ВЫБРАТЬ, в список доступных полей компоновки. В этом случае поле СуммаНДС появится в ресурсах само собой. Однако у этого способа есть минус — в отчет попадает много «мусора» (служебные поля, ссылки, которые не нужны пользователю).
  2. Автозаполнение выключено: Это профессиональный подход, позволяющий оставить в схеме только нужные поля. Но в этом режиме СКД «не верит» тексту запроса на слово. Если вы написали поле в запросе, но не добавили его в список полей ниже (на вкладке Наборы данных), система будет считать, что этого поля для компоновки не существует.

Выясним причину проблемы автора темы: он отключил автозаполнение, чтобы избежать лишних полей, но забыл вручную описать поле СуммаНДС в списке полей набора данных. Рассмотрим, как это исправить вручную.

Решение: Ручное добавление поля в набор данных

Если вы решили работать без автозаполнения, выполните следующие шаги:

  1. Перейдите на закладку Наборы данных.
  2. В нижней части окна (список полей) нажмите кнопку Добавить новое поле.
  3. В колонке Путь к данным укажите точное имя поля, как оно названо в запросе (псевдоним). В нашем случае это СуммаНДС.
  4. В колонке Поле выберите соответствующее поле из текста запроса.
  5. Укажите Заголовок, который увидит пользователь.
  6. Проверьте колонку Тип значения. Для ресурсов это обязательно должно быть Число.

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

Причина 2: Настройка компоновки внутри конструктора запроса

Иногда поля не видны из-за того, что они ограничены в самом конструкторе запроса. Проанализируем ситуацию: внутри конструктора запроса есть отдельная вкладка Компоновка данных. Она содержит три подвкладки: Поля, Условия и Параметры.

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

Причина 3: Проблема типов данных и NULL

СКД очень чувствительна к типам данных. Если поле СуммаНДС получается в результате соединения таблиц (например, левое соединение РеализацияТоваровУслуг с какой-то другой таблицей), и в результате соединения могут возникнуть значения NULL, СКД может не определить тип поля как числовой. А если тип не определен, поле нельзя суммировать.

Рассмотрим, как обезопасить себя с помощью кода в запросе. Рекомендуется явно приводить поле к типу и обрабатывать пустые значения:


ВЫБРАТЬ
    ЕСТЬNULL(Таблица.СуммаНДС, 0) КАК СуммаНДС,
    ВЫРАЗИТЬ(ЕСТЬNULL(Таблица.СуммаНДС, 0) КАК ЧИСЛО(15, 2)) КАК СуммаНДС_Типизированная
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Таблица

Использование функции ВЫРАЗИТЬ в тексте запроса жестко задает тип для системы компоновки, что часто решает проблему «исчезновения» полей из списка ресурсов.

Работа с вложенными запросами и временными таблицами

Проанализируем еще одну тонкость, упомянутую в обсуждении. Если вы используете временные таблицы или вложенные запросы, помните: СКД «видит» только поля самого последнего (верхнего) запроса. Если вы выбрали СуммаНДС во временной таблице, но забыли вытащить это поле в итоговый ВЫБРАТЬ из этой временной таблицы, поле не попадет в схему компоновки.

Разберем на примере:


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

// Правильно:
ВЫБРАТЬ СуммаНДС ПОМЕСТИТЬ ВТ_Данные ИЗ ... ;
ВЫБРАТЬ Ссылка, СуммаНДС ИЗ ВТ_Данные; // Теперь поле доступно

Подведем итог

Если поле СуммаНДС не отображается в ресурсах, выполните проверку по чек-листу:

  1. Автозаполнение: Если выключено — добавьте поле вручную в список полей на вкладке Наборы данных.
  2. Путь к данным: Проверьте, что имя поля в списке совпадает с псевдонимом в запросе.
  3. Тип данных: Убедитесь, что тип поля — Число. Используйте ЕСТЬNULL и ВЫРАЗИТЬ.
  4. Конструктор запроса: Проверьте вкладку Компоновка данных внутри самого запроса.
  5. Итоговый запрос: Убедитесь, что поле выбрано в последнем запросе пакета (если используются временные таблицы).

Соблюдение этих правил позволит вам избежать проблем с настройкой ресурсов и сделает работу с СКД более предсказуемой и эффективной.

← На главную