При попытке открыть или зарегистрировать внешний отчет в 1С пользователи и разработчики часто сталкиваются со следующей ситуацией: система выдает ошибку «Данный файл не является внешним отчетом», а в подробном техническом описании указывается ошибка при вызове метода контекста Создать. Проанализируем, почему возникает эта проблема и как ее оперативно устранить.
Сообщение «Данный файл не является внешним отчетом» в платформе 1С является обобщенным. На самом деле оно указывает на то, что платформа не смогла инициализировать объект внешнего отчета. В момент вызова метода Создать() платформа пытается скомпилировать схему компоновки данных (СКД). Если в тексте запроса или настройках СКД содержится обращение к объекту метаданных, которого нет в конфигурации базы данных, компиляция завершается сбоем.
Рассмотрим детально пример из ошибки:
Ошибка в схеме компоновки данных: Ошибка получения информации набора данных: Ошибка в запросе набора данных: Неверные параметры "Перечисление.УПЖКХ_ВидыНачислений.НачислениеПриОтсутствииПоказанийИПУ"
Выясним причину этой ошибки: в запросе набора данных СКД используется жесткое связывание с объектом метаданных через конструкцию ЗНАЧЕНИЕ(...):
ИЛИ УПЖКХ_НачисленияОбороты.ВидНачисления = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_ВидыНачислений.НачислениеПриОтсутствииПоказанийИПУ)
Если конкретное значение перечисления (в данном случае НачислениеПриОтсутствииПоказанийИПУ) было переименовано, удалено из конфигурации в процессе обновления или изначально отсутствовало в данной версии базы, СКД не может разрешить ссылку и блокирует открытие файла.
Разберем по шагам, какие действия необходимо предпринять для исправления ошибки.
Если значение перечисления действительно было переименовано или удалено из конфигурации, необходимо открыть внешний отчет в режиме Конфигуратор, перейти в схему компоновки данных и скорректировать запрос. Заменим несуществующее имя значения перечисления на актуальное имя из дерева метаданных или отредактируем условие фильтрации.
Использование конструкции ЗНАЧЕНИЕ(Перечисление...) жестко привязывает отчет к метаданным базы. Чтобы избежать подобных ошибок при обновлениях, рекомендуется заменить прямую ссылку на параметр запроса. Рассмотрим пример:
Вместо жесткой ссылки в запросе:
ГДЕ УПЖКХ_НачисленияОбороты.ВидНачисления = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_ВидыНачислений.НачислениеПриОтсутствииПоказанийИПУ)
Используем параметр запроса:
ГДЕ УПЖКХ_НачисленияОбороты.ВидНачисления = &ВидНачисления
Затем на вкладке Параметры в СКД укажем выражение для параметра или зададим значение программно в модуле отчета. Это делает внешнюю обработку более гибкой и устойчивой к изменениям структуры конфигурации.
Иногда возникают ситуации, когда значение перечисления присутствует в конфигурации, но платформа его «не видит» из-за сбоя кэширования метаданных после динамического обновления.
Выполним очистку кэша на клиенте:
/ClearCache.%AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8.Если используется клиент-серверный вариант, может потребоваться перезапуск службы 1C:Enterprise Server и очистка сеансового кэша на сервере приложений.
Убедимся, что у пользователя есть права на чтение соответствующего перечисления. При отсутствии прав на объект метаданных механизм СКД не сможет выгрузить схему. Также, если перечисление добавлено через расширение конфигурации, проверим, подключено ли расширение для данного сеанса и корректно ли заимствованы все его элементы.