1с получить ссылку на внешнюю обработку
Ежедневно работающие в 1С коллеги не дадут соврать, что часто сталкиваемся с ситуацией, когда необходимо из браузера или почты быстро открыть документ в 1С и не в браузере, а именно в тонком или толстом клиенте. Например, согласовываем какой-то документ и хотим уведомить подписанта о том, что необходимо поставить автограф в соответствующем бланке. Следовательно, подписывающему сотруднику отправляем письмо на почту в виде напоминания. Получатель открывает уведомление и видит, что все ждут, когда появится его подпись на согласованном документе. Сразу приходится открывать тонкий клиент 1С, искать этот документ, в котором нужно поставить галочку, ставить и закрывать 1С. Согласитесь, это очень неудобно и отнимает время, которого и так не хватает. Но хочу обрадовать читателей этой статьи, выход есть! Мы в компании используем собственно разработанную программу Управление IT-отделом 8 для решения задач клиентов. Зачастую программа находится в закрытом состоянии и дабы не столкнуться с ситуацией, описанной в примере, было принято решение облегчить процесс открывания объектов базы из электронной почты одним щелчком мыши. Как известно лень – это двигатель прогресса, а программисты люди ленивые и хотят жить проще. Поэтому перейдем к разбору и покажем, как мы открываем задания (тикеты) в тонком клиенте 1С, но не ищем их, когда приходит уведомление на почту, а щелкаем по на объект 1С.
Сразу оговорюсь, что данный способ открытия внешних ссылок объектов базы в тонком клиенте можно использовать только в конфигурациях, работающих на платформе 1С:Предприятие 8.3.. Это связано с тем, что только в этой версии поддерживается возможность работы с командной строкой. Ближе к делу, первым делом настроим саму программу, для это запускаем конфигурацию и переходим в раздел «Администрирование» - «Общие настройки» и раскроем подраздел «Публикация информационной базы». В данном подразделе доступны для заполнения два реквизита:
- Адрес в интернете – это адрес, который используется для формирования ссылок на объекты информационной базы, доступных через публикацию в сети интернет. Другими словами, в данном реквизите указывается адрес публикации базы на веб-сервере;
- Локальный адрес – это адрес, который используется для формирования ссылок на объекты информационной базы, доступных через публикацию в локальной сети.
Адрес файловой базы
Адрес серверной базы
Настройка Windows для открытия ссылок в тонком или толстом клиенте
Вариант реестрового файла для x86 программы.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c"
"URL Protocol"="e1c"
"EditFlags"=hex:02,00,00,00
[HKEY_CLASSES_ROOT\e1c\DefaultIcon]
@="C:\\Program Files (x86)\\1cv8\\common\\1ceunt.dll,17"
[HKEY_CLASSES_ROOT\e1c\shell] [HKEY_CLASSES_ROOT\e1c\shell\open]
[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\" /URL \"%1\""
Вариант реестрового файла для x64 программы.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c"
"URL Protocol"="e1c"
"EditFlags"=hex:02,00,00,00
[HKEY_CLASSES_ROOT\e1c\DefaultIcon]
@="C:\\Program Files\\1cv8\\common\\1ceunt.dll,17"
[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\""
Стоит отметить, перед добавлением данного файла в реестр Windows необходимо убедиться в том, что по указанному пути каталогов, находится исполняемый файл 1сestart.exe. После этого сохраняем как файл реестра. Следующий шаг, это добавление данного файла непосредственно в сам реестр Windows. Для этого запускаем редактор реестра от имени администратора, нажимаем кнопку «Файл» - «Импорт», выбираем созданный файл и нажимаем открыть (Готовые реестровый файл будет прикреплен к публикации для скачивания). В принципе настройка операционной системы Windows, да и всего механизма закончена. В завершении остается только оценить работу функционала. Спасибо за внимание, удачи и успехов.
ВНИМАНИЕ. Данный функционал будет доступен, начиная с версии 3.1.7.0.
Вообщем сабж. База опубликована на веб-сервере, делаем оповещение через почту о новых задачах. В тело письма хотелось бы добавить внешнюю ссылку на задачу. Проблема в том, что конструкция ПолучитьНавигационнуюСсылкуИнформационнойБазы() в клиент-сервере возвращает что-то вроде "e1c://server/rphost/имя_базы", а нужно "http://имя_сервера/имя_базы/локаль/". Прибить адрес гвоздями или завести константу не вариант, база не одна, да и права на константу не охота обновлять постоянно.
Вопрос в том, как ПолучитьНавигационнуюСсылкуИнформационнойБазы() будьто находимся на &ВебКлиент?
Есть встроенная форма получения навигационной ссылки с возможностью преобразовать ее во внешнюю, но я что-то такой формы в конфе не нашел, мб плохо искал, мб она вшита в само ядро.
Алексей Гаврилов
Добрый день!
Возможно-ли вообще такое:
При поступлении уведомления на почту, что-бы там была не просто ссылка на документ, а что-то типа гиперссылки, что-бы можно было нажать на нее и сразу перейти в программу к этому документу?
Мне нравится · · Отменить подписку на обновления публикации · 6 сентябрь в 15:04
2 пользователям это нравится
Дарья Колганова хороший вопрос, а что получается что почтовый клиент должен будет запускать клиент 1С?
7 сентябрь в 0:19 · Мне нравится
Александр Лебедев Надо чтобы запускался не клиент 1С а веб браузер с 1С это более реально. Именно так реализовано в документообороте Naudoc
7 сентябрь в 9:09 · Мне нравится
Алексей Гаврилов Попробую немного дополнить:
Вот так Приходит уведомление на почту:
Ссылка: e1cib/data/Справочник.ВнутренниеДокументы?ref=bbd1001fd05e0a3f11e1f361dab40c29
Если в программе нажать "Получить ссылку. " (не зависит от вида клиента):
e1cib/data/Справочник.ВнутренниеДокументы?ref=bbd1001fd05e0a3f11e1f361dab40c13
Необходимо, что-бы уведомление приходило в виде гиперссылки, как в последнем варианте
7 сентябрь в 9:24 · Отредактировано · Мне нравится
Алексей Гаврилов Да, совершенно верно Александр, что-бы запускался веб-браузер и открывалась опубликованная база
7 сентябрь в 9:28 · Мне нравится
Сергей Леконцев Делали такую доработку на проекте. Была создана константа "Адрес веб-сервера 1С", содержимым которой дополнялась ссылка. Получившееся значение добавлялось в тело уведомления вместо стандартной строки.
8 сентябрь в 15:48 · Мне нравится
Алексей Гаврилов Сергей, а можно чуть поподробней и можно ли это сделать используя бизнесс-процессы или обязательно надо вносить изменения в конфигуратор?
8 сентябрь в 16:11 · Мне нравится
Сергей Леконцев конфигуратор менять придется, т.к. корректируем стандартную обработку отправки уведомлений.
8 сентябрь в 16:21 · Мне нравится
Алексей Гаврилов а примерный код нельзя посмотреть?
8 сентябрь в 16:27 · Мне нравится
Алексей Гаврилов Спасибо большое!
8 сентябрь в 16:33 · Мне нравится
Алексей Гаврилов Все получилось, но возникла одна маленькая заминка: при открытии письма в Lotus Notes ссылка не отображается как гиперссылка из-за русских слов в теле ссылки.
14 сентябрь в 11:39 · Мне нравится
Сергей Леконцев А откуда у вас там русские слова оказались?
14 сентябрь в 13:55 · Мне нравится
Алексей Гаврилов Справочник.ВнутренниеДокументы вот это в составе ссылки
14 сентябрь в 14:05 · Мне нравится
Сергей Леконцев а. ну да, точно. Попробуйсте в самом лотусе создть различные варианты ссылок с русскими именами, может что-то получится "нащупать"
14 сентябрь в 14:12 · Мне нравится
Алексей Гаврилов есть там возможность принудительного создания ссылки вручную и тогда он вполне себе нормально начинает понимать эту ссылку, но как этот механизм работает и как его увязать с уведомлением что приходит на почту увы не знаю
14 сентябрь в 14:20 · Мне нравится
Валерий Цихоня Сергей, а подскажите пожалуйста, в какую процедуру модуля вносить указанные вами изменения?
3 октября в 15:16 · Мне нравится
Сергей Леконцев ОбщийМодуль.БизнесПроцессыИЗадачиВызовСервера
3 октября в 15:36 · Мне нравится
Валерий Цихоня А в какой процедуре или функции Вы делали изменения?
3 октября в 15:37 · Мне нравится
Сергей Леконцев Прошу прощения, невнимательно прочитал. СформироватьПредставлениеЗадачи(ЗадачаСтруктура). Там видимо в последних релизах код процедуры немного изменился, поэтому предыдущий код нужно немного подработать напильником
3 октября в 15:47 · Мне нравится
Валерий Цихоня А можно как-то сделать так, чтобы не открывался новый сеанс 1С в веб-браузере при переходе по ссылке, а просто новое окно открывалось?
Вариант 1: ОкноКлиентскогоПриложения (ClientApplicationWindow)
ПолучитьНавигационнуюСсылку (GetURL)
Синтаксис:
Код 1C v 8.х
Возвращаемое значение:
Тип: Строка.
Описание: Получает навигационную ссылку в формате 1С:Предприятия на текущую форму.
Доступность: Тонкий клиент, веб-клиент, толстый клиент, внешнее соединение.
Вариант 2: Глобальный контекст (Global context)
ПолучитьНавигационнуюСсылку (GetURL)
Синтаксис:
Код 1C v 8.х
Параметры: (обязательный)
Тип: Ссылка на объект информационной базы. Ссылка на объект. (необязательный)
Тип: Строка. Имя реквизита объекта или ресурса Регистра сведений, для которого нужно выяснить ссылку. Если это реквизит табличной части объекта, то параметр указывается как ., то есть с разделителем "." (точка).
(необязательный)
Тип: Число. Индекс строки в табличной части, в том случае если объект является реквизитом табличной части. Первая строка имеет индекс равный 0.
Возвращаемое значение: Тип: Строка.
Описание: Получает текст ссылки на объект информационной базы или его реквизит в формате 1С:Предприятия.
В первом случае принимает в качестве параметра ссылку на объект (это может быть как ссылка, так и ключ записи регистра сведений). Объектом могут быть: справочник, документ, ключ записи регистра сведений, бизнес процессы, задачи.
Во втором, в качестве параметров принимает ключ объекта (это может быть как ссылка, так и ключ записи регистра сведений) и имя реквизита (ресурса). Если нужно получить ссылку на реквизит табличной части, перед именем реквизита необходимо добавить имя табличной части и точку ".".
Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание: Выполняет обращение к серверу только при получении ссылки на реквизит. При получении ссылки на объект информационной базы запрос на сервер не выполняется.
Код 1C v 8.2 УП
Получить навигационную ссылку для константы?
Вопрос: В конфигурации есть константа с типом ХранилищеЗначения для хранения изображения. Пытаюсь реализовать Загрузку и Выгрузку изображения: СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Константы.Логотип.Получить());
где СсылкаНаКартинку - реквизит формы с типом строка, а на форме есть элемент, у которого путь к данным = СсылкаНаКартинку
Возможно ли реализовать отображение картинки таким образом, или стоит хранить картинку где-либо еще?
Ответ:
Навигационную ссылку на константу получить не получится(
Получится только так:
Код 1C v 8.2 УП
т.е. в процедуру ПриСозданииНаСервере поместить картинку во временное хранилище и она там сидит пока закроете форму
Есть форма списка справочника "Сотрудники".
В нем есть реквизит "Фото", который имеет тип "СправочникСсылка.ХранилищеДополнительнойИнформации" (справочник "ХранилищеДополнительнойИнформации" по структуре полностью совпадает анологичным справочником в 1С 8.1).
В реквизиты формы списка добавил "АдресКартинки" тип "строка", в элементы добавил поле "Картинка" (вид - поле картинки) с путем к данным "АдресКартинки". Как вывести Картинку?
Ответ:
Код 1C v 8.2 УП
"Хранилище" - это "стандартный" реквизит справочника "ХранилищеДополнительнойИнформации".
Имеется регистр сведений с именем "Изображения" следующей структуры:
Измерения:
- ИдИзображения (тип - уникальный идентификатор);
Реквизиты:
- Изображение (тип - ХранилищеЗначений)
Реализовать возможность записи изображений в него, проблемы не составило. А застрял на получении навигационной ссылки на нужную запись регистра?
Ответ - Для регистра сведений первым параметром должен быть ключ записи, а не ссылка на объект.
Т.е. если есть регистр сведений ХранилищеКартинок с изменением Ном (тип справочник Ном) и ресурс Картинка (тип хранилище значений) - код для получения навигационной ссылки должен быть примерно таким:
Код 1C v 8.2 УП
Похожие FAQ
Еще в этой же категории
Полнотекстовый поиск в 1С (что это и пример использования) 23
Полнотекстовый поиск - позволит найти текстовую информацию, размещенную практически в любом месте используемой конфигурации. При этом искать нужные данные можно либо по всей конфигурации в целом, либо сузив область поиска до нескольких объектов Формат, функция форматирования значений 21
//Функция формирует удобное для чтения представление значений. // Примеры форматирования чисел ЗначФормат = Формат(123456.789, " ЧЦ=10; ЧДЦ=2" ); // ЗначФормат = " 123 456,79" ЗначФормат = Формат(123456.789, " ЧГ=0; ЧДЦ=2" ); // Знач Обработчики событий при записи объектов. Зачем и что за чем? 12
Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа. Именно такое сложное чувство непонимания УстановитьСсылкуНового 11
Установить ссылку нового это специальный механизм программиста, который позволяет присваивать новому объекту нужную ссылку. В основном это задача обмена, во многих типовых обменах используется синхронизация по UID объекта. Рассмотрим этот метод на к МоментВремени, получение остатков до и после проведения 9
" Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя дату и ССЫЛКУ НА ДОКУМЕНТ) В 7.7 было понятие ПозицияДокумента, а в 8.x Момент времени Для получения Остатков, Движений: М Посмотреть все в категории Встроенные Функции
Для программного открытия внешней обработки в 1С нужно знать адрес ее файла. Зная его, можно либо открыть форму обработки, либо получить объект обработки для проведения с ним дальнейших действий (например, для вызова экспортных функций из модуля объекта).
Открытие формы внешней обработки
Для программного открытия формы внешней обработки в 1С используется функция ПолучитьФорму() объекта ВнешниеОбработки. Функция имеет несколько параметров. Рассмотрим простое открытие основной формы обработки:
//В переменной АдресФайла находится полный путь к файлу внешней обработки
Форма = ВнешниеОбработки . ПолучитьФорму ( АдресФайла ) ;
Форма . Открыть ( ) ;
Для открытия неосновной формы внешней обработки необходимо указать ее имя.
//В переменной АдресФайла находится полный путь к файлу внешней обработки
Форма = ВнешниеОбработки . ПолучитьФорму ( АдресФайла , "НеосновнаяФорма" ) ;
Форма . Открыть ( ) ;
Открытие внешней обработки как объекта
Для того чтобы получить внешнюю обработку как объект используется функция Создать() объекта ВнешниеОбработки.
//В переменной АдресФайла находится полный путь к файлу внешней обработки
ОбъектОбработки = ВнешниеОбработки . Создать ( АдресФайла ) ;
По умолчанию все обработки открываются в безопасном режиме. Чтобы его отключить, используются следующие параметры:
//В переменной АдресФайла находится полный путь к файлу внешней обработки
ОбъектОбработки = ВнешниеОбработки . Создать ( АдресФайла , Ложь ) ;
Внешняя обработка или печатная форма сохранена в информационной базе
Во многих конфигурациях существует возможность сохранять внешние печатные формы и обработки непосредственно в информационной базе. Для этого используется справочник ВнешниеОбработки. Сама внешняя обработка хранится в виде двоичных данных либо в реквизите ХранилищеВнешнейОбработки, либо в табличной части Принадлежность в реквизите ХранилищеВнешнейОбработки.
Для открытия внешней обработки нужно:
- Получить ее из хранилища.
- Сохранить файл с обработкой на диск.
- Открыть форму или получить объект обработки.
- Если мы имеем дело с внешней печатной формой, то можно заполнить стандартный реквизит СсылкаНаОбъект и вызвать экспортную функцию Печать.
//В переменной СпрСсылка находится ссылка на элемент справочника ВнешниеОбработки
ДвДанные = СпрСсылка . ХранилищеВнешнейОбработки . Получить ( ) ;
АдресФайла = ПолучитьИмяВременногоФайла ( ) ;
ДвДанные . Записать ( АдресФайла ) ;
ОбъектОбработки = ВнешниеОбработки . Создать ( АдресФайла , Ложь ) ;
//Для внешней печатной формы. СсылкаНаОбъект содержит ссылку на элемент, которому принадлежит печатная форма
ОбъектОбработки . СсылкаНаОбъект = СсылкаНаОбъект ;
ТабДок = ОбъектОбработки . Печать ( ) ;
Добавить комментарий Отменить ответ
Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.
Пытаюсь получить ссылку на элемент в справочнике Внешние обработки при открытии формы. Пока остановился только на варианте по чтению комментария, в который поместил имя обработки в метаданных. Может быть, есть типовой вариант без этого велосипеда?
Как передать в форму УникальныйИдентификатор от элемента справочника Внешние обработки? Покажи пример, пожалуйста. Я не нашёл.
ОК. А как получить этот гуид в открытой форме внешней обработки? Она запускается из временного файла, а потом этот файл удаляется. Как в форме открытой обработки увидеть этот гуид?
У меня есть обработка с табличной частью, в которой хранятся служебные настройки для её функционирования. У меня уже реализована возможность сохранения этой таблицы в настройках пользователя при включенном режиме сохранения значений формы. База крутится в клиент-серверном режиме, поэтому я не нашёл способа как сохранить эти настройки для других пользователей. Заполнять для каждого пользователя эту таблицу неудобно. Поэтому сделал служебный регистр с измерением Внешняя обработка и ресурсом Настройки (Хранилище значений). Возможно, проще добавить подобный реквизит в справочнике Внешние обработки и не париться ))
Поздравляю с изобретением велосипеда, для этого в конфигурации даже справочник специальный есть. Который и называется "Сохраненные настройки"
Пробовал. "Сохраненные настройки"-это регистр сведений, в котором нет ссылки на конкретную обработку из справочника "Внешние обработки".
Фокус в том, что мне надо сохранять отдельный настройки для каждого пользователя. Мне надо сохранять одинаковую настройку для всех пользователей по конкретной внешней обработке. Но при этом очень неудобно сидеть и множить записи руками от одного пользователя другому. PS. Я и сам готов посмеяться после того, как найду типовой велосипед по этим требованиям или изобрету свой при отсутствии оного.
Ну, поскольку ты сделал свой регистр хранения настроек, то почему бы там не сделать измерение Пользователь? При сохранении настроек обработки спрашивать, сохранять эти настройки для данного конкретного пользователя, или для всех. Если для всех, то не заполнять это измерение. При открытии обработки и поиске настроек любым пользователем уже смотреть на значение этого измерения. Заполнено, смотреть, для этого пользователя или нет, не заполнено - читать всегда. Ничего сложного.
Ребята, спасибо за советы. Получилось записать нужную настройку в регистр. Сабж оказался невостребованным.
Вопрос на засыпку - если зарегистрировать две копии вашей обработки, они будут понимать что у них должны быть уникальные настройки?
Читайте также: