Как перенести настройки управляемой формы от одного пользователя другому в 1С:Предприятие?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе работы с управляемым интерфейсом 1С:Предприятия 8.3 пользователи часто настраивают внешний вид форм «под себя»: меняют порядок колонок, скрывают ненужные поля, добавляют отображение дополнительных реквизитов или настраивают сложные отборы в динамических списках. Когда один из ключевых сотрудников (например, ведущий менеджер или методист) выполняет идеальную настройку формы списка, логично возникает задача: как быстро и безболезненно распространить эти настройки на остальных коллег (например, на весь отдел продаж из 20 человек), избегая ручного подключения к каждому рабочему месту?

В этой статье мы подробно разберем, как устроен механизм хранения настроек в платформе 1С «под капотом», изучим стандартные инструменты Библиотеки стандартных подсистем (БСП) для их копирования, а также рассмотрим программные способы автоматизации этого процесса с примерами кода.

Архитектура хранения настроек в 1С: где платформа прячет данные?

Прежде чем переходить к копированию, давайте выясним причину, почему настройки формы не сбрасываются при очистке локального кэша пользователя на компьютере. Дело в том, что платформа 1С:Предприятие хранит все пользовательские изменения интерфейса непосредственно в базе данных (в системных таблицах СУБД или файле базы данных). Для этого используются специализированные системные хранилища настроек, доступ к которым разработчик может получить через встроенный язык.

Рассмотрим подробнее четыре основных системных хранилища:

  1. ХранилищеСистемныхНастроек (SystemSettingsStorage): отвечает за сохранение структуры управляемых форм. Именно сюда записываются изменения, выполненные пользователем через команду «Изменить форму» (видимость полей, порядок колонок, добавление новых реквизитов на форму, размеры и положение окон).
  2. ХранилищеПользовательскихНастроекДинамическихСписков (DynamicListUserSettingsStorage): в этой таблице хранятся пользовательские настройки динамических списков (выбранные отборы, сортировка, группировки полей и условное оформление строк).
  3. ХранилищеНастроекДанныхФорм (FormDataSettingsStorage): используется для автоматического сохранения значений конкретных реквизитов формы между сеансами работы (например, когда программа запоминает последний выбранный период или организацию в отчете).
  4. ХранилищеОбщихНастроек (CommonSettingsStorage): универсальное хранилище, в которое разработчики конфигурации могут программно записывать любые произвольные настройки и служебные структуры данных.

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

Интерактивное копирование настроек через стандартный интерфейс БСП

Если ваша конфигурация разработана на базе БСП (а это практически все современные типовые решения: 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей, 1С:Бухгалтерия предприятия и др.), вам не нужно писать код или привлекать программиста. В системе уже присутствует мощный и гибкий инструмент администрирования.

Разберем по шагам, как перенести настройки формы от одного пользователя группе сотрудников:

  1. Перейдем в раздел НСИ и Администрирование (в некоторых конфигурациях просто Администрирование).
  2. Откроем пункт Настройки пользователей и прав, а затем перейдем в справочник Пользователи.
  3. Найдем в списке пользователя-источника (того сотрудника, который уже настроил форму «под себя») и выделим его курсором.
  4. На панели действий формы списка (или внутри карточки пользователя) нажмем кнопку Настройки и выберем пункт Копирование настроек.
  5. В открывшемся окне в поле «Кому копировать» мы можем выбрать один из двух вариантов:
    • Все пользователи — если настройки должны стать глобальным стандартом для всей компании.
    • Выбранные пользователи — позволяет отметить галочками только нужных сотрудников (например, те самые 20 человек из отдела продаж).
  6. В табличной части «Что копировать» система сформирует дерево настроек пользователя-источника. Развернем ветку Настройки внешнего вида или Настройки отчетов и форм.
  7. Найдем нужную форму (например, Справочник.Номенклатура.Форма.ФормаСписка) и установим напротив нее флажок. Это позволяет выполнять копирование точечно, не затирая другие персональные настройки сотрудников.
  8. Нажмем кнопку Скопировать и закрыть. Платформа мгновенно запишет настройки выбранным получателям.

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

