Почему внешний отчет в 1С:БСП продолжает открываться со старыми настройками после изменения СКД?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

При работе с внешними отчетами в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:ERP, разработчики часто сталкиваются с ситуацией, когда после внесения изменений в схему компоновки данных (СКД) отчет продолжает открываться со старыми настройками и не отражает внесенные изменения. Давайте рассмотрим, почему это происходит и как эффективно решить эту проблему.

Суть проблемы:

Мы имеем внешний отчет, который успешно работал. После внесения изменений в его СКД (например, добавление нового поля, изменение группировки или условий), при повторном открытии отчета из файла он игнорирует эти изменения и загружает старую версию настроек. При этом стандартное действие "Стандартные настройки" не помогает, а попытки отладки, например, в методе ПриКомпоновкеОтчета(), показывают, что код может даже не выполняться, или уже применяются старые настройки. Для локализации проблем неактуальных полей после модификации схемы компоновки можно применить обработку для проверки несуществующих полей в настройках СКД.

Механизм хранения настроек отчетов в 1С БСП:

Прежде чем перейти к решениям, выясним причину такого поведения. В управляемых формах 1С и особенно с использованием БСП, настройки отчетов хранятся не только в файлах, но и непосредственно в информационной базе. За это отвечают специализированные объекты, такие как регистры сведений "СохраненныеНастройки" или "ХранилищеВариантовОтчетов", а также справочник "ВариантыОтчетов". Для более глубокого изучения возможностей библиотеки и поиска нужных функций разработчику пригодится справочник по методам БСП с примерами использования.

Система различает:

  1. Стандартные настройки: Определяются разработчиком отчета в СКД.
  2. Пользовательские настройки: Создаются и сохраняются пользователями для себя. Они всегда имеют приоритет над стандартными.

Когда внешний отчет загружается в справочник "Дополнительные отчеты и обработки", 1С фактически импортирует его в информационную базу. При последующем запуске отчета из интерфейса системы используется именно эта импортированная версия и связанные с ней настройки, а не напрямую файл на диске. Настройки привязываются к уникальному идентификатору отчета. Если мы меняем СКД, но не обновляем отчет в базе или не меняем его идентификатор, система продолжает считать, что это тот же отчет, и применяет к нему старые сохраненные настройки.

Решение 1: Изменение идентификатора отчета (рабочий способ для отладки)

Один из самых простых и эффективных способов обойти проблему, особенно в процессе разработки и отладки, — это изменить идентификатор отчета. Когда вы меняете идентификатор, система воспринимает ваш файл как совершенно новый отчет и не привязывает к нему старые сохраненные настройки.

  1. Откройте внешний отчет в конфигураторе: Мы открываем наш файл внешнего отчета (.erf) в конфигураторе.
  2. Измените идентификатор: В свойствах отчета находим поле "Идентификатор" (или "Ключ" в некоторых версиях/контекстах, но чаще это именно "Идентификатор" как уникальное имя). Мы добавляем к нему небольшой суффикс, например, "Тест", "Версия2", или просто изменяем его часть. Например, был "МойОтчет", станет "МойОтчет_Тест".
  3. Сохраните изменения: Сохраняем файл отчета с новым идентификатором.
  4. Запустите отчет: Открываем обновленный внешний отчет в режиме 1С:Предприятие.

Система увидит новый идентификатор, и отчет откроется с настройками, заложенными непосредственно в новой СКД файла, игнорируя старые сохраненные настройки, привязанные к предыдущему идентификатору. Этот метод очень удобен, когда мы быстро правим и тестируем внешний отчет, не желая влиять на уже работающие в базе версии или портить их настройки.

Решение 2: Обновление внешнего отчета в справочнике "Дополнительные отчеты и обработки"

Если наш внешний отчет уже загружен в справочник "Дополнительные отчеты и обработки" (ДАО) в информационной базе, то система при запуске из интерфейса будет использовать именно эту импортированную версию. Чтобы применить изменения из файла, нам необходимо обновить импортированную версию.

  1. Перейдите в раздел "Администрирование": В режиме 1С:Предприятие открываем раздел "Администрирование".
  2. Найдите "Печатные формы, отчеты и обработки": В этом разделе мы находим пункт "Дополнительные отчеты и обработки".
  3. Найдите наш отчет: В открывшемся списке находим наш внешний отчет.
  4. Обновите файл: Обычно в форме элемента справочника "Дополнительные отчеты и обработки" присутствует кнопка или пункт меню для обновления файла (например, "Обновить из файла", "Загрузить файл" или подобное). Мы выбираем наш измененный файл .erf с диска.

После обновления система заменит старую версию отчета на новую, и при следующем запуске из интерфейса будут использоваться актуальные настройки СКД. Этот способ подходит, когда мы хотим применить изменения к "боевой" версии отчета, импортированной в базу.

Решение 3: Временное отключение импортированной версии отчета при отладке

Если мы активно разрабатываем и тестируем внешний отчет из файла, и при этом в базе уже есть его версия в "Дополнительных отчетах и обработках", которая нам мешает, мы можем временно отключить ее.

  1. Перейдите в справочник "Дополнительные отчеты и обработки": Как и в предыдущем случае, находим наш отчет в списке.
  2. Снимите флаг "Используется" или "Активен": В форме элемента справочника или в списке мы снимаем флаг, который отвечает за использование или активность отчета.

