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

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

В практике разработчика 1С часто возникает задача интеграции нескольких информационных баз. Одной из наиболее типичных ситуаций является необходимость взаимодействия с системой ведения нормативно-справочной информации (MDM). Например, пользователю в текущей базе (например, «Бухгалтерия») нужно оперативно создать заявку на добавление нового контрагента в базе MDM, не переключаясь между окнами. В данной статье мы подробно разберем несколько способов реализации этой задачи: от классического COM-соединения до современных HTTP-сервисов.

Способ 1. Использование COM-соединения (V83.Application)

Если нам требуется не просто передать данные «под капотом», а именно визуально открыть форму обработки или документа в другой базе, мы можем использовать COM-объект V83.Application. Этот метод запускает полноценный сеанс второй базы, что позволяет взаимодействовать с ее интерфейсом.

Рассмотрим по шагам процесс установки соединения и вызова формы. Для начала проанализируем функцию установки связи, которая принимает параметры подключения (путь к базе, логин и пароль):


Функция УстановитьСОМСоединение(ПутьКБазе, Пользователь, Пароль) Экспорт
    Попытка
        // Для актуальных версий платформы используем V83.Application
        СОМ = Новый COMОбъект("V83.Application");
        
        // Формируем строку соединения для файлового варианта
        СтрокаСоединения = "File=""" + ПутьКБазе + """; Usr=""" + Пользователь + """; Pwd=""" + Пароль + """;";
        
        // Пытаемся подключиться
        Открыта = СОМ.Connect(СтрокаСоединения);
        Возврат СОМ;
    Исключение
        Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
КонецФункции

После того как объект соединения получен, мы можем обращаться к метаданным внешней базы. Например, чтобы открыть форму выбора документа или конкретную обработку, выполним следующий код:


Процедура ОткрытьФормуВоВнешнейБазе(ПараметрыСвязи)
    СОМ = УстановитьСОМСоединение(ПараметрыСвязи.Путь, ПараметрыСвязи.Логин, ПараметрыСвязи.Пароль);
    
    Если СОМ = Неопределено Тогда
        Возврат;
    КонецЕсли;

    // Обращаемся к менеджеру документов внешней базы
    МенеджерДокумента = СОМ.Документы.ЗаявкаНаНСИ;
    
    // Получаем форму и открываем её модально или в обычном режиме
    ФормаДокумента = МенеджерДокумента.ПолучитьФорму();
    ФормаДокумента.Открыть();
    
    // Не забываем обнулять COM-объект после завершения работы, чтобы освободить лицензию
    СОМ = "";
КонецПроцедуры

Важное примечание: Использование V83.Application требует наличия установленной платформы 1С на клиентской машине и потребляет дополнительную лицензию. Также стоит учитывать разрядность: если сервер 64-битный, а вы используете 32-битные библиотеки comcntr.dll, потребуется настройка в компонентах COM+.

Способ 2. Использование COMConnector для фоновой работы

Если ваша задача — создать заявку в MDM-системе без обязательного открытия окна перед глазами пользователя, лучше использовать V83.COMConnector. Он работает быстрее, так как не инициализирует графический интерфейс (UI).

Проанализируем ситуацию: пользователь нажимает кнопку «Отправить заявку», и система программно создает объект в другой базе. Это более профессиональный и стабильный подход для интеграции данных.


Процедура СоздатьЗаявкуВMDM(ДанныеЗаявки)
    Коннектор = Новый COMОбъект("V83.COMConnector");
    СтрокаСоединения = "Srvr=""ServerName"";Ref=""MDM_Base"";Usr=""Admin"";Pwd=""123"";";
    
    Попытка
        Соединение = Коннектор.Connect(СтрокаСоединения);
        
        // Создаем новый объект в базе MDM
        НоваяЗаявка = Соединение.Документы.ЗаявкаНаДобавление.СоздатьДокумент();
        НоваяЗаявка.Дата = ТекущаяДата();
        НоваяЗаявка.Наименование = ДанныеЗаявки.Наименование;
        НоваяЗаявка.Автор = Соединение.ПараметрыСеанса.ТекущийПользователь;
        
        НоваяЗаявка.Записать();
        
        Сообщить("Заявка успешно создана под номером: " + НоваяЗаявка.Номер);
    Исключение
        Сообщить("Ошибка при создании объекта через COM: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Способ 3. Запуск через командную строку (Параметр /C)

Выясним причину, по которой COM-соединение может не подходить. Иногда политики безопасности или разная разрядность систем мешают работе COM. В этом случае можно использовать метод ЗапуститьПриложение(). Мы можем передать параметры в запускаемую базу через ключ /C.

Рассмотрим алгоритм действий:

  1. В текущей базе формируем строку запуска 1С с указанием пути к базе и параметров.
  2. В целевой базе (MDM) в модуле управляемого приложения прописываем обработчик ПриНачалеРаботыСистемы.

Пример кода для запуска:


КомандаЗапуска = """C:\Program Files\1cv8\common\1cestart.exe"" ENTERPRISE /F ""D:\Bases\MDM"" /N ""User"" /P ""Password"" /C ""СоздатьЗаявку;Наименование=ООО Ромашка""";
ЗапуститьПриложение(КомандаЗапуска);

В целевой базе MDM проанализируем параметр ПараметрыЗапуска:


Процедура ПриНачалеРаботыСистемы()
    Если Найти(ПараметрыЗапуска, "СоздатьЗаявку") > 0 Тогда
        // Парсим параметры и открываем нужную обработку
        Обработка = Обработки.НормализацияНСИ.Создать();
        Форма = Обработка.ПолучитьФорму("Форма");
        Форма.Открыть();
    КонецЕсли;
КонецПроцедуры

Способ 4. HTTP-сервисы (Рекомендуемый современный стандарт)

Разберем по шагам наиболее надежный способ взаимодействия, который работает даже на Linux и через веб-браузер. Вместо того чтобы «открывать базу из базы», мы создаем HTTP-сервис в базе MDM.

Преимущества этого подхода:

Для реализации в базе MDM создается HTTP-сервис с шаблоном /create_request. В базе-источнике мы используем объект HTTPЗапрос. Посмотрим на пример кода отправки данных:


Процедура ОтправитьЧерезHTTP(Данные)
    Сервер = "mdm.yourcompany.ru";
    Соединение = Новый HTTPСоединение(Сервер, , "User", "Pass");
    
    Запрос = Новый HTTPЗапрос("/v1/create_request");
    
    // Формируем JSON с данными
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Данные);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Запрос.УстановитьТелоИзСтроки(СтрокаJSON);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        Сообщить("Данные успешно переданы в MDM");
    КонецЕсли;
КонецПроцедуры

Способ 5. Навигационные ссылки (e1cib)

Если база MDM опубликована на веб-сервере, вы можете использовать навигационные ссылки. Это самый простой способ «перебросить» пользователя к конкретному объекту или обработке. Мы формируем ссылку вида e1cib/data/Документ.Заявка?ref=ID и используем метод ПерейтиПоСсылке(). Это мгновенно откроет окно в браузере или тонком клиенте, если база уже запущена.

Выводы и рекомендации

Проанализировав все способы, можно сделать следующие выводы:

  1. Если нужно интерактивное открытие формы и обе базы на Windows — используйте V83.Application или командную строку с параметром /C.
  2. Если нужно программное создание объектов без участия пользователя — выбирайте V83.COMConnector.
  3. Для масштабируемых и современных систем (особенно если есть базы на Linux или облачные решения) — единственным верным решением будут HTTP-сервисы.

Выбор метода зависит от архитектуры вашей сети и требований к интерфейсу. Для задач MDM наиболее эффективным считается сочетание HTTP-сервиса для передачи данных и навигационных ссылок для быстрого перехода пользователя к созданному объекту.

← На главную