Программный перенос настроек (для самописных конфигураций или автоматизации)

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

Способ 1. Использование прямых методов платформы 1С

Для программного копирования у системных хранилищ настроек предусмотрен метод Копировать(). Проанализируем пример кода, который переносит настройки внешнего вида формы списка справочника «Контрагенты», а также настройки его динамического списка от одного пользователя другому:


// Определяем имена пользователей в информационной базе (Имя в конфигураторе)
ИмяИсточника = "ИвановИИ";
ИмяПолучателя = "ПетровПП";

// 1. Копируем настройки интерфейса (кнопки, видимость колонок, добавленные доп. реквизиты)
КлючОбъектаФормы = "Справочник.Контрагенты.Форма.ФормаСписка";
ХранилищеСистемныхНастроек.Копировать(
    КлючОбъектаФормы, 
    Неопределено, 
    ИмяИсточника, 
    ИмяПолучателя
);

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

Обратите внимание на формирование параметра КлючОбъекта. Для динамического списка он состоит из полного пути к форме и имени элемента динамического списка на форме (по умолчанию это Список), разделенных косой чертой.

Способ 2. Использование программного интерфейса (API) БСП

Если БСП в вашей базе данных присутствует, но вы хотите автоматизировать процесс программно (например, в обработчике создания нового пользователя), лучше использовать готовые процедуры общего модуля БСП. Это гарантирует корректность записи данных и соблюдение всех системных связей. Для тиражирования параметров формы на всех пользователей типовыми функциями БСП можно использовать обработку для сохранения настроек формы.

Для этого вызовем процедуру:


// Скопируем абсолютно все настройки пользователя "ИвановИИ" пользователю "НовыйСотрудник"
// Третий параметр "Переносить" управляет удалением настроек у источника (Ложь - просто копировать)
ПользователиСлужебный.СкопироватьНастройкиПользователя(
    "ИвановИИ", 
    "НовыйСотрудник", 
    Ложь
);

Важные технические нюансы и подводные камни

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

Заблуждение о свойстве «СохранениеДанныхВНастройках» в конфигураторе.
Иногда разработчики путают настройки интерфейса со свойством формы СохранениеДанныхВНастройках (доступным в свойствах формы в Конфигураторе). Данное свойство отвечает исключительно за автосохранение значений, которые пользователь ввел в поля ввода (например, выбранный контрагент, организация или склад). Оно не имеет никакого отношения к структуре элементов формы, кнопкам и колонкам, измененным через меню «Изменить форму».

Права доступа при программном переносе.
Обычный пользователь базы данных не имеет права изменять настройки в ветках других пользователей. Для того чтобы успешно выполнить код копирования настроек (особенно для других учетных записей), у текущего пользователя в сессии должна быть активна роль «Администрирование данных» (DataAdministration). В противном случае платформа вызовет исключение нарушения прав доступа.

Специфика записи настроек динамических списков.
Настройки внешнего вида формы записываются в базу данных немедленно в момент нажатия кнопки «ОК» в окне «Изменить форму». Однако пользовательские настройки динамического списка (компоновщик настроек) сбрасываются в базу данных окончательно только в момент закрытия формы. Если вы попытаетесь скопировать настройки динамического списка у пользователя, у которого в данный момент открыто это окно и он с ним работает, скопируются старые настройки (актуальные на момент открытия им этой формы).

Уязвимость при переименовании учетных записей.
Платформа 1С связывает настройки в системных хранилищах со строковым Именем пользователя (как оно задано в Конфигураторе), а не с уникальным идентификатором UUID. Если вы переименуете пользователя, все его накопленные настройки интерфейса останутся «висеть» на старом имени и перестанут применяться. БСП частично решает эту проблему своими фоновыми механизмами, но при ручном администрировании об этом важно помнить.

← На главную