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

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

Разработка - Системная интеграция - Интеграция с WEB

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

В ходе реализации одного проекта потребовалось организовать автоматическую передачу данных на веб-сервер посредством регламентного задания.
Покопавшись прежде всего в мануалах, синтаксис-помощнике 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);
    }
}
?>

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

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

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

284

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

Наименование Файл Версия Размер
Отправка данных, загрузка файлов на веб-сервер, скачивание файла 8.3.epf
.epf 33,21Kb
06.11.15
334
.epf 33,21Kb 334 Скачать
ПросмотрИнфостарт.epf
.epf 11,76Kb
28.02.13
99
.epf 11,76Kb 99 Скачать
Загрузка файлов на веб-сервер.epf
.epf 15,68Kb
02.03.14
240
.epf 15,68Kb 240 Скачать

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

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

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

В качестве сайта - подопытного кролика выбран инфостарт
Скачать http://forum.aeroion.ru/download.php?id=165
korablev64; Asdam; Serj1C; +3 Ответить
5. Serj1C 477 18.05.09 20:50 Сейчас в теме
(4) Спасибо, теперь можно изучать
6. ValentinV 25.05.09 11:29 Сейчас в теме
Почему таким сложным путем?
7. Поручик 4329 25.05.09 19:54 Сейчас в теме
Лёгкие пути в студию. Про передачу по ftp знаю, не тот в данном случае путь.
8. мх 16 11.08.09 14:33 Сейчас в теме
Можно ли как-то передать файл на сервер из 7.7 ?
9. Поручик 4329 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. Поручик 4329 29.10.09 16:51 Сейчас в теме
Сделать именно так, как в примере формирования содержимого POST-запроса. Имейте в виду, этот код практически полностью приведён из рабочей конфигурации.
Посмотреть содержимое массива $_FILES, $_POST на сервере.
В конце концов, проверить размер передаваемых данных.
13. Mopnex03 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 25.12.09 12:57 Сейчас в теме
Пример реализации, используя, 1С:Предприятие 7.7 здесь.
15. FFelix 436 10.03.10 19:49 Сейчас в теме
Попробовал, работает. Спасибо! :)
16. Valerikk 14.05.10 17:42 Сейчас в теме
Здравствуйте.
Возникла проблемка:
если выполнять на стороне клиента, все нормуль;
но если то же самое делать на стороне сервера (регл. заданием), приходит пустой ПОСТ на сервер :( . ФайлОтправки и файл данных - идентичны.
Посоветуйте, плиз, где искать косяк...
17. Поручик 4329 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 407 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 407 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", ИмяВходящегоФайла, Заголовки);
....
Показать
kote; baobingo; +2 Ответить
27. Поручик 4329 13.04.12 19:23 Сейчас в теме
(26) А вы пробовали? Данные точно попадают в массив $_FILES на сервере?
28. ltfriend 407 13.04.12 19:25 Сейчас в теме
(27) пробовал. И со своим сайтом. И на стену ВКонтакте таким способом картинки загружаются без проблем.
29. Поручик 4329 14.04.12 01:31 Сейчас в теме
(28) Очень интересно. Знать бы этом когда делал проект или догадаться проверить. В этом случае статья могла и не появиться на свет.
30. vlad.frost 186 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", УровеньЖурналаРегистрации.Ошибка, , , 
		"Не удалось сформировать файл для отправки: " + ОписаниеОшибки());
		Возврат "";
	КонецПопытки;
	
	Возврат ИмяФайлаДляОтправки;
	
КонецФункции
Показать
alexlesley; Danil.Potapov; Boroda444; GusevNA; tumr; Arc; finder; +7 Ответить
31. borrman 09.06.12 01:06 Сейчас в теме
Спасибо большое за статью!
Очень выручили!

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

