Имя: Пароль:
1C
1С v8
есть ли способ получения массива из табличного документа без обхода каждой ячейки?
, ,
0 Мимохожий Однако
 
04.10.19
10:36
От одного из моих клиентов поступило предложение сделать чтение табличного документа более быстрым. Он предположил, что обход по ячейкам областей слишком медленный. Поэтому и сабж.
1 Asmody
 
04.10.19
10:39
[Он предположил] - я предположил, что он тупой. Но что это меняет?
2 Мимохожий Однако
 
04.10.19
10:41
(1) Вывод: Обходи ячейки и не занимайся поиском других вариантов. Их нет.
3 ам794123
 
04.10.19
10:44
(0) сохрани его в эксел, а оттуда прочти данные запросом
4 xenos
 
04.10.19
10:45
Открой типовую 1С обработку по работе с табличными документами. Например ЗагрузкаИзТаблицы или как-то так.
5 Мимохожий Однако
 
04.10.19
10:57
(3) Пример кода скинь
(4) Там такой же обход по строкам и ячейкам
...
Проблемы получить табличный документ нет
6 ам794123
 
04.10.19
11:00
7 Cyberhawk
 
04.10.19
11:02
Через построитель конечно же читается
8 Cyberhawk
 
04.10.19
11:02
Дарю:

Функция ПреобразоватьТабличныйДокументВТаблицуЗначений(Знач ТабДок) Экспорт
    
    ПоследняяСтрока = ТабДок.ВысотаТаблицы;
    ПоследняяКолонка = ТабДок.ШиринаТаблицы;
    ОбластьЯчеек = ТабДок.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);

    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);  
    ПостроительОтчета = Новый ПостроительОтчета;
    ПостроительОтчета.ИсточникДанных = ИсточникДанных;
    ПостроительОтчета.Выполнить();

    ТЗ = ПостроительОтчета.Результат.Выгрузить();
    
    Возврат ТЗ;
    
КонецФункции
9 Мимохожий Однако
 
04.10.19
11:11
(8) Это у меня есть спасибо. Как я понимаю. Сначала в ТЗ, а потом из ТЗ В массив. Но при этом всё равно будет обход по каждой строке и колонке ТЗ. Те же яйца.
10 Мимохожий Однако
 
04.10.19
11:13
(6) Под запросом подразумеваешь COMОбъект("ADODB.Connection")?
11 dka80
 
04.10.19
11:14
(9) тз.выгрузитьколонку возвращает массив
12 Ёпрст
 
04.10.19
11:15
(9) а зачем из тз в массив ?
13 Мимохожий Однако
 
04.10.19
11:15
(11) Это пока самый близкий вариант к сабжу.
14 dka80
 
04.10.19
11:16
ну или, если все колонки нужны в массиве, то тз в запрос
Выбрать колонка1 из тз
объединить
Выбрать колонка2 из тз
....
15 Ёпрст
 
04.10.19
11:17
Массив нахрена нужен ? В запросе в качестве фильтра ? Так пихай туда тз целиком, а через область, можно указать 1 колонку, будет тз с одной колонкой
16 polosov
 
04.10.19
11:19
(0) Там может не в этом дело?
Может там после чтения каждой ячейки запрос к базе выполняется?
17 Мимохожий Однако
 
04.10.19
11:23
(15) Массив надо передать с сервера на клиент. ТЗ не передать.
(16) нет. Проверял
18 Мимохожий Однако
 
04.10.19
11:39
(11) Только выгружается не структура колонок, а одна колонка)
19 Йохохо
 
04.10.19
12:01
(18) а так? ТЗ.НайтиСтроки(Новый Структура("Номенклатура", ""))
20 Мимохожий Однако
 
04.10.19
15:33
(19) Родился вот такой код:
...
ТЗ.Колонки.Добавить("ккк");
ОтборИзТЗ= Новый Структура("ккк",Неопределено);
МассивДанных=ТЗ.НайтиСтроки(ОтборИзТЗ);
21 Мимохожий Однако
 
04.10.19
16:17
В продолжение...
Массив я получил, но он не передается между сервером и клиентом, т.к. внутри строки таблицы значений.
...
Буду переносить код из модуля формы в модуль обработки, чтобы не гонять таблицу значений.
22 palsergeich
 
04.10.19
23:37
Обход ячеек табдока - это очень быстрая операция.
Ты ещё уборщицу послушай и поставь кактус перед монитором.
Воткни замер производительности и посмотри что же на самом деле является виновником.
23 palsergeich
 
04.10.19
23:39
И это, посмотри сколько раз ты за обход табдока на сервер лезешь.
Что то мне говорит что проблема не в табдоке, а в прокладке между креслом и монитором.
100к ячеек табдока с данными обходится менее чем за секунду.
24 Мимохожий Однако
 
05.10.19
09:55
(22) Спасибо. Кактус помогает )
Сделал замеры. Проблема долгой загрузки оказалась не в способе чтения табличного документа,а в последующем запросе после него, который не связан непосредственно с чтением.
(23) Да.Дело в прокладке. Но я её не могу поменять.
...
Плюс во все истории в том, что приобрел новые знания, навыки и устранил сопутствующую ошибку.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн