- внешнее соединение;
- объект ЧтениеXML;
- объект ЗаписьXML;
- объект ПреобразованиеXSL.
Пример содержит:
- Модуль внешнего соединения на встроенном языке 1С:Предприятия, обеспечивающий доступ WEB-сайта ко всем справочникам произвольной информационной базы. Для этого представленный текст на встроенном языке 1С:Предприятия необходимо включить в модуль внешнего соединения информационной базы.
- Набор файлов с XSL-преобразованиями, необходимыми для функционирования модуля внешнего соединения.
- Набор файлов с ASP страницами, составляющий простой WEB-сайт, который в процессе формирования страниц использует данные информационной базы 1С:Предприятия.
Все файлы примера находятся в каталоге 1CITS\EXE\COM_DEMO. Вы можете скопировать файлы примера на свой компьютер.
Для запуска примера выполните следующие действия:
- Выберите информационную базу для экспериментов.
- Откройте в конфигураторе модуль внешнего соединения и вставьте в него текст из файла CONF\ComConnectionTxt.txt.
- Поместите в каталог c:\demo\xsl файлы XSL-преобразований из каталога XSL.
- Создайте каталог c:/demo/tmp.
- Установите и настройте Internet Information Services. Создайте виртуальный каталог WEB-сайта и поместите в него файлы ASP-страниц из каталога WEB.
- Задайте каталог информационной базы для экспериментов в качестве параметра установки COM-соединения в строке conn = entConn.connect("file=c:\demo\democonfig"); в файлах: WEB\refitem.asp, WEB\reflist.asp, WEB\refone.asp, WEB\request.asp. Если в информационной базе определены пользователи, то приведенная строка должна иметь вид: conn = entConn.connect("file=c:\demo\democonfig;usr=user;pwd=password"); где user и password - имя и пароль пользователя, который имеет право быть клиентом внешнего соединения.
- Установите пользователю, от имени которого работает Internet Information Services (обычно IUSR_…), права на каталог информационной базы.
Сайт готов к работе. Его можно открыть в браузере Интернета.
Ниже перечислен полный список файлов представленного примера:
- CONF\ComConnectionTxt.txt - фрагмент модуля внешнего соединения для обмена данными между WEB-страницами и информационной базы 1С:Предприятия в форматах XML и HTML.
- WEB\default.asp - главная страница демонстрационного WEB-сайта.
- WEB\refitem.asp - страница списка групп и элементов выбранного справочника.
- WEB\reflist.asp - страница списка справочников информационной базы.
- WEB\refone.asp - страница данных из выбранного элемента справочника.
- WEB\request.asp - страница формирования запроса и отображения результата.
- XSL\refitem.xsl - XSL-преобразование одного элемента справочника из формата XML в формат HTML.
- XSL\reflist.xsl - XSL-преобразование списка справочников информационной базы из формата XML в формат HTML.
- XSL\refone.xsl - XSL-преобразование списка групп и элементов выбранного справочника из формата XML в формат HTML.
- XSL\request2.xsl - XSL-преобразование результата запроса к информационной базе из XML-формата в формат HTML.
- XSL\request3.xsl - альтернативный вариант XSL-преобразования результата запроса к информационной базе из XML-формата в формат HTML.
Основным назначением данного примера является демонстрация использования внешнего соединения 1С:Предприятия из другой системы программирования. В качестве такой системы выбран язык JavaScript, встроенный в текст ASP страниц. Исполнение такой страницы происходит в следующем порядке:
Браузер клиента формирует HTTP запрос на определенную ASP страницу.
Получив HTTP запрос, интернет сервер интерпретирует запрошенную ASP страницу. При этом исполняются встроенные в нее скрипты на JavaScript.
Html текст страницы и выходные данные, сформированные в процессе исполнения скрипта, передаются клиентскому браузеру и отображаются на экране.
Интерес представляет процесс исполнения скрипта, использующего средства интеграции 1С:Предприятия. Остановимся на нем подробнее на примере страницы refone.asp, представляющей список групп и элементов выбранного справочника. Рассмотрим его исходный текст (он взят из файла WEB\refone.asp).
entConn = new ActiveXObject("v8.comconnector");
conn = entConn.connect("file=c:/demo/democonfig");
conn.КаталогXSLПреобразований = "c:/demo/xsl";
grVal = Request.QueryString("group");
if (grVal.Count == 0)
{
var empty;
Response.Write(conn.getRefOne( Request.QueryString("key")(1), empty));
}
else
Response.Write(conn.getRefOne( Request.QueryString("key")(1), grVal(1)));
Первая строчка создает внешнее соединения. Далее оно настраивается на определенную информационную базу при помощи строки соединения. Параметр file= в этой строке задает каталог, содержащий файловый вариант информационной базы. Далее выполняется установка значения глобальной переменной КаталогXSLПреобразований (имя каталога с файлами XSL-преобразований) модуля внешнего соединения. Далее выполняется анализ параметров http-запроса. Если нет параметра group, то это значит, что запрашиваются элементы и группы справочника верхнего уровня. Если же он есть, то запрашиваются группы и элементы, вложенные в заданную группу.
Основные операции по получению данных из информационной базы выполняет метод getRefOne модуля внешнего соединения. Вот текст этого метода (он взят из файла CONF\ComConnectionTxt.txt):
Функция getRefOne(НомерСправочника, СсылкаНаЗапись) Экспорт
СтрокаСоСсылкой = "{""#""," + СсылкаНаЗапись + "}";
МдСпр = Метаданные.Справочники[Число(НомерСправочника) - 1];
Спр = Справочники[МдСпр.Имя];
Если СсылкаНаЗапись = неопределено или СсылкаНаЗапись = "" Тогда
Выборка = Спр.выбрать(Спр.ПустаяСсылка());
Иначе
Выборка = Спр.выбрать(ЗначениеИзСтрокиВнутр(СтрокаСоСсылкой));
КонецЕсли;
РезультатXML = "";
Писатель = Новый XMLWriter;
Писатель.УстановитьСтроку();
Писатель.ЗаписатьОбъявлениеXML();
Писатель.ЗаписатьНачалоЭлемента("reference");
Писатель.ЗаписатьНачалоЭлемента("name");
Писатель.ЗаписатьТекст("" + МдСпр);
Писатель.ЗаписатьКонецЭлемента();
Писатель.ЗаписатьНачалоЭлемента("code");
Писатель.ЗаписатьТекст("" + НомерСправочника);
Писатель.ЗаписатьКонецЭлемента();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Писатель.ЗаписатьНачалоЭлемента("group");
Иначе
Писатель.ЗаписатьНачалоЭлемента("item");
КонецЕсли;
Писатель.ЗаписатьНачалоЭлемента("id");
СтрокаСоСсылкой = ЗначениеВСтрокуВнутр(Выборка.ссылка);
Писатель.ЗаписатьТекст(сред(СтрокаСоСсылкой, 6, СтрДлина(СтрокаСоСсылкой) - 6));
Писатель.ЗаписатьКонецЭлемента();
Писатель.ЗаписатьНачалоЭлемента("code");
Писатель.ЗаписатьТекст("" + Выборка.Код);
Писатель.ЗаписатьКонецЭлемента();
Писатель.ЗаписатьНачалоЭлемента("description");
Писатель.ЗаписатьТекст(Выборка.Наименование);
Писатель.ЗаписатьКонецЭлемента();
Писатель.ЗаписатьКонецЭлемента();
КонецЦикла;
Писатель.ЗаписатьКонецЭлемента();
РезультатXML = Писатель.Закрыть();
Трансформатор = Новый ПреобразованиеXSL;
Трансформатор.ЗагрузитьИзФайла(КаталогXSLПреобразований + "/refone.xsl");
РезультатHTML = Трансформатор.ПреобразоватьИзСтроки(РезультатXML);
Возврат РезультатHTML;
КонецФункции
У приведенной функции 2 параметра. Параметр НомерСправочника определяет справочник, из которого будут выбираться данные. Параметр СсылкаНаЗапись задает группу, элементы и вложенные группы которой необходимо получить. Если параметр СсылкаНаЗапись имеет значение неопределено, то выбираются элементы и группы верхнего уровня.
В начале этой функции выполняется выборка запрошенных данных из информационной базы. Далее выбранные данные преобразуются в XML-формат при помощи объекта XMLWriter. В результате полученные данные в XML-формате становятся значением строки РезультатXML. XML-формат является общепринятым для передачи данных сложной структуры, но он не содержит всей информации для отображения данных в Интернет-браузере.
Далее при помощи объекта ПреобразованиеXSL из полученных данных формируется html-файл. В его формировании участвует файл XSL\refone.xsl, который управляет процессом преобразования данных с использованием языка преобразования данных XSL. Полученные данные в формате html становятся значением строки РезультатHTML и возвращаются функцией в качестве значения. Остается только передать эти данные клиентскому браузеру, что и делается в ASP странице посредством строки
Response.Write(conn.getRefOne(Request.QueryString("key")(1), empty));
где значение метода getRefOne записывается в объект Response.
Аналогично работают и другие страницы. Полезно обратить внимание на приведенный ниже фрагмент ASP страницы WEB\request.asp, который является примером обработки ошибок в процессе исполнения метода внешнего соединения. Причиной ошибки может быть, например, неверно написанный запрос.
try
{
Response.Write(conn.getRequest(recTxt(1)));
}
catch (exc)
{
Response.Write("Ошибка в запросе. Исправьте и повторите еще.");
Response.Write("" + exc.description + "");
}