Как Быстро Загрузить Большой Списоквыбора?

Тема в разделе "1C и всё что с ней связано", создана пользователем Olgir, 8 фев 2012.

Наш партнер Genesis Hackspace
  1. Olgir

    Olgir Гость

    Здравствуйте, я, можно сказать, новичок в программировании на 1С. Не так давно столкнулся с такой штукой, как КЛАДР. Вобщем, суть такова - я создал форму с полями для ввода адреса (регион, район, город и т.п.). Данные для этой формы берутся с помощью запроса из регистра сведений (который был скопирован из другой конфигурации). Так вот, при выборе города из списка загружается список улиц в соответствующий СписокВыбора текстового поля на форме, и в случае с некоторыми городами (например, Москва), количество улиц весьма велико. В итоге, загрузка списка улиц по Москве занимает 16 секунд, что неприемлимо.
    Процесс происходит так: сначала функция возвращает мне с сервера массив структур, в которых содержится все что мне необходимо, включая названия улиц, после этого циклом загружаются названия из массива в СписокВыбора. Выглядит это вот так:

    Код ( (Unknown Language)):
    гМассивУлиц = ВыбратьУлицыНаСервере(КодРегиона,0,0,0);
    КоличествоУлиц = гМассивУлиц.Количество();

    Для Счетчик=0 По КоличествоУлиц-1 Цикл       
    Элементы.Улица.СписокВыбора.Добавить(СокрЛП(гМассивУлиц[Счетчик].Наименование+" "+гМассивУлиц[Счетчик].Сокращение));
    КонецЦикла;
    Запрос выполняется очень быстро, но вот цикл с загрузкой данных в список занимает очень много времени.
    Я пробовал формировать СписокЗначений на сервере, потом передавать его на клиент, время загрузки осталось прежним, выходит метод ЗагрузитьЗначения так же использует цикл. Убирание СокрЛП из кода тоже не дает никакого результата, значит, дело не в ней.
    Как можно оптимизировать загрузку данных в СписокВыбора? Что я делаю не так?
     
  2. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Мой вам совет, не изобретайте велосипед. Посмотрите в типовых конфигурациях как там реализовано. Там все в регистре сведений, и отбор делается средствами платформы, а не запросом.
     
  3. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Darlock, Не понял такой вещи: да чем бы не отбирался список улиц, запросом или отбором, он Большой и все равно будет торомозить.
    Думаете легко в типовой что-то найти?
    Olgir, нужно докопаться, в чем тормоза. 1) Сама выборка данных долго идет 2) Передача на клиента 3) Цикл по массиву.
     
  4. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Дайнеко, особенность платформы в том, что устанавливая отбор в регистре (без запросов и т.п.) работает платформа. Что в любом случае будет быстрее, чем отработает запрос написаный девелопером. Что-то в типовой найти трудно, но реально. А разобрав как оно сделано там, можно все лишнее выбросить и сделать свое так как надо.


    Добавлено: Olgir, исключите цикл. Из результата запроса выгрузите колонку с данными. А в список выбора загрузите полученный массив. Может станет шустрее.
     
  5. Olgir

    Olgir Гость

    Дело в том, что в типовых конфигурациях используется отдельная форма для выбора каждого элемента адреса. У меня же все элементы находятся на одной форме и мне хотелось бы их там же и оставить. Просто как-то не верится, что нельзя ускорить загрузку элементов в СписокВыбора.

    Далее - что именно торомозит. Выборка происходит мгновенно. Тормозит именно цикл. Если выгрузить значения в колонку, отправить на клиент и потом использовать метод ЗагрузитьЗначения, ничего не меняется, метод выполняется 16 секунд. Выглядит так:
    Элементы.Улица.СписокВыбора.ЗагрузитьЗначения(КолонкаУлиц); - вот это 16 секунд занимает. Есть способ сделать быстрее?
    На С++ я просто запихал бы данные "КолонкаУлиц" по адресу Элементы.Улица.СписокВыбора и дело с концом, тип данных то один и тот же. Есть вообще способ скопировать область памяти в 1С?
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    в чем принципиальное отличие в плане формирования списка?
     
  7. Olgir

    Olgir Гость

    Я так понимаю, в типовой конфигурации используется встроенный механизм фильтрования данных (на объектной основе), а я делаю все вручную. По крайней мере, припоминаю, что именно так. Сегодня попробую расковырять бухгалтерию, посмотрю как сделано там.
     
Загрузка...

Поделиться этой страницей