К статье
Практический материал

Разработка и Конфигурация · 10 мин

1С: как получить список настроек формы

Как в 1С получить список настроек формы: ХранилищеНастроек, ХранилищеСистемныхНастроек, работа с настройками динамических списков и отчётов, примеры кода.

В управляемых формах 1С настройки пользователя — расположение колонок, отборы, сортировка, варианты отчётов — сохраняются автоматически в системных хранилищах. Разработчику и администратору часто требуется получить список этих настроек программно: для переноса между пользователями, диагностики проблем, массовой очистки или копирования типовых отборов. Платформа предоставляет для этого объектную модель через глобальные контексты ХранилищеСистемныхНастроек, ХранилищеПользовательскихНастроекОтчетов и ХранилищеОбщихНастроек.

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

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

Где платформа хранит настройки форм

Настройки форм в файловой базе физически находятся внутри файла 1Cv8.1CD, в клиент-серверном варианте — в служебных таблицах СУБД. Прямой доступ к этим таблицам платформа не предоставляет и не гарантирует их структуру между версиями, поэтому единственный поддерживаемый способ чтения — объектная модель встроенного языка.

Каждая запись настроек идентифицируется тремя элементами: ключом объекта (как правило, полное имя формы, например Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента), ключом настроек (уточняет вид настроек, например НастройкиСписка или ТекущиеДанные) и именем пользователя информационной базы. Понимание этой структуры позволяет строить точные отборы при выборке.

Получение списка настроек через ХранилищеСистемныхНастроек

Основной инструмент — менеджер ХранилищеСистемныхНастроек. Метод ПолучитьСписок() возвращает список значений с ключами объектов, для которых у пользователя есть сохранённые настройки. Если вызвать его без параметров, вернутся настройки текущего пользователя; указав параметр ИмяПользователя, можно получить настройки любого пользователя базы (при наличии права администрирования).

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

Для выборки с детализацией удобнее метод Выбрать(). Он принимает структуру отбора с полями КлючОбъекта, КлючНастроек, Пользователь и возвращает выборку, в которой доступны представление настроек и сами данные через Загрузить().

bsl
Отбор = Новый Структура;
Отбор.Вставить("Пользователь", "ИвановИИ");
Отбор.Вставить("КлючОбъекта", "Документ.РеализацияТоваровУслуг.Форма.ФормаСписка");

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

В отборе по ключу объекта допустимы маски: символ % заменяет произвольную последовательность, _ — один символ. Например, отбор %/ФормаСписка% вернёт настройки всех форм списков. Это удобно для массовых операций, но на больших базах выборка без сужения по пользователю может выполняться заметное время.

Настройки динамических списков и отчётов

Отборы, сортировки и условное оформление, которые пользователь задаёт в форме списка, сохраняются как часть системных настроек с ключом объекта, содержащим имя формы. Однако пользовательские настройки отчётов на СКД живут в отдельном хранилище — ХранилищеПользовательскихНастроекОтчетов. Его интерфейс аналогичен: те же методы ПолучитьСписок(), Выбрать(), Загрузить(), Удалить().

Ключ объекта для настроек отчёта обычно строится как Отчет.ИмяОтчета/Вариант_... с идентификатором варианта. Чтобы получить все пользовательские настройки конкретного отчёта, используйте маску по имени отчёта:

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

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

Если задача разовая — например, у пользователя «сломалась» форма списка, — код писать не обязательно. В режиме 1С:Предприятие в форме списка доступна команда Ещё → Установить стандартные настройки, которая сбрасывает пользовательские настройки динамического списка. В типовых конфигурациях на БСП есть раздел администрирования с обработкой очистки пользовательских настроек, где можно увидеть и удалить настройки выбранного пользователя.

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

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

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

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

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

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

Типичные ошибки и ограничения

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

Типичные ошибки
01
Отбор по имени формы без маски — настройки не находятся, потому что реальный ключ содержит служебные суффиксы
02
Попытка читать настройки отчёта через ХранилищеСистемныхНастроек вместо ХранилищеПользовательскихНастроекОтчетов
03
Удаление настроек под полными правами в рабочем сеансе пользователя — изменения могут быть перезаписаны при закрытии его форм
04
Сериализация настроек через ЗначениеВСтрокуВнутр для переноса между базами с разными конфигурациями — ссылки теряют смысл

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

Контрольные точки

Как проверить результат

Выборка по пользователю
Норма

Возвращаются ключи, содержащие полные имена форм

Тревожный признак

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

Содержимое загруженной настройки
Норма

Объект ожидаемого типа (например, ПользовательскиеНастройкиКомпоновкиДанных)

Тревожный признак

Неопределено — ключ настроек не совпадает или запись повреждена

Форма после очистки
Норма

Открывается со стандартным видом

Тревожный признак

Старый вид сохраняется — настройки были перезаписаны открытым сеансом

Частые вопросы

Можно ли получить список настроек всех пользователей сразу?

Да. Вызовите ХранилищеСистемныхНастроек.Выбрать() с пустым отбором или отбором только по ключу объекта — выборка будет содержать записи всех пользователей, а поле Пользователь покажет владельца каждой. Требуются права администрирования данных.

Где лежат настройки, если пользователь работает через веб-клиент?

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

Как узнать точный ключ объекта для конкретной формы?

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

Можно ли отключить сохранение настроек для отдельной формы?

Да. В конфигураторе у формы есть свойство «АвтоматическоеСохранениеДанныхВНастройках» — установите «Не использовать». Программно это можно переопределить в событиях формы, но декларативное свойство проще и предсказуемее.

Чем очистка настроек через код отличается от кнопки «Установить стандартные настройки»?

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

Переносятся ли настройки форм при обновлении конфигурации?

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

Итог

Что важно запомнить

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