В чем новизна относительно https://infostart.ru/public/20017/?
Если реализовано в виде расширения которое можно относительно просто переиспользовать, то хорошо. В качестве основы можно использовать демо БСП.
Пользовался данным кодом, но столкнулся с загрузкой нескольких файлов в одном решил проблему следующим образом, может кому то будет полезно:
// Выполняет чтение тела запроса HTTP-сервиса, имеющее составное содержимое (multipart/form-data) и возвращает поля
// этого содержимого в виде соответствия. В качестве ключа используется имя поля.
//
// Параметры:
// Запрос - HTTPСервисЗапрос - запрос, полученный HTTP-сервисом.
//
// Возвращаемое значение:
// Соответствие - соответствие, содержащее описание полей составного содержимого. В качестве ключа используется имя
// поля. Значение содержит структуру с описанием поля. Подробнее см. ПолеСоставногоСодержимогоЗапроса.
//
Функция ПрочитатьСоставноеСодержимоеЗапроса(Запрос) Экспорт
ПоляЗапроса = Новый Соответствие;
РазделительПолей = ПолучитьРазделитьПолейСоставногоСодержимого(Запрос);
ОкончаниеПолей = "--";
ТелоЗапроса = Запрос.ПолучитьТелоКакПоток();
ЧтениеДанных = Новый ЧтениеДанных(ТелоЗапроса);
ЕстьДанные = Истина;
Пока ЕстьДанные Цикл
РезультатЧтения = ЧтениеДанных.ПрочитатьДо(РазделительПолей);
ЕстьДанные = РезультатЧтения.МаркерНайден;
Если ЕстьДанные Тогда
Строка = ЧтениеДанных.ПрочитатьСтроку();
ЕстьДанные = (Строка <> ОкончаниеПолей);
КонецЕсли;
Если РезультатЧтения.Размер = 0 Тогда
Продолжить;
КонецЕсли;
Поток = РезультатЧтения.ОткрытьПотокДляЧтения();
Поле = ПрочитатьПолеСоставногоСодержимогоИзПотока(Поток);
//Дописание
НайденоеПоле = ПоляЗапроса.Получить(Поле.Имя);
Если НайденоеПоле = Неопределено Тогда
ПоляЗапроса.Вставить(Поле.Имя, Поле);
Иначе
Если ТипЗнч(НайденоеПоле) = Тип("Структура") Тогда
МассивСтруктур = Новый Массив;
МассивСтруктур.Добавить(НайденоеПоле);
МассивСтруктур.Добавить(Поле);
ПоляЗапроса.Удалить(Поле.Имя);
ПоляЗапроса.Вставить(Поле.Имя,МассивСтруктур);
ИначеЕсли ТипЗнч(НайденоеПоле) = Тип("Массив") Тогда
ПоляЗапроса.Получить(Поле.Имя).Добавить(Поле);
КонецЕсли;
КонецЕсли;
//Дописание
Поток.Закрыть();
КонецЦикла;
ЧтениеДанных.Закрыть();
ТелоЗапроса.Закрыть();
Возврат ПоляЗапроса;
КонецФункции