Имя: Пароль:
1C
1С v8
Долго отрабатывает выгрузка в xls, что не так делаю?
,
0 SherifSP
 
05.02.14
18:40
Количество строк 30000, количество колонок 17, цикл отрабатывает быстро, но строка сохранения очень долго, ждал 10 минут и завершил сеанс, что не так делаю?

МассивКОМ = Новый COMSafeArray("VT_VARIANT", КоличествоКолонок, КоличествоСтрок);
    Для инд = 0 По КоличествоСтрок - 1 Цикл
        СтрокаТаблицы = ТаблицаЗаказы[инд];
        
        Для счКолонок = 1 По КоличествоКолонок - 1 Цикл
            МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]);
        КонецЦикла;
    КонецЦикла;
    
    ЛистXls.Range(ЛистXls.Cells(1,1), ЛистXls.Cells(КоличествоСтрок,КоличествоКолонок)).Value = МассивКОМ;
1 МихаилМ
 
05.02.14
18:42
выгрузите 5 строк
и узнаете, что не так
2 SherifSP
 
05.02.14
18:48
(1) 1000 строк и 17 колонок за 2.5 секунды выгружаются, а 30000 и 17 колонок, больше 10 минут
3 МихаилМ
 
05.02.14
18:52
(2)

выгружайте

30 раз по 1000 строк
4 SherifSP
 
05.02.14
18:52
И птица как на зло нет, он писал что все летает
5 МихаилМ
 
05.02.14
18:55
6 SherifSP
 
05.02.14
18:58
(5) 65000 строк всего(
7 МихаилМ
 
05.02.14
19:03
(6)
в условии задачи в (0)
дано 30000 строк
8 SherifSP
 
05.02.14
19:06
(7) Как цикл себя поведет, если у меня будит 27500 строк  и я разобью их на 1000?

Для XlsЛист = 0 По КоличествоСтрок/1000 Цикл
  МассивКОМ = Новый COMSafeArray("VT_VARIANT", КоличествоКолонок, КоличествоСтрок);
      Для инд = 0 По 1000 Цикл
          СтрокаТаблицы = ТаблицаЗаказы[инд];
        
          Для счКолонок = 1 По КоличествоКолонок - 1 Цикл
              МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]);
          КонецЦикла;
      КонецЦикла;
    
      ЛистXls.Range(ЛистXls.Cells(1,1), ЛистXls.Cells(КоличествоСтрок,КоличествоКолонок)).Value = МассивКОМ;
КонецЦикла;
9 SherifSP
 
05.02.14
19:12
Маня помогай, я знаю, ты знаешь))
10 МихаилМ
 
05.02.14
19:20
11 SherifSP
 
05.02.14
19:32
(10) Через Ado пробовать?
12 Мимохожий Однако
 
05.02.14
19:33
Стандартные методы Табличного документа почему не устраивают?
13 SherifSP
 
05.02.14
19:40
(12) Это как?
14 SherifSP
 
05.02.14
19:41
У меня 2007 офис установлен, говорят можно больше 65000 строк записывать, но подключение то идет как к 2003?
15 Torquader
 
05.02.14
21:25
(14) Так у него есть режим совместимости.
16 SherifSP
 
06.02.14
11:13
25 000 строк записываются очень долго, но метод перебора мне понравился, очень быстро работает
17 SherifSP
 
07.02.14
11:56
Ап
18 SherifSP
 
07.02.14
12:00
Если КоличествоСтрок = 10000 - строка  ЛистXls.Range(ЛистXls.Cells(1,1), ЛистXls.Cells(КоличествоСтрок,КоличествоКолонок)).Value = МассивКОМ; отрабатывает за 2 секунды
19 SherifSP
 
07.02.14
12:01
А если больше, то 10+ минут
20 SherifSP
 
07.02.14
12:04
Разбил запись по 1000 строк, ругается на МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]); Индекс находится за границами массива

Для XlsЛист = 0 По (КоличествоСтрок/1000) Цикл
        МассивКОМ = Новый COMSafeArray("VT_VARIANT", КоличествоКолонок, 1000);
        Для инд = XlsЛист*1000 По ((XlsЛист+1)*1000) - 1 Цикл
            СтрокаТаблицы = ТаблицаЗаказы[инд];
            
            Для счКолонок = 1 По КоличествоКолонок - 1 Цикл
                МассивКОМ.SetValue(счКолонок - 1, инд, СтрокаТаблицы[счКолонок]);
            КонецЦикла;
        КонецЦикла;
        
        ЛистXls.Range(ЛистXls.Cells((XlsЛист+1)*1000,1), ЛистXls.Cells(1000,КоличествоКолонок)).Value = МассивКОМ;
    КонецЦикла;
21 ptiz
 
07.02.14
12:13
Замер производительности что показывает? Где именно тормозит?
22 МихаилМ
 
07.02.14
12:18
(КоличествоСтрок/1000)
может округлить в большую сторону.. и ошибка
23 КонецЦикла
 
07.02.14
12:23
Писал много строк через OLEDB
24 ptiz
 
07.02.14
12:24
Посмотрел у себя:
....Value = МассивКОМ; - отрабатывает 50 тыс. строк за 2 сек.

Так что замер в руки и вперед.
25 SherifSP
 
07.02.14
12:26
(21) Тормозит  ЛистXls.Range(ЛистXls.Cells((XlsЛист+1)*1000,1), ЛистXls.Cells(1000,КоличествоКолонок)).Value = МассивКОМ; Вот на этой строке
26 SherifSP
 
07.02.14
12:27
(24) А колонок сколько?
27 SherifSP
 
07.02.14
12:31
(24) У меня в общем итоге 300000 строк в МассивКОМ, 50000 тоже за 2 секунды записывает
28 ptiz
 
07.02.14
13:02
(27) 17 колонок, 310 000 строк - 9 сек.
Офис 2013

Ну раз медленно, то записать в (на выбор): табличный документ 1С (и сразу сохранить в xls), dbf,  csv,  потом скормить екселю и форматировать.
Или, как советуют тут - ADO (не пробовал).

Или - кусками, только строку
Для инд = XlsЛист*1000 По ((XlsЛист+1)*1000) - 1 Цикл
поменяй на
Для инд = XlsЛист*1000 По Мин(ТаблицаЗаказы.Количество() -  1, ((XlsЛист+1)*1000) - 1) Цикл
29 SherifSP
 
10.02.14
15:31
Разбил 30000 строк по 1000 строк, записывается 19000 быстро, 20000 уже долго(30) минут
30 Адинэснег
 
10.02.14
15:35
(0)купи манин загрузчик! Логан надо тоже заправлять чем-то
31 SherifSP
 
10.02.14
15:35
(30) гг
32 SherifSP
 
10.02.14
15:49
Пробую через Ado, ошибка при открытии(

СтрокаСоединения ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " +СокрЛП(ИмяФайла) +" ;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""";
    
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.ConnectionString =  СтрокаСоединения;
    
    Попытка
        Connection.Open(); - Вот здесь ошибка
    Исключение
        Сообщить ("Проблемы с подключением к Excel" );
        Возврат;
    КонецПопытки;
33 SherifSP
 
10.02.14
15:52
Внешняя таблица не имеет предполагаемый формат
34 Адинэснег
 
10.02.14
15:54
(33) excel в процессах висит