Имя: Пароль:
1C
 
Excel.application плохая производительность при загрузке .xls в 1С.
, ,
0 Alexandrovich
 
17.04.21
01:35
В общем очень долго загружается 4000 строк из *.xls или *.xlsx в 1С.

На компе стоит офис 2007, платформу 1С пробовал 8.3.14,8.3.15, 8.3.17, кстати офис тоже пробовал 2016.
Подключение происходит через внешнюю компоненту excel.application.

Размер файла 7Мб.

Железо:
Intel Xeon (Skylake, IBRS) 2.29 GHz
SSD
16Гб ОП

При загрузке файла нагрузка идет только на процессор 25%, на диск и оперативку загрузки нету.

И самое главное что на другом ПК загрузка происходит в два раза быстрее.

В чем может быть проблема?
1 Garykom
 
гуру
17.04.21
01:37
1 антивирус и прочие фоновые
2 грузи без экселя напрямую через табдок.прочитать
2 UFOdriver
 
17.04.21
01:38
СпособЧтенияЗначенийТабличногоДокумента.Текст
3 UFOdriver
 
17.04.21
01:38
А уж опосля...
4 Alexandrovich
 
17.04.21
01:48
Еще есть варианты?
5 UFOdriver
 
17.04.21
01:51
6 UFOdriver
 
17.04.21
01:52
Смущает ВК excel.application. Первый раз такую слышу. ВК я писал и прикручивал, но что бы майкросовтовский офис...
7 UFOdriver
 
17.04.21
01:56
Откажемся от вражеского ПО и доверимся монополии 1С "даром" что она все метОды предоставляет!
8 Aleksey
 
17.04.21
02:28
(4) сдредствами ексел сохранить в csv файл (это быстро) и дальше работать как с текстовым файлом (это тоже очень быстро)
9 Злопчинский
 
17.04.21
02:37
(8) или в дбф, будет наверное еще быстрее
по крайней мере когда я на клюшках так делал - разница была в десятки раз по сравнению с экселем
10 Жан Пердежон
 
17.04.21
03:17
(0) *.xls* уже давно можно через табличный документ читать без excel.application
11 Жан Пердежон
 
17.04.21
03:23
а так в (0) всё не конкретно - плохо / быстро / медленно
на Xeon 2.29GHz - одно ядро на 100% грузит, а на "другом ПК" вполне может оказаться что-нибудь современное 4.2-4.7 GHz - отсюда и результат
12 NorthWind
 
17.04.21
08:20
(6) да нет такой ВК. Это автор OLE-объект так называет, потому что не понимает чем одно отличается от другого.
13 NorthWind
 
17.04.21
08:27
По существу - эксель это последнее, чем сейчас стоит пользоваться для таких целей. Во-первых, требуется его наличие на компе, где происходит работа. Часто разбором файлов занимаются на сервере, а на серверах офис нужен как корове седло. При этом лицензия стоит вполне конкретных денег. Во-вторых, как я недавно убедился, даже при наличии офиса нужной битности иногда бывают всякие подземные стуки, из-за которых ком-объект не работает как надо, можно потратить кучу времени на выяснение причин и с неясным результатом. Ну и в-третьих, есть куча вариантов без экселя обойтись. Табличный документ в относительно свежих 1С. Прямой разбор XLSX файла. Драйвер Jet/Access для ADO.
14 GANR
 
17.04.21
13:12
(0) На CSV-ху заменить не вариант? Все эти Ворды и Эксели при загрузках больших объёмов - зло
15 Alexandrovich
 
17.04.21
16:56
Это все понятно, писал обработку другой человек, почему используется ecxel.application я не знаю, но задача сейчас в том чтобы как-то ускорить процесс загрузки товаров, 5 минут идет загрузка - это не совсем удобно.
16 Garykom
 
гуру
17.04.21
17:14
(15) Логично же что переписать обработку
И да если она написана криворуким недопрограммистом это будет сложней
Чем если нормальным и там в самом начале все данные из файлика получаются в какой то объект 1С а затем юзаются

А не так что тут же поиск/создание номенклатуры например и тут же в цикле чтение из ячеек екселя ))
17 NorthWind
 
17.04.21
19:15
(16) на табличный документ 1С переписать не так уж трудно и в этом случае. Логика-то практически та же
18 GANR
 
18.04.21
11:34
(15) А вы, кстати, уверены, что тормоза возникают именно из за экселя? У меня подозрение, что на самом деле надо запись в базу-приемник ускорять. Если он там у себя грузит не "дельты", а каждый раз всю базу, рекомендую выкинуть эту обработку и написать свой обмен по инструкции по подсистеме "Обмен данными" с ИТС по правилам конвертации. Проще будет КД2 для БСП 2 (старая методика), если модель сервиса - лучше КД3 для БСП 3.
19 GANR
 
