Генерируем ВнешнееСобытие из внешнего приложения/скрипта web запросом

09.06.15

Разработка - Разработка внешних компонент

Простая внешняя компонента, которая позволяет генерировать внешние события в 1С:Предприятие из внешнего приложения/скрипта web запросом.

Скачать файлы

Наименование Файл Версия Размер
AddInNative.zip
.zip 389,70Kb
63
.zip 1.0.1 389,70Kb 63 Скачать

Описание
Компонента создана по технологии Native API и представляет собой web сервер, который принимает GET запросы и вызывает соответствующие функции платформы.
В качестве основы использовались статья A Simple Webserver in C++ for Windows, а также шаблон внешней компоненты с диска ИТС.
В компоненте реализован вызов следующих функции интерфейса IaddInDefBase:

    • ExternalEvent
    • CleanEventBuffer
    • GetEventBufferDepth
    • SetEventBufferDepth


С описанием вышеперечисленных функций можно ознакомиться здесь.

Поддерживаемые ОС

  • Linux x32, x64 - толстый клиент, тонкий клиент. 
  • Windows x32, x64 - толстый клиент, тонкий клиент, веб-клиент (Internet Explorer).

Примерный алгоритм использования


    • В 1С:Предприятие создается экземпляр компоненты
    • Во внешнее приложение/скрипт передаются порт прослушивания, ключ и ip адрес, если приложение расположено на другом сетевом хосте.
    • Из внешнего приложения/скрипта выполняются соответствующие веб-запросы.

 

Описание интерфейса компоненты

Создание экземпляра компоненты
Имя класса для создания объекта компоненты – WebExtEvent.

Пример:
КомпонентВнСоб = Новый ("AddIn.MyComp.WebExtEvent");
В процессе создания компоненты запускается web сервер, который слушает http запросы. Порт для прослушивания выбирается автоматически. После создания компоненты он доступен через свойство Порт. Также, во время создания экземпляра формируется случайный ключ, значение которого необходимо использовать как параметр при выполнении запросов. Ключ доступен через одноименное свойство.

Свойства

Порт – порт прослушивания веб-сервера. Формируется автоматически при создании экземпляра компоненты.
Ключ – строка, значение которой используется как параметр в веб запросах. Если значение параметра key в запросе и значение свойства Ключ не совпадают – соответствующая функция не будет выполнена. Может быть изменено в процессе работы.

Методы
Все методы возвращают результат в виде plain текста. Доступ к результатам можно получить через свойство Content.

ExternalEvent – Создает новое внешнее событие и помещает его в буфер.
Параметры
key – ключ, значение должно совпадать со значением свойства Ключ.
source –  источник события. Если параметр не указан, будет передана пустая строка.
message – сообщение. Если параметр не указан, будет передана пустая строка.
data – данные. Если папаметр не указан, будет передана пустая строка.
Возвращаемое значение
“true”, если запрос выполнен успешно, иначе – “false”.
Пример:
http://yourhost:yourport/ExternalEvent?key=yourkey&source=yoursource&message=yourmessage&data=yourdata


CleanEventBuffer – очищает буфер событий.
Параметры
key – ключ, значение должно совпадать со значением свойства Ключ.
Возвращаемое значение
“true”, если запрос выполнен успешно, иначе – “false”.
Пример:
http://yourhost:yourport/CleanEventBuffer?key=yourkey


GetEventBufferDepth – возвращает размер буфера сообщений
Параметры
key – ключ, значение должно совпадать со значением свойства Ключ.
Возвращаемое значение
Количество событий, которое может быть помещено в буфер событий. При ошибке возвращает 0.
Пример:
http://yourhost:yourport/GetEventBufferDepth?key=yourkey


SetEventBufferDepth – устанавливает размер буфера событий.
Параметры
key – ключ, значение должно совпадать со значением свойства Ключ.
depth – новый размер буфера событий. Строка, представляющая целое число.
Возвращаемое значение
“true”, если запрос выполнен успешно, иначе – “false”.
Пример:
http://yourhost:yourport/SetEventBufferDepth?key=yourkey&depth=yourdepth

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52100    34    69    

43

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26243    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44974    117    64    

