При работе с внешними отчетами в системе компоновки данных (СКД) разработчики часто сталкиваются с ситуацией, когда отчет, который ранее работал исправно или корректно открывается в конфигураторе, внезапно выдает ошибку исполнения. Типичные сообщения: «Поле не найдено» или «Параметр не установлен», даже если визуально в настройках все заполнено правильно. Особенно часто это проявляется в конфигурациях на базе «Управление торговлей» (включая локализации для РБ), где механизмы работы с отчетами глубоко интегрированы в БСП (Библиотеку стандартных подсистем).
В этой статье мы подробно разберем причины такого поведения системы и пошагово рассмотрим способы устранения подобных ошибок, опираясь на технические нюансы работы движка компоновки данных.
Проанализируем ситуацию: отчет открывается как внешний файл через меню Файл -> Открыть. В этом случае 1С:Предприятие сохраняет настройки варианта отчета в пользовательском кэше, привязываясь к внутреннему идентификатору (GUID) схемы или имени объекта. Если вы вносили изменения в схему, сохраняя файл под тем же именем, система может попытаться наложить старые настройки на новую структуру, что приведет к конфликту.
Рассмотрим, как решить эту проблему:
_Новый). Сохраните файл под новым именем. Это заставит платформу создать новую ветку настроек в базе данных./ClearCache, однако помните, что это не всегда затрагивает настройки компоновки, хранящиеся непосредственно в информационной базе.Выясним причину, связанную с настройками самого запроса. В конструкторе схемы компоновки на закладке «Набор данных» есть флаг «Автозаполнение». Если этот флаг снят, вы должны вручную указать все доступные поля и параметры на соответствующих закладках.
Проанализируем ситуацию, когда флаг установлен, но поле все равно не находится. Это случается, если поле Склад используется в условиях запроса, но не выбрано в итоговом списке полей компоновки. Для исправления проверим следующие моменты:
Склад доступно для выбора.{ГДЕ Склад.*}), убедитесь, что синтаксис соответствует именам полей в метаданных вашей версии конфигурации.Если ваш отчет построен на сложном запросе с использованием временных таблиц (ВТ), СКД накладывает определенные ограничения. Часто параметр Склад или ТипЦен передается во временную таблицу, но не пробрасывается в основной выбор.
Посмотрим на пример кода запроса, который может вызывать ошибку:
ВЫБРАТЬ
Остатки.Склад КАК Склад,
Остатки.Товар КАК Товар
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Остатки.Товар,
Цены.Цена
ИЗ
ВТ_Остатки КАК ВТ_Остатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК Цены
ПО ВТ_Остатки.Товар = Цены.Номенклатура
В данном примере поле Склад есть только во временной таблице. Если вы попытаетесь вывести его в отчет или использовать в отборе компоновки, система может выдать ошибку, так как во втором запросе пакета (который является результирующим для СКД) это поле отсутствует. Разберем решение: обязательно добавьте ВТ_Остатки.Склад в финальный ВЫБРАТЬ вашего пакета запросов.
Часто в типовых решениях (УТ 11, ERP) параметры отчета вычисляются через выражения. Посмотрим на закладку «Параметры» в СКД. Ошибка «Параметр не установлен» возникает, если в колонке «Выражение» указана функция, которая возвращает Неопределено или пустую ссылку из-за несовпадения метаданных.
Например, если используется выражение типа:
Справочники.Склады.НайтиПоНаименованию("Основной склад")
Если в базе пользователя склад называется иначе, выражение вернет пустую ссылку. Если параметр при этом помечен как «Ограничение доступности» (скрыт от пользователя), отчет упадет с ошибкой, так как пользователь не сможет заполнить его вручную.
Проанализируем также типы данных. В конфигурациях для разных регионов (например, УТ для Беларуси) тип реквизита может отличаться от базовой версии. Проверьте, что в параметре Склад указан правильный тип (например, СправочникСсылка.Склады), и он не ограничен устаревшим типом из другой версии программы.
Иногда корень проблемы лежит вне настроек отчета. Если у пользователя настроено ограничение доступа на уровне записей (RLS) по складам, платформа может физически «вырезать» поле из запроса на уровне СУБД. В этом случае компоновщик данных не видит поля Склад, так как для текущего сеанса его не существует.
Для диагностики выполним следующие действия:
Склад не включено в разрешенные поля в шаблонах RLS.Если ни очистка кэша, ни проверка параметров не помогают, выполним процедуру полного обновления объекта отчета. Это часто помогает, когда внутренние метаданные файла внешнего отчета повреждены или не соответствуют версии платформы:
.xml.xml-файл.Этот метод позволяет полностью исключить влияние «старых» идентификаторов и кэшированных настроек, создавая чистый объект в контексте текущей конфигурации.