Передача файлов и данных на веб-сервер средствами 1С:Предприятие 8.X методом POST

Публикация № 20017 16.05.09

Интеграция с оборудованием и сервисами - WEB-интеграция

В данной статье собран мой опыт по передаче данных на веб-сервер.

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

 

В статье собран мой опыт по передаче данных на веб-сервер.

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

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

Для передачи данных на сервер методом POST в 1С Предприятии 8.X применяется метод HTTPСоединение

ОтправитьДляОбработки(<Источник>, <Адрес ресурса>, <Имя выходного файла>, <Заголовки>)

(подробнее см. СП)

Прежде всего необходимо создать файл отправки данных (собственно содержимое POST-запроса) и, при необходимости, подготовить двоичные данные.
Определяем разделитель разделов — границу boundary в POST-запросе в формате RFC (подробнее MIME: Организация данных ). В качестве границы может быть использована строка, состоящая из латинских букв и цифр.
Чтобы ничего не выдумывать, воспользуемся штатным классом 1С Предприятия УникальныйИдентификатор.

   

//Подготовка переменных 
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); 

//Определяем имя файла ответа от веб-сервера. 
ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp"; 



Содержимое файла ответа будет представлять собой какой-либо контент, отданный скриптом на стороне веб-сервера агенту пользователя. Подробнее смотрите пример скрипта php ниже.

Подготавливаем двоичные данные. В моём случае это файл архива zip, но может быть что угодно, хоть изображение.

//Какой-то ранее созданный файл с двоичными данными. 
ИмяФайлаДляЗагрузки = "data.zip"; 




Передача содержимого файла
В 1С Предприятии отсутствуют средства чтения двоичных файлов в обычную строку, как в PHP или PERL.
Одним из способов формирования строкового содержимого двоичного файла является кодирование с помощью штатных функций Base64Строка() или XMLСтрока().
!! Имейте в виду, кодирование по Base64 увеличивает размер передаваемых данных примерно на 30%.
Декодировать содержимое файла на сервере можно при помощи функции php base64_decode() или аналогичных для используемого вами серверного ПО.

Другой способ состоит в использовании штатной функции ОбъединитьФайлы(, ) (подробнее см. в СП). В этом случае формирование файла POST-запроса будет происходить немного сложнее.
Оба способа описаны ниже.

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

Следует также помнить об ограничениях хостинга и контролировать размер передаваемых данных. Как правило, для php это 2Мб. (см. файл /usr/local/php5/php.ini)
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M


В противном случе, на веб-сервере вы получите пустой POST-запрос.

   

//Если файл кодируется 
    //Закодируем содержимое файла по Base64, то есть преобразуем его к URL-неактивному виду. 
    //Base64 - специальный формат хранения данных в текстовом формате 
    СодержимоеФайла = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДляЗагрузки)); 

    //Проверка размера кодированного файла. 
    Если СтрДлина(СодержимоеФайла) > ДопустимыйРазмерФайлаВБайтах Тогда 
        //Какие-то ваши действия, возможно 
        Возврат; 
    КонецЕсли; 

    //Если файл не кодируется 
    //Проверка размера обычного файла. 
    Файл = Новый Файл(ИмяФайлаДляЗагрузки); 
    Если Файл.Размер() > ДопустимыйРазмерФайлаВБайтах Тогда 
        //Какие-то ваши действия, возможно 
        Возврат; 
    КонецЕсли; 

    ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt"; 



Создаём файл отправки или содержимое POST-запроса.

Вариант с передачей кодированного файла.


    

КодироватьФайл = Истина; 
    ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, Ложь); 
    //Определяем раздел двоичных данных 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
    //Указываем имя файла для передачи 
    //На сервере оно появится в массиве $_FILES['datafile']['name'] 
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""datafile""; filename=""" + ИмяФайлаДанных + """"); 
    //Указываем тип передаваемых данных. 
    //С таким же успехом в Content-Type можно указать application/x-octet-stream 
    ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС); 
    //Записываем кодированные двоичные данные 
    ФайлОтправки.ЗаписатьСтроку(СодержимоеФайла); 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 

    //Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы. 

    //Соответствует полю HTML-формы input type="submit" name="submit" value="Submit" / 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС); 
    ФайлОтправки.ЗаписатьСтроку("1"); 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 

    //Соответствует полю HTML-формы input type="checkbox" name="decode" value="decode" / 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""decode""" + Символы.ПС); 
    ФайлОтправки.ЗаписатьСтроку(?(КодироватьФайл, "1", "0")); 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 

    //Соответствует полю HTML-формы input type="text" name="some_field" value="Some text" / 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""message""" + Символы.ПС); 
    ФайлОтправки.ЗаписатьСтроку("Передача файла из базы данных 1С Предприятия"); 

    //Завершение сообщения для сервера 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary + "--"); 

    ФайлОтправки.Закрыть(); 




Вариант с передачей обычного файла.


    

КодироватьФайл = Ложь; 
    //Определяем массив для процедуры ОбъединитьФайлы 
    МассивФайловДляОбъединения = Новый Массив; 

    //Формируем начальный фрагмент файла POST-запроса 
    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt"); 
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.ANSI, Символы.ПС, Ложь); 
    //Определяем раздел двоичных данных 
    ФайлОтправкиНачало.ЗаписатьСтроку("--" + Boundary); 
    //Указываем имя файла для передачи 
    //На сервере оно появится в массиве $_FILES['datafile']['name'] 
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Disposition: form-data; name=""datafile""; filename=""" + ИмяФайлаДляЗагрузки + """"); 
    //Указываем тип передаваемых данных. 
    //С таким же успехом в Content-Type можно указать application/x-octet-stream или application/x-zip-compressed 
    ФайлОтправкиНачало.ЗаписатьСтроку("Content-Type: application/x-octet-stream"); 
    ФайлОтправкиНачало.ЗаписатьСтроку(""); 
    ФайлОтправкиНачало.Закрыть(); 

    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); 

    //Копируем файл для загрузки во временный и добавляем в массив файлов для объединения 
    ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла("tmp"); 
    КопироватьФайл(ИмяФайлаДляЗагрузки, ИмяФайлаДляЗагрузкиВременный); 
    МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный); 

    //Формируем конечный фрагмент файла POST-запроса 
    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt"); 
    ФайлОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.ANSI, Символы.ПС, Ложь); 

    //Завершение раздела двоичных данных 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 

    //Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы. 

    //Соответствует полю HTML-формы input type="submit" name="submit" value="Submit" / 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС); 
    ФайлОтправкиКонец.ЗаписатьСтроку("1"); 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 

    //Соответствует полю HTML-формы input type="checkbox" name="decode" value="decode" / 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Content-disposition: form-data; name=""decode""" + Символы.ПС); 
    ФайлОтправкиКонец.ЗаписатьСтроку(?(КодироватьФайл, "1", "0")); 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 

    //Соответствует полю HTML-формы input type="text" name="some_field" value="Some text" / 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Content-disposition: form-data; name=""message""" + Символы.ПС); 
    ФайлОтправкиКонец.ЗаписатьСтроку("Передача файла из базы данных 1С Предприятия"); 
    //Завершение сообщения для сервера 
    ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--"); 
    ФайлОтправкиКонец.Закрыть(); 

    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); 

    //Теперь сформированные фрагменты сообщения для сервера объединяем в один файл POST-запроса 
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки); 




Формируем заголовок POST-запроса.


    

ЗаголовокHTTP = Новый Соответствие(); 
   //Обязательные поля заголовка      
   //Укажем формат данных Content-Type 
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); 

    //Укажем длину POST-запроса Content-Length 
    ФайлОтправки = Новый Файл(ИмяФайлаОтправки); 
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); 
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    //При необходимости зададим Referer, например таким образом 
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); 
    СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref"); 
    ЗаголовокHTTP.Вставить("Referer", СерверИсточник);



Если вы получите ошибку сервера вида Failed sending data to the peer, попробуйте убрать параметр Referer из заголовка.

Инициализируем HTTPСоединение. При необходимости задаём параметры прокси. 


    

СерверПриемник = "www.some_site.ru"; //Естественно, следует указать свой адрес. 
    Порт = "80"; //Это общепринятый порт. Возможно, для вашего сервера применяется другой. Конкретное значение уточните у хостера. 

    //ИспользоватьПрокси - какая-то логическая переменная, может быть значение флажка на форме или переключатель 
    Если ИспользоватьПрокси Тогда 
        Прокси = Новый ИнтернетПрокси; 
        Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина; 
        Прокси.Пароль = "ПарольПрокси"; // укажите своё значение 
        Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение 
        НТТР = Новый HTTPСоединение( СерверПриемник , Порт, , , Прокси); 
    Иначе 
        НТТР = Новый HTTPСоединение( СерверПриемник , Порт); 
    КонецЕсли; 




