Почему удаляются сохраненные настройки отчета у пользователя и как обеспечить их сохранность

Программист 1С v8.3 (Обычные формы)
← На главную

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

Анализ механизма «Сохранять значения»

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

Многие ошибочно полагают, что эти настройки живут исключительно в локальном кэше пользователя в папках AppData\Local или AppData\Roaming. Однако, как показывает практика и технический анализ, при работе в клиент-серверном варианте (SQL), основные данные синхронизируются с базой данных и хранятся в системной таблице SystemSettings. Именно поэтому очистка локального кэша часто не приводит к потере настроек — платформа просто выкачивает их заново из SQL-таблицы при следующем сеансе. Но именно здесь и кроется главная причина их пропажи при обновлении.

Выясняем причину №1: Изменение внутреннего идентификатора (GUID)

Рассмотрим ситуацию с обновлением конфигурации. Даже если вы не меняли сам отчет ОСВ, при «точечном» обновлении или использовании механизма «Сравнить и объединить» может произойти изменение внутреннего идентификатора объекта метаданных. Настройки в таблице SystemSettings жестко привязаны к GUID отчета. Если после обновления отчет получил новый внутренний номер, платформа считает его «новым» объектом и не находит для него старых записей в таблице настроек. Старые настройки при этом физически могут оставаться в базе, но они становятся «сиротами».

Выясняем причину №2: Динамическое обновление («Демоническое»)

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

Выясняем причину №3: Особенности платформы 8.3.20.1838

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

Способ 1: Использование внешнего отчета

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

  1. Сохраните отчет ОСВ из конфигуратора как внешний отчет.
  2. Подключите его через механизм «Дополнительные внешние отчеты и обработки».
  3. Попросите пользователя настроить варианты именно в нем.

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

Способ 2: Переход на «Хранилище общих настроек»

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

Для сохранения настроек используем следующий метод:


Процедура СохранитьНастройкиПрограммно()
    НастройкиДляСохранения = Новый Структура;
    НастройкиДляСохранения.Вставить("Счет", ПостроительОтчета.Отбор.Счет.Значение);
    НастройкиДляСохранения.Вставить("Период", Период);
    
    ХранилищеОбщихНастроек.Сохранить("ОтчетОборотноСальдоваяВедомость", "ПользовательскаяНастройка_1", НастройкиДляСохранения);
КонецПроцедуры

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


Процедура ПриОткрытии()
    Настройки = ХранилищеОбщихНастроек.Загрузить("ОтчетОборотноСальдоваяВедомость", "ПользовательскаяНастройка_1");
    Если Настройки <> Неопределено Тогда
        // Заполняем реквизиты формы из структуры
        Счет = Настройки.Счет;
        Период = Настройки.Период;
    КонецЕсли;
КонецПроцедуры

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

Рекомендации по диагностике

Если настройки уже пропали, проанализируем ситуацию с помощью консоли запросов. Вы можете проверить наличие записей в таблицах, связанных с настройками, однако стандартными средствами языка 1С доступ к SystemSettings ограничен. Мы рекомендуем выполнить Тестирование и исправление базы данных с включенными опциями:

Важный момент: если вы используете перемещаемые профили Windows, проверьте права доступа пользователя к папке профиля. Иногда 1С не может записать временный файл настроек перед отправкой его в SQL, из-за чего сохранение просто не срабатывает «тихо», без вывода ошибок.

Подводя итог, можно сказать: для критически важных отчетов в УПП 1.3 лучше всего использовать либо внешние отчеты, либо переписать механизм сохранения на использование регистра сведений или программного хранилища. Это гарантирует, что никакие обновления платформы или реструктуризация базы не затронут пользовательские данные.

← На главную