(30)
У меня заработало без первой пустой строки.
32. Поручик 4329 09.06.12 08:28 Сейчас в теме
(31) В посте (26) написано, как обойтись без Base64.
33. borrman 09.06.12 14:02 Сейчас в теме
(32) Я использовал текстовый документ для получения текста.
34. Поручик 4329 26.01.13 11:59 Сейчас в теме
Надо бы переработать статью с учетом рекомендаций.
35. Wrols 78 07.02.13 19:10 Сейчас в теме
При загрузке на сайт получал ошибку от ОтправитьДляОбработки Failed sending data to the peer.

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

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

Поручик, уберите этот параметр из статьи, чтоб другие не сталкивались с такой проблемой.
36. Поручик 4329 02.03.13 02:03 Сейчас в теме
Статья переработана с учетом комментариев и приложена новая обработка с примерами отправки файла на сервер двумя способамии.
37. K0Tu 18.04.13 16:23 Сейчас в теме
Доброго дня. Информация очень интересна и полезна, спасибо автору. Но у меня возникает вопрос. Админ или программист на стороне сайта(я на стороне 1С программиста) требует от меня вставить в POST строку "pass=тут_пароль", куда конкретно вставить он не может сказать в заголовок ли в ФайлОтправки или еще куда. Подскажите, пожалуйста, куда этот реквизит вставить?
38. Поручик 4329 18.04.13 18:25 Сейчас в теме
(37) В файл отправки. Пример смотрите в обработке, там всё есть.
39. lazorik 2 30.07.13 17:44 Сейчас в теме
Доброе время суток!
я все прописываю как написано у вашей статье, но никак не получается отправить запрос, постоянно пустой POST массив отправляется... Можете помочь? Спасибо
40. Поручик 4329 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 186 30.07.13 22:39 Сейчас в теме
(41) Обратите внимание на мой комментарий в этом обсуждении (30)
43. svilsa 2 04.09.13 15:41 Сейчас в теме
спасибо, очень нужная информация
44. Open-BS 12.09.13 14:32 Сейчас в теме
Коллеги, а с чем может быть связана ошибка
Ошибка при вызове метода контекста (ОбъединитьФайлы): Ошибка сборки файла
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
по причине:
Ошибка сборки файла
по причине:
Ошибка совместного доступа к файлу 'C:\Users\Obr\AppData\Local\Temp\2\v8_58C6_75.txt'
45. Поручик 4329 12.09.13 14:46 Сейчас в теме
(44) Она может быть связана с ошибкой совместного доступа к файлу 'C:\Users\Obr\AppData\Local\Temp\2\v8_58C6_75.txt'
46. Open-BS 12.09.13 15:06 Сейчас в теме
(45) да я догадалась) А это было связано с тем, что был забыт метод ФайлОтправкиСередина.Закрыть(); Ну и в общем, если один из кусков собираемого файла не закрыт, его и объединить не получится, что логично.
47. kuza_87 25 11.12.13 13:29 Сейчас в теме
в 8.3 Механизм теперь другой. Нет примера обработки с механизмом на 8.3?
48. Поручик 4329 11.12.13 13:33 Сейчас в теме
(47) Сделаю. Пятьсот рублей будет стоить.
49. kuza_87 25 11.12.13 18:24 Сейчас в теме
(48) Спасибо, уже сам сделал)))
50. Поручик 4329 23.01.14 08:09 Сейчас в теме
Добавлена обработка для платформы 8.3. в режиме управляемого приложения
51. A2004333 7 24.02.14 10:00 Сейчас в теме
Мне пришлось добавить перевод строки перед Баундэри, который сразу за двоичными данными. После двоичных данных у меня больше никаких разделов не было, поэтому этот же Баундэри стал последним.

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

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

Большое спасибо автору за статью! Поставил плюс!
52. Поручик 4329 24.02.14 10:30 Сейчас в теме
(51) Этот вариант статьи давно устарел, но заливать новый нет желания, так как двиг сайта курочит оформление по-своему, то есть вся работа под хвост. Новая версия находится на моём сайте.
53. Поручик 4329 11.06.14 23:54 Сейчас в теме
Статья порядком устарела.
Обновил обработку Отправка данных и загрузка файлов на веб-сервер 8.3.epf, в которой реализовано скачивание файлов с почти любого сайта, в том числе Google Drive, показаны методы работы с отсылкой и получением HTTP-заголовков, работа с перенаправлением (редиректом), кукисами (cookies) и некоторые другие. Всё для платформы 8.3.
54. Rustig 1194 03.07.14 14:17 Сейчас в теме
(0) спасибо за столь обширное описание
55. Arc 26 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.УстановитьТекст(ТекстОтвета);
	Иначе	
		Сообщить("Нет связи с сайтом!!! Проверьте Ваше интернет соединение.");
	КонецЕсли;	
Показать
spynett; Sol; Maxis; Soloist; +4 Ответить
56. ZhokhovM 386 05.06.15 12:59 Сейчас в теме
Поручик, запускаю вашу обработку "ПросмотрИнфостарт.epf", пишет:

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

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

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


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

Спасибо.
68. Поручик 4329 15.03.17 11:08 Сейчас в теме
(67) Разумеется нет. Я уже забыл про 8.2.
69. demon_infernal 31 19.05.17 19:42 Сейчас в теме
В обработке для 8.3 параметр Порт задан строкой, "80", что приводит к ошибке "Несоответствие типов". И изменить нельзя, на модуле пароль. Исправьте и выложите рабочую версию, либо версию без пароля на модуле.
в управляемой форме все ок
70. Поручик 4329 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
73. Поручик 4329 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Соединение(срв);
		_Ответ = хКон.ОтправитьДляОбработки(хПОСТ);
		хКон = Неопределено;
	Исключение
		хКон = Неопределено;
	КонецПопытки;
Показать
Оставьте свое сообщение

См. также

Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью Rest API сайта. Часть 1. Авторизация 33

Статья Программист Конфигурация (md, cf) v8 Windows Абонемент ($m) WEB

Интеграция 1С с сайтом (магазином) WordPress (WooCommerce) с помощью функционала Rest API предоставляемого платформой (CMS) WordPress (WooCommerce). Без дополнительных приложений на PHP/вставьте сюда любой другой язык программирования/.

1 стартмани

12.10.2019    1356    5    osivv    27       

Telegram бот на 1С 39

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

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

1 стартмани

24.09.2019    3400    11    budidich    15       

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

Инструменты и обработки no Внешняя обработка (ert,epf) v8 1cv8.cf Оптовая торговля Розничная торговля Абонемент ($m) WEB

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

2 стартмани

14.08.2019    2051    11    kalyuzhny    20       

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

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) WEB

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

2 стартмани

13.08.2019    2546    7    YPermitin    15       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

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

1 стартмани

12.08.2019    2670    4    MaxPowerr    5       

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery с кэшированием 94

Статья Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) WEB

В статье описан способ создания "фронтенда" на HTML/CSS/jQuery и скрипт кеширования AJAX запросов на PHP.

1 стартмани

06.08.2019    4746    6    Sedaiko    22       

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

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Windows Абонемент ($m) Внешние источники данных WEB

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

4 стартмани

08.07.2019    3021    15    miha-28    14       

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

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

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

2 стартмани

04.05.2019    5911    46    MarkoSokolov    47       

1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки 121

Статья Программист Архив с данными v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных Обмен через XML WEB Разработка

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

1 стартмани

22.04.2019    15829    14    riposte    63       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) WEB

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

2 стартмани

23.02.2019    9640    29    mi1man    35       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Транспорт, автопарки, такси Абонемент ($m) WEB

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

2 стартмани

12.02.2019    8900    51    Ditron    15       

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

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

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

3 стартмани

05.02.2019    3733    11    ret    6       

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8 512

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

1 стартмани

31.01.2019    25042    242    bonv    106       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

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

1 стартмани

24.01.2019    4605    43    John_d    26       

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

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

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

1 стартмани

26.11.2018    3646    wtlz    0       

Веб-форма авторизации/регистрации/восстановления пароля для веб-клиента 1С с помощью HTML/CSS/PHP/HTTP-сервисов 1С 27

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Абонемент ($m) WEB

Пришла в голову идея создать универсальную веб-форму входа в веб-клиент 1С на HTML/CSS/PHP/HTTP-сервисы 1С. Чтобы прямо как на нормальных сайтах. Заодно и для ознакомления с 1С с новой, для себя, стороны. Интересно было попробовать интеграцию PHP - 1С.

1 стартмани

08.11.2018    7368    20    Бэнни    15       

Загрузка чека онлайн-касс (загрузка товаров из чека) 38

Инструменты и обработки Системный администратор Программист Бухгалтер Внешняя обработка (ert,epf) v8 1cv8.cf Кассовые операции Розничная торговля Абонемент ($m) Внешние источники данных WEB

Обработка-пример, позволяет любому и из любой конфигурации загрузить информацию о товарах из чека(и не только) с сервера ФНС proverkacheka.nalog.ru

2 стартмани

08.10.2018    7123    23    echo77    32       

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

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

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

1 стартмани

13.09.2018    8165    10    RocKeR_13    12       

SOAP для чайников 85

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Обмен через XML WEB

Немножко про SOAP сервис. И пример работы с подключением и получением данных по SOAP за 5 минут.

1 стартмани

05.09.2018    18355    25    dusha0020    18       

Класс-обработка “Работа с картами Яндекс” 58

Инструменты и обработки Программист Конфигурация (md, cf) v8 Абонемент ($m) Разработка внешних компонент WEB

Как показать точку или маршрут на карте Яндекс. Как получить координаты по строке адреса (геокодирование).

1 стартмани

01.08.2018    10508    129    RSConsulting    13       

HTTP Сервисы: Путь к своему сервису. Часть 1 257

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Практика программирования WEB

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    34969    15    dsdred    22       

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

Инструменты и обработки no Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

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

1 стартмани

26.06.2018    12314    22    MKFreeUser    11       

Обмен файловыми базами данных через Yandex диск 7

Инструменты и обработки no Приложение (exe) v8 Россия Windows Абонемент ($m) WEB

Выполнение операций обмена с Yandex диском для файловых БД, по протоколу WebDav, в автоматическом или ручном режимах.

1 стартмани

11.06.2018    9830    6    slimper    1       

Чтение сжатого gzip, deflate HTTP ответа сервера. Без ВК. Уменьши время загрузки и сократи трафик в 3 раза 69

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

В платформе 1С:Предприятие не реализовано штатного механизма декодирования ответа веб серверов, в которых присутствует gzip сжатие. Некоторые использовали WinHttpRequest.5.1 , кто-то писал ВК. Друзья, хватит. Вот вам решение.

1 стартмани

08.06.2018    7990    44    Malfarion    14       

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

Инструменты и обработки Программист Конфигурация (md, cf) v8 Абонемент ($m) WEB

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

1 стартмани

02.06.2018    9864    7    DO_WHILE_LOOP    7       

Простой эмулятор вызова веб-сервиса 1С с просмотром результата 24

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Обмен через XML WEB

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

1 стартмани

24.04.2018    7334    17    anvolkov1cbit    9       

Интеграция между Atlassian Jira и 1С:Предприятие 8.3 используя Jira REST API (выборка, создание и изменение запросов, чтение, создание и удаление записей о работах, чтение комментариев и другие возможности) 80

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Внешние источники данных WEB

Внешняя обработка на управляемой форме для 1С:Предприятие 8.3 по интеграции с Atlassian Jira используя Jira REST API. Ключевые функции: выборка запросов с использованием JQL; добавление и изменение запросов; добавление, изменение и удаление записей о работах; чтение комментариев к запросам; сохранение всех ключевых параметров между сеансами работы. Тестирование проводилось на платформе 1С (8.3.11.2954) совместно с JIRA Server platform (7.3.7)

1 стартмани

24.04.2018    16753    113    Ko1t    63       

Простая и пошаговая интеграция Яндекс-Алисы и 1С 76

Инструменты и обработки Программист Конфигурация (md, cf) v8 Windows Абонемент ($m) WEB

Интеграция Алисы и 1С через http сервис на платформе 8.3.9. Используем виртуальный сервер, сертификат от letsencrypt, и делаем простые запросы к базе из Алисы.

1 стартмани

09.04.2018    14818    15    kiv1c    33       

Чтение и запись из таблиц гугл (google sheets) в табличный документ 1С (8.3, управляемые формы) 148

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Внешние источники данных WEB

Внешняя обработка на управляемой форме для 1С версии 8.3 для доступа к сервисам Google Sheets c использованием протокола авторизации OAuth 2.0. Выполняет получение списка листов таблицы гугл, чтение таблицы гугл в табличный документ 1С и запись из табличного документа 1С в таблицу гугл. Тестирование проводилось на платформе 1С:Предприятие 8.3 (8.3.11.2954).

1 стартмани

09.04.2018    21124    164    Ko1t    50       

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

Инструменты и обработки Программист Архив с данными v8 Windows Абонемент ($m) Разработка внешних компонент WEB

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

6 стартмани

30.03.2018    12847    9    Ditron    50       

2 в 1: Проверить действительность паспорта / Получить ИНН по паспорту 38

Инструменты и обработки Бухгалтер Внешняя обработка (ert,epf) v8 v8::УФ ERP2 БП3.0 ЗУП3.x Россия БУ Управление персоналом (HRM) Абонемент ($m) Обработка справочников WEB

Представляю вашему вниманию внешнюю обработку заполнения элемента справочника "Физические лица". Обработка выполнена с использованием API (для работы необходим доступ в интернет), содержит полностью открытый код и 2 команды: Проверка документа, удостоверяющего личность, в списке недействительных паспортов и Заполнение ИНН по паспортным данным.

1 стартмани

27.02.2018    11514    124    VladimirElohov    33       

Построение маршрута доставки с расчётом расстояния для любой базы УФ 56

Инструменты и обработки Руководитель проекта Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Оптовая торговля Абонемент ($m) Универсальные обработки WEB

Графическое изображение маршрутного листа по картам гугл. Работает на любой конфигурации с управляемыми формами. Использует новую версию api google-карт от 13.02.2018 года под IE11.

10 стартмани

24.02.2018    18350    35    KorotkovRV    16       

А чё это вы здесь делаете, а? 141

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) WEB

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

1 стартмани

21.01.2018    16493    27    infosoft-v    41       

Пример заполнения/создания файла XML из XSD схемы, используя XDTO 128

Статья Программист Документ XML v8 1cv8.cf Абонемент ($m) Обмен через XML WEB

Добрый день, коллеги! Наконец-то дошли руки написать сию статью. Хочу поделиться своим опытом по разбору xsd схемы используя Фабрику XDTO, а также связанным с этим XML файлом. Думаю, наверняка кому-то понадобится.

1 стартмани

21.12.2017    28483    40    sandybaev    23       

Сервер push сообщений “Push0k“ 18.05 12

Инструменты и обработки no Архив с данными v8 1cv8.cf Абонемент ($m) WEB

Аналог других “мессенджеров“. Позволяет практически все то же самое, что и другие решения. За исключением смайлов, эмодзи, голосовой и видео связи. Основное отличие от других решений, открыта и доступна для изменения серверная и клиентская часть месенджера. Общедоступной серверной части нет, за серверную часть отвечаете вы сами.

1 стартмани

19.12.2017    10366    11    PloAl    20       

Проверка орфографии средствами Yandex Speller 77

Инструменты и обработки no Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки WEB

Проверка орфографии средствами Yandex Speller с опциями и коррекцией ошибок. Возможность вызова как с сервера, так и с клиента (с последующим исправлением).

1 стартмани

09.11.2017    13027    49    🅵🅾️🆇    38       

Веб-сервисы 1С и PHP 30

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Украина Windows Абонемент ($m) WEB

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

1 стартмани

20.10.2017    18491    41    serg1234    12       

Ведение локального каталога обработок с Инфостарт 67

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки WEB

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

1 стартмани

06.10.2017    18202    55    rpgshnik    48       

Подсистема Вики - интеграция 1С и сайта под управлением MediaWiki 90

Инструменты и обработки Программист Архив с данными v8 Абонемент ($m) WEB

Редактирование статей сайта Mediawiki из 1С. Формирование функционального описания конфигурации на сайте Вики.

1 стартмани

19.09.2017    20481    31    shmalevoz    18       

Отправка HTTP запроса из 1С на сайт. 25

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) WEB

Задача: Передать данные из 1С на сайт. Данные будут передаваться в PHP скрипт, через HTTP запрос, вызываемый из 1С.

1 стартмани

07.05.2017    43285    67    sm2701    14       

Web сервис 1С 24

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

Пример реализации простого web сервиса. Особенность: не используются XDTO пакеты, определяемые в дереве конфигураций; возможность передачи любых структур данных: списки значений, таблицы значений, табличные документы и т.п.

1 стартмани

21.03.2017    22146    74    hiduk    33       

Разбор адреса на составляющие с помощью Яндекс API и Google API 44

Инструменты и обработки no Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки WEB

Есть адрес строкой, а нужно разбить его на составляющие? Для этого не обязательно писать собственный код, пользуемся Яндекс API и Google API.

1 стартмани

10.02.2017    17764    94    Ivon    22       

Передача большого количества объектов через Web-сервисы 43

Статья Программист Внешняя обработка (ert,epf) v8 УТ11 Абонемент ($m) WEB

Один из вариантов передачи большого количества объектов при использовании Web-сервисов.

1 стартмани

31.01.2017    12313    6    SinglCOOLer    14       

JSON парсер для профессиональных разработчиков 51

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Россия Абонемент ($m) WEB Инструментарий разработчика Практика программирования

Описана методика создания парсеров json-файлов для любой конфигурации 1С. Приложена тестовая конфигурация и обработки-парсеры для обычного и управляемого приложений. Материал предназначен для разработчиков на базе 1С, занимающихся вопросами автоматизации бизнес процессов, обмена данными, сопряжения 1С с web-сайтами и сервисами.

4 стартмани

09.01.2017    19385    33    O-Planet    29       

Telegram bot. Обработка для управления ботом 24

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Универсальные обработки Внешние источники данных WEB

Может быть основой для ваших ботов, или если нужно создать быстро бота и управлять. Так как управление из 1С, вы можете писать боту разные команды для получения данных из базы. Обработка работает целиком на клиенте, без серверных вызовов! Это очень полезно, для развития максимальных скоростей. Настройки хранятся в каталоге пользователя. Тестировалась на 8.3.8, тонкий клиент, для любых конфигураций.

1 стартмани

14.11.2016    8041    46    silberRus    10       

Подключение к Яндекс.Диску через REST API 29

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) WEB

Эта обработка позволит подключить вашу конфигурацию к Яндекс.Диску. В ней есть графический интерфейс, поэтому можно проверить работоспособность до встраивания обработки в конфигурацию.

1 стартмани

14.11.2016    10956    71    vitaliy1911    11       

Работа с двоичными данными на примере чтения файлов изображений. Новые возможности 8.3.9 109

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Россия Абонемент ($m) Практика программирования WEB

В статье приводятся новые функции по работе с двоичными данными, появившимися в версии платформы 8.3.9 , на примере анализа формата и размера изображений. А также пример отправки изображения через API ВКонтакте с помощью новых объектов (без использования ОбъединитьФайлы())

1 стартмани

14.11.2016    18372    16    Anton64    22