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

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

60000 руб.

07.05.2019    34317    65    45    

26

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL, 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2305    2    0    

9

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

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

57600 руб.

26.11.2024    2055    1    1    

4

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

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

36000 руб.

03.08.2020    18864    21    22    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    3562    3    2    

4

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18587    53    50    

29

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    684    3    1    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3154 30.10.23 15:46 Сейчас в теме
2. bayselonarrend 2496 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 2496 31.10.23 21:57 Сейчас в теме
(4)Да мимо прочего, тема много раз уже обсосана. Даже если взять статью, которую автор сам указал в конце - в чем разница? Если я ничего не упустил, то только во втором файле ¯\_(ツ)_/¯ и записи JSON, которая потом не используется ¯\_(ツ)_/¯¯\_(ツ)_/¯¯\_(ツ)_/¯
8. Viktor_Ermakov 372 19.12.24 16:54 Сейчас в теме
(4) Если чего то нет в коннекторе, то гораздо полезнее для Вас и сообщества будет добавить туда это, исправить, и запушить.
И тогда все кто им пользуется смогут в новой версии делать то же самое.
А делать что то с нуля, писать это в статье на инфостарте, такое себе, можно понять только если не знали о коннекторе.
Нужно ВСЕМ включаться в опенсорс, тогда будет развитие в отрасли!
3. serpent 69 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 196 13.09.24 17:27 Сейчас в теме
Спасибо за статью.
Заметил, что filename должен быть без пробелов. Это такая особенность или я что то не правильно делаю?
9. Global__IT 350 11.02.25 19:53 Сейчас в теме
Оставьте свое сообщение