18.04.21
11:34
разумеется правила регистрации продумать
20 GANR
 
18.04.21
11:40
(0) Замер производительности при длительной операции покажите, если можно.
21 mistеr
 
18.04.21
15:24
>Подключение происходит через внешнюю компоненту excel.application

Это ты COM так называешь? :)

>на другом ПК загрузка происходит в два раза быстрее

Битность 1С и Excel совпадет? Если нет, там накладные расходы приличные.
22 Alexandrovich
 
18.04.21
16:58
(21) Совпадает, 1с 32х и офис тоже 32х.

Еще есть варианты? Человек отказывается менять с DCOM на табчасть, получается мне надо менять сервак :)
23 craxx
 
18.04.21
17:21
(22) а ты там кем?
24 mistеr
 
18.04.21
17:54
(22) Профилировать, как уже советовали.
25 GANR
 
18.04.21
19:19
(22) Так что замер производительности показывает? Можно ещё сходить свечку поставить, дохлую крысу к ране приложить - вдруг чума пройдёт.
26 Alexandrovich
 
18.04.21
22:57
(25)  Какой замер производительности? Написал какая ситуация и все, нету никаких производительностей.
Файл загружается, но грузит долго, в это время сервер работает в холостую.
27 Garykom
 
гуру
18.04.21
23:23
(26) ты программист или где?
делишь свой файл и в кол-во потоков фоновых по числу сервера грузишь
28 Garykom
 
гуру
18.04.21
23:23
(27) *по числу ядер сервера
29 acanta
 
18.04.21
23:29
(28) точно! А не цикл...
30 Alexandrovich
 
19.04.21
01:15
(27)  Можно ссылку на инструкцию если существует разбор такой процедуры.
31 GANR
 
19.04.21
05:40
(26) Замер производительности 1С - это гуглится. Как вы себе представляете не оптимизацию без этой информации? Если запрос тормозит действия одни, запись в базу - другие, если экселевские операции - третьи.
32 Bigbro
 
19.04.21
05:52
проблема в мегагерцах процессора, которые Эксель по ОЛЕ сжирает полностью.
33 NorthWind
 
19.04.21
10:00
(30) у меня не так давно была похожая ситуация, правда, она была хуже - на серваке в системе просто что-то покорежилось и Excel через OLE отказался нормально работать, при том что все остальное осталось в норме, а переустановка офиса не помогла. Переписывание на табличный документ решило проблему а) полностью; б) с минимальными затратами на кодирование, потому что логика обращения к ячейкам по сути та же; в) в качестве бонуса увеличилась производительность. А там думайте, решайте.
34 DGorgoN
 
19.04.21
10:05
(33) Я бы поспорил по производительности т.к. у экселя есть процедура копирующая область прямо в тз. Это существенно быстрее очень многих методов.
35 NorthWind
 
19.04.21
10:06
(34) хмм... а что за процедура? И откуда эксель вообще может знать про ТЗ, это же объект 1С.
36 DGorgoN
 
19.04.21
10:14
(35) Щас кину но в сети есть примеры. Там копирование с 1 области памяти в другую
37 DGorgoN
 
19.04.21
10:18
ТаблицаДанных = Новый ТаблицаЗначений();
    чМаксКолонок = 30;
    Для чКол = 1 По чМаксКолонок Цикл
        ТаблицаДанных.Колонки.Добавить("Колонка"+СокрЛП(чКол));
    КонецЦикла;
    Область = Excel.Range(Excel.Cells(1,1), Excel.Cells(ФайлСтрок,ФайлКолонок));
    Данные = Область.Value.Выгрузить();

    Для Счетчик = 0 По ФайлКолонок-1 Цикл
        ТаблицаДанных.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);        
    КонецЦикла;
38 Kassern
 
19.04.21
10:40
(0) а долго это сколько? И чем не устроило типовое чтение через табдок?
39 Alexandrovich
 
19.04.21
10:45
Кроме перехода на табличную часть, есть варианты как ускорить процесс загрузки?
40 Irbis
 
19.04.21
10:46
(39) Почто про CSV прощёлкал?
41 Kassern
 
19.04.21
10:48
(39) какая еще табличная часть? Вы точно программист? Табличная часть <> Табличный документ.
42 Kassern
 
19.04.21
10:48
(39) и про "долго" тоже не отписались, может для вас 5сек это уже долго
43 Alexandrovich
 
19.04.21
10:53
(42) 5 минут, вместо 1 минуты
44 Dmitrii
 
гуру
19.04.21
10:58
(40) Автор разработки <> Автор этой ветки.
Автор разработки не хочет переписывать что-либо в части загрузки.
Автор ветки пытается найти волшебную кнопку "Сделать быстрее не изменяя подход к реализации".
Такой кнопки нет.
Разница в скорости, вероятнее всего, обусловлена причинами, не зависящими от платформы 1С. (Например, скорость процессора или какой-нибудь антивирус, сканирующий каждый чих с файлами excel).
Но точно это сказать невозможно, т.к. замер производительности автор ветки делать не хочет.
Ветку можно закрывать.
45 Kassern
 
19.04.21
11:11
(44) не удивлюсь, если в там еще в цикле выполняется 4тыс запросов (по каждой позиции), а потом вопросы, "а че так долго то?!"
46 Garykom
 
гуру
19.04.21
11:26
(45) меня больше удивляет что вайтишник с нулевыми почти знаниями еще не обзавелся синдромом самозванца
ну или скорее админ зачем то в 1С полез
причем админ херовый, который про как выжать максимум из железа не знает, особенно для 1С
47 Alexandrovich
 
19.04.21
11:28
(46)  :)
48 Garykom
 
гуру
19.04.21
11:31
(47) это не смешно
это страшно что в ИТ попали совершенно случайные люди, которые не обладают знаниями и опытом
но им зарплату платят и нехилую! только непонятно за что
49 Kassern
 
19.04.21
11:32
(48) чаще бывает другая ситуация, программист свалил, остался только сисадмин, нового программиста полгода найти не могут, заставляют админа через клизму 1с учить)
50 Garykom
 
гуру
19.04.21
11:32
(48)+ Хотя я и в медицине с подобным сталкивался
Когда хреновый терапевт перешел в УЗИсты - потому что там много платят
А как не умеет нихрена так и осталось. Ну да знает как аппарат включить и некие манипуляции провести а понять что происходит и что желчный камнями забит никак...
51 Garykom
 
гуру
19.04.21
11:32
(49) Ну флаг им в жопу
52 Kassern
 
19.04.21
11:33
(49) ведь для руководства, что тот компуторщик, что другой)
53 Garykom
 
гуру
19.04.21
11:33
(52) Надо руководство спросить чем они отличаются от дирижера.
Что один руками водит что другой...
54 Kassern
 
19.04.21
11:39
(0) В общем для ТС, дам подсказку, как ускорить загрузку. Для 4к позиций не особо важно чем ты читать будешь (оле, ком, табдок) важно как будешь обрабатывать данные. Львиную долю занимает соответствие строк экселя к данным 1ски, особенно при кривой реализации. Лучше 1 раз получить заполненную таблицу значений по данным экселя, чем по каждой строчке долбиться к базе. Получили ТЗ, запихнули ее во временную таблицу в запрос, далее соединили по ключевым полям с таблицами базы и одним запросом получили результирующую таблицу на выходе.
55 Garykom
 
гуру
19.04.21
11:46
(54) Для ТС лучшая подсказка это нанять/обратиться к специалисту
И да вполне возможно что автор загрузки не хочет бесплатно переписывать ))
56 NorthWind
 
19.04.21
11:53
(37) интересно, спасибо.
57 GANR
 
19.04.21
12:01
(49) (51) Развеселили выражениями )))
(54) а здесь светлее )))
58 Alexandrovich
 
19.04.21
18:25
(51) Мужик, за что тебя так жизнь наказала? Ты где то увидел где я представился? Программист, админ, или баба Галя уборщица - подбирай какое нравится. Вопрос не зависит от должности, пусть я буду бомжара с улицы которого что-то интересует поэтому он пришел на этот форум, пусть студент или школьник который хочет знать, научиться, но в результате такие гавн*ки как ты портят советы профессионалов, читаешь полезные советы и видишь впереди твои флаги в жопе. С твоих рекомендаций я увидел только антивирус и фоновые, а остальное всё твоё гов*но-возмущения.
59 Alexandrovich
 
19.04.21
18:41
(54) Спасибо.
60 Garikk
 
19.04.21
18:42
(58) Рунет - злое место, довольно известный факт в этихваших инторнетах
61 GANR
 
19.04.21
21:15
(58) Складывается впечатление, что Вы системный администратор или железчик некой фирмы, в которой ИТ не является основным производством. Уволился программист и сказал Вам "Вот тебе полцарства и денег на лекарства...". Угадал?
62 ДедМорроз
 
19.04.21
21:50
Читайте весь лист сразу в массив ComSafeArray через Range.
И все,будет быстро и красиво.
Независимо от того, куда вы едете — это в гору и против ветра!