МенеджерСистемыВзаимодействия.ПолучитьПользователей

Методы · GetUsers

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

Синтаксис

ПолучитьПользователей(<Отбор>)
Полное описание, параметры и ограничения

МенеджерСистемыВзаимодействия.ПолучитьПользователей (CollaborationSystemManager.GetUsers)

МенеджерСистемыВзаимодействия (CollaborationSystemManager)

ПолучитьПользователей (GetUsers)

Доступен, начиная с версии 8.3.15.

Синтаксис:
ПолучитьПользователей(<Отбор>)
Параметры:

<Отбор> (необязательный)
Тип: ОтборПользователейСистемыВзаимодействия.
Для строковых полей отбор выполняется по полному соответствию.
Для полей "Имя", "ПолноеИмя", "НомерТелефона", "АдресЭлектроннойПочты", "АдресЭлектроннойПочтыДляАутентификации" сравнение значений выполняется без учета регистра.
Возвращаемое значение:
Тип: Массив.

Описание:

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

Доступность:

Мобильный клиент, сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.15.

Описание изменено в версии 8.3.20.

Методическая информация

Практические примеры

Проверить свою учетную запись взаимодействия и сохранить учебный псевдоним

Реальный паспорт текущего внутреннего участника сверяется с UUID пользователя базы. Точный отбор и пустая следующая страница проверены до сохранения одного собственного псевдонима; никакие чужие контакты не выводятся.

Где и как запускать

Полный серверный общий модуль УчебноеВзаимодействие своей пустой конфигурации УчебноеВзаимодействие85, отдельная локальная VM/сервер взаимодействия. Не клиентский обработчик формы.

Подготовка

  1. Нужны только ваша изолированная VM, новая пустая база8.5.1.1343 и отдельный локальный сервер взаимодействия, не связанный с рабочими абонентами/серверами. Имя конфигурации УчебноеВзаимодействие85, русский язык, совместимость Не использовать, управляемый интерфейс. Пустоту предметных объектов, фоновых заданий, подписок и отсутствие расширений проверяет код. Реальные API здесь не выполнялись.

  2. Разверните собственный учебный сервер взаимодействия в той же VM с локальным адресом http://localhost:9094, без публичной публикации, SMTP, внешних интеграций, совместного использования приложений и чужих учетных записей. Его установку и настройку выполняйте вручную по документации своей серверной поставки. Эта программа не устанавливает сервер и не меняет маршрут localhost. Если фактически зарегистрированный адрес отличается, образец намеренно отказывает; не подставляйте рабочий адрес.

  3. В конфигураторе вручную создайте единственного пользователя с именем Уч85Связь_ и добавленным вашим новым ненулевым UUID в каноническом строковом формате; полное имя Учебный участник. Назначьте только в этом стенде необходимые права Администрирование данных/администрирование пользователей и системы взаимодействия. Войдите под ним. Учетные записи/права этим кодом не создаются и не расширяются.

  4. Вручную зарегистрируйте только эту пустую базу на своем отдельном сервере взаимодействия; наименование приложения задайте УчебноеВзаимодействие85. Синхронизируйте своего внутреннего пользователя базы: имя/полное имя совпадают, учетная запись не внешняя, не заблокирована, без почты/телефона/аутентификационной почты/ключа сопоставления. Для урока профиля псевдоним должен быть пустым. Не используйте персональные сведения, действительные адреса или контакты.

  5. Создайте серверный общий модуль УчебноеВзаимодействие с флагом Сервер, без флагов Клиент и Привилегированный. Вставьте полный код выбранного урока целиком, не одновременно оба варианта модуля. Все вызываемые внутренние функции включены. Нельзя вставлять серверные методы в клиентский модуль формы: thin/web для этих синхронных методов не объявлены в native-справке.

  6. Создайте свою внешнюю обработку с одной управляемой формой, командой Выполнить и строковым реквизитом Подтверждение длиной100. Обработчик команды клиента вызывает ВыполнитьНаСервере(); серверная процедура вызывает УчебноеВзаимодействие.ВыполнитьПример(Подтверждение). Эти две короткие процедуры даны отдельным поддерживающим модулем. Кнопка должна быть нажата сознательно только после чтения предупреждений; автоматического запуска при открытии нет.

  7. В VM оставьте только свой сеанс, не включайте ботов, обработчики сообщений, сторонние клиенты или задания, способные менять свои объекты параллельно. Защитные маркеры/ID уменьшают риск чужого доступа, но не являются криптографическим доказательством собственника сервера и не заменяют вашу проверку выделенного стенда. Профиль и сообщения — настоящие изменения на своем сервере при вашем ручном запуске.

  8. Сначала оставьте подтверждение пустым: программа должна остановиться до изменения профиля/создания обсуждения. Затем введите только фразу выбранного урока. После исключения никакие автоматические повторы/откаты/удаления не выполняются. Сохраните показанный собственный кандидат UUID-ключа/псевдонима и проверяйте возможный частичный результат вручную только в своем сервере. Новые резервные копии не создаются.

Процедура ВыполнитьПример(Подтверждение = "") Экспорт
    Пользователь = ПроверитьСвоегоПользователя85();
    Если Подтверждение <> "СВОЙ ПУСТОЙ СЕРВЕР И ПРОФИЛЬ" Тогда
        ВызватьИсключение "Сначала прочитайте подготовку. Профиль не изменен";
    КонецЕсли;
    Если Пользователь.Псевдоним <> "" Тогда
        ВызватьИсключение "Псевдоним уже занят. Урок не перезаписывает прежнее значение";
    КонецЕсли;
    Отбор = Новый ОтборПользователейСистемыВзаимодействия;
    Отбор.Имя = Пользователь.Имя;
    Отбор.ПолноеИмя = Пользователь.ПолноеИмя;
    Отбор.Внешний = Ложь;
    Отбор.Заблокирован = Ложь;
    Отбор.АдминистраторАбонента = Пользователь.АдминистраторАбонента;
    Отбор.АдресЭлектроннойПочты = "";
    Отбор.АдресЭлектроннойПочтыДляАутентификации = "";
    Отбор.НомерТелефона = "";
    Отбор.КлючСопоставления = "";
    Отбор.ТипВнешнейСистемы = "";
    Отбор.Количество = 2;
    Отбор.НаправлениеСортировки = НаправлениеСортировки.Возр;
    Отбор.После = Неопределено;
    Найденные = СистемаВзаимодействия.ПолучитьПользователей(Отбор);
    Если ТипЗнч(Найденные) <> Тип("Массив") Или Найденные.Количество() <> 1
        Или Найденные[0].Идентификатор <> Пользователь.Идентификатор Тогда
        ВызватьИсключение "Отбор собственного паспорта не вернул ровно свою учетную запись";
    КонецЕсли;
    Отбор.После = Пользователь.Идентификатор;
    Если СистемаВзаимодействия.ПолучитьПользователей(Отбор).Количество() <> 0 Тогда
        ВызватьИсключение "После последней своей строки остались результаты";
    КонецЕсли;
    Отбор.После = Неопределено;
    Отбор.Имя = "Уч85Несуществующий_" + Строка(Новый УникальныйИдентификатор);
    Если СистемаВзаимодействия.ПолучитьПользователей(Отбор).Количество() <> 0 Тогда
        ВызватьИсключение "Отрицательный точный отбор не пуст";
    КонецЕсли;
    Псевдоним = "Уч85Профиль_" + Строка(Новый УникальныйИдентификатор);
    Сообщить("Кандидат собственного изменения: " + Псевдоним);
    Пользователь.Псевдоним = Псевдоним;
    Пользователь.Записать();
    Факт = СистемаВзаимодействия.ПолучитьПользователя(Пользователь.Идентификатор);
    Если Факт.Псевдоним <> Псевдоним Тогда
        ВызватьИсключение "Запись могла произойти, но собственный псевдоним не подтвержден";
    КонецЕсли;
    Сообщить("Собственный псевдоним сохранен и отдельно прочитан. Это не смена имени в интерфейсе 1С");
КонецПроцедуры

Функция ПроверитьСвоегоПользователя85()
    ПроверитьСвойПустойСтенд();
    Если ПривилегированныйРежим() Тогда
        ВызватьИсключение "Входной привилегированный режим не допускается";
    КонецЕсли;
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
    Если Пользователи.Количество() <> 1 Или Текущий = Неопределено Тогда
        ВызватьИсключение "Нужен единственный собственный учебный пользователь";
    КонецЕсли;
    Если Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор
        Или Лев(Текущий.Имя, СтрДлина("Уч85Связь_")) <> "Уч85Связь_" Тогда
        ВызватьИсключение "Учебный пользователь не подтвержден";
    КонецЕсли;
    UUIDМетки = Новый УникальныйИдентификатор(Сред(Текущий.Имя, СтрДлина("Уч85Связь_") + 1));
    Если Текущий.Имя <> "Уч85Связь_" + Строка(UUIDМетки)
        Или UUIDМетки = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
        ВызватьИсключение "Имя должно содержать собственный канонический ненулевой UUID";
    КонецЕсли;
    Если Не СистемаВзаимодействия.ИнформационнаяБазаЗарегистрирована()
        Или Не СистемаВзаимодействия.ИспользованиеДоступно() Тогда
        ВызватьИсключение "Вручную подготовьте регистрацию собственной учебной базы";
    КонецЕсли;
    Если СистемаВзаимодействия.АдресСервера() <> "http://localhost:9094" Тогда
        ВызватьИсключение "Разрешен только отдельно подготовленный сервер localhost:9094 в своей VM";
    КонецЕсли;
    Версия = СистемаВзаимодействия.ВерсияСервера();
    Если ТипЗнч(Версия) <> Тип("Строка") Или Не ЗначениеЗаполнено(Версия) Тогда
        ВызватьИсключение "Версия своего сервера не получена";
    КонецЕсли;
    ИД = СистемаВзаимодействия.ИдентификаторТекущегоПользователя();
    Если ТипЗнч(ИД) <> Тип("ИдентификаторПользователяСистемыВзаимодействия") Тогда
        ВызватьИсключение "Не получен реальный идентификатор собственного участника";
    КонецЕсли;
    Если СистемаВзаимодействия.ПолучитьИдентификаторПользователя(Текущий.УникальныйИдентификатор) <> ИД
        Или СистемаВзаимодействия.ПолучитьИдентификаторПользователяИнформационнойБазы(ИД) <> Текущий.УникальныйИдентификатор Тогда
        ВызватьИсключение "Двустороннее соответствие своей учетной записи неверно";
    КонецЕсли;
    Пользователь = СистемаВзаимодействия.ПолучитьПользователя(ИД);
    Если Пользователь.Идентификатор <> ИД Или Пользователь.Имя <> Текущий.Имя
        Или Пользователь.ПолноеИмя <> Текущий.ПолноеИмя
        Или Пользователь.ИдентификаторПользователяИнформационнойБазы <> Текущий.УникальныйИдентификатор Тогда
        ВызватьИсключение "Паспорт своего пользователя не совпал с информационной базой";
    КонецЕсли;
    Если Пользователь.Внешний Или Пользователь.Заблокирован
        Или Пользователь.ТипВнешнейСистемы <> ""
        Или Пользователь.ИдентификаторПользователяВнешнейСистемы <> Неопределено
        Или Пользователь.АдресЭлектроннойПочты <> ""
        Или Пользователь.АдресЭлектроннойПочтыДляАутентификации <> ""
        Или Пользователь.НомерТелефона <> ""
        Или Пользователь.КлючСопоставления <> "" Тогда
        ВызватьИсключение "Нужен чистый внутренний пользователь без персональных контактов и объединений";
    КонецЕсли;
    Если Пользователь.АдминистраторАбонента <> СистемаВзаимодействия.ТекущийПользовательЯвляетсяАдминистраторомАбонента() Тогда
        ВызватьИсключение "Признак администратора абонента не согласован";
    КонецЕсли;
    ВсеПользователи = СистемаВзаимодействия.СтандартныеПользователи.ВсеПользователиПриложения;
    Если ИД = ВсеПользователи Или ИД = Новый ИдентификаторПользователяСистемыВзаимодействия Тогда
        ВызватьИсключение "Стандартный адресат и Никого не оповещать не являются своей учетной записью";
    КонецЕсли;
    ВосстановленныйИД = Новый ИдентификаторПользователяСистемыВзаимодействия(Строка(ИД));
    Если СистемаВзаимодействия.ПолучитьПользователя(ВосстановленныйИД).Идентификатор <> ИД Тогда
        ВызватьИсключение "Восстановленный из строки реальный ID не подтвержден сервером";
    КонецЕсли;
    Приложение = СистемаВзаимодействия.ПолучитьПриложение(СистемаВзаимодействия.ИдентификаторТекущегоПриложения());
    Если Приложение.Идентификатор <> СистемаВзаимодействия.ИдентификаторТекущегоПриложения()
        Или Приложение.Наименование <> "УчебноеВзаимодействие85" Тогда
        ВызватьИсключение "Нужно свое приложение с точным учебным наименованием";
    КонецЕсли;
    Возврат Пользователь;
КонецФункции

Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры
Модуль своей управляемой формы: команда и серверный вызов

Своя внешняя обработка → основная управляемая форма → модуль формы

Полный клиентский обработчик команды и серверная процедура этой формы; общий модуль отдельно. Не вставляйте общий модуль внутрь обработчика.

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьНаСервере()
    УчебноеВзаимодействие.ВыполнитьПример(Подтверждение);
КонецПроцедуры

Разбор по шагам

  1. Пустой стенд, единственный пользователь, регистрация, точный локальный адрес и непустая версия проверяются отдельно. ИспользованиеДоступно проверяет регистрацию, а не доступность транспорта; успешный ответ от ВерсияСервера/других методов не обещает доступность дальнейших вызовов.

  2. Реальный ИдентификаторТекущегоПользователя сравнивается с прямым преобразованием UUID базы и обратным преобразованием. Если соответствие отсутствует/иной пользователь, опыт прекращается, его паспорт не выводится.

  3. ПолучитьПользователя возвращает живой собственный объект. Код проверяет имя, полное имя, UUID базы, внутренний/незаблокированный режим и пустые контакты/внешние привязки. Readonly Имя и ПолноеИмя читаются, не назначаются; псевдоним не является изменением этих свойств.

  4. СтандартныеПользователи.ВсеПользователиПриложения и пустой ИдентификаторПользователя — специальные адресаты, не конкретный участник. Они отсекаются. Конструктор по строке получает только Строка реального текущего ID, и результат отдельно подтверждается через ПолучитьПользователя.

  5. ИдентификаторТекущегоПриложения передается ПолучитьПриложение. Его readonly ID и Наименование связывают опыт с вручную подготовленным отдельным приложением, а не с любой базой на этом сервере.

  6. Создается реальный ОтборПользователейСистемыВзаимодействия. Имя и ПолноеИмя взяты из подтвержденного собственного паспорта, Внешний/Заблокирован=false и признак администратора совпадают с ним. Пустые контактные поля не объявляются фильтром только пустых значений: ограничение собственного UUID-имени и последующая проверка ID остаются обязательными.

  7. Количество=2 позволяет обнаружить неожиданную вторую запись, не читать все250. НаправлениеСортировки=Возр и После=Неопределено задают первую страницу. ПолучитьПользователей требует Администрирование данных либо привилегированный режим; урок использует заранее выданное право и не повышает привилегии.

  8. Сначала ожидается ровно один свой ID. Затем После устанавливается в этот полученный ID и проверяется пустая следующая страница. После сбрасывается, а UUID-имя меняется на новый заведомо учебный несуществующий маркер: результат должен быть пустым. Отбор не выполняет поиск по префиксу, строковые имена сопоставляются полностью без учета регистра.

  9. Только после проверок и подтверждения СВОЙ ПУСТОЙ СЕРВЕР И ПРОФИЛЬ пустой Псевдоним заменяется на новый собственный UUID-маркер. Кандидат выводится до Записать. Новый ПолучитьПользователя отдельно подтверждает точное значение; изменение лишь объекта в памяти не объявляется сохранением.

Как проверить результат

  1. В корректном стенде первая страница содержит только свой ID; следующий и отрицательный точный отборы пусты. Чужие ФИО/контакты/профили не выводятся.

  2. Без точного подтверждения или при занятом псевдониме вызов Записать отсутствует. Измените только в своем стенде регистрационный адрес/наименование приложения или добавьте второго пользователя: guard должен отказать.

  3. После единственного ручного успешного запуска свежий ПолучитьПользователя возвращает точно показанный UUID-псевдоним. Повторный запуск отказывает, а не перезаписывает его новым.

  4. При ошибке прав или потерянном ответе после Записать сохранение не доказано. Кандидат нужен для собственной ручной сверки, никакого автоматического повторения/возврата старого профиля нет.

Ожидаемый результат

Собственный внутренний пользователь и приложение подтверждены реальными идентификаторами; точный отбор/пагинация проверены и один собственный псевдоним отдельно прочитан после записи либо честно зафиксирован отказ.

На что обратить внимание

  1. Псевдоним отображается во внешних системах интеграции и не используется в ОтборПользователей; в штатном интерфейсе клиентов1С имя этим уроком не меняется. Внешние интеграции здесь отсутствуют, поэтому видимость в них не проверена.

  2. Конструкторы идентификаторов по строке не проверяют реальность объекта. Своя исходная строка ID и успешное получение именно собственного паспорта обязательны; новый произвольный UUID не используется как серверный ID.

  3. Администратор абонента, право Администрирование данных и привилегированный режим — разные условия. Совпадение флага администратора не подменяет права. Отказ прав не обходится УстановитьПривилегированныйРежим.

  4. Пустая конфигурация и localhost сами по себе не доказывают, что сервер ваш. Нужна отдельная VM/отдельный сервер без рабочего абонента, объединений приложений или персональных данных. Не меняйте hardcoded guard на production.

  5. Нет транзакционного отката сервера взаимодействия, атомарного compare-and-swap и защиты от параллельных собственных клиентов. При неизвестном результате повторная запись не выполняется автоматически; сохраненный псевдоним остается учебным артефактом.

  6. Код не запускался в1С, сеть и профили не менялись. Проверены установленные сигнатуры8.5.1.1343, readonly, серверный контекст и статические пути. RuntimeVerifiedScenarios=0.

  7. В установленной справке8.5 страница конструктора отсутствует у ОтборПользователейСистемыВзаимодействия, хотя тип/свойства и метод ПолучитьПользователей документированы. Безаргументный Новый подтверждается сохраненным исходником УНФ source-fb69813a25e0760459e1, но не считается подтвержденной native-сигнатурой и не проверялся запуском. Общий strict constructor-checker показывает ровно этот известный пробел; остальные конструкторы урока подтверждены установленными страницами.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.