gifts2017

Http-1C(OLE) -connector

Опубликовал kabz (Kabz) в раздел Обмен - Обмен с другими системами

Создание веб сервера на 1С ...

COM приложение слушает указанный порт передает post get запросы в 1с.

При приходе запроса вызывает  функцию в модуле внешнего соединения. и возращает ответ обратно.

 

 Функция ObtainedData(Тип,Отправитель,Команда="",Параметр="",Данные="") экспорт

  • Параметры:
  • Тип - тип запроса (get,Post)
  • Отправитель -  ip адрес отправителя запроса.
  • Команда - сама команда например /list
  • Параметр - get параметры запроса
  • Данные -сюда передаются данные post запроса (передавайте только  текст , бинарники думаю 1с не примет)

В приложении выберите порт какой слушать можно и 80 если не поднят другой веб сервер , и строку  COM подключения к 1с.

По следам http://forum.infostart.ru/forum26/topic42376/

Пожелания приветствуються.

 

Примеры использования. Дебиторка контрагентов для менеджеров (у тех, у кого нет доступа  в 1с - можно смотреть по инету) или расчетные листки  сотрудников - пароль передавать в параметрах).

 

17.10.2011   Исправлена ошибка  возникающая при  работе метода POST без данных.

22.10.2011 Добавлено:  сохранение параметров в реестре,  Запущенная при закрытии сворачивается в трей.

29.10.2011 Добавлено: в передоваемой строке можно передать код http ошибки пример "&Error(404,Not Found)  Данная страница не найдена"

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

Наименование Файл Версия Размер Кол. Скачив.
Http-1C(OLE) -conector
.exe 9,00Mb
21.07.14
147
.exe 9,00Mb 147 Скачать
демо база
.dt 15,06Kb
21.07.14
58
.dt 15,06Kb 58 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. kabz (Kabz) 16.10.11 22:36
1. Ростислав Кузьмин (Kuzja_R) 16.10.11 23:16
Отлично! Только хорошо бы организовать сохранение строки параметров соединения с базой. Может файл настроек какой-то. И сворачивание в трей не лишним будет.
Devi; Kabz; cleaner_it; +3 Ответить
2. script Мальчинко (script) 17.10.11 00:53
На Win ХР при старте выдает Access violation at address ..... in modul comcntr.dll ......... и не стартует.
3. kabz (Kabz) 17.10.11 01:19
(2)Проверял на 2003 , 2008 ,7 , и на хp должно работать , переустановите 8.2 (и база должна быть на 8.2)
4. Антон (anton.fly7) 17.10.11 08:37
у меня давняя проблема: не могу из 1с77 достучаться до web-сервиса на 1с82
с помощью этой штуки возможно?

на 1с82 поднят веб-сервис, он принимает файл обмена и загружает из него документы в базу.
из другой 1с82 могу отправить на этот веб-сервис файлы, из 1с77 так и не смог...
5. kabz (Kabz) 17.10.11 08:41
Это не веб сервис , а мини веб сервер, есть различия..:) сможешь постучаться из 7 и получить файл , я передаю xml через него.
6. Олег Крапивный (powerpc) 17.10.11 09:39
(5) Kabz, а можно такой же HTTP сервер написать на 1С ? Чтобы добавить туда авторизацию, выбор базы, интерактивность ?
7. see1c ru (see1c.ru) 17.10.11 09:56
8. Ийон Тихий (cool.vlad4) 17.10.11 11:08
(2) regsvr32 ПолныйПуть/comcntr.dll
9. kabz (Kabz) 17.10.11 11:26
(6) можно .. , я сначала написал тсп -1с conector , но в 1с тогда надо все данные парсить включая заголовки.
10. Олег Крапивный (powerpc) 17.10.11 11:31
(9) Kabz, а тсп-1с connector выложить можете здесь или выслать на 6549090@rambler.ru ?
11. kabz (Kabz) 17.10.11 11:34
не могу он перерос в Http-1C(OLE) -connector - тех исходников не осталось.. а и зачем все в 1с парсить , на основе этого можно все что угодно йз 1с передовать..
12. Олег Крапивный (powerpc) 17.10.11 11:50
(11) Kabz, не понял, а где происходит обработка команды list, которая возвращает список сотрудников браузеру ? В самом мини http-сервере ? Как добавить свои команды обработки ?
13. see1c ru (see1c.ru) 17.10.11 11:57
Почему возникает ошибка при Post запросе?

Access violation at address 0059BA45 in module 'Http-1C(OLE) -conector.exe'. Read of address 00000000


Текст1 =
"<html xmlns=""http://www.w3.org/1999/xhtml"">
|<head>
|<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
|<title>Документ без названия</title>
|</head>
|<body>
| <form method=""Post"" action=""/"">
| Введите Ваше имя: <input type=""text"" name=""name"">
|

| <input type=""submit"" name=""okbutton"" value=""OK"">
| </form>
|Привет !"+Команда+" - "+Параметр+" - "+Данные+"
|</body>
|</html>";


Возврат Текст1;
14. see1c ru (see1c.ru) 17.10.11 12:01
(12)
В 1С , МодульВнешнегоСоединения
15. Олег Крапивный (powerpc) 17.10.11 12:52
(14) see1c.ru, клево. Не знал такую фишку. Спасибо большое, буду знать.
16. bobank (bobank) 17.10.11 12:55
А можно поподробней, как работать с этим? Где запускать, какую строку соединения прописывать, как вызывать из html?
17. Ростислав Кузьмин (Kuzja_R) 17.10.11 13:12
(16) bobank, все можно увидеть на скриншоте. Хотя конечно да, help нужен.
18. albochkov (Aleksey.Bochkov) 17.10.11 13:54
А в чем ценность?
Стандартные веб-сервисы такое же умеют.
19. psih12 17.10.11 13:55
(17) Kuzja_R, Поддерживаю по поводу хэлпа
21. Юрий Лазаренко (TitanLuchs) 17.10.11 16:31
Интересно. А эта штука не будет конфликтовать с другим веб-сервером, установленном на компе, с апачем например?
И если в комп подключен йотовский модем с внешним белым айпишником, то получится извне достучаться до 1С и получить результат обработки запроса?
22. kabz (Kabz) 17.10.11 16:34
какой вам Help нужен что такое COM и строка соединения смотреть в руководстве по 1с
программа вызывает 1 функцию в модуле внешнего соединения , что в ней вернете то и отправит обратно ..
Запускать на компьютере где установлен 1с и есть доступ к базе которая в строке сопединения,и какой вы хотите использовать в качестве веб сервиса , про открытие нужных портов говорить не буду к сис админу.
23. kabz (Kabz) 17.10.11 16:34
(21)я использовал просто другой порт не 80 а 4080 ли 8080 и тд..
24. Юрий Лазаренко (TitanLuchs) 17.10.11 16:36
25. kabz (Kabz) 18.10.11 00:48
26. see1c ru (see1c.ru) 18.10.11 07:27
27. bobank (bobank) 18.10.11 07:40
(22) Kabz, спасибо за help, теперь ясно
28. Jon bazcom (bazcom) 18.10.11 14:19
29. psih12 18.10.11 15:23
(27) bobank, за какой help Вы спасибо говорите?
30. bobank (bobank) 18.10.11 15:31
(29) psih12, пост №22 :) Вместе с демо-конфигурацией все понятно.
31. psih12 18.10.11 16:09
А как использовать параметр и данные? Может кто выложит примерчик? Я имею ввиду, например, как получить не весь список сотрудников, а Иванова или Сидорова.
32. kabz (Kabz) 18.10.11 16:12
(31) напиши в модуле
функция ObtainedData(Тип,Отправитель,команда="",параметр="",данные="") экспорт

НачалоПервогоПараметра = Найти(Параметр,"name=")+5;
ОкончаниеПервогоПараметра = Найти(Параметр,"&");

Имя = Сред(Параметр,НачалоПервогоПараметра,ОкончаниеПервогоПараметра-НачалоПервогоПараметра);


Текст1 =
"<html xmlns=""http://www.w3.org/1999/xhtml"">
|<head>
|<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
|<title>Документ без названия</title>
|</head>
|
| <form method=""post"" action=""/"">
| Введите Ваше имя: <input type=""text"" name=""name"">
|

| <input type=""submit"" name=""okbutton"" value=""OK"">
| </form>
|Ваше имя "+Имя+"
|
|</html>";


Возврат Текст1;




