Где хранятся значения СохранитьЗначение и ВосстановитьЗначение в 1С?

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

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

Архитектура хранения данных в таблице Files

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

  1. В клиент-серверном варианте (SQL): Все данные хранятся в системной таблице Files. Внутри этой таблицы настройки каждого пользователя упакованы в бинарное поле.
  2. В файловом варианте (.1cd): Информация также находится во внутренней таблице Files внутри файла базы данных. Для доступа к ней «снаружи» требуются специализированные утилиты, такие как Tool1CD.

Рассмотрим подробнее механизм именования. В таблице Files записи идентифицируются по полю FileName. Настройки конкретного пользователя хранятся в файле, имя которого соответствует его уникальному идентификатору (UID) с расширением .pfl. Например: 071523a4-516f-4fce-ba4b-0d11ab7a1893.pfl.

Как найти настройки конкретного пользователя через SQL

Чтобы понять, какая именно запись в таблице Files принадлежит нужному нам сотруднику, сначала необходимо выяснить его внутренний идентификатор. Разберем по шагам, как это сделать в консоли SQL Server Management Studio:

Выясним UID пользователя с помощью встроенного языка 1С:


УИДпользователя = ПользователиИнформационнойБазы.НайтиПоИмени("ИвановИИ").УникальныйИдентификатор;
Сообщить(УИДпользователя);

Теперь, зная этот идентификатор, мы можем найти соответствующую строку в SQL-таблице Files. Имя файла будет выглядеть как УИД.pfl. Проанализируем типичный формат данных внутри такого «файла»:

Содержимое представляет собой текстовую сериализацию внутреннего формата 1С. В нем хранятся пары «Ключ — Значение». Выглядит это примерно так:

{"имя_переменной", {"S", "строковое_значение"}}

Где литералы "S", "N", "B" обозначают типы данных: Строка (String), Число (Number) или Булево (Boolean). Если сохраняются сложные объекты (например, Структура или Список значений), они записываются в виде вложенных массивов с описанием типов.

Перенос настроек между пользователями

Иногда возникает задача скопировать настройки интерфейса или заполнения документов от одного опытного пользователя всем новичкам. Зная структуру таблицы Files, мы можем выполнить это прямым SQL-запросом. Рассмотрим пример копирования настроек от «Образцового пользователя» к «Новому пользователю»:


UPDATE [Files] 
SET [BinaryData] = (SELECT [BinaryData] FROM [Files] WHERE [FileName] = 'UID_ОБРАЗЦА.pfl'), 
    [DataSize] = (SELECT [DataSize] FROM [Files] WHERE [FileName] = 'UID_ОБРАЗЦА.pfl') 
WHERE [FileName] = 'UID_НОВОГО_ПОЛЬЗОВАТЕЛЯ.pfl'

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

Что делать, если настройки перестали сохраняться?

Бывают ситуации, когда пользователи жалуются: «Я настраиваю список, а при следующем входе все пропадает». Выясним причину: чаще всего это происходит из-за логического повреждения таблицы Files. Разберем два пути решения проблемы.

Способ 1: Программная очистка через 1С

Это самый безопасный метод. Мы можем использовать метод встроенного языка, который корректно удалит «битые» настройки пользователя, не прибегая к SQL. Создадим простую обработку с кодом:


ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
ОчиститьНастройкиПользователя(ТекущийПользовательИБ);
Сообщить("Настройки успешно сброшены. Перезайдите в систему.");

Этот метод полностью очищает файл .pfl пользователя в таблице Files, позволяя платформе создать его заново «с чистого листа».

Способ 2: Восстановление таблицы Files средствами SQL

Если проблема носит массовый характер и тестирование/исправление (ТиИ) не помогает, можно прибегнуть к низкоуровневому лечению базы данных. Рассмотрим последовательность команд для MS SQL Server. Если же требуется настроить регулярное техническое обслуживание нескольких баз без участия администратора, стоит использовать инструмент для архивации, тестирования и обновления 1С по расписанию.

  1. Переводим базу в аварийный однопользовательский режим:
    
    ALTER DATABASE [Имя_Базы] SET EMERGENCY;
    ALTER DATABASE [Имя_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    
  2. Запускаем проверку и исправление с возможной потерей данных (в контексте таблицы Files это обычно не критично): DBCC CHECKDB('Имя_Базы', REPAIR_ALLOW_DATA_LOSS);
  3. Возвращаем базу в обычный режим: ALTER DATABASE [Имя_Базы] SET MULTI_USER;

Взаимодействие с современными хранилищами настроек

Стоит отметить, что в современных конфигурациях (на управляемых формах) вместо СохранитьЗначение чаще используются системные хранилища настроек. Проанализируем ситуацию: если ваша конфигурация написана на базе 8.2/8.3, данные могут находиться не только в Files, но и в таблице SystemSettings.

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


Выборка = ХранилищеСистемныхНастроек.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить("Ключ: " + Выборка.КлючОбъекта + " | Пользователь: " + Выборка.Пользователь);
КонецЦикла;

Подведем итоги

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

Помните, что любое прямое вмешательство в таблицы базы данных через SQL является крайней мерой. Всегда делайте резервную копию перед выполнением запросов UPDATE или DELETE в системных таблицах 1С.

← На главную