Разработка и Конфигурация · 10 мин
1С: как сохранить настройки управляемой формы
Как сохранить настройки управляемой формы в 1С: стандартные варианты, программное сохранение через ХранилищеНастроек, типичные ошибки и проверка результата.
Управляемые формы в 1С:Предприятие 8.3 умеют запоминать своё состояние: размеры и положение колонок табличных частей, видимость элементов, настройки динамических списков и отчётов. Часть настроек платформа сохраняет автоматически, часть — только если разработчик явно организовал их хранение. Понимание этого механизма важно и пользователю, который хочет вернуть привычный вид формы, и разработчику, которому нужно сохранить произвольные реквизиты между сеансами.
Настройки управляемой формы хранятся в системном хранилище настроек — по умолчанию это таблица в информационной базе (для файлового варианта) или служебная таблица в СУБД (для клиент-серверного). Доступ к ним возможен как через стандартные команды интерфейса, так и программно через объект ХранилищеНастроек и параметры формы. Ниже разобраны оба подхода с конкретными действиями и ограничениями.
Какие настройки формы 1С сохраняет автоматически
Платформа сама запоминает часть состояния управляемой формы без участия разработчика: ширину и порядок колонок таблиц, видимость колонок, размеры и положение окна, настройки динамических списков (отбор, сортировка, группировка, условное оформление), а также варианты отчётов на СКД. Сохранение происходит при закрытии формы, восстановление — при следующем открытии.
За автоматическое сохранение отвечает свойство формы «АвтоматическоеСохранениеДанныхВНастройках» (в конфигураторе — палитра свойств формы). Возможные значения: «Использовать» (сохранять), «Не использовать» и «Авто». В режиме «Авто» платформа сама решает, сохранять ли настройки, исходя из типа формы. Если пользователь жалуется, что форма «не запоминает» вид — первым делом проверьте это свойство.
Важно понимать границу: автоматически сохраняется только оформление и состояние стандартных элементов. Значения реквизитов формы, введённые пользователем данные, произвольные флаги и переключатели без дополнительной настройки не сохраняются — для них нужен программный механизм.
Как пользователю сохранить и сбросить настройки формы
В типовых конфигурациях пользовательские настройки формы управляются через меню «Ещё» в правом верхнем углу формы. Для динамических списков и отчётов доступны команды «Изменить форму», «Установить стандартные настройки», «Сохранить настройки» и «Загрузить настройки». Точный состав команд зависит от конфигурации и вида формы.
Типичный сценарий: пользователь настраивает видимость колонок списка документов, закрывает форму — настройки сохраняются автоматически. Если вид «сломался» (например, после обновления конфигурации пропали колонки), помогает команда «Ещё → Установить стандартные настройки» — она сбрасывает сохранённое состояние к виду по умолчанию.
- 1Откройте нужную форму и настройте вид: порядок и ширину колонок, отборы, сортировку.
- 2Закройте форму — настройки сохранятся автоматически.
- 3Откройте форму снова и убедитесь, что вид восстановлен.
- 4Если вид не восстановился, проверьте «Ещё → Изменить форму» и при необходимости выполните «Установить стандартные настройки», затем настройте заново.
Где хранятся настройки и как их найти администратору
Администратор может просмотреть и очистить настройки пользователей. В типовых конфигурациях на БСП есть обработка управления настройками (раздел администрирования, «Настройки пользователей и прав» или аналогичный пункт). На уровне платвы настройки лежат в системном хранилище, доступ к которому даёт объект ХранилищеСистемныхНастроек.
Программное сохранение произвольных настроек формы
Когда нужно запомнить значения реквизитов формы (например, выбранную организацию, период, флаги отбора), используют программный интерфейс хранилища настроек. Стандартный подход — сохранять данные в обработчике ПриЗакрытии (или по кнопке) и восстанавливать в ПриСозданииНаСервере.
Метод сохранения: ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки). Ключ объекта обычно строят от имени формы, чтобы настройки разных форм не пересекались. Значение должно быть сериализуемым: примитивные типы, структуры, массивы — да; ссылки на объекты сохранять можно, но при удалении объекта из базы сохранённая ссылка станет битой.
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ЗавершениеРаботы Тогда
СохранитьНастройкиНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиНаСервере()
Настройки = Новый Структура;
Настройки.Вставить("Организация", Организация);
Настройки.Вставить("Период", Период);
ХранилищеСистемныхНастроек.Сохранить(
"Обработка.МояОбработка.Форма.ОсновнаяФорма/ТекущиеНастройки",
"", Настройки);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Настройки = ХранилищеСистемныхНастроек.Загрузить(
"Обработка.МояОбработка.Форма.ОсновнаяФорма/ТекущиеНастройки");
Если ТипЗнч(Настройки) = Тип("Структура") Тогда
Настройки.Свойство("Организация", Организация);
Настройки.Свойство("Период", Период);
КонецЕсли;
КонецПроцедурыОбратите внимание на проверку типа загруженного значения: если настройки ещё ни разу не сохранялись, Загрузить вернёт Неопределено, и обращение к свойствам без проверки вызовет ошибку. Также полезно обернуть восстановление в попытку/исключение — после обновления конфигурации структура сохранённых данных может не совпадать с текущей.
Сохранение настроек через параметры и реквизиты с признаком «Сохраняемые данные»
Альтернативный механизм — свойство реквизита формы «Сохранять» (колонка «Сохраняемые данные» в редакторе реквизитов формы). Если у реквизита установить этот признак, платформа будет автоматически сохранять его значение при закрытии формы и восстанавливать при открытии — без единой строки кода.
Этот способ проще программного, но имеет ограничения: он работает только для реквизитов формы, ключ хранения формируется платформой (переопределить его нельзя), и управлять моментом сохранения невозможно. Для простых форм-обработок этого достаточно; для сложной логики (например, несколько профилей настроек) лучше подходит ХранилищеНастроек.
Сравнение способов
Подходит для простых форм-обработок. Не требует кода, но нельзя управлять ключом хранения и моментом сохранения.
Полный контроль: произвольные ключи, несколько наборов настроек, сохранение по событию. Требует кода и проверок типов.
Нужен, когда настройки должны быть общими для пользователей или переноситься между базами. Требует создания объекта метаданных «Хранилище настроек».
Общие настройки для всех пользователей и перенос между базами
Системное хранилище персонально: настройки каждого пользователя изолированы. Если нужны общие значения по умолчанию или централизованное управление, в конфигураторе создают объект метаданных «Хранилище настроек» с собственным модулем, где переопределяют обработчики загрузки и сохранения (например, запись в константу или регистр сведений).
Для переноса настроек между базами (например, из тестовой в рабочую) используют либо типовые обработки копирования настроек пользователей, либо программное чтение через ХранилищеСистемныхНастроек.Выбрать() с последующей записью в целевой базе. Прямое копирование служебных таблиц СУБД не рекомендуется — структура хранения является внутренней деталью платформы и может меняться.
Типичные ошибки и проверка результата
Самая частая причина «настройки не сохраняются» — отключённое автосохранение у формы или отсутствие признака «Сохранять» у реквизита. Вторая по частоте — сохранение выполняется на клиенте в ПриЗакрытии при завершении работы сеанса: в этот момент серверные вызовы уже недоступны, поэтому флаг ЗавершениеРаботы нужно обязательно проверять.
Ещё одна группа проблем — конфликт ключей: если два разных объекта используют одинаковый ключ объекта, они будут перезаписывать настройки друг друга. Формируйте ключи с указанием полного имени объекта метаданных и формы.
Как проверить результат
Вид формы и значения восстановлены
Форма открывается с настройками по умолчанию
У него свои настройки (для системного хранилища — это норма)
Настройки перемешиваются между пользователями
Нет ошибок записи настроек
Ошибки сериализации или недоступности сервера
FAQ
Почему форма перестала запоминать настройки после обновления конфигурации?
Чаще всего изменился ключ формы или состав сохраняемых данных, и старые настройки стали несовместимы. Помогает сброс: «Ещё → Установить стандартные настройки», после чего настройте форму заново. Если проблема массовая — администратор может очистить настройки пользователей по конкретному объекту.
Как сохранить настройки формы для всех пользователей сразу?
Системное хранилище персонально, поэтому нужен либо программный цикл по пользователям через ХранилищеСистемныхНастроек с указанием параметра «Пользователь», либо собственное хранилище настроек (объект метаданных), где обработчики сохранения пишут данные в общий регистр или константу.
Можно ли сохранить несколько вариантов настроек одной формы?
Да. Используйте параметр КлючНастроек метода Сохранить: для каждого варианта задавайте своё значение ключа, а при открытии предлагайте пользователю выбрать вариант и загружайте соответствующий набор. Так работают, например, сохранённые варианты отчётов.
Что безопасно сохранять в настройках, а что нет?
Безопасны примитивные типы, даты, строки, структуры и массивы из них. Ссылки сохранять можно, но при удалении объекта они станут битыми — добавляйте проверку. Не сохраняйте пароли и другие секреты в открытом виде: настройки доступны администратору и могут попасть в копии базы.
Где физически лежат настройки и можно ли их скопировать файлом?
В файловой базе настройки хранятся внутри файла 1Cv8.1CD, в клиент-серверном варианте — в служебной таблице СУБД. Отдельного переносимого файла нет; копирование выполняется штатными средствами — обработками переноса настроек или программно через ХранилищеСистемныхНастроек.
Что важно запомнить
Внешний вид управляемой формы 1С сохраняется автоматически при закрытии, если включено автосохранение. Значения реквизитов запоминают через признак «Сохранять» у реквизита или программно через ХранилищеСистемныхНастроек с проверкой типов при загрузке. Настройки персональны, ключи должны быть уникальными, а прямое вмешательство в таблицы СУБД недопустимо.