Как программно открыть одну базу 1С из другой с автоматической авторизацией пользователя

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает необходимость обеспечить бесшовный переход пользователя из одной информационной базы в другую. Это может быть полезно при разделении учета на управленческий и регламентированный, при работе с архивами или в распределенных системах. Главная сложность здесь заключается не просто в запуске приложения, а в автоматической передаче учетных данных (логина и пароля), чтобы пользователю не приходилось вводить их повторно. Рассмотрим подробно, как реализовать этот функционал для различных типов клиентов 1С.

Способ 1. Использование параметров командной строки (Тонкий и Толстый клиент)

Для запуска исполняемого файла 1С с конкретными параметрами в платформе предусмотрены функции ЗапуститьПриложение() и КомандаСистемы(). Основное различие между ними заключается в том, что ЗапуститьПриложение() работает более гибко и позволяет не дожидаться завершения работы вызванной программы.

Разберем основные ключи командной строки, которые нам понадобятся:

  1. ENTERPRISE — запуск в режиме "1С:Предприятие".
  2. /S (для клиент-серверного варианта) — путь к базе в формате ИмяСервера\ИмяБазы.
  3. /F (для файлового варианта) — путь к каталогу базы.
  4. /N — имя пользователя (логин).
  5. /P — пароль пользователя.

Проанализируем пример кода, который формирует строку запуска динамически. Важно не прописывать путь к программе жестко (например, C:\Program Files\1cv8...), так как при обновлении платформы путь изменится. Используем функцию КаталогПрограммы().


// Определяем путь к текущему исполняемому файлу (тонкий клиент)
ПутьКЗапуску = КаталогПрограммы() + "1cv8c.exe";

// Формируем параметры подключения
Сервер = "Server1C";
ИмяБазы = "Trade_Base";
Логин = "Ivanov";
Пароль = "SuperPassword123";

// Важно: параметры, содержащие пробелы или спецсимволы, заключаем в кавычки
// Используем три кавычки для вставки одной кавычки внутрь строки 1С
СтрокаЗапуска = """" + ПутьКЗапуску + """" 
                + " ENTERPRISE /S " + Сервер + "\" + ИмяБазы 
                + " /N """ + Логин + """" 
                + " /P """ + Пароль + """";

ЗапуститьПриложение(СтрокаЗапуска);

Обратим внимание на важный нюанс: если в имени сервера или базы используются обратные косые черты, их иногда требуется экранировать (использовать \\ вместо \), особенно при работе в среде Linux или при передаче строки через промежуточные скрипты. В операционной системе Windows для ключа /S обычно достаточно одной наклонной черты.

Способ 2. Запуск базы в Веб-клиенте (через браузер)

Если ваши пользователи работают через веб-клиент, метод с запуском .exe файла не подойдет из-за ограничений безопасности браузера. В этом случае мы будем использовать формирование прямой URL-ссылки. Платформа 1С позволяет передавать параметры авторизации прямо в строке адреса.

Рассмотрим структуру такой ссылки:

http://[АдресСервера]/[ИмяПубликации]/ru_RU/?N=[Логин]&P=[Пароль]

Для реализации перехода в коде используем метод ПерейтиПоСсылке(). Этот метод универсален и работает как в тонком, так и в веб-клиенте.


Процедура ОткрытьБазуВБраузере(Команда)
    Адрес = "http://192.168.1.10/my_base";
    Логин = "Admin";
    Пароль = "12345";
    
    // Формируем итоговый URL
    ПолнаяСсылка = Адрес + "/ru_RU/?N=" + Логин + "&P=" + Пароль;
    
    // Выполняем переход
    ПерейтиПоСсылке(ПолнаяСсылка);
КонецПроцедуры

Важный момент: передача пароля в открытом виде в URL-строке является небезопасной, так как ссылка сохраняется в истории браузера. Используйте этот метод только в защищенных локальных сетях или при использовании временных паролей.

Способ 3. Использование специального протокола 1c://

Современные версии платформы регистрируют в операционной системе собственный протокол. Это позволяет запускать тонкий клиент, не зная точного пути к исполняемому файлу на диске пользователя. Система сама определит установленную версию 1С и запустит её.

Синтаксис выглядит следующим образом:


// Для клиент-серверной базы
ЗапуститьПриложение("1c://server/base_name /N""Логин"" /P""Пароль""");

// Для файловой базы
ЗапуститьПриложение("1c://file/C:/Bases/MyBase /N""Логин"" /P""Пароль""");

Выясним преимущества этого метода: он наиболее устойчив к обновлениям платформы и разрядности системы (x86/x64), так как делегирует поиск нужного 1cv8c.exe самой операционной системе.

Способ 4. Работа с файлами описания баз (.v8i)

Если параметров запуска слишком много (например, нужно указать дополнительные ключи /ClearCache или специфические настройки подключения), можно программно создать временный файл с расширением .v8i. Это текстовый файл формата ini, который понимает стартер 1С.

Пример структуры такого файла:

[Название базы]
Connect=Srvr="Server";Ref="Base";
ID=...
OrderInList=1
Folder=/

После создания такого файла на диске достаточно вызвать ЗапуститьПриложение("ПутьКФайлу.v8i"). Однако стоит помнить, что параметры пользователя (логин и пароль) в самом .v8i файле обычно не хранятся в открытом виде, поэтому для автоматического входа их все равно придется добавлять в строку запуска как ключи /N и /P.

Безопасность и альтернативные методы авторизации

Проанализируем ситуацию с безопасностью. Использование ключа /P передает пароль в открытом виде. Его можно увидеть в диспетчере задач в списке запущенных процессов. Если требования безопасности в вашей организации высоки, рассмотрите следующие альтернативы:

Типичные ошибки при реализации

Рассмотрим, почему код может не срабатывать:

  1. Пробелы в путях: Если в пути к exe или в логине есть пробел, вся подстрока обязательно должна быть в кавычках. В 1С это пишется как """Строка""".
  2. Права доступа: У пользователя, под которым работает сервер 1С (если запуск инициируется на сервере), может не быть прав на запуск исполняемых файлов или доступ к сетевым путям.
  3. Версии платформы: При использовании КаталогПрограммы() убедитесь, что на компьютере установлена именно та версия тонкого клиента, которая совместима с вызываемой базой.

Подводя итог, наиболее надежным и простым методом для Тонкого клиента является использование протокола 1c://, а для Веб-клиента — формирование URL с параметрами и метод ПерейтиПоСсылке().

← На главную