1с создать пользователя программно

Обновлено: 07.07.2024

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

Но как правило, наряду с заведением пользователей в конфигураторе имеет смысл сделать в конфигурации справочник "Пользователи", в котором хранить пользователей, соответствующих пользователям в конфигураторе.
Это дает возможность некоторых вещей, например привязки к пользователю некоторых прав, которыми нельзя управлять с помощью метаданного "Роль", построение системы ограничения прав RLS, привязанной к текущему пользователю, сохранение в справочниках и документах информации об авторах объектов, индивидуальные особенности интерфейса, настроек отчетов, событий и т. д.

Итак. Для выполнения этой задачи в конфигурации требуется сделать нижеперечисленные настройки.

Добавляем в конфигурацию план обмена "РаспределенныеБазы".

Добавляем в конфигурацию иерархический справочник "Пользователи", подчиненный плану обмена "РаспределенныеБазы".

Добавляем в конфигурацию параметр сеанса "ТекущийПользователь" типа "СправочникСсылка.Пользователи".

Добавляем в конфигурацию параметр сеанса "ТекущийУзелРаспределеннойБазы" типа "ПланОбменаСсылка.РаспределенныеБазы".

Добавляем в конфигурацию константу "ЗапретитьЗапускПрограммыНовымПользователям" типа "Булево".

В модуль приложения в процедуру ПередНачаломРаботыСистемы() вставляем код

В модуль внешнего соединения в процедуру ПриНачалеРаботыСистемы() вставляем код

В модуль сеанса, в котором фирма "1С" рекомендует устанавливать параметры сеанса, в процедуру УстановкаПараметровСеанса() вставляем код

Туда же (в модуль сеанса) вставляем процедуру глУстановитьПараметрСеансаТекущийПользователь() и функцию глЕстьДействующиеПользователи()

Собственно все. Теперь программа не запустится, если список пользователей в конфигураторе пустой.

И напоследок немного по логике работы.

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

Константа "ЗапретитьЗапускПрограммыНовымПользователям" создана для того, чтобы при необходимости запретить автоматически программно создавать новых пользователей в справочнике "Пользователи". Может пригодиться в принципе кому-нибудь.

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

Хочу чтобы при создании в справочнике Пользователи нового элемента с конкретной ролью в реквитизите Роль и другими данными создавался пользователь в ИБ. Вот код:

&НаСервере
Пишет поле Объект не найдено. Как правильно написать?

Объект - основной реквизит. ТекущийОбъект - форма, которая будет сохраняться
(6) Телепаты в выходные спят еще. Этот код у тебя где расположен?
или так:
Метаданные.Роли[Объект.Роль];
кстати, пароли пользователей в учебной версии не поддерживаются
решение обратной задачи. Добавляется пользователь в ИБ в режиме конфигуратора. Нужно чтобы он добавился сразу в справочник
(17) "При начале работы сеанса" - можно в обработчике этого события проверить наличие Пользователя в справочнике Пользователи и добавить при необходимости.
Есть методы ПользовательИБ

Там есть специальный Модуль сеанса. Открой его от корня конфигурации. Находясь в модуле смотри на список преодпределенных обработчиков событий в этом модуле.
В списке событий увидишь ПриНачалеРаботыСистемы (выше я неверно описал что при начале работы сеанса)

лишние ящики и получать по 7 дней на каждый новый ящик

(26) а что в версии поставки, откуда взята была платформа, там готовой учебной конфигурации разве нет у тебя?
Может есть смысл скачать свежую версию для обучения программированию в том виде, как ее для установки под винду раздают?

Только немного не пойму - модуль сеанса выполняется при старте системы для инициализации параметров сеанса и обработки действий, связанных с сеансом работы. А в поставленной задаче Пользователь добавляется в список ИБ интерактивно и потом программно заносится в справочник.

(28) не совсем "интерактивно" - у тебя в списке пользователей ИБ он уже есть. И в сеанс ты входишь как Пользователь. И непосредственно в процессе входа оказывается что?

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

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

Вот если под этим новым выбранным входить ни разу не будешь, а посмотришь на справочник Пользователи в другом сеансе, то нового элемента там не найдешь.

(4)Я создаю вначале пользователяинформационной базы, а потом его прикручиваю к пользователю таким кодом:


Создаю из XML файла, сейчас пользователи создаються, под ним можно зайти, но в списке справочника пользователей он не отображается, в чем может быть дело?? (6) Если мне не изменяет память, нужно создаваться только пользователя в справочнике, а пользователь инф базы создастся при этом автоматически (7) не пробовал, но откуда тогда брать настройки для входа пользователя?? Вставлять в дополнительные свойства справочника массив, а массив настроек создавать отдельно?

(7) Изменяет память-то. ))) с точностью до наоборот.
Я вот создаю только ПользователяИБ , он отображается в списке , но пока он не зашел - его нет в справочнике, а при первом входе пользователь записывается в Справочник Пользователи.

Это вариант загрузки пользователей из файла (ранее записанного пользователями из другой базы), но ведь это пример.

(9) Пробовал создавать только пользователяИБ, при входе он пишет что пользователь в списке справочника пользователей не найден. Написал код выше все работает, но пользователь не отображается, даже после того как зашёл в БД, начинает отображаться только после того как в активном сеансе его найдешь два раза щелкнешь и запишешь.
Странно как то, так то все заходит и работает.

(10) Я реально сейчас еще раз проверил на ЗУП 3.1 - загрузил этим текстом пользователей - проверил - все появились только в ИБ (в Конфигураторе) и все отражаются в списке, в Справочнике не было ни одного.
После тестового входа одним из них - он появляется в Справочнике

Заполните все реквизиты , которые у меня заполняются.

(11) Сделал как ты говоришь это бухгалтерия предприятия 3.0 видимо там не создается пользователь автоматически. Попытлася записать своим методом.
Для повторной попытки надо удалить пользователей, но пишет:
ОбщийМодуль.Пользователи.Модуль(935)>: Значение не является значением объектного типа (УникальныйИдентификатор)
Обработчик.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор);

Как корректно создать пользователя?? Чтоб ошибок не было. Видно что-то не так.
Вот такой код сейчас:

Вот вполне рабочий код для БП3
Только ПрочитанныйОбъект надо заменить на что-то конкретное, ибо объект читался из файла и там было все заполнено

В бухгалтерии тоже все прекрасно создает.
Единственно с чем столкнулся - действительно без создания в справочнике - не пускает - добавил ваш код ..

И все прекрасно создалось и в списке выводит и зайти удалось от любого имени
Единственно конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.68.61)

Для начала проверим, как все работает в БП3, наверное в ЗУП3 должно работать аналогично? Если там будет своя специфика, то поправим на месте.

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

Ручное создание пользователя

Создадим пользователя вручную:


Добавим ему права путем включения в нужную группу доступа:


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

Таким образом я нашел код, где программа создает/обновляет пользователя:



Этот код дает нам примерное понимание, как создавать пользователя программно.

Программное включение/исключение пользователя в группы доступа. Неоптимальное

Теперь нужно разобраться, как включить пользователя в группы доступа. Для этого, на самом деле я не анализировал БСП, а посмотрел ссылки на созданного пользователя в базе:


Пользователям назначаются почему-то персональные группы доступа:




Очищаются они и в конфигураторе:

Теперь попробуем программно изменить группу доступа, написав такой код:

Получилось, при первом запуске у пользователя включилась и группа доступа:


И появились роли в конфигураторе:

Проверил, что повторный запуск кода убирает группу доступа и роли в конфигураторе.

Программное включение/исключение пользователя в группы доступа. Правильное

Пока я разбирался с группами доступа, задал вопрос на Мисте и мне подсказали, как более просто включать пользователя в группы доступа.

В функции ВключитьПрофильПользователю можно указывать идентификатор профиля, но к сожалению, предопределенный только один Администратор:


Поэтому для универсальности будем искать профиль по наименованию:

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

Программное создание пользователя и назначение ему прав доступа

Попробуем создать пользователя ГБ3 программно и назначить права доступа:


Также устанавливаются роли и профили групп доступа.

Теперь настало время проверить, как код работает в Обновляторе. Код смотрите в конце статьи.

Скрипт отработал успешно:


Проверяем, при входе в базу пользователь есть, под пользователем в базу заходит:


В списке пользователей пользователь есть:


Права те, что заказывали:


Как быть с не упрощенными правами (ЗУП3)

Аналогично проверяем на ЗУП 3, получаем ошибку:



К сожалению (и это недостаток 1С), эта процедура не вынесена в общий модуль, но она несложная и ее можно упрощенно вставить даже в наш код.

В итоге получился универсальный код, который работает и для упрощенной и для не упрощенной системы прав.

В упрощенной каждому профилю и пользователю ставится в соответствие персональная группа доступа. В не упрощенном в одну группу доступа можно включать несколько пользователей.


Итоговый код скрипта для Обновлятора

Важно! Если добавляете администратора и других пользователей, начинайте с администратора, т.к. иначе получите ошибку, что вы не создали администратора.

Вот какой код получился:

Как видно, можно использовать один скрипт для разных баз, прописывая пользователей для разных типов баз (БП, ЗУП) отдельно.

Читайте также: