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