60

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35078    104    123    

111

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

Разработка внешних компонент Платформа 1С v8.3 Платные (руб)

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    53999    35    14    

68

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30839    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

Разработка внешних компонент Платформа 1С v8.3 Бесплатно (free)

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    4039    starik-2005    28    

52

Внешние компоненты 1С и язык C++

Разработка внешних компонент Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    4778    starik-2005    32    

39
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. mdSerg 02.02.15 17:54 Сейчас в теме
Т.е. чтобы обратиться из внешнего приложения, надо сначала запустить 1С , которая вызовет эту компоненту?
Не понял смысла компоненты - если надо запускать 1С?
Что мешает напрямую обратиться к веб-сервису 1С?
Приведите пример использования, пожалуйста.
2. Kabz 77 03.02.15 00:13 Сейчас в теме
Я думаю смысл использование дерганье тонкого ,веб клиента (формы) для передачи данных , с веб сервиса ты данные на форму просто так не передать.
3. blackhole321 1303 03.02.15 09:23 Сейчас в теме
Kabz (2)
Да, именно так.
MdSerg (1)
В качестве примера могу привести библиотеку "Звонки из Lync" http://infostart.ru/public/322875/. В ней взаимодействие с Lync реализовано на PowerShell. И все было бы хорошо, однако необходимо передавать информацию о звонке в клиент 1С:Предприятие. Можно использовать обработчик ожидания и периодически проверять наличие звонков, а можно при наступлении звонка вызывать ВнешнееСобытие, написав примерно следующий код:
Invoke-WebRequest -Uri 'http://localhost:yourport/ExternalEvent?key=yourkey&source=yoursource&message=yourmessage' и обработать его в клиенте.
В общем, область применения примерно такая же как и для внешних компонент с той лишь разницей, что это можно делать из внешнего скрипта/приложения.
47. koks17v 10 27.07.22 14:32 Сейчас в теме
(3) Добрый день!
Очень интересует ваша разработка "Звонки из Lync"
http://infostart.ru/public/322875/

Напишите, пжл, мне в личку (у Вас закрыта)
4. mdSerg 08.11.15 21:01 Сейчас в теме
Т.е. взаимодействие непосредственно с клиентом 1С, а не с сервером? (это полезно)
ВЕБ-Сервер д.б. установлен на клиентском компьютере?
5. blackhole321 1303 09.11.15 12:34 Сейчас в теме
(4) mdSerg,
Добрый день.
Да, с клиентом 1С.
Веб-сервер - это и есть внешняя компонента. Устанавливается на клиенте штатным образом.
6. dablack 19.05.16 00:01 Сейчас в теме
Спасибо автору, вроде то, что надо, но немного насторожил момент, что адрес и ключ присваиваются автоматически при запуске.
А нет возможности их задать руками?
Мне необходимо организовать, что то вроде сервера печати. С мобильных приложений поступает задание на печать документа с таким то идентификатором.
И в случае с автоматическим назначением портов мобильному приложению придется перед каждым заданием на печать запрашивать текущий порт и ключ у веб-сервиса сервера 1С например (вдруг после прошлого задания на печать клиент 1с с запущенной ВК перезапустился....)
А если порт всегда один и тот же, то я бы смог сразу из мобильного приложения отправлять запрос на нужный ip:port..
В любом случае после долгого безрезультатного поиска какого нибудь мини веб-сервера который работал сам по себе в виде службы и в который можно было бы отправлять запросы POST запросы с двоичными данными и чтобы он их отправлял на печать на нужный принтер, Ваш продукт очень даже пригодится. Спасибо!
7. blackhole321 1303 19.05.16 16:49 Сейчас в теме
(6) dablack,
Ключ можно задать руками. Порт только для чтения т.к. он выбирается динамически из списка свободных tcp портов.
Я правильно понимаю, что Вы хотите отправлять запросы на печать клиенту 1С на компьютере пользователя?
8. dablack 19.05.16 18:27 Сейчас в теме
Да, все верно, именно так.
9. blackhole321 1303 19.05.16 18:47 Сейчас в теме
(8) dablack,
Ну Вам все равно необходимо каким-то образом получать список доступных хостов, с которых можно производить печать. В таком случае можно при старте передавать информацию о хосте/порте/ключе на сервер 1С и периодически обновлять эту информацию. Мобильное устройство, считав информацию использует ее до момента возникновения ошибки, при попытке отправить запрос. При возникновении ошибки информация о доступных хостах/портах/ключах считывается заново.
10. dablack 19.05.16 19:07 Сейчас в теме
Все таки мне гораздо удобнее было бы работать со статическим портом.
Файл скачал, но прошу прощения, а вы исходниками не поделитесь? Я думаю сам смогу разобраться даже со знаниями в С++ близкими к нулю где проставить порт. А то помимо печати есть еще мысли где я смогу применить данную компоненту и опять же порт очень хотелось бы статический... В любом случае спасибо!
11. dablack 04.10.16 20:58 Сейчас в теме
Насколько реально сделать так чтобы ExternalEvent возвращал не просто True/False а нечто другое (результат работы какой то либо функции) ?
12. blackhole321 1303 05.10.16 18:49 Сейчас в теме
(11) dablack, Эта функция помещает событие в очередь, вызывая одноименную функцию платформы. Функция платформы возвращает тип Boolean, где возвращаемое значение - true, если событие добавлено в очередь и false, если произошла какая либо ошибка (см. описание интерфейса по ссылке в публикации). Соответственно получить какие-либо значения результатов вряд ли возможно. Для выполнения каких-либо действий на сервере 1С предприятие с последующим возвратом значений etc., Вы можете использовать web-сервисы.
Если не секрет, чем вызвана необходимость вызывать исполннение кода с последующим возвратом результатов именно на клиенте?
13. dablack 10.10.16 20:56 Сейчас в теме
(12) То что в данный момент возвращает только boolean это я знаю и этим пользуюсь. Не секрет, вариантов очень много для чего есть необходимость такого прямого GET запроса и получения ответа. Например, складские работники перемещаются по складу с терминалами и сканируют шк адреса ячеек, шк непосредственно товара и в случае (как сейчас и есть) обращения к http сервисам базы, на каждый "пик" проходит аутентификация, инициализация модуля сеансов и т.д. а только после всего это возвращаются нужные данные. Т.е. достаточно большие накладные расходы. Если бы ваша компонента умела возвращать не только true/false то для меня бы это была отличная альтернатива - обращаться к постоянно "взведенному" веб серверу. Да конечно вроде в 8.3.9. реализован механизм повторного использования сессии, но попробовать на тесте еще не успел, да и не очень пока хочется продакш базу переводить на свежую платформу из-за пары фичь.
p.s. очень не хватает все таки возможности задать порт руками) приходиться лишний http запрос делать на получение текущего порта...
14. blackhole321 1303 11.10.16 21:24 Сейчас в теме
(13) dablack, Ну если использование штатных http сервисов категорически не устраивает - остается написать их самостоятельно :)

1. Создайте насервере 1С тестовую информационную базу
2. Добавьте в нее общий модуль, с возможностью доступа из внешнего соединения
3. Добавьте в модуль следующий код:


Функция МойМетод1() Экспорт
	Возврат "Вызов метода МойМетод1";
КонецФункции

Функция МойМетод2() Экспорт
	Возврат "Вызов метода МойМетод2";
КонецФункции

Функция МойМетод3() Экспорт
	Возврат "Вызов метода МойМетод3";
КонецФункции
Показать


4. Зарегистрируйте COM компонент, если он не был зарегистрирован ранее
5. Если Вы используете 64 битную систему - создайте для COM объекта COM+ приложение

6. Создайте скрипт PowerShell примерно следующего содержания:

# Инициализируем подключение к 1С

$Коннектор1С = New-Object -ComObject V83.ComConnector

$СтрокаПодключения =  "srvr='ИмяМоегоСервера'; ref='ИмяМоейБазы';"
$Соединение1С = $Коннектор1С.Connect($СтрокаПодключения);
$МойОбщийМодуль = [System.__ComObject].InvokeMember("МойОбщийМодуль",[System.Reflection.BindingFlags]::GetProperty,$null,$Соединение1С,$null)

