При работе с внешними отчетами в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:ERP, разработчики часто сталкиваются с ситуацией, когда после внесения изменений в схему компоновки данных (СКД) отчет продолжает открываться со старыми настройками и не отражает внесенные изменения. Давайте рассмотрим, почему это происходит и как эффективно решить эту проблему.
Суть проблемы:
Мы имеем внешний отчет, который успешно работал. После внесения изменений в его СКД (например, добавление нового поля, изменение группировки или условий), при повторном открытии отчета из файла он игнорирует эти изменения и загружает старую версию настроек. При этом стандартное действие "Стандартные настройки" не помогает, а попытки отладки, например, в методе ПриКомпоновкеОтчета(), показывают, что код может даже не выполняться, или уже применяются старые настройки. Для локализации проблем неактуальных полей после модификации схемы компоновки можно применить обработку для проверки несуществующих полей в настройках СКД.
Механизм хранения настроек отчетов в 1С БСП:
Прежде чем перейти к решениям, выясним причину такого поведения. В управляемых формах 1С и особенно с использованием БСП, настройки отчетов хранятся не только в файлах, но и непосредственно в информационной базе. За это отвечают специализированные объекты, такие как регистры сведений "СохраненныеНастройки" или "ХранилищеВариантовОтчетов", а также справочник "ВариантыОтчетов". Для более глубокого изучения возможностей библиотеки и поиска нужных функций разработчику пригодится справочник по методам БСП с примерами использования.
Система различает:
Когда внешний отчет загружается в справочник "Дополнительные отчеты и обработки", 1С фактически импортирует его в информационную базу. При последующем запуске отчета из интерфейса системы используется именно эта импортированная версия и связанные с ней настройки, а не напрямую файл на диске. Настройки привязываются к уникальному идентификатору отчета. Если мы меняем СКД, но не обновляем отчет в базе или не меняем его идентификатор, система продолжает считать, что это тот же отчет, и применяет к нему старые сохраненные настройки.
Один из самых простых и эффективных способов обойти проблему, особенно в процессе разработки и отладки, — это изменить идентификатор отчета. Когда вы меняете идентификатор, система воспринимает ваш файл как совершенно новый отчет и не привязывает к нему старые сохраненные настройки.
.erf) в конфигураторе.Система увидит новый идентификатор, и отчет откроется с настройками, заложенными непосредственно в новой СКД файла, игнорируя старые сохраненные настройки, привязанные к предыдущему идентификатору. Этот метод очень удобен, когда мы быстро правим и тестируем внешний отчет, не желая влиять на уже работающие в базе версии или портить их настройки.
Если наш внешний отчет уже загружен в справочник "Дополнительные отчеты и обработки" (ДАО) в информационной базе, то система при запуске из интерфейса будет использовать именно эту импортированную версию. Чтобы применить изменения из файла, нам необходимо обновить импортированную версию.
.erf с диска.После обновления система заменит старую версию отчета на новую, и при следующем запуске из интерфейса будут использоваться актуальные настройки СКД. Этот способ подходит, когда мы хотим применить изменения к "боевой" версии отчета, импортированной в базу.
Если мы активно разрабатываем и тестируем внешний отчет из файла, и при этом в базе уже есть его версия в "Дополнительных отчетах и обработках", которая нам мешает, мы можем временно отключить ее.
Это позволит нам запускать отчет непосредственно из файла на диске, не опасаясь, что система будет использовать старую импортированную версию или ее настройки. После завершения отладки мы можем вернуть флаг на место и обновить отчет из файла, как описано в Решении 2.
Иногда проблема кроется в пользовательских настройках, которые имеют приоритет. Даже если мы изменили СКД, старые пользовательские настройки могут продолжать применяться.
Это действие должно сбросить текущие пользовательские настройки до тех, что заложены в СКД отчета. Если это не помогает, возможно, настройки привязаны к старому идентификатору отчета, или проблема глубже.
БСП предоставляет специальные функции для программного управления настройками отчетов. Мы можем использовать их, если хотим автоматизировать сброс настроек или если стандартные методы не помогают.
ВариантыОтчетов.СброситьПользовательскиеНастройки(): Эта функция позволяет нам сбросить пользовательские настройки для конкретного отчета, варианта отчета или даже всех отчетов.Пример использования:
// Для сброса всех пользовательских настроек конкретного отчета
// (например, "ОтчетМой")
КлючОтчета = Метаданные.Отчеты.ОтчетМой;
ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючОтчета);
// Для сброса настроек определенного варианта отчета (если знаем его имя)
ИмяВарианта = "МойВариантОтчетаДляМенеджеров";
ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючОтчета, ИмяВарианта);
// Можно указать конкретный тип настроек, если нужно сбросить только часть
// Например, только настройки отбора
ТипыНастроек = Новый Массив();
ТипыНастроек.Добавить(Тип("НастройкиКомпоновкиДанных")); // Или другие типы
ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючОтчета, , ТипыНастроек);
ВариантыОтчетов.СброситьНастройкиВариантаОтчета(): Эта функция используется для сброса настроек предопределенного элемента справочника "Варианты отчетов", если наш отчет имеет такие предопределенные варианты.ВариантыОтчетов.УдалитьВариантОтчета(): Мы можем полностью удалить конкретные варианты отчетов для указанного отчета, варианта и/или пользователя. Это радикальный способ, который может быть полезен, если другие методы не срабатывают.Пример использования:
// Удаляем конкретный вариант отчета для текущего пользователя
КлючОтчета = Метаданные.Отчеты.ОтчетМой;
КлючВарианта = "МойВариантОтчета";
ВариантыОтчетов.УдалитьВариантОтчета(КлючОтчета, КлючВарианта, ПараметрыСеанса.ТекущийПользователь);
Мы также можем вручную удалить сохраненные варианты отчетов через раздел "Администрирование" -> "Печатные формы, отчеты и обработки" -> "Отчеты". В списке отчетов мы находим нужный и помечаем его вариант на удаление. Для универсальных отчетов настройки также могут храниться в регистре сведений "СохраненныеНастройки", где их можно удалить вручную (это требует понимания структуры регистра).
Хотя этот метод не всегда напрямую решает проблему с настройками отчетов, очистка кэша 1С на клиентской стороне часто помогает при различных аномалиях в работе программы и может быть полезной в комплексе мер по устранению проблемы.
C:\Users\<ИмяПользователя>\AppData\Roaming\1C\1CE\ или C:\Users\<ИмяПользователя>\AppData\Local\1C\1CE\. Внутри будут папки с длинными буквенно-цифровыми именами.В самых крайних случаях, если ничего не помогает, можно попробовать удалить файлы настроек пользователя (обычно с расширениями *.usr, *.cfg) из профиля пользователя 1С. Однако это сбросит все пользовательские настройки для данного пользователя и является радикальной мерой, к которой следует прибегать с осторожностью.
Мы видим, что проблема сохранения старых настроек во внешних отчетах в 1С:БСП имеет несколько решений, от простого изменения идентификатора до программного управления настройками. Выбор метода зависит от конкретной ситуации, фазы разработки и требований к сохранению или удалению существующих настроек.