Имя: Пароль:
1C
1С v8
Передать файл XML используя HTTP сервис, можно ли?
,
0 9451523
 
16.10.20
12:16
Привет Всем
Хочу настроить отправку xml файла, запросом из базы данных базы источника (платформа 8.2 уф), на другом компе база приемник поднят апачи сервер и опубликована база на платформе 8.3.10, модуль выгрузки хмл файла:

&НаКлиенте
    Процедура XMLДляHTTP(Команда)
    Сообщение = Новый СообщениеПользователю;
    Сервер = "localhost";
    Попытка
    Соединение = Новый HTTPСоединение(Сервер);
    Исключение
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат;
    КонецПопытки;
    АдресРесурса = "/post_test/hs/post/File_down/";
    Заголовки = Новый Соответствие;
    
    //ОТВЕЧАЕТ ЗА ТИП ДАННЫХ КОТОРЫЕ БУДУТ УСТАНОВЛЕНЫ В ТЕЛО ЗАПРОСА
    Заголовки.Вставить("Content-Type", "text/plain;charset=UTF-8");
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
    СтрокаДанных = ПолучитьXMLСтрокуНоменклатуры();
    ДвоичныйФайл = Новый ДвоичныеДанные(СтрокаДанных);
    СтрокаНоменклатура = Base64Строка(ДвоичныйФайл);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаНоменклатура,КодировкаТекста.ANSI);
    
    Попытка
        //ОТПРАВЛЯЕМ ДАННЫЕ НА СЕРВЕР
        Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    Исключение
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат;
    КонецПопытки;
    КонецПроцедуры

&НаСервере
Функция  ПолучитьXMLСтрокуНоменклатуры()
    ПрефиксБазы = Константы.ПрефиксБазы.Получить();
    ИмяФайла = ПрефиксБазы+".xml";
    ЛокальныйПуть = КаталогВременныхФайлов();     
    ИмяФайлаXML = Новый Файл(ЛокальныйПуть+ИмяФайла);
    ДатаСтр = Формат(ТекущаяДата(),  "ДФ=""гггг-ММ-дд ЧЧ:мм""");

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
        |    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОстатокТовара,
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЦенаОтпуск КАК Цена,
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Производитель КАК Производитель,
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование КАК НоменклатураТовара
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачДата, &КонДата, Месяц, , ) КАК ТоварыНаСкладахОстаткиИОбороты
        |
        |СГРУППИРОВАТЬ ПО
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
        |    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЦенаОтпуск,
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Производитель,
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Наименование
        |
        |УПОРЯДОЧИТЬ ПО
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура
        |АВТОУПОРЯДОЧИВАНИЕ";
    запрос.УстановитьПараметр("НачДата",НачалоДня(ТекущаяДата()));
    запрос.УстановитьПараметр("КонДата",КонецДня(ТекущаяДата()));
    Результат =  Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    ФайлXML = Новый ЗаписьXML;
ФайлXML.ОткрытьФайл(ЛокальныйПуть+ИмяФайла);    
ФайлXML.ЗаписатьОбъявлениеXML();
ФайлXML.ЗаписатьНачалоЭлемента(ПрефиксБазы);    


    Пока  Выборка.Следующий() Цикл
    ФайлXML.ЗаписатьНачалоЭлемента("ТЧ");
        ФайлXML.ЗаписатьНачалоЭлемента("Номенклатура");
        ФайлXML.ЗаписатьТекст(Выборка.НоменклатураТовара);
        ФайлXML.ЗаписатьКонецЭлемента();
        
        
        ФайлXML.ЗаписатьНачалоЭлемента("Производитель");
        ФайлXML.ЗаписатьТекст(Строка(Выборка.Производитель));
        ФайлXML.ЗаписатьКонецЭлемента();

        ФайлXML.ЗаписатьНачалоЭлемента("Цена");
        ФайлXML.ЗаписатьТекст(Формат(Выборка.Цена,"ЧДЦ=3; ЧН=0; ЧГ=0"));// добавлено ЧН=0;              
        ФайлXML.ЗаписатьКонецЭлемента();


        
        ФайлXML.ЗаписатьНачалоЭлемента("ОстатокТовара");
        ФайлXML.ЗаписатьТекст(Формат(Выборка.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0"));// добавлено ЧН=0;              
        ФайлXML.ЗаписатьКонецЭлемента();
    ФайлXML.ЗаписатьКонецЭлемента();

    КонецЦикла;
    ФайлXML.ЗаписатьНачалоЭлемента("ДатаВыгрузки");
    ФайлXML.ЗаписатьНачалоЭлемента("Дата");
    ФайлXML.ЗаписатьТекст(ДатаСтр);
    ФайлXML.ЗаписатьКонецЭлемента();
    ФайлXML.ЗаписатьКонецЭлемента();
    ФайлXML.ЗаписатьКонецЭлемента();
    ФайлXML.Закрыть();
    СтрокаФайла = ЛокальныйПуть+ИмяФайла;
    Возврат СтрокаФайла;
КонецФункции

в базе приемнике поднят http сервис, в шаблоне url прописана функция:


Функция ЗагрузкаФайла(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    СтрокаНоменклатура = Запрос.ПараметрыURL.Получить("Файл");
    ДвоичныеДанные = ПолучитьДвоичныеДанныеИзBase64Строки(СтрокаНоменклатура);
        ОбщегоНазначения.СохранитьФайл(ДвоичныеДанные);
        Возврат Ответ;
КонецФункции

Процедура СохранитьФайл(ФайлЗагрузки) Экспорт
    ФайлXML= "C:\temp\"+ФайлЗагрузки+".xml";
    ВыбФайл = Новый Файл(ФайлXML);       
КонецПроцедуры
при запуске обработки файл формируется но не попадает в папку C:\temp\, что не так с кодом подскажите пожалуйста
1 MyNick
 
16.10.20
13:12
Ну так папка темп наверное на сервере, а ты пади на своем компе смотришь )
2 ДедМорроз
 
16.10.20
15:57
Можно открыть поток в памяти,в него xml-нуть,и потом поток как тело отправить в запрос.