# Инициализируем web-сервер

$ВебСлушатель = New-Object System.Net.HttpListener

$ВебСлушатель.Prefixes.Add("http://localhost:8080/Method1/")
$ВебСлушатель.Prefixes.Add("http://localhost:8080/Method2/")
$ВебСлушатель.Prefixes.Add("http://localhost:8080/Method3/")

$ВебСлушатель.AuthenticationSchemes = 'Anonymous'    
$ВебСлушатель.Start() 

# Получаем и обрабатываем web-запросы

while ($ВебСлушатель.IsListening)
{
    $Контекст = $ВебСлушатель.GetContext()
	$UrlЗапроса = $Контекст.Request.Url
	$Ответ = $Контекст.Response
    
    $ИмяМетода1С = ""

    if ($UrlЗапроса.AbsoluteUri.EndsWith("Method1", [System.StringComparison]::InvariantCultureIgnoreCase))
    {
        $ИмяМетода1С = "МойМетод1" 
    }
    elseif ($UrlЗапроса.AbsoluteUri.EndsWith("Method2", [System.StringComparison]::InvariantCultureIgnoreCase))
    {
        $ИмяМетода1С = "МойМетод2"
    }
    elseif ($UrlЗапроса.AbsoluteUri.EndsWith("Method3", [System.StringComparison]::InvariantCultureIgnoreCase))
    {
        $ИмяМетода1С = "МойМетод3"
    }

    $Результаты = [System.__ComObject].InvokeMember($ИмяМетода1С,[System.Reflection.BindingFlags]::InvokeMethod,$null,$МойОбщийМодуль, $null)
    
    # Возвращаем результат
    $Буфер = [System.Text.Encoding]::UTF8.GetBytes($Результаты)
	$Ответ.ContentLength64 = $Буфер.Length
	$Ответ.AppendHeader("Content-Type","text;charset=utf-8")
	$Ответ.OutputStream.Write($Буфер, 0, $Буфер.Length)
    $Ответ.Close()
 }

Показать


7. Замените в строке подключения значения базы и сервера на свои. При необходимости добавьте имя пользователя и пароль.
8. Сохраните скрипт и запустите его.
9. В браузере в строку адреса введите:
http://localhost:8080/Method1
http://localhost:8080/Method2
http://localhost:8080/Method3
Соответственно должны будут появиться результаты вызова соответствующих функций общего модуля.

