При интеграции 1С:Предприятия со сторонними сервисами (системами телефонии, CRM, мессенджерами или фоновыми утилитами мониторинга) часто возникает задача: при наступлении определенного события активировать сеанс 1С, вывести свернутое окно на передний план и сразу открыть конкретный документ, элемент справочника или отчет.
Рассмотрим основные способы реализации этого сценария в зависимости от того, запущена ли база в данный момент и какие механизмы интеграции используются.
Платформа 1С:Предприятие поддерживает работу с навигационными ссылками вида e1c:// и e1cib/. Каждому объекту информационной базы соответствует уникальная ссылка, которую можно получить программно с помощью функции ПолучитьНавигационнуюСсылку().
Разберем по шагам, как заставить операционную систему открывать 1С по такой ссылке из стороннего приложения:
СсылкаНаДокумент = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект);
// Пример возвращаемой строки: "e1cib/data/Документ.ЗаказКлиента?ref=80dc00155d010b0111e9b2c3d4e5f6a7"
e1c://, необходимо добавить параметры в системный реестр:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\e1c\shell]
[HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files\\1cv8\\common\\1cestart.exe\" /URL \"%1\""
1cv8c.exe) с ключом /URL "<Ссылка>", платформа проверяет активные процессы. Если сеанс с этой информационной базой уже запущен у текущего пользователя, второй экземпляр программы не открывается — платформа автоматически передает команду в работающий сеанс, разворачивает окно и открывает указанный объект.Если сеанс 1С гарантированно не запущен, а его требуется открыть «с нуля» на определенном объекте, используем запуск с ключом /C.
Проанализируем порядок действий:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /IBName "МояБаза" /N "Пользователь" /P "Пароль" /C "OpenDoc:80dc00155d010b0111e9b2c3d4e5f6a7"
ПриНачалеРаботыСистемы считываем переданные данные через глобальное свойство ПараметрыЗапуска:
Процедура ПриНачалеРаботыСистемы()
Если ЗначениеЗаполнено(ПараметрыЗапуска) Тогда
Если СтрНачинаетсяС(ПараметрыЗапуска, "OpenDoc:") Тогда
Идентификатор = СтрЗаменить(ПараметрыЗапуска, "OpenDoc:", "");
УникальныйИдентификатор = Новый УникальныйИдентификатор(Идентификатор);
Ссылка = Документы.ЗаказКлиента.ПолучитьСсылку(УникальныйИдентификатор);
ПараметрыФормы = Новый Структура("Ключ", Ссылка);
ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В современных версиях Windows действует системная защита от перехвата фокуса (Focus Stealing Prevention). Если сторонняя фоновая программа просто вызовет функцию SetForegroundWindow для дескриптора (HWND) окна 1С, окно может не развернуться, а кнопка приложения на панели задач начнет мигать оранжевым цветом.
Выясним, как обойти это ограничение из внешней утилиты (на C#, C++, PowerShell или AutoIt):
V8TopLevelFrame (или V8TopLevelFrameSDI). Поиск осуществляется через вызов FindWindow("V8TopLevelFrame", ...).ShowWindow(hWnd, SW_RESTORE).AttachThreadInput, после чего вызываются SetForegroundWindow и SetWindowPos с флагом вывода на самый верх (HWND_TOPMOST с последующим сбросом на HWND_NOTOPMOST).AllowSetForegroundWindow(ASFW_ANY) перед переключением фокуса.Если 1С уже запущена, а открывать новые процессы или периодически опрашивать диск через ПодключитьОбработчикОжидания() нерационально, применяется архитектура с внешней компонентой (Native API):
ВнешнееСобытие (ExternalEvent).
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "ExternalNotifier" И Событие = "OpenObject" Тогда
// Данные содержат навигационную ссылку e1cib/...
ПерейтиПоНавигационнойСсылке(Данные);
КонецЕсли;
КонецПроцедуры
Если в базе настроена «Система взаимодействия», наиболее простым и надежным решением является отправка push-сообщения конкретному пользователю от имени сервисного бота или через HTTP-сервис 1С.
Сообщение системы взаимодействия может содержать интерактивную навигационную ссылку на документ. При получении такого сообщения платформа автоматически выдает системное всплывающее уведомление операционной системы. При нажатии на уведомление окно 1С самостоятельно выходит на передний план и открывает прикрепленный объект.