Код 1C v 7.x
Функция ПолучитьВерсии()
Перем Url, HtmlTab, Строк, Р, НомСтроки, Таб, Версия, ДатаВремя;
ОчиститьОкноСообщений();
СтатусВозврата(0);
Url = "http://www.1c.ru/ukraina/support/release.jsp?time=" + _GetPerformanceCounter ();
Сообщить(Url);
IE = СоздатьОбъект("InternetExplorer.Application");
IE.Navigate(Url);
Пока (IE.readyState <> 4) Или (IE.Busy = -1) Цикл
Состояние("Получение страницы... " + Url);
КонецЦикла;
HtmlTab = IE.Document.getElementsByTagName("table").item(4).rows(0).cells(4).childNodes.item(10);
Строк = HtmlTab.rows.length;
Таб = СоздатьОбъект("ТаблицаЗначений");
Таб.НоваяКолонка("Версия" , "Строка");
Таб.НоваяКолонка("Дата" , "Дата");
Таб.НоваяКолонка("Время" , "Строка");
Таб.НоваяКолонка("Продукт" , "Строка");
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если Р.cells.length <> 3 Тогда
Продолжить;
КонецЕсли;
Версия = Р.cells(2).innerText;
Если Найти(Версия, "7.70.") = 0 Тогда
Продолжить;
КонецЕсли;
ДатаВремя = Р.cells(0).innerText;
Таб.НоваяСтрока();
Таб.Дата = ДатаВремя;
Таб.Время = Сред(ДатаВремя, 12);
Таб.Продукт = Р.cells(1).innerText;
Таб.Версия = Версия;
КонецЦикла;
Таб.Сортировать("Дата-,Время-");
Возврат Таб;
КонецФункции
Код 1C v 7.x
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе
Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов;
Url = "http://www.bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=" + ?(Ежедневно = 1, "daily", "monthly") +
"&date=" + Формат(ДатаКурса, "ДДДММГГГГ") + "&outer=table&execute=run&time=" + _GetPerformanceCounter ();
Сообщить(Url);
Reader = СоздатьОбъект("MSXML2.XMLHTTP");
Reader.Open("Get", Url, 0);
Reader.Send();
Пока Reader.ReadyState <> 4 Цикл
Состояние("Чтение данных за <" + ДатаКурса + "> ");
КонецЦикла;
Док = СоздатьОбъект("HtmlFile");
Док.open("text/html");
Док.write(Reader.ResponseText);
Док.close();
HtmlTab = Док.getElementsByTagName("table").item(5);
ТабКурсов = СоздатьОбъект("ТаблицаЗначений");
ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код");
ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код");
ТабКурсов.НоваяКолонка("Название" , "Строка");
ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4);
ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0);
Строк = HtmlTab.rows.length;
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если (НомСтроки = 1) Или (Р.cells.length <> 5) Тогда // 1 - я заголовок, остальные не с данными
Продолжить;
КонецЕсли;
ТабКурсов.НоваяСтрока();
ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText);
ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText);
ТабКурсов.Название = СокрЛП(Р.cells(3).innerText);
ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", "");
ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", "");
КонецЦикла;
Reader = 0;
ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса);
Возврат ТабКурсов;
КонецФункции
Код 1C v 7.x
Функция ПолучитьТаблицуКурсов(ДатаКурса)
Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов;
Reader = СоздатьОбъект("MSXML2.XMLHTTP");
Url = "http://tables.finance.ua/ru/currency/official/-/1/" + ДатаГод(ДатаКурса) + "/" + ДатаМесяц(ДатаКурса) + "/" + ДатаЧисло(ДатаКурса) + "?time=" + _GetPerformanceCounter ();
Сообщить(Url);
Reader.Open("Get", Url, 0);
Reader.Send();
Пока Reader.ReadyState <> 4 Цикл
Состояние("Чтение данных за <" + ДатаКурса + "> ");
КонецЦикла;
Док = СоздатьОбъект("HtmlFile");
Док.open("text/html");
Док.write(Reader.ResponseText);
Док.close();
HtmlTab = Док.getElementByID("currency-official-table");
Строк = HtmlTab.rows.length;
ТабКурсов = СоздатьОбъект("ТаблицаЗначений");
ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код");
ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код");
ТабКурсов.НоваяКолонка("Название" , "Строка");
ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4);
ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0);
Для НомСтроки = 1 По Строк Цикл
Р = HtmlTab.rows(НомСтроки - 1);
Если (НомСтроки = 1) Или (Р.cells.length <> 7) Тогда // 1 - я заголовок, остальные не с данными
Продолжить;
КонецЕсли;
ТабКурсов.НоваяСтрока();
ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText);
ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText);
ТабКурсов.Название = СокрЛП(Р.cells(3).innerText);
ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", "");
ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", "");
КонецЦикла;
Reader = 0;
ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса);
Возврат ТабКурсов;
КонецФункции
Код 1C v 7.x Процедура Сформировать()
Перем Имя,Путь;
Если ФС.ВыбратьФайл(0,Имя,Путь,"","*.*|*.*","*")=0 Тогда
Возврат;
КонецЕсли;
Файл=Путь+Имя;
Стрим=СоздатьОбъект("ADODB.Stream");
Стрим.Type=2;
Стрим.charset="windows-1251";
Стрим.Open();
Стрим.LoadFromFile(Файл);
Стрим.charset="utf-8";
Стр=Лев(Стрим.ReadText(),255);
Сообщить(Стр);
КонецПроцедуры
// еще способ
Процедура Сформировать()
Перем Имя,Путь;
Если ФС.ВыбратьФайл(0,Имя,Путь,"","*.*|*.*","*")=0 Тогда
Возврат;
КонецЕсли;
Файл=Путь+Имя;
УТФ16=КаталогВременныхФайлов()+_GetPerformanceCounter ()+"-unicode.txt";
ЦП1251=КаталогВременныхФайлов()+_GetPerformanceCounter ()+"-cp1251.txt";
БАТ=КаталогВременныхФайлов()+_GetPerformanceCounter ()+".bat";
Стр="@echo off
|chcp 1251 > nul
|chcp 65001 |>> """+УТФ16+""" cmd /u /c ""type """+Файл+""" & chcp 1251 > nul""
|chcp 1251 > nul
|type """+УТФ16+""" > """+ЦП1251+"""
|chcp 866 > nul";
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(Стр);
Текст.Записать(БАТ);
КомандаСистемы(БАТ);
Текст=СоздатьОбъект("Текст");
Текст.Открыть(ЦП1251);
Для Сч=1 По Текст.КоличествоСтрок() Цикл
Сообщить(Лев(Текст.ПолучитьСтроку(Сч),255));
КонецЦикла;
ФС.УдалитьФайл(УТФ16);
ФС.УдалитьФайл(ЦП1251);
ФС.УдалитьФайл(БАТ);
КонецПроцедуры
Посмотрите еще:
Функции перекодировки текста в/из UTF-8 штатными средствами 1с 7.7 Для работы с текстовыми документами существуют три типа данных –
ТекстовыйДокумент, ЗаписьТекста и ЧтениеТекста . Разница двух подходов состоит в способе загрузки документа:
ТекстовыйДокумент загружает файл целиком и далее построчно обрабатывает его;
ЗаписьТекста и ЧтениеТекста загружают файл построчно.
ПРИМЕР 1:
Запись данных справочника в текстовый файл:
Код 1C v 8.х Текст = Новый ТекстовыйДокумент;
// перебор элементов справочника
Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл
// выводим в файл код и наименование, разделенные
// каким-либо разделителем, например, ‘;’
Текст.ДобавитьСтроку(""+Выборка.Код+";"+Выборка.Наименование);
КонецЦикла;
// запись в текстовый файл
Текст.Записать("C://1.txt");
С помощью типа ЗаписьТекста этот код будет таким:
Код 1C v 8.х // файл в формате Unicode
Текст = Новый ЗаписьТекста("C://1.txt", КодировкаТекста.UTF8);
// перебор элементов справочника
Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл
// выводим в файл код и наименование, разделенные
// каким-либо разделителем, например, ‘;’
Текст.ЗаписатьСтроку(""+Выборка.Код+";"+Выборка.Наименование);
КонецЦикла;
// запись в текстовый файл
Текст.Закрыть();
Чтение данных из текстового файла в справочник:
Код 1C v 8.х Текст = Новый ТекстовыйДокумент;
// открытие файла
Текст.Прочитать("C://1.txt");
// перебор строк текстового документа
Для НомерСтроки=1 по Текст.КоличествоСтрок() Цикл
// получить строку файла с указанным номером
Стр = Текст.ПолучитьСтроку(НомерСтроки);
// «распарсивание» строки
// ищем позицию символа-разделителя
Позиция = Найти (Стр, ‘;’);
// создаем новый элемент справочника
Спр=Справочники.Клиенты.СоздатьЭлемент();
// в код записывается подстрока от первого символа до позиции
// символа-разделителя
Спр.Код = Сред(Стр,1,Позиция-1);
// за символом-резделителем – наименование клиента
Спр.Наименование = Сред (Стр, Позиция+1);
Спр.Записать();
КонецЦикла;
С помощью типа ЗаписьТекста этот код будет таким:
Код 1C v 8.х // файл в формате Unicode
Текст = Новый ЧтениеТекста("C://1.txt", КодировкаТекста.UTF8);
// перебор элементов справочника
Стр="";
// пока строки в файле остались
Пока Стр<>Неопределено Цикл
// получить очередную строку файла
Стр = Текст.ПрочитатьСтроку();
// «распарсивание» строки
// ищем позицию символа-разделителя
Позиция = Найти (Стр, ‘;’);
// создаем новый элемент справочника
Спр=Справочники.Клиенты.СоздатьЭлемент();
// в код записывается подстрока от первого символа до позиции
// символа-разделителя
Спр.Код = Число(Сред(Стр,1,Позиция-1));
// за символом-резделителем – наименование клиента
Спр.Наименование = Сред (Стр, Позиция+1);
Спр.Записать();
КонецЦикла;
ПРИМЕР 2:
В строке текста значения реквизитов справочника разделяются символом кавычка. Его можно получить, например, используя функцию Символ(34).
В случае если символ разделителя (в данном случае – кавычка) может встречаться в выгружаемых данных,
перед помещением в строку меняем этот символ на заранее определенную комбинацию символов.
В нашем случае это %квч%.
Код 1C v 8.х // Выгрузка данных в текстовый файл
Текст = Новый ТекстовыйДокумент;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Стр = СтрЗаменить(Выборка.Наименование, Символ(34), "%квч%");
Код = Строка(Выборка.Код) + Символ(34);
Текст.ДобавитьСтроку(Код + Стр);
КонецЦикла;
Текст.Записать("c:\temp\text.txt");
//Загрузка данных из текстового файла. При загрузке ориентируемся на используемый разделитель значений (это кавычка).
//После получения значения делаем обратное преобразование для разделителя (при выгрузке
//данных кавычку, встречающуюся в выгружаемых строках, заменяли комбинацией символов %квч%)
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("c:\temp\text.txt");
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
Позиция = Найти(Стр, Символ(34));
Код = Сред(Стр, 1, Позиция-1);
прНаименование = Сред(Стр, Позиция + 1);
Наименование = СтрЗаменить(прНаименование, "%квч%", Символ(34));
Сообщить(Код + "–" + Наименование);
КонецЦикла;
"В предыдущем примере файл ЗАГРУЖАЛСЯ ПОЛНОСТЬЮ, а в следующем примере ЗАГРУЖАЕТСЯ ПОСТРОЧНО."
"Это позволяет при работе с файлами больших размеров значительно уменьшить время выполнения задачи."
//Запись данных в файл построчно
Путь = "c:\temp\text.txt";
Текст = Новый ЗаписьТекста(Путь, КодировкаТекста.UTF8);
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Текст.ЗаписатьСтроку(Выборка.Наименование);
КонецЦикла;
Текст.Закрыть();
//Чтение данных из файла построчно
Путь = "c:\temp\text.txt";
Текст = Новый ЧтениеТекста(Путь, КодировкаТекста.UTF8);
Стр = Текст.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл
Стр = Текст.ПрочитатьСтроку();
Сообщить(Стр);
КонецЦикла;
Код 1C v 7.x //Выгрузка данных в TXT файл
Данные = СоздатьОбъект("Текст");
Данные.КодоваяСтраница(0); // принудительная установка
НачВремя = _GetPerformanceCounter (); // Запоминаем время запуска алгоритма
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Стр = ""+ТЗ.ЭтоГруппа+";"+ТЗ.Уровень+";"+ ТЗ.КодРодителя+";"+ТЗ.Код+";"+ТЗ.Наименование; // Символ - разделитель полей - ";"
Данные.ДобавитьСтроку(Стр);
КонецЦикла;
Данные.Записать("c:\export.txt");
КонВремя = _GetPerformanceCounter (); // Запоминаем время окончания алгоритма
// Рассчитываем продолжительность выполнения алгоритма в секундах
Длительность = Окр((КонВремя-НачВремя)/1000,3);
Сообщить("Время выгрузки в TXT файл: "+Длительность+" с");
//Загрузка, чтение данных из TXT файла:
НачВремя = _GetPerformanceCounter (); // Запоминаем время запуска алгоритма
Данные = СоздатьОбъект("Текст");
Данные.КодоваяСтраница(0); // принудительная установка
Данные.Открыть("c:\export.txt");
КолСтр = Данные.КоличествоСтрок();
Для н=1 по КолСтр Цикл
ТекСтр = Данные.ПолучитьСтроку(н);
Состояние("В файле прочитано строк "+н+" из "+КолСтр);
КонецЦикла;
КонВремя = _GetPerformanceCounter (); // Запоминаем время окончания алгоритма
// Рассчитываем продолжительность выполнения алгоритма в секундах
Длительность = Окр((КонВремя-НачВремя)/1000,3);
Сообщить("Время чтения TXT файла: "+Длительность+" с");
DBF-файл – это файл, в котором данные хранятся в виде таблицы (Database format). Работа с этими файлами происходит по принципу курсора, т.е. по одной строке. Для работы с DBF-файлами существует тип данных XBase. Несмотря на то, что формат DBF считается уже устаревшим, может возникнуть необходимость работы с файлами данного формата, особенно, если вы перегружаете данные из какой-нибудь старой программы!
Код 1C v 8.х // ПРИМЕР 1
// Запись данных справочника в DBF-файл:
БД = Новый XBase;
// проектируется структура таблицы, т.е. имена и типы полей
БД.Поля.Добавить("Code","N",6,0); // числовое поле Код
БД.Поля.Добавить("Name","S",30); // строковое поле Наименование
// создание файла с указанной структурой
БД.СоздатьФайл("C://1.dbf");
Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл
// создается новая пустая строка таблицы
БД.Добавить();
// заполняем поля новой строки
БД.Code = Выборка.Код;
БД.Name = Выборка.Наименование;
КонецЦикла;
// зафиксировать изменения в файле
БД.ЗакрытьФайл();
// Чтение данных из DBF-файла в справочник:
БД = Новый XBase;
БД.ОткрытьФайл("C://1.dbf");
// считываем файл построчно
Пока БД.Следующая() Цикл
// создаем новый элемент справочника
Спр=Справочники.Клиенты.СоздатьЭлемент();
// переносим в реквизиты данные из текущей строки таблицы
Спр.Код = БД.Сode;
Спр.Наименование = БД.Name;
Спр.Записать();
КонецЦикла;
БД.ЗакрытьФайл();
Код 1C v 8.х // ПРИМЕР 2
// Выгрузка данных в DBF
БД = Новый XBase;
БД.Поля.Добавить("CODE", "S", 5);
БД.Поля.Добавить("NAME", "S", 40);
БД.СоздатьФайл(Путь + "start.dbf", Путь + "index.cdx");
БД.Индексы.Добавить("IDXCODE", "CODE");
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "index.cdx");
БД.АвтоСохранение = Истина;
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
БД.Добавить();
БД.CODE = Выборка.Код;
БД.NAME = Выборка.Наименование;
КонецЦикла;
БД.ЗакрытьФайл();
// Загрузка данных из DBF
БД = Новый XBase;
БД.ОткрытьФайл(Путь + "start.dbf", Путь + "index.cdx");
БД.ТекущийИндекс = БД.Индексы.IDXCODE;
Пока БД.Следующая() Цикл
Сообщить(БД.CODE);
Сообщить(БД.NAME);
КонецЦикла;
БД.ЗакрытьФайл();
Код 1C v 7.x // Выгрузка ТЗ, Таблицы значений в DBF файл
НачВремя = _GetPerformanceCounter (); // Запоминаем время запуска алгоритма
ДБФ = СоздатьОбъект("XBASE");
ДБФ.ДобавитьПоле("IsGroup","N",1,0);
ДБФ.ДобавитьПоле("Level","N",1,0);
ДБФ.ДобавитьПоле("ParentCode","S",8,0);
ДБФ.ДобавитьПоле("Code","S",8,0);
ДБФ.ДобавитьПоле("Descr","S",60,0);
ДБФ.КодоваяСтраница(0); // Windows
ДБФ.СоздатьФайл("c:\export.dbf");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ДБФ.Добавить();
ДБФ.IsGroup= ТЗ.ЭтоГруппа;
ДБФ.Level= ТЗ.Уровень;
ДБФ.ParentCode = ТЗ.КодРодителя;
ДБФ.Code= ТЗ.Код;
ДБФ.Descr= СокрЛП(ТЗ.Наименование);
ДБФ.Записать();
КонецЦикла;
ДБФ.ЗакрытьФайл();
КонВремя = _GetPerformanceCounter (); // Запоминаем время окончания алгоритма
// Рассчитываем продолжительность выполнения алгоритма в секундах
Длительность = Окр((КонВремя-НачВремя)/1000,3);
Сообщить("Время выгрузки в DBF файл: "+Длительность+" с");
// Загрузка ТЗ, Таблицы значений из DBF файла
НачВремя = _GetPerformanceCounter (); // Запоминаем время запуска алгоритма
ДБФ = СоздатьОбъект("XBASE");
ДБФ.КодоваяСтраница(0); // Windows
ДБФ.ОткрытьФайл("c:\export.dbf");
Если ДБФ.Открыта()=0 Тогда
Сообщить("Файл DBF не открыт !","!");
Возврат;
КонецЕсли;
КолСтр = ДБФ.КоличествоЗаписей();
н= 0;
ДБФ.Первая();
ПризнакГруппы = ДБФ.IsGroup;
ТекУровень = ДБФ.Level;
ТекКодРодителя = ДБФ.ParentCode;
ТекКод = ДБФ.Code;
ТекНаименоване = ДБФ.Descr;
н = н+1;
Состояние("В файле прочитано записей "+н+" из "+КолСтр);
Пока ДБФ.Следующая()=1 Цикл
ПризнакГруппы = ДБФ.IsGroup;
ТекУровень = ДБФ.Level;
ТекКодРодителя = ДБФ.ParentCode;
ТекКод = ДБФ.Code;
ТекНаименоване = ДБФ.Descr;
н = н+1;
Состояние("В файле прочитано записей "+н+" из "+КолСтр);
КонецЦикла;
ДБФ.ЗакрытьФайл();
КонВремя = _GetPerformanceCounter (); // Запоминаем время окончания алгоритма
// Рассчитываем продолжительность выполнения алгоритма в секундах
Длительность = Окр((КонВремя-НачВремя)/1000,3);
Сообщить("Время чтения DBF файла: "+Длительность+" с");
Код 1C v 7.x Шелл=СоздатьОбъект("Shell.Application");
Место=Шелл.NameSpace(Путь);
Сообщить(Место.GetDetailsOf(Место.ParseName(Файл),26));
А если картинка на интерне сайте, и нужно узнать ее высоту, то:
Код 1C v 7.x ИЕ=CreateObject("InternetExplorer.Application");
ИЕ.Navigate("Aboutblank"); // нужно AboutДВОЕТОЧИЕblank добавить в надежные узлы
Док=ИЕ.document;
Док.write("<img id=img src=file:"+Каталог+ИмяКартинки+">");
Результат = Док.getElementById("img").height;
//Или такой вариант:
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("<img id=img src='file://"+Путь+Файл+"' >");
Времянка=КаталогВременныхФайлов()+_GetPerformanceCounter ()+".html";
Текст.Записать(Времянка);
ИЕ=CreateObject("InternetExplorer.Application");
ИЕ.Navigate(Времянка);
Пока ИЕ.ReadyState<4 Цикл
КонецЦикла;
Док=ИЕ.document;
Сообщить(Док.getElementById("img").height);