Учимся создавать http сервис (часть четвертая). Изучение метода POST http запроса (передача текстовых данных)

11.10.20

Разработка - Запросы

Пошаговое руководство по созданию http сервисов (часть четвертая). Изучение метода POST http запроса.

На прошлых уроках:

-Учимся создавать http-сервисы (часть первая)

-Учимся создавать http сервисы (часть вторая). Передача параметра в http сервис

-Учимся создавать http сервис (часть третья). Передача нескольких параметров в http сервис ,

мы с вами научились создавать http сервис, научились отправлять запросы на сервер. Запросы, которые, до сих пор отправляли на сервер, были GET запросами. При помощи метода GET запроса можно получать данные с сервера. Мы, например, получали информацию о документах расходных документах, а также, получали информацию о номенклатуре.

Что делать, если нам нужно передать некие данные на сервер? На помощь приходит http запрос типа POST!

Поставим задачу:

-Перенесем данные справочника «Номенклатура» из базы источник в базу приемник при помощи http сервиса, используя POST запрос. Переносить данные будем в JSON формате.

 

Подготовим базу источник.

-Создаем чистую информационную базу.

-Назовем ее «БазаИсточник»

-Добавляем в нее несколько объектом метаданных:

Спр. «Номенклатура»

Реквизит «Атрикул» тип строка 25

-Обработка «ИзучениеPOSTЗапросов»

 

Подготовим базу приемник

-Создаем чистую информационную базу

-Назовем ее «БазаПриемник»

-Добавим в нее несколько объектов метаданных:

Спр. «Номенклатура»

Реквизит «Атрикул» тип строка 25

-Создаем новый http сервис «ИзучениеPOSTЗапросов»

-Корневой URL – «post»

 

-Переходим на закладку «Шаблоны URL»

-Добавляем новый шаблон «ЗагрузкаНоменклатуры»

-Создадим шаблон, назовем его «product_json»

-Добавим новый метод «ЗагрузкаНоменклатурыJSON»

-Выбираем HTTP метод POST

 

-Публикуем http сервис на веб сервере, если забыли, как это сделать, смотрите статью 

Учимся создавать http-сервисы (часть первая)

После публикации у меня получился следующий путь «http://localhost/post_test/hs/post/product_json/»

Localhost – IP адрес

post_test – имя публикации

hs – признак http сервиса

post – корневой каталог

product_json - шаблон

 

Переходим в базу источник.

-Открываем обработку «ИзучениеPOSTЗапросов»

-Создадим форму. На форме разместим кнопку «Перенести номенклатуру JSON»

 

 

Шаблон, по которому мы подключаемся из 1С к http сервису следующий:

-Создаем объект типа «HTTPСоединение», в его конструкторе передаем ip адрес http сервиса, например, так:

 

-Создаем объект типа «HTTPЗапрос», в его конструкторе указываем адрес ресурса и заголовки, например так:

 

-Помещаем данные, которые мы хотим отправить на сервер в тело запроса. Мы хотим передать текстовые данные, для этого мы воспользуемся методом «УстановитьТелоИзСтроки»

-Отправляем данные на сервер. (пример кода)

 

Еще раз. Для того чтобы передать данные на сервер, надо эти данные поместить в тело POST запроса. В заголовке необходимо указать какого типа эти данные.

-Открываем базу источник в режиме предприятия и добавляем в справочник «Номенклатура» несколько элементов.

 

Базу источник мы подготовили!

 

Переходим в базу приемник

-Добавляем общий модуль «ОбщегоНазначения»

-В нем описываем две процедуры

 

-Переходим в обработчик метода «ЗагрузкаНоменклатурыJSON» http сервиса «ИзучениеPOSTЗапросов»

-Описываем в нем следующий код

 

Базу приемник мы подготовили.

Запускаем обработку из базы источник. Нажимаем на кнопку. И в базе приемнике создается номенклатура.

 

 

Видео инструкция тут:

 

 

Там же, вы сможете скачать файлы конфигурации источника и приемника.

 

Итак, мы решили поставленную задачу.

При реализации данного функционала была использована платформа 1С:Предприятие 8.3 (8.3.12.1567)

Всего хорошего.

ТОП-6 инструментов для разработчика 1С

Подборка лучших инструментов для разработчика 1С включает Toolkit, DCT, OneDebugger, PrintWizard, DataFormWizard и Infostart MCP. Любой инструмент со скидкой 20% при покупке от двух решений.

Вступайте в нашу телеграмм-группу Инфостарт

http web сервис 1С GET POST

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    285556    1606    423    

1220

Инструментарий разработчика Запросы Разработчик 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.

2 стартмани

06.07.2026    4942    65    XSlava    20    

47

Запросы Разработчик 1С 8.3 Россия Бесплатно (free)

Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.

26.06.2026    10659    Alex_YAM    7    

34

Нейросети Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 Абонемент ($m)

Консоль запросов 1.0: добавлен ИИ-помощник (запрос в DeepSeek), который помогает быстрее получать каркас Запроса 1С Сформулируйте простое описание; нажмите кнопку – получите результат прямо в консоли. Где дальше его можно дорабатывать и тестировать. 28.5.2026 Добавил "Консоль запросов 2.0" (запрос в DeepSeek + Claude) 4.10.2026 Обновил "Консоль запросов 2.0"

3 стартмани

20.05.2026    9562    46    German4739    72    

28

WEB-интеграция Запросы Разработчик 1С 8.3 Абонемент ($m)

Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.

1 стартмани

02.04.2026    4638    105    priem_nv    27    

70

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    13657    168    zup_dev    32    

87

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    7714    25    XilDen    12    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user1304317 11.10.20 15:39 Сейчас в теме
2. user1464234 11.10.20 17:18 Сейчас в теме
Подскажите пож-ста, можно ли все это реализовать в виде расширения, например к БП 3?
Общий модуль и обработки в расширение включаются, а вот остальные упомянутые в статье объекты метаданных?
5. platonov.e 162 12.10.20 07:00 Сейчас в теме
(2) Это зависит от платформы.
user1464234; +1 – Ответить
6. vitika_m 12.10.20 10:37 Сейчас в теме
(2) теоретически в расширение эти объекты добавить можно, но вот использовать для публикации не имеется возможности, так как в окне публикации он не появится, по крайней мере на платформе 8.3.16...
user1464234; +1 –1 Ответить
14. uno-c 276 13.10.20 03:24 Сейчас в теме
(6) Не появится в списке - не значит, что нельзя использовать. Нормально публикуется и работает из расширений. Проверено не раз, и не только на 8.3.16.
gigapevt; +1 – Ответить
15. vitika_m 13.10.20 07:15 Сейчас в теме
(14)отлично! А можно поподробнее?
17. vitika_m 13.10.20 11:44 Сейчас в теме
(16)Благодарю! + к карме)
18. dsdred 4355 14.10.20 14:03 Сейчас в теме
(15)https://infostart.ru/1c/articles/842751/
вот тут в расширении, и публикуется и работает.
vitika_m; +1 – Ответить
19. vitika_m 17.10.20 11:57 Сейчас в теме
(18) Подробнее и не опишешь! Спасибо большое!
3. user1464234 11.10.20 21:12 Сейчас в теме
И из 7 ки с использованием компоненты v7plus как настроить тоже самое было бы полезно.
7. acvatoris 584 12.10.20 11:11 Сейчас в теме
Скажем так, если в v7plus есть методы, которые позволяют подлючиться к http сервису, если есть методы, которые позволяют помещать данные в тело запроса, то можно, если нет, то увы.
user1464234; +1 – Ответить
4. Fox-trot 166 12.10.20 06:49 Сейчас в теме
(0) поиск дубля не помешал бы перед тем как создавать новый элемент справочника
8. dsdred 4355 12.10.20 11:56 Сейчас в теме
обработка ИзучениеPOSTЗапросов
а на картинке ИзчениеPOSTЗапросов

для JSON наверное правильнее
HTTPЗапрос.Заголовки.Вставить("Content-Type","application/json");
10. Поручик 4611 12.10.20 14:12 Сейчас в теме
(8) Смотря как сервер-приёмник обрабатывает данные.
11. dsdred 4355 12.10.20 14:44 Сейчас в теме
(10)Чаще всего если сервис сторонний то разворачивают без этого заголовка.
К примеру сейчас обмен с API IIKO делаю, там этот момент не документирован, но без этого заголовка кушать запросы отказывается.
9. ICeZm 23 12.10.20 14:09 Сейчас в теме
12. ltfriend 12.10.20 21:00 Сейчас в теме
Технически, можно передать данные и создать объект и GET запросом, передав нужные значения в параметрах, т.к. GET-запрос не имеет тела. Но это, конечно, извращение, да и размер данных ограничен максимальной длинной URL.

А передать данные в теле запроса можно и методами PATCH, PUT, а не только POST.

Так, распространённая практика при создании REST API использовать POST для создание объекта, а PUT/PATCH для его изменения (метод DELETE, соответственно, используется для удаления).

А вообще, все эти методы используются на усмотрение программиста. Встречался с таким, что для всех запросов использовался только POST (и для получения данных, и для передачи).

По поводу заголовка Content-Type. Вы указываете text/plain, а передаёте json (Content-Type: application/json). А если учесть, что база-приёмник ни как этот заголовок не использует, то его вообще можно не передавать.

Ну и я бы настоятельно рекомендовал перед изучением создания http сервисов, сначала изучить HTTP-протокол. Хотя бы, с прочтения статьи на википедии: https://ru.wikipedia.org/wiki/HTTP
RustIG; Fox-trot; +2 – Ответить
35. YA_1617291860 08.04.25 05:04 Сейчас в теме
(12) Я понимаю, что эта тема уже не актуальна, но хочу поделиться своим опытом.

При передаче большого объёма данных даже POST может быть недостаточно. В моём случае я интегрировал 1С и WordPress. Чтобы выгрузить товары, я не использовал POST, а отправил только GET-запрос без каких-либо данных. Это стало триггером для WordPress, который в ответ отправил GET-запрос на сервер. Затем 1С создала страницу с JSON, которую PHP скачал и начал обрабатывать.
13. Aquashop 46 12.10.20 21:31 Сейчас в теме
Очень подробно, в свое время не хватало этого=)
20. aspirator23 343 18.10.20 17:42 Сейчас в теме
Есть ограничения на длину передаваемой строки в этом запросе HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаНоменклатураJSON); ?
22. BlinOFF 8 04.12.20 11:04 Сейчас в теме
Здравствуйте!Скачал cf из примера, установил, на стороне приемника
СтрокаНоменклатураJSON = Запрос.ПолучитьТелоКакСтроку();
приходит пустая строка. Подскажите что не так? Платформа
1С:Предприятие 8.3 (8.3.16.1224)
upd: обновление платформы до 8.3.18 решило проблему
23. mikl79 121 08.12.20 10:53 Сейчас в теме
Добрый день.

Сделал все как описано, но HTTPОтвет получает код 500:

Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Результат работы: Результат.КодСостояния = 500

В чем может быть причина?
24. acvatoris 584 09.12.20 22:01 Сейчас в теме
Добрый день. Высылаю Вам ссылку на cf файл. Проверьте еще раз, то что вы сделали с файлом. Может все-таки где-то ошибка.
https://yadi.sk/d/oQK4EjKZiN1a4Q
25. Illia817897 2 21.12.20 15:58 Сейчас в теме
Помогло разобраться с проблемой(дело в том что забыл прописать /hs/ , и просто не замечал...)
Спасибо
26. unknown181538 166 28.08.22 02:07 Сейчас в теме
Спасибо! Помогло очень быстро сделать по образцу! Очень читабельно написано.
acvatoris; +1 – Ответить
27. unknown181538 166 28.08.22 04:46 Сейчас в теме
Не понял только, как работать с ошибками. У меня была ошибка в коде в приемнике. В журнал регистрации она не записывалась, отладчик тоже не получилось подключить.
28. acvatoris 584 28.08.22 17:13 Сейчас в теме
Добрый день. Непонятно о каких ошибках идет речь. Может быть эта статья вам поможет https://infostart.ru/1c/articles/1298261/
29. unknown181538 166 28.08.22 21:27 Сейчас в теме
(28) Ну обычные ошибки в коде обработчиков, там где я уже свой код создания документа написал. То, что должно было бы возвращать "поле объекта на найдено".
Посмотрел ссылку - да, возможно, адрес отладчика надо вставить. Спасибо, попробую позже.
30. Attya 04.05.23 14:41 Сейчас в теме
Добрый день. А как можно отправить не json, а несколько файлов?
31. KHoroshulinAV 389 19.05.23 11:02 Сейчас в теме
32. user1192594 19.05.23 13:26 Сейчас в теме
Добрый день. Спасибо за пример.
Может стоит уточнить, что в строке
" Сервер = "localhost"; " может потребоваться указать нестандартный порт.
33. puzanov1973 10.11.23 17:11 Сейчас в теме
Добрый день!
Как ввести логин/пароль для подключения к приемнику?
34. acvatoris 584 11.11.23 09:14 Сейчас в теме
Добрый день. Задачу авторизации пользователя можно решить разными способами. Один из самых простых - например - Базовая авторизация (Basic Auth).
Данный способ авторизации заключается в том , что вы в заголовок http запроса передаете ключ "authorization" с значением. В общем виде это выглядит так 'authorization': строка в которой содержится логин и пароль зашифрованная в формате Base64.

Вот полный пример 'authorization': "Basiс" + " " + ФункцияКотораяПреобразовываетСтрокуВБазе64("ИмяПользователя:ПарольПользователя")

