|
Так быстрее или нет? | ☑ | ||
---|---|---|---|---|
0
Hipocrisy2013
21.06.13
✎
10:37
|
1 вариант цикл в цикле (перебираю строки из 2х эксель файла)
2 вариант 1 эксель файл запихать в таблицу значений, и в цикле использовать метод "найти" |
|||
1
zak555
21.06.13
✎
10:38
|
эксель-файл как получен ?
|
|||
2
vde69
21.06.13
✎
10:38
|
быстрее запросом через внешний источник, или через АДО
|
|||
3
Hipocrisy2013
21.06.13
✎
10:39
|
Книга = Эксель.Workbooks.Open(ПутьКФайлу);
Книга1 = Эксель.Workbooks.Open(ПутьКФайлу2); Лист = Книга.Worksheets(1); ActiveCell = Лист.Cells(1,1).SpecialCells(11); КоличествоСтрок = ActiveCell.Row; Лист1 = Книга1.Worksheets(1); ActiveCell1 = Лист1.Cells(1,1).SpecialCells(11); КоличествоСтрок1 = ActiveCell1.Row; |
|||
4
Deon
21.06.13
✎
10:40
|
(0) 2 вариант быстрее, ясен буй.
|
|||
5
MiniMuk
21.06.13
✎
10:42
|
перебор в цикле каждая итерация обращение черех СОМ это ооочень долго.
|
|||
6
Deon
21.06.13
✎
10:42
|
(2) У меня почему-то 1Ска виснет на запросе к таблице > 100'000 строк (
|
|||
7
ixilimuse
21.06.13
✎
10:45
|
Я обычно считываю в таблицу значений, потом уже произвожу анализ. И даже полученную ТЗ выгружаю во временный файл, для себя. На всякий случай. Вдруг ошибка в отладке произойдет, а время деньги)) При больших файлах считывание ощутимо отнимает время.
|
|||
8
GANR
21.06.13
✎
10:46
|
Работа с файлом будет в разы быстрее, если для работы с Ексель использовать АДО.
Мой вердикт: 1. Прочитать файл ка здесь v8: Работа в Excel через ADO 2. И обработать считанное в п.1 вторым вариантом из (0) |
|||
9
Лефмихалыч
21.06.13
✎
10:46
|
(0) эксель-файлы в ТЗ, ТЗ - в запрос, в запросе - соединение по полям поиска
|
|||
10
vde69
21.06.13
✎
10:51
|
(0) второй вариант будет быстрее (если запрос не охота юзать) если вместо "найти" использовать http://wiki.mista.ru/doku.php?id=1c:v8:howto:algoritm_sravnenija_dvux_tablic_po_tekstovomu_polju
|
|||
11
GANR
21.06.13
✎
10:53
|
(9) Еще один виток улучшения:
1. Прочитать файл ка здесь v8: Работа в Excel через ADO 2. И обработать считанное в п.1 вторым вариантом из (0) 3. ТЗ - в запрос. 4. В запросе п.3 - соединение по полям поиска. Важно: если таблица более 20 строк - надо попробовать в запросе предварительно проиндексировать поля соединения. |
|||
12
Hipocrisy2013
21.06.13
✎
10:54
|
(9) тему говоришь, так и сделаю
|
|||
13
GANR
21.06.13
✎
10:55
|
Во! Точно - возможно САМЫЙ быстрый способ - это сделать запрос, который производит все соединения и поски прямо в АДО.
|
|||
14
GANR
21.06.13
✎
10:55
|
А потом (13) уже только вывести в 1С.
|
|||
15
Deon
21.06.13
✎
11:03
|
(13) А как ты соединения с таблицами 1С сделаешь? )
|
|||
16
GANR
21.06.13
✎
11:07
|
(15) Ну, это если нужно данные из Ексель соединить сами с собой. А если 1С - то ТЗ и (9).
|
|||
17
Hipocrisy2013
21.06.13
✎
12:10
|
как правильно сделать запрос с таблицами значений?
делаю так, ошибка: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | тз1.док, | тз1.сумма, | тз.контр, | тз.номер, | тз.дата |ИЗ | &ТЗ1 как тз1 | левое соединение (выбрать | т1.док, | т1.контр, | т1.номер, | т1.дата | из &ТЗ как т1) как тз | по тз1.док = тз.док"; Запрос.УстановитьПараметр("ТЗ1", ТЗ1); Запрос.УстановитьПараметр("ТЗ", ТЗ); |
|||
18
GANR
21.06.13
✎
12:44
|
(17) Сначала создать на основании таблицы значений временную таблицу, а потом уже манипулировать ею как надо:
ВЫБРАТЬ ТЗ1.Док, ТЗ1.Сумма ПОМЕСТИТЬ ТЗ1 ИЗ &ТЗ1 КАК ТЗ1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ.Док, ТЗ.Контр, ТЗ.Номер, ТЗ.Дата ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ1.Док, ТЗ1.Сумма, ТЗ.Контр, ТЗ.Номер, ТЗ.Дата ИЗ ТЗ1 КАК ТЗ1 ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ ПО ТЗ1.Док = ТЗ.Док |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |