|   |   | 
| 
 | Максимальное число строк в макете (табличный документ) | ☑ | ||
|---|---|---|---|---|
| 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) Да, видимо придётся что-то придумать либо отказаться от этой идеи. Всем спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |