В процессе работы с программными продуктами на платформе 1С:Предприятие 8.3 (особенно в конфигурациях «1С:Зарплата и управление персоналом», «1С:Бухгалтерия предприятия» и других решениях на управляемых формах) пользователи часто адаптируют интерфейс под себя. Изменение порядка полей, перемещение кнопок на командной панели, скрытие неиспользуемых реквизитов — все это делается через стандартную команду «Изменить форму». Однако, настроив форму идеально для одного сотрудника, мы неизбежно сталкиваемся с задачей: как тиражировать эти настройки на других пользователей, избегая ручной рутинной работы? Рассмотрим подробнее, как решить эту задачу быстро, надежно и профессионально.
Платформа 1С предлагает встроенный инструмент для управления пользовательскими настройками. Нам не потребуется вносить изменения в конфигурацию или писать код. Все действия выполняются непосредственно в пользовательском режиме (1С:Предприятие) под учетной записью с правами администратора.
Разберем по шагам, как запустить этот процесс:
При выборе настроек для копирования в списке объектов метаданных вы можете обнаружить две очень похожие строчки: одна в единственном числе («Увольнение»), другая во множественном («Увольнения»). Выясним причину такого дублирования:
Для нашей задачи (перенос положения кнопок командной панели внутри документа) выбираем строчку в единственном числе — «Увольнение».
Часто системные администраторы сталкиваются с проблемой: процедура копирования в интерфейсе завершена без ошибок, но у пользователя-получателя форма документа осталась прежней. Проанализируем, почему так происходит.
Важнейшее правило: перед тем как копировать любые настройки интерфейса, необходимо убедиться, что пользователь-получатель завершил свой сеанс работы в 1С.
Если пользователь в момент копирования находится в программе, у него в оперативной памяти компьютера запущен локальный кэш текущей сессии. При закрытии программы 1С автоматически записывает текущие локальные настройки пользователя обратно в базу данных, тем самым просто перезаписывая и затирая те настройки, которые вы только что скопировали ему под учетной записью администратора. Поэтому схема действий должна быть следующей:
Если у пользователя-получателя ранее уже были свои индивидуальные настройки формы «Увольнение», простое копирование поверх может отработать некорректно из-за конфликта старых и новых параметров отображения элементов. Чтобы избежать этого, рекомендуется предварительно выполнить очистку старых настроек:
Документ.Увольнение.Форма.ФормаДокумента.В редких критических ситуациях, когда настройки упорно не хотят применяться, может потребоваться физическое удаление локального кэша платформы на компьютере пользователя. Для этого необходимо очистить временные папки по следующему пути:
%userprofile%\AppData\Local\1C\1Cv8 и %userprofile%\AppData\Roaming\1C\1Cv8 (удалению подлежат папки с длинными шестнадцатеричными именами-идентификаторами баз).
В современных типовых решениях (например, в «1С:ERP», «1С:Комплексная автоматизация» или «1С:Документооборот») разработчики внедрили более продвинутый инструмент массового распределения интерфейсных настроек:
Еще — Настройки — Общие настройки форм).Если стандартная обработка БСП (Библиотеки стандартных подсистем) по какой-то причине недоступна или вам требуется автоматизировать этот процесс в рамках собственного бизнес-процесса, мы можем прибегнуть к возможностям встроенного языка 1С.
С точки зрения платформы все индивидуальные настройки интерфейса хранятся в специальном системном хранилище. Мы можем программно прочитать настройки одного пользователя и записать их другому, используя объект ХранилищеСистемныхНастроек.
Рассмотрим пример кода, который выполняет копирование настроек формы документа от одного пользователя к другому:
Процедура КопироватьНастройкиФормы(ИмяПользователяИсточник, ИмяПользователяПриемник) Экспорт
// Определяем ключ системной настройки для управляемой формы документа Увольнение
КлючОбъекта = "Документ.Увольнение.Форма.ФормаДокумента/НастройкиФормы";
// Извлекаем настройки пользователя-источника
Настройки = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта, "", , ИмяПользователяИсточник);
Если Настройки <> Неопределено Тогда
// Записываем извлеченные настройки пользователю-получателю
ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, "", Настройки, , ИмяПользователяПриемник);
ЗаписьЖурналаРегистрации("КопированиеНастроек", УровеньЖурналаРегистрации.Информация, , ,
"Настройки формы успешно скопированы для пользователя: " + ИмяПользователяПриемник);
КонецЕсли;
КонецПроцедуры
Этот программный код обращается напрямую к хранилищу системных настроек базы данных по уникальному ключу пути к форме. Его можно оформить в виде внешней обработки и запускать по мере необходимости администратором базы данных.
У любого пользовательского изменения интерфейса через режим «Изменить форму» есть один фатальный недостаток: любой пользователь может случайно или намеренно нажать в меню кнопку «Установить стандартные настройки». После этого действия все ваши кастомизации, перенесенные кнопки и скрытые поля мгновенно сбросятся до первоначального заводского вида конфигурации. Более того, при приеме на работу новых сотрудников администратору придется каждый раз вручную копировать настройки заново.
Если изменения формы документа «Увольнение» носят принципиальный характер (например, жесткое требование бизнеса скрыть определенные коммерческие или персональные данные от глаз кадровиков), самым надежным и профессиональным решением будет использование Расширения конфигурации. Этот механизм не снимает основную конфигурацию с поддержки и не препятствует автоматическим обновлениям программы.
Рассмотрим алгоритм создания такого расширения:
Конфигурация — Расширения конфигурации. Добавим новое расширение со значением назначения «Адаптация».Увольнение, кликнем по нему правой кнопкой мыши и выберем команду «Добавить в расширение».ФормаДокумента) в наше расширение.Видимость в значение Ложь или Доступность в значение Ложь для определенных полей).
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем, обладает ли текущий пользователь ролью Кадровик
Если РольДоступна("Доступ ККадровымДокументам") Тогда
// Скрываем ненужные элементы или перемещаем кнопки на командной панели программно
Элементы.ГруппаКоманднаяПанельВажныеКнопки.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Преимущества использования расширения:
Таким образом, для быстрого решения разовой задачи отлично подойдет стандартный механизм копирования настроек через меню «Администрирование». Главное — не забывать о завершении активных сеансов пользователей и правильном выборе объекта («Увольнение» для формы документа и «Увольнения» для формы списка). Если же изменения формы масштабны и критичны для бизнес-процесса компании, лучшим выбором станет создание небольшого расширения конфигурации.