Имя: Пароль:
1C
 
Как ускорить обработку?
0 Help1с
 
16.08.16
10:44
Приветствую.
Есть такой код:

Процедура на клиенте выполняет код:

    Сообщить("1: " + ТекущаяДата());
    ЗагрузитьДанныеВТЗИзМассива(Данные1, КолКолонок, КоличествоСтрок);
    Сообщить("4: " + ТекущаяДата());


&НаСервере
Процедура ЗагрузитьДанныеВТЗИзМассива(МассивДанных, КолКолонок, КоличествоСтрок)
    Сообщить("2: " + ТекущаяДата());
    
    Данные1 = МассивДанных;
    ТЗ1 = Новый ТаблицаЗначений();
    Для ТекСтрока = 1 По КоличествоСтрок Цикл
        ТЗ1.Добавить();
    КонецЦикла;
    НомерКолонки = 0;
    Для каждого ТекКолонка Из Данные1 Цикл
        НомерКолонки = НомерКолонки + 1;
        НоваяКолонка = ТЗ1.Колонки.Добавить("Кол" + Формат(НомерКолонки,"ЧЦ=3; ЧВН="));
        ТЗ1.ЗагрузитьКолонку(ТекКолонка, НоваяКолонка);
    КонецЦикла;
        
    ТЗ1.Сортировать("Кол005,Кол008,Кол009,Кол007");
    Сообщить("2,5: " + ТекущаяДата());
    ТЗСодержаниеФайла.Загрузить(ТЗ1);
    Сообщить("3: " + ТекущаяДата());
    
КонецПроцедуры


Загружаю данные массива, более 80 тысяч строк.
Вот что выводит Сообщить:
1: 16.08.2016 12:30:40
2: 16.08.2016 12:31:02 //20 секунд на передачу массива на сервер?
2,5: 16.08.2016 12:31:05
3: 16.08.2016 12:31:08
4: 16.08.2016 12:32:28 //что делает полторы минуты?

Сообщения выходят так:
1 - сразу,
2, 2,5, 3 - одновременно. значит процедура на сервере завершилась и вернулся обработчик на клиент.
4 - через полторы минуты после завершения процедуры на сервере.

Есть варианты как ускорить работу обработки?
Спасибо.
1 Help1с
 
16.08.16
10:47
(0) + отладчиком прошелся, никакие события формы не выполняются.
2 H A D G E H O G s
 
16.08.16
10:49
Возвращает массив с сервера на клиент
3 Help1с
 
16.08.16
10:49
суть вопроса как бы сводится к тому, что выполняется между пунктом 3 и 4.
4 patria0muerte
 
16.08.16
10:50
Ммм... может серверную процедуру без контекста вызвать?
5 Help1с
 
16.08.16
10:50
(2) тогда получается не массив, а ТЗ.
в коде ТЗСодержаниеФайла.Загрузить(ТЗ1) - это таблица на форме
6 patria0muerte
 
16.08.16
10:53
Я правильно понял, что общая проблема в том, чтобы передать ТЗ с клиента на сервер?
7 Help1с
 
16.08.16
10:55
(6) нет, проблема пока в том, что долго выполняется.
8 RomaH
 
naïve
16.08.16
10:58
ЗагрузитьДанныеВТЗИзМассива(Знач МассивДанных, Знач КолКолонок, Знач КоличествоСтрок)
9 f_vadim
 
16.08.16
10:58
>>ТЗСодержаниеФайла.Загрузить(ТЗ1);

если эти данные нужны на клиенте, то видимо ускорить не получится
10 RomaH
 
naïve
16.08.16
10:59
(7) проблема в том, что контекст (форма + ТЗ)
11 RomaH
 
naïve
16.08.16
11:01
может все на клиенте делать?
12 Help1с
 
16.08.16
12:09
(11) хм. надо попробовать. спасибо.
13 Fragster
 
гуру
16.08.16
12:16
включить показатели производительности и посмотреть в них объем передаваемых данных
14 Fragster
 
гуру
16.08.16
12:17
у параметров функции поставить ЗНАЧ
15 МихаилМ
 
16.08.16
12:19
время на сервере и клиенте мб не синхронным
16 Help1с
 
16.08.16
12:25
(14) это помогло частично, теперь возврат с сервера не 80 секунд, а 40.
как быстрее работать - на сервере с ТЗ или на клиенте с данными формы коллекция?
17 Fragster
 
