Как сбросить или перенести битые настройки отчетов и обработок в 1С, если конфигурация закрыта для изменений?

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

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

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

Где на самом деле хранятся настройки в 1С:Предприятие 8.3?

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

В современных конфигурациях на управляемых формах (особенно разработанных на базе БСП — Библиотеки стандартных подсистем) настройки сохраняются непосредственно внутри самой базы данных в специальных системных таблицах. Платформа оперирует механизмами под общим названием Хранилища настроек. Рассмотрим ключевые из них:

  1. ХранилищеНастроекДанныхФорм — здесь хранятся состояния полей, списков документов, отборов и флажков управляемых форм стандартных обработок и отчетов.
  2. ХранилищеПользовательскихНастроекОтчетов — отвечает за персональные пользовательские отборы, группировки и условное оформление отчетов.
  3. ХранилищеВариантовОтчетов — сохраняет новые пользовательские варианты отчетов, созданные на основе стандартных схем компоновки данных (СКД).
  4. СистемноеХранилищеНастроек — хранит размеры окон, положение панелей, настройки печати, историю выбора и избранное.

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

Решение 1: Сброс «битых» настроек через внешнюю обработку (метод для закрытых конфигураций)

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

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

  1. Откроем информационную базу в режиме «1С:Предприятие».
  2. Выгрузим проблемный отчет или обработку во внешний файл (меню Файл — Сохранить как..., если объект открыт, или найдем его аналог в дистрибутиве).
  3. Откроем сохраненный файл .epf (или .erf для отчетов) через внешнюю обработку в режиме конфигуратора (даже в закрытой конфигурации вы можете открывать и редактировать внешние файлы).
  4. Найдем модуль формы или модуль объекта, где происходит инициализация и загрузка сохраненных настроек (обычно это процедуры ПриСозданииНаСервере или ПередЗагрузкойДанныхФормыВНастройкиСохранения).
  5. Закомментируем программный код, отвечающий за автоматическое восстановление значений. Это заставит форму открыться с пустыми параметрами по умолчанию.
  6. Запустим эту внешнюю обработку в режиме «1С:Предприятие» под проблемным пользователем. Форма откроется успешно, так как старые поврежденные настройки проигнорируются.
  7. Перезапишем настройки (например, нажав кнопку «Сохранить настройки» или просто закрыв форму с флагом сохранения параметров). Платформа запишет в базу данных пустой или корректный набор значений поверх старого «битого» ключа.
  8. Теперь запустим стандартную встроенную обработку из закрытой конфигурации. Она успешно откроется, так как сохраненные настройки в базе данных для этого объекта уже обновлены и не содержат несуществующих ссылок.

Решение 2: Очистка настроек штатными инструментами БСП (рекомендуемый метод)

Если вы работаете в современной типовой конфигурации (например, 1С:Бухгалтерия 3.0 или 1С:Управление торговлей 11) и у вас есть права администратора, вам не потребуется прибегать к техническим ухищрениям. В составе Библиотеки стандартных подсистем уже присутствует удобный визуальный интерфейс для управления настройками.

Рассмотрим детально, как выполнить очистку точечно:

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

Решение 3: Перенос настроек между разными информационными базами

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

Методология переноса зависит от типа объекта.

А. Перенос для отчетов на базе СКД

Для отчетов в платформе предусмотрен штатный механизм выгрузки структуры настроек в XML-файл. Выполним следующие действия:

  1. В исходной базе откроем отчет и перейдем в меню Еще — Варианты отчета — Сохранить в файл... (в некоторых интерфейсах путь выглядит так: Еще — Настройки — Расширенный вид — Еще — Настройки технического специалиста — Сохранить настройки).
  2. Сохраним полученный XML-файл на локальный диск.
  3. В целевой базе откроем этот же отчет, перейдем в меню Еще — Варианты отчета — Обновить из файла... и укажем сохраненный ранее XML.

Б. Перенос настроек для обычных обработок

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

Вариант 1 (В рамках одной базы): Если настройки нужно передать от одного коллеги другому внутри одной базы данных, используем стандартный инструмент: Администрирование — Настройки пользователей и прав — Копирование настроек. Выбираем донора, отмечаем нужную обработку и копируем настройки получателям.

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

Рассмотрим пример кода для выгрузки и последующей загрузки параметров формы:


// Шаг 1: Экспорт настройки в исходной базе данных
ИмяОбработки = "Обработка.ПереносДанныхВИдентичнуюКонфигурацию";
ИмяФормы = "Форма";
ИмяНастройки = "НастройкиОтбораПоПодразделениям"; // Имя сохраненного ключа
ИмяПользователя = "Администратор";

// Получаем структуру данных из системного хранилища формы
Настройка = ХранилищеНастроекДанныхФорм.Загрузить(ИмяОбработки + "/" + ИмяФормы, ИмяНастройки, , ИмяПользователя);

// Сериализуем объект настройки в XML-строку для переноса
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Настройка);
СтрокаXMLДанных = ЗаписьXML.Закрыть();

// Эту строку XML переносите в целевую базу данных

// Шаг 2: Импорт настройки в целевой базе данных
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXMLДанных);
ВосстановленнаяНастройка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

// Записываем структуру обратно в системную таблицу целевой базы
ХранилищеНастроекДанныхФорм.Сохранить(ИмяОбработки + "/" + ИмяФормы, ИмяНастройки, ВосстановленнаяНастройка, , ИмяПользователя);

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

← На главную