Вот , примерно, так выглядит функция , которая создает значение для ключа "authorization" на языке dart:

String basicAuthorization(String userName, String password) {

return 'Basic ${base64Encode(utf8.encode('$userName:$password'))}';

}
И хэш мэп заголовков:

Map<String, String> headers = {
"accept": "application/json",
"content-type": "application/json;charset=UTF-8",
'charset': 'utf-8',
'authorization': basicAuthorization("user", "pass"),
};
36. Tarlich 89 30.07.26 22:00 Сейчас в теме
Очень хочется прочитать статью как сервисы можно соединить с планом обмена и "Гонять в обе стороны", в идеале с мобильной частью -))
так то вроде понятно - из ПО получить то что зарегистрированно .... или в темповский файл и в тело Пост ?
Есть ли ограничение на размер тела или тайаута ?
возможно ли так же доп параметр передавать ? (ну к примеру какой справочник гружу) или для каждого справочника делать свой шаблон ?
37. acvatoris 584 03.08.26 08:57 Сейчас в теме
(36) Добрый день. Ваш вопрос очень объемный. На каждое ваше предложение можно написать по статье. Если в кратце, то да, берете изменненные данные и кидаете их в тело запроса. Теперь по поводу ограничения на объем тела запроса - то спецификация протокола http не накладывает ограничения на объем данных тела в пост запросе источник тут https://httpwg.org/specs/rfc9110.html. Но в реальности ограничения есть. Эти ограничения могут проявлятся в следующих элеметах , а именно :
- Apache http сервер - параметр LimitRequestBody - без оганичений , возможно 2 Гб.
- Google Chrome - лимит 2 - 4 Гб
- Mozzila - 2 Гб

Теперь по вопросу, можно ли передавать дополнительные параметры. Да, конечно можно, как вариант можно передать тип справочника в заголовке запроса. Например, что - то типа X-CatalogType

Функция ПолучитьЗаголовкиHttpЗапроса()

	Заголовки = Новый Соответствие;
	
	Заголовки.Вставить("Content-Type"   , "application/json;charset=UTF-8");
	Заголовки.Вставить("X-CatalogType"  , "Номенклатура");
	
	Возврат Заголовки;
КонецФункции // ПолучитьЗаголовкиHttpЗапроса()
Показать


Ограничение по таймауту тоже есть, данный параметр можно настроить на такое время, какое вам нужно.
38. Tarlich 89 04.08.26 10:32 Сейчас в теме
Прошу подсказать :
вот мы передаем

Попытка
	    //ОТПРАВЛЯЕМ ДАННЫЕ НА СЕРВЕР
		Соединение.ОтправитьДляОбработки(HTTPЗапрос);


Дальше идет обработка в приемнике там где ПОСТ
но мы не видим сообщение результата.
а как получить значение что успешно все выполнено ?

!!! тут разобрался
Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
		Сообщить(Ответ.КодСостояния);



//в приемник передаем 

Заголовки.Вставить("Content-Type"   , "application/json;charset=UTF-8");
    Заголовки.Вставить("X-CatalogType"  , "Номенклатура");
    Заголовки.Вставить("Type"  , "Run");
    Заголовки.Вставить("DateEND"  , "20260804");  
    Заголовки.Вставить("dop "  , "Где номенклатура в &Группа");
 и т.д - я может еще не знаю сколько будет заголовков

///
Показать

можно как то в приемнике получить (перебрать, добавить в массив)
все заголовки , может я не знаю сколько их будет
// Можно конечно сделать Заголовки.Вставить("Param" , Param()); - это будет уже готовый массив параметров ...
39. acvatoris 584 04.08.26 14:08 Сейчас в теме
(38) Мы отправляем на сервер запрос - HttpЗапрос. Пусть , для примера, это будет post запрос. Серевер обрабатывает наш запрос и отправляет ответ - RequestRespose - HttpОтвет. Посмотрите документацию по HttpОтвет. В этот объекте есть поле - КодСостояния - целое число. Так вот по коду состояния вы можете определить успешно или нет выполнился ваш http запрос.

Про коды состояния можно почитать тут https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D­0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%­D0%B8%D1%8F_HTTP

Если , например код = 200, то запрос выполнился успешно. Если код, скажем = 500, то на сервере произошла ошибка.

Теперь про заголовки. Источник - это клиент. Приемник - это сервер. Когда наш http запрос попадает в контроллер на сервере, то там мы ловим тип HttpСервисЗапрос. У него есть поле - Заголовки. Вот именно там мы их может получить.
Для отправки сообщения требуется регистрация/авторизация