Самый примитивный HTTP-сервис в мире

Публикация № 1120823

Разработка - Системная интеграция - Интеграция с WEB

HTTP сервис интеграция Web Ajax JavaScript

165
Пошаговый пример создания простейшего HTTP-сервиса, который генерирует HTML-страницу для поиска товара, а также реализует асинхронное получение данных из базы.

О чем это здесь рассказывают

На этот раз мы поговорим о механизме платформы 1С:Предприятие - HTTP-сервисы. Подробнее Вы можете прочитать на официальном сайте или посмотреть примеры на Infostart. Там и вывод графиков, и передача данных, RSS-лента. Кто-то даже реализовал мини-CMS на HTTP-сервисах! =) Мы же рассмотрим создание самого примитивного HTTP-сервиса с минимально полезной функцией.

Механизм HTTP-сервисов открыл довольно обширные возможности по интеграции, расширению функционала, оптимизации существующих приложений и т.д. Чем то это похоже на WebAPI в .NET, но, конечно же, имеет куда больше ограничений и "заточено" под более узкий спектр задач. Список всего того, что можно сделать с помощью HTTP-сервисов настолько большой, что в публикации не хватит места, чтобы сохранить его!

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

Небольшой, но результат!

Конфигуратор - наше все!

Откроем конфигуратор и добавим новый HTTP-сервис. В нашем случае у сервиса будут три метода:

  1. "MainPage" - метод типа GET, который возвращает HTML-страницу с минимальным внесением изменений в разметку (о об этом чуть позже). Страницу Вы уже видели выше.
  2. "Products" - метод типа POST, который принимает в теле запроса параметр "query" с текстом, по которому будет выполняться поиск товаров в базе по наименованию. В качестве ответа формируется список найденных товаров в формате JSON.
  3. "Info" - метод типа POST, который в теле запроса принимает параметр "GUID" значение уникального идентификатора товара, а в ответ формирует список значений реквизитов товара (артикул, полное наименование, код и описание).

В конфигураторе это выглядит следующим образом:

В описании корня HTTP-сервиса самой важной настройкой является свойство "Корневой URL", которое отвечает за формирование URL-адреса, по которому мы будем обращаться ко всем методам этого сервиса.

Далее идут свойства шаблонов URL ("GetProducts", "Info" и "MainPage"). Шаблоны также отвечают за формирование URL, по которому мы будем обращаться к методам, но уже для каждого отдельного HTTP-метода сервиса. Если мы посмотрим на скриншоты выше, то понять принцип формирования адреса для каждого из методов не составит особого труда:

Для каждого шаблона URL был добавлен метод. Для одного шаблона может быть несколько методов, но в нашем примере схема сервиса упрощенная. Для каждого шаблона добавлено по одному методу без описания каких-либо дополнительных параметров в шаблоне URL.

На скриншотах выше Вы могли видеть свойства методов "GetProducts", "GetInfo" и "get". Первые два имеют тип POST и просто так к ним обратиться по их URL в браузере нельзя. По адресам этих методов нужно отправить соответствующие параметры методом POST, об этих параметрах мы говорили в самом начале. Метод "get" шаблона "MainPage" имеет тип "GET" и при обращении возвращает сформированную HTML-страницу. К этому методу мы можем обратиться непосредственно в адресной строке браузера.

Шаблон HTML-страницы хранится в общем макете с типом HTML-документ. При обращении к методу мы программно получаем текст страницы и возвращаем его в качестве ответа:

Функция MainPageget(Запрос)
	
	МакетСтраницыПоиска = ПолучитьОбщийМакет("ГлавнаяСтраница");
	
	Ответ = Новый HTTPСервисОтвет(200);
	// Для корректного отображения веб-страницы установим тип содержимого как HTML
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	

	// Получаем исходный код страницы и делаем подмену имени сервера
	// в ссылках на методы HTTP-сервиса, чтобы AJAX-запросы отработали
	// корректно
	ТекстСтраницы = МакетСтраницыПоиска.ПолучитьТекст();
	ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "{ServerName}", Константы.ИмяСервера.Получить());
	ТекстСтраницы = СтрЗаменить(ТекстСтраницы, "{DatabaseName}", Константы.ИмяБазы.Получить());
	
	Ответ.УстановитьТелоИзСтроки(ТекстСтраницы);
	
	Возврат Ответ;
	
КонецФункции

В ответе обязательно нужно указать тип возвращаемого содержимого, иначе браузер отобразит HTML-разметку страницы. Обработчики для методов "GetProducts" и "GetInfo" показаны на следующем листинге:

Функция ProductsGetProducts(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	
	// Обрабатываем присланный текст запроса для поиска номенклатуры
	ТекстПоискаНоменклатуры = "";
	Попытка
		ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
		ИмяСвойства = Неопределено;
		ЗначениеСвойства = Неопределено;
		Пока ЧтениеJSON.Прочитать()
			И (ИмяСвойства = Неопределено ИЛИ ЗначениеСвойства = Неопределено) Цикл
			Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта Тогда
				// Начинаем обрабатывать объект со строкой запроса	
			ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда
				ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
			ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
				ЗначениеСвойства = ЧтениеJSON.ТекущееЗначение;
			КонецЕсли;
		КонецЦикла;
	Исключение
		// Если при обработке возникает ошибка, то считем, что отбор не был установлен	
	КонецПопытки;
	Если ИмяСвойства = "query"
		И ЗначениеЗаполнено(ЗначениеСвойства) Тогда
		ТекстПоискаНоменклатуры = Строка(ЗначениеСвойства);	
	КонецЕсли;
	
	// Получаем список номенклатуры для отправки на страницу в формате JSON
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 10
		|	Номенклатура.Ссылка КАК Ссылка,
		|	Номенклатура.Код КАК Код,
		|	Номенклатура.Наименование КАК Наименование,
		|	Номенклатура.Артикул КАК Артикул,
		|	Номенклатура.ПолноеНаименование КАК ПолноеНаименование,
		|	Номенклатура.Описание КАК Описание
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Наименование ПОДОБНО &Наименование
		|
		|УПОРЯДОЧИТЬ ПО
		|	Наименование"; 	
	Запрос.УстановитьПараметр("Наименование", "%"+ТекстПоискаНоменклатуры+"%");	
	РезультатЗапроса = Запрос.Выполнить();	
	Выборка = РезультатЗапроса.Выбрать();
		
	Попытка
		ВремФайл = ПолучитьИмяВременногоФайла("json");
		ЗаписьJSON = Новый ЗаписьJSON;
		ЗаписьJSON.ОткрытьФайл(ВремФайл, "UTF-8");
		ЗаписьJSON.ЗаписатьНачалоМассива();
		Пока Выборка.Следующий() Цикл
			ЗаписьJSON.ЗаписатьНачалоОбъекта();
			
			ЗаписьJSON.ЗаписатьИмяСвойства("GUID");
			ЗаписьJSON.ЗаписатьЗначение(Строка(Выборка.Ссылка.УникальныйИдентификатор()));
					
			ЗаписьJSON.ЗаписатьИмяСвойства("Name");
			ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Выборка.Наименование));
			
			ЗаписьJSON.ЗаписатьКонецОбъекта();
		КонецЦикла;
		ЗаписьJSON.ЗаписатьКонецМассива();
		ЗаписьJSON.УстановитьСтроку();
		ЗаписьJSON.Закрыть();
		
		Текст = Новый ТекстовыйДокумент;
		Текст.Прочитать(ВремФайл, "UTF-8");
		СтрокаJSON = Текст.ПолучитьТекст();
	Исключение
		СтрокаJSON = "Ошибка: " + ОписаниеОшибки();
	КонецПопытки;
	
	Ответ.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ВремФайл));
	
	Попытка
		УдалитьФайлы(ВремФайл);
	Исключение
	КонецПопытки;
	
	Возврат Ответ;
	
КонецФункции

