Максимальное число строк в макете (табличный документ) #716201


#0 by DrShust
Пишу обработку, которая собирает данные из нескольких регистров и записывает их в другой регистр. Перед тем как записать их туда, предоставляется возможность редактирования полученных данных. Народ желает редактировать эти данных в том виде, в котором набросали в Excel’е. В тестовом варианте одни и те же данные вывожу в табчасть обработки и в  табличный документ реквизита формы (в который, собственно вывожу макет). При изменении чисел в макете, происходит изменение и пересчёт как в макете так и в табчасти. Суть проблемы: при выводе большого числа строк, обработка виснет, причём не на этапе расчётов, а при методах табличного документа Вывести и Присоединить (которые, чередуясь, используются в цикле). Если эти строки заремарить, тогда всё ОК: табличная часть заполняется за 25-30 сек. На данном этапе выводится 15 тыс. строк, а будет в 10 раз больше. Т.е. табчасть заполнится минут за 5, а если выводить макетом (но в более удобном для пользователей варианте), тогда очень не скоро. Возник вопрос: есть ли порог (например, в количестве выводимых на экран строк), сверх которого не целесообразно идти на уступки пользователям в этой конкретной задаче  в ущерб производительности? И второй вопрос: какое максимальное количество строк вы видели на экране в фиксированном макете? Здесь видимо я имею ввиду даже не визуальное наблюдение информации, а использование методов Вывести и Присоединить. Если кто-то выводил, скажем, более 10-15 тыс. строк в макет хотя бы за 5 минут, тогда в коде у меня что-то напутано (хотя для проверки того, что тормоза именно в этих местах кода, я комментил только 2 строки: Табдок.Вывести(ОбластьСтроки) и Табдок.Присоединить(ОбластьСтроки).
#1 by Повелитель
100 000 в легкую. Для того чтобы определить максимум, можно написать обработку внешнюю с циклом на 1 млн, 10 млн вывода строк, это займет ну 5 минут, ты больше писал, чем бы сам тестанул
#2 by DrShust
:)) Возможно. Просто я уже почти закончил писать, об этом подумал.
#3 by Повелитель
Че тут думать на навоял сейчас за 5 минут. 100 000 строк выводит за 5 секунд.
#4 by DrShust
А если для управляемых не дольше будет? Да, извиняюсь, забыл сказать - Управляемое приложение, тонкий клиент. С модуля формы я ухожу в модуль объекта.
#5 by Повелитель
Тут я не подскажу. Тестировать надо. Знаю только, что некоторые браузере xml с 10000 записей открывают по 10 минут. Возможно как раз из-за этого и тормозит у тебя, 1с тонкий клиент, тоже можно браузером назвать ))
#6 by Drac0
табдок ты заполняешь в безконтестном вызове?
#7 by DrShust
100000 строк вывело за 20 секунд. Может быть дело в количестве параметров - их больше 10. Причём один из них как раз выводится методом присоединить (получается макет расползается не только по вертикали, но и по горизонтали, в зависимости от введённых данных пользователями).
#8 by DrShust
Табдок заполняется в модуле объекта, т.е. на сервере, я там директивы не указываю.
#9 by DrShust
Правда в твоих словах есть (насчёт браузера :))) Но это точнее будет применить к динамическим спискам. Когда прокручиваешь список документов, база может притормаживать. Вроде 1000 строк выводится при открытии формы списка, а при прокрутке добавляется новая порция. В принципе, как в большинстве новых сайтов (для быстроты отображения информации).
#10 by Drac0
т.е. безконтекстно. Есть большой нюанс: если табдок заполняется в контекстном вызове, то на клиента приходит частями при просмотре, а если в безконтекстном вызове, то сразу весь, что несколько дольше иногда.
#11 by DrShust
Немного поэксперементировал. Зависает при методе Присоединить. У меня получается цикл внутри цикла: сначала методом Вывести выводится строка, а потом методом Присоединить к этой строке подцепляются новые колонки и их количество грубо говоря зависит от количество элементов справочника. Т.е. таблица: в строках номенклатура, в колонках города. Видимо оптимизацию нужно в этом куске кода проводить...
#12 by DrShust
Т.е. получается по строкам цикл проходит 15 тыс раз - и это 1С вывозит. Но в каждой итерации новый цикл по городам, а их забили 40. Соответственно 15000*40 = 600 тыс. прогонов. Сейчас ради интереса в простецкую обработку, которая построчно выводит номера строк и больше ничего забил количество проходов 600 тыс. Прошло больше 6 минут - программа зависла. Причём на 100 тыс. - думает 20 сек. Но 20*6 <> 120 :))
#13 by Drac0
тогда делай макет на лету и меня логику заполнения, чтобы избежать вложенного цикла.
#14 by DrShust
Да, видимо придётся что-то придумать либо отказаться от этой идеи. Всем спасибо!
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С