Вход | Регистрация


1С:Предприятие ::

Метки:Интернет-технологии

v7plus.dll

Я
   Bekas
 
25.05.04 - 22:21
Скажите, а кроме v7plus.als есть какие-нибудь методические материалы?
 
 
   bazvan
 
 
2 - 25.05.04 - 22:24
На ИТС какая то шняга была. С примерчиками всякими
   Asmody
 
9 - 25.05.04 - 23:25
Чем не устраивает
Получить(URL, Приемник, ТипПриемника)

Помещает содержимое указанного ресурса в файл или указанную переменную, в
зависимости отуказанного типа приемника.
   Волшебник
 
10 - 25.05.04 - 23:32
 
  Рекламное место пустует
   Bekas
 
11 - 25.05.04 - 23:33
устраивает. я не знаю, в каком виде скрипт должен отдать информацию и как ее обработать.
Предполагаю что-то типа такого:
URL=\"http://www.mysite.com?action=add&clientid=Клиент.Код&sum=100\";

Получить(URL, MyVar, "String");
и обработать MyVar как строку?
   Волшебник
 
12 - 25.05.04 - 23:37
Работа с HTTP с помощью v7plus.dll:

======================================================
Иногда возникает потребность в получении (импортировании) тех или иных данных из Интернета либо с веб-сайта компании, содержащихся в html-страничках, с последующей обработкой в импортирующей программе. Такими данными могут быть сведения о номеклатуре, товарные запасы, цены на товары, курсы валют, сведения о погоде в конце концов. В роли импортирующей программы может выступать 1С.

   В качестве примера, рассмотрим задачу для получения курса валюты на заданную дату с сайта Центраьного Банка Российской Федерации. Превое, что нам нужно, это собственно узнать точный URL к страничке с необходимыми сведениями. Немного походив по сайту, такую страничку находим по адресу http://www.cbr.ru/currency_base/D_print.asp?date_req=datakursa. Собственно это не страничка, а скрипт, формирующий отчет о котировках валюты на заданную дату, передаваемую в datakursa.

   В качестве инструмента для работы с HTTP-протоколом будем использовать стандартную бибилиотеку v7plus.dll, поставляемую самой 1С и содержащую необходимый нам класс V7HttpReader. Данный класс, позволяет получить страничку с заданного адреса в виде "текста", который мы можем проанализировать на наличие нужной нам информации.

   Код, реализующий данный метод, довольно прост:

Попытка
   Соединение= СоздатьОбъект(\"AddIn.V7HttpReader\");

  // используем запрос к версии для печати. Ответ меньше получается.
  Соединение.Получить(\"http://www.cbr.ru/currency_base/D_print.asp?date_req=\"+Стр,Результат,2);
  Соедиенение= 0;
  Если ПустоеЗначение(Результат) = 1 Тогда
     Предупреждение(\"Не получен ответ от интернет-ресурса www.cbr.ru\");
     Возврат;
  КонецЕсли;
 
  Поз= Найти(Результат,\"Доллар США </td>\");
  ЕслиПоз= 0 Тогда
     Предупреждение(\"В ответе интернет-ресурса не найден курс доллара!\"+РазделительСтрок+
\"Попробуйте использовать просмотр по всем валютам.\");
     Возврат;
  КонецЕсли;
 
  // просто вырезаем курс из html-файла
  Если Найти(Результат,\"не зарегистрированы\") > 0 Тогда
     Сообщить(\"На данную дату курсы валют не зарегистрированы\",\"!!\");
  КонецЕсли;
 
  Результат= Прав(Результат,СтрДлина(Результат)-Поз-36);
  Поз= Найти(Результат, \"<\");
  Результат= Лев(Результат,Поз-1);
  Курс=Результат;

Исключение
     Предупреждение(\"Ошибка при создании объекта доступа к интернет-ресурсу\");
     Возврат;
 КонецПопытки;

   В переменной Стр передается дата курса. Необходимые нам данные о курсе доллара содержатся между последовательностью символов "Доллар США </td>" и "", кои собственно и "отлавливаем" с помощью оператора Найти(). "Очищенный" результат заносим в переменную Курс. Естественно, чтобы определить точное местоположение нужных данных, желательно иметь хоть какое-то представление о HTML-форматировании.
==========================================================
Источник: http://chin.dataltd.ru/index2.php?id=1c_http
   Волшебник
 
13 - 25.05.04 - 23:38
Работа с XML с помощью v7plus.dll (создание XML-файла):

======================================================
XML , как известно, один из языков разметки. Подробно о нем можно прочитать в книге и в Инете. С его помощью легко реализовать древовидную структуру хранения данных , а также задать жесткие правила построения дерева, что уменьшит ошибки, связанные с доступом к данным.

   Применительно к 1С с его помощью можно реализовать множество задач, в частности по документообороту внутри компании и с внешними корреспондентами, всевозможные переносы справочников и документов между конфигурациями, обмен данными с другими приложениями, поддерживающими формат XML.

   XML-документ вкратце можно представить следующим образом. Верхним в иерархии является корневой элемент. Все остальные элементы (кроме сведений о формате файла) являются вложенными по отношению к нему (подчиненными), назовем их ветви. Каждый элемент, в т.ч. и корневой поименован. Каждый элемент имеет атрибуты, может содержать данные, а также может иметь множество других вложенных в него элементов.

   В качестве примера разберем задачу по переносу приходно-кассовых ордеров и банковских выписок, формируемых оперативнм отделом с помощью ТиС в бухгалтерию. Код Вы можете посмотреть в ert-обработке. Данный пример показывает простые приемы работы со структурой XML-документа.

  Примечание: Конфигурации ТиС и Бухгалтерии - переделанные на основе типовых, поэтому какие-то поля и реквизиты данных могут отличаться от Ваших.

   Необходимо было обеспечить перенос сведений о поступлении денежных средств, формируемых оперативным отделом. Для этого предполагается выгружать из ТиС приходно кассовые ордера, выписки, а также справочники Контрагентов, Договоров и сведения о документах-основаниях. Справочник Номеклатуры выгрузке не подлежит, т.к. по учетной политике компании в бухгалтерии достаточно сведений о товародвижении только в разрезе 10-ти и 20-ти процентных ставках НДС на товар.

   Код с пояснениями:


//Сначала проинициализируем компоненту v7plus, предоставляющую объекты для работы с XML:

Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
   Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
      Предупреждение("Компонента v7plus.dll не найдена!");
   КонецЕсли;
КонецЕсли;

Анализатор = СоздатьОбъект("AddIn.XMLParser");

//Теперь начнем строить дерево документа. Заодно занесем служебную информацию о файле выгрузки в атрибуты корневого элемента


Корень=Анализатор.СоздатьДокумент();
Данные =Корень.СоздатьПодчиненныйЭлемент("Данные");
Данные.УстановитьАтрибут("ИБ",КаталогИБ());
Данные.УстановитьАтрибут("Дата",Строка(РабочаяДата()));
Данные.УстановитьАтрибут("Оператор",ИмяПользователя());

Примечание: Пусть Вас не смущает, что открыв XML-документ, Вы увидите, что визуально корневым элементом будет элемент Данные. Просто в процессе разбирательства с работой с XML я задал такие имена переменным и стал использовать их в последующих разработках. Просто мне так привычнее.

//И создади две основные ветви Справочники и Документы
Справочники=Данные.СоздатьПодчиненныйЭлемент("Справочники");
Документы=Данные.СоздатьПодчиненныйЭлемент("Документы");
// в общей ветке Справочники создадим ветку для справочника Контрагентов

Клиенты=Справочники.СоздатьПодчиненныйЭлемент("Клиенты");

//А вот так заполняются элементы для справочников. Каждый реквизит справочника выносится в отдельный элемент дерева. Т.к. в данном задании выбрана схема синхронизации справочника Контрагентов по ИНН, то в значение элемента записываем ИНН, а для наглядности в атрибут элемента заносим наименование клиента


К=СписокКлиентов.ПолучитьЗначение(х);
Состояние("Выгружаются сведения по: " +К.Наименование);
Клиент=Клиенты.СоздатьПодчиненныйЭлемент("Клиент");
Клиент.УстановитьАтрибут("Наименование",К.Наименование);
Клиент.Значение=К.ИНН;
// выгружаем все нужные реквизиты контрагента

ПН=Клиент.СоздатьПодчиненныйЭлемент("ПолнНаименование");
ПН.Значение=К.ПолнНаименование;
ВК=Клиент.СоздатьПодчиненныйЭлемент("ВидКонтрагента");
ВК.Значение=К.ВидКонтрагента.Идентификатор();
// и так далее по всем необходимым реквизитам, аналогично заполняется информация о документах в соответствии с разработанной схемой обмена с бухгалтерией.


// Завершающие шаги и сохранение файла

ИмяФайла= СтрЗаменить(Строка(ДатаВыгрузки)+Строка(ДатаВыгрузки1),".","") + ".xml";
ПапкаФайла= "C:\1C\Change\Sweet\";
Корень.Записать(ПапкаФайла+ИмяФайла);

   Полученный файл Вы можете посмотреть в Интернет Эксплорере или в любом другом просмотрщике xml-документов.

===========================================================

Источник: http://chin.dataltd.ru/index2.php?id=1c_xml1
   Волшебник
 
14 - 25.05.04 - 23:40
Работа с XML с помощью v7plus.dll (создание XML-файла):

===========================================================
В первой части статьи были рассмотрены простейшие приемы работы по созданию XML-документа. В этой части будут описаны способы получения данных.

   Основным моментом, на который я хотел бы обратить Ваше внимание, является следующее правило: сперва с помощью методов .ВыбратьУзел() или .ВыбратьУзлы() производится выборка узла/элемента, а затем с помощью методов соответственно .ПолучитьПодчиненныйПоНомеру() и .ПолучитьУзел() обеспечивается непосредственный доступ к узлам/элементам документа. Впрочем, здесь можно провести аналогию работы со справочниками и документами в 1С: сначала делаем выборку с помощью .ВыбратьЭлементы() или .ВыбратьДокументы(), а затем получаем сами объекты .ПолучитьЭлемент() или ПолучитьДокумент().

   Оба приема используются в данном примере.

   Код с пояснениями:


Инициализацию компоненты опустим. Для чтения она ничем не отличается.

//создадим объект для доступа к xml-файлу, загрузим в него файл и получим ссылку на корневой элемент xml-документа. Напомню, что у нас он назван "Данные"
ФайлДанных=Анализатор.СоздатьДокумент();
ФайлДанных.Загрузить(ФайлЭксп);
ВсеУзлы=ФайлДанных.ВыбратьУзлы("Данные");

// получаем доступ к корневому узлу/элементу и читаем его атрибуты

Данные=ВсеУзлы.ПолучитьУзел(0);
Сообщить("Идет загрузка данных из базы: " +Данные.ПолучитьАтрибут("ИБ"));
Сообщить("Выгрузка производилась: " +Данные.ПолучитьАтрибут("Дата"));
Сообщить("Выгрузку произвел/произвела: " +Данные.ПолучитьАтрибут("Оператор"));


Примечание: на данном этапе через переменную Данные мы имеем доступ к корневому узлу/элементу всего документа.

// следующими операторами мы получаем доступ к двум основным ветвям: ветки Справочники и ветке Клиенты

Справочники=Данные.ВыбратьУзел("Справочники");
Документы=Данные.ВыбратьУзел("Документы");


// "спускаемся" по иерархии глубже и получаем доступ к элементу Клиенты, Выписки и Приходники

Клиенты=Справочники.ВыбратьУзел("Клиенты");
Выписки=Документы.ВыбратьУзел("Выписки");
Приходники=Документы.ВыбратьУзел("Приходники");


//если очень интересно сколько прийдется загружать Контрагентов, то можно воспользоваться следующей конструкцией

Сообщить("Количество клиентов: " + Строка(Клиенты.КоличествоПодчиненных()));

// организация перебора всех элементов узла Клиенты

Длях= 1 ПоКлиенты.КоличествоПодчиненных() Цикл
   Клиент=Клиенты.ПолучитьПодчиненныйПоНомеру(х);
   ИНН=Клиент.Значение; 
   ЕслиПустоеЗначение(ИНН) = 1 Тогда
      Сообщить("Ошибка. В файле выгрузки не задан ИНН клиента " +Клиент.ПолучитьАтрибут("Наименование"),"!!");
      Продолжить;
   КонецЕсли;
КонецЦикла;

   Как видите ничего сложного в работе с XML нет. Чтобы не запутаться перед началом работы по созданию той или иной схемы обмена желательно нарисовать/составить четкую структуру переносимых данных, определить какие данные и характеристики будут выгружаться и что к чему относится. Как раз для этого и предназначены "Схемы данных", но о них мы поговорим в слудующих статьях.

===========================================================
Источник: http://chin.dataltd.ru/index2.php?id=1c_xml2
   Asmody
 
15 - 25.05.04 - 23:41
(11)
ТипПриемника=1 - Значение переменной Приемник интерпретируется как путь к файлу, в который следует записать содержимое ответа сервера.
ТипПриемника=2 - ответ сервера запоминается в переменной Приемник в виде строки.
ТипПриемника=3 - переменная Приемник должна иметь тип объекта OLE-Automation, имплементирующего интерфейс IStream. Cодержимое ответа будет передано этому интерфейсу, способ обработки этих данных будет зависеть от реализации OLE-объек та.



Список тем форума
 
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует