Как открыть объект в другой базе 1С по ссылке без использования COM/OLE?

Программист 1С v8.3 (Обычные формы) Управленческий учет
← На главную

В процессе интеграции различных конфигураций 1С часто возникает необходимость оперативного перехода к объекту в другой информационной базе. Традиционно для этих целей использовались механизмы COM или OLE. Однако при работе баз на разных версиях платформы (например, переход с версии 8.3.10 на 8.3.20) или при использовании разных типов клиентов (обычные и управляемые формы) эти механизмы становятся нестабильными или вовсе перестают работать. В данной статье мы разберем, как организовать открытие документов и справочников в другой базе, используя возможности командной строки и навигационные ссылки.

Зачем отказываться от COM/OLE-механизмов?

Основная проблема COM-соединения заключается в его чувствительности к версии платформы: на сервере и клиенте версии должны совпадать с точностью до релиза. Кроме того, создание COM-объекта — это ресурсоемкая операция, которая требует времени на инициализацию. Если ваша задача — просто показать пользователю форму документа в целевой базе (например, в КА 2.4 из Альфа-Авто), использование внешнего запуска через командную строку является более надежным и быстрым способом.

Решение 1: Использование ключа командной строки /URL

Наиболее современный и эффективный способ — запуск целевой базы с параметром /URL. Этот ключ указывает платформе, какой именно объект нужно открыть сразу после авторизации. Рассмотрим структуру команды запуска:

Пример строки запуска:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "ServerName\BaseName" /URL "e1cib/data/Документ.РеализацияТоваровУслуг?ref=80cc0050568d6b1711e95b9eabf5385b"

Здесь важно правильно сформировать навигационную ссылку. Она состоит из типа объекта (метаданных) и уникального идентификатора (GUID).

Решение 2: Алгоритм формирования навигационной ссылки из GUID

Проблема заключается в том, что стандартное строковое представление GUID в 1С отличается от того, которое используется в навигационных ссылках (так называемый Navigator GUID). Чтобы ссылка сработала, байты идентификатора нужно переставить в определенном порядке. Проанализируем программный код для преобразования GUID в формат, пригодный для навигационной ссылки:


Процедура СформироватьПутьОбъекта(ТипОбъекта, ГуидОбъекта)
    // ТипОбъекта - строка, например "Документ.ЗаказПокупателя"
    // ГуидОбъекта - строка стандартного GUID (UUID)
    
    Если ПустаяСтрока(ТипОбъекта) Или ПустаяСтрока(ГуидОбъекта) Тогда
        Возврат;
    КонецЕсли;

    // Перестановка сегментов GUID для формата 1С e1cib
    НавигационныйГУИД = Сред(ГуидОбъекта, 20, 4) 
                      + Сред(ГуидОбъекта, 25, 12) 
                      + Сред(ГуидОбъекта, 15, 4) 
                      + Сред(ГуидОбъекта, 10, 4) 
                      + Сред(ГуидОбъекта, 1, 8);
                      
    ПутьОбъектаВИБ = "e1cib/data/" + ТипОбъекта + "?ref=" + НавигационныйГУИД;
    
    // Формируем команду запуска
    СтрокаЗапуска = "ENTERPRISE /S " + ИмяСервераИБазы + " /URL " + ПутьОбъектаВИБ;
    ЗапуститьПриложение(ПутьК1cestart + " " + СтрокаЗапуска);
КонецПроцедуры

Этот метод позволяет "пробросить" пользователя сразу в нужную форму. Если сеанс в целевой базе уже открыт, то при определенных настройках ОС (регистрация протокола e1c) объект может открыться в текущем окне, не создавая новый сеанс.

Решение 3: Использование внешнего файла и параметра /C

Если конфигурация в целевой базе не позволяет напрямую открывать объекты через /URL или требуется дополнительная логика обработки, можно использовать параметр /C (ПараметрЗапуска). Рассмотрим этот алгоритм:

  1. В базе-источнике формируем строку, содержащую тип и GUID объекта.
  2. Запускаем целевую базу с ключом /C "ТипОбъекта;GUID".
  3. В целевой базе в модуле управляемого приложения (процедура ПриНачалеРаботыСистемы) пишем код обработки параметра.

Код в целевой базе (Управляемые формы):


Процедура ПриНачалеРаботыСистемы(Отказ)
    Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
        // Допустим, мы передали "Справочник.Номенклатура;80cc0050..."
        ЧастиПараметра = СтрРазделить(ПараметрЗапуска, ";");
        ТипОбъекта = ЧастиПараметра[0];
        ГуидСтрокой = ЧастиПараметра[1];
        
        СсылкаНаОбъект = Справочники[ТипОбъекта].ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидСтрокой));
        ПоказатьЗначение(, СсылкаНаОбъект);
    КонецЕсли;
КонецПроцедуры

Адаптация решения для обычных форм (Alpha-Auto, УПП 1.3)

Если база-источник работает на обычных формах, вы можете столкнуться с трудностями при использовании методов, предназначенных для управляемого интерфейса. Например, функция РеквизитФормыВЗначение не будет работать. Рассмотрим, как программно извлечь вспомогательную обработку из макета и запустить её в обычном приложении:


Процедура ОткрытьВБазеИсточнике()
    // Получаем макет внешней обработки, которая умеет открывать ссылки
    ОбработкаМакет = ЭтотОбъект.ПолучитьМакет("ВспомогательнаяОбработка");
    ПутьКФайлу = КаталогВременныхФайлов() + "OpenObject.epf";
    ОбработкаМакет.Записать(ПутьКФайлу);
    
    // Формируем параметры запуска через /Exec
    ПараметрыЗапуска = "ENTERPRISE /S " + ПутьКБазе + " /Exec " + ПутьКФайлу + " /C " + ДанныеОбъекта;
    ЗапуститьПриложение(ПутьК1cestart + " " + ПараметрыЗапуска);
КонецПроцедуры

Важный нюанс: при использовании ЗапуститьПриложение программа может потребовать ввод логина и пароля. Чтобы этого избежать, добавьте в строку запуска параметры /N "ИмяПользователя" и /P "Пароль" или используйте ключ /WA+ для Windows-авторизации.

Особенности работы с HTTP и веб-клиентом

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

http://myserver/mybase/ru_RU/e1cib/data/Справочник.Контрагенты?ref=80cc0050...

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

Сравнительный анализ методов

Выясним причины, по которым следует выбрать тот или иной метод:

Подведем итог: Отказ от COM-соединения в пользу навигационных ссылок и параметров командной строки делает вашу систему более устойчивой к обновлениям платформы 1С и снижает нагрузку на клиентские рабочие станции. Рассмотрим внедрение этих методов как стандарт для интеграции современных решений 1С.

← На главную