helpf.pro
Регистрация

v8.2 УП: Определение текущего Пользователя в ИБ, подстановка пользователя в справочник

Lavr
01.04.2016 14:15Прочитано: 7010

Здравствуйте, из этой темы

https://helpf.pro/faq82/view/1391.html как подставить не в документ, а в справочник?

Благодарю.

Yandex
Возможно, вас также заинтересует
Реклама на портале
all4cf
01.04.2016 17:58Ответ № 1

тогда текущий пользователь уже хранится в параметрах сеанса

для использования Сотрудник=ПараметрыСеанса.ТекущийПользователь;

Lavr
07.04.2016 14:43Ответ № 2

Не выходит, ругается вообще на Модель сеанса: {МодульСеанса(2,22)}: Переменная не определена (ОбщийМодульСистемы) ТекущийПользователь=<<?>>ОбщийМодульСистемы.ОпределитьТекущегоПользователя();

E_Migachev
07.04.2016 22:59Ответ № 3

В примере ТекущийПользователь - это обычная переменная, покажите весь ваш код

Lavr
08.04.2016 12:27Ответ № 4

1. Создаем справочник Пользователи2. ПараметрыСеанса.ТекущийПользователь - тип справочник Пользователи3. В модуле Сеанса пишем: Код 1C v 8.2 УП

 Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) 	ТекущийПользователь = ОбщийМодульСистема.ОпределитьТекущегоПользователя(); 	ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; КонецПроцедуры    [/pre] 

4. Создаем общий модуль ОбщийМодульСистема в нем пишем: Код 1C v 8.2 УП

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

5. В документах пропишем Автоопределение Текущего пользователя Код 1C v 8.2 УП

НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Объект.Автор = ОбщийМодульСистема.ПолучитьТекущегоПользователя(); Объект.Фирма = Объект.Автор.Фирма; КонецПроцедуры [/pre] 

Только в пункте 5 вставка в справочник должна быть.

Lavr
08.04.2016 12:31Ответ № 5

Вот здесь все расписано лучше

https://helpf.pro/faq82/view/1391.html

all4cf
08.04.2016 13:31Ответ № 6

у ОбщийМодульСистемы стоят в свойствах вызов Сервер и Клиент?

Lavr
08.04.2016 14:13Ответ № 7

Клиент (УП) и Сервер поставить?

E_Migachev
10.04.2016 23:44Ответ № 8

да

E_Migachev
10.04.2016 23:45Ответ № 9

поэтому он недоступен и выдает ошибку

Lavr
14.04.2016 09:10Ответ № 10

Все выставил, код в форме справочника:

&НаСервереПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)Сотрудник = ОбщийМодульСистема.ПолучитьТекущегоПользователя();

КонецПроцедуры

ошибка:

{Справочник.ЛёвинВА.Форма.ФормаЭлемента.Форма(3,13)}: Переменная не определена (ОбщийМодульСистема)Сотрудник = <<?>>ОбщийМодульСистема.ПолучитьТекущегоПользователя(); (Проверка: Сервер)

Lavr
14.04.2016 12:51Ответ № 11

Код в форме справочника не верен, я его подправил, но на текущую ошибку это все равно не влияет.

Lavr
14.04.2016 13:03Ответ № 12

Предыдущую ошибку исправил, сейчас посыпались синтаксические ошибки:

{ОбщийМодуль.ОбщийМодульСистемы.Модуль(35)}: Ошибка при вызове метода контекста (Выполнить) Результат = Запрос.Выполнить();по причине:{(4, 15)}: Поле не найдено "Пользователи.ЭтоГруппа"Пользователи.<<?>>ЭтоГруппа

Здесь весь код возможно содержит ошибки:

// Функция возвращает ссылку на элемент справочника "Пользователи",// соответствующий текущему пользователю информационной базы.Функция ОпределитьТекущегоПользователя() экспорт

Если ПустаяСтрока(ИмяПользователя()) Тогда ИмяПользователя = "НеАвторизован"; ПолноеИмяПользователя = "Не авторизован"; Иначе ИмяПользователя = ИмяПользователя(); Если ПустаяСтрока(ПолноеИмяПользователя()) Тогда ПолноеИмяПользователя = ИмяПользователя; Иначе ПолноеИмяПользователя = ПолноеИмяПользователя(); КонецЕсли; КонецЕсли; ДлинаКодаПользователя = Метаданные.Справочники.Пользователи.ДлинаКода; Если СтрДлина(ИмяПользователя) > ДлинаКодаПользователя Тогда ИмяПользователя = Лев(ИмяПользователя, ДлинаКодаПользователя); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ ПЕРВЫЕ 1 | Пользователи.Ссылка КАК Ссылка, | Пользователи.ЭтоГруппа |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.Код =Код"; Запрос.УстановитьПараметр("Код", ИмяПользователя); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда ОбъектПользователь = Справочники.Пользователи.СоздатьЭлемент(); ОбъектПользователь.Код = ИмяПользователя; ОбъектПользователь.Наименование = ПолноеИмяПользователя; Попытка ОбъектПользователь.Записать(); Исключение ВызватьИсключение "Пользователь : " + ИмяПользователя + " не был найден в справочнике пользователей. Возникла ошибка при добавлении пользователя в справочник. |" + ОписаниеОшибки(); Возврат Справочники.Пользователи.ПустаяСсылка(); КонецПопытки; ТекущийПользователь = ОбъектПользователь.Ссылка;

Иначе Выборка = Результат.Выбрать(); Выборка.Следующий(); Если Выборка.ЭтоГруппа Тогда ВызватьИсключение "Пользователь : " + ИмяПользователя + " не зарегистрирован. В справочнике присутствует группа с тем же именем"; Иначе ТекущийПользователь = Выборка.Ссылка; КонецЕсли; КонецЕсли; Возврат ТекущийПользователь;

КонецФункции

Функция ПолучитьТекущегоПользователя() Экспорт Возврат ПараметрыСеанса.ТекущийПользователь; КонецФункции

E_Migachev
14.04.2016 14:23Ответ № 13

Сделайте все по инструкции и  ОбщийМодульСистемы в свойствах поставить галки вызов Сервер и Клиент

Справочник пользователи создан?

Lavr
15.04.2016 07:10Ответ № 14

Поставил галочки, справочник создан.

Lavr
18.04.2016 13:00Ответ № 15

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

Я уже все перерыл... Может .cf скинуть куда?

all4cf
20.04.2016 18:08Ответ № 16

кидай на http://diif.ru

посмотрим

Lavr
22.04.2016 14:08Ответ № 17

http://diif.ru/B2ETva7

пароля нет, учетка с административными правами - Лаврентий Сергеевич

all4cf
25.04.2016 00:52Ответ № 18

Так все работает - в чем проблема-то? - 1Cv8.rar 

в приложенном файле конфа, с пользователем Админ и авторизацией

Lavr
25.04.2016 07:05Ответ № 19

Там поле Сотрудник в первом справочнике, "Левин", автоматически не заполнялось, только если я выбираю ручками из справочника Сотрудники.

Lavr
25.04.2016 08:26Ответ № 20

Под Админом вошел, в поле Сотрудник не подставляется Админ автоматом. Справочник ЛевинВА

all4cf
25.04.2016 11:59Ответ № 21

Не так сделал, вот как надо:

Код 1C v 8.3
 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ ЗначениеЗаполнено(Объект.Сотрудник) Тогда
Объект.Сотрудник = ПараметрыСеанса.ТекущийПользователь;
КонецЕсли;
//Если Элементы.Сотрудник.Пустой() Тогда
//Элементы.Сотрудник = ОбщийМодульСистемы.ПолучитьТекущегоПользователя().Пользователи;
//Запись.ИсходныйКлючЗаписи.Пустой() Тогда 
//Запись.Сотрудник = ОбщийМодульСистемы.ПолучитьТекущегоПользователя().ФизическоеЛицо;
//КонецЕсли;
КонецПроцедуры

1Cv8.rar

Lavr
27.04.2016 05:57Ответ № 22

Да! Все работает!! Очень благодарен!

Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.