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