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