Часто бывает необходимо запустить для отладки под другим пользователем, маленький кусок кода не испортит конфигурацию
Алгоритм следующий:
1 заходим в справочник Пользователи
2 нажимаем на новую кнопку «ЗапуститьПодПользователем»
3 программа сохраняет старый пароль в отдельный параметр
4 устанавливает новый пароль «123»
5 запускает новый сеанс с выбранным пользователем
6 через 30 секунд возвращается старый пароль
В справочнике Пользователи добавляем команду «ЗапуститьПодПользователем» и в модуле прописываем код
&НаКлиенте //Ключевая Команда из формы
Процедура ЗапуститьПодПользователем(Команда)
Если не Параметры.Ключ.Пустая() Тогда
ТранзитныеПараметры = Новый Структура("ТекПользователь,ИмяПользователя,ТекПароль,ПустойПароль,БезПароля,ПарольУстановлен",Объект.Ссылка,"","",Ложь,Ложь,Ложь);
ТранзитныеПараметры = ИзменитьПараметрПароля(ТранзитныеПараметры);
Если Найти(СтрокаСоединенияИнформационнойБазы(),"Srvr=") = 0 Тогда
СтрокаЗапуска = "C:Program Files (x86)1cv8common1cestart.exe ENTERPRISE "+СтрЗаменить(СтрЗаменить(СтрокаСоединенияИнформационнойБазы(),"File="," /F "),";","")+" /n "+ТранзитныеПараметры.ИмяПользователя+" /p "+"123"+"";
Иначе
СтрокаЗапуска = "C:Program Files (x86)1cv8common1cestart.exe ENTERPRISE "+СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрокаСоединенияИнформационнойБазы(),"Srvr="," /S "),";Ref=""",""),"""",""),";","")+" /n "+ТранзитныеПараметры.ИмяПользователя+" /p "+"123"+"";
КонецЕсли;
ЗапуститьПриложение(СтрокаЗапуска);
ПоказатьПредупреждение(Новый ОписаниеОповещения("ВернутьПараметрПароляКлиент",ЭтотОбъект,ТранзитныеПараметры),"Не закрывай это окно",30,"Внимание!!!");
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИзменитьПараметрПароля(ТранзитныеПараметры)
ТекПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТранзитныеПараметры.ТекПользователь.ИдентификаторПользователяИБ);
Если ТекПользователь = Неопределено Тогда
Сообщить("Ошибка");
Возврат Неопределено;
КонецЕсли;
ТранзитныеПараметры.ИмяПользователя = ТекПользователь.Имя;
НачатьТранзакцию();
Если ТекПользователь.АутентификацияСтандартная тогда
Если ТекПользователь.ПарольУстановлен тогда
ТранзитныеПараметры.ПарольУстановлен=Истина;
ТранзитныеПараметры.ТекПароль = ТекПользователь.СохраняемоеЗначениеПароля;
ТекПользователь.Пароль = "123";
Иначе
ТранзитныеПараметры.ПустойПароль=Истина;
ТекПользователь.Пароль = "123";
КонецЕсли;;
Иначе
ТранзитныеПараметры.БезПароля=Истина;
ТекПользователь.АутентификацияСтандартная=Истина;
ТекПользователь.Пароль = "123";
КонецЕсли;
Попытка
ТекПользователь.Записать();
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка!");
Возврат Неопределено;
КонецПопытки;
ЗафиксироватьТранзакцию();
Возврат ТранзитныеПараметры
КонецФункции
&НаСервереБезКонтекста
Процедура ВернутьПараметрПароля(ТранзитныеПараметры)
ТекПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТранзитныеПараметры.ТекПользователь.ИдентификаторПользователяИБ);
Если ТранзитныеПараметры.ПарольУстановлен Тогда
ТекПользователь.СохраняемоеЗначениеПароля = ТранзитныеПараметры.ТекПароль;
ИначеЕсли ТранзитныеПараметры.ПустойПароль Тогда
ТекПользователь.Пароль = "";
ИначеЕсли ТранзитныеПараметры.БезПароля Тогда
ТекПользователь.АутентификацияСтандартная = Ложь;
КонецЕсли;
Попытка
ТекПользователь.Записать();
Исключение
Сообщить("Внимание! пароль изменился необходимо вернуть пароль вручную");
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ВернутьПараметрПароляКлиент(ДополнительныеПараметры)Экспорт
ВернутьПараметрПароля(ДополнительныеПараметры);
КонецПроцедуры
А эта публикация чем хуже?
http://infostart.ru/public/237192/
(1) dj_serega, не нужно каждый раз открывать обработку + асинхронность
а мне понравилось решение
(2) Но нужно модифицировать конфу 😉
есть еще инструменты разработчика, там есть такая возможность
(5) WKBAPKA, там обычные формы