&НаСервере Процедура ДобавитьНаСервере() ДобавляемыеРеквизиты = Новый Массив; Реквизит1 = Новый РеквизитФормы("Таб", Новый ОписаниеТипов("ТаблицаЗначений"), , "Таблица", Истина); ДобавляемыеРеквизиты.Добавить(Реквизит1); ИзменитьРеквизиты(ДобавляемыеРеквизиты); ДобавляемыеРеквизиты = Новый Массив; Реквизит2 = Новый РеквизитФормы("Кол", Новый ОписаниеТипов("Строка"),"Таб" , "Колонка", Истина); ДобавляемыеРеквизиты.Добавить(Реквизит2); ИзменитьРеквизиты(ДобавляемыеРеквизиты); ТаблицаФормы = ЭтаФорма.Элементы.Добавить("Таблица", Тип("ТаблицаФормы"), ЭтаФорма); ТаблицаФормы.ПутьКДанным = "Таб"; Колонка = ЭтаФорма.Элементы.Добавить("Колонка", Тип("ПолеФормы"), ТаблицаФормы); Колонка.ПутьКДанным = "Таб.Кол"; КонецПроцедуры
//Добавим кнопки и команды //Команды Кмд = ЭтаФорма.Команды.Добавить("Выгрузить"); Кмд.Действие = "Выгрузить"; Кмд.Заголовок = "Выгрузить в файл"; КмдЗ = ЭтаФорма.Команды.Добавить("Загрузить"); КмдЗ.Действие = "Загрузить"; КмдЗ.Заголовок = "Загрузить из файла"; КмдЗ = ЭтаФорма.Команды.Добавить("ЗаписатьВДокумент"); КмдЗ.Действие = "ЗаписатьВДокумент"; КмдЗ.Заголовок = "Записать в документ"; //Добавляем новую кнопку Горизонт = ЭтаФорма.Элементы.Добавить("Горизонт", Тип("ГруппаФормы"), ЭтаФорма); Горизонт.Вид = ВидГруппыФормы.ОбычнаяГруппа; // Элемент2.ИмяКоманды = "Выгрузить"; //Добавляем новую кнопку Элемент2 = ЭтаФорма.Элементы.Добавить("Выгрузить", Тип("КнопкаФормы"), Горизонт); Элемент2.Вид = ВидКнопкиФормы.ОбычнаяКнопка; Элемент2.ИмяКоманды = "Выгрузить"; //Добавляем новую кнопку Элемент = ЭтаФорма.Элементы.Добавить("Загрузить", Тип("КнопкаФормы"), ЭтаФорма); Элемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка; Элемент.ИмяКоманды = "Загрузить"; //Добавляем новую кнопку Элемент = ЭтаФорма.Элементы.Добавить("ЗаписатьВДокумент", Тип("КнопкаФормы"), ЭтаФорма); Элемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка; Элемент.ИмяКоманды = "ЗаписатьВДокумент"; ТаблицаФормы = Элементы.Добавить("ф__ТЗ", Тип("ТаблицаФормы")); ТаблицаФормы.ПутьКДанным = "ТЗ";
Процедура КнопкаВыполнитьНажатие(Кнопка) ОбработкаОбмен = Обработки.ВыгрузкаЗагрузкаДанныхXML.Создать(); ОбработкаОбмен.Инициализация(); ОбработкаОбмен.ОбработанныхКонстант = 0; ОбработкаОбмен.ОбработанныхНаборовЗаписей = 0; //отметки выгрузки Документов СписокОбъектовВыгрузки = Новый СписокЗначений; СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.РеализацияТоваровУслуг); СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.ПоступлениеТоваровУслуг); СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.ТребованиеНакладная); Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина); СтрокаВыгрузки.Выгружать=1; ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки); //отбор Построитель = ОбработкаОбмен.ПодготовитьПостроительДляВыгрузки(СтрокаВыгрузки); СписокСсылокВыгрузки = Новый СписокЗначений; Для Каждого СтрокаТабДокументы Из ТабДокументы Цикл Если (СтрокаТабДокументы.Документ.Метаданные() = СписокОбъектовВыгрузки[й].Значение) И (СтрокаТабДокументы.ФлагВыгружать) Тогда СписокСсылокВыгрузки.Добавить(СтрокаТабДокументы.Документ.Ссылка); КонецЕсли; КонецЦикла; Отбор = Построитель.Отбор; Отбор.Добавить("Ссылка","Ссылка"); Отбор[0].Использование = Истина; Отбор[0].ВидСравнения = ВидСравнения.ВСписке; Отбор[0].Значение = СписокСсылокВыгрузки; СтрокаВыгрузки.НастройкиПостроителя = Построитель.ПолучитьНастройки(); СтрокаВыгрузки.ИспользоватьОтбор = Истина; КонецЦикла; //отметки ОТМЕНЫ выгрузки Документов СписокОбъектовВыгрузки.Очистить(); // СписокОбъектовВыгрузки.Добавить(Метаданные.Документы.Заявка); Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина); СтрокаВыгрузки.ВыгружатьПриНеобходимости = 0; ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки); КонецЦикла; //отметки выгрузки Справочников СписокОбъектовВыгрузки.Очистить(); СписокОбъектовВыгрузки.Добавить(Метаданные.Справочники.Номенклатура); Для й=0 По СписокОбъектовВыгрузки.Количество()-1 Цикл СтрокаВыгрузки = ОбработкаОбмен.ДеревоМетаданных.Строки.Найти(СписокОбъектовВыгрузки[й].Значение,"ОбъектМД",Истина); СтрокаВыгрузки.Выгружать=1; ОбработкаОбмен.ОбработкаИзмененияСостоянияВыгружать(СтрокаВыгрузки); КонецЦикла; ИмяФайлаЗагрузки = "D:\А-Б.xml"; ОбработкаОбмен.ВыполнитьЗагрузку(ИмяФайлаЗагрузки); ИмяФайлаВыгрузки = "D:\Б-А.xml"; ОбработкаОбмен.ВыполнитьВыгрузку(ИмяФайлаВыгрузки); КонецПроцедуры Процедура ВыбПериодНажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода))); Если НастройкаПериода.Редактировать() Тогда НачПериода = НастройкаПериода.ПолучитьДатуНачала(); КонПериода = НастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() НачПериода = ТекущаяДата(); КонПериода = ТекущаяДата(); КонецПроцедуры Процедура ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ) Запрос.Текст = "ВЫБРАТЬ | ОбъектЗапроса.Ссылка |ИЗ | Документ."+ОбъектЗапроса+" КАК ОбъектЗапроса |ГДЕ | ОбъектЗапроса.ПометкаУдаления = ЛОЖЬ И | ОбъектЗапроса.Дата МЕЖДУ &ДатаНач И &ДатаКон"; Запрос.УстановитьПараметр("ДатаНач",НачалоДня(НачПериода)); Запрос.УстановитьПараметр("ДатаКон",КонецДня(КонПериода)); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Дата = Выборка.Ссылка.Дата; НоваяСтрока.Документ = Выборка.Ссылка; КонецЦикла; КонецПроцедуры Процедура ЗаполнитьНажатие(Элемент) ТабДокументы.Очистить(); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Дата"); ТЗ.Колонки.Добавить("Документ"); Запрос = Новый Запрос; Если флРеализация Тогда ОбъектЗапроса = "РеализацияТоваровУслуг"; ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ); КонецЕсли; Если флПоступление Тогда ОбъектЗапроса = "ПоступлениеТоваровУслуг"; ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ); КонецЕсли; Если флТребованиеНакладная Тогда ОбъектЗапроса = "ТребованиеНакладная"; ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ); КонецЕсли; ТЗ.Сортировать("Дата"); Для Каждого Стр Из ТЗ Цикл НоваяСтрока = ТабДокументы.Добавить(); НоваяСтрока.Документ = Стр.Документ; НоваяСтрока.ФлагВыгружать = Истина; КонецЦикла; КонецПроцедуры
Процедура ЗагрузитьПрайс(Кнопка) Попытка ServiceManager = Новый ComОбъект("com.sun.star.ServiceManager"); МетодЗагрузки = "ОО"; Исключение Сообщить("Отсутствует приложение для загрузки файла"); КонецПопытки; Если МетодЗагрузки = "ОО" Тогда scr = Новый ComОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("MassivParametrov = new Array()"); MassivParametrov = scr.eval("MassivParametrov"); scr.AddObject("OpenOffice", ServiceManager); scr.eval("MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrov[0].Name='Hidden'"); scr.eval("MassivParametrov[0].Value=true"); Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop"); URL = ConvertToURL(ПутьКПрайсу); Doc = Desktop.LoadComponentFromURL(URL, "_blank", 0, MassivParametrov); Doc.lockControllers(); Doc.addActionLock(); Sheets = Doc.GetSheets();; Документ = Sheets.GetByIndex(0); //Документ = Sheets.GetByName("Лист1"); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Артикул"); ТЗ.Колонки.Добавить( "Цена"); Дальше = 1; ТекСтрокаДок = НачальнаяСтрока; Пока Дальше = 1 Цикл Проверка = СокрЛП(""+Документ.getCellByPosition(0, ТекСтрокаДок).getString()); Если ПустаяСтрока(Проверка) Тогда Прервать; КонецЕсли; Артикул = СокрЛП(""+Документ.getCellByPosition(КолонкаАртикула-1, ТекСтрокаДок).getString()); Попытка Цена = Число(СокрЛП(""+Документ.getCellByPosition(КолонкаЦены-1 , ТекСтрокаДок).getString())); Исключение Цена = 0; КонецПопытки; Если (НЕ ПустаяСтрока(СокрЛП(Артикул))) и (НЕ Цена = 0) Тогда НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.Артикул = Артикул; НоваяСтрока.Цена = Цена; КонецЕсли; Состояние("Обрабатываем - "+ТекСтрокаДок); ТекСтрокаДок = ТекСтрокаДок+1; КонецЦикла; Если ТЗ.Количество() > 0 Тогда Док = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); Док.Дата = ДатаУстановкиЦен; ДобавитьТипЦен = Док.ТипыЦен.Добавить(); ДобавитьТипЦен.ТипЦен = ТипЦены; Для Каждого ТекСтрока из ТЗ Цикл Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ТекСтрока.Артикул); Если НЕ Номенклатура.Пустая() Тогда НоваяСтрока = Док.Товары.Добавить(); НоваяСтрока.Номенклатура = Номенклатура; НоваяСтрока.ТипЦен = ТипЦены; НоваяСтрока.Цена = ТекСтрока.Цена; НоваяСтрока.Валюта = Валюта; НоваяСтрока.ЕдиницаИзмерения = Номенклатура.ЕдиницаХраненияОстатков; КонецЕсли; КонецЦикла; Если Док.Товары.Количество() > 0 Тогда Док.Записать(); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры функция ConvertToURL(FileName) ИмяФайла = СтрЗаменить(FileName," ","%20" ); ИмяФайла = СтрЗаменить(ИмяФайла,"\","/"); Возврат "file:/" + "/localhost/" + ИмяФайла; Конецфункции
Процедура ДействияФормыВыгрузка(Кнопка) //Выберем файл для сохранения выгрузки Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Выберите файл для сохранения данных"; Диалог.ПолноеИмяФайла = "NDFL_"+Формат(НачПериода,"ДФ=MM_yyyy"); Диалог.Фильтр = "TXT (*.txt)|*.txt"; Диалог.МножественныйВыбор = Ложь; Диалог.Каталог = "D:\"; Если Диалог.Выбрать() Тогда ФайлСохранения = Диалог.ПолноеИмяФайла; //Выгрузим результат отчета СКД в Таблицу Значений КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ДанныеТЗ = Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(ДанныеТЗ); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); //Выгрузим данные из Таблицы значений в Файл, запись данных в файл построчно Текст = Новый ЗаписьТекста(ФайлСохранения, КодировкаТекста.ANSI); Текст.ЗаписатьСтроку("Организация~КПП~Начислено13~Начислено30"); Для Каждого стр из ДанныеТЗ Цикл Текст.ЗаписатьСтроку(СокрЛП(Строка(стр.Организация))+"~"+СокрЛП(стр.ПодразделениеОрганизацииКПП)+"~"+Формат(стр.Начислено13,"ЧГ=0")+"~"+Формат(стр.Начислено30,"ЧГ=0")); КонецЦикла; Текст.Закрыть(); КонецЕсли; КонецПроцедуры Процедура ВыбПериодНажатие(Элемент) НастройкаПериода = Новый НастройкаПериода; НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода))); НастройкаПериода.РедактироватьКакИнтервал = Истина; НастройкаПериода.РедактироватьКакПериод = Истина; НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; Если НастройкаПериода.Редактировать() Тогда НачПериода = НастройкаПериода.ПолучитьДатуНачала(); КонПериода = НастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; // установить парметры периода для отчета СКД КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[4].Значение = НачПериода; КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[5].Значение = КонПериода; КонецПроцедуры
Соединение = Новый HTTPСоединение("export.rbc.ru"); //готовим соединение ИмяФайла = ПолучитьИмяВременногоФайла(".txt"); //строка-образец //http://export.rbc.ru/free/cb.0/free.fcgi?period=DAILY&tickers=USD&d1=18&m1=01&y1=2009&d2=17&m2=02&y2=2009&lastdays=30&separator=TAB&data_format=BROWSER&header=1 //http://export.rbc.ru/free/cb.5/free.fcgi?period=DAILY&tickers=USDEUR_BASKET&d1=08&m1=07&y1=2009&d2=22&m2=07&y2=2009&lastdays=14&separator=TAB&data_format=BROWSER&header=1 СтрокаСоединения="/free/"+Источник+"/free.fcgi?period=DAILY&tickers="+Валюта1+"&d1="+День1+"&m1="+Месяц1+"&y1="+Год1+"&d2="+День2+"&m2="+Месяц2+"&y2="+Год2+"&separator=%7C&data_format=BROWSER"; СтрокаСоединения=СтрЗаменить(СтрокаСоединения," ",""); Попытка //соединяемся Соединение.Получить(СтрокаСоединения,ИмяФайла); Исключение Сообщить("Невозможно получить курс по адресу http://export.rbc.ru"+СтрокаСоединения); КонецПопытки; КурсыТекст=Новый ТекстовыйДокумент; //читаем результат запроса КурсыТекст.Прочитать(ИмяФайла);
// еще пример Функция ПолучитьКакСтроку(Адресс) соминет = Новый COMОбъект("MSXML2.XMLHTTP"); соминет.open ("GET", Адресс, Ложь); соминет.send(); Возврат соминет.responseText; КонецФункции Функция ПреобразоватьДату(дат) // Медот преобразования даты времен 1Сv7 //Т=Строка(Дат); //Возврат Сред(Т,7,4)+"/"+Сред(Т,4,2)+"/"+Лев(Т,2); Возврат Формат(Дат,"ДФ=""гггг/ММ/дд"""); КонецФункции Процедура КнопкаЗагрузитьКурсы(Элемент) //Список - список валют Для А = 1 по Список.Количество() цикл Если Список[а-1].Пометка тогда Сообщить("Загружаем курсы для "+Строка(Список[а-1].Значение)); Код = Строка(Список[а-1].Значение.Код); Дат = ПериодС; Пока Дат <= ПериодПо цикл Стр = ПолучитьКакСтроку("http://cbrates.rbc.ru/tsv/"+Код+"/"+ПреобразоватьДату(Дат)+".tsv"); Поз = Найти(Стр,Символы.Таб); Если Поз = 0 Тогда Дат = Дат + 86400; Продолжить; КонецЕсли; Кратность = Число(СокрЛП(Лев(стр,Поз-1))); курс = Число(СокрЛП(Сред(Стр,Поз+1,СтрДлина(Стр)-Поз))); Сообщить("Дата="+Строка(Дат)+" Курс="+Строка(курс)+" Кратность="+Строка(Кратность)); Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); Запись.Период = Дат; Запись.Валюта = Список[а-1].Значение.Ссылка; Запись.Курс = Курс; Запись.Кратность = Кратность; Запись.Записать(Истина); Дат = Дат + 86400; КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры
// Взято с http://www.1c-club.kz IUnknown //Небольшая обработка для получения курса валют размещенной на странице Национального Банка РК. //Внимание: работоспособность данной обработки может быть нарушена, если дизайнеры сайта НБ РК изменят формат страницы с //официальным курсом валюта. Но не большой анализ нового формата и работоспособность обработки будет восстановлена. // шаблон для отображаемой на форме таблице значения перем тзПустышка; //******************************************* // ПриНачалеВыбораЗначения(стрНазвание, чисФлаг) // // Параметры: // стрНазвание - Строка. Наименование реквизита формы инициюрующей // вызов процедуры. // чисФлаг - Число. Флаг станадартной обработки иницации нажатия // кнопки выбора значения. // // Возвращаемое значение: // Нет. // // Описание: // Переопределенная процедура инициирующая при нажатии кнопки // выбора значения реквизита формы. // процедура ПриНачалеВыбораЗначения(стрНазвание, чисФлаг) // Если инициировали из реквизита "стрУРЛа" если стрНазвание = "стрУРЛа" тогда // откроем страницу с введенным URL запуститьприложение(стрУРЛа); конецесли; конецпроцедуры //******************************************* // кнПолучить() // // Параметры: // Нет // // Возвращаемое значение: // Нет. // // Описание: // Процедура получающая курсы валют с URL находящегося в // строковом реквизите формы "стрУРЛа". Пытается по указаноому URL // получить страницу и распарсить ее. // // ПРЕДУПРЕЖДЕНИЕ: // В случае измения формата данных представленных на странице, возможно // будет работать не правильно. // процедура кнПолучить() // сгенирим имя файла для временного хранения содержимого // страницы курса валют Национального банка стрИмяФайла = каталогпользователя() + "$$$$.###"; // создадим объект XMLHttpRequest олеХМЛ = создатьобъект("Microsoft.XMLHTTP"); // иницируем его типом запроса и нужным нам URL олеХМЛ.Open("GET", стрУРЛа, 0); // отправим запрос для обработки серверу олеХМЛ.Send(); // создадим "поток" через ADODDB для работы с данными олеАДО = создатьобъект("ADODB.Stream"); // зададим тип и режим потока олеАДО.Mode = 3; олеАДО.Type = 1; // откроем его олеАДО.Open(); // создадим объект для управления скриптами олеШелл = создатьобъект("MSScriptControl.ScriptControl"); // установим язык сценариев олеШелл.Language = "vbscript"; // добавим созданные объекты олеШелл.AddObject("oleADO", олеАДО); олеШелл.AddObject("oleXML", олеХМЛ); // с помощью скрипта запишем в поток ADO данные из // объекта XMLHttpRequest // то есть содержимое страницы олеШелл.Eval("oleADO.Write(oleXML.ResponseBody)"); // запишем данные во временный файл олеАДО.SaveToFile(стрИмяФайла, 2); // закроем данный поток олеАДО.Close(); // для ускорения парсера занесем весь файл в строковую // переменую с разделителем строк // для этого инициализуруем поток установкой // соотвествующим режимом и типом олеАДО.Mode= 3; олеАДО.Type = 2; // так как страница курса валют НБК имеет формат // символов UTF-8, то установим соотвествующий набор олеАДО.CharSet="UTF-8"; // откроем поток олеАДО.Open(); // загрузим содержимое нашего файла в поток олеАДО.LoadFromFile(стрИмяФайла); // обнулим временную строковую переменную стрТемп = ""; // в цикле получим из потока все строки пока олеАДО.EOS() = 0 цикл // и запишем их во временную переменую, добавив разделитель строк стрТемп = стрТемп + олеАДО.ReadText(-2) + разделительстрок; конеццикла; // закроем поток олеАДО.Close(); // удалим временный файл фс.УдалитьФайл(стрИмяФайла); // найдем в строке позицию начала блока с данными о курсе чисПозиция = найти(стрТемп, "Официальные курсы валют на"); если чисПозиция = 0 тогда // если позиции нет ... то мы имем другую страницу // или другой формат страницы... предупреждение("Не получилось получить курсы валют"); иначе // создаим временную таблицу значений // для более шустрого заполения из-за отстуствия вызова // функции перерисовки таблицы при изменении данных тзТемп = создатьобъект("ТаблицаЗначений"); // установим для нее нужный формат тзПустышка.Выгрузить(тзТемп); // отрежем все лишнее стрТемп = сред(стрТемп, чисПозиция); // получим дату курса дтКурса = дата(стрзаменить(стрполучитьстроку(стрТемп, 2), "/", ".")); // первая строка с курсом валюты находится на 18 строке от начала // после удаления мусора чисПозиция = 18; // узнаем сколько всего строк в многострочке чисКоличествоСтрок = стрколичествострок(стрТемп); // получим строку стрТекущая = стрполучитьстроку(стрТемп, чисПозиция); // если в строке есть подстрока ... то значит это наверное очередная валюта пока найти(стрТекущая, "input type=""checkbox"" name=""idval""") > 0 цикл // добавляем новую строку тзТемп.НоваяСтрока(); // получаем строку со смещением 1 от позиции стрТекущая = стрполучитьстроку(стрТемп, чисПозиция + 1); // используя фичу 1С по преобразованию, получим число // за сколько единиц валюты имеем курс в тенге тзТемп.Количество = число(стрТекущая); // путем убирания "мусора" получаем наименование валюты тзТемп.Наименование = сокрлп(стрзаменить(стрзаменить(стрТекущая, тзТемп.Количество, ""), "</td>", "")); // получаем строку со смещением 2 от позиции стрТекущая = стрполучитьстроку(стрТемп, чисПозиция + 2); // убираем html мусор стрТекущая = сокрлп(стрзаменить(стрзаменить(стрТекущая, "<td class=""gen7"" align=""center"">", ""), "</td>", "")); // получаем код валюты тзТемп.Код1 = лев(стрТекущая, 3); // получаем код валюты "Тенге" тзТемп.Код2 = прав(стрТекущая, 3); // получаем строку со смещением 5 от позиции стрТекущая = стрполучитьстроку(стрТемп, чисПозиция + 5); // очищаем от мусора и преобразуем в число... получаем курс тзТемп.Курс = число(стрзаменить(стрзаменить(стрТекущая, "<td class=""gen7"" align=""center"">", ""), "</td>", "")); // увеличиваем позицию на 17 ... чисПозиция = чисПозиция + 17; если чисПозиция > чисКоличествоСтрок тогда // если позици дальше имеющихся строк // то все курсов больше нет стрТекущая = ""; иначе // получаем очередную строку для разбора стрТекущая = стрполучитьстроку(стрТемп, чисПозиция); конецесли; конеццикла; // сформированую таблицу копируем в таблицу на форме тзТемп.Выгрузить(тзКурсов); конецесли; конецпроцедуры //******************************************* // установим значение реквизита текущим URL по которому можно получить курс валют стрУРЛа = "http://www.nationalbank.kz/?docid=460&uid=DD54B73C-802C-E8F0-E27EDF82ECF77C1D"; // формируем формат таблицы тзПустышка = создатьобъект("ТаблицаЗначений"); тзПустышка.НоваяКолонка("Количество", "число", 3, 0, "", 5); тзПустышка.НоваяКолонка("Наименование", "строка", , , "Наименование", 70); тзПустышка.НоваяКолонка("Код1", "строка", 3, , "код", 10); тзПустышка.НоваяКолонка("Код2", "строка", 3, , "код", 10); тзПустышка.НоваяКолонка("Курс", "число", 7, 2, "Курс", 10); // копируем получившийся формат в таблицу на форме тзПустышка.Выгрузить(тзКурсов);