30 сент. 2012 г.

Добавление скрипта загрузки в QlikView из 1С


Продолжаю серию публикаций "QlikView + 1С без 1С коннектора". Как оказалось, API QlikView позволяет получить доступ к скрипту загрузки документа. Данную возможность можно использовать для генерации своего скрипта на стороне 1С, например, когда точное количество колонок таблицы результата будет известно после выполнения запроса.
Нижеприведенный код считывает из параметров документа QlikView скрипт загрузки, производит добавление строк и помещает скрипт обратно в документ:
 Qlik = Новый COMОбъект("QlikTech.QlikView");
 ФайлQlik = "d:\QlikView\myDocs\load1C.qvw";
 мФайл = Новый Файл(ФайлQlik);
 Если НЕ мФайл.Существует() Тогда
  
  QlikDoc = Qlik.CreateDoc();
  QlikDoc.SaveAs(ФайлQlik);
  
 Иначе
  QlikDoc = Qlik.OpenDoc(ФайлQlik);
 КонецЕсли;
 
 QlikParams = QlikDoc.GetProperties();
 ScriptDoc = QlikParams.Script;
 
 Поз = Найти(ScriptDoc, "//Script1C>+");
 Если Поз = 0 Тогда
  ScriptDoc = ScriptDoc + "
  |//Script1C>+
  |//здесь будет скрипт 1С
  |//Script1C>-";
  QlikParams.Script = ScriptDoc;
  QlikDoc.SetProperties(QlikParams);
 КонецЕсли;
 
При выполнении этого кода откроется в запустится QlikView создаст или откроет наш документ. Если мы откроем скрипт загрузки этого документа, то должны увидеть следующее:

Кстати, по умолчанию, при создании нового документа QlikView запускает мастер начала работы. Отключить запуск можно в параметрах пользователя:

Теперь мы можем модифицировать процедуру из прошлого примера следующим образом:
 sql_string = ПолучитьSQLСтроку();
 
 Qlik = Новый COMОбъект("QlikTech.QlikView");
 QlikDoc = Qlik.OpenDoc("d:\QlikView\myDocs\test1C.qvw");
 
 QlikParams = QlikDoc.GetProperties();
 QlikParams.Script = 
 "SET ThousandSep=' ';
 |SET DecimalSep=',';
 |SET MoneyThousandSep=' ';
 |SET MoneyDecimalSep=',';
 |SET MoneyFormat='# ##0,00р.;-# ##0,00р.';
 |SET TimeFormat='h:mm:ss';
 |SET DateFormat='DD.MM.YYYY';
 |SET TimestampFormat='DD.MM.YYYY h:mm:ss[.fff]';
 |SET MonthNames='янв;фев;мар;апр;май;июн;июл;авг;сен;окт;ноя;дек';
 |SET DayNames='Пн;Вт;Ср;Чт;Пт;Сб;Вс';
 |
 |//Скрипт 1С
 |LOAD * INLINE [
 |Data, Firma, Partner, Tovar, Quantity, Summa, Cost
 |];";
 QlikDoc.SetProperties(QlikParams);
 //Запуск скрипта загрузки
 QlikDoc.Reload();
 
 QlikDoc.DynamicUpdateCommand(sql_string);
 

4 комментария:

  1. Дошлова Юлия5 июня 2013 г., 17:24

    Добрый вечер! Скажите пожалуйста, откуда Вы черпаете функции, через которые обращаетесь к QlikView? Могли бы поделиться источником?

    ОтветитьУдалить
  2. Привет. У меня эти файлы в win7 лежат в c:\ProgramData\QlikTech\QlikView Documentation\Automation. Можно скачать отдельным пакетом с demo.qlikview.com/download, ссылка "Скачать учебный материал".

    ОтветитьУдалить
  3. В html формате можно взять здесь http://community.qlikview.com/servlet/JiveServlet/download/136294-19287/QlikViewAPI_html.zip

    ОтветитьУдалить
  4. Дошлова Юлия6 июня 2013 г., 18:32

    Огромная благодарность)

    ОтветитьУдалить