Волею судьбы я стал автором и разработчиком информационной системы автоматизации розничной торговли "1С: Розница". Система получила широкое распространение в России и странах ближнего зарубежья. Очень многие специалисты вовлечены в процесс интеграции "1С: Розница" в корпоративные системы розничных предприятий. В помощь этим уважаемым людям я решил выложить тексты технических проектов, автором которых являюсь. Эти тексты позволят понять "внутренность" ИС, причины и способы реализации той или иной функциональности. Для тех, кто не работает с "1С: Розница" (или с платформой "1С: Предприятие") - эти тексты могут дать представление о том, как разрабатываются и пишутся технические проекты.
Почему возникла такая необходимость?
Я общаюсь со многими внедренческими организациями или отдельными командами интеграторов - их можно, условно, разделить на 3 большие группы:
- Те, кто полагают, что "1С: Розница 8" достаточна проста и не имеет никакого функционала, кроме пробития чеков. В этом случае интеграторы начинают дописывать в ИС тот функционал, который уже реализован.
- Те, кто хорошо знаком с богатым функционалом ИС, но хочет понять причины и тонкости выбранных способов реализации для развития собственной системы. К этой группе относятся, в основном, внедренческие организации. Мне приходится часто отвечать на, подобного рода, вопросы.
- Те, кто превосходно знает начинку "1С: Розница 8". К этой группе относятся те интеграторы, с которыми я плотно контактирую по вопросам внедрения.
В основном для тех, кто относится к первой и второй группе выложен текст технического проекта.
Цель проекта
Предоставление возможности администрирования удаленных пользователей распределенной информационной базы из главного узла ИБ.
Требования по проекту
- Должна быть реализована возможность управления учетными записями пользователей ИБ, находящимися в удаленных узлах РИБ (распределенной информационной базы) через справочник «Пользователи». «Пользователи» и учетные записи ИБ «связываются» по имени.
- Справочник пользователей конфигурации должен мигрировать по всем узлам распределенной ИБ. Учетные записи пользователей ИБ должны обрабатываться только в тех узлах, к которым эти пользователи принадлежат.
- В том случае, если пользователь имеет возможность работать в нескольких Магазинах, то для каждого Магазина в узле(ах) должна быть реализована возможность хранить собственные настройки пользователя.
- Пользователи, не обладающие административными правами редактирования пользователей:
- имеют возможность задавать настройки только для «своего» элемента в справочнике пользователей;
- не могут редактировать перечень магазинов доступных для работы;
- не могут редактировать настройки учетной записи ИБ своего пользователя.
- При запуске, система должна определить настройки пользователя, в зависимости от магазина в котором пользователь работает.
- Магазин определяется на основании:
- назначенных магазинов пользователю
- магазинов текущего узла РИБ
- основного магазина пользователя.
- В случае, если Магазин определить невозможно, то пользователю предоставляется выбор магазина. Выбор ограничен магазинами узла.
- Сменить текущий магазин пользователь может в любой момент работы.
- Если пользователь не «зарегистрирован» для работы в узле, то система прекращает работу.
- Магазин определяется на основании:
- Система не должна хранить пароль пользователя. Можно сделать так, чтобы при первом входе пользователя, если его пароль не установлен, а минимальная длина пароля не нулевая, система требовала у пользователя задать пароль.
- Администрирование пользователей (назначение ролей и т.п.) производится в режиме «Предприятие» администратором только в главном узле. Настройки учетных записей пользователей задаются для каждого узла в отдельности.
Описание концепции
Каждый пользователь в конфигурации «1С: Розница» может работать с одной или несколькими торговыми точками; каждый узел распределенной ИБ может содержать информацию о работе одной или нескольких торговых точек.
Наша задача – обеспечить возможность администрирования учетных записей пользователей, находящихся в удаленных узлах распределенной ИБ. Предполагается, что пользователь с правами администратора в подчиненном узле может вносить изменения в настройки учетных записей и настройки пользователей только своего узла, администратор главного узла может настраивать учетные записи пользователей и их настройки относительно магазина всех узлов.
Разработка функционала настроек учетных записей пользователей
- Добавить возможность создавать, удалять пользователей ИБ, настраивать их параметры из справочника «Пользователи».
- Дать возможность администратору главного узла в справочнике пользователи настраивать учетные записи ИБ для нескольких узлов индивидуально.
- Дать возможность администратору подчиненного узла настраивать учетные записи пользователей ИБ только своего узла.
- Настройки учетных записей хранятся в регистре сведений. Измерение: «Узел Плана Обмена» (акутально только для главного узла), «Пользователь», Ресурс: «Настройки пользователей».
- Разработать алгоритм, по которому изменения параметров пользователей ИБ (а также их создание и удаление) будут применяться только в тех узлах ИБ, в которых данный пользователь может работать.
Разработка функционала настроек пользователей относительно магазина
- Добавить в конфигурацию параметр сеанса «Текущий магазин».
- Элементам справочника «Пользователи» добавить табличную часть «Доступные магазины», которая будет определять, в каких торговых точках может работать данный пользователь. Осуществить возможность выбора основного магазина пользователя для автоматического заполнения соответствующего параметра сеанса. Осуществить возможность ручного выбора текущего магазина из списка доступных.
- Добавить измерение «Магазин» в регистр сведений «Настройки пользователей», для того, чтобы настройки пользователей могли храниться в разрезе торговых точек. Предусмотреть возможность копирования настроек из одного магазина в другой.
Таким образом, мы получим механизм, обеспечивающий полную миграцию справочника «Пользователи» (необходимый, в частности, для корректного заполнения реквизита «Ответственный» во всех документах во всех узлах ИБ), а также создание, редактирование и удаление пользователей ИБ только в необходимых узлах.
Роли и сценарии работы пользователей
Роль «Администратор» (в главном узле)
Данный пользователь может просматривать и изменять любые реквизиты всех элементов справочника «Пользователи». Может добавлять новых пользователей в справочник, при этом в нужных узлах ИБ создаются соответствующие учетные записи пользователей ИБ.
Роль «Администратор» (в подчиненном узле)
Данный пользователь может просматривать и изменять любые реквизиты всех элементов справочника «Пользователи» своего узла. Может редактировать пользователей в справочнике «Пользователей» своего узла ИБ.
Роль «Пользователь»
Данный пользователь не может просматривать параметры пользователей ИБ (включая собственные). Не может изменять список торговых точек, в которых он может работать. Может изменять только свои личные настройки в разрезе доступных магазинов.
Реализуемая функциональность
- Администратор главного узла может работать с учетными записями пользователей ИБ, находящимися в удаленных узлах распределенной ИБ:
- Создавать или удалять учетные записи;
- Иpменять пароль;
- Управлять возможностью пользователя изменять пароль;
- Отображать в списке пользователей;
- Изменять способ аутентификации;
- Изменять основной язык и интерфейс;
- Изменять список ролей пользователя.
- Учетная запись пользователя ИБ создается только в определенных узлах ИБ.
- Настройки пользователя задаются в разрезе магазина.
Структура данных, алгоритмы обработки данных
Описание объектов метаданных конфигурации
Метаданные | Тип | Описание |
---|---|---|
Регистр сведений «Настройки Учетных Записей Пользователей» | В данном регистре в главном узле РИБ хранятся настройки пользователей для каждого узла. При выгрузке данных в подчиненный узел, настройки учетной записи для подчиненного узла берутся из этого регистра. | |
- Измерение «Пользователь» | СправочникСсылка.Пользователи | |
- Измерение «УзелПланаОбмена» | ПланОбменаСсылка.ПоМагазину | |
- Ресурс «ХранилищеПараметровПользователя» | ХранилищеЗначения | Представляет структуру, соответствующую настройкам учетной записи пользователя ИБ:
|
Регистр сведений «Настройки Пользователей» | Настройки пользователя хранятся относительно магазина. | |
- Измерение «Пользователь» | СправочникСсылка.Пользователи | |
- Измерение «Магазин» | СправочникСсылка.Магазины | |
- Ресурс «Значение» | ПВХ «Настройки пользователей» | |
Параметр сеанса «Текущий магазин» | СправочникСсылка.Магазины | Хранит магазин, в котором работает пользователь, по этому магазину отбираются настройки по умолчанию. |
Справочник «Пользователи» | Добавляется табличная часть «Доступные магазины», в которой хранится список магазинов, с которыми пользователь имеет право работать. | |
- Табличная часть «Доступные магазины» | Табличная часть | |
- - Реквизит «Магазин» | СправочникСсылка.Магазины |
Регистр сведений настроек учетных записей пользователей содержит реквизит «ХранилищеПараметровПользователя» (тип: ХранилищеЗначения), в котором хранится структура, определяющая параметры пользователя ИБ. При работе процедуры «ПриЗаписи» модуля регистра выполняется поиск соответствующего пользователя ИБ (при отсутствии такового происходит создание нового пользователя ИБ) и установка его параметров.
Алгоритмы обработки настроек пользователей
- Настройки пользователей задаются относительно магазинов.
- Список магазинов – Табличная часть «Доступные магазины»
- Сами настройки – регистр сведений «Настройки пользователей» с отбором по измерению «Магазин».
Миграция данных по узлам РИБ:
Регистр сведений «Настройки пользователей» мигрирует по узлам РИБ в разрезе магазинов (измерение «Магазин» регистра сведений определяет узел миграции настроек пользователей).
Применение настроек пользователя
Алгоритмы применения настроек пользователя при аутентификации изображены на диаграмме видов деятельности «Аутентификация пользователя в системе».
Алгоритмы обработки настройки учетных записей пользователей
- Пользователь ИБ и элемент справочника «связываются» по имени пользователя (стандартное поведение всех конфигураций).
- Реквизиты данной закладки «достаются» из регистра сведений «Настройки учетных записей пользователей» (кроме реквизитов пользователя текущего узла, т.к. они достаются из пользователей ИБ).
- При изменении реквизитов данной закладки - все изменения записываются в регистр сведений «Настройки учетных записей пользователей».
- Список узлов информационной базы на данной закладке (на картинке не изображен) доступен только администратору главного узла информационной базы.
Запись регистра сведений «Настройки учетных записей пользователей»
Регистр сведений «Настройки учетных записей пользователей», при записи, анализирует, является ли текущий узел главным узлом базы данных. Если да, то записывает настройки пользователя в регистр для всех перечисленных узлов (и, в случае если данный пользователь имеет настройки для главного узла базы данных, принимает данные настройки для учетной записи пользователя главного узла). Если текущий узел – подчиненный узел базы данных, то система записывает настройки данного пользователя в регистр сведений «Настройки учетных записей пользователей», безотносительно узла информационной базы (и принимает изменения для пользователя информационной базы).
Обмен данными и регистрация изменений по регистру «Настройки учетных записей пользователей»
- Изменения регистра сведений «Настройки учетных записей пользователей» автоматически регистрируются для обмена РИБ.
- При регистрации изменений набора записей регистра «Учетные записи пользователей» в подчиненном узле, регистрация производится для главного узла РИБ, который установлен в отборе по измерению «Узел плана обмена».
- При приеме из подчиненного узла главный узел записывает набор записей регистра «Настройки учетных записей пользователей» с установленным отбором по узлу отправителю (прописывает в измерение «Узел отправитель»).
- При регистрации изменений набора записей в главном узле, регистрация производится для узла, который установлен в отборе по измерению «Узел плана обмена» регистра «Учетные записи пользователей.
- При приеме данных в подчиненном узле, «приехавший» набор записей записывается безотносительно узла РИБ.
Применение настроек для пользователей узлов РИБ
- Изменение настроек производится в форме элемента справочника «Пользователи» в главном узле. Фактически осуществляется при записи набора записей регистра сведений «Настройки учетных записей пользователей», с установленным отбором по главному узлу и текущему пользователю.
- Изменение настроек производится в конфигураторе в главном узле: Синхронизация данных регистра и данных о пользователях ИБ происходит перед отправкой сообщения обмена, анализируется расхождение состава набора записей регистра сведений «Настройки учетных записей пользователей» с установленным отбором по главному узлу и элементу справочника «Пользователи». Если расхождение имеет место быть, то регистр сведений переписывается по установленному отбору новыми настройками (принятыми в конфигураторе).
- Изменение настроек производится в форме элемента справочника «Пользователи» в подчиненном узле: Фактически осуществляется при записи набора записей регистра сведений «Настройки учетных записей пользователей», с установленным отбором безотносительно узла и текущему пользователю.
- Изменение настроек производится в конфигураторе в подчиненном узле: Синхронизация данных регистра и данных о пользователях ИБ происходит перед отправкой сообщения обмена, анализируется расхождение состава набора записей регистра сведений «Настройки учетных записей пользователей» с установленным отбором по элементу справочника «Пользователи». Если расхождение имеет место быть, то регистр сведений переписывается по установленному отбору новыми настройками (принятыми в конфигураторе).
На диаграмме видов деятельности «Удаленное администрирование учетных записей пользователей» представлен весь процесс работы с учетными записями.
Взаимодействие с другими подсистемами, механизмами
Данный механизм взаимодействует с механизмом установки настроек пользователей, в данном случае расширяет его. Данный механизм взаимодействует с механизмом обмена данными РИБ, в части наложения ограничений на миграцию регистра сведений «Настройки Пользователей» по измерению «Магазин», и добавлению обработки предопределенных событий при загрузке данных обмена.
Ограничения, следующие из проектных решений
- Настройки пользователя задаются только в разрезе магазинов, поэтому нет возможности корректно использовать настройки, общие для всех магазинов.
- Пользователю разрешается работать в системе, только в том случае если, администратор разрешил ему работу в узле с данным магазином.
- Пароль пользователя нельзя назначить централизованно, это связано с обеспечением безопасности системы, но есть возможность централизованно удалить пароль, тогда пользователю придется назначить пароль при входе в систему.
- Обновление регистра сведений «Настройки учетных записей пользователей» актуальными настройками пользователей ИБ перед обменом данными занимает определенные ресурсы. Доля занимаемых ресурсов зависит от: - количества измененных объектов; - количества измененных объектов ИБ. Нагрузочное тестирование показало приемлемую производительность при обновлении регистра.
Переход с предыдущих релизов и обновление информационной базы
Обновление информационной базы производится:
- Бывшие настройки пользователей безотносительно магазина (т.к. не было измерения в регистре) устанавливаются для всех магазинов.
- Заполняется регистр сведений «Настройки Учетных Записей» в каждом узле из настроек УЗ пользователей ИБ.
Порядок тестирования
- Создание в тестовых базах пользователей
- Выполнение обмена данными
- Проверка изменения пользователей в дочерних узлах
- Редактирование учетных записей пользователей в дочерних узлах
- Проверка корректного «приема» в «главный узел»
- Проверка корректности установки настроек пользователей для магазинов
Детализированное описание выполняемых действий
Необходимо создать 3 «пустых» базы:
- ИБ главного узла - ГУ
- ИБ периферийного узла - П1
- ИБ периферийного узла - П2
В ГУ, в режиме конфигуратора, создается пользователь «Администратор» с административными правами.
- Роли «Менеджер склада» добавляются административные права (для возможности изменения настроек собственного пользователя).
Выполняется запуск ГУ в режиме предприятия, пользователь: «Администратор».
- В справочнике «Магазины» администратор создает 3 магазина («М1», «М2», «М3»).
- В плане обмена «По Магазину» администратор узлу П1 назначает магазины М1 и М2, узлу П2 магазин М3.
- В справочнике «Пользователи» администратор создает 3 (троих) пользователей ИС (Пл1, Пл2, Пл3).
- Пл1 разрешается работа в магазинах М1 и М2 (магазин М1 устанавливается в качестве основного магазина)
- Пл2 разрешается работа в магазине М2
- Пл3 – в магазине М1
- Создаются пользовательские настройки «по умолчанию» всем пользователям для всех магазинов.
- В справочнике «Пользователи», на вкладке «Пользователь ИБ»:
- Пл1 разрешается работа в узле П1 (роль «Администратор», язык «русский», пароль не заполнен)
- Пл2 разрешается работа в узле П2 (роль «Менеджер склада», язык «русский», пароль не заполнен)
- Пл3 разрешается работа в узле П1 (роль «Менеджер склада», язык «русский», пароль не заполнен)
- Выполняется обмен данными с узлами П1 и П2 информационной системы.
- Выполняется запуск П1, выполняется прием изменений из ГУ, закрывается ИБ.
- Выполняется запуск П2, выполняется прием изменений из ГУ, закрывается ИБ.
- Выполняется запуск П1 под пользователем Пл1 (вход осуществляется без пароля), система просит установить пароль пользователя, Пл1 устанавливает пароль.
- Пл1 открывает список справочника «Пользователи», должен увидеть 2 пользователей «Пл1» и «Пл3», Пл1 имеет доступ к настройкам пользователя ИБ для Пл1 и Пл3.
- Пл1 имеет возможность редактировать настройки «по умолчанию» для пользователей Пл1 и Пл3 для всех доступных пользователям магазинов.
- Выполняется запуск П1 под пользователем Пл3 (вход осуществляется без пароля), система просит установить пароль пользователя, Пл3 устанавливает пароль.
- Пл3 открывает список справочника «Пользователи», должен увидеть 2 пользователей «Пл1» и «Пл3», Пл3 имеет доступ к настройкам только пользователя ИБ Пл3.
- Пл3 имеет возможность редактировать настройки «по умолчанию» для пользователя Пл3 для всех доступных пользователю магазинов.
Далее идет менее детализированное описание выполняемых действий
- Пользователь Пл2 заходит в узел П2. Изменять настройки «по умолчанию» и настройки пользователя ИБ ему разрешено только для своего пользователя.
- Пользователь изменяет свои настройки пользователя ИБ, выполняет обмен с ГУ – в ГУ настройки пользователя Пл2 для узла П2 актуализируются.
- В ГУ удаляют возможность работы Пл2 в П2, выполняют обмен – пользователь Пл2 для узла П2 не зарегистрирован в ИБ.
- Пл1 заходит в конфигуратор П1, удаляет пользователя Пл3, в режиме предприятие - у Пл3 настройки ИБ для Пл3 не отображаются, администратор (Пл1) может вновь создать Пл3 в режиме Предприятия, но он этого не делает, а выполняет обмен с ГУ – в ГУ настройки для Пл3 актуализируются (он становится не зарегистрированным для узла Пл1).
Александр Волков, 2007