гуру
16.08.16
12:27
есть ли на форме динамические списки, элементы управления со ссылочными данными, подписки на события у динамических списков?
18 Help1с
 
16.08.16
12:44
(17) есть все вышеперечисленное
19 Help1с
 
16.08.16
12:50
(16) + проверил. на клиенте ужасно долго.
&НаКлиенте
Процедура ЗагрузитьДанныеВТЗИзМассива(Знач МассивДанных, Знач КолКолонок, Знач КоличествоСтрок)
    Сообщить("2: " + ТекущаяДата());
    Данные1 = МассивДанных;
    ТЗ1 = ТЗСодержаниеФайла;  
    НомерКолонки = 0;
    Для каждого ТекКолонка Из Данные1 Цикл
        НомерКолонки = НомерКолонки + 1;
        Для каждого ТекСтрокаКолонки Из ТекКолонка Цикл
        
            НоваяСтрока = ТЗ1.Добавить();
            НоваяСтрока["Кол" + Формат(НомерКолонки,"ЧЦ=3; ЧВН=")] = ТекСтрокаКолонки;
        
        КонецЦикла;
    КонецЦикла;
        
    Сообщить("2,3: " + ТекущаяДата());
    ТЗ1.Сортировать("Кол005,Кол008,Кол009,Кол007");
    Сообщить("3: " + ТекущаяДата());
    
КонецПроцедуры
20 Help1с
 
16.08.16
12:55
(19) + результат:

1: 16.08.2016 14:46:14
2: 16.08.2016 14:46:14
2,3: 16.08.2016 14:47:10
3: 16.08.2016 14:50:43
4: 16.08.2016 14:50:44

получается что сама таблица заполняется 50 секунд, а потом сортируется 3,5 минуты. сейчас подумаю что с этим делать.
21 ДемонМаксвелла
 
16.08.16
13:05
сортируй МассивДанных, причем на сервере
22 Fragster
 
гуру
16.08.16
13:06
(18) переделай на &НаСервереБезКонтекста
23 Fragster
 
гуру
16.08.16
13:07
подписка на событие ПриАктивизацииСтроки у демонических списков долго выполняется?
24 Help1с
 
16.08.16
13:31
(23) это событие не замерял. данная процедура не задействована.
(22) не получится, таблица на форме не заполняется.
25 ovrfox
 
16.08.16
13:35
(0) попробуйте сохранить данные в специальную структуру на сервере, например регистр сведений. В котором у же указаны необходимые сортировки.
Во время выполнения процедуры Вы просто передаете массив на сервер, пишете его в ТЗ, Сохраняете в регистр.
После возврата отображаете динамический список регистра.
26 Fragster
 
гуру
16.08.16
13:46
очищать ТЗСодержаниеФайла перед уходом на сервер
27 Help1с
 
16.08.16
13:49
(26) сохранить не дает обработку, пишет что переменная ТЗСодержаниеФайла не определена
28 Fragster
 
гуру
16.08.16
13:57
ТЗСодержаниеФайла - это что?
29 Fragster
 
гуру
16.08.16
14:00
вообще абстрактная обработка в вакууме - это непонятно. вероятно, надо грузануть файл на сервер и там уже его целиком обработать. пользователю показать уже результат, причем в виде таб. части или таб. дока
30 Help1с
 
16.08.16
14:13
(28) реквизит формы ТЗ
31 Fragster
 
гуру
16.08.16
14:24
ну так не = неопределено, а .очистить().
но вообще походу все дело во времени сериализации и десериализации
32 Fragster
 
гуру
16.08.16
14:46
кстати, тут может зависеть от платформы. например таб.часть или тз может кэшироваться на сервере. а может и не кэшироваться, тут хз. с таб. документом точно прокатывает http://catalog.mista.ru/public/504141/ с ТЗ не смог сформудировать условия, когда оно на сервере живет и на клиент частями приходит
33 Fragster
 
гуру
16.08.16
14:46
* сформулировать :)
34 RomaH
 
naïve
17.08.16
06:54
я правильно понял - массив - это из екселя?
35 Help1с
 
17.08.16
08:41
(34) да. выгружаем область екселя в массив.
36 Йохохо
 
17.08.16
09:04
(35) в табличную часть формы у меня 60к строк 3 столбца на клиенте читаются за пару секунд из экселя
37 Help1с
 
18.08.16
09:34
(36) можно код?
38 RomaH
 
naïve
18.08.16
11:46
(35) так может на сервере ексель обрабатывать?
установить, настроить права - и вперед