Подключение к http сервису через multipart/form-data в 1С

30.10.23

Интеграция - WEB-интеграция

Описан механизм работы с http сервисом через multipart/form-data в 1С.

Было необходимо из 1С отправить файл в специальный API, на вход требовалось подавать pdf файл и код товара через  multipart/form-data.

1) Первым делом воспроизвел данный механизм в POSTMAN, указав необходимые данные в секциях body и headers


   

 

В body указаны обязательные параметры («file» и «product_code» для API, в том числе и сам передаваемый файл

2) Для того чтобы оформить передачу в 1с нужно через POSTMAN обратиться к SNIPPET, выбираем http

 

   

 

4) Далее очень важно соблюдать структуру, она должна быть идентичная нашему snippet,  важен каждый символ, отступ, перенос.

Необходимо создать конвертируемый разделитель строк:

Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");

И теперь построчно также как в snippet записываем данные через объект запись данных

 

 

Теперь поясню построчно:

Разделитель нужно указать именно как в коде выше

Создаем объект Запись данных, в него и будем записывать наши данные построчно

ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");   

ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);  

Начинаем с разделителя Прописываем данные form-data один в один как в Snippet, подставляя ПОЛНОЕ имя файла (полный пуnь к файлу, пример "\\сеть\НашаПапка\НашФайл.pdf")

ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ПолноеИмяФайла + """");   

Обязательно указываем тип передаваемых данных, в нашем случае это pdf файл (тут важно верно указать тип)

ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");

ЗаписьДанных.ЗаписатьСтроку(""); Пустая строка как в snippet

Записываем наш pdf файл в виде двоичных данных

 

 

 

ЗаписьДанных.Записать(ДвоичныеДанные);   

ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); Снова Разделитель

Добавляем данные второго параметра как оно написано в snippet

ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + ИмяВторогоПараметра + ";");

ЗаписьДанных.ЗаписатьСтроку("Content-Type: text/html"); тут необходимо указать тип

ЗаписьДанных.ЗаписатьСтроку(""); Не забываем про пустую строку

ЗаписьДанных.ЗаписатьСтроку(Код);   Второй параметр, тут просто передаем строку

ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); Снова разделитель

ЗаписьДанных.ЗаписатьСтроку(""); ПустаяСтрока

ЗаписьДанных.Закрыть(); 

И на этом запись закончена, закрываем запись данных.

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

Если делать все аналогично, соблюдая все нюансы то  код для отправки запроса в формате multipart/form-data отработает правильно.

Спасибо за внимание.

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

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    22861    33    24    

26

WEB-интеграция Программист Руководитель проекта 1С:Предприятие 8 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки. Основные преимущества: 1. Документация API создаётся автоматически. Удобна для программной обработки. 2. Изменить API столь же просто как настроить отчёт. Можно опубликовать существующий вариант отчёта. 3. Отчёты в API поддерживают параметры (Период, ДатаНачала и др.) 4. При создании простых методов не требуется изменять конфигурацию. 5. Поддерживается работа с планами обмена.<br/> 6. Возможно настроить отправку из 1С данных корреспондирующей системе, для случаев когда 1С сама "знает" какие данные нужно отправить. 7. После записи в 1С Ле Мурр может возвращать соответствие полученных идентификаторов созданным в 1С объектам данных.

36000 руб.

27.09.2024    11538    8    9    

13

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17280 руб.

20.12.2024    4979    22    4    

24

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разработана для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

12000 руб.

02.02.2021    21510    62    52    

40

WEB-интеграция Загрузка и выгрузка в Excel Программист Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

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

12000 руб.

29.08.2025    1327    2    0    

3

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

5196 руб.

28.04.2016    99509    114    218    

362
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3208 30.10.23 15:46 Сейчас в теме
2. bayselonarrend 3002 30.10.23 16:11 Сейчас в теме
Мог просто коннектор взять, да и все
Labotamy; wtlz; user603532_fan_club_chelsea; German; Ruschel; +5 Ответить
4. caponid 31.10.23 21:33 Сейчас в теме
(2)
Коннектор нужно доработать напильником - он не формирует Content-length
хотя тут в "ручном" примере его тоже нет.

Некоторые сервера могут не пропустить такой запрос.

ЗЫ: Postman его сформировал ))
kild; it_depDi; +2 Ответить
5. bayselonarrend 3002 31.10.23 21:57 Сейчас в теме
(4)Да мимо прочего, тема много раз уже обсосана. Даже если взять статью, которую автор сам указал в конце - в чем разница? Если я ничего не упустил, то только во втором файле ¯\_(ツ)_/¯ и записи JSON, которая потом не используется ¯\_(ツ)_/¯¯\_(ツ)_/¯¯\_(ツ)_/¯
8. Viktor_Ermakov 394 19.12.24 16:54 Сейчас в теме
(4) Если чего то нет в коннекторе, то гораздо полезнее для Вас и сообщества будет добавить туда это, исправить, и запушить.
И тогда все кто им пользуется смогут в новой версии делать то же самое.
А делать что то с нуля, писать это в статье на инфостарте, такое себе, можно понять только если не знали о коннекторе.
Нужно ВСЕМ включаться в опенсорс, тогда будет развитие в отрасли!
3. serpent 70 31.10.23 10:07 Сейчас в теме
исправьте " вашем каждый"
6. Red_Devil 181 03.11.23 08:37 Сейчас в теме
Автор молодец, чем больше примеров тем лучше. Про POSTMAN тоже полезно.
Сам сейчас делаю выгрузку электронной транспортной накладной в контур логистику
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");

	Тело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Тело, , , Символы.ВК + Символы.ПС, "");               
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""FormFiles""; filename=""ON_TRNACLGROT____0_20231101_dbf80806-1950-45ac-be43-e59dd6c825a3.xml""");
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: multipart/form-data");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(Результат.ДвоичныеДанные);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	ЗаписьДанных.Закрыть();

	ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
	
	ssl = Новый ЗащищенноеСоединениеOpenSSL(
	            Новый СертификатКлиентаWindows(),
	            Новый СертификатыУдостоверяющихЦентровWindows());
				
	АдресСайта = "logist-api.kontur.ru";
	HTTPСоединение = Новый HTTPСоединение(АдресСайта,,,,,,ssl);
	HTTPЗапрос = Новый HTTPЗапрос;
	HTTPЗапрос.АдресРесурса = "/v1/documents/waybill";
	
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + разделитель);
	HTTPЗапрос.Заголовки.Вставить("x-kontur-apikey", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
	ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
	НашОтвет = ОтветHTTP.ПолучитьТелоКакСтроку();
	Сообщить(НашОтвет);
Показать
maksa2005; +1 Ответить
11. maksa2005 377 21.11.25 12:27 Сейчас в теме
(6)СПАСИБО огромное! Коннектор тупой. я с ним провозился 3 часа и сделал как выше. с первой попытки ушло..!
7. coollerinc 198 13.09.24 17:27 Сейчас в теме
Спасибо за статью.
Заметил, что filename должен быть без пробелов. Это такая особенность или я что то не правильно делаю?
9. Global__IT 418 11.02.25 19:53 Сейчас в теме
10. user2002930 11.06.25 10:14 Сейчас в теме
+ Спасибо! Очень помогли
Для отправки сообщения требуется регистрация/авторизация