Простой скрипт для вызова SOAP веб-сервиса из конфигуратора

17.06.16

Интеграция - WEB-интеграция

Этой публикации не было бы без "Расширяем конфигуратор без Снегопата и ТурбоКонфа" http://infostart.ru/public/339035/

На уникальность нисколько не претендую, но хотел бы поделиться опытом и показать, что эту тему можно развивать "под себя", а не только пользоваться готовыми решениями.

Идея публикации - расширяем конфигуратор для произвольной задачи. Показать, что это несложно, доступно и широко применимо

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

Наименование Файл Версия Размер
Для инфостарта.zip
.zip 2,41Kb
0
.zip 2,41Kb Скачать

Предисловие: стандарт документирования кода в нашей организации обязывает вставлять метки-идентификаторы задачи непосредственно в код 1С, а также в поле "Комментарий" к новым объектам. Удобство такого подхода никому доказывать не нужно. Что делает разработчик, когда видит такую метку? Выделяет идентификатор, ctrl+c, открывает учетную систему, поиск, ctrl+v, открывается веб-страничка... И так для каждой метки. При обновлении конфы можно запариться. А что если делать всё это хоткеем?

Но ведь API конфигуратора 1с закрыт, скажете вы (неслышавшие про опенконф и снегопат). Пользующиеся снегопатом пойдут писать скрипт для снегопата. Знающие про удобство и простоту AutoHotkey пойдут писать скрипт под него.

И отправят коллегу писать веб-сервис в системе учета задач =)

Всё ниженаписанное предназначено в основном для тех, кто не писал раньше подобный скрипт для конфигуратора (я начинал с нуля).

Инструментарий: AutoHotkey (free), блокнот для написания JavaScript, браузер для его тестирования. JavaScript тут нужен для расширения возможностей AutoHotkey в плане вызова веб-сервиса.

Забегая вперед скажу, что AHK нужен только для написания и отладки, потом его можно смело удалять, и скрипт продолжит работать без него.

Итак, ознакомьтесь с документацией AHK на русском тут.

Скачали AHK, запускаем скрипт KeyCodes.ahk (есть во вложении) для определения скан-кода горячей клавиши. Ну и пишем код соответственно задаче. Язык AHK похож на основные языки программирования.

Далее просто приведу мой скрипт с комментариями:

return


!sc21:: ; alt+F - сканкод (!-alt и sc21-f)
AutoTrim On ; Не Сохраняет любой межстрочный интервал и пробел в конце текстовой строки в буфере обмена.
ClipboardOld = %ClipboardAll%; переменная буфера обмена
Clipboard = ; Чтобы обнаружение заработало, нужно начать с пустого значения.
Send ^{sc2E} ; имитация нажатия CTRL+C
ClipWait 1 ; обработчик ожидания
if ErrorLevel ; Время ожидания ClipWait вышло.
	return
;
IfInString, Clipboard, rfc - ищем в строке кодовую метку "rfc"
{
StringReplace, Clipboard, Clipboard, rfc, RFC, All - если есть "rfc", то заменяем на "RFC" (разработчик может ошибиться и написать как ему удобно, но стандарт предписывает писать в верхнем регистре)
}
StringGetPos, pos, Clipboard, RFC - определяем позицию начала метки
;
StringTrimLeft, Clipboard, Clipboard, pos - образаем всё, что слева от нее
;
Result := StrLen(Clipboard) - вычисляем длину оставшейся строки
;
ResultTr := Result - 10 - вычисляем сколько нужно отрезать справа (метка всегда состоит из 10 символов)
;

StringTrimRight, RFC, Clipboard, ResultTr - образаем всё справа
;

RunWait, wscript.exe JSrfc.js %RFC% - запускаем JavaScript, передаем ему параметр (метку вида RFC-000001)
;
FileRead, newText, tmp\result.tmp - ответ от веб-сервиса JS пишет в промежуточный файл, читаем его
ClipWait, 1
Clipboard := newText - помещаем прочитанное в буфер обмена
ClipWait, 1

if (Clipboard = "http://tfs_server/NOT_FOUND") {
MsgBox, Ошибка: задача не найдена! - выводим окно с ошибкой
}
else {
try {
    Run, %Clipboard%, , max - открываем http-ссылку на задачу (запустится веб-браузер, назначенный по умолчанию)
} catch e {
}
}
return
;

Теперь раскажу, что мне понадобилось для написания вызова веб-сервиса из JS.

Вначале мы протестируем веб-сервис и заодно получим структуру Soap-запроса. Очень удобно это делать с помощью SoapUI.

Тестирование и отладку JS в основном делал в IE11, тк FireBug в мозилле неверно интерпретировал ошибку, из-за чего было убито много времени на решение несуществующей проблемы.

Ниже код JS с комментариями:

function Run() //главная функция
{
arg=WScript.Arguments; //тут как раз содержатся передаваемые параметры

            var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //создается объект XMLHTTP
           
            var sr = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v="http://адрес/omniintegration/v1"><soapenv:Header/><soapenv:Body><v:GetLinksToWIOneS><v:RfcId>'
+arg(0)+ 
'</v:RfcId></v:GetLinksToWIOneS></soapenv:Body></soapenv:Envelope>'; //формируется заголовок SOAP

            // Send the POST request

            xmlhttp.open('POST', 'http://адрес/TfsIntegrationService.svc', false); //тут обязательно указываем False - запрос должен быть синхронный
            xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
xmlhttp.setRequestHeader('SOAPAction', 'http://адрес/ITfsIntegrationService/GetLinksToWIOneS'); //устанавливаем заголовок SOAPAction
            xmlhttp.send(sr); //отсылаем запрос
      
  
     if(xmlhttp.status == 200) { //если сервер вернул ОК
       elements = xmlhttp.responseXML.getElementsByTagName('GetLinksToWIOneSResult'); //разбираем XML по тегам

wtiteToResultFile("tmp/result.tmp",elements[0].text); //результат пишем в файл
         }
  }

var fso = new ActiveXObject("Scripting.FileSystemObject");

function wtiteToResultFile(file_name, file_data) {//тут всё примитивно
	f = fso.CreateTextFile(file_name, true);
	f.Write(file_data);
	f.Close();
}

Run();//запускает главную функцию при открытии скрипта

Итак, что мы получаем: 3 файла, из файла *.ahk можно скомпилировать exe-шник и поместить его в автозапуск. Работает исправно, ОЗУ съедает около 3 Мб.

Никакие файлы не заменяли, никакие DLL не регистрировали. Обновим платформу - всё продолжит работать.

 

Спасибо за внимание, с вопросами прошу в комментарии

autohotkey снегопат javascript webservice веб-сервис soap

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15748    10    17    

11

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17551    6    15    

13

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16360    42    49    

23

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25741    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88584    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 215 19.06.16 16:04 Сейчас в теме
Не понял, зачем все это. Автор как-то на своей волне, но вот это :
"Удобство такого подхода никому доказывать не нужно. Что делает разработчик, когда видит такую метку? Выделяет идентификатор, ctrl+c, открывает учетную систему, поиск, ctrl+v, открывается веб-страничка... И так для каждой метки. При обновлении конфы можно запариться. А что если делать всё это хоткеем?"

ему понятно, а мне нет. Или я один такой ?
4. roofless 23 20.06.16 08:48 Сейчас в теме
(1) bulpi, я не понял, что именно вам не понятно) в выделенном вами абзаце написано, что вместо переключения между окнами можно просто жахнуть хоткей
2. pumbaE 19.06.16 17:36 Сейчас в теме
tfs - ох извращенцы. Сделали бы что-бы при помещении в хранилище автомтатом добавляло номер текущей задачи и последующее заполнение описание, той задачи у которой стоит "в работе".
3. roofless 23 20.06.16 08:43 Сейчас в теме
(2) pumbaE, сделаем, это следующий этап
5. roofless 23 20.06.16 09:19 Сейчас в теме
(2) pumbaE, первый раз я вас неправильно понял.
добавляло номер текущей задачи и последующее заполнение описание

в код 1с?
6. pumbaE 20.06.16 09:35 Сейчас в теме
(5) нет не в код, а в комментарий при помещении в хранилище. Зачем это нужно в коде то? Если вы уже используете монстра в виде tfs, то как минимум можете поднять еще сервер git и автоматом синхронизировать хранилище с git, а при правильных комментариях то каждый коммит привяжется к той задаче что выполняли и прямо на web портале вы сможете посмотреть изменение кода при выполнении задачи.
7. roofless 23 20.06.16 09:42 Сейчас в теме
(6) pumbaE, всё верно говорите. как и писал выше - это планируется. тфс у 1сников пока используется только для учета задач, без связи с кодом. Остальные отделы используют бОльший функционал

Идея публикации - расширяем конфигуратор для произвольной задачи. Показать, что это несложно, доступно и широко применимо
Оставьте свое сообщение