Допустим, у нас на листе находится простая таблица с ID "TB01". Попробуем в 1С получить из нее данные. Сначала рассмотрим классический обход по ячейкам, похоже на обход листа Excel:
&НаКлиенте Процедура Команда1(Команда) Qlik = Новый COMОбъект("QlikTech.QlikView"); QlikDoc = Qlik.OpenDoc("d:\test1C\test1c.qvw"); ТаблицаКлик = QlikDoc.GetSheetObject("TB01"); ВысотаТаблицы = ТаблицаКлик.GetRowCount(); ШиринаТаблицы = ТаблицаКлик.GetColumnCount(); Для ТекСтрока = 0 По ВысотаТаблицы - 1 Цикл Для ТекКолонка = 0 По ШиринаТаблицы - 1 Цикл Ячейка = ТаблицаКлик.GetCell(ТекСтрока, ТекКолонка); ТекстЯчейки = СокрЛП(Ячейка.Text); //...прочие команды КонецЦикла; КонецЦикла; КонецПроцедурыДанная процедура довольно затратна по времени по сравнению со следующим способом. Сделаем тоже самое с помощью команды GetTableAsText. Эта команда выгружает всю таблицу сразу в текст, что дает преимущество в скорости выполнения.
&НаКлиенте Процедура Команда2(Команда) Qlik = Новый COMОбъект("QlikTech.QlikView"); QlikDoc = Qlik.OpenDoc("d:\test1C\test1c.qvw"); //преобразуем таблицу в текст, разделитель - символ табуляции //1 - с заголовками, 0 - без заголовков //в данном примере заголовки понадобятся для создания колонок в таблице значений ТекстКлик = QlikDoc.GetSheetObject("TB01").GetTableAsText(1); ЗаполнитьТаблицуСервер(ТекстКлик); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция ПолучитьДанныеСтроки(Текст, НомерСтроки) мСтрока = СтрПолучитьСтроку(Текст, НомерСтроки); мСтрока = СтрЗаменить(мСтрока, Символы.Таб, Символы.ПС); Возврат мСтрока; КонецФункции &НаСервере Процедура ЗаполнитьТаблицуСервер(ТекстКлик) КолСтрок = СтрЧислоСтрок(ТекстКлик); Если КолСтрок <= 1 Тогда Возврат; КонецЕсли; ТЗ = Новый ТаблицаЗначений; мСтрока = ПолучитьДанныеСтроки(ТекстКлик, 1); Для Сч = 1 По СтрЧислоСтрок(мСтрока) Цикл мКолонка = СтрПолучитьСтроку(мСтрока, Сч); ТЗ.Колонки.Добавить(СтрЗаменить(мКолонка, " ", ""), , мКолонка); КонецЦикла; Для Сч = 2 По КолСтрок Цикл СтрТЗ = ТЗ.Добавить(); мСтрока = ПолучитьДанныеСтроки(ТекстКлик, Сч); Для мКол = 1 По СтрЧислоСтрок(мСтрока) Цикл СтрТЗ[мКол - 1] = СтрПолучитьСтроку(мСтрока, мКол); КонецЦикла; КонецЦикла; //...прочие команды КонецПроцедуры // ЗаполнитьТаблицуСервер()
Пример обработки
а зачем это может понадобиться?
ОтветитьУдалитьзачем в транзакционую систему грузить данные из системы для анализа 0_о
Пользователь может хотеть странного )
УдалитьНапример, на одной из предыдущих работ торговый аналитик
делал хитрый анализ в Excel, а потом результат грузился в
1С для план-факт анализа.
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(12)}: Ошибка при вызове конструктора (COMОбъект)
ОтветитьУдалитьQlik = Новый COMОбъект("QlikTech.QlikView");
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класс
Все норм. установил приложение "QlikView"
ОтветитьУдалить&НаСервереБезКонтекста
ОтветитьУдалитьПроцедура ТребуетсяВызовИнициализатораНаСервере()
ПолучитьДанныеТаблицКликВью();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПолучитьДанныеТаблицКликВью()
Qlik = Новый COMОбъект("QlikTech.QlikView");
//дальше пример получения потексту из статьи
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Если ИнициализацияНаСервере Тогда
ТребуетсяВызовИнициализатораНаСервере();
Иначе
ПолучитьДанныеТаблицКликВью();
КонецЕсли;
КонецПроцедуры
Вот пример инициализации с выбором на стороне сервера или клиента. На форму помещаете булевый реквизит "ИнициализацияНаСервере". Дает пользователю определение зависимости где установлено само приложение КликВью чтобы не получить ошибку "по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класс"
да, норм :)
УдалитьПодскажите пожалуйста. У меня задача следующая. Имея файлы с типом qvd я могу 1С прочитать из него данные?
ОтветитьУдалитьQlikDoc.GetSheetObject("TB01") . Как узнать Имя таблицы?
ОтветитьУдалитьУ меня она через пробел Table profit
ОтветитьУдалить