Как устранить конфликт пользовательских настроек при копировании внешнего отчета СКД в 1С?

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

При активной разработке внешних отчетов на базе схемы компоновки данных (СКД) разработчики часто сталкиваются с неприятной проблемой. Если взять готовый внешний отчет (файл .erf), настроенный пользователем в режиме «1С:Предприятие», скопировать этот файл на диске, переименовать его и открыть заново, то настройки старого отчета автоматически «перетекают» в новый. Из-за этого возникает постоянный конфликт настроек интерфейса, вариантов и отборов. Обычное переименование файла на диске не помогает.

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

Почему происходит конфликт настроек? Разбор механизмов платформы

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

ВнешнийОтчет.<ИмяОтчета>/<УникальныйИдентификаторВарианта>

Физическое имя файла на диске (например, Отчет_Новый.erf вместо Отчет_Старый.erf) платформа при формировании этого ключа вообще не учитывает. Ключевое значение имеет внутреннее свойство «Имя» в палитре свойств отчета в конфигураторе. Если мы просто скопировали файл средствами операционной системы, внутреннее имя отчета осталось прежним, и платформа считывает из базы данных одни и те же настройки для обоих файлов.

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

Рассмотрим по шагам несколько надежных способов, которые помогут вам разделить настройки копий отчетов.

Способ 1. Изменение имени отчета в Конфигураторе

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

  1. Откройте скопированный файл внешнего отчета (.erf) в режиме Конфигуратор.
  2. Откройте палитру свойств корневого элемента отчета (нажмите правой кнопкой мыши по названию отчета и выберите «Свойства»).
  3. В поле «Имя» измените значение (например, вместо ПродажиПоРегионам укажите ПродажиПоРегионамНовый).
  4. Обратите внимание на поле «Синоним» — в некоторых механизмах БСП привязка может идти к синониму отчета, поэтому его также рекомендуется изменить или очистить.
  5. Сохраните изменения в файле.

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

Способ 2. Перенос схемы компоновки данных в новый отчет

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

  1. Откройте исходный (старый) отчет в конфигураторе.
  2. Перейдите на вкладку «Макеты», откройте основную схему компоновки данных (обычно это макет с именем ОсновнаяСхемаКомпоновкиДанных).
  3. В правом верхнем углу конструктора СКД нажмите кнопку «Сохранить схему в файл» и сохраните ее на диск в формате XML.
  4. Создайте в конфигураторе абсолютно новый внешний отчет (Файл — Новый — Внешний отчет). Укажите ему новое имя.
  5. Добавьте новый макет с типом «Схема компоновки данных».
  6. В открывшемся конструкторе нажмите кнопку «Загрузить схему из файла» и выберите ранее сохраненный XML-файл.
  7. Установите созданную схему в качестве основной схемы компоновки данных нового отчета. Сохраните отчет.

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

Способ 3. Пересоздание управляемой формы отчета

Если ваш отчет содержит кастомные управляемые формы и программный код в модуле формы, привязка настроек внешнего вида и размещения элементов может происходить к уникальному идентификатору (UUID) формы. При обычном копировании файла UUID формы дублируется.

Чтобы быстро обновить UUID формы, выполните следующие действия:

  1. Откройте скопированный отчет в конфигураторе.
  2. Выделите основную форму отчета, нажмите сочетание клавиш Ctrl + C (или выберите «Копировать» в контекстном меню), чтобы скопировать ее в буфер обмена.
  3. Удалите старую форму из ветки метаданных отчета.
  4. Вставьте форму из буфера обмена обратно в отчет с помощью Ctrl + V. При этой операции платформа сгенерирует для формы абсолютно новый уникальный идентификатор.
  5. Убедитесь, что в свойствах отчета в поле «Основная форма отчета» заново выбрана скопированная форма.

Способ 4. Использование Хранилища вариантов БСП

В современных типовых конфигурациях (УТ 11, ERP, КА, УНФ) для работы с отчетами используется функционал Библиотеки стандартных подсистем. Чтобы настройки внешних отчетов не накладывались друг на друга, рекомендуется явно задействовать механизмы БСП.

Для этого откройте свойства внешнего отчета в конфигураторе, найдите свойство «Хранилище вариантов» и выберите из списка стандартных объектов конфигурации значение ХранилищеВариантовОтчетов. Это позволит системе корректно изолировать пользовательские настройки в разрезе каждого отдельного внешнего файла.

Программный сброс настроек для разработчиков

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

Для удаления настроек через стандартное системное хранилище воспользуйтесь методом Удалить() менеджера хранилища настроек:


// Пример программного удаления зависших настроек СКД
КлючОбъекта = "ВнешнийОтчет.МойСтарыйИмяОтчета/ОсновнойВариант";
КлючНастроек = ""; // Пустая строка означает удаление всех настроек для данного объекта
ИмяПользователя = "ИмяПроблемногоПользователя";

ХранилищеПользовательскихНастроекОтчетов.Удалить(КлючОбъекта, КлючНастроек, ИмяПользователя);

Если в вашей конфигурации используется БСП, сбросить пользовательские настройки вариантов можно более простым вызовом программного интерфейса общего модуля:


// Сброс настроек средствами Библиотеки стандартных подсистем (БСП)
КлючВарианта = "ВнешнийОтчет.ИмяВариантаОтчета";
ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючВарианта);

Важное примечание: После выполнения программной очистки или изменения структуры файлов пользователям крайне рекомендуется перезапустить текущий сеанс «1С:Предприятие», так как платформа активно кэширует ключи объектов в оперативной памяти компьютера.

← На главную