Почему в отчете СКД открывается не тот вариант настроек и как правильно очистить пользовательские настройки

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

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

Причины некорректного поведения при открытии отчета

Разберем внутренние механизмы платформы 1С:Предприятие, которые влияют на выбор варианта при открытии формы отчета:

  1. Порядок вариантов в схеме компоновки данных. Если для пользователя еще не сохранены индивидуальные настройки или они были сброшены, платформа по умолчанию открывает самый первый вариант из списка на вкладке «Настройки» в схеме СКД. Если нужный вариант расположен вторым или третьим, он не откроется автоматически без явного указания.
  2. Использование специализированных системных хранилищ. Платформа разделяет настройки по типам. Удаление данных только из ХранилищеСистемныхНастроек не затрагивает другие таблицы, такие как ХранилищеПользовательскихНастроекОтчетов, ХранилищеВариантовОтчетов, ХранилищеОбщихНастроек и ХранилищеНастроекДанныхФорм. Последний открытый вариант и параметры формы часто остаются в них.
  3. Формирование ключа объекта. При сохранении параметров отчетов ключ объекта нередко формируется с дополнительными суффиксами вида Отчет.ИмяОтчета/ИмяВарианта или с использованием уникальных идентификаторов GUID. Прямой поиск по точной строке Отчет.ИмяОтчета пропускает такие записи при очистке.
  4. Автоматическое сохранение данных формы. Если у формы отчета активно свойство сохранения данных формы в настройках, восстанавливаются непосредственно реквизиты самой формы (включая выбор текущего варианта), в обход стандартной логики компоновщика.

Способ 1. Принудительная установка варианта в модуле формы отчета

Если требуется жестко зафиксировать открываемый вариант для всех пользователей при первом запуске, рассмотрим установку значения в событии формы ПриСозданииНаСервере. Посмотрим на пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Если вариант еще не был явно передан в параметрах открытия
    Если НЕ Параметры.Свойство("КлючВарианта") И НЕ ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда
        КлючТекущегоВарианта = "Основной";
    КонецЕсли;
    
КонецПроцедуры

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

Способ 2. Изменение порядка вариантов в СКД

Разберем самый простой способ, не требующий написания программного кода. Откроем схему компоновки данных отчета, перейдем на закладку Настройки и с помощью стрелок перемещения поднимем нужный вариант на самую верхнюю позицию. Так как платформа при первичном открытии берет именно первый вариант из схемы, он станет вариантом по умолчанию для всех новых пользователей.

Способ 3. Полная программная очистка всех хранилищ настроек

Выясним, как полностью удалить сохраненные данные отчета для конкретного пользователя, если они зависли в разных хранилищах платформы. Для этого необходимо обойти все специализированные объекты хранения и выполнить удаление с проверкой вхождения имени отчета в ключ объекта. Рассмотрим программный код:


Процедура ОчиститьВсеНастройкиОтчета(ИмяПользователяИБ, ИмяОтчета) Экспорт

    МассивХранилищ = Новый Массив;
    МассивХранилищ.Добавить(ХранилищеСистемныхНастроек);
    МассивХранилищ.Добавить(ХранилищеОбщихНастроек);
    МассивХранилищ.Добавить(ХранилищеПользовательскихНастроекОтчетов);
    МассивХранилищ.Добавить(ХранилищеВариантовОтчетов);
    МассивХранилищ.Добавить(ХранилищеНастроекДанныхФорм);

    КлючПоиска = "Отчет." + ИмяОтчета;

    Для Каждого Хранилище Из МассивХранилищ Цикл
        
        Отбор = Новый Структура("Пользователь", ИмяПользователяИБ);
        Выборка = Хранилище.Выбрать(Отбор);
        
        Пока Выборка.Следующий() Цикл
            Если СтрНайти(Выборка.КлючОбъекта, КлючПоиска) > 0 Тогда
                Хранилище.Удалить(Выборка.КлючОбъекта, Выборка.КлючНастроек, ИмяПользователяИБ);
            КонецЕсли;
        КонецЦикла;
        
    КонецЦикла;

КонецПроцедуры

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

Способ 4. Сброс настроек через механизмы БСП

Если в конфигурации используется Библиотека стандартных подсистем (подсистема «Варианты отчетов»), рекомендуется использовать штатный программный интерфейс для очистки настроек:


// Сброс настроек для отчета в целом
ВариантыОтчетов.СброситьПользовательскиеНастройки(Метаданные.Отчеты.ИмяОтчета);

В режиме «1С:Предприятие» аналогичное действие администратор может выполнить интерактивно через раздел Администрирование -> Настройки пользователей и прав -> Очистка настроек, выбрав пользователя и удалив сохраненные настройки требуемого отчета.

← На главную