При работе с мобильной платформой 1С, особенно на терминалах сбора данных (ТСД) или других общих устройствах, где сотрудники часто меняются, возникает актуальная проблема: в версиях платформы 8.3.16 и выше в окне авторизации появился тумблер «Запомнить». При его активации система сохраняет не только имя пользователя, но и пароль, что приводит к автоматическому входу при последующих запусках приложения. Это создаёт значительные трудности, поскольку для смены пользователя или очистки данных требуется сложная процедура очистки данных приложения, повторного добавления базы и настройки оборудования, такой как сканер.
Важно понимать: напрямую отключить тумблер «Запомнить» стандартными средствами или настройками мобильной платформы 1С на данный момент не представляется возможным. Документация 1С по этим версиям платформы не содержит описания такой функции или опции. Таким образом, наша задача заключается в поиске эффективных обходных путей для решения проблемы нежелательного запоминания пользователя и обеспечения удобной и безопасной смены сотрудников на одном устройстве.
Поскольку прямое отключение системного тумблера невозможно, наиболее надёжным и широко применяемым решением является разработка собственного механизма авторизации уже после входа в мобильное приложение. Рассмотрим этот подход подробнее.
Принцип работы:
Мы предлагаем настроить мобильное приложение таким образом, чтобы оно всегда входило под одним общим, техническим пользователем 1С (например, ТСД_Общий, МобильныйОператор). Этот пользователь не имеет доступа к критически важным данным и используется исключительно для запуска самого мобильного приложения. После успешного входа под этим техническим пользователем, приложение перехватывает управление и предлагает собственную форму авторизации.
Варианты реализации внутренней авторизации:
Внутренняя авторизация может быть реализована различными способами, в зависимости от удобства и требований безопасности:
Сканирование штрихкода сотрудника: Самый распространённый и удобный способ для ТСД. Сотрудник сканирует штрихкод со своего бейджа или удостоверения. В этом штрихкоде может быть закодирован уникальный идентификатор (например, GUID элемента справочника «ФизическиеЛица» или «Пользователи» из основной базы). Приложение считывает этот идентификатор, проверяет его подлинность и, если всё в порядке, устанавливает текущего "рабочего" пользователя.
// Пример концепции обработки сканирования ШК
Процедура ПриПолученииДанныхСканера(ДанныеСканера, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ПустаяСтрока(ДанныеСканера) Тогда
Попытка
// Предполагаем, что в ШК содержится GUID сотрудника
ИдентификаторСотрудника = Новый УникальныйИдентификатор(ДанныеСканера);
// Ищем сотрудника по GUID
Сотрудник = Справочники.ФизическиеЛица.НайтиПоУникальномуИдентификатору(ИдентификаторСотрудника);
Если Сотрудник <> Неопределено Тогда
УстановитьТекущегоПользователяПриложения(Сотрудник);
ОткрытьФорму("ОбщаяФорма.РабочееМестоОператора");
Иначе
ПоказатьПредупреждение(, "Сотрудник с таким идентификатором не найден!");
КонецЕсли;
Исключение
ПоказатьПредупреждение(, "Некорректный формат штрихкода!");
КонецПопытки;
КонецЕсли;
КонецПроцедуры
// Условная функция для установки текущего пользователя
Функция УстановитьТекущегоПользователяПриложения(Сотрудник)
// Сохраняем информацию о текущем сотруднике в глобальной переменной или параметре сеанса
// Например, в модуле приложения:
// ГлобальныеПеременныеМобильногоПриложения.ТекущийСотрудник = Сотрудник;
Возврат Истина;
КонецФункции
Ввод PIN-кода или логина/пароля: Приложение может отображать собственную форму с полями для ввода логина (например, табельного номера) и/или PIN-кода. После ввода данные проверяются через HTTP-сервис или напрямую в локальной базе (если данные синхронизированы).
// Пример концепции кнопки "Войти" на пользовательской форме авторизации
Процедура КомандаВойти(Команда)
Если ЗначениеЗаполнено(ПользовательВвод.Текст) И ЗначениеЗаполнено(ПарольВвод.Текст) Тогда
// Пример простейшей проверки (реальная должна быть сложнее и безопаснее)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Пользователи.Ссылка
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.Код = &КодПользователя
| И Пользователи.ПарольДляМобильногоПриложения = &Пароль"; // Пример дополнительного реквизита для мобильного пароля
Запрос.УстановитьПараметр("КодПользователя", ПользовательВвод.Текст);
Запрос.УстановитьПараметр("Пароль", ПарольВвод.Текст);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Сотрудник = Результат.Ссылка; // Получаем ссылку на сотрудника или пользователя
УстановитьТекущегоПользователяПриложения(Сотрудник);
Закрыть(); // Закрываем форму авторизации
ОткрытьФорму("ОбщаяФорма.РабочееМестоОператора");
Иначе
ПоказатьПредупреждение(, "Неверный логин или пароль!");
КонецЕсли;
Иначе
ПоказатьПредупреждение(, "Введите логин и пароль!");
КонецЕсли;
КонецПроцедуры
После идентификации сотрудника все операции в приложении (создание документов, выполнение заданий) привязываются именно к этому внутреннему "рабочему" пользователю, а не к общему техническому пользователю 1С, под которым было запущено приложение.
Завершение работы внутреннего пользователя:
Для "выхода" сотрудника из системы достаточно предусмотреть в приложении кнопку «Сменить пользователя» или «Выход». При её нажатии приложение просто сбрасывает данные текущего "рабочего" пользователя (например, очищает глобальную переменную ТекущийСотрудник) и снова отображает форму внутренней авторизации. При этом сам мобильный клиент 1С продолжает работать под общим техническим пользователем, и перезапуск приложения или очистка его данных не требуется.
// Пример функции смены пользователя в модуле приложения или общего модуля
Процедура СменитьПользователя() Экспорт
// Сбрасываем информацию о текущем сотруднике
Если ЕстьГлобальнаяПеременная("ТекущийСотрудник") Тогда
УстановитьГлобальнуюПеременную("ТекущийСотрудник", Неопределено);
КонецЕсли;
// Открываем форму внутренней авторизации
ОткрытьФорму("ОбщаяФорма.ФормаВнутреннейАвторизации");
КонецПроцедуры
В некоторых случаях, если нам нужно полностью перезапустить мобильный клиент 1С (например, для применения глобальных обновлений или сброса каких-либо платформенных настроек), можно использовать метод ЗавершитьРаботуСистемы(Ложь, Истина). Однако для обычной смены пользователя этот метод не нужен и может быть избыточным.
Помимо реализации собственной авторизации, существуют другие методы и вспомогательные действия, которые могут быть полезны в контексте работы на общих устройствах.
Динамическое изменение паролей (менее рекомендовано):
Один из предложенных "извращённых" вариантов заключается в программном изменении пароля пользователя в основной базе данных 1С, например, путём добавления "соли" (динамической части) к паролю, такой как текущий день недели. В этом случае, даже если пользователь нажмёт «Запомнить», при следующем входе система выдаст ошибку неверного пароля, если "соль" изменилась.
Примерная логика:
Недостатки:
Хотя в мобильной платформе доступен объект ПользователиИнформационнойБазы, который позволяет программно работать с пользователями ИБ, получение и безопасное манипулирование их паролями сопряжено с вышеупомянутыми рисками. Мы рекомендуем избегать данного подхода в пользу собственной авторизации.
Дисциплина пользователей и стандартный выход:
Стандартная функциональность мобильного приложения 1С предусматривает возможность выхода пользователя из системы через соответствующее меню (обычно "Имя пользователя" -> "Выход"). При этом список баз остаётся сохранённым, и следующему пользователю достаточно ввести свои учётные данные. Однако, если тумблер «Запомнить» был активирован, этот метод не поможет, так как система обойдёт экран авторизации. Следовательно, этот подход требует высокой дисциплины от сотрудников, что в реальных условиях на ТСД часто бывает трудно обеспечить.
Управление активными сеансами в основной базе:
В некоторых сценариях, особенно когда требуется "выкинуть" конкретного пользователя из системы (например, при утере ТСД или нештатной ситуации), нам нужно иметь возможность управлять активными сеансами 1С, установленными мобильными клиентами.
Хотя это не решает проблему тумблера «Запомнить», это важный элемент общего решения для ТСД:
Идентификация сеансов: В приложении можно сохранять уникальный идентификатор устройства (ИдентификаторУстройстваМобильногоПриложения) или идентификатор процесса сеанса 1С в основной базе. Это позволяет администратору или регламентному заданию однозначно определить, какой именно мобильный клиент инициировал сеанс.
Программное завершение сеансов: Используя консоль кластера 1С или методы для работы с сеансами (например, через МенеджерСеансов или прямой вызов веб-сервисов администратора кластера), можно завершить конкретный сеанс по его ID. Если мобильный клиент был связан с конкретным устройством, это позволяет "отключить" его, даже если он продолжает работать.
// Пример концепции получения ID сеанса (в контексте клиент-серверной работы)
// Этот код выполняется на сервере 1С, к которому подключается мобильный клиент
// В модуле сеанса или при старте системы
Перем мИдентификаторТекущегоСеанса Экспорт;
Процедура ПриНачалеСеанса()
мИдентификаторТекущегоСеанса = Сеанс.Идентификатор;
// Если необходимо, сохраняем этот идентификатор в общую базу данных,
// связывая его с ИдентификаторомУстройстваМобильногоПриложения
// и текущим пользователем (техническим или внутренним)
КонецПроцедуры
Это дополняет основные решения, позволяя иметь полный контроль над подключенными мобильными клиентами и их пользователями.
Таким образом, проблема с тумблером «Запомнить» в мобильной платформе 1С не имеет простого решения через отключение, но мы можем эффективно её обойти, реализовав собственную, более гибкую и контролируемую систему авторизации внутри мобильного приложения. Этот подход позволяет обеспечить безопасность, удобство смены пользователей на общих устройствах и необходимый уровень контроля для администраторов.