Имя: Пароль:
1C
 
Есть документ html.. как его разобрать и загрузить в 1с 7.7
0 belarus
 
12.05.09
12:02
Есть документ html.. как его разобрать и загрузить в 1с 7.7... дайте ссылочку где почитать плз... или че неть для примера
1 povar
 
12.05.09
12:03
разбирай его как текст
2 povar
 
12.05.09
12:03
да и что значит "загрузить в 1С" ?
3 Нуф-Нуф
 
12.05.09
12:03
тхт = СоздатьОбъект("Текст");
4 TitanLuchs
 
12.05.09
12:05
(0) Открывай его из 1С в IE, получай доступ к объекту "document", а у этого объекта куча свойств:  доступ к тексту, ко всем картинкам, колллекции ссылок и т.д.
5 skunk
 
12.05.09
12:05
6 belarus
 
12.05.09
12:05
мтс дает детализацию звонков.... в формате html... вот и нужно ее загрузить в 1с.... никогда с html через 1с не работал
7 Шахид
 
12.05.09
13:31
Псмотри пример
я загружал курсы валют банков города Оренбург

сначала я сохранил страницу в виде html
потом находил свою таблицу и разбирал ее

Процедура ЗагрузитьКурс(Пар=0) Экспорт
   //проверим курс за сегодня
   Док=СоздатьОбъект("Документ.Курс");
   Док.УстановитьФильтр(1,0);
   Если Док.ВыбратьДокументы(ТекущаяДата(),ТекущаяДата())=1 Тогда
       Возврат;
   КонецЕсли;
   //загрузим файл
   URL ="http://orenburg.ratiss.org/Courses.aspx";    
   ИмяФ=КаталогИБ()+"kurs\"+СтрЗаменить(Строка(ТекущаяДата()),".","-")+" "+".html";
   
   Если ЗагрузитьВнешнююКомпоненту("v7plus.dll") <> 1 Тогда
       Если Пар=0 Тогда
           Сообщить("Компонента v7plus.dll не найдена!");
           Сообщить("курсы не загружены!");
       КонецЕсли;
       Возврат;
   КонецЕсли;
   
   HTTPСоединение=СоздатьОбъект("AddIn.V7HttpReader");
   Попытка
       HTTPСоединение.ПолучитьКакФайл(URL,ИмяФ);
   Исключение
       Если Пар=0 Тогда
           Сообщить(HTTPСоединение.СтрокаСостоянияОтвета);
           Сообщить("Курсы не загружены!");
       КонецЕсли;
       Возврат;
   КонецПопытки;  
   HTTPСоединение=0;
   //проверим дату курса
   ФТекс=СоздатьОбъект("Текст");
   ФТекс.Открыть(ИмяФ);
   
   КС=ФТекс.КоличествоСтрок();
   
   ФЛ=0;
   ТекСтр="";
   Для Перем1=1 По КС Цикл
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Если Найти(ТекСтр,"Курсы валют, пункты обмена (")<>0 Тогда
           ФЛ=1;
                   
           Перем1=Найти(ТекСтр,"Курсы валют, пункты обмена (");
           
           ТекСтр=Сред(ТекСтр,Перем1+28);
           
           Перем1=Найти(ТекСтр,")");
           
           ТекСтр=Лев(ТекСтр,Перем1-1);
           
           //разберем дату
           //дата и месяц отделены пробелами
           //будем их поочереди "выкусывать"
           //1. дата
           Перем1=Найти(ТекСтр," ");
           Д=Число(Лев(ТекСтр,Перем1-1));
           ТекСтр=Сред(ТекСтр,Перем1+1);
           //2.месяц
           Перем1=Найти(ТекСтр," ");
           М=Лев(ТекСтр,Перем1-1);
           
           Если      М="января" Тогда
               М=1;
           ИначеЕсли М="февраля" Тогда
               М=2;
           ИначеЕсли М="марта" Тогда
               М=3;
           ИначеЕсли М="апреля" Тогда
               М=4;
           ИначеЕсли М="мая" Тогда
               М=5;
           ИначеЕсли М="июня" Тогда
               М=6;
           ИначеЕсли М="июля" Тогда
               М=7;
           ИначеЕсли М="августа" Тогда
               М=8;
           ИначеЕсли М="сентября" Тогда
               М=9;
           ИначеЕсли М="октября" Тогда
               М=10;
           ИначеЕсли М="ноября" Тогда
               М=11;
           ИначеЕсли М="декабря" Тогда
               М=12;
           КонецЕсли;
               
           ТекСтр=Сред(ТекСтр,Перем1+1);
           //3. оставшееся год
           Г=Число(ТекСтр);
           
           ДатаПР=Дата(Г,М,Д);
           //проверим курс за дату
           //проверим если курс на сегодня
           Док=СоздатьОбъект("Документ.Курс");
           Док.УстановитьФильтр(1,0);
           Если Док.ВыбратьДокументы(ДатаПР,ДатаПР)=1 Тогда
               Если Пар=0 Тогда
                   Сообщить("Курс за "+Строка(ДатаПР)+" уже загружен!");
               КонецЕсли;
               Возврат;
           КонецЕсли;
           Прервать;
       КонецЕсли;
   КонецЦикла;
   
   Если ФЛ=0 Тогда
       Если Пар=0 Тогда
           Сообщить("Изменился формат таблицы:не найдет строка таблицы");
       КонецЕсли;
       возврат;
   КонецЕсли;
   //разоберем
   //1. найдем шапку таблицу
   ФЛ=0;
   ТекСтр="";
   Для Перем1=1 По КС Цикл
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Если Найти(ТекСтр,"<th scope=""col""><font color=""White"">Название банка</font></th><th scope=""col""><font color=""White"">USD покупка</font></th><th scope=""col""><font color=""White"">USD продажа</font></th><th scope=""col""><font color=""White"">EUR покупка</font></th><th scope=""col""><font color=""White"">EUR продажа</font></th>")<>0 Тогда
           ФЛ=1;
           Перем1=Перем1+3;
           прервать;
       КонецЕсли;  
   КонецЦикла;
   Если ФЛ=0 Тогда
       Если Пар=0 Тогда
           Сообщить("Изменился формат таблицы:не найдет строка таблицы");
       КонецЕсли;
       возврат;
   КонецЕсли;
   
   ТабКурс=СоздатьОбъект("ТаблицаЗначений");
   ТабКурс.НоваяКолонка("ИмяБ");
   ТабКурс.НоваяКолонка("ИмяВ");
   ТабКурс.НоваяКолонка("Курс1","Число",15,2);
   ТабКурс.НоваяКолонка("Курс2","Число",15,2);
   ТабКурс.НоваяКолонка("Курс3","Число",15,2);
   ТабКурс.НоваяКолонка("Курс4","Число",15,2);
   //шапка найдена
   ТекСтр=ФТекс.Получитьстроку(Перем1);
   Пока Найти(ТекСтр,"</div>")=0 Цикл
       //получим имя
       Имя=ФТекс.Получитьстроку(Перем1);
       //пропуск
       Перем1=Перем1+1;
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Пока Найти(ТекСтр,"</td>")=0 Цикл
           Перем1=Перем1+1;
           ТекСтр=ФТекс.Получитьстроку(Перем1);
       КонецЦикла;
       //курс1
       Перем1=Перем1+1;
       Курс1 =ФТекс.Получитьстроку(Перем1);
       //пропуск
       Перем1=Перем1+1;
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Пока Найти(ТекСтр,"</td>")=0 Цикл
           Перем1=Перем1+1;
           ТекСтр=ФТекс.Получитьстроку(Перем1);
       КонецЦикла;
       //курс2
       Перем1=Перем1+1;
       Курс2 =ФТекс.Получитьстроку(Перем1);
       //пропуск
       Перем1=Перем1+1;
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Пока Найти(ТекСтр,"</td>")=0 Цикл
           Перем1=Перем1+1;
           ТекСтр=ФТекс.Получитьстроку(Перем1);
       КонецЦикла;
       //курс3
       Перем1=Перем1+1;
       Курс3 =ФТекс.Получитьстроку(Перем1);
       //пропуск
       Перем1=Перем1+1;
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Пока Найти(ТекСтр,"</td>")=0 Цикл
           Перем1=Перем1+1;
           ТекСтр=ФТекс.Получитьстроку(Перем1);
       КонецЦикла;
       //курс4
       Перем1=Перем1+1;
       Курс4 =ФТекс.Получитьстроку(Перем1);
       //пропуск
       Перем1=Перем1+1;
       ТекСтр=ФТекс.Получитьстроку(Перем1);
       Пока Найти(ТекСтр,"</td>")=0 Цикл
           Перем1=Перем1+1;
           ТекСтр=ФТекс.Получитьстроку(Перем1);
       КонецЦикла;
       ТабКурс.НоваяСтрока();
       ТабКурс.ИмяБ =Имя;
       ТабКурс.Курс1=Число(Курс1);
       ТабКурс.Курс2=Число(Курс2);
       ТабКурс.Курс3=Число(Курс3);
       ТабКурс.Курс4=Число(Курс4);
       //перейдем на следующую строку
       Перем1=Перем1+3;
       ТекСтр=ФТекс.Получитьстроку(Перем1);
   КонецЦикла;
   //таблица получена
   СпрВал=СоздатьОбъект("Справочник.Валюты");
   СпрБк =СоздатьОбъект("Справочник.Банк");
   СпрВал.НайтиПоКоду("840");
   Вал1=СпрВал.ТекущийЭлемент();
   
   СпрВал.НайтиПоКоду("978");
   Вал2=СпрВал.ТекущийЭлемент();
   
   Док.Новый();
   Док.ДатаДок=ДатаПР;
   
   ТабКурс.Выбратьстроки();
   Пока ТабКурс.ПолучитьСтроку()=1 Цикл
       //найдем банк
       Если СпрБк.НайтиПоНаименованию(СокрЛП(ТабКурс.ИмяБ),0,1)=0
           Тогда
               //новый банк
               Сообщить(СокрЛП(ТабКурс.ИмяБ));
               
               СпрБк.Новый();
               СпрБк.Наименование=СокрЛП(ТабКурс.ИмяБ);
               СпрБк.Записать();
               
               Бк=СпрБк.ТекущийЭлемент();
           Иначе
               Бк=СпрБк.ТекущийЭлемент();
       КонецЕсли;
       //создадим строки
       Док.Новаястрока();
       Док.Банк   =Бк;
       Док.Валюта =Вал1;
       Док.Покупка=ТабКурс.Курс1;
       Док.Продажа=ТабКурс.Курс2;
       
       Док.Новаястрока();
       Док.Банк   =Бк;
       Док.Валюта =Вал2;
       Док.Покупка=ТабКурс.Курс3;
       Док.Продажа=ТабКурс.Курс4;
   КонецЦикла;
   Док.Записать();
   Док.Провести();
   Если Пар=0 Тогда
       Сообщить("Курсы получены и сохранены!");
   КонецЕсли;
   //загрузим курс ЦБ
   Конт=СоздатьОбъект("СписокЗначений");
   Конт.ДобавитьЗначение(1,"Автоматически");
   
   ОткрытьФорму("Отчет.ИППКурсыВалютРБК",Конт);
КонецПроцедуры
8 FN
 
12.05.09
13:37
Самый просто и быстрый способ - через ОЛЕ открываешь Ексель - там открываешь свой хтмл - дальше по ОЛЕ перекидываешь лист в ТЗ...
9 FN
 
12.05.09
13:44
Либо так:

Функция ПолучитьТаблицуСоСтраницы(номерТаблицы=0)
   ТЗ=СоздатьОбъект("ТаблицаЗначений"); //для значений
   //Попытка
       ТаблицаСДанными=IE.Document.getElementsByTagName("table").item(номерТаблицы);
       ВсегоСтрок=ТаблицаСДанными.rows().Length()-1;
       Для х=1 по ВсегоСтрок Цикл
           СтолбцовВстроке=ТаблицаСДанными.rows(х).Cells().Length()-1;
           Для ш=ТЗ.КоличествоКолонок()/2 по СтолбцовВстроке Цикл
               ТЗ.НоваяКолонка("Текст"+ш);
               ТЗ.НоваяКолонка("ХТМЛ"+ш);
           КонецЦикла;
           ТЗ.НоваяСтрока();
           ПоследняяСтрокаТЗ=ТЗ.КоличествоСтрок();
           Для ш=0 по СтолбцовВстроке Цикл
               ТЗ.УстановитьЗначение(ПоследняяСтрокаТЗ,"Текст"+ш,ТаблицаСДанными.rows(х).Cells(ш).outerText);
               
               
                   ТЗ.УстановитьЗначение(ПоследняяСтрокаТЗ,"ХТМЛ"+ш,ТаблицаСДанными.rows(х).Cells(ш).innerHtml);
           
           КонецЦикла;
       КонецЦикла;
       
   //Исключение
       //Сообщить("Ошибка при получении данных! "+ОписаниеОшибки());
   //КонецПопытки;
   Возврат ТЗ;

КонецФункции

Процедура Сформировать()
IE=СоздатьОбъект("InternetExplorer.Application");
IE.Navigate("http://....");
   Пока (IE.readyState<4) или (IE.Busy=-1) Цикл Состояние("Получение страницы...");КонецЦикла;
ТЗ=ПолучитьТаблицуСоСтраницы(0); - тут опытным путем подбери номер от 0 и выше...
10 Шахид
 
12.05.09
14:21
9 Красиво