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

17.06.16

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

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

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Для инфостарта.zip
.zip 2,41Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Предисловие: стандарт документирования кода в нашей организации обязывает вставлять метки-идентификаторы задачи непосредственно в код 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

См. также

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

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

57600 руб.

26.11.2024    1560    1    1    

4

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

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

36000 руб.

03.08.2020    18573    20    22    

18

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20718    13    19    

18

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    478    2    0    

5

Обмен с ГосИС 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    92198    184    217    

337
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 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сников пока используется только для учета задач, без связи с кодом. Остальные отделы используют бОльший функционал

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