
Для экспериментов используем демо-базу 1С:Управление торговлей 11. Создаем новый документ QlikView, включаем возможность динамического обновления, скрипт загрузки настраиваем так же, как в прошлом примере.
Теперь некоторые дополнения:
Во первых, формируем строку SQL для всего объема данных. Это ускоряет загрузку, по сравнению с построчным формированием.
Во вторых, форматируем дату, числа и строки для SQL. В прошлый раз я на этом не заострял внимание, в итоге загружались не все данные.
Создаем обработку, пишем код:
&НаКлиентеНаСервереБезКонтекста Функция sqlСтрока(Данные) Возврат "'" + Данные + "'"; КонецФункции &НаКлиентеНаСервереБезКонтекста Функция sqlЧисло(Данные) Возврат Формат(Данные, "ЧРД=.; ЧРГ=' '; ЧГ=0"); КонецФункции &НаКлиентеНаСервереБезКонтекста Функция sqlДата(Данные) Возврат Формат(Данные, "ДФ=dd.MM.yyyy"); КонецФункции &НаСервере Функция ПолучитьSQLСтроку() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродаж.Период, ДЕНЬ) КАК Период, | РегистрАналитикаУчетаПоПартнерам.Организация, | РегистрАналитикаУчетаПоПартнерам.Партнер КАК Партнер, | РегистрАналитикаУчетаНоменклатуры.Номенклатура, | СУММА(ВыручкаИСебестоимостьПродаж.Количество) КАК Количество, | СУММА(ВыручкаИСебестоимостьПродаж.СуммаВыручки) КАК Сумма, | СУММА(ВыручкаИСебестоимостьПродаж.Себестоимость) КАК Себестоимость |ИЗ | РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК РегистрАналитикаУчетаПоПартнерам | ПО ВыручкаИСебестоимостьПродаж.АналитикаУчетаПоПартнерам = РегистрАналитикаУчетаПоПартнерам.КлючАналитики | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК РегистрАналитикаУчетаНоменклатуры | ПО ВыручкаИСебестоимостьПродаж.АналитикаУчетаНоменклатуры = РегистрАналитикаУчетаНоменклатуры.КлючАналитики | |СГРУППИРОВАТЬ ПО | РегистрАналитикаУчетаПоПартнерам.Организация, | РегистрАналитикаУчетаПоПартнерам.Партнер, | РегистрАналитикаУчетаНоменклатуры.Номенклатура, | НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродаж.Период, ДЕНЬ) | |УПОРЯДОЧИТЬ ПО | Партнер, | Период |АВТОУПОРЯДОЧИВАНИЕ"; sql_string = "INSERT INTO * |(Data, Firma, Partner, Tovar, Quantity, Summa, Cost) |VALUES"; ПерваяСтрока = Истина; Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл sql_string = sql_string + ?(ПерваяСтрока, "", ", ") + " (" + sqlДата(Результат.Период) + ", " + sqlСтрока(Результат.Организация) + ", " + sqlСтрока(Результат.Партнер) + ", " + sqlСтрока(Результат.Номенклатура) + ", " + sqlЧисло(Результат.Количество) + ", " + sqlЧисло(Результат.Сумма) + ", " + sqlЧисло(Результат.Себестоимость) + ")"; ПерваяСтрока = Ложь; КонецЦикла; Возврат sql_string; КонецФункции &НаКлиенте Процедура Подключить(Команда) sql_string = ПолучитьSQLСтроку(); Qlik = Новый COMОбъект("QlikTech.QlikView"); QlikDoc = Qlik.OpenDoc("d:\QlikView\myDocs\test1C.qvw"); QlikDoc.DynamicUpdateCommand(sql_string); КонецПроцедурыВсе, запускаем обработку. В результате, должен открыться QlikView с нашим документом, помещаем на лист нашу таблицу, если заранее этого не сделали. Готово, размещаем диаграммы по вкусу.
а как достать из 1С табличные части документов и реестров?
ОтветитьУдалитьВот здесь http://start1c.blogspot.ru/2012/10/1-qlikview.html я добавил в консоль запросов возможность выгрузки результата запроса в QlikView. Можно воспользоваться этим решением, либо адаптировать под свои задачи.
ОтветитьУдалитьспасибо! то есть этим способом нельзя добраться до табличных частей7
УдалитьСпособ в этой статье - частный случай, в реализации для консоли запросов обобщенный вариант решения. Методика в обоих случаях одна и та же. Поэтому и решение в этом способе можно адаптировать под себя, либо воспользоваться консолью. Главное, создать запрос, собирающий в базе необходимые вам данные, в том числе, и по табличным частям документов.
УдалитьСвязь с кликом через консоль запросов очень удобная вещь! Спасибо! Но с табличными частями не понятно!
УдалитьВот запрос:
ВЫБРАТЬ
РеализацияТоваровУслуг.ДатаПлатежа as D,
РеализацияТоваровУслуг.Контрагент.Наименование as Cl,
РеализацияТоваровУслуг.Менеджер.Наименование as Man,
РеализацияТоваровУслуг.Товары.Количество as Q
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
Вместо количества товаров (Q) в результатирующую таблицу попадает значение "таблица значений"
Потому что обращаешься в запросе к табличной части через ссылку.
УдалитьВ твоем случае надо хотя бы сразу же к табличной части документа.
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Ссылка.ДатаПлатежа,
РеализацияТоваровУслугТовары.Ссылка.Контрагент.Наименование,
РеализацияТоваровУслугТовары.Ссылка.Менеджер.Наименование,
РеализацияТоваровУслугТовары.Количество
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
Или же вытащить данные из нужного регистра.
Все понятно! Прошу прощения за глупый вопрос, мало опыта работы с 1С. Спасибо =)
УдалитьДобрый день. Только начинаю знакомится с кликвью у меня сейчас иная задача. Из 1С прочитать файл формата кликвью. Как это можно сделать?
ОтветитьУдалитьСпасибо.