Функция Infoget(Запрос)
	Ответ = Новый HTTPСервисОтвет(200);
	
	// Обрабатываем присланный в теле запроса GUID товара
	ТекстGUID = "";
	Попытка
		ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
		ИмяСвойства = Неопределено;
		ЗначениеСвойства = Неопределено;
		Пока ЧтениеJSON.Прочитать()
			И (ИмяСвойства = Неопределено ИЛИ ЗначениеСвойства = Неопределено) Цикл
			Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта Тогда
				// Начинаем обрабатывать объект со строкой запроса	
			ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда
				ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
			ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
				ЗначениеСвойства = ЧтениеJSON.ТекущееЗначение;
			КонецЕсли;
		КонецЦикла;
	Исключение
		// Если при обработке возникает ошибка, то считем, что отбор не был установлен	
	КонецПопытки;
	Если ИмяСвойства = "GUID"
		И ЗначениеЗаполнено(ЗначениеСвойства) Тогда
		ТекстGUID = Строка(ЗначениеСвойства);	
	КонецЕсли;
	
	СтрокаJSON = "{ }";
	НоменклатураGUID = Неопределено;
	Попытка
		НоменклатураGUID = Новый УникальныйИдентификатор(ТекстGUID);		
	Исключение 
	КонецПопытки;
	
	// Если GUID корректный, то формируем ответ в формате JSON со значениями 
	// реквизитов номенклатуры
	Если ЗначениеЗаполнено(НоменклатураGUID) Тогда
		Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(НоменклатураGUID);	
		Попытка
			ВремФайл = ПолучитьИмяВременногоФайла("json");
			ЗаписьJSON = Новый ЗаписьJSON;
			ЗаписьJSON.ОткрытьФайл(ВремФайл, "UTF-8");
			ЗаписьJSON.ЗаписатьНачалоМассива();
			
			ЗаписьJSON.ЗаписатьНачалоОбъекта();
			
			ЗаписьJSON.ЗаписатьИмяСвойства("Art");
			ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Номенклатура.Артикул));
			
			ЗаписьJSON.ЗаписатьИмяСвойства("FullName");
			ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Номенклатура.ПолноеНаименование));
			
			ЗаписьJSON.ЗаписатьИмяСвойства("Code");
			ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Номенклатура.Код));
			
			ЗаписьJSON.ЗаписатьИмяСвойства("Descr");
			ЗаписьJSON.ЗаписатьЗначение(СокрЛП(Номенклатура.Описание));
			
			ЗаписьJSON.ЗаписатьКонецОбъекта();
			
			ЗаписьJSON.ЗаписатьКонецМассива();
			ЗаписьJSON.УстановитьСтроку();
			ЗаписьJSON.Закрыть();
			
			Текст = Новый ТекстовыйДокумент;
			Текст.Прочитать(ВремФайл, "UTF-8");
			СтрокаJSON = Текст.ПолучитьТекст();
			Ответ.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ВремФайл));
		Исключение
			Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
		КонецПопытки;
	Иначе
		Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
	КонецЕсли;
	
	Возврат Ответ;
	
КонецФункции

Код далеко не идеален и такой же примитивный, как и весь сервис :) 1C:Совместимо с таким подходом мы вряд ли получим.

Расписывать выполняемые обработчиками действия особого смысла нет, т.к. по оставленным комментариям в коде логика работы должна быть ясна.

Это и есть вся реализация HTTP-сервиса. Давайте посмотрим какой функционал скрывается на HTML-странице и как он реализован.

DEFAULT.HTML

Главная страница нашего HTTP-сервиса содержим элемент SELECT для выбора товара и поиска по вводу. О том как удалось элемент SELECT сделать редактируемым рассказывать здесь не буду, об этом Вы можете прочитать в статье "Редактируемый SELECT" в соседнем блоге. Здесь же предлагаю рассмотреть выполнение асинхронных вызовов методов HTTP-сервиса со страницы с помощью AJAX. Если Вам интересен полный текст разметки страницы и используемый JavaScript-код, то в верху страницы есть ссылка на файл тестовой конфигурации с описываемым примером.

И так, первый асинхронный вызов обращается к методу "GetProducts" для получения списка товаров по введенной строке запроса. Запрос выполняется каждый раз при изменении текста в поле ввода. С использованием JQuery асинхронный запрос выполняется проще простого:

$.ajax({
    type: "POST",
    contentType: "application/json;charset=utf-8",
    url: "http://{ServerName}/{DatabaseName}/hs/PrimitiveService/products",
    data: "{ \"query\": \"" + query + "\" }",
    dataType: "json",
    success: function (queryResult) {
        try {
            for (var i = 0; i < queryResult.length; i++) {
                var item = queryResult[i];
                originalSelect.editableSelect('add', function () {

                    $(this).attr('data-value', item.GUID);
                    $(this).text(item.Name);

                })
            }
        } catch (e) {
            alert('Wow! Error!!!');
        }
    }
});

В качестве ответа мы ожидаем текст в формате JSON, поэтому параметр "dataType" установлен в "json". В параметре "data" описываем произвольный объект со свойством "query" и текстовым значением, введенным для поиска на странице. В параметре "url" указан адрес метода HTTP-сервиса. Если запрос выполнен успешно, то вызывается событие "success", а в вызываемой функции первым параметром передается объект, полученный от сервера. Далее в функции выполняется обработка полученных данных и заполнение списка выбора.

Второй асинхронный запрос используется при изменении товара. Запрос обращается по адресу метода "GetInfo" и при успешном выполнении помещает полученные значения на страницу. Листинг кода запроса следующий:

$.ajax({
    type: "POST",
    contentType: "application/json;charset=utf-8",
    url: "http://{ServerName}/{DatabaseName}/hs/PrimitiveService/info",
    data: "{ \"GUID\": \"" + GUID + "\" }",
    dataType: "json",
    success: function (queryResult) {
        try {
            var Code = queryResult[0].Code;
            var FullName = queryResult[0].FullName;
            var Art = queryResult[0].Art;
            var Descr = queryResult[0].Descr;

            $('#ArtValue').text(Art);
            $('#CodeValue').text(Code);
            $('#DescrValue').text(Descr);
            $('#CodeFullNameValue').text(FullName);
        } catch (e) {
            // Обработка ошибки
        }
    }
});