Если устраивает производительность - добавляете многопоточность, передачу параметров и обработку ошибок
mi1man; artbear; +2 Ответить
15. soal 12.10.17 12:29 Сейчас в теме
Очень понравилась разработка. Стабильно работает на винде. Только не хватает задания конкретного порта для регистрации. Комп конечного пользователя за роутером, конкретный порт можно пробросить, а пробрасывать все порты на роутер - открыть широко дверь всем с инета - не айс.
16. blackhole321 1303 12.10.17 12:51 Сейчас в теме
(15) Это некий компромисс, т.к. порт может быть занят другим приложением/сервисом. Как пример - Вы запустили несколько экземпляров клиента 1С. Такого рода проблему можно решить написав что-то типа reverse proxy. После загрузки компонента, происходит регистрация на proxy и отправка ID клиенту, соответственно наружу выставляется один порт. Клиент посылает запросы с указанием ID на один порт, прокси пересылает данные по нужному адресу/порту в соответствии с ID.
18. soal 12.10.17 17:24 Сейчас в теме
(16) Порт может быть занят - вернуть ошибку "порт занят", или еще лучший вариант - если порт занят, запустить на свободном порту, а в коде можно будет проверить равен ли фактический порт заданному и уже решать в алгоритме, что дальше делать - отключаться или продолжать работу. В моем случае нужно будет отключиться и сообщить клиенту чтобы он проверил/освободил порт, либо пробросил новый порт (на который удалось подключиться) и указал его в настройках.
(17) reverse proxy - это уже перебор. Клиент с ноутбуком сидит, через wi-fi роутер. Поднимать ему на ноутбуке еще прокси чтобы ретранслировать запросы самому на себя по динамическому порту - это уже похоже на извращения )
Реально "предпочитаемый порт" добавит функциональной применимости Вашей компоненте в разы. Простой пример "проверь свои задачи". Вместо обработчика ожидания, который сейчас дергает мне сервер раз в минуту на предмет "а не появилось ли новых задач", можно было бы "по факту" оповестить клиента и "заставить его" открыть форму задачи сразу после ее записи в базе. Проблема с теми, кто сидит дома через веб-сервис. Сюда же еще проблема с тем, что работает только в MSIE, у нас большинство пользуют firefox и chrome, но это хотя бы решается установкой тонкого клиента.
19. blackhole321 1303 12.10.17 21:40 Сейчас в теме
(18)
Несомненно, отчасти Вы правы, но лишь отчасти. Ваш подход применим для частного случая, когда запущен один экземпляра клиента 1С.
В случае если пользователь запустит несколько экземпляров или за роутером окажется несколько компьютеров, Ваш подход заставит пользователя совершить кучу действий. И хорошо, если пользователь достаточно квалифицирован, чтобы проделать все то, что Вы описали. И тут уже вопрос вкуса, что более правильно, заставлять пользователя иногда перенаправлять и сравнивать порты или один раз произвести настройку, скажем запуска скрипта при старте компьютера, пробросить порт на роутере и установить тонкого клиента.
Относительно работы только в IE - нельзя об'ять необ'ятное :). Запустить веб-сервер в отдельном потоке внутри компоненты 1С, в браузере, чтобы работало стабильно, требует некоторых усилий :) Скажем закрытие слушателя с последующим открытием на другом порту приводит к исключению, хотя в консольном приложении или обычной библиотеке все работает нормально.
Так,что как я написал выше - это некий компромисс
20. soal 13.10.17 12:57 Сейчас в теме
(19) Запускать на заданном порту не при создании компоненты, а командой StarsServ(port), получающей порт в параметре, если порт занят (отсутствует в списке свободных портов), запустить на свободном порту, а в коде можно будет проверить равен ли фактический порт заданному и уже решать в алгоритме, что дальше делать - отключаться или продолжать работу" - никаких действий от пользователя не надо и сервер гарантированно стартонёт.
Это тоже компромисс, который, тем не менее, повысит применимость компоненты. Тут же выше подобные вопросы уже были (10). Без задания приоритета при назначении порта - эта компонента только игрушка, а для создания стабильного рабочего решения бесполезна.
21. dablack 09.01.18 13:14 Сейчас в теме
Добрый день. Юрий, но может у вас получиться сделать возможность назначать порт при создании компоненты ? Реально рандомный номер порта очень мешает. Вариант предложенный в (20) всех устроит. Или поделитесь/продайте исходники мы сами поправим). Вариант с PowerShell не подходит.
Спасибо.
22. blackhole321 1303 09.01.18 15:56 Сейчас в теме
(21)Поищу исходники, но это все пробовалось :) 1С начинает валиться с ошибками, хотя вроде никаких предпосылок. Я поэтому и написал, что это компромиссный вариант
17. blackhole321 1303 12.10.17 15:07 Сейчас в теме
(15) В качестве иллюстрации и отправной точки можете попробовать нижеследующий скрипт PowerShell:

# Инициализируем web-сервер

$ВебСлушатель = New-Object System.Net.HttpListener

# По этому url регистрируем порт
# Запрос на регистрацию: http://localhost:8080/НомерПорта
$ВебСлушатель.Prefixes.Add("http://localhost:8080/")

# По этому url принимаем внешние запросы
# Необходимо запускать с правами администратора или настроить через netsh
$ВебСлушатель.Prefixes.Add("http://*:9090/")

$ВебСлушатель.AuthenticationSchemes = 'Anonymous'    
$ВебСлушатель.Start() 

# Порт, который слушает клиент 1С 
$port = 0

# Получаем и обрабатываем web-запросы