Это позволит нам запускать отчет непосредственно из файла на диске, не опасаясь, что система будет использовать старую импортированную версию или ее настройки. После завершения отладки мы можем вернуть флаг на место и обновить отчет из файла, как описано в Решении 2.

Решение 4: Сброс пользовательских настроек через интерфейс

Иногда проблема кроется в пользовательских настройках, которые имеют приоритет. Даже если мы изменили СКД, старые пользовательские настройки могут продолжать применяться.

  1. Откройте отчет: Запустите отчет, который упорно открывается со старыми настройками.
  2. Найдите команду "Стандартные настройки": В форме отчета мы ищем кнопку "Еще" или "Настройки" и в выпадающем меню выбираем пункт "Стандартные настройки" или "Сбросить настройки".

Это действие должно сбросить текущие пользовательские настройки до тех, что заложены в СКД отчета. Если это не помогает, возможно, настройки привязаны к старому идентификатору отчета, или проблема глубже.

Решение 5: Программный сброс настроек с помощью функций БСП

БСП предоставляет специальные функции для программного управления настройками отчетов. Мы можем использовать их, если хотим автоматизировать сброс настроек или если стандартные методы не помогают.

  1. Использование ВариантыОтчетов.СброситьПользовательскиеНастройки(): Эта функция позволяет нам сбросить пользовательские настройки для конкретного отчета, варианта отчета или даже всех отчетов.
  2. Пример использования:

    
    // Для сброса всех пользовательских настроек конкретного отчета
    // (например, "ОтчетМой")
    КлючОтчета = Метаданные.Отчеты.ОтчетМой;
    ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючОтчета);
    
    // Для сброса настроек определенного варианта отчета (если знаем его имя)
    ИмяВарианта = "МойВариантОтчетаДляМенеджеров";
    ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючОтчета, ИмяВарианта);
    
    // Можно указать конкретный тип настроек, если нужно сбросить только часть
    // Например, только настройки отбора
    ТипыНастроек = Новый Массив();
    ТипыНастроек.Добавить(Тип("НастройкиКомпоновкиДанных")); // Или другие типы
    ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючОтчета, , ТипыНастроек);
    
  3. Использование ВариантыОтчетов.СброситьНастройкиВариантаОтчета(): Эта функция используется для сброса настроек предопределенного элемента справочника "Варианты отчетов", если наш отчет имеет такие предопределенные варианты.
  4. Использование ВариантыОтчетов.УдалитьВариантОтчета(): Мы можем полностью удалить конкретные варианты отчетов для указанного отчета, варианта и/или пользователя. Это радикальный способ, который может быть полезен, если другие методы не срабатывают.
  5. Пример использования:

    
    // Удаляем конкретный вариант отчета для текущего пользователя
    КлючОтчета = Метаданные.Отчеты.ОтчетМой;
    КлючВарианта = "МойВариантОтчета";
    ВариантыОтчетов.УдалитьВариантОтчета(КлючОтчета, КлючВарианта, ПараметрыСеанса.ТекущийПользователь);
    

Мы также можем вручную удалить сохраненные варианты отчетов через раздел "Администрирование" -> "Печатные формы, отчеты и обработки" -> "Отчеты". В списке отчетов мы находим нужный и помечаем его вариант на удаление. Для универсальных отчетов настройки также могут храниться в регистре сведений "СохраненныеНастройки", где их можно удалить вручную (это требует понимания структуры регистра).

Решение 6: Очистка кэша 1С клиента

Хотя этот метод не всегда напрямую решает проблему с настройками отчетов, очистка кэша 1С на клиентской стороне часто помогает при различных аномалиях в работе программы и может быть полезной в комплексе мер по устранению проблемы.

  1. Закройте все сеансы 1С: Мы убеждаемся, что все программы 1С на клиентской машине закрыты.
  2. Найдите каталог кэша: Каталоги кэша обычно находятся по пути: C:\Users\<ИмяПользователя>\AppData\Roaming\1C\1CE\ или C:\Users\<ИмяПользователя>\AppData\Local\1C\1CE\. Внутри будут папки с длинными буквенно-цифровыми именами.
  3. Удалите содержимое каталогов: Мы удаляем все папки с длинными именами.
  4. Запустите 1С снова: При следующем запуске 1С создаст новый кэш.

Решение 7: Удаление файлов настроек пользователя (крайняя мера)

В самых крайних случаях, если ничего не помогает, можно попробовать удалить файлы настроек пользователя (обычно с расширениями *.usr, *.cfg) из профиля пользователя 1С. Однако это сбросит все пользовательские настройки для данного пользователя и является радикальной мерой, к которой следует прибегать с осторожностью.

Мы видим, что проблема сохранения старых настроек во внешних отчетах в 1С:БСП имеет несколько решений, от простого изменения идентификатора до программного управления настройками. Выбор метода зависит от конкретной ситуации, фазы разработки и требований к сохранению или удалению существующих настроек.

← На главную