В процессе работы с управляемым интерфейсом 1С:Предприятия 8.3 пользователи часто настраивают внешний вид форм «под себя»: меняют порядок колонок, скрывают ненужные поля, добавляют отображение дополнительных реквизитов или настраивают сложные отборы в динамических списках. Когда один из ключевых сотрудников (например, ведущий менеджер или методист) выполняет идеальную настройку формы списка, логично возникает задача: как быстро и безболезненно распространить эти настройки на остальных коллег (например, на весь отдел продаж из 20 человек), избегая ручного подключения к каждому рабочему месту?
В этой статье мы подробно разберем, как устроен механизм хранения настроек в платформе 1С «под капотом», изучим стандартные инструменты Библиотеки стандартных подсистем (БСП) для их копирования, а также рассмотрим программные способы автоматизации этого процесса с примерами кода.
Прежде чем переходить к копированию, давайте выясним причину, почему настройки формы не сбрасываются при очистке локального кэша пользователя на компьютере. Дело в том, что платформа 1С:Предприятие хранит все пользовательские изменения интерфейса непосредственно в базе данных (в системных таблицах СУБД или файле базы данных). Для этого используются специализированные системные хранилища настроек, доступ к которым разработчик может получить через встроенный язык.
Рассмотрим подробнее четыре основных системных хранилища:
ХранилищеСистемныхНастроек (SystemSettingsStorage): отвечает за сохранение структуры управляемых форм. Именно сюда записываются изменения, выполненные пользователем через команду «Изменить форму» (видимость полей, порядок колонок, добавление новых реквизитов на форму, размеры и положение окон).ХранилищеПользовательскихНастроекДинамическихСписков (DynamicListUserSettingsStorage): в этой таблице хранятся пользовательские настройки динамических списков (выбранные отборы, сортировка, группировки полей и условное оформление строк).ХранилищеНастроекДанныхФорм (FormDataSettingsStorage): используется для автоматического сохранения значений конкретных реквизитов формы между сеансами работы (например, когда программа запоминает последний выбранный период или организацию в отчете).ХранилищеОбщихНастроек (CommonSettingsStorage): универсальное хранилище, в которое разработчики конфигурации могут программно записывать любые произвольные настройки и служебные структуры данных.Поскольку все эти данные хранятся централизованно в базе данных, мы имеем полный контроль над ними и можем свободно манипулировать настройками программно или интерактивно. Для интерактивного анализа и редактирования этих данных можно использовать обработку для просмотра, восстановления и очистки хранилища настроек пользователей.
Если ваша конфигурация разработана на базе БСП (а это практически все современные типовые решения: 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей, 1С:Бухгалтерия предприятия и др.), вам не нужно писать код или привлекать программиста. В системе уже присутствует мощный и гибкий инструмент администрирования.
Разберем по шагам, как перенести настройки формы от одного пользователя группе сотрудников:
Справочник.Номенклатура.Форма.ФормаСписка) и установим напротив нее флажок. Это позволяет выполнять копирование точечно, не затирая другие персональные настройки сотрудников.Важный совет: чтобы новые настройки вступили в силу у пользователей-получателей, им потребуется перезапустить сеанс работы с 1С (или закрыть и заново открыть форму списка, если они находились в программе).
Посмотрим на пример ситуации, когда конфигурация написана с нуля (без использования БСП), либо перед нами стоит задача автоматического применения эталонных настроек всем новым пользователям при их первом входе в систему. В этом случае мы можем написать собственную служебную обработку.
Для программного копирования у системных хранилищ настроек предусмотрен метод Копировать(). Проанализируем пример кода, который переносит настройки внешнего вида формы списка справочника «Контрагенты», а также настройки его динамического списка от одного пользователя другому:
// Определяем имена пользователей в информационной базе (Имя в конфигураторе)
ИмяИсточника = "ИвановИИ";
ИмяПолучателя = "ПетровПП";
// 1. Копируем настройки интерфейса (кнопки, видимость колонок, добавленные доп. реквизиты)
КлючОбъектаФормы = "Справочник.Контрагенты.Форма.ФормаСписка";
ХранилищеСистемныхНастроек.Копировать(
КлючОбъектаФормы,
Неопределено,
ИмяИсточника,
ИмяПолучателя
);
// 2. Копируем настройки самого динамического списка (отборы, сортировки, условное оформление)
КлючОбъектаСписка = "Справочник.Контрагенты.Форма.ФормаСписка/Список";
ХранилищеПользовательскихНастроекДинамическихСписков.Копировать(
КлючОбъектаСписка,
Неопределено,
ИмяИсточника,
ИмяПолучателя
);
Обратите внимание на формирование параметра КлючОбъекта. Для динамического списка он состоит из полного пути к форме и имени элемента динамического списка на форме (по умолчанию это Список), разделенных косой чертой.
Если БСП в вашей базе данных присутствует, но вы хотите автоматизировать процесс программно (например, в обработчике создания нового пользователя), лучше использовать готовые процедуры общего модуля БСП. Это гарантирует корректность записи данных и соблюдение всех системных связей. Для тиражирования параметров формы на всех пользователей типовыми функциями БСП можно использовать обработку для сохранения настроек формы.
Для этого вызовем процедуру:
// Скопируем абсолютно все настройки пользователя "ИвановИИ" пользователю "НовыйСотрудник"
// Третий параметр "Переносить" управляет удалением настроек у источника (Ложь - просто копировать)
ПользователиСлужебный.СкопироватьНастройкиПользователя(
"ИвановИИ",
"НовыйСотрудник",
Ложь
);
При работе с механизмами настроек управляемых форм необходимо помнить о нескольких важных особенностях платформы, несоблюдение которых может привести к ошибкам или потере данных.
Заблуждение о свойстве «СохранениеДанныхВНастройках» в конфигураторе.
Иногда разработчики путают настройки интерфейса со свойством формы СохранениеДанныхВНастройках (доступным в свойствах формы в Конфигураторе). Данное свойство отвечает исключительно за автосохранение значений, которые пользователь ввел в поля ввода (например, выбранный контрагент, организация или склад). Оно не имеет никакого отношения к структуре элементов формы, кнопкам и колонкам, измененным через меню «Изменить форму».
Права доступа при программном переносе.
Обычный пользователь базы данных не имеет права изменять настройки в ветках других пользователей. Для того чтобы успешно выполнить код копирования настроек (особенно для других учетных записей), у текущего пользователя в сессии должна быть активна роль «Администрирование данных» (DataAdministration). В противном случае платформа вызовет исключение нарушения прав доступа.
Специфика записи настроек динамических списков.
Настройки внешнего вида формы записываются в базу данных немедленно в момент нажатия кнопки «ОК» в окне «Изменить форму». Однако пользовательские настройки динамического списка (компоновщик настроек) сбрасываются в базу данных окончательно только в момент закрытия формы. Если вы попытаетесь скопировать настройки динамического списка у пользователя, у которого в данный момент открыто это окно и он с ним работает, скопируются старые настройки (актуальные на момент открытия им этой формы).
Уязвимость при переименовании учетных записей.
Платформа 1С связывает настройки в системных хранилищах со строковым Именем пользователя (как оно задано в Конфигураторе), а не с уникальным идентификатором UUID. Если вы переименуете пользователя, все его накопленные настройки интерфейса останутся «висеть» на старом имени и перестанут применяться. БСП частично решает эту проблему своими фоновыми механизмами, но при ручном администрировании об этом важно помнить.