Открытие объекта в 1С 8.2 и 8.3 по ссылке в тонком клиенте.

Очень часто в работе приходится делать рассылку оповещений с указанием в письме ссылки на какой-либо объект. Веб клиент работает не так стабильно как хотелось бы, поэтому иногда от него приходится отказаться. В данном случае есть альтернативное решение.
Очень часто в работе приходится делать рассылку оповещений с указанием в письме ссылки на какой-либо объект. Веб клиент работает не так стабильно как хотелось бы, поэтому иногда от него приходится отказаться. В данном случае есть альтернативное решение.

Задача состоит из 2-х подзадач

  1. Открытие тонкого клиента 1С по ссылке.
  2. Открытие заданного объекта при старте системы на стороне 1С.

Открытие тонкого клиента 1С по ссылке.

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

Вариант 1, подходит для 8.2 и 8.3, требует в дальнейшем модификации конфигурации.
Для этого нужно зарегистрировать в операционной системе собственный протокол. Это делается с помощью файла реестра.

Текст файла:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTe1cb] "URL Protocol"="e1cb" @="URL:e1cb"
[HKEY_CLASSES_ROOTe1cbDefaultIcon]
@="C:\Program Files (x86)\1cv8\common\1cestart.exe,0"
[HKEY_CLASSES_ROOTe1cbshell]
[HKEY_CLASSES_ROOTe1cbshellopen]
[HKEY_CLASSES_ROOTe1cbshellopencommand]
@=""C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /S"ServerName:Port\Database_Name" /C"%1""

Запускаем с правами администратора и вносим изменения, заменив предварительно пути, адрес сервера, порт и имя базы.
Данный пример иллюстрирует соединение с базой в клиент-серверном варианте. Для файловой базы нужно использовать параметр /F»путь_до_каталога_с_файловой_базой» вместо /S.

Для большего удобства рекомендуется настроить доменную аутентификацию, чтобы пользователю не нужно было вводить логин и пароль.
Пример ссылки для данного варианта:
e1cb://e1cib/data/Документ.бит_ПроектДоговора?ref=80cc00505681538311e43a7255c2162a


Вариант 1, подходит только для 8.3, не требует в дальнейшем модификации конфигурации.

Текст файла реестра аналогичен за исключением последнего параметра.

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTe1cb] "URL Protocol"="e1cb" @="URL:e1cb"
[HKEY_CLASSES_ROOTe1cbDefaultIcon]
@="C:\Program Files (x86)\1cv8\common\1cestart.exe,0"
[HKEY_CLASSES_ROOTe1cbshell]
[HKEY_CLASSES_ROOTe1cbshellopen]
[HKEY_CLASSES_ROOTe1cbshellopencommand]
@=""C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /S"ServerName:Port\Database_Name" /URL "%1""

В этом случае ссылка на стороне 1С будет обработана автоматически, однако этот параметр появился только в 8.3

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

Открываем «Модуль управляемого приложения»

Находим функцию «ПриНачалеРаботыСистемы()» и в ее конец добавляем:

Попытка           
    Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
       ПерейтиПоНавигационнойСсылке(СтрЗаменить(ПараметрЗапуска, "e1cb://", ""));
    КонецЕсли;
Исключение
КонецПопытки;

Все, теперь при старте системы будет проверяться передаваемый параметр и открываться соответствующий объект.

9 Comments

  1. mikhailovaew

    а если база уже открыта, в ней работают, и тут пришло письмо со ссылкой, то что? будет открыт еще один экземпляр базы? хотелось бы, чтобы открылся объект по ссылке в уже открытом экземпляре

    Reply ↓
  2. Puk2

    т.е. при использовании данного метода можно сделать автоматический запуск только одной базы? К сожалению, нет прав админа, что бы проверить.

    Reply ↓
  3. AllexSoft

    Полезная штука, плюс! Хотя 1С вроде обещало что сделает такое на уровне платформы..

    Reply ↓
  4. OstHusky

    (2) Puk2, Для того, чтобы организовать запуск разных баз, для каждой нужно сделать по отдельному протоколу(например e1cb2, e1cb3, e1cb4), и соответственно отдельному файлику реестра. И в ссылке указывать протокол нужной базы.

    Reply ↓
  5. OstHusky

    (1) mikhailovaew, будет открыта отдельная база. Чтобы сделать открытие в существующей базе, я вижу единственный вариант — это делать свою внешнюю подключаемую компоненту, которая будет реализовывать на Си взаимодействие через механизмы разделения памяти операционной системы(мьютексы или именованные каналы) между запущенными процессами, что слишком трудозатратно по сравнению с полученным преимуществом.

    Reply ↓
  6. severnyj

    Вроде бы если сделать немного по-другому, то никакие пути к базам прописывать не надо, все открывается хорошо в уже открытом окне с базой 1с…

    http://infostart.ru/public/293871/

    Reply ↓
  7. newgluk

    как оформляете ссылку в тексте рассылки? у меня в письме просто текст (типа e1cib/data/Задача.ЗадачаИсполнителя?ref=94276cae8b4eeaf411e52a15958a1a5f) . если не трудно, покажите пример.

    Reply ↓
  8. OstHusky

    Ссылка должна начинаться на e1cb://, а так же письмо должно быть в формате HTML

    Reply ↓
  9. l4h

    (4)Есть два типа ссылок: внутренняя и внешняя, ту что описывает автор это внутренняя(в самой ссылке не указывается база данных) и есть внешняя она принимает вид: e1cb://filev/C/bases/Demo#e1cib/data/Документ.бит_ПроектДоговора?ref=80cc00505681538311e43a7255c2162a со всеми вытекающими.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *