Имя: Пароль:
1C
1С v8
Так быстрее или нет?
,
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.Док = ТЗ.Док
Независимо от того, куда вы едете — это в гору и против ветра!