Пользовательские настройки в 1С 8.3: устройство хранилищ, резервирование, чистка и код

· 9 мин

Содержание

Хранилище настроек 1С 8.3 — это служебные таблицы внутри самой информационной базы, а не файлы на компьютере пользователя. Поэтому настройки уезжают вместе с выгрузкой .dt или резервной копией SQL, а восстановить их можно двумя путями: целиком из копии базы или выборочно, через обработку «Настройки пользователей» и программный код.

Какой путь выбрать, решает масштаб беды. Сломалась форма у одного бухгалтера — хватит очистки его настроек. Пропали настройки у всех после неудачного обновления — нужна резервная копия и перенос данных из неё. Ниже разобраны оба случая, плюс то, как работать с хранилищем из кода и не дать ему разрастись.

Как устроено хранилище настроек в 1С 8.3

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

ХранилищеЧто в нём лежитОбъект во встроенном языке
Общие настройкиПроизвольные значения, которые сохраняет конфигурация: основная организация, флажки «больше не показывать» и т. п.ХранилищеОбщихНастроек
Системные настройкиПоложение и размер окон, состав панелей, история, избранноеХранилищеСистемныхНастроек
Настройки данных формЗначения реквизитов формы, которые помечены для сохраненияХранилищеНастроекДанныхФорм
Варианты отчётовСохранённые варианты отчётов на СКДХранилищеВариантовОтчетов
Пользовательские настройки отчётовОтборы, период, группировки, которые человек выставил в отчётеХранилищеПользовательскихНастроекОтчетов

Каждая запись в хранилище определяется тремя ключами:

  • 🔑 ключ объекта — к чему относится настройка (обычно полное имя формы или отчёта);
  • 🏷️ ключ настроек — какая именно настройка внутри объекта;
  • 👤 имя пользователя — чья это настройка.

Разработчик может подменить любое стандартное хранилище, кроме системного, своим объектом. Для этого в дереве метаданных есть ветка «Хранилища настроек», а в свойствах корня конфигурации — поля «Хранилище общих настроек», «Хранилище вариантов отчётов» и другие. Если поле заполнено, платформа вызывает обработчики из модуля менеджера этого объекта вместо стандартного механизма.

Ключевое право — «Сохранение данных пользователя». Если его нет в ролях пользователя, платформа ничего не запишет: окна, отборы и варианты будут сбрасываться при каждом входе. Это первая проверка, когда жалуются «настройки не сохраняются».

Где физически хранятся настройки и как их найти

Расположение зависит от варианта работы базы.

Файловая база. Всё лежит внутри файла 1Cv8.1CD в каталоге базы. Отдельной папки с настройками нет, открыть таблицы без платформы нельзя.

Клиент-серверная база . Каждое хранилище — отдельная таблица в СУБД:

ТаблицаХранилище
_CommonSettingsобщие настройки
_SystemSettingsсистемные настройки
_FrmDtSettingsнастройки данных форм
_RepVarSettingsварианты отчётов
_RepSettingsпользовательские настройки отчётов

В таблицах есть колонки с пользователем, ключом объекта, ключом настроек и двоичным полем с самими данными. Прочитать двоичное поле запросом SQL не получится: формат внутренний.

А что тогда лежит в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8 на компьютере пользователя? Там список баз, кэш конфигурации и временные файлы. Очистка этих папок (или запуск с параметром /ClearCache) не удаляет пользовательские настройки из базы. Это частая путаница: человек чистит кэш в надежде сбросить «сломанную» форму, а форма открывается так же.

Чтобы оценить объём таблиц на сервере, достаточно штатных средств СУБД:

-- MS SQL Server: размер таблицы настроек форм
EXEC sp_spaceused '_FrmDtSettings';

-- PostgreSQL: то же самое
SELECT pg_size_pretty(pg_total_relation_size('_frmdtsettings'));

Нормальный размер — десятки мегабайт. Сотни мегабайт и гигабайты обычно означают, что какая-то форма сохраняет в настройки большие таблицы значений.

Резервная копия хранилища настроек: три способа

Отдельной кнопки «выгрузить только настройки» в платформе нет. Работают три подхода.

СпособЧто попадёт в копиюКогда выбирать
Выгрузка .dt из конфигуратораВся база, включая все хранилищаПеред обновлением, перед массовой чисткой
Резервная копия средствами СУБДВся база, включая таблицы настроекРегулярный регламент на сервере
Выгрузка через код в файлТолько выбранные хранилища и пользователиПеренос настроек между базами, точечный откат

Первые два способа знакомы любому администратору. Выгрузка .dt делается через Администрирование → Выгрузить информационную базу в конфигураторе. Для SQL — обычный полный бэкап.

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

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

Как восстановить настройки после сбоя

Порядок действий зависит от того, что именно сломалось.

Испорчены настройки одного пользователя

Типичная картина: у одного сотрудника форма документа открывается с ошибкой или пустой, у остальных всё в порядке. Решение — сбросить его настройки.

  1. Попросите пользователя выйти из программы.
  2. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) откройте Администрирование → Настройки пользователей и прав → Настройки пользователей.
  3. Выберите пользователя, перейдите на вкладку с нужным видом настроек.
  4. Отметьте проблемную форму или отчёт и удалите его настройки. Если источник неизвестен — очистите все настройки внешнего вида.
  5. Пользователь заходит снова, форма открывается в стандартном виде.

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

Пропали или повреждены настройки у многих

Это бывает после восстановления базы «не из той» копии, после сбоя СУБД или после обновления, которое поменяло структуру форм.

  1. Разверните последнюю исправную резервную копию в отдельную базу. Рабочую не трогайте.
  2. В копии выгрузите нужные хранилища в файл обработкой из раздела про код.
  3. В рабочей базе загрузите файл той же обработкой, режим «загрузка».
  4. Проверьте у двух-трёх пользователей, что формы и отчёты выглядят как раньше.

Не копируйте таблицы настроек между базами средствами SQL. Внутренние идентификаторы и формат данных привязаны к конкретной базе, итог такой операции непредсказуем.

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

В той же обработке «Настройки пользователей» есть команда копирования: выберите пользователя-образец, отметьте виды настроек и получателей. Удобно для нового сотрудника, который должен видеть те же отчёты и рабочий стол, что и коллега.

Диагностика: выберите симптом

Ошибки, из-за которых настройки теряются или ломаются

Большинство проблем создают не сбои, а действия людей.

  • 🧹 Чистка «в лоб» через SQL. Команда TRUNCATE по таблице настроек форм решает проблему размера, но заодно стирает настройки у всех. Если чистить, то через платформу и выборочно.
  • ✏️ Переименование пользователя напрямую в конфигураторе. Ключ записи в хранилище — имя пользователя. В конфигурациях на БСП меняйте имя через карточку пользователя в режиме «Предприятие»: там библиотека сама переносит настройки.
  • 🗑️ Удаление пользователей без очистки. Записи удалённого сотрудника остаются в таблицах и занимают место. Перед удалением очистите его настройки той же обработкой.
  • 🧩 Внешние обработки, которые пишут в общие настройки всё подряд. Одна неудачная доработка способна сохранять при каждом закрытии формы таблицу на десятки тысяч строк.
  • 🔐 Урезанные роли. При настройке собственной роли легко забыть право «Сохранение данных пользователя».

Как не дать хранилищу разрастись: советы администратору

Хранилище настроек растёт незаметно. Проблема всплывает, когда формы начинают открываться с задержкой, а выгрузка .dt распухает на сотни мегабайт.

  1. Раз в квартал смотрите размер таблиц запросом из раздела про физическое хранение. Сравнивайте с прошлым замером.
  2. Ищите «тяжёлые» записи. Сгруппируйте выборку из хранилища по ключу объекта и посчитайте размер данных. Обычно виноваты 2–3 формы.
  3. Удаляйте настройки уволенных сотрудников до удаления самих пользователей.
  4. Не храните в настройках данные. Если доработке нужно запоминать списки, таблицы или файлы, для этого подходит регистр сведений , а не ХранилищеОбщихНастроек.
  5. После крупного обновления проверьте формы, у которых поменялся состав реквизитов: старые настройки иногда мешают открытию. Очистка настроек одной формы безопаснее, чем очистка всех.
  6. Следите за тяжёлыми вариантами отчётов. Если человек сохранил вариант отчёта с периодом «за 10 лет», его открытие будет каждый раз нагружать сервер.

Массовую очистку настроек делайте в нерабочее время и предупредите пользователей: при следующем входе у всех будет стандартный вид окон и отчётов. Люди воспринимают это как «всё сломалось», если не знают заранее.

Работа с хранилищем настроек из кода

У всех стандартных хранилищ одинаковый набор основных методов: Сохранить, Загрузить, Удалить. У стандартных хранилищ есть ещё Выбрать — выборка записей с отбором. Обращение к чужим настройкам требует административных прав.

Сохранить и прочитать значение

// Запомнить основную организацию для текущего пользователя
ХранилищеОбщихНастроек.Сохранить("НастройкиУчета", "ОсновнаяОрганизация", Организация);

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

В конфигурациях на БСП удобнее вызывать обёртки ОбщегоНазначения.ХранилищеОбщихНастроекСохранить и ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить. Они учитывают право на сохранение данных пользователя и позволяют задать значение по умолчанию прямо в вызове.

Удалить настройки пользователя

// Очистить все настройки данных форм пользователя Иванов
// Неопределено в ключах означает «все ключи»
ХранилищеНастроекДанныхФорм.Удалить(Неопределено, Неопределено, "Иванов");

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

Выгрузить общие настройки всех пользователей в файл

Пример для серверного модуля обработки. Он обходит хранилище и сохраняет записи в массив, а затем пишет массив в файл.

&НаСервереБезКонтекста
Процедура ВыгрузитьОбщиеНастройки(ИмяФайла)

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

	ЗначениеВФайл(ИмяФайла, Записи);

КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьОбщиеНастройки(ИмяФайла)

	Записи = ЗначениеИзФайла(ИмяФайла);
	Для Каждого Запись Из Записи Цикл
		ХранилищеОбщихНастроек.Сохранить(Запись.КлючОбъекта, Запись.КлючНастроек,
			Запись.Настройки, , Запись.Пользователь);
	КонецЦикла;

КонецПроцедуры

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

Файл пишется на сервере, поэтому путь должен быть доступен процессу сервера 1С, а не компьютеру администратора. В клиент-серверном варианте это частая причина ошибки «не удалось открыть файл».

Собственное хранилище настроек

Если стандартного механизма мало — например, настройки нужно хранить в регистре и видеть их в обычном отчёте — создайте объект в ветке «Хранилища настроек» и укажите его в свойствах конфигурации. В модуле менеджера опишите обработчики ОбработкаСохранения и ОбработкаЗагрузки: платформа будет вызывать их вместо записи в стандартную таблицу. Метод Выбрать у такого хранилища не работает , обход записей придётся писать самому через регистр.

Такую доработку в типовой конфигурации лучше делать расширением, чтобы не снимать конфигурацию с поддержки.

Частые вопросы о хранилище настроек

Попадают ли пользовательские настройки в выгрузку .dt?
Да. Все стандартные хранилища — таблицы самой базы, поэтому выгрузка .dt и копия SQL содержат их полностью.
Можно ли перенести настройки в другую базу той же конфигурации?
Да, через обработку с выгрузкой в файл и загрузкой в целевой базе. Пользователи с теми же именами должны существовать в обеих базах.
Сколько места обычно занимают настройки?
В базе на 20–50 пользователей — десятки мегабайт. Если таблица настроек форм перевалила за гигабайт, ищите форму, которая сохраняет в настройки большие данные.
Видит ли пользователь настройки коллег?
Нет. Без административных прав код и интерфейс дают доступ только к собственным записям текущего пользователя.
Сбросятся ли настройки после обновления конфигурации?
Обычно нет. Сбрасываются только настройки тех форм и отчётов, у которых разработчики заметно поменяли состав, и то не всегда.