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