Почему во внешнем отчете 1С на управляемых формах не обновляются настройки и как их полностью очистить?

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

Каждый разработчик 1С, работающий с управляемыми формами, рано или поздно сталкивается с раздражающей ситуацией: вы вносите изменения в схему компоновки данных (СКД) внешнего отчета (удобнее через инструментарий для анализа метаданных и объектов СКД), меняете текст запроса или состав полей, сохраняете файл, открываете его в режиме «Предприятие», а отчет продолжает работать по-старому. Создается впечатление, что программа игнорирует ваши правки и «помнит» то, что было в самой первой версии файла.

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

Причина проблемы: Механизм идентификации и слияния настроек

Для начала выясним причину такого поведения. Платформа 1С идентифицирует внешний отчет не по имени файла (например, МойОтчет_v2.erf), а по внутреннему имени объекта, которое задано в корне свойств отчета в Конфигураторе. Когда вы открываете внешний отчет, 1С обращается к своим системным хранилищам, чтобы найти последние использованные настройки для объекта с таким именем.

Проблема усугубляется механизмом СКД. Система компоновки данных при открытии пытается выполнить «слияние» (merge) текущих настроек из файла и тех, что сохранены в базе данных для этого пользователя. Если в базе сохранен старый вариант настроек, он будет иметь приоритет над тем, что вы жестко задали в схеме. В итоге, даже если вы полностью переписали запрос в СКД, пользовательские настройки «накладываются» сверху, восстанавливая старые отборы и группировки.

Способ 1: Смена внутреннего имени объекта (Самый быстрый метод)

Рассмотрим наиболее простой и эффективный способ для разработчика в процессе отладки — для этого подойдёт инструмент для пошаговой отладки и вычисления выражений в 1С. Чтобы платформа восприняла отчет как абсолютно новый, достаточно изменить его внутренний идентификатор. Посмотрим на алгоритм действий:

  1. Откройте внешний отчет в Конфигураторе.
  2. Нажмите правой кнопкой мыши на корень дерева метаданных отчета и выберите «Свойства».
  3. В поле «Имя» измените название (например, добавьте индекс или текущую дату: МойОтчет -> МойОтчет_20231027).
  4. Сохраните файл и откройте его в режиме «Предприятие».

Поскольку имя изменилось, 1С не найдет в хранилище старых настроек для этого «нового» объекта и загрузит структуру СКД непосредственно из файла. Это гарантирует, что вы увидите актуальный результат запроса и полей.

Способ 2: Сброс к стандартным настройкам в режиме «Предприятие»

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

  1. Запустите отчет в режиме «1С:Предприятие».
  2. Найдите на форме кнопку «Еще» (или «Все действия»).
  3. Перейдите в подменю «Установить стандартные настройки».

В этот момент платформа отбросит все пользовательские изменения и принудительно прочитает настройки по умолчанию из схемы компоновки данных, находящейся внутри файла. В большинстве случаев этого достаточно, чтобы изменения в запросе или составе полей вступили в силу.

Способ 3: Программная очистка системных хранилищ

Иногда настройки «залипают» настолько глубоко (особенно в части кэширования форм), что стандартный сброс не помогает. В этом случае мы можем программно обратиться к объектам, где хранятся данные. В 1С 8.3 за это отвечают ХранилищеСистемныхНастроек, ХранилищеОбщихНастроек и ХранилищеПользовательскихНастроекОтчетов.

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


// Определим ключ объекта. Для внешних отчетов он обычно строится так:
// ВнешнийОтчет.ИмяВашегоОтчета/НастройкиКомпоновщика
КлючОбъекта = "ВнешнийОтчет.ИмяВашегоОтчета.НастройкиКомпоновщика";

// Удаляем настройки из системного хранилища
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, Неопределено, ИмяПользователя());

// Также стоит очистить настройки формы, если они мешают обновлению
КлючФормы = "ВнешнийОтчет.ИмяВашегоОтчета.Форма.ФормаОтчета/НастройкиФормы";
ХранилищеОбщихНастроек.Удалить(КлючФормы, Неопределено, ИмяПользователя());

Этот метод позволяет точечно «почистить память» системы без необходимости переименовывать файл или менять метаданные.

Способ 4: Отключение сохранения настроек в свойствах формы

Если вы находитесь в процессе активной разработки и часто меняете структуру СКД, постоянная очистка настроек может утомлять. Проанализируем, как автоматизировать этот процесс на этапе проектирования. В свойствах Формы отчета есть важный параметр — АвтоматическоеСохранениеДанныхВНастройках.

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

Особенности работы в конфигурациях с БСП

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

Выясним еще один нюанс: кэш клиента. Иногда помогает полная очистка локального кэша пользователя (папки в AppData/Local/1C). Хотя настройки СКД хранятся в базе, некоторые элементы оформления и представления полей могут кэшироваться локально на компьютере разработчика.

Итоги

Мы рассмотрели несколько уровней решения проблемы: от простого переименования объекта Метаданные до программного манипулирования ХранилищеСистемныхНастроек. Помните, что платформа 1С стремится к максимальному удобству пользователя, сохраняя его настройки, и именно эта «забота» часто мешает программисту увидеть плоды своих трудов. Используйте комбинацию переименования и команды «Установить стандартные настройки», и проблема «залипания» данных исчезнет.

← На главную