Подключение к 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С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    5008    4    3    

7

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

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

14400 руб.

20.12.2024    2639    14    2    

16

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

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

60000 руб.

07.05.2019    37701    72    45    

31

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь 1С v8.3 Управляемые формы 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

3000 руб.

28.04.2016    96388    109    218    

359

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

В расширении реализован механизм интеграции между системой поставщика и Личным кабинетом СДТ. Реализован обмен заказами и реализациями (накладными), предусмотрено отслеживание статусов документов. Расширение предназначено для 1С:УТ 11.4.

35856 руб.

27.11.2024    1219    1    0    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3187 30.10.23 15:46 Сейчас в теме
2. bayselonarrend 2864 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 его сформировал ))
it_depDi; +1 Ответить
5. bayselonarrend 2864 31.10.23 21:57 Сейчас в теме
(4)Да мимо прочего, тема много раз уже обсосана. Даже если взять статью, которую автор сам указал в конце - в чем разница? Если я ничего не упустил, то только во втором файле ¯\_(ツ)_/¯ и записи JSON, которая потом не используется ¯\_(ツ)_/¯¯\_(ツ)_/¯¯\_(ツ)_/¯
8. Viktor_Ermakov 377 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.ПолучитьТелоКакСтроку();
	Сообщить(НашОтвет);
Показать
7. coollerinc 198 13.09.24 17:27 Сейчас в теме
Спасибо за статью.
Заметил, что filename должен быть без пробелов. Это такая особенность или я что то не правильно делаю?
9. Global__IT 385 11.02.25 19:53 Сейчас в теме
10. user2002930 11.06.25 10:14 Сейчас в теме
+ Спасибо! Очень помогли
Оставьте свое сообщение