8.х Обмен из 1С на сайт

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Drakonchegg, 27 авг 2012.

  1. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    На пункт 4 не вижу ответа. Важно чтобы сам сайт разбирать файл мог, он примет, а потом разбор должен идти
    Выкладываю функцию отправки
    Код:
    Функция ОтправитьФайлНаСервер(ИмяФайла, ЕдиныйBoundary, мСервер, мПорт, АдресСкрипта, ЗаписыватьНаформу, ФормаЗаписи, ИмяЭлементаФормы)
    
    Построитель = новый ПостроительОтчета;
    
    Boundary = ЕдиныйBoundary; // Уникальный разделитель, например: СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    //Определяем имя файла ответа от веб-сервера
    ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
    
    ИмяФайлаДанных = ИмяФайла;
    
    СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
    
    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
    ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ);
    ТекстовыйДок = Новый ТекстовыйДокумент;
    
    // НАДО в один файл переписать будет
    //Определяем раздел двоичных данных
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ТекстовыйДок.ДобавитьСтроку("--" + Boundary);
    //Указываем имя файла для передачи
    ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""data""; filename=""" + ИмяФайлаДанных + """");
    ТекстовыйДок.ДобавитьСтроку("Content-Disposition: form-data; name=""data""; filename=""" + ИмяФайлаДанных + """");
    //Указываем тип передаваемых данных.
    //С таким же успехом в Content-Type можно указать application/x-octet-stream
    ФайлОтправки.ЗаписатьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
    ТекстовыйДок.ДобавитьСтроку("Content-Type: application/x-zip-compressed" + Символы.ПС + Символы.ПС);
    //Записываем кодированные двоичные данные
    ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP);
    ТекстовыйДок.ДобавитьСтроку(СодержимоеZIP);
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ТекстовыйДок.ДобавитьСтроку("--" + Boundary);
    
    //Определяем раздел
    
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ТекстовыйДок.ДобавитьСтроку("--" + Boundary);
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
    ТекстовыйДок.ДобавитьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС);
    // можно добавить данные
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ТекстовыйДок.ДобавитьСтроку("--" + Boundary);
    
    //Соответствует HTML-тэгу
    //input type="text" name="some_field" value="Some text" /
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ТекстовыйДок.ДобавитьСтроку("--" + Boundary);
    ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""some_field""" + Символы.ПС);
    ТекстовыйДок.ДобавитьСтроку("Content-disposition: form-data; name=""some_field""" + Символы.ПС);
    ФайлОтправки.ЗаписатьСтроку("Some text");
    ТекстовыйДок.ДобавитьСтроку("Some text");
    ФайлОтправки.ЗаписатьСтроку("--" + Boundary);
    ТекстовыйДок.ДобавитьСтроку("--" + Boundary);
    
    ФайлОтправки.Закрыть();
    
    ЗаголовокHTTP = Новый Соответствие();
    
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref");
    ЗаголовокHTTP.Вставить("Referer", СерверИсточник);
    
    //Укажем формат данных Content-Type
    ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
    
    //Укажем длину POST-запроса Content-Length
    ФайлОтправки = Новый Файл(ИмяФайлаОтправки);
    РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
    ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
    
    НТТР = Новый HTTPСоединение(мСервер, мПорт);
    
    Попытка
    НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP);
    Исключение
    //Пример обработки ошибки соединения.
    #Если Клиент Тогда
    Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки());
    #Иначе
    ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки());
    #КонецЕсли
    Возврат ложь;
    КонецПопытки;
    
    // Передача текста на форму (по возможности)
    Если ЗаписыватьНаформу Тогда
    Попытка
    ФормаЗаписи.ЭлементыФормы[ИмяЭлементаФормы].УстановитьТекст(ТекстовыйДок.ПолучитьТекст());
    Исключение
    КонецПопытки;
    КонецЕсли;
    
    //Удалим файл отправки POST-запроса. Больше он нам не нужен.
    УдалитьФайлы(ИмяФайлаОтправки);
    
    ФайлОтвета = Новый Файл(ИмяФайлаОтвета);
    Если ФайлОтвета.Существует() Тогда
    ТекстОтвета = Новый ТекстовыйДокумент();
    ТекстОтвета.Прочитать(ИмяФайлаОтвета);
    Если ТекстОтвета.КоличествоСтрок() > 0 Тогда
    ОтветСервера = ТекстОтвета.ПолучитьТекст();
    #Если Клиент Тогда
    Сообщить("Ответ сервера: " + СтрЗаменить(СокрЛП(ОтветСервера), "<br>", ""));
    #КонецЕсли
    Иначе
    #Если Клиент Тогда
    Сообщить("Отправка файла на сервер: Получен пустой ответ сервера.");
    #Иначе
    ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера.");
    #КонецЕсли
    КонецЕсли;
    УдалитьФайлы(ИмяФайлаОтвета);
    Иначе
    #Если Клиент Тогда
    Сообщить("Отправка файла на сервер: Ответ сервера не получен.");
    #Иначе
    ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен.");
    #КонецЕсли
    КонецЕсли;
    
    КонецФункции
    Под себя нужно будет модифицировать, со стороны сайта данные принимаются и должны быть обработаны, попробуйте, если че, пишите
  2. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    {Форма.Форма(302)}: Ошибка при вызове конструктора (ДвоичныеДанные): Каталог не обнаружен ''
    СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных));
    по причине:
    Каталог не обнаружен ''
  3. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    и?
    Что значит пост выше?
    Программа ругается на то что имя файла в переменной
    Код:
    ИмяФайлаДанных
    не существует. Пожалуйста, воспользуйтесь для начала отладчиком 1С и исключите банальные ошибки.
    Ваша основная задача, создание двоичных файлов архива для передачи по http протоколу. В функции создание этого файла описано.
    ИмяФайлаДанных - это переменная в которой хранится путь до файла подготовленного для отправки. Соберите данные, выгрузите их в файл, и, в эту переменную передайте путь к файлу
  4. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Эта задача не из самых простых, в инете сможете найти только несколько невнятных ответов.
    Я когда сам писал был удивлен скудности сей информации
  5. TopicStarter Overlay
    Drakonchegg
    Offline

    Drakonchegg Опытный в 1С

    Регистрация:
    17 мар 2012
    Сообщения:
    117
    Симпатии:
    0
    Баллы:
    26
    Еще раз Привет! Настроил обмен с сайтом, Выгрузка идет нормально, ну теперь не могу получиться данные из сайта. Не могу разобрать ХМЛку. Подскажите как сделать то... вот пример ХМЛ http://v8.1c.ru/edi/edi_stnd/131/from.xml
  6. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.174
    Симпатии:
    13
    Баллы:
    29
    а чем ты загружаешь этот файл в 1с ? ошибки какие пишет ?
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Drakonchegg, пожалуйста задавайте вопросы полными предложениями, делал то-то то-то, так-то так-то. Сам файл нам ни о чем не скажет

Поделиться этой страницей