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