Открытие объекта в 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 не будет опубликован. Обязательные поля помечены *