При необходимости Вы можете подробнее изучить тему работы с JavaScript, JQuery и AJAX на сайте metanit.com, рекомендую.

Вместо заключения

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

Исходный код примера Вы можете найти в репозитории на GitHub.

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

Спасибо за внимание и до скорых встреч!

Другие ссылки

Отдельно выделю серию статей от Дмитрия Сидоренко:

Это отличный путь в мир HTTP-сервисов!

165

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. dsdred 1224 12.09.19 07:27 Сейчас в теме
Юрий, спасибо.
Я тебя кстати в статье HTTP Сервисы: Путь к своему сервису. Часть 4 упоминал тоже ;))

Вот эту статью твою приводил в пример
Передача больших пакетов через веб-сервисы
YPermitin; +1 Ответить
2. YPermitin 5201 12.09.19 07:32 Сейчас в теме
(1) спасибо огромное :)

А я про 4 часть забыл совсем. Надо бы ее тоже добавить в список ссылок.
3. FreeArcher 87 12.09.19 08:14 Сейчас в теме
А как у вас выполняется авторизация в 1С?
YPermitin; +1 Ответить
5. YPermitin 5201 12.09.19 08:48 Сейчас в теме
(3) по-разному.

Можно и обычную BASIC-аутентификации использовать дальше.
6. FreeArcher 87 12.09.19 10:34 Сейчас в теме
(5) А разве при BASIC-аутентификации проблемы с CORS запросами не будут возникать?
Вобщем меня интересует, как решить проблему CORS без использования проксирующего сервера. Вроде как можно настроить apache но у меня не получилось.

Может есть работающая инструкция или может это тема будущей статьи будет?
4. 3vs 12.09.19 08:30 Сейчас в теме
Да это, фактически, микро Яндекс! :-)
jif; YPermitin; +2 Ответить
7. Sedaiko 244 12.09.19 11:49 Сейчас в теме
А зачем генерировать полный URL в запросе?
url: "http://{ServerName}/{DatabaseName}/hs/PrimitiveService/products",

Относительный путь отлично работает, проверено
8. Steelvan 12.09.19 12:40 Сейчас в теме
От жуквери народ отучать надо, на чистом js примеры давай :)
YPermitin; +1 Ответить
11. YPermitin 5201 12.09.19 13:12 Сейчас в теме
(8) так и до Asm'а можно спуститься)))
16. logos 145 13.09.19 15:03 Сейчас в теме
(8) На правах рекламы, в моей публикации во внешней обработке есть пример асинхронных xhr запросов на чистом js.
9. trntv 25 12.09.19 13:00 Сейчас в теме
Извините за критику, но после такой публикации хочется просить администрацию инфостарта о модерации кода,

1. Зачем временные файлы?
ЗаписьJSON.Закрыть();
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ВремФайл, "UTF-8");
СтрокаJSON = Текст.ПолучитьТекст();

Так же проще:
СтрокаJSON = ЗаписьJSON.Закрыть();

2. Получение значений реквизитов через точку по ссылке, мне казалось так уже никто не делает

3. Попытки при любом сомнении в результате?
Попытка
	НоменклатураGUID = Новый УникальныйИдентификатор(ТекстGUID);		
Исключение 
КонецПопытки;

Уберите все попытки, они у вас или не имеют смысла или можно написать код без использования попытки.

4. С JSON же работать очень просто:
ЗаписьJSON= Новый ЗаписьJSON;
ЗначенияРеквизитовЭлемента = Новый Структура("Art, FullName, Code, Descr");
ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовЭлемента, Выборка);
ЗаписатьJSON(ЗаписьJSON, ЗначенияРеквизитовЭлемента);
СтрокаJSON = ЗаписьJSON.Закрыть();

Зачем горы кода. Надо "ЗаписатьНачалоМассива", создайте Новый Массив и запихните туда структуру. Функция ЗаписатьJSON все отлично преобразует сама. Я по умолчанию пропускаю ее через процедуру преобразующую таблицу значений в массив структур. Тогда очень удобно отправлять результат запроса сразу в JSON.

Попытки, временные файлы, множество неявных запросов и вы превратили элементарный молниеносный http-сервис в медленного монстра. Грустно, особенно когда понимаешь, что цель публикации научить чему-то программистов. Еще раз извините, не сдержался.
mivari; yufan; WizaXxX; pfilyk; logos; A_Max; acanta; Yashazz; triviumfan; tori131313; Сто27001; YPermitin; +12 Ответить
10. YPermitin 5201 12.09.19 13:05 Сейчас в теме
(9) примитивному сервису - примитивный код :)

P.S. сервис на коленке, которому уже почти 5 лет. Думаю даже и обсуждение можно оставить, сейчас бы я все сделал по другому, особенно если для прода :) Собеседование я у Вас не прохожу)))
acanta; Климов Сергей; +2 Ответить
12. Yashazz 2860 12.09.19 21:51 Сейчас в теме
(10) Ну это ж не повод выкладывать устаревшее наколеночное как пример к подражанию. А его так и воспримут, судя по раскрутке статьи. Соглашусь с критикой. Тем более что и статей на эту тему полно, не особо ясно, зачем была ещё одна.
yufan; YPermitin; +2 Ответить
13. YPermitin 5201 12.09.19 21:52 Сейчас в теме
14. 3vs 13.09.19 06:19 Сейчас в теме
(13)"Обидеть художника может каждый..."! :-)

Злобный народ пошёл какой-то!
Человек показывает интересное решение, нет,
надо задавить своей учёностью...

Критикуешь, как говорится, предлагай, выкатывайте
свои статьи!
FirePyres; u_n_k_n_o_w_n; +2 Ответить
17. AMS_Guskov_VL 16.09.19 11:13 Сейчас в теме
(14) уже давно на ИС аналог гита (или сам гит), для открытых разработок, чтобы "злобные комменты" о том что кто-то не умеет кодить решались коммитами, а не двумя разворотами экрана =)
19. 3vs 16.09.19 12:06 Сейчас в теме
(17)Это кирпич в чей огород, Юрия? :-)
YPermitin; +1 Ответить
20. YPermitin 5201 16.09.19 17:36 Сейчас в теме
(19) стоило показать код пятилетней (точно ее помню) давности, теперь все считают что я так и пишу :D

Пусть он такой тут и останется. Мои ошибки - мое богатство:)
3vs; acanta; +2 Ответить
21. AMS_Guskov_VL 17.09.19 03:28 Сейчас в теме
(19)Это идея для Инфостарта. Было приколько иметь на сайте аналог pasteBin (в меньшей степени) или CodePen, что бы можно было размещать не стены кода, но и "играться" с ним. Зачем мне кидаться камнями тут, удобнее это на стаковерфлоу =)
22. 3vs 17.09.19 06:59 Сейчас в теме
(21)
но и "играться" с ним.

Играться надо дома! :-)
А вот иметь на ИС аналог гита для разработчиков 1С на серверах внутри России, это правильная идея,
только ведь у нас, как правило, бесплатного ничего нет...
15. FirePyres 42 13.09.19 07:41 Сейчас в теме
18. Rustig 1198 16.09.19 11:53 Сейчас в теме
(0) реально ли организовать интернет-продажи через заказы в розничном магазине? то есть в магазине есть продажи в розницу, магазин имеет интернет-сайт, запилили в 1С обмен заказами с сайтом. Уперлись в онлайн-оплату и определение актуальных остатков.
В момент оформления заказа на сайте и онлайн-оплате на кассе может стоять человек с тем же товаром.Поэтому после оплаты заказа на сайте, может выясниться,что остаток в магазине отличается...
Получение остатков на сайте, думаю, делать через http-сервис.
Но организационно вижу пробел.
Есть мнение?
23. DrZombi 29 17.09.19 08:14 Сейчас в теме
24. Rustig 1198 17.09.19 18:31 Сейчас в теме
(0) я лишь хотел учочнить своим предыдущим постом, был ли у вас опыт развертывания http-сервиса для обмена с 1с заказами с сайта или получения остатков товаров для интернет-сайтов?
YPermitin; +1 Ответить
25. YPermitin 5201 21.09.19 08:09 Сейчас в теме
(24) да, такой опыт есть. Вариант рабочий, но есть различные тех. и организационные ограничения.

Я знаю коробочное решение, которое так и работает :)
Оставьте свое сообщение

См. также

Создание асинхронных виджетов 81

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Описание нескольких способов создания асинхронных виджетов для 1С:Предприятия. Рассматриваются способы с использованием HTTP-сервисов и фоновых заданий.

16.10.2019    2323    YPermitin    15       

Простой способ опубликовать базу 1C из дома в интернет, когда Ваш провайдер этого не обеспечивает (3G, 4G модем и т.п.) 41

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB Облачные сервисы, хостинг

Если у Вас возникла потребность опубликовать из дома во всемирную паутину базу 1С (например, для тестирования), в т.ч. интерфейс OData, HTTP или Web-сервисы, а интернет-провайдер (например, 3G Мегафон) не предоставляет возможности инициировать соединения извне, то в конце статьи Вы найдете простой, быстрый и условно-бесплатный способ это сделать.

14.10.2019    2576    uno-c    22       

Свой веб интерфейс к 1С: побеждаем CORS на IIS, сохраняя авторизацию 57

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) WEB Администрирование данных 1С

Если "веб морда" расположена не по тому же адресу, что и публикация 1С (что часто бывает, например, при разработке, публикация 1С на http://localhost/1c, а разрабатываемое веб-приложение на http://localhost:8080) или, например, мы заходим на веб приложение то по ip адресу, то по имени сервера, или просто веб сервер и сервер, на котором опубликована 1С - это разные сервера, то для большинства запросов от браузера к 1С срабатывает политика CORS, которая заключается в том, что браузер сначала посылает запрос OPTIONS, на который сервер должен ответить определенным образом, заголовками, содержащими разрешения, а потом уже (если разрешение есть), браузер посылает основной запрос. В случае, когда в публикации 1С (default.vrd) жестко прописан логин и пароль, разрулить ситуацию можно средствами 1С. В случае же, когда нужно сохранить авторизацию (или используется стандартный интерфейс odata), начинаются проблемы.

20.08.2019    3232    Fragster    7       

Вывод отчетов из Штрих-М Торговое предприятие 5 на кассовое ПО Кассир 5 через веб-сервис 3

Статья Системный администратор Программист Нет файла v8 1cv8.cf Розничная и сетевая торговля (FMCG) Россия УУ Windows Розничная торговля Бесплатно (free) WEB

Универсальный механизм вывода отчетов товароучетной системы Штрих-М Торговое предприятие в кассовое ПО Кассир 5 посредством веб-сервиса.

14.08.2019    984    Van2507    1       

Совсем простой обмен HTTP, 2 функции 60

Статья Программист Нет файла v8 Бесплатно (free) WEB

Функция для вызова рест-сервиса и функция для разбора результата. Быстро, просто, универсально.

12.08.2019    3671    Yashazz    15       

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery. Продолжение 53

Статья Программист Расширение (cfe) v8 1cv8.cf Бесплатно (free) WEB

Получение изображений из информационной базы и отправка файлов через "фронт" на HTML/CSS/JS.

08.08.2019    3347    Sedaiko    1       

1Script.Web. Интернет-приложения на языке 1С 119

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    11798    Evil Beaver    32       

Неверные остатки на сайте битрикс 2

Статья Программист Нет файла v8 УТ11 Бесплатно (free) WEB

Исправление процедуры выгрузки остатков на сайт битрикс из УТ 11

25.04.2019    1856    distorshion    4       

Отправка файлов через SOAP. SOAP with attachments, MTOM 38

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB

В продолжение «своеобразной» поддержки 1С протокола SOAP, описанной в https://infostart.ru/public/965259/, опишу еще одну особенность. 1С не поддерживает возможность отправки файлов-вложений. Для решения этой проблемы пришлось самостоятельно писать формирование пакетов SOAP и разбор ответов сервера.

18.04.2019    2867    mysm    2       

HTML-клиент у конфигурации 1С 139

Статья Программист Нет файла v8 Бесплатно (free) WEB

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

17.04.2019    11037    Smaylukk    119       

Парсинг сайтов из 1С на примере ломбарды.рф с помощью XPATH для ДокументDOM 67

Статья Программист Нет файла v8 Бесплатно (free) WEB

На всякую хитрую гайку всегда найдется болт с резьбой (с)

01.04.2019    7297    starik-2005    33       

Логируй больше! 1С + UPD + GELF + Graylog 28

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Администрирование данных 1С WEB Разработка

Наличие производительной платформы управления логами - это жизненно важный элемент в ландшафте систем с высокой активностью. Рассмотрим один из подходов логирования активности систем на платформе 1С в Graylog.

26.02.2019    5290    Lars Ulrich    15       

Создание телеграм бота с гугл авторизацией, обратными вызовами и уведомлениями об обновлении через сервер-маршрутизатор 157

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Статья детально рассказывает обо всех аспектах настройки телеграм бота, работающего через сервер-маршрутизатор посредством обратных вызовов. Приведены примеры работы отправки/исправления сообщений, отправки файлов, работы с внутренними и встроенными запросами. Создание клавиатуры. Авторизация пользователей через gmail.

07.11.2018    17484    🅵🅾️🆇    40       

Мой опыт небольшого проекта с веб-сервисами (Часть 2) 20

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Продолжение публикации по веб-сервису для реализации странички с выводом данных.

05.10.2018    4307    alex_bitti    0       

HTTP Сервисы: Путь к своему сервису. Часть 4 102

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Практика программирования

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 3». В предыдущих частях мы уже о многом поговорили. В этой части поговорим про размер сообщений, о файлах, о порциях и немножко, о регламентах.

1 стартмани

28.09.2018    12598    15    dsdred    11       

Как запустить работу Google Maps в поле HTML формы 1С? 25

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования WEB

Как справиться с передачей события в поле HTML, если надо передать данные. Переход на новую версию Google Maps.

26.09.2018    6420    Green2    10       

HTTP Сервисы: Путь к своему сервису. Часть 3 133

Инструменты и обработки Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика Практика программирования

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    15070    29    dsdred    13       

HTTP Сервисы: Путь к своему сервису. Часть 2 120

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf ERP2 УТ11 КА2 Абонемент ($m) Инструментарий разработчика Практика программирования

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 1». В этой части будет "Микс" из OData+HTTP-Сервис(Get)+СКД. Наш пример будет работать как в браузере, так и в написанной нами обработке. Работать будем с разными версиями платформ.

1 стартмани

13.08.2018    16686    17    dsdred    0       

Мой опыт небольшого проекта с веб-сервисами (Часть 1) 22

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Хочу поделиться своим опытом использования веб-сервисов на небольшом проекте, который в принципе расширяем до чего-нибудь более существенного.

08.08.2018    6492    alex_bitti    33       

HTTP Сервисы: Путь к своему сервису. Часть 1 260

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Практика программирования WEB

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    35558    15    dsdred    22       

Создание web-площадки на технологиях 1С, или как Водоканал сделал "Личный кабинет потребителя" 54

Статья Программист Нет файла v8 Энергетика и ЖКХ УУ Управление взаимоотношениями с клиентами (СRM) Дебиторская и кредиторская задолженность Бесплатно (free) WEB

Гончаров Максим делится опытом создания «Личного кабинета потребителя» на сайте водоканала. Он описывает архитектуру системы и объясняет, какую роль в ней играют технологии: «Битрикс», OData, веб-сервисы, «1С:БСП». Также в статье раскрываются возможности использования подсистемы «Анкетирование» в «1С:БСП» как конструктора документов.

25.06.2018    10534    maxx    31       

На что действительно способны HTTP-сервисы 176

Статья Программист Нет файла v8 Бесплатно (free) WEB

В статье я собираюсь не только рассказать вам про HTTP-сервисы 1С, но и показать много прикольных слайдов с картинками. Я думаю, будет весело, и вы найдете для себя что-то полезное.

14.06.2018    23416    dalgaso2010    45       

Подготовка тестового контура с помощью gitlab-ci и Яндекс.Диска 18

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB

В статье описан пример использования gitlab-ci для копирования продуктовой базы в Яндекс.Диск и разворачивания на другом контуре.

04.05.2018    7245    pallid    0       

Запуск Apache 2.4 с модулем 1С внутри Docker контейнера 87

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) Администрирование данных 1С WEB docker Apache

Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе. Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии. Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.

04.04.2018    17954    petr.myazin    35       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.6 2

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу. PHP-Скрипт публикации выборки данных сайта работающего на WordPress.

19.03.2018    5945    osivv    0       

Интеграция 1С УТ 11.2 и Битрикс. Настройка выгрузки старой цены для интернет-магазина 8

Статья Программист Нет файла v8 УТ11 Россия УУ Розничная торговля Бесплатно (free) WEB

Настройки позволят вытащить информацию о старой цене из 1С и передать её в CMS Битрикс.

24.01.2018    7943    Consultant_1C    2       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.3 3

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы УУ Windows Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу. PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

09.01.2018    6824    osivv    0       

Готовим Soap для Web-сервисов. Рецепты 131

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) WEB

В статье описаны различные варианты обмена данными с web-сервисами по протоколу Soap, основанные на личном опыте.

28.12.2017    28813    987ww765    27       

УкрПочта - групповая проверка трек-номеров 9

Статья Программист Нет файла v8 Украина Бесплатно (free) WEB

Необходимо в течение относительно небольшого промежутка времени получить актуальное состояние по трек номеру в системе УкрПочта большого количества сообщений? Тогда во второй раз воспользуемся неофициальным парсингом страницы сервиса УкрПочты.

23.10.2017    6193    abavas    2       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) 5

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы Windows Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.

16.10.2017    8734    osivv    3       

1С, oauth2, Google API и Google Merchant. Сбор данных и парсинг 18

Статья Программист Нет файла v8 УТ10 Россия Бесплатно (free) Практика программирования WEB

Всем привет. Стала задача, собрать данные с Google Merchants и внести их в 1С, для более детального анализа того, что сейчас показывается, что нет и какие проблемы при этом есть. Если кому это интересно, прошу под кат.

14.09.2017    13208    Mi11er    8       

Отслеживание почтовых сообщений парсингом страницы (УкрПочта) 5

Статья Программист Нет файла v8 Украина Бесплатно (free) WEB

Когда официальное API есть, но по факту не работает. Возвращаемся к старому способу - парсинг страниц.

17.07.2017    7792    abavas    2       

XPath и пространства имен на примере разбора файла ответа сервиса геокодирования Яндекс 34

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования WEB

Есть некоторые нюансы разбора с помощью Xpath xml-файла, в котором используются несколько пространств имен. Приведен разбор такого файла на примере файла ответа сервиса геокодирования Яндекс.

14.04.2017    9846    brr    6       

PHP OData драйвер 17

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Удобный доступ к OData данным через SQL синтаксис

03.04.2017    8244    virtex3    4       

Online телефонный справочник из 1С: Зарплата и управление персоналом 34

Статья Системный администратор Программист Нет файла v8 ЗУП3.x Россия Управление персоналом (HRM) Бесплатно (free) WEB

В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

10.03.2017    19119    ruha    14       

Веб-сервисы и 1С: «Здравствуй, Name», время-деньги и «Жизнь» 75

Статья Программист Нет файла v8 Бесплатно (free) WEB

Несколько статей о создании веб-сервисов на платформе 1С

09.03.2017    21154    hayroff    11       

Интерактивный ввод капчи 26

Статья Программист Нет файла v8 Бесплатно (free) WEB

Краткое описание того, что делать, если нужно получить некоторые данные с определенного сайта, требующего от пользователя ввода текстовой капчи.

17.02.2017    8532    gaabora    3       

Отправка PUT запроса средствами 1С 8.3 65

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования WEB

HTTP запрос с использованием метода PUT средствами 1С 8.3 на практике - проблема и решение

16.02.2017    20430    hspeed79    16       

Нагрузочное тестирование сервера 1С при использовании WEB сервисов 51

Статья Системный администратор Программист Нет файла v8 ИТ-компания Бесплатно (free) Производительность и оптимизация (HighLoad) Внешние источники данных WEB

Проведение нагрузочного тестирования WEB-сервисов, развернутых на платформе 1С. Целью тестирования является ознакомление с возможностями платформы 1С при работе с большим количеством запросов через опубликованные WEB сервисы на IIS 7.5

01.02.2017    23048    BraunAlex    34       

Еще немного об обмене на web-сервисах 18

Статья Программист Нет файла v8 Россия Бесплатно (free) WEB Перенос данных из 1C8 в 1C8

Расскажу о собственном опыте по передаче данных через web-сервисы

26.08.2016    10586    savostin.alex    8       

HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие 123

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB Практика программирования Универсальные функции

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

25.07.2016    39610    serg_infostart    19       

SOAP-сервисы с предварительной Cookie-аутентификацией 16

Статья Программист Нет файла v8 Бесплатно (free) WEB

Платформа 1С не позволяет использовать cookie при работе со статичной WS-ссылкой или WS-прокси. Вследствие этого работа со многими веб-сервисами крупных поставщиков (например, DHL) напрямую невозможна.

05.06.2016    9086    blackschool    1       

Google Analytics API, Oauth2.0 и 1c8 51

Статья Системный администратор Нет файла v8 1С:Франчайзи, автоматизация бизнеса Windows Бесплатно (free) Практика программирования WEB

Обращение к Google Analytics API, Протокол Oauth 2.0 и запросы от 1С:8 без авторизации пользователя

02.05.2016    21805    Ольга_tmp    18       

HTTP-сервисы для тех, кто ничего не понимает в WEB 427

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Если вы ничего не понимаете в WEB технологиях и такие слова, как json, get, post и прочее для вас ничего не значат и вы просто заядлый 1С-ник до мозга костей, но вам кровь из носу надо подружить 1С со сторонними приложениями или сайтом, то эта статья для вас

21.04.2016    101155    YAGolova    55       

Дай дернуть-2! Обращение к веб-сервисам с помощью подручных средств 97

Статья Программист Нет файла v8 Бесплатно (free) WEB

Как показала практика, о веб-сервисах знает почти каждый программист, но о том, как их готовить, - весьма ограниченный круг. Давайте интереса ради замутим сервис и дернем его с помощью простого подручного средства - "Бумеранг"!

21.04.2016    30065    starik-2005    32       

Отладка обмена с web-сайтом на Битрикс 71

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) WEB

Часто возникает необходимость отладки обмена между 1С и web-сайтом на Битрикс. Разберемся, какие инструменты есть для этого...

04.04.2016    15017    vital1c    6