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