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) Данная страница не найдена»
Создание веб сервера на 1С …
Перейти к публикации
Отлично! Только хорошо бы организовать сохранение строки параметров соединения с базой. Может файл настроек какой-то. И сворачивание в трей не лишним будет.
На Win ХР при старте выдает Access violation at address ….. in modul comcntr.dll ……… и не стартует.
(2)Проверял на 2003 , 2008 ,7 , и на хp должно работать , переустановите 8.2 (и база должна быть на 8.2)
у меня давняя проблема: не могу из 1с77 достучаться до web-сервиса на 1с82
с помощью этой штуки возможно?
на 1с82 поднят веб-сервис, он принимает файл обмена и загружает из него документы в базу.
из другой 1с82 могу отправить на этот веб-сервис файлы, из 1с77 так и не смог…
Это не веб сервис , а мини веб сервер, есть различия..:) сможешь постучаться из 7 и получить файл , я передаю xml через него.
(5) а можно такой же HTTP сервер написать на 1С ? Чтобы добавить туда авторизацию, выбор базы, интерактивность ?
(2) на XP работает
(2) regsvr32 ПолныйПуть/comcntr.dll
(6) можно .. , я сначала написал тсп -1с conector , но в 1с тогда надо все данные парсить включая заголовки.
(9) а тсп-1с connector выложить можете здесь или выслать на 6549090@rambler.ru ?
не могу он перерос в Http-1C(OLE) -connector — тех исходников не осталось.. а и зачем все в 1с парсить , на основе этого можно все что угодно йз 1с передовать..
(11) не понял, а где происходит обработка команды list, которая возвращает список сотрудников браузеру ? В самом мини http-сервере ? Как добавить свои команды обработки ?
Почему возникает ошибка при 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;
(12)
В 1С , МодульВнешнегоСоединения
(14) see1c.ru, клево. Не знал такую фишку. Спасибо большое, буду знать.
А можно поподробней, как работать с этим? Где запускать, какую строку соединения прописывать, как вызывать из html?
(16) bobank, все можно увидеть на скриншоте. Хотя конечно да, help нужен.
А в чем ценность?
Стандартные веб-сервисы такое же умеют.
(17) Kuzja_R, Поддерживаю по поводу хэлпа
(18)http://forum.infostart.ru/forum26/topic42376/
Интересно. А эта штука не будет конфликтовать с другим веб-сервером, установленном на компе, с апачем например?
И если в комп подключен йотовский модем с внешним белым айпишником, то получится извне достучаться до 1С и получить результат обработки запроса?
(21)я использовал просто другой порт не 80 а 4080 ли 8080 и тд..
какой вам Help нужен что такое COM и строка соединения смотреть в руководстве по 1с
программа вызывает 1 функцию в модуле внешнего соединения , что в ней вернете то и отправит обратно ..
Запускать на компьютере где установлен 1с и есть доступ к базе которая в строке сопединения,и какой вы хотите использовать в качестве веб сервиса , про открытие нужных портов говорить не буду к сис админу.
(23)Ясно, спс
(13) вроде поправил
(25) Да, работает.
(22) спасибо за help, теперь ясно
мини веб сервер!!!
(27) bobank, за какой help Вы спасибо говорите?
(29) psih12, пост №22 🙂 Вместе с демо-конфигурацией все понятно.
А как использовать параметр и данные? Может кто выложит примерчик? Я имею ввиду, например, как получить не весь список сотрудников, а Иванова или Сидорова.
(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;
КонецФункции
(32) спасибо, но вызвать не получается. Набираю в браузере «127.0.0.1:4080/name=Сидоров&» и вылетает ошибка. В чём я не прав?
(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>» ;
КонецЦикла;
Возврат тх;
КонецФункции
(32) Дорпботал немного твой пост.
функция 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;
КонецФункции
Теперь не пойму, почему здесь-то русское название фамилии не распознаётся?
(35) Не мудрствуя лукаво можно например так перекодировать 🙂
Функция Перекодировка(СтрокаВКодировке=»») Экспорт
Алф = «АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчш щьыъэюя»;
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»;
КАлф = «%D0%90%D0%91%D0%92%D0%93%D0%94%D0%95%D0%81%D0%96%D0%97%D0%9
Сим = «!#%&'(),:;<>?[]#k8SjZc9Dxk`{| }»;
0%7d»);
КСим = ВРег(«%21%23%25%26%27%28%29%2c%3a%3b%3c%3e%3f%5b%5d%5e%60%7b%7c%2
ТекСтрока = СтрокаВКодировке;
Для а = 1 по СтрДлина(КАлф)/6 Цикл
ТекСтрока = СтрЗаменить(ТекСтрока,Сред(КАлф,а*6-5,6),Сред(Алф,а,1));
КонецЦикла;
Для б = 1 по СтрДлина(Сим) Цикл
ТекСтрока = СтрЗаменить(ТекСтрока,Сред(КСим,б*3-2,3),Сред(Сим,б,1));
//Тек = Тек + Сред(КСим,а*3-2,3)+ Символы.ВК;
КонецЦикла;
ТекСтрока = СтрЗаменить(ТекСтрока,»%E2%84%96″,»№»);
ТекСтрока = СтрЗаменить(ТекСтрока,»+»,» «);
ТекСтрока = СтрЗаменить(ТекСтрока,»%2B»,»+»);
Возврат ТекСтрока;
КонецФункции
(34) (36) see1c.ru, Спасибо. Теперь бы с данными разобраться. Они-то для чего?
Скачать не могу, инфоденег пока не набрал 🙂
Но штука явно полезная. Без лишних заморочек с Веб-сервисом 1с и дополнительным софтом, запросто организовать съем нужных данных из базы.
Обязательно мастхев. Спасибо!
Думаю пригодится.
Спасибо автору.
быстрое получение коротких предопределённых данных, ведь если в параметре передавать ключевые слова и по ним формировать различные отчеты и возвращать ответ, то вообще будет супер.
С помощью автора и сообщества почти разобрался в работе. Однако остался вопрос, может кто подскажет. Написал функцию, которая должна по артикулу товара выдавать его количество. Однако, на самом деле, ничего не выдает. В чём может быть причина? Вот текст функции:
функция 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;
КонецФункции
(41)КоличествоТовара- занули ..
если артикул русский делай транс кодирование..
(42) Занулил-эффекта тоже 0, артикул цифровой.
(41) psih12, преобразуй параметр в число:
Артикул = 0 + Сред(Параметр,НачалоПервогоПараметра,ОкончаниеПервогоПараметра-НачалоПервогоПараметра);
(41) psih12, а параметр имеет имя «name» ? У него имя «Number». И соответственно не
НачалоПервогоПараметра = Найти(Параметр,»name=»)+5;
а
НачалоПервогоПараметра = Найти(Параметр,»Number=»)+7;
(44) bobank, тогда вообще каракули выдает. Немного ошибся — артикул в конфигурации представлен как строка, правда, русских названий в нём нет. В основном, цифры, но есть и следующего вида, например: 123456-070
НачалоПервогоПараметра = Найти(Параметр,»name=»)+5;
а
НачалоПервогоПараметра = Найти(Параметр,»Number=»)+7;
(47) bobank, Поправил-вернул на место «name=». Эффекта нет
(35)
просто выведи в низ html странички значения параметров:
команда + » » +параметр+» «+данные;
и посмотри что приходит в обработку
(43)(44)(45)(46)(47)(48)(49) Ребята это форум про компоненту , а не умение работать с 1с и отладчиком , подключи отладку и посмотри как все работает и сформируй нужный файл…
очень полезная вещь
Сохранил в закладках, обязательно посмотрю позже. Симпатичная идея.
о! Отлично!!!! Этого мне как раз и не хватало!! Подали идею!
Отличная вещь, спасибо!
Автору — спасибо огромное! ваша разработка очень помогла!
Ребята, помогите…
Пытаюсь сделать 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 данные использовать в обработке…
Переменая «данные» — пустая…
Подскажите куда копать?
Кажется я понял в чем проблема…
Если данные для POST привести к формату base64, а в 1с сделать encode, то вроде пошло…
Я не ожидал, что нужно это делать…
Причина в этом?
А что означает сообщение «Существуют активные сеансы работы с данной базой, использующую версию платформы, не поддерживающую совместную работу с этой версией. Не совпадает версия временного файла.»
Сообщение появляется в двух случаях:
1. Запущена база 1С — сообщение появляется при нажатии кнопки Старт в утилите.
2. Запущена утилита (кнопкой старт) — сообщение появляется при запуске базы.
На компьютере установлено одновременно две платформы: 8.2 и 8.3. База запускается в 8.3.
Пользователей в базе нет введенных. строка запуска: file=»D:Pavelдоговора»;
Утилита работает только с 8.2 поэтому к базе надо подключаться 8.2
У МЕНЯ ЕСТЬ СЛУЖБА КОТОРАЯ ПОДКЛЮЧАЕТ 8.2_8.3 ПОПОЗЖЕ ЕЕ ВЫЛОЖУ.
Буду ждать — спасибо.
(61) Добрый день. для 8.3 уже готово? и работает данная утилита для серверных баз?
Добрый день!
Спасайте!
На удаленном сервере поднят веб-сервер на IIS, как мне при использовании вашей обработки сделать так, чтобы get-запросы можно было обработать в 1С?
ничего не понял давайте в личку, хотя старая процедура я использую другую и 8.3 она не актуальна.