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

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

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

Причина 1: Обработка иерархии справочников в запросе

Проанализируем ситуацию: часто ошибка возникает при обращении к реквизитам справочников, которые имеют иерархическую структуру (например, Номенклатура). У элементов справочника реквизит (например, ТоварнаяГруппа) заполнен, а у групп (папок) — нет, либо он физически не предусмотрен для типа «Группа».

Выясним причину: СКД при попытке построить отчет по иерархии или при включении групп в выборку может «потерять» поле, если оно не определено для всех записей результата запроса. Чтобы побороть это, нам необходимо явно обработать проверку на группу в тексте запроса. Рассмотрим пример правильного написания конструкции ВЫБОР:


ВЫБРАТЬ
    ВЫБОР
        КОГДА СпрНоменклатура.ЭтоГруппа
            ТОГДА ЗНАЧЕНИЕ(Справочник.ТоварныеГруппы.ПустаяСсылка)
        ИНАЧЕ СпрНоменклатура.ТоварнаяГруппа
    КОНЕЦ КАК ТоварнаяГруппа,
    СпрНоменклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура

Если группы в отчете не нужны вовсе, проанализируем условие ГДЕ. Достаточно добавить фильтр ГДЕ НЕ СпрНоменклатура.ЭтоГруппа, чтобы исключить пустые значения реквизитов, характерные для папок, и ошибка исчезнет.

Причина 2: Влияние функциональных опций

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

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

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

Иногда проблема кроется не в коде, а в кэше сохраненных настроек. Система компоновки данных сохраняет пользовательские настройки (варианты отчета). Если вы изменили структуру набора данных или переименовали поле, старые настройки могут продолжать ссылаться на несуществующий путь к данным.

Рассмотрим, как это исправить:

  1. Первым делом попробуйте выполнить команду «Установить стандартные настройки» (через меню «Все действия»).
  2. Если это не помогло, проанализируем более радикальный метод — переименование. Попробуйте изменить имя внешнего отчета (файла) и имя самого объекта Отчет в конфигураторе. Это принудит систему создать новую запись в кэше настроек, очистив старые «хвосты».

Причина 4: Отсутствие итоговой выборки после временных таблиц

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

Убедимся, что ваш запрос не заканчивается созданием временной таблицы:


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

// ПРАВИЛЬНО: Должна быть итоговая выборка
ВЫБРАТЬ Номенклатура, Количество ИЗ ВТ_Данные

Причина 5: Программная модификация схемы СКД

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

Проанализируем ситуацию: путь к данным в настройках (Settings) должен строго соответствовать пути к данным в самой схеме (Schema). Если вы программно добавили поле в запрос, обязательно вызовите обновление состава полей набора данных или добавьте их вручную в коллекцию Поля.

Дополнительные факторы для проверки

Рассмотрим еще несколько нюансов, которые могут приводить к ошибке «Поле не найдено»:

Подводя итог, можно сказать, что решение проблемы всегда начинается с анализа иерархии данных и проверки функциональных опций конфигурации. В большинстве случаев ошибка лечится либо явным указанием ВЫБОР в запросе для обработки NULL и групп, либо простым сбросом настроек пользователя.

← На главную