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