При доработке внешних отчетов на управляемых формах в конфигурациях, использующих Библиотеку стандартных подсистем (например, 1С:Управление торговлей 11, 1С:ERP, 1С:Комплексная автоматизация), разработчики часто сталкиваются с неприятной ситуацией. В схему компоновки данных (СКД) добавляется новое поле, настраивается его вывод, но при попытке сформировать отчет через меню «Файл — Открыть» платформа выдает ошибку вида: «Поле не найдено "ИмяПоля"».
При этом, если полностью скопировать схему в совершенно новый внешний отчет, все работает штатно. Однако создание нового отчета приводит к потере сохраненных пользовательских настроек и вариантов. Разберем детально, почему это происходит и как правильно решить данную проблему без потери наработок пользователей.
Проанализируем архитектуру работы подсистемы «Варианты отчетов» БСП и механизма компоновки данных, чтобы выяснить первопричину сбоя:
Имя в корне отчета) уже зарегистрирован в базе данных, типовая управляемая форма отчета при локальном открытии через меню «Файл» обращается к кэшированным данным и хранилищу вариантов из базы данных, а не перечитывает схему заново из файла .erf на диске.КомпоновщикНастроек и пользовательские отборы сохраняются в системных хранилищах (ХранилищеСистемныхНастроек, ХранилищеВариантовОтчетов). Привязка идет к связке имени отчета и ключа объекта. При открытии старый состав настроек пытается наложиться на обновленные метаданные, из-за чего возникает конфликт структуры.Рассмотрим основной и самый правильный способ решения проблемы для отчетов, которые уже эксплуатируются в рабочей базе. Если отчет внедрен в систему, не следует тестировать его обновление через прямое открытие файла в пользовательском режиме.
Выполним следующие действия:
При таком способе подсистема БСП выполнит корректное обновление структуры схемы компоновки непосредственно в базе данных. Механизм автоматически актуализирует соответствие полей, и все созданные пользователями варианты отчетов сохранятся и продолжат открываться без ошибок.
Разберем ситуацию, когда разработчику необходимо протестировать схему компоновки локально через «Файл — Открыть», не обновляя отчет в рабочей базе данных.
Чтобы обойти кэширование и разорвать связь с сохраненными вариантами в базе, поступим следующим образом:
Имя.МойОтчет_Тест).После смены имени платформа воспримет отчет как совершенно новый объект, не станет подтягивать старые настройки из базы, и формирование пройдет успешно со всеми новыми полями. После окончания тестирования вернем исходное имя и загрузим файл в систему по первому способу.
Если ошибка возникает у конкретного пользователя из-за «зависшего» кэша формы в ХранилищеСистемныхНастроек, можно принудительно очистить его индивидуальные настройки:
Посмотрим на еще один вариант для разработчиков: создание собственной управляемой формы в отчете вместо использования типовой общей формы БСП. Если отчет содержит собственную форму, в которой компоновщик настроек инициализируется вручную, механизм подсистемы вариантов отчетов не будет переопределять схему из базы при открытии через файл.
Проверим также базовую корректность самой СКД: перейдем на вкладку «Наборы данных», убедимся, что включен флаг «Автозаполнение», или нажмем кнопку обновления полей набора данных, чтобы новое поле гарантированно появилось в списке доступных полей компоновки.