Имя: Пароль:
1C
1С v8
Как получить данные из xml-файла, расположенного где-то на хосте?
0 napagokc
 
04.02.14
08:05
Мистяне! Подскажите, пожалуйста, можно ли средствами 1С получить данные напрямую с сайта? Даже не так... Где-то на хостинге выложен xml-файл, мне нужно выдернуть из него данные. Мне для этого нужно сначала его сохранить на диск? Как это сделать средствами 1С? Или можно обойтись без сохранения, а выдергивать данные прямо оттуда? Второй вариант предпочтительнее, но можно ли это сделать в 1С и как? Подскажите, пожалуйста, поделитесь опытом...
1 Wobland
 
04.02.14
08:12
что-то такое я когда-то писал

Процедура КоманднаяПанель3ЗагрузитьСтраницу(Кнопка)
    ФормаАвторизации=ПолучитьФорму("ФормаАвторизации");
    СтруктураАвторизации=ФормаАвторизации.ОткрытьМодально();
    Если СтруктураАвторизации=Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ИмяФайла=ПолучитьИмяВременногоФайла("html");
    Прокси=Новый ИнтернетПрокси;
    Прокси.Пользователь=СтруктураАвторизации.ЛогинПрокси;
    Прокси.Пароль=СтруктураАвторизации.ПарольПрокси;
    Попытка
        Если СтруктураАвторизации.ИспользоватьПрокси Тогда
            http=Новый HTTPСоединение("techsupp.1c.ru", , СтруктураАвторизации.Логин, СтруктураАвторизации.Пароль, Прокси);
        Иначе
            http=Новый HTTPСоединение("techsupp.1c.ru", , СтруктураАвторизации.Логин, СтруктураАвторизации.Пароль);
        КонецЕсли;
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Попытка
        http.Получить("", ИмяФайла);
        Мусор.Добавить(ИмяФайла);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    ф.ИспользуемоеИмяФайла=ИмяФайла;
    Попытка
        ф.Прочитать(ИмяФайла);
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    ЭлементыФормы.НадписьЗаголовок.Заголовок="Дата последних обновлений: "+ПолучитьДатуПоследнихОбновлений();
КонецПроцедуры

Процедура КоманднаяПанель3ПолучитьФайлы(Кнопка)
    Для Каждого ТекСтрока Из ПоследниеВерсии Цикл
        ОбработкаПрерыванияПользователя();
        Если НЕ ТекСтрока.Пометка Тогда
            Продолжить;
        КонецЕсли;
        Состояние("Загрузка http://techsupp.1c.ru/";+ТекСтрока.Гиперссылка);
        Расширение=Сред(ТекСтрока.Гиперссылка, СтрДлина(ТекСтрока.Гиперссылка)-2, 3);
        ИмяКаталога=СтрПолучитьСтроку(ТекСтрока.Наименование, СтрЧислоСтрок(ТекСтрока.Наименование));
        ИмяКаталога=СтрЗаменить(ИмяКаталога, ":", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, ".", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, "\", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, "/", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, "*", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, "?", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, ";", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, "(", "");
        ИмяКаталога=СтрЗаменить(ИмяКаталога, ")", "");
        Если НЕ ПроверитьСуществованиеКаталога(ИмяКаталога) Тогда
            Продолжить;
        КонецЕсли;
        ИмяФайла=ПутьЗагрузки+ИмяКаталога+"\"+ПолучитьИмяФайлаИзГиперссылки(ТекСтрока.Гиперссылка);
        Попытка
            http.Получить(ТекСтрока.Гиперссылка, ИмяФайла);
            Мусор.Добавить(ИмяФайла);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры
2 napagokc
 
04.02.14
08:29
(1) Спасибо. Теперь хотя бы знаю в какую сторону курить... Опыта работы с сайтом не имею вообще. :(
Скажите, я правильно понимаю, что при подобном подходе (используя HTTPСоединение) файл на диске не создается? Из СП я так понял, что ответ передается в HTTPОтвет, либо в какую-нить переменную - программист сам решает в какую. Все верно?
3 Wobland
 
04.02.14
08:31
я не скажу, т.к. по убогости разума получал файл и уже локально извращался над ним (http.Получить(ТекСтрока.Гиперссылка, ИмяФайла)). может, что-то мудрее есть
4 napagokc
 
04.02.14
08:40
5 napagokc
 
04.02.14
08:40
(4) это я нашел что-то типа учебника. Пока сам читаю. Вроде норм расписано все
6 Мимохожий Однако
 
04.02.14
08:54
В темповых папках считанный файл лежит, если специально не удалял