Каждый разработчик, работающий с Системой компоновки данных (СКД) в «1С:Предприятие 8.3», рано или поздно сталкивается с неприятной особенностью платформы. Вы вносите изменения в схему компоновки данных внешнего отчета в Конфигураторе (например, добавляете новое поле, меняете группировку или параметры), сохраняете файл, открываете его в режиме «1С:Предприятие» через меню Файл — Открыть, но... ничего не меняется! Отчет упорно отображает старую структуру, игнорируя ваши правки.
В этой статье мы подробно разберем природу этого поведения платформы 1С и изучим все существующие способы решения проблемы: от простых манипуляций в пользовательском интерфейсе до программных методов сброса настроек.
Давайте выясним первопричину такого поведения системы. Дело в том, что платформа 1С стремится сделать работу пользователей максимально комфортной. Для этого в системе реализован механизм автоматического сохранения пользовательских настроек (выбранных полей, отборов, сортировок). Эти данные записываются в специальное системное хранилище (таблица ХранилищеНастроек в базе данных).
Когда вы открываете внешний отчет, платформа идентифицирует его по уникальным признакам (таким как имя отчета в метаданных, уникальный идентификатор формы UUID или ключ варианта). При повторном открытии отчета 1С находит в базе сохраненные ранее настройки для этого идентификатора и принудительно накладывает их поверх вашей новой схемы компоновки данных. В итоге новые поля из конфигуратора перекрываются старым пользовательским вариантом из кэша. Для анализа применяемых настроек и компоновки данных в пользовательском сеансе можно использовать расширение для отладки СКД и запросов под пользователем.
Переименование файла или самого объекта в метаданных помогает именно потому, что для платформы этот отчет становится «новым» объектом с чистой историей настроек. Однако постоянно переименовывать отчет — крайне неудобный и неэффективный путь. Рассмотрим более профессиональные методы.
---
Самый быстрый способ заставить платформу перечитать XML-схему из файла отчета — выполнить интерактивный сброс настроек в режиме «1С:Предприятие». Разберем этот процесс по шагам:
После выполнения этих действий платформа принудительно сотрет пользовательские корректировки текущего сеанса и загрузит чистую структуру схемы из файла вашего отчета.
---
Если вы хотите, чтобы при открытии внешнего отчета настройки всегда обновлялись до актуального состояния из схемы, мы можем прибегнуть к программным методам. Для этого используется метод Восстановить() компоновщика настроек.
Проанализируем пример кода, который можно разместить в модуле формы отчета в обработчике события ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Сбрасываем текущие настройки к настройкам по умолчанию, заданным в схеме СКД
ЭтотОбъект.Отчет.КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновщикаИКомпоновкиДанных.Полное);
КонецПроцедуры
Использование параметра СпособВосстановленияНастроекКомпоновщикаИКомпоновкиДанных.Полное гарантирует, что компоновщик полностью перечитает структуру схемы компоновки данных и сбросит все пользовательские изменения, вернув отчет к первозданному виду, спроектированному в Конфигураторе.
Если отчет разработан на базе Библиотеки стандартных подсистем (БСП), для сброса настроек можно вызвать специализированный метод:
ВариантыОтчетов.СброситьПользовательскиеНастройки(КлючВарианта, ТипыНастроек);
Этот метод очистит сохраненные варианты в системных таблицах БСП для конкретного отчета.
---
Бывают ситуации, когда настройки «намертво» привязались к конкретной форме отчета на компьютере разработчика или пользователя. Чтобы быстро решить эту проблему без переименования самого файла отчета, мы можем сгенерировать новую форму.
Выполним следующие шаги в Конфигураторе:
При создании новой формы платформа автоматически сгенерирует для неё новый уникальный идентификатор (UUID). Поскольку в системной базе данных нет сохраненных настроек для этого нового идентификатора, отчет откроется с абсолютно чистыми настройками из конфигуратора.
---
Если вы разрабатываете отчет для последующей загрузки в справочник «Дополнительные отчеты и обработки» (механизм БСП), критически важно правильно настроить свойства самого объекта метаданных в Конфигураторе.
Рассмотрим порядок настройки:
ХранилищеВариантовОтчетов.Если оставить это поле пустым, то при интеграции в рабочую базу отчет не сможет корректно взаимодействовать с подсистемой вариантов БСП. Платформа будет пытаться сохранять настройки в стандартное хранилище, что приведет к постоянным конфликтам версий схемы данных при обновлении отчета. Для пакетной загрузки и обновления измененных отчетов в БСП можно использовать инструмент для выгрузки и загрузки дополнительных отчетов с контролем версий.
---
Что делать, если вы обновили внешний отчет у пользователей, и у них поплыла верстка или перестали формироваться данные из-за кэша настроек? Требовать от каждого пользователя заходить в настройки для технического специалиста неэффективно. Администратор базы данных может сбросить эти настройки централизованно. В случае необходимости автоматизировать другие повторяющиеся действия в пользовательском интерфейсе платформа для создания программных роботов One RPA позволяет настроить выполнение необходимых сценариев без ручного вмешательства.
Разберем, как это сделать в типовых конфигурациях 1С:
При следующем запуске отчета у всех пользователей автоматически загрузится актуальный вариант структуры СКД непосредственно из обновленного файла.
---
При активной разработке и отладке внешних отчетов постоянный сброс настроек утомляет. Мы можем настроить платформу так, чтобы она в принципе не кэшировала файлы во время сеанса отладки.
Вариант А. Параметр запуска /ClearCache
Мы можем указать платформе очищать локальный кэш метаданных при каждом запуске базы. Для этого:
/ClearCache.Вариант Б. Настройка параметров публикации на веб-сервере
Если вы ведете разработку или тестирование через веб-клиент или в файловом варианте с публикацией, убедитесь, что в настройках публикации на веб-сервере активен режим отладки. В конфигураторе перейдите в меню Администрирование — Публикация на веб-сервере. На вкладке «Дополнительно» установите флаг Режим отладки (это предотвратит агрессивное кэширование файлов веб-сервером).
Вариант В. Физическое удаление временных файлов
Если настройки зависли «намертво» и ни один способ не помогает, закройте 1С и очистите папки локального кэша на вашем компьютере. Удалите содержимое папок по следующим путям:
%appdata%\1C\1cv8%localappdata%\1C\1cv8Подводя итог, отметим: при разработке внешних отчетов СКД лучшей практикой является использование комбинации программного вызова метода Восстановить() для компоновщика настроек на этапе отладки и обязательное указание ХранилищеВариантовОтчетов перед передачей готового отчета пользователям.