while ($ВебСлушатель.IsListening)
{
    $Контекст = $ВебСлушатель.GetContext()
    $UrlЗапроса = $Контекст.Request.Url
    $Ответ = $Контекст.Response
    
    $Результаты = ""

    if ($UrlЗапроса.Port -eq 8080)
    {
        # Регистрируем порт клиента
        $port = $UrlЗапроса.AbsolutePath.ToLower().Replace("/", "")

    }
    elseif ($UrlЗапроса.Port -eq 9090)
    {
        # Формируем строку запроса к клиенту 1С
        $UriЗапросаК1С = "http://localhost:" + $port + $UrlЗапроса.PathAndQuery
        
        # Выполняем запрос. Invoke-Webrequest не доступна в PowerShell 2
        $РезультатыЗапросаК1С = Invoke-WebRequest -Uri $UriЗапросаК1С

        $Результаты = $РезультатыЗапросаК1С.Content

    }
    
    # Возвращаем результат
    $Буфер = [System.Text.Encoding]::UTF8.GetBytes($Результаты)
    $Ответ.ContentLength64 = $Буфер.Length
    $Ответ.AppendHeader("Content-Type","text;charset=utf-8")
    $Ответ.OutputStream.Write($Буфер, 0, $Буфер.Length)
    $Ответ.Close()
 }

Показать


Он запускается на локальной машине, где работает клиент 1С. Запускать надо с правами администратора или разрешить слушать определенный порт обычному пользователю при помощи netsh
Регистрация порта - отправка из 1С веб-запроса http://localhost:8080/НомерПорта
На порт 9090 пробрасываете внешние запросы
Поддерживается только один клиент.
23. kvadrat2 35 08.02.20 16:17 Сейчас в теме
Что-то не удаётся нам запустить эту компоненту на платформе x64... Платформа молча её не подключает, хотя на х32 всё довольно просто.
И ещё, было бы не плохо если бы вы выложили пример листинга кода с использование компоненты. Это бы упростило её встраивание в дальнейшем. Копипаст рулит.
24. kvadrat2 35 08.02.20 16:49 Сейчас в теме
(23) Может кому понадобится:
&НаКлиенте
Перем ОбъектКомпоненты;

&НаКлиенте
Процедура ПодключитьВК(Команда)     // Синхронный вызов
	рез = ПодключитьВнешнююКомпоненту("C:\temp_c\1\WebExtEvent10.dll","MyComp",ТипВнешнейКомпоненты.Native);
	
	Если рез Тогда
	
		ОбъектКомпоненты=Новый("AddIn.MyComp.WebExtEvent"); 
		Сообщить("Ссылка: ");
		Сообщить("http://127.0.0.1:"+Формат(ОбъектКомпоненты.Порт, "ЧГ=0")+"/ExternalEvent?key="+ОбъектКомпоненты.Ключ
		          +"&source=yoursource&message=yourmessage&data=yourdata");
		
	Иначе
		
		Сообщить("Найн");
	
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
	Сообщить("Событие: Источник " + Источник + " Событие: "  + Событие + " Данные: " + Данные);
КонецПроцедуры
Показать
39. GuzeevRK_TL 07.10.21 18:26 Сейчас в теме
(24) Илья, приветствую. Бьемся уже 2-й день с этой компонентой. поделитесь секретом - как вы ее заставили работать? может какие то дополнительные библиотеки, фреймворки? Права?
По моему web-сервер при создании объекта компоненты не запускается.
Подключал, запускал как в (24). Браузером, HTTP-запросом из 1С не достучаться. Мониторил порт - никого на нем нет. Бендмауэр отключен.
40. kvadrat2 35 08.10.21 11:54 Сейчас в теме
(39) Приветствую. Мы, в итоге от неё отказались из-за ограничений по разрядности платформы, в основном. Потом были эксперименты с системой взаимодействий, с сигнальными константами и т.п.... Вроде в итоге заказчик заказал где-то разработку своей компоненты заточенную под работу с торговым оборудованием, с которым и была основная проблема или какое-то другое решение встроил...
Но эта компонента, в целом, более-менее работала на x32 платформе, на сколько я помню.
41. kvadrat2 35 08.10.21 11:57 Сейчас в теме
(39) И да, возможно надо зарегистрировать библиотеку компоненты через regsvr32 - не помню точно. Скорее всего. Либо платформу запустить от имени администратора ОС.
42. GuzeevRK_TL 08.10.21 12:27 Сейчас в теме
(41) Это мы конечно сделали и проверили) не помогает. так и придется свою вк писать.
43. blackhole321 1303 08.10.21 16:53 Сейчас в теме
(39) Добрый день!
Клиент 1С x32 или x64? Компонента под клиент x32.
Я правильно понимаю, что компонента установилась, якобы запустилась, Вы получили порт, на котором она слушает из свойства, посмотрели список слушающих портов и не обнаружили этот порт?
44. GuzeevRK_TL 11.10.21 18:51 Сейчас в теме
(43) Клиент 1С- 32битный. W10pro.
Да, вы все правильно поняли. Получили порт из свойства объекта. На нем никого нет(
Антивирусы, файрволы и прочее отключали) Тишина.
45. blackhole321 1303 11.10.21 18:55 Сейчас в теме
(44) А версия платформы какая?
И какая версия винды?
Используются ли перемещаемые профили?
46. blackhole321 1303 11.10.21 18:56 Сейчас в теме
(44)тонкий/толстый клиент?
25. blackhole321 1303 08.02.20 18:06 Сейчас в теме
(23)Посмотрел манифест. Я так понимаю - Вы имеете ввиду x64 клиент 1С. Да, скомпилировано только под x32, соответственно работать будет только под x32 клиентом.
С клиентом x32 и ОС x64 работать должно бы. Если не так - дайте знать
26. kvadrat2 35 08.02.20 18:22 Сейчас в теме
(25) Да на 32х разрядном клиенте работает, но это не очень хороший вариант. Мы подразумеваем х64 клиент. Даже не знаю как будем выкручиваться, т.к под х64 даже оборудование настраивали.. Не хотелось бы на х32 переходить из-за только этой компоненты... Есть вариант скомпилировать под х64?
27. blackhole321 1303 08.02.20 18:26 Сейчас в теме
(26)Поищу исходники под Windows, под linux нашел, но для Linux компилировал и под x32 и под x64
28. kvadrat2 35 08.02.20 18:27 Сейчас в теме
29. blackhole321 1303 08.02.20 18:29 Сейчас в теме
30. BadD 20.03.20 10:39 Сейчас в теме
(29) Добрый день. Не появились ли исходники?
31. blackhole321 1303 20.03.20 12:27 Сейчас в теме
Вроде нашел, руки не доходят посмотреть. На выходных попробую
32. ru_hawk 19.05.20 17:08 Сейчас в теме
(31) Добрый день! У вас получиться приложить к статье компонент для клиента 1С 64бит, или хотя бы проект для самостоятельной компиляции?
33. blackhole321 1303 19.05.20 17:45 Сейчас в теме
34. ru_hawk 07.09.20 17:19 Сейчас в теме
(33) Не забыли про 64-бит проект? =)
35. G_112992355736405365826 16.08.21 16:00 Сейчас в теме
Поделитесь пожалуйста.
36. Jeka44 06.10.21 09:24 Сейчас в теме
Здравствуйте. Скачал компоненту. С помощью строчки кода ПодключитьВнешнююКомпоненту("C:\1\ГенерацияВнешнегоСобытияВ1С\WebExtEvent10.dll", "MyComp",ТипВнешнейКомпоненты.Native); подключил ее. Получил порт и ключ. При попытке в браузере перейти по ссылке вида http://127.0.0.1:57917/ExternalEvent?key=26C8EC5F-566D-0E3B-B04D-92D6A2130F26 ни чего не происходит. Ни в 1Ске внешнее событие не возникает, и браузер пишет, что не удается получить доступ к сайту. Не подскажите что я делаю не так?
37. GuzeevRK_TL 07.10.21 17:47 Сейчас в теме
Юрий, доброго времени. Разработка Ваша просто отличная, потенциально решит много проблем, но..
Столкнулся с той же проблемой, что и (36), по моему web-сервер при создании объекта компоненты не запускается.
Подключал, запускал как в (23). Браузером, HTTP-запросом из 1С не достучаться. Мониторил порт - никого на нем нет. Бендмауэр отключен.
Может быть какая то инструкция есть? волшебные слова?)
38. GuzeevRK_TL 07.10.21 18:21 Сейчас в теме
Оставьте свое сообщение