1с создать пользователя программно
По хорошему при серьезном подходе к автоматизации нужно запрещать неавторизованный вход в программу.
Исключение могут составлять крайне редкие случаи, например, демо-версия конфигурации или конфигурация публичного пользования.
Но как правило, наряду с заведением пользователей в конфигураторе имеет смысл сделать в конфигурации справочник "Пользователи", в котором хранить пользователей, соответствующих пользователям в конфигураторе.
Это дает возможность некоторых вещей, например привязки к пользователю некоторых прав, которыми нельзя управлять с помощью метаданного "Роль", построение системы ограничения прав RLS, привязанной к текущему пользователю, сохранение в справочниках и документах информации об авторах объектов, индивидуальные особенности интерфейса, настроек отчетов, событий и т. д.
Итак. Для выполнения этой задачи в конфигурации требуется сделать нижеперечисленные настройки.
Добавляем в конфигурацию план обмена "РаспределенныеБазы".
Добавляем в конфигурацию иерархический справочник "Пользователи", подчиненный плану обмена "РаспределенныеБазы".
Добавляем в конфигурацию параметр сеанса "ТекущийПользователь" типа "СправочникСсылка.Пользователи".
Добавляем в конфигурацию параметр сеанса "ТекущийУзелРаспределеннойБазы" типа "ПланОбменаСсылка.РаспределенныеБазы".
Добавляем в конфигурацию константу "ЗапретитьЗапускПрограммыНовымПользователям" типа "Булево".
В модуль приложения в процедуру ПередНачаломРаботыСистемы() вставляем код
В модуль внешнего соединения в процедуру ПриНачалеРаботыСистемы() вставляем код
В модуль сеанса, в котором фирма "1С" рекомендует устанавливать параметры сеанса, в процедуру УстановкаПараметровСеанса() вставляем код
Туда же (в модуль сеанса) вставляем процедуру глУстановитьПараметрСеансаТекущийПользователь() и функцию глЕстьДействующиеПользователи()
Собственно все. Теперь программа не запустится, если список пользователей в конфигураторе пустой.
И напоследок немного по логике работы.
Параметр сеанса "ТекущийПользователь" вместо комбинации двух одноименных экспортных переменных "глТекущийПользователь" в модуле приложения и модуле внешнего соединения выбран потому, что к нему можно привяхать RLS, а к глобальной переменной нет.
Константа "ЗапретитьЗапускПрограммыНовымПользователям" создана для того, чтобы при необходимости запретить автоматически программно создавать новых пользователей в справочнике "Пользователи". Может пригодиться в принципе кому-нибудь.
В модуле внешнего соединения проверка авторизованности пользователя выполняется в процедуре ПриНачалеРаботыСистемы(), а не в процедуре ПередНачаломРаботыСистемы() потому, что в модуле внешнего соединения нет события ПередНачаломРаботыСистемы().
Именно поэтому отказаться от запуска программы уже нельзя, но. нужно, поэтому вызываем исключение с заданным текстом ошибки.
Хочу чтобы при создании в справочнике Пользователи нового элемента с конкретной ролью в реквитизите Роль и другими данными создавался пользователь в ИБ. Вот код:
&НаСервере
Пишет поле Объект не найдено. Как правильно написать?
(6) Телепаты в выходные спят еще. Этот код у тебя где расположен?
или так:
Метаданные.Роли[Объект.Роль];
кстати, пароли пользователей в учебной версии не поддерживаются
решение обратной задачи. Добавляется пользователь в ИБ в режиме конфигуратора. Нужно чтобы он добавился сразу в справочник
(17) "При начале работы сеанса" - можно в обработчике этого события проверить наличие Пользователя в справочнике Пользователи и добавить при необходимости.
Есть методы ПользовательИБ
Там есть специальный Модуль сеанса. Открой его от корня конфигурации. Находясь в модуле смотри на список преодпределенных обработчиков событий в этом модуле.
В списке событий увидишь ПриНачалеРаботыСистемы (выше я неверно описал что при начале работы сеанса)
(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С), эта процедура не вынесена в общий модуль, но она несложная и ее можно упрощенно вставить даже в наш код.
В итоге получился универсальный код, который работает и для упрощенной и для не упрощенной системы прав.
В упрощенной каждому профилю и пользователю ставится в соответствие персональная группа доступа. В не упрощенном в одну группу доступа можно включать несколько пользователей.
Итоговый код скрипта для Обновлятора
Важно! Если добавляете администратора и других пользователей, начинайте с администратора, т.к. иначе получите ошибку, что вы не создали администратора.
Вот какой код получился:
Как видно, можно использовать один скрипт для разных баз, прописывая пользователей для разных типов баз (БП, ЗУП) отдельно.
Читайте также: