Определение текущего Пользователя в системе, подстановка пользователя в документы 1. Создаем справочник
Пользователи
2.
ПараметрыСеанса.ТекущийПользователь - тип справочник
Пользователи
3.
В модуле Сеанса пишем:
Код 1C v 8.2 УП Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
ТекущийПользователь = ОбщийМодульСистема.ОпределитьТекущегоПользователя();
ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;
КонецПроцедуры
4. Создаем общий модуль
ОбщийМодульСистема в нем пишем:
Код 1C v 8.2 УП // Функция возвращает ссылку на элемент справочника "Пользователи",
// соответствующий текущему пользователю информационной базы.
Функция ОпределитьТекущегоПользователя() экспорт
Если ПустаяСтрока(ИмяПользователя()) Тогда
ИмяПользователя = "НеАвторизован";
ПолноеИмяПользователя = "Не авторизован";
Иначе
ИмяПользователя = ИмяПользователя();
Если ПустаяСтрока(ПолноеИмяПользователя()) Тогда
ПолноеИмяПользователя = ИмяПользователя;
Иначе
ПолноеИмяПользователя = ПолноеИмяПользователя();
КонецЕсли;
КонецЕсли;
ДлинаКодаПользователя = Метаданные.Справочники.Пользователи.ДлинаКода;
Если СтрДлина(ИмяПользователя) > ДлинаКодаПользователя Тогда
ИмяПользователя = Лев(ИмяПользователя, ДлинаКодаПользователя);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| Пользователи.Ссылка КАК Ссылка,
| Пользователи.ЭтоГруппа
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Код = &Код";
Запрос.УстановитьПараметр("Код", ИмяПользователя);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
ОбъектПользователь = Справочники.Пользователи.СоздатьЭлемент();
ОбъектПользователь.Код = ИмяПользователя;
ОбъектПользователь.Наименование = ПолноеИмяПользователя;
Попытка
ОбъектПользователь.Записать();
Исключение
ВызватьИсключение "Пользователь : " + ИмяПользователя + " не был найден в справочнике пользователей. Возникла ошибка при добавлении пользователя в справочник.
|" + ОписаниеОшибки();
Возврат Справочники.Пользователи.ПустаяСсылка();
КонецПопытки;
ТекущийПользователь = ОбъектПользователь.Ссылка;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Выборка.ЭтоГруппа Тогда
ВызватьИсключение "Пользователь : " + ИмяПользователя + " не зарегистрирован. В справочнике присутствует группа с тем же именем";
Иначе
ТекущийПользователь = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат ТекущийПользователь;
КонецФункции
Функция ПолучитьТекущегоПользователя() Экспорт
Возврат ПараметрыСеанса.ТекущийПользователь;
КонецФункции
5. В документах пропишем Автоопределение Текущего пользователя
Код 1C v 8.2 УП &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Автор = ОбщийМодульСистема.ПолучитьТекущегоПользователя();
Объект.Фирма = Объект.Автор.Фирма;
КонецПроцедуры
Категория:
Пользователь, роль доступа, интерфейс Как получить Имя Пользователя? Код 1C v 8.2 УП &НаКлиенте
Процедура СообщитьИмяПользователя(Команда)
// Вставить содержимое обработчика.
Сообщить(ПолучитьПользователя());
КонецПроцедуры
&НаСервере
Функция ПолучитьПользователя()
Перем ВыбПользователь;
ВыбПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Возврат ВыбПользователь.Имя;
КонецФункции;
// или так:
Сообщить(ИмяПользователя());
Сообщить(ПолноеИмяПользователя());
Код 1C v 8.х ИмяПользователя = ИмяПользователя();
Если ПустаяСтрока(ИмяПользователя) Тогда
// пользователь не авторизовался
ИмяПользователя = "НеАвторизован";
Иначе
ИмяПользователя = ПолноеИмяПользователя();
КонецЕсли;
Код 1C v 7.x Сообщить(ИмяПользователя())
// Сообщит: ПупкинВася
Сообщить(ПолноеИмяПользователя())
// Сообщит: Пупкин Василий Петрович
Категория:
Пользователь, роль доступа, интерфейс Как получить данные о зарегистрированных пользователях информационной базы? Получение данных о пользователях
Код 1C v 8.х Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива.Имя;
ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя;
ЕстьПароль = ЭлементМассива.ПарольУстановлен;
Роли = ЭлементМассива.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
КонецЦикла;
КонецЦикла;
В указанной процедуре работа по получению списка пользователей начинается с обращения к свойству глобального контекста ПользователиИнформационнойБазы. Метод ПолучитьПользователей() возвращает массив объектов ПользовательИнформационнойБазы, который обходится потом в цикле.
Для 1С 7.7 посмотрите Пример получения списка пользователей из файла users.usr Категория:
Пользователь, роль доступа, интерфейс Как получить список зарегистрированных пользователей базы 1С Код 1C v 8.х Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива.Имя;
ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя;
ЕстьПароль = ЭлементМассива.ПарольУстановлен;
Роли = ЭлементМассива.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
КонецЦикла;
КонецЦикла;
Код 1C v 7.x // Функция возвращает список зарегистрированных для выбранной
// базы пользователей. Если пользователи не определены, список
// будет пуст.
//
функция сзПолучитьПользователей(стрПутьКБазе)
// Создаем список значений для возврата
Ответ = создатьобъект("СписокЗначений");
// Формируем полное имя файла, в котором 1С
// хранит информацию о пользователях базы.
стрИмяФайла = стрПутьКБазе + "\UsrDEF\Users.USR";
// Проверим его наличие.
если фс.СуществуетФайл(стрИмяФайла) > 0 тогда
// Создаем объект FSO для работы с файлами.
обФСО = создатьобъект("Scripting.FileSystemObject");
// Открываем файл пользователей как текстовый.
тхтФайл = обФСО.OpenTextFile(стрИмяФайла);
// Инициализация первоначальных переменных
// Загружаем в буфер(тестовую строку) информацию из файла.
стрБуфер = "";
чисПозиция = 0;
// Перебеирать файл придеться посимвольно, так как 1С не совсеми
// символами может работать коректно если они находяться в строке.
пока тхтФайл.AtEndOfStream = 0 цикл
// Получаем очередную позицию в файле.
чисПозиция = чисПозиция + 1;
// Получаем символ из данной позиции.
стрСимв = тхтФайл.Read(1);
// Если код символа больше 31
если кодсимв(стрСимв) > 31 тогда
// Тогда добавляем его к буферу.
стрБуфер = стрБуфер + стрСимв;
конецесли;
конеццикла;
// После формирования буфера начнем искать пользователей в нем.
// Признаком для пользователя будет строка '{"UserItemType","Page.'
стрПоиска = "{""UserItemType"",""Page.";
// Получаем позицию первого пользователя.
чисПозиция = найти(стрБуфер, стрПоиска);
// Проверяем если в буфере нужная нам строка
если чисПозиция > 0 тогда
// Если есть, вырезаем из строки ненужную информацию.
стрБуфер = сред(стрБуфер, чисПозиция);
// Позиция после отрезания становиться в единицу
чисПозиция = 1;
конецесли;
// В цикле получаем информацию о пользователях БД
пока чисПозиция > 0 цикл
// Удаляем из буфера 'мусор'
стрБуфер = сред(стрБуфер, чисПозиция + 22);
// Находим признак начала информации об имени пользователя.
чисСмещение = найти(стрБуфер, """,""") + 3;
// Перемещаем начало буфера на начало информации об имени пользователя
стрБуфер = сред(стрБуфер, чисСмещение);
// Получаем имя пользователя
стрИмяПользователя = лев(стрБуфер, найти(стрБуфер, """,""") - 1);
// Добовляем имя к нашему списку.
Ответ.ДобавитьЗначение(стрИмяПользователя);
// Получаем очередную позицию информации о пользователе
чисПозиция = найти(стрБуфер, стрПоиска);
конеццикла;
конецесли;
// Возращаем полученный список значений содержащий в себе список пользователей базы
возврат Ответ;
конецфункции
еще Пример получения списка пользователей из файла users.usr Категория:
Полезные, Универсальные Функции Вывод информации о программе, Пользователе, Интерфейсе, Правах и т.д Код 1C v 7.x //Вывод в окно сообщений
ОчиститьОкноСообщений(); //Очистим окно сообщений
Состояние("Вывожу информацию!");
Сообщить("ИНФОРМАЦИЯ О ПРОГРАММЕ И ПОЛЬЗОВАТЕЛЕ!","I");
Сообщить("Имя Компьтера - " + ИмяКомпьютера());
Сообщить("Имя пользователя - " + ИмяПользователя());
Сообщить("Полное имя пользователя - " + ПолноеИмяПользователя());
Сообщить("Права пользователя - " + НазваниеНабораПрав());
Сообщить("Название интерфейса - " + НазваниеИнтерфейса());
если Монопольныйрежим()=1 тогда моноп="Монопольный режим"
иначе моноп="НЕ монопольный режим"
Конецесли;
сообщить(моноп);
Сообщить("Каталог пользователя - " + КаталогПользователя());
Сообщить("Каталог ИБ - " + КаталогИБ());
Сообщить("Каталог Программы - " + КаталогПрограммы());
Сообщить("Каталог Временных Файлов" + КаталогВременныхФайлов());
Категория:
Пользователь, роль доступа, интерфейс