При разработке или адаптации конфигурации «1С:Управление нашей фирмой» (УНФ) редакции 1.6 часто возникает задача автоматического заполнения реквизитов в документах. Чтобы программа «понимала», какую организацию или склад подставить для конкретного сотрудника, она обращается к пользовательским настройкам. В этой статье мы подробно разберем, где хранятся эти данные, как их извлечь программно и как правильно использовать механизмы системы для автоматизации рутины.
Проанализируем структуру хранения данных в УНФ. В отличие от некоторых других конфигураций, где настройки могут быть разбросаны по разным объектам, в УНФ основным «хранилищем» персональных предпочтений является регистр сведений НастройкиПользователей. Давайте разберем его устройство:
Пользователи. Это позволяет разделять настройки для каждого сотрудника.Выясним причину, по которой используется именно такая схема. Использование Плана видов характеристик в связке с регистром сведений позволяет системе быть гибкой: разработчики могут добавлять новые виды настроек без изменения структуры таблиц базы данных.
Хотя мы можем написать прямой запрос к регистру сведений НастройкиПользователей, в профессиональной разработке на платформе 1С:Предприятие 8.3 принято использовать методы общих модулей. Это гарантирует, что мы получим актуальные данные с учетом кэширования и прав доступа.
Рассмотрим основной метод, который используется в УНФ. Для получения значения настройки предназначена функция в общем модуле УправлениеНебольшойФирмойСервер (или аналогичном, в зависимости от точной версии минорного обновления).
Разберем пример кода для получения основного склада текущего пользователя:
// Получаем основной склад для текущего пользователя
ОсновнойСклад = УправлениеНебольшойФирмойСервер.ПолучитьНастройкуПользователя("ОсновнойСклад");
Если ЗначениеЗаполнено(ОсновнойСклад) Тогда
// Выполняем действия с полученным складом
Сообщить("Ваш склад по умолчанию: " + ОсновнойСклад);
КонецЕсли;
В данном примере функция ПолучитьНастройкуПользователя принимает строковый идентификатор настройки. Если нам нужно получить данные не для текущего, а для какого-то конкретного пользователя, мы передаем его вторым параметром:
ПользовательОбъект = Справочники.Пользователи.НайтиПоНаименованию("Иванов Иван");
Организация = УправлениеНебольшойФирмойСервер.ПолучитьНастройкуПользователя("ОсновнаяОрганизация", ПользовательОбъект);
Посмотрим на ситуацию со стороны создания нового документа. Когда пользователь нажимает кнопку «Создать», поля «Организация» и «Склад» заполняются магическим образом. На самом деле, это результат работы встроенных процедур в модулях менеджеров объектов.
Как правило, при создании нового объекта вызывается процедура ЗаполнитьЗначенияПоУмолчанию(). Проанализируем, как это выглядит изнутри:
ПараметрыСеанса.ТекущийПользователь.НастройкиПользователей для конкретных ключей (например, ОсновнаяОрганизация).Если вы создаете собственный документ и хотите внедрить в него аналогичное поведение, рекомендуем использовать типовые механизмы заполнения, чтобы сохранить единообразие кода конфигурации.
Важно не путать эти два понятия, так как они хранятся в разных местах и имеют разный масштаб влияния. Проанализируем их отличия:
Настройки пользователя — это индивидуальные предпочтения. Например, «Основное подразделение» у бухгалтера и у менеджера по продажам будет разным. Изменение этой настройки одним человеком не влияет на работу других. Хранятся в регистре сведений.
Настройки программы — это глобальные параметры. Например, флаг «Использовать несколько складов» или «Вести учет в валюте». Если администратор отключит использование нескольких складов, это затронет абсолютно всех пользователей системы. Такие данные обычно хранятся в Константах или управляются через Функциональные опции.
Если вы выступаете в роли администратора или консультанта, вам не обязательно писать код, чтобы изменить настройки. Разберем по шагам, как это сделать в пользовательском режиме:
Здесь вы увидите дерево всех доступных настроек. Это гораздо удобнее, чем работать напрямую с регистром, так как интерфейс сгруппирован по логическим блокам (Заполнение документов, Печать, Отчеты).
Рассмотрим продвинутый сценарий: вы создаете отчет и хотите, чтобы при его открытии параметр «Организация» уже был заполнен «родной» организацией пользователя. Для этого в СКД можно использовать выражения.
Посмотрим на пример настройки параметра в схеме компоновки:
В поле «Выражение» для параметра Организация можно прописать вызов функции:
УправлениеНебольшойФирмойСервер.ПолучитьНастройкуПользователя("ОсновнаяОрганизация")
Это позволит отчету быть более дружелюбным к пользователю: ему не придется каждый раз выбирать свою организацию из списка вручную, система сделает это за него при инициализации компоновщика настроек.
Подведем итог: Для работы с настройками в УНФ 1.6 мы всегда ориентируемся на регистр сведений НастройкиПользователей. Программный доступ лучше всего осуществлять через функции общего модуля УправлениеНебольшойФирмойСервер, а для массового изменения настроек использовать стандартные обработки в разделе администрирования. Понимание этой структуры позволяет создавать более качественные и удобные доработки для конечных пользователей.