Имя: Пароль:
1C
1С v8
Максимальное число строк в макете (табличный документ)
,
0 DrShust
 
04.08.14
07:23
Пишу обработку, которая собирает данные из нескольких регистров и записывает их в другой регистр. Перед тем как записать их туда, предоставляется возможность редактирования полученных данных. Народ желает редактировать эти данных в том виде, в котором набросали в Excel’е. В тестовом варианте одни и те же данные вывожу в табчасть обработки и в  табличный документ реквизита формы (в который, собственно вывожу макет). При изменении чисел в макете, происходит изменение и пересчёт как в макете так и в табчасти.
Суть проблемы: при выводе большого числа строк, обработка виснет, причём не на этапе расчётов, а при методах табличного документа Вывести и Присоединить (которые, чередуясь, используются в цикле). Если эти строки заремарить, тогда всё ОК: табличная часть заполняется за 25-30 сек. На данном этапе выводится 15 тыс. строк, а будет в 10 раз больше. Т.е. табчасть заполнится минут за 5, а если выводить макетом (но в более удобном для пользователей варианте), тогда очень не скоро.
Возник вопрос: есть ли порог (например, в количестве выводимых на экран строк), сверх которого не целесообразно идти на уступки пользователям в этой конкретной задаче  в ущерб производительности?
И второй вопрос: какое максимальное количество строк вы видели на экране в фиксированном макете? Здесь видимо я имею ввиду даже не визуальное наблюдение информации, а использование методов Вывести и Присоединить. Если кто-то выводил, скажем, более 10-15 тыс. строк в макет хотя бы за 5 минут, тогда в коде у меня что-то напутано (хотя для проверки того, что тормоза именно в этих местах кода, я комментил только 2 строки: Табдок.Вывести(ОбластьСтроки) и Табдок.Присоединить(ОбластьСтроки).
1 Повелитель
 
04.08.14
07:28
(0) 100 000 в легкую.
Для того чтобы определить максимум, можно написать обработку внешнюю с циклом на 1 млн, 10 млн вывода строк, это займет ну 5 минут, ты больше писал, чем бы сам тестанул
2 DrShust
 
04.08.14
07:31
(1) :)) Возможно. Просто я уже почти закончил писать, об этом подумал.
3 Повелитель
 
04.08.14
07:34
https://yadi.sk/d/TsdLhnzvYyr9y
Че тут думать на навоял сейчас за 5 минут.
100 000 строк выводит за 5 секунд.
4 DrShust
 
04.08.14
07:42
(3) А если для управляемых не дольше будет? Да, извиняюсь, забыл сказать - Управляемое приложение, тонкий клиент. С модуля формы я ухожу в модуль объекта.
5 Повелитель
 
04.08.14
07:49
(4) Тут я не подскажу. Тестировать надо.
Знаю только, что некоторые браузере xml с 10000 записей открывают по 10 минут. Возможно как раз из-за этого и тормозит у тебя, 1с тонкий клиент, тоже можно браузером назвать ))
6 Drac0
 
04.08.14
07:55
(0) табдок ты заполняешь в безконтестном вызове?
7 DrShust
 
04.08.14
07:55
(5) 100000 строк вывело за 20 секунд. Может быть дело в количестве параметров - их больше 10. Причём один из них как раз выводится методом присоединить (получается макет расползается не только по вертикали, но и по горизонтали, в зависимости от введённых данных пользователями).
8 DrShust
 
04.08.14
07:57
(6) Табдок заполняется в модуле объекта, т.е. на сервере, я там директивы не указываю.
9 DrShust
 
04.08.14
08:02
(5) Правда в твоих словах есть (насчёт браузера :))) Но это точнее будет применить к динамическим спискам. Когда прокручиваешь список документов, база может притормаживать. Вроде 1000 строк выводится при открытии формы списка, а при прокрутке добавляется новая порция. В принципе, как в большинстве новых сайтов (для быстроты отображения информации).
10 Drac0
 
04.08.14
08:51
(8) т.е. безконтекстно. Есть большой нюанс: если табдок заполняется в контекстном вызове, то на клиента приходит частями при просмотре, а если в безконтекстном вызове, то сразу весь, что несколько дольше иногда.
11 DrShust
 
04.08.14
09:00
(10) Немного поэксперементировал. Зависает при методе Присоединить. У меня получается цикл внутри цикла: сначала методом Вывести выводится строка, а потом методом Присоединить к этой строке подцепляются новые колонки и их количество грубо говоря зависит от количество элементов справочника. Т.е. таблица: в строках номенклатура, в колонках города. Видимо оптимизацию нужно в этом куске кода проводить...
12 DrShust
 
04.08.14
09:09
(11) Т.е. получается по строкам цикл проходит 15 тыс раз - и это 1С вывозит. Но в каждой итерации новый цикл по городам, а их забили 40. Соответственно 15000*40 = 600 тыс. прогонов. Сейчас ради интереса в простецкую обработку, которая построчно выводит номера строк и больше ничего забил количество проходов 600 тыс. Прошло больше 6 минут - программа зависла. Причём на 100 тыс. - думает 20 сек. Но 20*6 <> 120 :))
13 Drac0
 
04.08.14
09:28
(12) тогда делай макет на лету и меня логику заполнения, чтобы избежать вложенного цикла.
14 DrShust
 
04.08.14
09:35
(13) Да, видимо придётся что-то придумать либо отказаться от этой идеи. Всем спасибо!
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой