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

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

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

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

Пошаговый пример создания простейшего 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-сервисов!

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

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

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

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

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

Может есть работающая инструкция или может это тема будущей статьи будет?
4. 3vs 12.09.19 08:30 Сейчас в теме
Да это, фактически, микро Яндекс! :-)
jif; YPermitin; +2 Ответить
7. Sedaiko 327 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 8272 12.09.19 13:12 Сейчас в теме
(8) так и до Asm'а можно спуститься)))
16. logos 182 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-сервис в медленного монстра. Грустно, особенно когда понимаешь, что цель публикации научить чему-то программистов. Еще раз извините, не сдержался.
Fox-trot; Leon75; vladimirmatancev; purgin; mivari; yufan; WizaXxX; pfilyk; logos; A_Max; acanta; Yashazz; triviumfan; tori131313; Сто27001; YPermitin; +16 Ответить
10. YPermitin 8272 12.09.19 13:05 Сейчас в теме
(9) примитивному сервису - примитивный код :)

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

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

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

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

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

Я знаю коробочное решение, которое так и работает :)
26. adhocprog 1177 24.10.19 14:48 Сейчас в теме
Автору огромное спасибо!
Побольше бы таких статей )
Оставьте свое сообщение

См. также

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция Промо

Практика программирования WEB v7.7 v8 Бесплатно (free)

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    53544    0    Serginio    33    

История создания успешной системы чат-ботов на 1С

WEB v8 Бесплатно (free)

Использование чат-ботов в мессенджерах позволяет автоматизировать многие сложные бизнес-процессы путем диалога с системой через виртуального собеседника. О том, как создать универсальную систему ботов с бэкендом на 1С, работающую в Telegram, Viber и Facebook Messenger одновременно, на конференции Infostart Event 2019 Inception рассказал программист-фрилансер Константин Гейнрих.

21.05.2020    3563    0    CyberCerber    8    

Парсинг html страниц с выводом информации через JavaScript с использованием Selenium

WEB v8 1cv8.cf Бесплатно (free)

Есть девочки как девочки, есть мальчики как мальчики, есть сайтики как сайтики, но странички их обманщики. В целях сохранить информацию, от автоматизированного сбора, многие ресурсы пытаются защитить ее. Один из таких способов - вывод информации на странице через JavaScript. При получении такой страницы в 1С, JavaScript не успевает вывести необходимые данные, и в 1с получаем практически пустую страницу. В статье приведу пример разработки, для парсинга таких страниц, без регистрации и смс.

20.05.2020    1256    0    platonov.e    16    

Интеграция 1С и CMS WordPress посредством Rest API сайта. Шаг третий, WooCommerce, публикация категорий товаров

WEB v8 1cv8.cf Бесплатно (free)

Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции публикации категорий товаров в магазин WooCommerce, с комментариями внутри.

13.05.2020    1172    0    osivv    3    

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

WEB Управление персоналом (HRM) Управление персоналом (HRM) v8 ЗУП3.x Россия Бесплатно (free)

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

10.03.2017    23972    0    ruha    14    

Интеграция 1С и CMS WordPress посредством Rest API сайта. Шаг второй, публикация картинок

WEB v8 Бесплатно (free)

Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции передачи фото из 1С, с комментариями внутри.

13.05.2020    853    0    osivv    0    

Интеграция Camunda BPM и 1С

WEB Интеграция v8 Бесплатно (free)

Быстрый старт. Только практические примеры. Установка, запуск и публикация бизнес-процесса на сервере Camunda BPM. Управление бизнес-процессами из 1С при помощи Camunda REST API.

12.05.2020    834    0    zhichkin    4    

Интеграция 1С и CMS WordPress посредством Rest API сайта. Первый шаг

WEB v8 Россия Бесплатно (free)

Интеграция 1С и CMS WordPress посредством функционала Rest API. Используем только язык программирования 1С и штатный функционал Rest API предоставляемый CMS, без дополнительных библиотек и плагинов. Процедуры и функции 1С с комментариями внутри.

28.04.2020    2349    0    osivv    23    

Кэширование COM-соединения. Три способа Промо

Практика программирования Перенос данных из 1С7.7 в 1C8.X Внешние источники данных WEB v8 Россия Бесплатно (free)

Статья о трех способах кэширования COM-соединения в 1С:Предприятии 8.x.

11.04.2013    39565    0    YPermitin    33    

Выразительный Web API

WEB v8 Бесплатно (free)

Теория разработки Web API с ожидаемым поведением, за который не будет стыдно за пределами мира 1С.

27.04.2020    3598    0    fr13    19    

Хранение статистики публикаций автора сообщества Инфостарт ® (мобильное приложение И ++)

Мобильная разработка WEB v8 1cv8.cf Бесплатно (free)

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

24.04.2020    1148    0    capitan    13    

Интеграция УАТ с топливными сервисами

WEB v8 1cv8.cf Автомобили, автосервисы Бесплатно (free)

Интеграция конфигурации Управление автотранспортом с топливными веб-сервисами.

21.04.2020    5986    0    RPGrigorev    2    

Помощник работы с VirtueMart Промо

WEB Розничная торговля Розничная торговля v8 УТ10 УПП1 Россия Бесплатно (free)

Обработка для обмена данными с интернет-магазином на базе VirtueMart. Позволяет выгружать товары с изображениями и загружать заказы покупателей. Управлять интернет-магазином теперь стало просто!

19.04.2012    23103    1    salexdv    13    

Интеграция 1С с веб-сервисами Лукойл ЛИКАРД

WEB v8 1cv8.cf Россия Бесплатно (free)

Описание интерфейса взаимодействия сервиса Лукойл- ЛИКАРД с информационной системой 1С.

20.04.2020    2501    0    RPGrigorev    0    

Ошибка инициализации модуля: HTTPСервис

WEB v8 1cv8.cf Узбекистан Бесплатно (free)

Решение проблемы "Ошибка при работе с HTTP сервисом 500. Ошибка инициализации модуля".

13.04.2020    1399    0    VipDim    10    

COVID-19. Динамика эпидемии

WEB v8 v8::СКД 1cv8.cf Бесплатно (free)

Весной 2020 практически все ждут, «когда же это закончится», когда эпидемия пойдет на спад. Специалисты призывают «сгладить кривую». Как понять, в какой точке мы сейчас? Данные университета Джонса Хопкинса в любой 1С.

01.04.2020    2437    0    Alejandro_V    6    

Заготовка для загрузки файлов по ftp Промо

WEB Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

3 процедуры и 1 макет

03.06.2013    29150    0    anig99    6    

Как я собрал для себя высокопроизводительный и бесплатный облачный бекенд для 1С на PosgreSQL + PostgREST

Производительность и оптимизация (HighLoad) WEB Интеграция Мобильная разработка Администрирование веб-серверов v8 Бесплатно (free)

В этой статье я расскажу о проблемах бека для мобильных приложений или другого фронта, который требует производительности, быстрой реакции и отказоустойчивости, и как я решил это благодаря opensource проекту PostgREST и СУБД Postgre SQL 12. Проведу простой тест производительности для сравнения 1С с данным решением. Это может быть полезно всем, кто разрабатывает мобильные приложения либо фронтсайд-приложения для 1С на чем угодно - на мобильной платформе или на нативном языке или на Simple UI. И также обзор новых функций SimpleUI для связи с этим бекендом.

31.03.2020    9181    0    informa1555    21    

Коронавирус COVID-19. Статистика по странам

WEB v8 Бесплатно (free)

В связи с COVID-19 люди поделились на две категории: те, кто осознал, и те кто ЕЩЕ не осознал. Единственное наше преимущество перед Коронавирусом заключается в том, что информация распространяется быстрее, чем расползается "невидимка".

25.03.2020    4912    2    Evgen.Ponomarenko    60    

Получение html-кода страницы. JS из 1С

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

Получение исходника страницы, выполнение произвольного js-кода. Теперь с WebKit от 1С.

18.02.2020    3997    0    Yashazz    1    

Отладка конфигурации в режиме веб-клиента

WEB v8 Бесплатно (free)

После очередного обновления платформы при попытке запуска отладки в веб-клиенте стало появляться сообщение. Собственно, до этого момента никогда веб-клиентом особо не пользовался и необходимости в отладке как-то не возникало. Данное сообщение заставило задуматься, что не так с отладкой в веб-клиенте и как ее собственно включить? Тот самый неловкий момент, когда программа просит обратиться к администратору, а администратор - это вы.

12.02.2020    3240    0    gamletspb    1    

Анализ работы внешней обработки сервиса МодульКасса применительно к задаче фискализации чеков при доставке

Кассовые операции WEB v8 УТ11 Россия Бесплатно (free)

В статье разберу работу внешней обработки для работы с МодульКасса, опишу недочеты и применимость для организации доставки, предложу собственный вариант реализации.

11.02.2020    1878    0    malikov_pro    0    

Вариант реализации REST API для 1С-Битрикс Управление сайтом

WEB v8 Россия Бесплатно (free)

В статье опишу вариант обмена 1С УТ 11.4 и 1С-Битрикс УС 18.5 с иcпользованием компонентов Symfony, в качестве примера обмен данными по складам.

28.01.2020    2982    0    malikov_pro    2    

Вариант реализации работы с сервисом Dadata применительно к конфигурации УТ 11.4 и подобным

WEB v8 УТ11 Россия Бесплатно (free)

В статье описывается реализация получения данных с сервиса DaData при работе с формами справочников в конфигурации УТ 11 для дополнения информации по ФИО, ИНН, Адресу.

22.01.2020    2238    0    malikov_pro    5    

Двусторонний обмен с поставщиком через интернет-магазин для реализации товаров с ответственного хранения (с 01.02.2020 "Партии" не используются)

Файловые протоколы обмена, FTP WEB v8 УНФ Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

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

16.01.2020    3358    0    chkurs    0    

Активный 2019 год на Инфостарт

О сообществе О жизни Бесплатно (free)

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    4338    0    YPermitin    24    

Получение номера ВСД по идентификатору 1С: Меркурий

Производство готовой продукции (работ, услуг) WEB v8 УТ11 Пищевая промышленность Россия Бесплатно (free)

Код парсинга веб страницы для получения номера ВСД в системе Меркурий.

24.11.2019    3461    0    ohyen    0    

Немного о интеграции с CRM AMO

WEB v8 1cv8.cf Бесплатно (free)

Немного информации о том, как настроить интеграцию с CRM AMO. Пример функций для подключения к АМО и обновления заказа. Пример на основе API авторизации.

15.11.2019    3326    0    xxxAndricxxx    6    

Ещё немного о ИНН и сервисе DaData

WEB v8 1cv8.cf Бесплатно (free)

Об использовании сервиса dadata и немного информации о возможностях получать данные по ИНН. Возможно, кому-то будет полезным.

14.11.2019    6024    0    xxxAndricxxx    21    

Вариант реализации клиента SOAP на примере получения остатков из MERLION

WEB v8 1cv8.cf Россия Бесплатно (free)

В статье приведу пример клиента к сервису SOAP, функции которого принимают несколько значений типа строка или массив строк.

14.11.2019    2784    0    malikov_pro    0    

Разбор любого JSON-объекта в соответствующую структуру

Инструментарий разработчика WEB v8 1cv8.cf Бесплатно (free)

Данная публикация предназначена разработчикам 1С, которым приходиться разбирать данные формата JSON. Выложенный пример кода создает объект типа Структура, полностью повторяющий структуру данных формата JSON.

13.11.2019    6141    0    user665435_al.windstorm    14    

Проверка reCAPTCHA от Google на стороне HTTP-Сервиса

WEB v8 Россия Бесплатно (free)

Код проверяет переданный токен reCAPTCHA от Google при вызове HTTP-Сервиса. Таким образом проверяем, отправил ли данные на наш HTTP-Сервис робот или реальный пользователь.

06.11.2019    5136    0    AVR    0    

"Живые" картинки со Snap.SVG

Практика программирования WEB Работа с интерфейсом v8 Абонемент ($m)

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    10821    16    blackhole321    7    

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

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

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

16.10.2019    10107    0    YPermitin    15    

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

WEB Облачные сервисы, хостинг v8 1cv8.cf Бесплатно (free)

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

14.10.2019    9431    0    uno-c    25    

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

WEB Администрирование данных 1С v8 Бесплатно (free)

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

20.08.2019    9360    0    Fragster    9    

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

Розничная торговля WEB Розничная торговля v8 1cv8.cf Розничная и сетевая торговля (FMCG) Россия УУ Бесплатно (free)

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

14.08.2019    5197    0    Van2507    1    

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

WEB v8 Бесплатно (free)

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

12.08.2019    7637    0    Yashazz    15    

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

WEB v8 1cv8.cf Бесплатно (free)

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

08.08.2019    7194    0    Sedaiko    1    

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

WEB OneScript Инструментарий разработчика v8 Бесплатно (free)

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

20.05.2019    18270    0    Evil Beaver    33    

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

WEB v8 УТ11 Бесплатно (free)

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

25.04.2019    5123    0    distorshion    4    

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

WEB v8 1cv8.cf Россия Бесплатно (free)

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

18.04.2019    7261    0    mysm    2    

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

WEB v8 Бесплатно (free)

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

17.04.2019    15987    0    Smaylukk    119    

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

WEB v8 Бесплатно (free)

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

01.04.2019    13825    0    starik-2005    33    

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

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

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

26.02.2019    10426    0    Lars Ulrich    16