Распространенная ошибка, которую совершают начинающие разработчики - они тестируют все под пользователем с полными правами. Но то что работает "под админом" вовсе не обязательно будет работать у конкретного пользователя. Могут быть ограничения в правах, различные настройки и т.п. Именно поэтому следует тестировать под целевым пользователем.
Вторая причина, когда нам понадобится отладка 1С под другим пользователем - когда у него появляется какая-то ошибка, которая у других не воспроизводится. В этом случае нам надо зайти именно под этим пользователем и воспроизвести ошибку. Случается так, что дело в локальном кэше, или настройках конкретной машины, но зачастую мы действительно ловим ошибку, и дальше можем заняться ее устранением.
Мы рассмотрим четыре способа
- классический, когда известен пароль пользователя
- использование аутентификации ОС
- продвинутый, когда пароль мы не знаем, а аутентификацию ОС мы по каким-то причинам использовать не можем.
- Отладка веб-клиента 1С
1. Запуск отладки при известном пароле
Чтобы запустить отладку 1С под другим пользователем, заходим в Конфигуратор, меню Сервис / Параметры.

Далее закладка Запуск 1С:Предприятия, в ней закладка Основные. В поле Имя выбираем нужного пользователя.

После этого - запустить отладку по горячей клавише F5, или через меню Отладка / Начать отладку

2. Запуск с использованием аутентификации ОС
Для этого в свойствах пользователя ИБ должен быть отмечен флажок "Аутентификация операционной системы" и выбрана учетная запись, под которой вы авторизовались (это может быть как локальная учетка текущего компьютера, так и доменная учетная запись AcriveDirectory). На закладке Запуск 1С:Предприятия / Основные указываем переключатель "Использовать аутентификацию операционной системы"

3. Запуск без смены пароля
Это более продвинутый способ, и я рекомендую прибегать к нему, если вы уже на достаточном уровне владеете языком программирования 1С. Этот способ есть смысл использовать, если мы не знаем пароль пользователя, нам нельзя его менять или сбрасывать, а также нам нельзя менять аутентификацию ОС.
У объекта встроенного языка ПользовательИБ есть свойство СохраняемоеЗначениеПароля. Можно закэшировать его, сменить пароль пользователя, запустить сеанс, и затем вновь восстановить данные из кэша. После этого из конфигуратора можно будет подключиться к предмету отладки - нашему сеансу. В простейшем варианте код будет такой:
&НаКлиенте Перем КэшПароля, ИмяПользователяДляВосстановления; &НаКлиенте Процедура ЗапуститьОтладкуПодПользователем(Команда) Пароль = "456"; // 1. Кэшируем старый пароль на сервере и устанавливаем временный КэшПароля = Кэшировать(Пользователь, Пароль); ИмяПользователяДляВосстановления = Пользователь; // 2. Формируем надежную строку запуска (с учетом возможных пробелов в путях) ИсполняемыйФайл = КаталогПрограммы() + "1cv8c.exe"; ПараметрыЗапуска = "enterprise /F ""D:\bases_1c\Демонстрация"" /N """ + Пользователь + """ /P """ + Пароль + """"; СтрокаЗапуска = """" + ИсполняемыйФайл + """ " + ПараметрыЗапуска; ЗапуститьПриложениеАсинх(СтрокаЗапуска); // 3. Запускаем однократный таймер на клиенте на 10 секунд ПодключитьОбработчикОжидания("Подключаемый_ВосстановитьПароль", 10, Истина); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ВосстановитьПароль() // Вызываем серверную процедуру восстановления по истечении 10 секунд Восстановить(КэшПароля, ИмяПользователяДляВосстановления); КонецПроцедуры &НаСервере Функция Кэшировать(Пользователь, Пароль) ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); Если ПользовательИБ = Неопределено Тогда ВызватьИсключение "Пользователь не найден в информационной базе!"; КонецЕсли; // Сначала запоминаем оригинальный хэш пароля ОригинальныйХэш = ПользовательИБ.СохраняемоеЗначениеПароля; // Устанавливаем временный пароль ПользовательИБ.Пароль = Пароль; ПользовательИБ.Записать(); Возврат ОригинальныйХэш; КонецФункции &НаСервере Процедура Восстановить(Кэш, Пользователь) ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); Если ПользовательИБ <> Неопределено Тогда ПользовательИБ.СохраняемоеЗначениеПароля = Кэш; ПользовательИБ.Записать(); КонецЕсли; КонецПроцедуры
Важные нюансы для проверки:
Права доступа: Модификация пользователей через объект ПользователиИнформационнойБазы требует административных прав. Убедитесь, что пользователь, под которым запускается этот код изначально, имеет роль "Администратор системы" (иначе возникнет ошибка нарушения прав доступа).
Безопасность (Race Condition): В течение этих 10 секунд, пока запускается сессия, оригинальный пароль пользователя временно изменен на "456". Если реальный пользователь попытается войти в базу в этот короткий промежуток времени со своим старым паролем, он получить ошибку авторизации. Для тестовых баз это обычно не критично, но на "живых" рабочих базах такой метод применять не рекомендуется.
Отладка веб-клиента 1С под нужным пользователем
Для того, чтобы запустить web-клиент в режиме отладки под другим пользователем, нужно два условия:
- Правильно опубликованная база (со включенной отладкой)
- Запуск веб-клиента с нужными параметрами адресной строки
Возможность отладки веб-клиента можно в простом случае включить в конфигураторе, в мастере публикации на веб-сервере, на закладке Прочие - там следует выбрать тот же протокол отладки (TCP/IP или HTTP), какой настроен в конфигураторе в Сервис/Параметры/Отладка.

Более сложный сценарий - если база опубликована вручную (ну, например, 1С не видит 32-разрядный апач, если одновременно установлен 64-разрядный, и мы настроили публикацию руками). В этом случае нам нужно поправить файл default.vrd - Добавить туда строку
<debug enable="true" protocol="tcp" url="tcp://localhost"/>
localhost — это адрес компьютера, на котором запущен ваш Конфигуратор. Если веб-сервер Apache крутится на том же компьютере, где вы программируете, оставьте localhost. Если веб-сервер выделенный (на другом компьютере), нужно указать вместо localhost IP-адрес своего рабочего компьютера (например: http://192.168.1.100)
Запуск веб-клиента с ключом отладки
Для того, чтобы перехватить в отладке нужный конкретный веб-клиент, следует запустить его с ключом отладки.
Строка будет такого формата:
http://<адрес_сервера>/<имя_публикации>/?debug&N=<Логин>&P=<Пароль>
Разбор параметров:
- debug — включает режим отладки для веб-клиента.
Если используется отладка по протоколу HTTP (в современных версиях платформы), можно уточнить: debug=http. Если по TCP/IP — debug=tcp. - N — имя пользователя (логин), как оно заведено в конфигураторе.
- P — пароль пользователя.
Если пароля нет, параметр можно опустить.
Например, база опубликована как localhost:8080/alexcode_demo,
и мы хотим зайти под пользователем НеАдмин, у которого пароль тоже НеАдмин. Адресная строка будет такая:
http://localhost:8080/alexcode_demo/?debug&N=НеАдмин&P=НеАдмин
Далее в конфигураторе можно будет подключить веб-клиент в качестве предмета отладки.

