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

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

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

Причина 1: Использование расширений языка запросов СКД (фигурные скобки)

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

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

Для решения этой проблемы выполним следующие шаги:

  1. Откроем конструктор схемы компоновки данных.
  2. Перейдем на закладку «Запрос».
  3. Найдем в самом конце финального запроса блок, заключенный в фигурные скобки {ВЫБРАТЬ ...}.
  4. Добавим наше новое поле туда. Например, если наше поле называется Скидка, секция должна выглядеть так:

{ВЫБРАТЬ
    Номенклатура.*,
    Характеристика.*,
    Цена,
    Скидка} -- Наше новое поле добавлено здесь

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

Причина 2: Поле во временных таблицах

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

Если вы добавили вычисление скидки внутри временной таблицы Цены, но забыли выбрать это поле в самом последнем ВЫБРАТЬ, который является итоговой выборкой пакета, СКД не увидит это поле. Выясним, проходит ли ваше поле «сквозь» весь пакет запросов. Каждая временная таблица должна передавать это поле дальше, если оно требуется в финальном результате.

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


// Шаг 1: Добавляем во временную таблицу
ВЫБРАТЬ
    Цена / 100 КАК Скидка,
    Номенклатура
ПОМЕСТИТЬ ВтЦены
ИЗ ... ;

// Шаг 2: Обязательно выбираем в финальном запросе
ВЫБРАТЬ
    ВтЦены.Номенклатура,
    ВтЦены.Скидка КАК Скидка
ИЗ ВтЦены КАК ВтЦены

Причина 3: Кэширование настроек отчета

Часто программист все сделал правильно в конфигураторе, но пользователь (или сам разработчик в режиме 1С:Предприятие) продолжает видеть ошибку. Это происходит потому, что 1С сохраняет настройки отчета (варианты, выбранные поля, группировки) в системных хранилищах.

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

Важно: Если вы боитесь потерять свои сложные настройки, попробуйте создать новый Вариант отчета. В новом варианте измененная схема должна подтянуться корректно.

Причина 4: Ограничения на закладке «Наборы данных»

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

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

Причина 5: Особенности вычисляемых полей

В сообщении упоминалось, что добавление через «Вычисляемые поля» также не помогло. Разберем, почему так бывает. Вычисляемое поле строится на базе уже существующих полей набора данных. Если вы пытаетесь создать вычисляемое поле Скидка с выражением Цена / 100, но само поле Цена не выбрано в запросе или ограничено настройками, вычисляемое поле также выдаст ошибку отсутствия.

Проанализируем алгоритм добавления вычисляемого поля:

Итоги и рекомендации

Для успешного добавления поля в сложный отчет на СКД рекомендуем придерживаться следующего порядка действий:

  1. Добавьте поле в текст запроса, убедившись, что оно попадает в финальную выборку (проходит через все временные таблицы).
  2. Если используется расширение запроса (фигурные скобки), обязательно пропишите поле в блоке {ВЫБРАТЬ ...}.
  3. На закладке «Наборы данных» проверьте доступность поля и отсутствие ограничений.
  4. На закладке «Настройки» в выбранных полях добавьте ваше новое поле.
  5. В режиме 1С:Предприятие обязательно выполните сброс на Стандартные настройки.

Эти шаги помогают решить проблему в 99% случаев. Если же отчет является частью сложной типовой конфигурации (например, УТ 11 или ERP), также стоит заглянуть в модуль объекта отчета. В процедуре ПриКомпоновкеРезультата программный код может перехватывать управление и жестко задавать структуру отчета, игнорируя ваши правки в конструкторе. В этом случае изменения придется вносить уже программно в объект КомпоновщикНастроек.

← На главную