QlikView + 1С без 1С-Коннектора

QlikView + 1С без 1С коннектора

Популярность QlikView на российском рынке BI-систем постепенно растет, многие компании используют это ПО для консолидации финансовых данных, сокращения трудозатрат, оперативного контроля и многих других задач. И вполне закономерно, возникла необходимость связки 1С с QlikView, желательно напрямую, без всяких промежуточных выгрузок из базы. Некоторые ИТ-компании уже разработали коммерческие решения, например, QlikView-1C Коннектор, так или иначе облегчающие этот процесс. В качестве бесплатной альтернативы предлагаю простой способ получения информации из 1С через COM-соединение.
Для экспериментов я использовал демо-базу 1С:Управление торговлей 11. Сначала реализуем тестовую функцию в 1С, открываем Модуль внешнего соединения, пишем код:

Функция TestQlik() Экспорт
  Возврат "QlikView успешно подключилось к 1С";
КонецФункции

Теперь в QlikView настраиваем COM-соединение. Открываем редактор макросов, пишем следующий скрипт, подставляем свои параметры подключения к базе:

sub v82connect
set conn = CreateObject("V82.ComConnector")
set v82 = conn.Connect("File=""I:\1c_base\demoTRD"";usr=""QlikView"";")
MsgBox(v82.TestQlik)
end sub

Обратите внимание на настройки параметров локальной безопасности, установлена в «Разрешить системный доступ». Жмем «Тест», если все сделано правильно, должно появиться сообщение «QlikView успешно подключилось к 1С«.

1С

Теперь попробуем подгрузить данные из 1С. Сначала сформируем пустую таблицу в скрипте загрузки:

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='Пн;Вт;Ср;Чт;Пт;Сб;Вс';
LOAD * INLINE [
    Data, Firma, Partner, Tovar, Quantity, Summa, Cost];

Запускаем скрипт, размещаем простую таблицу на листе:

1С

В свойствах документа включаем динамическое обновление данных:

1С-cxema

Пишем скрипт загрузки в редакторе макросов:

sub v82query
set conn = CreateObject("V82.ComConnector")
set v82 = conn.Connect("File=""I:\1c_base\demoTRD"";usr=""QlikView"";")
query_1c = "ВЫБРАТЬ" &_
" НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродаж.Период, ДЕНЬ) КАК Data,"& vbNewLine & _
" ПРЕДСТАВЛЕНИЕ(РегистрАналитикаУчетаПоПартнерам.Организация) КАК Firma,"& vbNewLine & _
" ПРЕДСТАВЛЕНИЕ(РегистрАналитикаУчетаПоПартнерам.Партнер) КАК Partner,"& vbNewLine & _
" ПРЕДСТАВЛЕНИЕ(РегистрАналитикаУчетаНоменклатуры.Номенклатура) КАК Tovar,"& vbNewLine & _
" СУММА(ВыручкаИСебестоимостьПродаж.Количество) КАК Quantity,"& vbNewLine & _
" СУММА(ВыручкаИСебестоимостьПродаж.СуммаВыручки) КАК Summa,"& vbNewLine & _
" СУММА(ВыручкаИСебестоимостьПродаж.Себестоимость) КАК Cost"& vbNewLine & _
"ИЗ"& vbNewLine & _
" РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж"& vbNewLine & _
"  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК РегистрАналитикаУчетаПоПартнерам"& vbNewLine & _
"  ПО ВыручкаИСебестоимостьПродаж.АналитикаУчетаПоПартнерам = РегистрАналитикаУчетаПоПартнерам.КлючАналитики"& vbNewLine & _
"  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК РегистрАналитикаУчетаНоменклатуры"& vbNewLine & _
"  ПО ВыручкаИСебестоимостьПродаж.АналитикаУчетаНоменклатуры = РегистрАналитикаУчетаНоменклатуры.КлючАналитики"& vbNewLine & _
"СГРУППИРОВАТЬ ПО"& vbNewLine & _
" НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродаж.Период, ДЕНЬ),"& vbNewLine & _
" ПРЕДСТАВЛЕНИЕ(РегистрАналитикаУчетаПоПартнерам.Организация),"& vbNewLine & _
" ПРЕДСТАВЛЕНИЕ(РегистрАналитикаУчетаПоПартнерам.Партнер),"& vbNewLine & _
" ПРЕДСТАВЛЕНИЕ(РегистрАналитикаУчетаНоменклатуры.Номенклатура)"
set v8query = v82.NewObject("Query")
v8query.text = query_1c
set result = v8query.Execute
set m = result.Choose
do while m.next
 set sql_string = ActiveDocument.DynamicUpdateCommand("INSERT INTO * "& vbNewLine & _
 "(Data, Firma, Partner, Tovar, Quantity, Summa, Cost) " & vbNewLine & _
 "VALUES (" & m.Data &", "& m.Firma & ", " & m.Partner & ", " & m.Tovar & ", " & m.Quantity & ", " & m.Summa & ", " & m.Cost & ")") loop
ActiveDocument.GetApplication.Refresh
end sub

Обратите внимание на написание текста запроса, это связано с особенностями VBScript. Поэтому лучше описание запроса оставлять на стороне 1С, в QlikView передавать только готовый результат. Так же псевдонимы полей в запросе пришлось писать на латинице, кириллицу не воспринимает. Выделяем нашу процедуру в списке редактора, жмем «Тест». Мы увидим что наша пустая таблица заполнилась данными.

ComConnector

Теперь можно построить пару диаграмм:

VBScript

При желании можно поставить наш скрипт в выполнение после скрипта загрузки:

VBScript

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

Форум разработчиков QlikView и Qlik Sense. Получите ответы на все вопросы по QlikView и Qlik Sense!

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

64 queries in 0,397 seconds