Собственно, отправка данных серверу.


    

АдресСкрипта = "some_script.php"; //Естественно, следует указать имя своего скрипта. 
    Попытка 
        НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP); 
    Исключение 
        //Пример обработки ошибки соединения. 
        #Если Клиент Тогда 
            Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки()); 
        #Иначе 
            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки()); 
        #КонецЕсли 
        Возврат; 
    КонецПопытки; 

    //Удаляем файлы POST-запроса и фрагменты сообщения. Больше они не нужны 
    УдалитьФайлы(ИмяФайлаОтправки); 
    Если НЕ КодироватьФайл Тогда 
        Для каждого ЭлементМассива Из МассивФайловДляОбъединения Цикл 
            УдалитьФайлы(ЭлементМассива); 
        КонецЦикла; 
    КонецЕсли; 



Отправили данные, анализируем ответ сервера. 


    

ФайлОтвета = Новый Файл(ИмяФайлаОтвета); 
    Если ФайлОтвета.Существует() Тогда 
        ТекстОтвета = Новый ТекстовыйДокумент(); 
        ТекстОтвета.Прочитать(ИмяФайлаОтвета); 
        Если ТекстОтвета.КоличествоСтрок() > 0 Тогда 
            ОтветСервера = ТекстОтвета.ПолучитьТекст(); 
            #Если Клиент Тогда 
                Сообщить(ОтветСервера); 
            #КонецЕсли 
        Иначе 
            #Если Клиент Тогда 
                Сообщить("Отправка файла на сервер: Получен пустой ответ сервера."); 
            #Иначе 
                ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера."); 
            #КонецЕсли 
        КонецЕсли; 

        //Удалим файл ответа. Больше он нам не нужен. 
        УдалитьФайлы(ИмяФайлаОтвета); 
    Иначе 
        #Если Клиент Тогда 
            Сообщить("Отправка файла на сервер: Ответ сервера не получен."); 
        #Иначе 
            ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен."); 
        #КонецЕсли 
КонецЕсли; 



Подробную реализацию отправки файла с кодированием и без кодирования смотрите в приложенной обработке Загрузка файлов на веб-сервер.epf. 

И наконец, примерное содержимое скрипта-приёмника данных на веб-сервере "some_script.php". Скрипт вы также можете извлечь из макета обработки.

//Coded by Sergey aka Porutchik http://forum.aeroion.ru
//http://forum.aeroion.ru/topic446.html

//Читаем текстовые данные POST-запроса
$submit = ( isset($_POST['submit']) ) ? intval($_POST['submit']) : false;
$decode = ( isset($_POST['decode']) ) ? intval($_POST['decode']) : false;
$message = ( isset($_POST['message']) ) ? htmlspecialchars($_POST['message']) : '';

//Проверим user-agent, хотя большого толку от такой проверки нет. См. статью.
if ( $_SERVER['HTTP_USER_AGENT'] != '1C+Enterprise/8.1' )
{
    @
header('HTTP/1.0 403 Forbidden');
    die(
'Hacking attempt');
}

if ( 
$submit )
{
    
//Здесь работаем с содержимым переданного файла.
    
$uploadFile $_FILES['datafile'];
    
$tmp_name $uploadFile['tmp_name'];
    
$data_filename $uploadFile['name'];
    if ( !
is_uploaded_file($tmp_name) ) 
    {
        die(
'Ошибка при загрузке файла ' $data_filename);
    } 
    else 
    {
        
//Считываем файл в строку
        
$data file_get_contents($tmp_name);

        if (
$decode)
        {
            
//При необходимости декодируем данные
            
$data base64_decode($data);
        }
        
//Теперь нормальный файл можно сохранить на диске
        
if ( !empty($data) && ($fp = @fopen($data_filename'wb')) )
        {
            @
fwrite($fp$data);
            @
fclose($fp);
        }
        else
        {
            die(
'Ошибка при записи файла ' $data_filename);
        }
        @
header('HTTP/1.1 200 Ok');
        @
header('Content-type: text/html; charset=windows-1251');
        
$answer "\n" 'Файл $data_filename ' успешно загружен. ' "\n" 'Переданное сообщение: ' $message;
        print (
$answer);
    }
}
?>

В завершение статьи процитирую. 

Обращаю ваше внимание, что указанная здесь методика освещает возможность загрузки файлов на сервер. Использование их "в чистом виде" без доработки может быть небезопасным, и является потенциальной возможностью для взлома вашего сайта. А именно, отсутствие обработки имени файла, который пришел на сервер, отсутствие авторизации, определения источника, посылающего файл, может дать злоумышленнику возможность загрузить и выполнить вредоносный код на вашем сайте. Рассмотрение способов защиты не входит в данную статью и остается на ваше усмотрение.

Список использованной литературы:

Скачать файлы

Наименование Файл Версия Размер
Отправка данных, загрузка файлов на веб-сервер, скачивание файла 8.3.epf

.epf 33,21Kb
406
.epf 33,21Kb 406 Скачать
ПросмотрИнфостарт.epf

.epf 11,76Kb
101
.epf 11,76Kb 101 Скачать
Загрузка файлов на веб-сервер.epf

.epf 15,68Kb
258
.epf 15,68Kb 258 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. support 4571 16.05.09 15:53 Сейчас в теме
Хорошая и полезная статья.
2. Serj1C 480 18.05.09 08:44 Сейчас в теме
А как отправить простой POST запрос без файла?
Например, авторизация на infostart.
3. Поручик 4545 18.05.09 09:39 Сейчас в теме
Вот так и отправить. Выкидываешь из файла отправки или содержимого POST-запроса лишнее, то что относится к двоичным данным или файлам, и отправляешь.

Изучай матчасть по генерации HTTP запросов, ссылки я для чего дал?
4. Поручик 4545 18.05.09 18:04 Сейчас в теме
От нечего делать, пока у нас сервер лежал, накатал обработку, иллюстрирующую пример POST-запроса без файлов.

В качестве сайта - подопытного кролика выбран инфостарт
Скачать http://forum.aeroion.ru/download.php?id=165
korablev64; Asdam; Serj1C; +3 Ответить
5. Serj1C 480 18.05.09 20:50 Сейчас в теме
(4) Спасибо, теперь можно изучать
6. ValentinV 25.05.09 11:29 Сейчас в теме
Почему таким сложным путем?
7. Поручик 4545 25.05.09 19:54 Сейчас в теме
Лёгкие пути в студию. Про передачу по ftp знаю, не тот в данном случае путь.
8. мх 16 11.08.09 14:33 Сейчас в теме
Можно ли как-то передать файл на сервер из 7.7 ?
84. пользователь 05.04.21 12:58
Сообщение было скрыто модератором.
...
9. Поручик 4545 11.08.09 14:39 Сейчас в теме
Можно. Только я от клюшек давно отошёл, забыл её как страшный сон, и даже искать что-то по ней неохота. Гугл вам поможет.
10. lsp71 10.09.09 15:47 Сейчас в теме
Спасибо за доходчивое объяснение
11. Gabi 29.10.09 11:01 Сейчас в теме
Спасибо вам большое за POST запрос.
Но у меня не получается отправить этот POST запрос вроде сделала все как описано выше. Запрос доходит, но без файла.
Все выглядит так :

СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(АрхивФайлаZIP));

ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""key""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("11111");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""dump""; filename=""" + СчетчикВыгрузок+".zip" + """");
ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);

ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
ФайлОтправки.ЗаписатьСтроку("Загрузить");
ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
ФайлОтправки.Закрыть();

Пожалуйста помогите что не так?
12. Поручик 4545 29.10.09 16:51 Сейчас в теме
Сделать именно так, как в примере формирования содержимого POST-запроса. Имейте в виду, этот код практически полностью приведён из рабочей конфигурации.
Посмотреть содержимое массива $_FILES, $_POST на сервере.
В конце концов, проверить размер передаваемых данных.
13. Mopnex03 3 05.11.09 05:45 Сейчас в теме
Ошибка работы с Интернет: server returned nothing (no headers, no data)
Такая ошибка вылетает... В чем проблема? Код взят из этой статьи.
 Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); 
   Содержимое = Base64Строка(Новый ДвоичныеДанные(Каталог+"upload.xml")); 

   ИмяФайлаОтправки = Каталог+"post.txt"; 
    ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ); 

    //Определяем раздел двоичных данных 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 
    //Указываем имя файла для передачи 
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""uploadfile""; filename=""upload.xml"""); 
    //Указываем тип передаваемых данных. 
    //С таким же успехом в Content-Type можно указать application/x-octet-stream 
    ФайлОтправки.ЗаписатьСтроку("Content-Type: application/octet-stream" + Символы.ПС + Символы.ПС); 
    //Записываем кодированные двоичные данные 
    ФайлОтправки.ЗаписатьСтроку(Содержимое); 
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary); 

    ФайлОтправки.Закрыть(); 

   //Формируем заголовок POST-запроса. 

   ЗаголовокHTTP = Новый Соответствие(); 
   //Укажем формат данных Content-Type 
   ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); 
    
   //Укажем длину POST-запроса Content-Length 
   ФайлОтправки = Новый Файл(ИмяФайлаОтправки); 
   РазмерФайлаОтправки = ФайлОтправки.Размер(); 
   ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки); 
    
   //Инициализируем HTTPСоединение. При необходимости задаём параметры прокси. 
    
   НТТР = Новый HTTPСоединение(Сервер, Порт);      
    
   //Собственно, отправка данных серверу. 
    
   АдресСкрипта = "upload.php"; //Естественно, следует указать имя своего скрипта. 
   Попытка 
      НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, Каталог+"upload.tmp", ЗаголовокHTTP); 
   Исключение 
         Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки()); 
   КонецПопытки;
Показать
14. softmaker 27 25.12.09 12:57 Сейчас в теме
Пример реализации, используя, 1С:Предприятие 7.7 здесь.
15. FFelix 481 10.03.10 19:49 Сейчас в теме
Попробовал, работает. Спасибо! :)
16. Valerikk 14.05.10 17:42 Сейчас в теме
Здравствуйте.
Возникла проблемка:
если выполнять на стороне клиента, все нормуль;
но если то же самое делать на стороне сервера (регл. заданием), приходит пустой ПОСТ на сервер :( . ФайлОтправки и файл данных - идентичны.
Посоветуйте, плиз, где искать косяк...
17. Поручик 4545 14.05.10 18:01 Сейчас в теме
(16) Похожая проблема
http://www.forum.mista.ru/topic.php?id=476078

Ишите косяк или на веб-сервере или на сервере 1С, а то и на обоих.
18. tor0310 23.06.11 19:09 Сейчас в теме
Поручик пишет:
Лёгкие пути в студию. Про передачу по ftp знаю, не тот в данном случае путь.

Действительно, более легкие пути шли не туда. Этот работает. Спасибо
19. lena9push 07.09.11 17:39 Сейчас в теме
Отличная статья, спасибо!

Единственное возник вопрос.
Переводя текст в Base64 методом:
СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
Как сделать обратное??
Т.е. из Base64 перевести в исходный текст???
20. cool.vlad4 45 07.09.11 17:42 Сейчас в теме
(19)Base64Значение(СодержимоеZIP)...советую воспользоватся справкой в 1С
21. lena9push 07.09.11 18:05 Сейчас в теме
cool.vlad4, да, спасибо большое. Но на выходе будут двоичные данные, а их как преобразовать к исходнику?
(извиняюсь за нубство, просто уже устала искать))
22. cool.vlad4 45 07.09.11 18:21 Сейчас в теме
(21) ДвоичныеДанные.Записать(ИмяФайла), да ничего страшного, я просто имею ввиду, что быстрее такие вопросы в поиске посмотреть, ведь все методы и свойства помнить невозможно. В конфигураторе нажимаете F1, вводите в поиске ДвоичныеДанные и находите ответ на свой вопрос. Также рекомендую использовать (если есть конфигурация, типовая к примеру) поиск по конфигурации и смотреть как это сделано там.
23. softest 08.12.11 19:59 Сейчас в теме
А как использовате Get метод
24. softest 08.12.11 20:01 Сейчас в теме
И как можно передать куки с одной сесии в другую или єто невозможно, или вытянуть куки из браузера?
25. ltfriend 784 13.04.12 19:06 Сейчас в теме
(24) softest, для работы с куки можно использовать WinHttpRequest
как-то так (писалось на скорую руки, возможны ошибки, но смысл, думаю, понятен)
Соединение = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Соединение.SetRequestHeader("Cookie", "value1=abs;value2=xyz");
Соединение.Open("GET", "www.mysite.com");
Соединение.Send();

ЗаголовкиОтвета = Соединение.GetAllResponseHeaders();

Cookie = Новый Структура;

МассивЗаголовков = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ЗаголовкиОтвета, Символы.ПС);

Для каждого Заголовок Из МассивЗаголовков Цикл

  Если Лев(Заголовок, 11) = "Set-Cookie:" Тогда

    СтрокаCookie = СокрЛП(Сред(Заголовок, 12));
    Поз = Найти(СтрокаCookie, "=");
    ИмяCookie = СокрЛП(Лев(СтрокаCookie, Поз-1));
    ЗначениеCookie = СокрЛП(Сред(СтрокаCookie, Поз+1));
    Cookie.Вставить(ИмяCookie, ЗначениеCookie);

  КонецЕсли;

КонецЦикла;
Показать
kote; _nk_; greencactus2013; +3 Ответить
26. ltfriend 784 13.04.12 19:12 Сейчас в теме
А вообще можно файлы передавать как есть в виде двоичных данных с помощью процедуры "ОбъединитьФайлы"
ИмяФайла1 = ПолучитьИмяВременногоФайла("txt");

ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла1);
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""archive.zip""");
ЗаписьТекста.ЗаписатьСтроку("Content-Type: application/x-zip-compressed");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.Закрыть();

ИмяФайла2 = ПолучитьИмяВременногоФайла("txt");

ЗаписьТекста = Новый ЗаписьТекст(ИмяФайла2);
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--");
ЗаписьТекста.Закрыть();

ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("out");

МассивФайлов = Новый Массив;
МассивФайлов.Добавить(ИмяФайла1);
МассивФайлов.Добавить(ИмяФайлаСДанными);
МассивФайлов.Добавить(ИмяФайла2);

ОбъединитьФайлы(МассивФайлов, ИмяФайлаОтправки);

....
HTTP.ОтправитьДляОбработки(ИмяФайлаОтправки, "uploadfile.php", ИмяВходящегоФайла, Заголовки);
....
Показать
andrey-prog; kote; baobingo; +3 Ответить
27. Поручик 4545 13.04.12 19:23 Сейчас в теме
(26) А вы пробовали? Данные точно попадают в массив $_FILES на сервере?
28. ltfriend 784 13.04.12 19:25 Сейчас в теме
(27) пробовал. И со своим сайтом. И на стену ВКонтакте таким способом картинки загружаются без проблем.
29. Поручик 4545 14.04.12 01:31 Сейчас в теме
(28) Очень интересно. Знать бы этом когда делал проект или догадаться проверить. В этом случае статья могла и не появиться на свет.
30. vlad.frost 187 25.04.12 12:29 Сейчас в теме
Нужно ещё прокомментировать, как правильно формировать boundary в соответствии с RFC http://ru.wikipedia.org/wiki/MIME#.D0.9E.D1.80.D0.B3.D0.B0.D0.BD.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85

Для передачи множественного сообщения в заголовок Content-Type добавляется параметр boundary (граница), который обозначает последовательность символов, разделяющих части сообщения. Граница может состоять из цифр, букв и символов «'()+_,-./:=?». При использовании специальных символов (не цифр и букв) значение параметра boundary следует заключать в двойные кавычки «"». Максимальная длина границы — 70 символов.
Начало каждой части сообщения обозначается строкой «--boundary». Конец последнего сообщения обозначается строкой «--boundary--». Самые первые символы переноса строки CRLF (коды 13 и 10), которыми начинаются и заканчиваются пограничные строки не входят в содержимое самой части. Если за ними следуют ещё переносы строк, то они уже принадлежат включаемой части.


В моём случае долго не получалось увидеть на стороне сервера что-либо в массиве $_FILES пока я не догадался вставить ещё один перенос строки в самое начало отправляемого файла (так называемая преамбула):

Функция СформироватьФайлДляОтправки(ГраницаСекций)
	
	Попытка
		
		ИмяФайлаДляОтправки = ПолучитьИмяВременногоФайла("xml");
		ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаДляОтправки );
		ФайлОтправки.ЗаписатьСтроку(""); // <--- вот она, недостающая строка
		ФайлОтправки.ЗаписатьСтроку("--" + ГраницаСекций);
		ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""userfile""; filename=""" + ИмяФайлаДляОтправки + """");
		ФайлОтправки.ЗаписатьСтроку("Content-Type: text/xml");
		ФайлОтправки.ЗаписатьСтроку("");
		ФайлОтправки.ЗаписатьСтроку(ПолучитьДанные());
		ФайлОтправки.ЗаписатьСтроку("--" + ГраницаСекций + "--"); // <--- в конце обязательно указываем удвоенный дефис "--", как предписывает стандарт
				
		ФайлОтправки.Закрыть();
		
	Исключение
		ЗаписьЖурналаРегистрации("IGCDMS", УровеньЖурналаРегистрации.Ошибка, , , 
		"Не удалось сформировать файл для отправки: " + ОписаниеОшибки());
		Возврат "";
	КонецПопытки;
	
	Возврат ИмяФайлаДляОтправки;
	
КонецФункции
Показать
subbotinpu; kobayoshi; seveiven; andrey-prog; vnedreniekz; Danil.Potapov; Boroda444; GusevNA; tumr; Arc; finder; +11 Ответить
31. borrman 09.06.12 01:06 Сейчас в теме
Спасибо большое за статью!
Очень выручили!

Есть, правда, вопрос:
использование Base64 продиктовано тем, что данные могут содержать HTML-значимые символы? И я должен использовать кодирование base64 только в случае, если сервер производит декодирование, верно? Если же сервер этого не делает, то я могу отправлять текст файла как он в файле записан.

(30)
У меня заработало без первой пустой строки.
32. Поручик 4545 09.06.12 08:28 Сейчас в теме
(31) В посте (26) написано, как обойтись без Base64.
33. borrman 09.06.12 14:02 Сейчас в теме
(32) Я использовал текстовый документ для получения текста.
81. seveiven 09.07.20 01:45 Сейчас в теме
(30)
4 дня я убил на эту херню, пока не наткнулся на твой коммент. Спасибо тебе огромное. Я уже хотел плюнуть на это дело, и просто сделать прокси-скрипт на php... Как вот можно догадаться что дело именно в этой гребаной строке, я честно не понимаю, но в моем случае сработало
vlad.frost; +1 Ответить
34. Поручик 4545 26.01.13 11:59 Сейчас в теме
Надо бы переработать статью с учетом рекомендаций.
35. Wrols 87 07.02.13 19:10 Сейчас в теме
При загрузке на сайт получал ошибку от ОтправитьДляОбработки Failed sending data to the peer.

Оказалось, что проблема с параметром HTTP заголовка:
ЗаголовокHTTP.Вставить("Referer", СерверИсточник);

Двое из трех хостингов плевали на этот параметр, а zenon выдавал упомянутую выше ошибку.

Поручик, уберите этот параметр из статьи, чтоб другие не сталкивались с такой проблемой.
36. Поручик 4545 02.03.13 02:03 Сейчас в теме
Статья переработана с учетом комментариев и приложена новая обработка с примерами отправки файла на сервер двумя способамии.
37. K0Tu 18.04.13 16:23 Сейчас в теме
Доброго дня. Информация очень интересна и полезна, спасибо автору. Но у меня возникает вопрос. Админ или программист на стороне сайта(я на стороне 1С программиста) требует от меня вставить в POST строку "pass=тут_пароль", куда конкретно вставить он не может сказать в заголовок ли в ФайлОтправки или еще куда. Подскажите, пожалуйста, куда этот реквизит вставить?
38. Поручик 4545 18.04.13 18:25 Сейчас в теме
(37) В файл отправки. Пример смотрите в обработке, там всё есть.
39. lazorik 2 30.07.13 17:44 Сейчас в теме
Доброе время суток!
я все прописываю как написано у вашей статье, но никак не получается отправить запрос, постоянно пустой POST массив отправляется... Можете помочь? Спасибо
40. Поручик 4545 30.07.13 20:29 Сейчас в теме
(39) скачайте любую из приложенных обработок, они все рабочие.

помощь платная.
66. Mails79 12 20.05.16 07:48 Сейчас в теме
(39) lazorik,
Уже наверно неактуально.
В моём случае долго не получалось увидеть на стороне сервера что-либо в массиве $_FILES пока я не догадался вставить ещё один перенос строки в самое начало отправляемого файла (так называемая преамбула):
ФайлОтправки.ЗаписатьСтроку(""); // <--- вот она, недостающая строка
41. lazorik 2 30.07.13 21:30 Сейчас в теме
Спасибо.Я попробовал пользоваться ваши обработки, но результат тот же.Может сталкивались с подобной проблемой, что пустой запрос отправляет?
42. vlad.frost 187 30.07.13 22:39 Сейчас в теме
(41) Обратите внимание на мой комментарий в этом обсуждении (30)
43. svilsa 6 04.09.13 15:41 Сейчас в теме
спасибо, очень нужная информация
44. Open-BS 2 12.09.13 14:32 Сейчас в теме
Коллеги, а с чем может быть связана ошибка
Ошибка при вызове метода контекста (ОбъединитьФайлы): Ошибка сборки файла
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
по причине:
Ошибка сборки файла
по причине:
Ошибка совместного доступа к файлу 'C:\Users\Obr\AppData\Local\Temp\2\v8_58C6_75.txt'
45. Поручик 4545 12.09.13 14:46 Сейчас в теме
(44) Она может быть связана с ошибкой совместного доступа к файлу 'C:\Users\Obr\AppData\Local\Temp\2\v8_58C6_75.txt'
46. Open-BS 2 12.09.13 15:06 Сейчас в теме
(45) да я догадалась) А это было связано с тем, что был забыт метод ФайлОтправкиСередина.Закрыть(); Ну и в общем, если один из кусков собираемого файла не закрыт, его и объединить не получится, что логично.
47. kuza_87 27 11.12.13 13:29 Сейчас в теме
в 8.3 Механизм теперь другой. Нет примера обработки с механизмом на 8.3?
48. Поручик 4545 11.12.13 13:33 Сейчас в теме
(47) Сделаю. Пятьсот рублей будет стоить.
49. kuza_87 27 11.12.13 18:24 Сейчас в теме
(48) Спасибо, уже сам сделал)))
50. Поручик 4545 23.01.14 08:09 Сейчас в теме
Добавлена обработка для платформы 8.3. в режиме управляемого приложения
51. A2004333 7 24.02.14 10:00 Сейчас в теме
Мне пришлось добавить перевод строки перед Баундэри, который сразу за двоичными данными. После двоичных данных у меня больше никаких разделов не было, поэтому этот же Баундэри стал последним.

Оригинальный код автора:
ФайлОтправкиКонец.ЗаписатьСтроку("--" + Boundary + "--");

Мой код:
ФайлОтправкиКонец.ЗаписатьСтроку(Символы.ПС+"--" + Boundary + "--");

Большое спасибо автору за статью! Поставил плюс!
52. Поручик 4545 24.02.14 10:30 Сейчас в теме
(51) Этот вариант статьи давно устарел, но заливать новый нет желания, так как двиг сайта курочит оформление по-своему, то есть вся работа под хвост. Новая версия находится на моём сайте.
53. Поручик 4545 11.06.14 23:54 Сейчас в теме
Статья порядком устарела.
Обновил обработку Отправка данных и загрузка файлов на веб-сервер 8.3.epf, в которой реализовано скачивание файлов с почти любого сайта, в том числе Google Drive, показаны методы работы с отсылкой и получением HTTP-заголовков, работа с перенаправлением (редиректом), кукисами (cookies) и некоторые другие. Всё для платформы 8.3.
54. Rustig 1288 03.07.14 14:17 Сейчас в теме
(0) спасибо за столь обширное описание
55. Arc 35 16.10.14 15:15 Сейчас в теме

По мотивам статьи. Коротенькая функция, отправляющая файлы и данные через POST без создания временных файлов.
Функция ХТТПЗапросПост(АдресСайта,АдресРесурса,ДанныеЗапроса)
	ТекстДляОтправки = "";
	Boundary = Строка(Новый УникальныйИдентификатор());
	
	НомерФайла = 0;
	Для Каждого Элемент Из ДанныеЗапроса Цикл
		ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
		Если ТипЗнч(Элемент.Значение) = Тип("ДвоичныеДанные") Тогда 
			НомерФайла = НомерФайла + 1;
			ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""file"+НомерФайла+"""; filename=""" + Элемент.Ключ + """" + Символы.ПС;
			ТекстДляОтправки = ТекстДляОтправки + "Content-Type: application/x-octet-stream" + Символы.ПС;
			Данные = Base64Строка(Элемент.Значение);			
		Иначе	
			ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name="""+Элемент.Ключ+"""" + Символы.ПС;
			Данные = Строка(Элемент.Значение);
		КонецЕсли;	
		ТекстДляОтправки = ТекстДляОтправки + Символы.ПС;
		ТекстДляОтправки = ТекстДляОтправки + Данные + Символы.ПС;
		ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;
	КонецЦикла;	
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
	Заголовки.Вставить("Content-Lenght", XMLСтрока(СтрДлина(ТекстДляОтправки)));
	Запрос = Новый HTTPЗапрос(АдресРесурса,Заголовки);
	Запрос.УстановитьТелоИзСтроки(ТекстДляОтправки, КодировкаТекста.ANSI);
	
	Попытка
		Соединение = Новый HTTPСоединение(АдресСайта);
		Возврат Соединение.ОтправитьДляОбработки(Запрос);   
	Исключение
		Возврат Неопределено;
	КонецПопытки;
КонецФункции
Показать


Пример вызова:
	
Картинка = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
	Если Картинка.Формат()<>ФорматКартинки.PNG Тогда
		Картинка.Преобразовать(ФорматКартинки.PNG);
	КонецЕсли;	  
	ИдентификаторНоменклатуры = Строка(Номенклатура.УникальныйИдентификатор()); 
	ИмяКартинки = Строка(ИдентификаторНоменклатуры)+".png";
	
	ДанныеЗапроса = Новый Соответствие;
	ДанныеЗапроса.Вставить(ИмяКартинки,Картинка.ПолучитьДвоичныеДанные());
	ДанныеЗапроса.Вставить("product_id",ИдентификаторНоменклатуры);
	
	Ответ = ХТТПЗапросПост("127.0.0.1","/update_image.php",ДанныеЗапроса);
	Если Ответ<>Неопределено Тогда
		ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.ANSI);
		ЭлементыФормы.ПолеHTML.УстановитьТекст(ТекстОтвета);
	Иначе	
		Сообщить("Нет связи с сайтом!!! Проверьте Ваше интернет соединение.");
	КонецЕсли;	
Показать
Drivingblind; Irwin; VZhulanov; spynett; Sol; Maxis; Soloist; +7 Ответить
56. ZhokhovM 432 05.06.15 12:59 Сейчас в теме
Поручик, запускаю вашу обработку "ПросмотрИнфостарт.epf", пишет:

301 Moved Permanently
--------------------------------------------------------------------------------
nginx

Есть ли обработка на управляемой форме или можешь доделать эту обработку если не сложно?
57. пользователь 05.06.15 13:30
Сообщение было скрыто модератором.
...
58. Поручик 4545 05.06.15 13:32 Сейчас в теме
(56) Сдалась она тебе. Это давно устаревший вариант, чисто для примера.
59. ZhokhovM 432 05.06.15 14:01 Сейчас в теме
(58) ясно. Поищу её где-нибудь в другом месте с авторизацией.
61. Teut_Vlad 25.02.16 12:59 Сейчас в теме
(58) Зачем оставлять выложенные устаревшие варианты.
62. Поручик 4545 25.02.16 13:05 Сейчас в теме
(61) Это исключительно абстрактные примеры, а не для практического использования.
60. FSerg 66 03.07.15 04:45 Сейчас в теме
Спасибо за публикацию!
Отправить корректно двоичные данные (файл) на сервер получилось можно только через "ОбъединитьФайлы".
64. Natali133 30.04.16 13:48 Сейчас в теме
Статья очень хорошая. Сколько будет стоить помощь в написании кода отправки данных из 1с на веб-серевер через post -запросы,а также комментарии по некоторым вопросам? Код необязательно , чтобы был рабочим, главное, чтобы он отражал всю логику передачи - нужен для курсовой работы.
65. Поручик 4545 03.05.16 20:03 Сейчас в теме
(64) Так вот, в обработке всё рабочее и прокоментирована вся логика.
67. Diversus 2187 14.03.17 11:49 Сейчас в теме
(65) Сергей, скажите пожалуйста, у Вас есть замечательная функция:

Код
Функция ПолучитьСодержимоеВебАдреса(Знач СерверПриемник, Знач АдресСтраницы = "",
                Знач ПараметрыСоединения = Неопределено, ЗаголовкиHTTP = Неопределено,
                Знач ПолучитьКакДвоичныеДанные = Ложь, Знач ЗащищенноеСоединение = Ложь) Экспорт
Показать полностью


Но она работает для 1С версии 8.2.18 и выше. Есть ли аналог для устаревших версий 1С, это нужно для 8.2.13 :(
Вы используете рекурсивное получение для адресов, которые с кодами 301, 302.
Может есть, что для моего случая?

Спасибо.
68. Поручик 4545 15.03.17 11:08 Сейчас в теме
(67) Разумеется нет. Я уже забыл про 8.2.
69. demon_infernal 38 19.05.17 19:42 Сейчас в теме
В обработке для 8.3 параметр Порт задан строкой, "80", что приводит к ошибке "Несоответствие типов". И изменить нельзя, на модуле пароль. Исправьте и выложите рабочую версию, либо версию без пароля на модуле.
в управляемой форме все ок
70. Поручик 4545 19.05.17 20:46 Сейчас в теме
(69) Выдернуть и сделать обработку для обычного приложения несколько минут.
71. piton66 2 01.08.17 22:13 Сейчас в теме
Ошибка работы с Интернет: server returned nothing (no headers, no data)
Такая ошибка вылетает... В чем проблема?
72. Finn71 21.03.19 14:28 Сейчас в теме
Добрый день, а почему модуль объекта запоролен?
Прикрепленные файлы:
Снимок экрана 2019-03-21 в 14.28.15.png
85. JesteR 145 16.04.21 12:06 Сейчас в теме
(53)
(72)
А кто знает что в этом модуле объекта, почему он запаролен и почему в описанни про это ничего нет!!!
73. Поручик 4545 21.03.19 15:59 Сейчас в теме
Там ничего интересного и практического нет.
74. Donpager 1 09.09.19 20:46 Сейчас в теме
С потоками тоже хорошо получается
	_разделитель = "---"+СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); 
	хедеры=Новый Соответствие;
	хедеры.Вставить("Content-Type", "multipart/form-data; boundary="+_разделитель); 
	хПОСТ = Новый HTTPЗапрос(Ресурс,хедеры);
	_Поток = хПОСТ.ПолучитьТелоКакПоток();
	_Зап = Новый ЗаписьДанных(_Поток);
	_Зап.ЗаписатьСтроку(СтрШаблон(
	"--%1
	|Content-Disposition: form-data; name=""image""; filename=""%2""
	|Content-Type: image/%3
	|",_разделитель,ИмяКартинки,МИМЕ));
	_Зап.Записать(ПолучитьИзВременногоХранилища(АдресХранения));
	_Зап.ЗаписатьСтроку(СтрШаблон(
	"
	|--%1--",_разделитель));
	_Зап.Закрыть();
	
	Попытка
		хКон = Новый HTTPСоединение(срв);
		_Ответ = хКон.ОтправитьДляОбработки(хПОСТ);
		хКон = Неопределено;
	Исключение
		хКон = Неопределено;
	КонецПопытки;
Показать
Irwin; VZhulanov; wrooom; kaliuzhnyi; Поручик; st4rk; +6 Ответить
80. wrooom 34 07.06.20 22:14 Сейчас в теме
(74) Спасибо. Помогло. Получается Поток работает обратно другим сущностям 1С?
75. relaks_cpez@mail.ru 13.02.20 18:24 Сейчас в теме
Добрый. 1С 8.3 11УТ при интеграции с сайтом выдает ошибку при выполнении функции modeimport
файлы полученные сайтом имеют приписку <pre> null и выдает ошибку!
Спасает ли ваше расширение от этого?
76. Поручик 4545 13.02.20 18:30 Сейчас в теме
(75) Не знаю. Где здесь расширение?
77. relaks_cpez@mail.ru 13.02.20 18:50 Сейчас в теме
Не знаю как это правильно называется, есть ошибка со стороны 1С решить не можем 3-ю неделю-что мне предоставить что бы вы могли понять исправит ли Ваш код-я обозвала расширение (отправка данных, загрузка файлов на веб-сервер, скачивание файла 8.3.epf) эту беду!
78. Поручик 4545 14.02.20 07:58 Сейчас в теме
Разумеется, не исправит. Это просто демонстрация работы. К вашей ошибке никакого отношения.
79. wrooom 34 06.06.20 13:16 Сейчас в теме
Да, спасибо. Работает на 8.3.13.1513
82. user1420229 28.08.20 08:20 Сейчас в теме
Очень полезная статья. Спасибо.
Может подскажет кто нибудь: в Postman формирую подобный запрос, отправляю файл, все проходит, все ок, из 1с формирую - сервер отвечает, что файл не был отправлен. В фидлере смотрю запросы - одинаковые почти.. не подскажите в чем причина может быть?

Из Постмана:

POST https://market-api.au.ru/v1/images HTTP/1.1
X-Auth-Token: 31027ab88a4000b60ced69f21db3bfb5
Postman-Token: 1b0a831f-6ce3-4ff4-bab0-a059b5205551
Host: market-api.au.ru
Content-Type: multipart/form-data; boundary=--------------------------598431799074143791551641
Content-Length: 85401

----------------------------598431799074143791551641
Content-Disposition: form-data; name="file"; filename="1.JPG"
Content-Type: image/jpeg

яШяа JFIF ,, яю LEAD Technologies Inc. V1.01 яЫ „ 
 $.' "+"(6(+/1343&8<82<.231

<>
----------------------------598431799074143791551641--

Из 1с:

POST https://market-api.au.ru/v1/images HTTP/1.1
Host: market-api.au.ru
User-Agent: 1C+Enterprise/8.3
Accept: */*
X-Auth-Token: 31027ab88a4000b60ced69f21db3bfb5
Content-Type: multipart/form-data; boundary=----f61966556d1911e59811e0cb4ed5f4c3
Content-Length: 85369

----f61966556d1911e59811e0cb4ed5f4c3
Content-Disposition: form-data; name="file"; filename="1.JPG"
Content-Type: image/jpeg

яШяа JFIF ,, яю LEAD Technologies Inc. V1.01 яЫ „ 
 $.' "+"(6(+/1343&8<82<.231

<>
----f61966556d1911e59811e0cb4ed5f4c3--
83. user1420229 31.08.20 05:08 Сейчас в теме
(82) разобрался - в разделителях дело, boundary=--f61966556d1911e59811e0cb4ed5f4c3 должно быть
86. OlegLad67 16.04.21 13:13 Сейчас в теме
К сожалению не силен в запросах, постарался подставить свои данные. Хочу загрузить json на сайт. Сервер присылает пустой файл ответа.
87. viki_glebova 30.04.21 10:01 Сейчас в теме
Добрый день. Не подскажите, как получить список файлов из 1с через HTTP-соединение, если заранее не известны имена файлов? Файлов может быть много. Либо может вообще не быть.
88. NAlex 3 03.06.21 16:17 Сейчас в теме
Добрый день.
Подскажите пожалуйста, как загрузить два отдельных файла, например, файл pdf и файл с подписью этого файла (pdf)?

Для курла это выглядит вот так:
curl -X POST -H "Content-Type: multipart/form-data" -H "Authorization: Bearer тут_был_token" -F file=@"C:\..\путь_до_файла.pdf" -F sig=@"C:\..\путь_до_файла_подписи.pdf.p7s" https://<host>:<port>/upload
А в 1С как выполнить аналогичное действие?
89. NAlex 3 08.06.21 16:48 Сейчас в теме
(88) Вопрос снимается. Разобрался. Автору респект!
90. Maznud 27.09.21 12:12 Сейчас в теме
(88) Здравствуйте, поделитесь опытом, как делали? та же проблема
91. NAlex 3 27.09.21 18:06 Сейчас в теме
(90) Делал, только то, что описано в статье:
Данные = СтруктураСообщения.Данные.Получить();
ИсходящиеДД = Данные.Вложение.Получить();
ПодписьДД = ПолучитьПодписьДокументаУКЭП(СтруктураСообщения, ИсходящиеДД, ОшибкиОбработки);
Если Не ЗначениеЗаполнено(ПодписьДД) Тогда
ВызватьИсключение(ОшибкиОбработки);
КонецЕсли;

ИмяОтправляемогоФайла = Данные.name + "." + Данные.ТипВложения;

ИмяФайлаДанных = КаталогВременныхФайлов() + ИмяОтправляемогоФайла;
ИсходящиеДД.Записать(ИмяФайлаДанных);

ИмяФайлаПодписи = КаталогВременныхФайлов() + ИмяОтправляемогоФайла + ".sgn";
ПодписьДД.Записать(ИмяФайлаПодписи);

Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
СтруктураДанных.Вставить("Boundary", Boundary);

МассивФайловДляОбъединения = Новый Массив;

ИмяФайлаОтправкиДанных = ПолучитьИмяВременногоФайла();
ФайлОтправкиДанные = Новый ЗаписьТекста(ИмяФайлаОтправкиДанных, КодировкаТекста.UTF8, Символы.ПС, Ложь);
ФайлОтправкиДанные.ЗаписатьСтроку("--" + Boundary);
ФайлОтправкиДанные.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; filename=""" + ИмяОтправляемогоФайла + """");
ФайлОтправкиДанные.ЗаписатьСтроку("Content-Type: application/octet-stream");
ФайлОтправкиДанные.ЗаписатьСтроку("");
ФайлОтправкиДанные.Закрыть();
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиДанных);

ИмяФайлаДляЗагрузкиВременный = ПолучитьИмяВременногоФайла();
КопироватьФайл(ИмяФайлаДанных, ИмяФайлаДляЗагрузкиВременный);
МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременный);

ИмяФайлаОтправкиПодписи = ПолучитьИмяВременногоФайла();
ФайлОтправкиПодпись = Новый ЗаписьТекста(ИмяФайлаОтправкиПодписи, КодировкаТекста.UTF8, Символы.ПС, Ложь);
ФайлОтправкиПодпись.ЗаписатьСтроку("");
ФайлОтправкиПодпись.ЗаписатьСтроку("--" + Boundary);
ФайлОтправкиПодпись.ЗаписатьСтроку("Content-Disposition: form-data; name=""sig""; filename=""" + ИмяОтправляемогоФайла + ".sgn" + """");
ФайлОтправкиПодпись.ЗаписатьСтроку("Content-Type: application/octet-stream");
ФайлОтправкиПодпись.ЗаписатьСтроку("");
ФайлОтправкиПодпись.Закрыть();
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиПодписи);

ИмяФайлаДляЗагрузкиВременныйПодпись = ПолучитьИмяВременногоФайла();
КопироватьФайл(ИмяФайлаПодписи, ИмяФайлаДляЗагрузкиВременныйПодпись);
МассивФайловДляОбъединения.Добавить(ИмяФайлаДляЗагрузкиВременныйПодпись);

ИмяФайлаОтправкиОкончание = ПолучитьИмяВременногоФайла();
ФайлОтправкиОкончание = Новый ЗаписьТекста(ИмяФайлаОтправкиОкончание, КодировкаТекста.UTF8, Символы.ПС, Ложь);
ФайлОтправкиОкончание.ЗаписатьСтроку("");
ФайлОтправкиОкончание.ЗаписатьСтроку("--" + Boundary + "--");
ФайлОтправкиОкончание.Закрыть();
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиОкончание);

ИмяФайлаОтправки = ПолучитьИмяВременногоФайла();
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
... Передача данных ...
Файл = Новый Файл(ИмяФайлаДанных);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаДанных);
КонецЕсли;
Файл = Новый Файл(ИмяФайлаПодписи);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаПодписи);
КонецЕсли;
Файл = Новый Файл(ИмяФайлаДляЗагрузкиВременныйПодпись);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаДляЗагрузкиВременныйПодпись);
КонецЕсли;
Файл = Новый Файл(ИмяФайлаОтправкиОкончание);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаОтправкиОкончание);
КонецЕсли;
Файл = Новый Файл(ИмяФайлаОтправки);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаОтправки);
КонецЕсли;
Файл = Новый Файл(ИмяФайлаДляЗагрузкиВременный);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаДляЗагрузкиВременный);
КонецЕсли;
Файл = Новый Файл(ИмяФайлаОтвета);
Если Файл.Существует() Тогда
УдалитьФайлы(ИмяФайлаОтвета);
КонецЕсли;
92. Maznud 28.09.21 08:51 Сейчас в теме
93. Поручик 4545 28.09.21 11:44 Сейчас в теме
Статья устарела, а переписывать и дополнять лень. Сам уже давно не использую файлы для генерации тела запроса.
Оставьте свое сообщение

См. также

Модуль обмена с QIWI Промо

Банковские операции WEB v8 1cv8.cf УУ Абонемент ($m)

Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.

5 стартмани

25.05.2020    8379    0    Neti    10    

Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)

WEB v8 1cv8.cf Россия Абонемент ($m)

Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.

1 стартмани

01.04.2021    9015    11    SaschaG    4    

Работа с картами в 1С на примере бесплатной библиотеки Leaflet

Универсальные обработки WEB Практика программирования v8 1cv8.cf Абонемент ($m)

Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.

1 стартмани

31.03.2021    10729    32    Parsec1C    11    

Отправка Push-уведомлений через сервис Firebase Cloud Messaging по протоколу FCM HTTP v1 API

WEB Практика программирования v8 Абонемент ($m)

При разработке нативного приложения Android для ТСД, в котором присутствует функционал отображения задач кладовщикам, созданных в 1С, возникла необходимость отправлять push-уведомления о появлении новых задач. Для отправки таких уведомлений было решено использовать сервис Firebase Cloud Messaging (FCM). Так как для 1С, в отличии от других языков программирования, не существует готовых библиотек, что вполне логично, то очевидным способом отправки является использование протокола HTTP. Однако, существующая информация в интернете в части 1С содержит только сведений об отправке push-уведомлений через этот сервис с использованием устаревшего протокола HTTP Firebase Cloud Messaging. Сам Google не рекомендует использовать данный протокол и настоятельно склоняет к переходу на новый протокол FCM HTTP v1 API. Что ж, пришлось разбираться самостоятельно.

1 стартмани

24.03.2021    7306    13    ltfriend    12    

BIM: взаимодействие с платформой Autodesk Forge Промо

WEB v8 1cv8.cf Строительство Абонемент ($m)

Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.

1 стартмани

25.11.2020    39629    11    kandr    2    

Интеграция с API WB (Wildberries). Создание карточки товара (спецификации)

WEB v8 1cv8.cf ИТ-компания Россия Бесплатно (free)

Опыт интеграции с API WB (Wildberries), опыт создания карточки товара, получение токенов API WB.

18.01.2021    34083    jenyavp    59    

Генератор маршрута по "документам отгрузки" в Google.Maps

Оптовая торговля Розничная торговля WEB v8 v8::ОУ УТ11 Россия УУ Абонемент ($m)

Данная обработка будет полезна для построения маршрута по документам реализаций за выбранный период.

7 стартмани

08.11.2020    10274    15    quazare    20    

Продажи со склада поставщика WildBerries. Взаимодействие с АПИ из 1С

WEB Розничная торговля v8 УТ11 УУ Абонемент ($m)

Взялся я тут делать интеграцию с АПИ нового проекта Диких Ягод - Продажи со склада поставщика (ПССП). Это было нелегко. Никто же не читает инструкцию (уже аж 7 версии!), а зря! Для начала сделал получение списка товаров и обмен остатками.

5 стартмани

06.11.2020    30723    193    kiv1c    138    

Односторонний файловый обмен с сайтом по ftp (1C 2 Web) Промо

Файловые протоколы обмена, FTP WEB v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Подходит под любую конфигурацию на управляемом интерфейсе на базе БСП 2.4.4 и выше. Позволяет гибко настроить выгрузку, практически любых, данных по расписанию на сервер ftp вашего ресурса. Ведение лога процесса выгрузки также предусмотрено.

3 стартмани

09.12.2019    12695    14    LamerSoft    0    

Чатбот WhatsApp

WEB v8 1cv8.cf Абонемент ($m)

Внешняя обработка для написания чат-бота WhatsApp

1 стартмани

21.10.2020    11159    28    ripreal1    30    

1С + react native

WEB v8 1cv8.cf Абонемент ($m)

Пример реализации клиента для 1С на react native.

1 стартмани

09.10.2020    10597    7    van_za    6    

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

WEB Практика программирования v8 1cv8.cf Абонемент ($m)

Пошаговое руководство по созданию http сервиса (часть третья). Передача нескольких параметров в http сервис, a также формирование сложных JSON строк.

1 стартмани

02.10.2020    15243    6    hpi    16    

"Учет штрафов ГИБДД" с возможной загрузкой из открытых источников в интернет Расширение конфигурации 1С: Предприятие 8.3 Промо

Обработка документов WEB v8 v8::УФ 1cv8.cf Россия БУ УУ Абонемент ($m)

Расширение конфигурации Бухгалтерия предприятия, редакция 3.0 (при минимальных изменениях любой типовой конфигурации), позволяющее вести историю данных по штрафам ГИБДД для справочника транспортных средств компании. Бонусом поставляется внешняя обработка, способная загружать эти данные из открытых источников в интернет.

4 стартмани

30.12.2019    20777    30    capitan    24    

Подключаем WhatsApp к 1С

WEB v8 1cv8.cf Абонемент ($m)

Обработка для быстрого подключения WhatsApp к любой конфигурации 1С.

1 стартмани

30.09.2020    14050    85    andrew_shamin    61    

Формирование HTTP запроса формата multipart/form-data с двоичными данными, используя ПотокВПамяти

WEB v8 1cv8.cf Бесплатно (free)

В статье опишу вариант формирования запроса

11.09.2020    6008    malikov_pro    15    

Взаимодействие 1С со сторонними продуктами посредством REST и Golang (middleware). Часть 1 - RabbitMQ

WEB v8 1cv8.cf Абонемент ($m)

Часто 1С не может взаимодействовать со сторонними продуктами, например для шины предприятия RabbitMQ создают внешние компоненты. В статье предлагается новомодный подход REST API реализованный на приложении прокладке Middleware, язык тоже трендовый Golang. В статье немного познакомлю Вас с языком Golang, опишу интеграцию на стороне 1С (8.3.16.1502). Если статья зайдет, напишу как выгружать журнал регистрации по этой схеме в ElasticSearch

1 стартмани

31.08.2020    8433    10    dmitry-irk38    15    

Внешняя компонента для работы по Web-socket протоколу x32 x64 Промо

Разработка внешних компонент WEB v8 Абонемент ($m)

Кто когда-нибудь сталкивался с обменом данными по Web-Socket (wss) протоколу из 1С, тому известно, что в платформе отсутствуют данные механизмы (не путать с HTTP запросами и WebServices). Предлагается использовать внешнюю компоненту, написанную по технологии NativeAPI, для подключения и обмена с серверами из 1С-Предприятия, работающими по протоколу Web-Socket.

2 стартмани

30.03.2018    37531    75    Ditron    103    

Обмен через API с Честный знак (Система маркировки товаров)

Оптовая торговля WEB v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия Абонемент ($m)

Рассмотрен пример обмена через API с Честным знаком с использованием электронной подписи.

1 стартмани

10.08.2020    24176    100    vasilievil    25    

HTTP сервисы по OpenAPI спецификациям

WEB Практика программирования v8 1cv8.cf Абонемент ($m)

Начинаем путь разработки HTTP сервисов с создания спецификаций OpenAPI. Автодокументация сервисов формата Swagger UI без зависимостей. Настройка сервисов в режиме предприятия.

1 стартмани

29.06.2020    16195    15    shmalevoz    22    

Работа с AliExpress через API

WEB v8 Бесплатно (free)

В публикации опишу подход работы с API AliExpress и примеры кода.

23.06.2020    10858    malikov_pro    55    

Работа с релизами 1С и договорами ИТС Промо

WEB БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Работа с релизами 1С и партнерским кабинетом.

2 стартмани

15.08.2019    21772    65    RocKeR_13    37    

Конструктор HTTP-соединений в 1С (обычные и управляемые формы)

WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Иногда возникают мысли о том, чтобы прикрутить сервисы, связанные с HTTP-соединениями, в 1С. Необходимо писать обработку и анализировать результат.

1 стартмани

02.06.2020    9065    32    Denr83    0    

DaJet QL - расширяемый язык запросов

Интеграция с сервисами WEB v8 Абонемент ($m)

DaJet QL поддерживает практический полный синтаксис SQL Server 2005-2016. Кроме этого это расширяемый язык запросов. Обращение к объектам СУБД выполняется в терминах метаданных 1С. Доступ к возможностям этого языка запросов реализован в виде web api сервиса. Результаты запросов возвращаются в виде JSON.

1 стартмани

20.04.2020    13449    12    zhichkin    19    

Обмен данными между OZON и 1С

Оптовая торговля WEB v8 v8::ОУ УТ11 УУ Абонемент ($m)

Данная подсистема позволяет загружать отправления «с моего склада» из OZON (в статусе «Ожидают сборки») в 1с Управление торговлей 11 по API. Так же есть возможность выгружать статусы отправлений «awaiting_deliver, т.е. Ожидает отгрузки» и «cancelled, т.е. Отменен» из 1с в OZON по API.

10 стартмани

09.04.2020    32031    221    vex2865    146    

Проверка VAT номеров Промо

WEB v8 1cv8.cf Абонемент ($m)

Обработка для вызова сервиса проверка VAT номера.

1 стартмани

26.11.2018    18987    3    wtlz    1    

Пример работы с Trello из 1С

WEB v8 1cv8.cf Россия УУ Абонемент ($m)

Небольшая конфигурация содержит примеры обмена с онлайн-сервисом Trello.

1 стартмани

15.02.2020    18513    54    terrorion    18    

Взаимодействие HTML (COM объект, WebKit) с 1С (обычные и управляемые формы)

Внешние источники данных WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Показан пример использования HTML (COM объект, WebKit) в 1С (8.3).

2 стартмани

18.01.2020    13470    33    Deniskinr83    0    

Google drive - менеджер файлов

WEB Внешние источники данных v8 1cv8.cf Россия Абонемент ($m)

Синхронизация с гугл диском легко и просто!

10 стартмани

05.12.2019    24773    40    zykov_vitaliy    26    

Трекинг номеров РПО в Почте России Промо

WEB Оптовая торговля Оптовая торговля v8 Оптовая торговля, дистрибуция, логистика Абонемент ($m)

Относительно недавно Почта России стандартизировала и описала сервисы получения информации о регистрируемом почтовом отправлении (РПО). Представляю вашему вниманию конфигурацию-обертку над сервисами Почты России. Она позволяет просто (http-запросы) и без изменений конфигурации подключить сервисы отслеживания к своим информационным системам.

2 стартмани

28.03.2016    33472    39    Smaylukk    3    

Автозаполнение адреса по КЛАДР в УПП при выгрузке контрагента с портала компании (API dadata)

WEB v8 1cv8.cf Абонемент ($m)

Заведение, согласование контрагентов организовано на портале компании. Далее по web-сервису контрагенты выгружаются в УПП (юр.адрес и факт.адрес выгружаются строкой). Задача автоматизировать заполнение адреса в УПП по КЛАДР.

1 стартмани

03.12.2019    10972    3    John_d    10    

Работа с Яндекс-картами в 1С (вывод меток, прокладка маршрута, отображение балуна, вывод меток в кластеры) (обычное и управляемое приложение)

WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Работа с Яндекс-картами в 1С (управляемое приложение). Обработка показывает, как можно найти адреса на карте Яндекс, проложить маршрут.

2 стартмани

20.11.2019    21599    156    Denr83    0    

Пример взаимодействия HTML (COM объект, WebKit) с 1С (динамический отбор) (обычные и управляемые формы)

WEB v8 v8::УФ 1cv8.cf Абонемент ($m)

Показан пример использования WebKit в 1С (8.3).

2 стартмани

18.11.2019    14710    17    Denr83    0    

Работа с картой. Кадастровый учет (Росреестр). Тематические карты Промо

WEB Рабочее место v8 v8::УФ 1cv8.cf Абонемент ($m)

Внешняя обработка для работы с картами в 1С. Получения изображения с публичной кадастровой карты России, построения тематических карт

10 стартмани

31.08.2017    26214    21    vipchep    1    

Яндекс сервисы [Расширение]

Универсальные обработки WEB v8 1cv8.cf Абонемент ($m)

Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)

1 стартмани

24.10.2019    15724    11    noprogrammer    12    

Telegram бот на 1С

WEB v8 1cv8.cf Абонемент ($m)

Telegram бот на 1С в виде внешней обработки, встраиваемой в типовые 1С 8.3.

1 стартмани

24.09.2019    26105    53    budidich    19    

Выгрузка номенклатуры в социальную сеть Вконтакте

WEB Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 1cv8.cf Абонемент ($m)

Обработка для быстрой и легкой выгрузки товаров Вконтакт. Так просто еще не было)))

2 стартмани

14.08.2019    24150    61    kaliuzhnyi    48    

Работа с картами 1С 4 в 1: Яндекс, Google , 2ГИС, OpenStreetMap(OpenLayers) Промо

Универсальные обработки WEB v8 1cv8.cf Абонемент ($m)

С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов: Инициализация карты Поиск адреса на карте с текстовым представлением Геокодинг Обратная поиск адреса по ее координатами Взаимодействие с картами - прием координат установленного на карте метки Построение маршрутов по указанным точками Кластеризация меток на карте при увеличении масштаба Теперь также поддержка тонкого и веб-клиента

1 стартмани

28.12.2012    120285    2740    Smaylukk    365    

Путеводитель по истории релизов

WEB v8 1cv8.cf Абонемент ($m)

Отчет по истории выпуска релизов и анализа информации по обновлениям.

5 стартмани

13.08.2019    19967    13    YPermitin    18    

Подключение к сайту и отправка или получение данных по API (POST, GET...) (с описанием кода)

WEB v8 1cv8.cf Абонемент ($m)

Простая обработка по отправке или получение данных с любого сервера главное знать ресурс (выполняемую функцию) и тело запроса.

1 стартмани

12.08.2019    29103    56    MaxPowerr    5    

Конфигурация для обмена данными (интеграционная шина)

Внешние источники данных WEB v8 1cv8.cf Абонемент ($m)

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

4 стартмани

08.07.2019    21236    35    miha-28    17    

Пример использования REST API Яндекс Диска Промо

WEB v8 1cv8.cf Абонемент ($m)

Пример использования REST API Яндекс Диска: чтение диска, добавление каталога, загрузка файла, скачивание файлов или каталогов, удаление файлов или каталогов.

1 стартмани

26.06.2018    34981    58    MKFreeUser    15    

Шаблон http-сервиса для вашего проекта

Внешние источники данных WEB Мобильная разработка v8 v8::Mobile 1cv8.cf Абонемент ($m)

Http-сервис для обмена данными в формате JSON. Обработчики этого сервиса находятся во внешней обработке, что позволяет дорабатывать его без изменения конфигурации. Также прилагаю пример мобильного приложения для работы с данным сервисом (получает номенклатуру и остатки на складе). Сервис очень быстро разворачивается и масштабируется под ваши задачи.

3 стартмани

04.05.2019    27388    91    MarkoSokolov    48    

1С и WebKit. Вариант взаимодействия

WEB v8 1cv8.cf Абонемент ($m)

В результате перехода на WebKit тип свойства Документ у поля, имеющего вид ПолеHTMLДокумента, изменился с COMОбъект на ВнешнийОбъект. Также изменилась DOM модель документа, доступная через это свойство.

2 стартмани

23.02.2019    41857    89    mi1man    61    

Строим маршруты на картах в 1С с помощью OpenStreetMap, OSRM и Leaflet

WEB v8 1cv8.cf Транспорт, автопарки, такси Абонемент ($m)

Краткая статья о том как вывести на карту (в 1С) маршруты с помощью OpenStreetMap, OSRM и Leaflet. По данной системе очень мало примеров, но так как OpenStreetMap является бесплатным сервисом и не требует никаких ключей и регистраций, и является довольно мощным механизмом, решил написать небольшую статью "как это сделать?". В первую очередь скажу, все намного проще, если вы используете последнюю версию платформы (8.3.14), где есть поддержка практически всех браузеров (IE 11, EDGE, Mozilla), но что делать если у нас не самая свежая платформа, где поддержка только IE 9?

2 стартмани

12.02.2019    38305    126    Ditron    118    

Работа с публикациями "Инфостарт" Промо

О сообществе WEB Практика программирования v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    29660    15    RocKeR_13    16    

Яндекс карта в документе "Заказ клиента" на закладке "Доставка". (Расширение) УТ 11.4

Обработка документов WEB Оптовая торговля Оптовая торговля v8 УТ11 Россия УУ Абонемент ($m)

Показ яндекс карты в документе "Заказ клиента" на закладке "Доставка" и печать карты для курьера с контактными данными. (Расширение)

3 стартмани

05.02.2019    15416    13    ret    9    

Яндекс карты 2.1. Построение маршрута. Передача длины маршрута в реквизит формы

WEB v8 1cv8.cf Абонемент ($m)

Пригодится как пример использования Яндекс карты 2.1 для построения маршрута.

1 стартмани

24.01.2019    20852    95    John_d    33    

Конфигурация для просмотра публичных телеграм каналов Промо

WEB v8 Абонемент ($m)

Просмотр и каталогизация в более удобном виде публичных телеграм каналов, групп и чатов.

1 стартмани

02.06.2018    23242    13    DO_WHILE_LOOP    7