Разработка отчетов на системе компоновки данных (СКД) часто сопровождается досадной проблемой: вы добавляете новое поле, меняете группировку или редактируете вычисляемое поле в конфигураторе, но в режиме «1С:Предприятие» отчет упорно показывает старую структуру. Кажется, что система игнорирует изменения, даже если вы перезапускаете программу или сбрасываете настройки. Разберем подробно, почему так происходит и как гарантированно победить кеширование на разных уровнях системы.
Для начала проанализируем ситуацию: почему настройки «залипают»? Платформа 1С сохраняет пользовательские настройки (выбранные поля, отборы, порядок) в специальных хранилищах. Когда вы открываете отчет, система ищет ранее сохраненные данные по уникальному идентификатору отчета или пути к файлу (для внешних отчетов). Если структура СКД в конфигураторе изменилась, сохраненные настройки могут войти в конфликт с новой схемой. Важно понимать: платформа отдает приоритет сохраненным настройкам пользователя над настройками по умолчанию из схемы.
Рассмотрим по шагам основные способы решения проблемы, начиная с самых простых и заканчивая радикальными методами.
Первое, что мы должны сделать — это попытаться сбросить текущий вариант отчета. В управляемых формах это делается через меню «Все действия» (или кнопку «Еще»).
Зачастую обычный сброс настроек восстанавливает параметры и отборы, но игнорирует состав выбранных полей, если они были жестко зафиксированы в пользовательском сеансе. В этом случае переходим к более глубоким методам.
Иногда проблема кроется не в настройках СКД, а в кэшировании самой структуры объекта метаданных на стороне клиента. Проанализируем состояние папок пользователя. Платформа хранит временные данные в каталогах AppData.
Попробуем выполнить следующие действия:
%LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8.Для разработчиков полезно добавить параметр /ClearCache в дополнительные параметры запуска информационной базы в окне выбора баз. Это заставит систему обновлять кэш метаданных при каждом запуске, что критически важно при активной отладке структуры СКД.
Если ваш отчет добавлен в справочник «Дополнительные отчеты и обработки» (типовые конфигурации вроде УТ 11, ERP, БП 3.0), механизм кеширования работает иначе. БСП кэширует макеты компоновки в специальном регистре сведений для ускорения работы.
Выясним причину: при обновлении файла внешнего отчета в справочнике система может не обновить внутренние закэшированные данные. Рассмотрим алгоритм действий:
.erf.Макеты компоновки данных. Это можно сделать через «Функции для технического специалиста». Найдите записи, относящиеся к вашему отчету, и удалите их. При следующем формировании система создаст макет заново на основе актуальной схемы.Если вы находитесь в процессе активной разработки внешнего отчета и не хотите каждый раз чистить кэш вручную, можно применить программный метод в модуле объекта отчета. Разберем пример кода в процедуре ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
// Игнорируем стандартное формирование, чтобы сбросить кэш форм
СтандартнаяОбработка = Ложь;
// Принудительно загружаем настройки по умолчанию из схемы
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
// Далее выполняем стандартный вывод результата
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Этот метод гарантирует, что при каждом формировании отчета система будет брать структуру «как в конфигураторе», игнорируя любые пользовательские изменения. После завершения отладки этот блок кода следует закомментировать или удалить, чтобы вернуть пользователям возможность сохранять свои настройки.
Когда ни один из способов не помогает, а время поджимает, воспользуемся методом смены идентификаторов. Платформа привязывает настройки к имени объекта. Если мы изменим имя отчета, 1С воспримет его как абсолютно новый объект и создаст для него чистую ветку в хранилищах настроек.
Рассмотрим варианты реализации:
ПродажиПоСкладам на ПродажиПоСкладам_Новый)..erf.Подведем итоги нашего анализа. Проблема кеширования СКД — это не «глюк» платформы, а следствие работы сложных механизмов оптимизации и хранения пользовательских данных. Для эффективной борьбы с этим явлением рекомендуем придерживаться следующей последовательности:
/ClearCache.Макеты компоновки данных и обновляйте карточку в справочнике «Дополнительные отчеты».ПриКомпоновкеРезультата.Использование быстрых настроек СКД также помогает избежать многих проблем, так как они выводятся непосредственно на форму и ими легче манипулировать в режиме пользователя. Надеемся, что эти методы помогут вам сэкономить время при разработке отчетов.