gifts2017

Запуск под пользователем (асинхронный вызов)

Опубликовал Kost Aridov (kvikster) в раздел Администрирование - Защита, права, пароли

Часто бывает необходимо запустить для отладки под другим пользователем, маленький кусок кода не испортит конфигурацию

Алгоритм следующий:

1 заходим в справочник Пользователи

2 нажимаем на новую кнопку "ЗапуститьПодПользователем"

3 программа сохраняет старый пароль в отдельный параметр

4 устанавливает новый пароль "123"

5 запускает новый сеанс с выбранным пользователем 

6 через 30 секунд возвращается старый пароль


В справочнике Пользователи добавляем команду "ЗапуститьПодПользователем" и в модуле прописываем код

&НаКлиенте //Ключевая Команда из формы
Процедура ЗапуститьПодПользователем(Команда)
Если не Параметры.Ключ.Пустая() Тогда
ТранзитныеПараметры = Новый Структура("ТекПользователь,ИмяПользователя,ТекПароль,ПустойПароль,БезПароля,ПарольУстановлен",Объект.Ссылка,"","",Ложь,Ложь,Ложь);

ТранзитныеПараметры = ИзменитьПараметрПароля(ТранзитныеПараметры);
Если Найти(СтрокаСоединенияИнформационнойБазы(),"Srvr=") = 0 Тогда
СтрокаЗапуска = "C:\Program Files (x86)\1cv8\common\1cestart.exe ENTERPRISE "+СтрЗаменить(СтрЗаменить(СтрокаСоединенияИнформационнойБазы(),"File="," /F "),";","")+" /n "+ТранзитныеПараметры.ИмяПользователя+" /p "+"123"+"";
Иначе
СтрокаЗапуска = "C:\Program Files (x86)\1cv8\common\1cestart.exe ENTERPRISE "+СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрокаСоединенияИнформационнойБазы(),"Srvr="," /S "),";Ref=""","\"),"""",""),";","")+" /n "+ТранзитныеПараметры.ИмяПользователя+" /p "+"123"+"";
КонецЕсли;

ЗапуститьПриложение(СтрокаЗапуска);
ПоказатьПредупреждение(Новый ОписаниеОповещения("ВернутьПараметрПароляКлиент",ЭтотОбъект,ТранзитныеПараметры),"Не закрывай это окно",30,"Внимание!!!");

КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ИзменитьПараметрПароля(ТранзитныеПараметры) 
ТекПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТранзитныеПараметры.ТекПользователь.ИдентификаторПользователяИБ);
Если ТекПользователь = Неопределено Тогда
Сообщить("Ошибка");
Возврат Неопределено;
КонецЕсли;

ТранзитныеПараметры.ИмяПользователя = ТекПользователь.Имя;

НачатьТранзакцию();
Если ТекПользователь.АутентификацияСтандартная тогда
Если ТекПользователь.ПарольУстановлен тогда
ТранзитныеПараметры.ПарольУстановлен=Истина;
ТранзитныеПараметры.ТекПароль = ТекПользователь.СохраняемоеЗначениеПароля;
ТекПользователь.Пароль = "123";
Иначе
ТранзитныеПараметры.ПустойПароль=Истина;
ТекПользователь.Пароль = "123";
КонецЕсли;;
Иначе
ТранзитныеПараметры.БезПароля=Истина;
ТекПользователь.АутентификацияСтандартная=Истина;
ТекПользователь.Пароль = "123";
КонецЕсли;
Попытка
ТекПользователь.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка!");
Возврат Неопределено;
КонецПопытки;
ЗафиксироватьТранзакцию(); 

Возврат ТранзитныеПараметры

КонецФункции
&НаСервереБезКонтекста
Процедура ВернутьПараметрПароля(ТранзитныеПараметры)

ТекПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТранзитныеПараметры.ТекПользователь.ИдентификаторПользователяИБ);
Если ТранзитныеПараметры.ПарольУстановлен Тогда
ТекПользователь.СохраняемоеЗначениеПароля = ТранзитныеПараметры.ТекПароль;
ИначеЕсли ТранзитныеПараметры.ПустойПароль Тогда
ТекПользователь.Пароль = "";
ИначеЕсли ТранзитныеПараметры.БезПароля Тогда
ТекПользователь.АутентификацияСтандартная = Ложь;
КонецЕсли;
Попытка
ТекПользователь.Записать();
Исключение
Сообщить("Внимание! пароль изменился необходимо вернуть пароль вручную");
КонецПопытки; 
КонецПроцедуры
&НаКлиенте
Процедура ВернутьПараметрПароляКлиент(ДополнительныеПараметры)Экспорт

ВернутьПараметрПароля(ДополнительныеПараметры);

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

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Сергей Галюк (dj_serega) 30.07.15 15:11
2. Kost Aridov (kvikster) 30.07.15 15:17
(1) dj_serega, не нужно каждый раз открывать обработку + асинхронность
3. Марина Чирина (chmv) 30.07.15 16:22
а мне понравилось решение
4. Сергей Галюк (dj_serega) 30.07.15 18:03
(2) kvikster, Но нужно модифицировать конфу ;)
5. Ярослав Радкевич (WKBAPKA) 31.07.15 10:09
есть еще инструменты разработчика, там есть такая возможность
6. Сергей Галюк (dj_serega) 04.08.15 11:28
(5) WKBAPKA, там обычные формы
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа