Как открыть новый вариант отчета и заставить 1С увидеть изменения в метаданных

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

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

Почему 1С «игнорирует» изменения в отчете?

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

Решение 1: Работа со справочником «Варианты отчетов»

Первым делом нам необходимо проверить, что хранится в системных справочниках БСП. Именно там зачастую «застревает» старая структура отчета.

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

Решение 2: Программное обновление идентификаторов метаданных

Часто проблема кроется в том, что справочник ИдентификаторыОбъектовМетаданных не синхронизирован с реальным состоянием конфигурации. Автор темы столкнулся с тем, что обновление идентификаторов требует монопольного режима. Однако рассмотрим способ, как инициировать это обновление программно и более точечно.

Мы можем создать внешнюю обработку и выполнить следующий код, который заставит систему перечитать данные об объектах:


Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные(Истина);
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.ПолучитьДанныеРегистрацииОбъекта(СсылкаНаВашОтчет);

Использование параметра Истина в методе ОбновитьДанные позволяет обновить только те объекты, которые изменились. Часто это срабатывает без необходимости выгонять всех пользователей из базы.

Решение 3: Принудительное обновление через ключи запуска

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

Попробуем запустить сеанс 1С:Предприятия с использованием специального ключа командной строки:

  1. Закроем 1С.
  2. В дополнительных параметрах запуска пропишем: /C ЗапуститьОбновлениеИнформационнойБазы.
  3. Запустим базу. В этот момент будут выполнены все обработчики обновления, включая синхронизацию вариантов отчетов.

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

Решение 4: Манипуляции со схемой компоновки данных (СКД)

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

  1. Зайдем в конфигуратор, откроем наш отчет.
  2. Перейдем в основную схему компоновки данных.
  3. Изменим имя схемы (например, с ОсновнаяСхемаКомпоновкиДанных на ОсновнаяСхемаКомпоновкиДанных_Новая).
  4. Обновим конфигурацию базы данных.
  5. Запустим отчет. Система воспримет это как появление абсолютно новой схемы и полностью перестроит дерево доступных полей.
  6. После этого имя схемы можно вернуть обратно.

Решение 5: Очистка пользовательских настроек

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

Чтобы исключить этот фактор, необходимо:

  1. В пользовательском режиме зайти в меню «Настройки» отчета.
  2. Выбрать пункт «Установить стандартные настройки».
  3. Если это не помогает массово, нужно через «Функции для технического специалиста» найти регистр сведений Пользовательские настройки отчетов и удалить записи, относящиеся к данному отчету для проблемных пользователей.

Итоги и рекомендации

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

  1. Сохраните изменения в конфигураторе и обновите конфигурацию базы данных (F7).
  2. Если изменения не видны, проверьте справочник ВариантыОтчетов и нажмите «Обновить» в карточке нужного отчета.
  3. Если отчет внешний — убедитесь, что вы обновили его в справочнике «Дополнительные отчеты и обработки», так как 1С хранит двоичные данные файла внутри базы.
  4. В крайнем случае используйте запуск с ключом /C ЗапуститьОбновлениеИнформационнойБазы.

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

← На главную