Почему во внешнем отчете СКД подгружается другой вариант и как это исправить?

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

При активной разработке в среде «1С:Предприятие 8» программисты часто сталкиваются с ситуацией, когда готовый отчет из конфигурации (например, БГУ 2.0, ЗУП 3.1 или ERP) сохраняется как внешний файл для последующей модификации. Мы вносим необходимые изменения в схему компоновки данных (СКД), настраиваем новые поля, группировки или отборы, сохраняем файл с расширением .erf, запускаем его в режиме «1С:Предприятие» и... видим абсолютно старый вариант отчета. Или, что еще более удивительно, система подгружает настройки совершенно другого отчета.

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

Выясняем техническую причину: почему сбиваются варианты?

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

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

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

Способ 1: Создание отчета с нуля и перенос схемы (Решение автора темы)

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

Разберем по шагам, как это сделать:

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

Способ 2: Дублирование управляемой формы для сброса UUID

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

Проанализируем этот процесс:

  1. Откройте ваш внешний отчет в режиме конфигуратора.
  2. В дереве метаданных отчета найдите раздел Формы.
  3. Нажмите правой кнопкой мыши по вашей основной форме и выберите пункт Скопировать (или используйте сочетание клавиш Ctrl + C и затем Ctrl + V).
  4. В результате в списке появится копия формы с именем вроде ФормаОтчетаКопия.
  5. Перейдите в свойства внешнего отчета (нажмите правой кнопкой мыши по корню отчета -> Свойства).
  6. В строке Основная форма отчета выберите вашу новую скопированную форму (ФормаОтчетаКопия).
  7. Старую форму теперь можно безопасно удалить из списка.
  8. При желании переименуйте скопированную форму обратно в исходное имя (например, ФормаОтчета). При переименовании внутри конфигуратора уникальный идентификатор формы (UUID) сгенерируется заново и не совпадет со старым.

После выполнения этих шагов кэш старых вариантов больше не будет ассоциироваться с вашей формой.

Способ 3: Настройка свойства «Хранилище вариантов»

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

Разберем по шагам, как настроить системное хранилище:

  1. Откройте свойства вашего внешнего отчета в конфигураторе.
  2. Найдите свойство Хранилище вариантов (оно находится в верхней части палитры свойств отчета).
  3. По умолчанию у внешних отчетов это поле может быть пустым. Кликните по кнопке выбора и выберите предопределенное системное хранилище ХранилищеВариантовОтчетов.

Указав данное свойство, вы явно сообщаете платформе 1С о необходимости интеграции отчета в стандартный механизм управления вариантами БСП. Это позволит вам сохранять, изменять и удалять пользовательские варианты отчета в режиме «1С:Предприятие» стандартными средствами платформы без возникновения конфликтов.

Способ 4: Программная очистка кэша вариантов настроек

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

Посмотрим на пример удаления индивидуальных настроек пользователя напрямую из системного хранилища вариантов. Данный код можно выполнить в любой внешней обработке (например, в обработке «Групповая обработка справочников и документов» или через табло отладчика под учетной записью администратора):


// Удаляем сохраненные пользовательские настройки для конкретного внешнего отчета
ИмяОтчетаДляХранилища = "ВнешнийОтчет.ИмяВашегоОтчета";
ТекущийПользовательСистемы = ПользователиИнформационнойБазы.ТекущийПользователь();

ХранилищеВариантовОтчетов.Удалить(ИмяОтчетаДляХранилища, Неопределено, ТекущийПользовательСистемы);

Если ваша конфигурация построена на БСП (как БГУ 2.0 или ЗУП 3), разработчик может воспользоваться программным интерфейсом общего модуля БСП ВариантыОтчетов для сброса настроек. Выполним следующий код:


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

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

Способ 5: Сброс через административную панель в режиме «1С:Предприятие»

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

Проанализируем порядок действий администратора системы:

  1. Запустите информационную базу в режиме «1С:Предприятие» с правами администратора.
  2. Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки.
  3. Найдите ссылку Отчеты (или «Варианты отчетов»).
  4. В открывшемся списке найдите ваш отчет по его названию.
  5. Если в списке присутствуют старые неактуальные варианты, выделите их и удалите либо воспользуйтесь кнопкой сброса настроек до стандартных.

Также при обновлении файла во встроенной подсистеме дополнительных отчетов и обработок не забывайте нажимать кнопку «Обновить варианты отчета», чтобы система БСП перечитала новую схему компоновки из загруженного файла .erf.

Резюме и рекомендации

Мы выяснили причину загадочного поведения внешних отчетов СКД в 1С. Чтобы в вашей практике разработки больше не возникало подобных проблем, рекомендуем придерживаться простых правил:

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

← На главную