КонецФункции
33. psih12 18.10.11 16:24
(32) Kabz, спасибо, но вызвать не получается. Набираю в браузере "127.0.0.1:4080/name=Сидоров&" и вылетает ошибка. В чём я не прав?
34. kabz (Kabz) 18.10.11 16:30
(33) в 32 совсем другой пример без листа просто набери 127.0.0.1:4080


параметры в вебе передаются так http://127.0.0.1:4080/list?name=IVAN


пример только для английских параметров.. для руских надо делать транскодирование..

функция ObtainedData(Тип,Отправитель,команда="",параметр="",данные="") экспорт


если нрег(команда)="/list" тогда
НачалоПервогоПараметра = Найти(Параметр,"name=")+5;
ОкончаниеПервогоПараметра = Найти(Параметр,"&");

Имя = Сред(Параметр,НачалоПервогоПараметра,ОкончаниеПервогоПараметра-НачалоПервогоПараметра);



тх="<HTML><HEAD>
|<META content=""text/html; charset=utf-8"" http-equiv=Content-Type>
|<META name=GENERATOR content=""MSHTML 9.00.8112.16437""></HEAD>
|<BODY>
|<P><STRONG>Пример работы    Сотрудники</STRONG></P>
|<P>
|<TABLE width=""100%"">
|<TBODY> ";
выб=Справочники.Сотрудники.Выбрать();



пока выб.Следующий() цикл
если ЗначениеЗаполнено(имя) и выб.Наименование<>имя тогда
продолжить;
КонецЕсли;
тх=тх+"<TR><TD>"+выб.Наименование+"</TD><TD>"+выб.ГодРождения+"</TD></TR>" ;

КонецЦикла;

Возврат тх;

КонецФункции
35. psih12 18.10.11 17:19
(32) Kabz, Дорпботал немного твой пост.
функция ObtainedData(Тип,Отправитель,команда="",параметр="",данные="") экспорт

НачалоПервогоПараметра = Найти(Параметр,"name=")+5;
ОкончаниеПервогоПараметра = Найти(Параметр,"&");

Имя = Сред(Параметр,НачалоПервогоПараметра,ОкончаниеПервогоПараметра-НачалоПервогоПараметра);

Текст1 =
"<html xmlns=""http://www.w3.org/1999/xhtml"">
|<head>
|<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
|<title>Документ без названия</title>
|</head>
|
| <form method=""post"" action=""/"">
| Введите Имя: <input type=""text"" name=""name"">
|

| <input type=""submit"" name=""okbutton"" value=""OK"">
| </form>";
Если ЗначениеЗаполнено(Имя) тогда
Текст1 =Текст1 +"
|Год рождения "+Справочники.Сотрудники.НайтиПоНаименованию(Имя).ГодРождения+"
|
|</html>";
Иначе
Текст1 =Текст1+"
|Год рождения
|
|</html>";
КонецЕсли;


Возврат Текст1;
КонецФункции

Теперь не пойму, почему здесь-то русское название фамилии не распознаётся?
36. see1c ru (see1c.ru) 18.10.11 18:12
(35) Не мудрствуя лукаво можно например так перекодировать :)


Функция Перекодировка(СтрокаВКодировке="") Экспорт

Алф = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчш­щьыъэюя";
КАлф = "%D0%90%D0%91%D0%92%D0%93%D0%94%D0%95%D0%81%D0%96%D0%97%D0%9­8%D0%99%D0%9A%D0%9B%D0%9C%D0%9D%D0%9E%D0%9F%D0%A0%D0%A1%D0%A­2%D0%A3%D0%A4%D0%A5%D0%A6%D0%A7%D0%A8%D0%A9%D0%AC%D0%AB%D0%A­A%D0%AD%D0%AE%D0%AF%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4%D0%B5%D1%9­1%D0%B6%D0%B7%D0%B8%D0%B9%D0%BA%D0%BB%D0%BC%D0%BD%D0%BE%D0%B­F%D1%80%D1%81%D1%82%D1%83%D1%84%D1%85%D1%86%D1%87%D1%88%D1%8­9%D1%8C%D1%8B%D1%8A%D1%8D%D1%8E%D1%8F";

Сим = "!#%&'(),:;<>?[]^`{| }";
КСим = ВРег("%21%23%25%26%27%28%29%2c%3a%3b%3c%3e%3f%5b%5d%5e%60%7b%7c%2­0%7d");

ТекСтрока = СтрокаВКодировке;
Для а = 1 по СтрДлина(КАлф)/6 Цикл
ТекСтрока = СтрЗаменить(ТекСтрока,Сред(КАлф,а*6-5,6),Сред(Алф,а,1));
КонецЦикла;

Для б = 1 по СтрДлина(Сим) Цикл
ТекСтрока = СтрЗаменить(ТекСтрока,Сред(КСим,б*3-2,3),Сред(Сим,б,1));
//Тек = Тек + Сред(КСим,а*3-2,3)+ Символы.ВК;
КонецЦикла;

ТекСтрока = СтрЗаменить(ТекСтрока,"%E2%84%96","№");
ТекСтрока = СтрЗаменить(ТекСтрока,"+"," ");
ТекСтрока = СтрЗаменить(ТекСтрока,"%2B","+");

Возврат ТекСтрока;

КонецФункции
37. psih12 19.10.11 07:46
(34) Kabz, (36) see1c.ru, Спасибо. Теперь бы с данными разобраться. Они-то для чего?
38. Роман Жавнер (rzh) 19.10.11 10:32
Скачать не могу, инфоденег пока не набрал :)
Но штука явно полезная. Без лишних заморочек с Веб-сервисом 1с и дополнительным софтом, запросто организовать съем нужных данных из базы.
Обязательно мастхев. Спасибо!
39. Галя (galyausik1) 19.10.11 10:44
Думаю пригодится.
Спасибо автору.
40. Alexandr Климчук (undo) 19.10.11 17:14
быстрое получение коротких предопределённых данных, ведь если в параметре передавать ключевые слова и по ним формировать различные отчеты и возвращать ответ, то вообще будет супер.
41. psih12 20.10.11 12:11
С помощью автора и сообщества почти разобрался в работе. Однако остался вопрос, может кто подскажет. Написал функцию, которая должна по артикулу товара выдавать его количество. Однако, на самом деле, ничего не выдает. В чём может быть причина? Вот текст функции:
функция ObtainedData(Тип,Отправитель,команда="",параметр="",данные="") экспорт

НачалоПервогоПараметра = Найти(Параметр,"name=")+5;
ОкончаниеПервогоПараметра = Найти(Параметр,"&");

Артикул = Сред(Параметр,НачалоПервогоПараметра,ОкончаниеПервогоПараметра-НачалоПервогоПараметра);
Если ЗначениеЗаполнено(Артикул) тогда
УсловиеОтбор=Новый Структура("Номенклатура");
УсловиеОтбор.Номенклатура=Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Артикул);
ТоварыНаСкладахОстатки= РегистрыНакопления.ТоварыНаСкладах.Остатки (,УсловиеОтбор);
Если ТоварыНаСкладахОстатки.Количество()>0 тогда
КоличествоТовара=ТоварыНаСкладахОстатки.КоличествоОстаток;
КонецЕсли;
КонецЕсли;
Текст1 =
"<html xmlns=""http://www.w3.org/1999/xhtml"">
|<head>
|<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
|<title>Документ без названия</title>
|</head>
|
| <form method=""post"" action=""/"">
| Введите Артикул: <input type=""text"" name=""Number"">
|

| <input type=""submit"" name=""okbutton"" value=""OK"">
| </form>";
Если ЗначениеЗаполнено(Артикул) тогда
Текст1 =Текст1 +"
|Количество "+КоличествоТовара+"
|
|</html>";
Иначе
Текст1 =Текст1+"
|Количество
|
|</html>";
КонецЕсли;
Возврат Текст1;
КонецФункции
42. kabz (Kabz) 20.10.11 12:31
(41)КоличествоТовара- занули ..
если артикул русский делай транс кодирование..
43. psih12 20.10.11 12:44
(42) Kabz, Занулил-эффекта тоже 0, артикул цифровой.
44. bobank (bobank) 20.10.11 12:46
(41) psih12, преобразуй параметр в число:
Артикул = 0 + Сред(Параметр,НачалоПервогоПараметра,ОкончаниеПервогоПараметра-НачалоПервогоПараметра);
45. bobank (bobank) 20.10.11 12:50
(41) psih12, а параметр имеет имя "name" ? У него имя "Number". И соответственно не
НачалоПервогоПараметра = Найти(Параметр,"name=")+5;
а
НачалоПервогоПараметра = Найти(Параметр,"Number=")+7;
46. psih12 20.10.11 12:56
(44) bobank, тогда вообще каракули выдает. Немного ошибся - артикул в конфигурации представлен как строка, правда, русских названий в нём нет. В основном, цифры, но есть и следующего вида, например: 123456-070
47. bobank (bobank) 20.10.11 13:20
bobank пишет:

(41) psih12, а параметр имеет имя "name" ? У него имя "Number". И соответственно не

НачалоПервогоПараметра = Найти(Параметр,"name=")+5;

а

НачалоПервогоПараметра = Найти(Параметр,"Number=")+7;
48. psih12 20.10.11 13:59
(47) bobank, Поправил-вернул на место "name=". Эффекта нет
49. see1c ru (see1c.ru) 20.10.11 14:32
(35)
просто выведи в низ html странички значения параметров:
команда + " " +параметр+" "+данные;

и посмотри что приходит в обработку
50. kabz (Kabz) 20.10.11 14:36
(43)(44)(45)(46)(47)(48)(49) Ребята это форум про компоненту , а не умение работать с 1с и отладчиком , подключи отладку и посмотри как все работает и сформируй нужный файл...
51. sumixam (sumixam) 28.10.11 08:09
52. igor sarafanov (ms200999) 02.11.11 15:17
Сохранил в закладках, обязательно посмотрю позже. Симпатичная идея.
53. Евгения (Enya) Воробьёва (Enya_06) 08.11.11 07:59
о! Отлично!!!! Этого мне как раз и не хватало!! Подали идею!
54. Валерий Волошин (VVi3ard) 15.11.11 18:10
56. Илья Асламов (7fortune) 24.07.12 09:29
Автору - спасибо огромное! ваша разработка очень помогла!
57. Eugene Korshkov (ekors) 15.10.12 23:34
Ребята, помогите...
Пытаюсь сделать POST с передачей данных (из внешней программы) и не могу понять как написать в обработке полученные данные...

В 1с:
Если (Тип = "POST") И (команда = "/detailout") Тогда
Текст1 = "Тип: " + Тип + " " + "Отправитель: " + Отправитель + " " + "Команда: " + команда + " " + "Параметр: " + параметр + " " + "Данные: " + данные + " ";
КонецЕсли;

Из внешней программы на androide делаю POST-вызов:
http://127.0.0.1:4080/detailout?000000003&000000014
job1.PostString("http://127.0.0.1:4080/detailout?" & HTTPUserCode & "&" & TaskCode & "&xml=", sTmp)
sTmp - это base64-строка
Но не вижу как эти POST данные использовать в обработке...
Переменая "данные" - пустая...
Подскажите куда копать?
58. Eugene Korshkov (ekors) 17.10.12 15:16
Кажется я понял в чем проблема...
Если данные для POST привести к формату base64, а в 1с сделать encode, то вроде пошло...
Я не ожидал, что нужно это делать...
Причина в этом?
59. Павел Милицкис (militskis) 17.09.15 12:07
А что означает сообщение "Существуют активные сеансы работы с данной базой, использующую версию платформы, не поддерживающую совместную работу с этой версией. Не совпадает версия временного файла."

Сообщение появляется в двух случаях:

1. Запущена база 1С - сообщение появляется при нажатии кнопки Старт в утилите.
2. Запущена утилита (кнопкой старт) - сообщение появляется при запуске базы.

На компьютере установлено одновременно две платформы: 8.2 и 8.3. База запускается в 8.3.
Пользователей в базе нет введенных. строка запуска: file="D:\Pavel\договора";
60. kabz (Kabz) 18.09.15 12:41
Утилита работает только с 8.2 поэтому к базе надо подключаться 8.2
61. kabz (Kabz) 18.09.15 13:15
У МЕНЯ ЕСТЬ СЛУЖБА КОТОРАЯ ПОДКЛЮЧАЕТ 8.2_8.3 ПОПОЗЖЕ ЕЕ ВЫЛОЖУ.
62. Павел Милицкис (militskis) 19.09.15 10:28
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа