Почему при создании нового отчета на базе старого сохраняются прежние настройки и как это исправить?

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

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

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

Причина 1: Внутреннее имя объекта в метаданных

Рассмотрим самую распространенную ошибку начинающих разработчиков. Платформа 1С:Предприятие при сохранении пользовательских настроек ориентируется не на имя файла на диске (например, Отчет_Продажи_Новый.erf), а на внутреннее свойство Имя, заданное в конфигураторе.

Проанализируем ситуацию: если вы взяли файл Отчет1.erf, скопировали его средствами Windows в Отчет2.erf, но не открыли его в конфигураторе для правки свойств, то внутри обоих файлов свойство Имя будет одинаковым (например, МойОтчет). Для платформы это сигнал, что оба файла — это один и тот же объект, и для них нужно использовать одну и ту же ветку в хранилище настроек.

Что необходимо сделать:

  1. Откроем внешний отчет в конфигураторе.
  2. Нажмем правой кнопкой мыши на самый верхний элемент в дереве объекта (корень отчета) и выберем пункт Свойства.
  3. Найдем поле Имя и изменим его на уникальное.
  4. Убедимся, что Синоним также изменен, чтобы пользователь видел актуальное название в шапке.

Причина 2: Использование Хранилища настроек (SystemSettingsStorage)

Выясним, где именно 1С хранит те самые «старые» настройки. В современных конфигурациях (особенно на базе БСП) используется механизм ХранилищеОбщихНастроек или ХранилищеВариантовОтчетов. Настройки привязываются к уникальному ключу, который состоит из имени объекта и имени пользователя.

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

Для принудительной очистки настроек в конфигурациях на БСП (например, УТ 11, БП 3.0, ERP) проделаем следующие шаги:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Выберем пункт Управление настройками.
  3. В открывшемся окне найдем настройки конкретного пользователя для проблемного отчета и удалим их.

Причина 3: Флаги автоматического восстановления в формах

В зависимости от того, используете вы обычные или управляемые формы, механизмы сохранения ведут себя по-разному. Разберем оба случая.

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

Для управляемых форм:
Здесь аналогичную роль играет свойство формы Автосохранение данных в настройках (AutoSave). Оно может принимать значения Использовать или Не использовать. Если вы хотите, чтобы отчет каждый раз открывался «чистым», установите значение Не использовать. Однако помните, что это лишит пользователей возможности сохранять свои фильтры.

Причина 4: Ключ варианта в Системе компоновки данных (СКД)

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

Если в старом отчете был вариант с именем «Основной» и вы оставили его без изменений в новом отчете, платформа может сопоставить их. Рассмотрим алгоритм исправления:

  1. Зайдем в закладку Настройки внутри СКД.
  2. В списке вариантов отчета (обычно слева) переименуем вариант или создадим новый с уникальным именем.
  3. Установим новый вариант в качестве варианта по умолчанию.

Причина 5: Кэширование структуры внешних объектов платформой

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

Посмотрим, как можно обойти это поведение:

Во-первых, при разработке внешнего отчета рекомендуется периодически менять версию в имени самого файла (например, Отчет_v1.erf, Отчет_v2.erf). Это гарантирует, что платформа воспримет файл как новый.

Во-вторых, можно использовать программное открытие отчета, чтобы исключить влияние интерактивных механизмов кэширования:


ИмяФайла = "C:\Reports\MyNewReport.erf";
ВнешнийОтчетОбъект = ВнешниеОтчеты.Создать(ИмяФайла, Ложь);
ВнешнийОтчетОбъект.ПолучитьФорму().Открыть();

Параметр Ложь в методе Создать отключает безопасный режим (если это необходимо) и иногда помогает обойти некоторые механизмы платформенного кэширования метаданных.

Причина 6: Регистрация в справочнике «Дополнительные отчеты и обработки»

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

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

Кардинальный метод очистки через экспорт в XML

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

Выполним следующие действия:

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

Этот метод гарантированно разрывает связь со старыми GUID и внутренними идентификаторами настроек, так как мы создаем объект «с нуля», используя только логическую структуру старого отчета.

Таким образом, мы выяснили, что проблема «старых настроек» — это не ошибка платформы, а следствие работы механизмов кэширования и идентификации объектов. Главное правило при работе с шаблонами: всегда менять внутреннее имя объекта в конфигураторе и следить за состоянием флагов автосохранения в формах.

← На главную