Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 апр 2024, 01:02

1С 8.2, СписокВыбора и его быстродействие

Автор Olgir, 08 фев 2012, 12:41

0 Пользователей и 1 гость просматривают эту тему.

Olgir

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

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

Для Счетчик=0 По КоличествоУлиц-1 Цикл
    Элементы.Улица.СписокВыбора.Добавить(СокрЛП(гМассивУлиц[Счетчик].Наименование+" "+гМассивУлиц[Счетчик].Сокращение));
КонецЦикла;


Запрос выполняется очень быстро, но вот цикл с загрузкой данных в список занимает очень много времени.
Я пробовал формировать СписокЗначений на сервере, потом передавать его на клиент, время загрузки осталось прежним, выходит метод ЗагрузитьЗначения так же использует цикл. Убирание СокрЛП из кода тоже не дает никакого результата, значит, дело не в ней.
Как можно оптимизировать загрузку данных в СписокВыбора? Что я делаю не так?

Olgir

Прошу прощения, плохо выделил код в первом посте и теперь не знаю, как отредактировать его, поэтому повторю свое сообщение еще раз.


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

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

Для Счетчик=0 По КоличествоУлиц-1 Цикл
    Элементы.Улица.СписокВыбора.Добавить(СокрЛП(гМассивУлиц[Счетчик].Наименование+" "+гМассивУлиц[Счетчик].Сокращение));
КонецЦикла;


Запрос выполняется очень быстро, но вот цикл с загрузкой данных в список занимает очень много времени.
Я пробовал формировать СписокЗначений на сервере, потом передавать его на клиент, время загрузки осталось прежним, выходит метод ЗагрузитьЗначения так же использует цикл. Убирание СокрЛП из кода тоже не дает никакого результата, значит, дело не в ней.
Как можно оптимизировать загрузку данных в СписокВыбора? Что я делаю не так?

Olgir

И снова накосячил с тегом CODE, причем понятия не имею, как. Господа модераторы, отредактируйте, пожалуйста, чтобы нормально было. Или подскажите где кнопка -  в упор не вижу!

minakov.dmitry

Элементы.Улица.СписокВыбора.ЗагрузитьЗначения(гМассивУлиц); ?

Olgir

Цитата: minakov.dmitry от 08 фев 2012, 21:32
Элементы.Улица.СписокВыбора.ЗагрузитьЗначения(гМассивУлиц); ?
гМассивУлиц содержит структуры, если вы не заметили. С ним этот метод не проходит, но я пробовал формировать список значений на сервере и применять к нему этот метод. Не помогло, время выполнения метода ЗагрузитьЗначения - 16 секунд.

minakov.dmitry

Если структура применяется только для получения названия и сокращения и Вы их потом все равно складываете, не проще ли сложить эти два поля в запросе и получить массив строк, а не структур?
И если уж метод ЗагрузитьЗначения тормозит, то перебор в цикле уж точно быстрее не будет.

Slaid

а на компьютере где именно находится база данных, тоже также долго прогружает данные улиц? (делает подборку)

cska-fanat-kz

Цитата: Slaid от 10 фев 2012, 06:12
а на компьютере где именно находится база данных, тоже также долго прогружает данные улиц? (делает подборку)

выборки данных и т.п. затратные операции лучше делать на стороне сервера, потому что обычно он мощнее и производительней.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Olgir

Цитата: minakov.dmitry от 09 фев 2012, 20:36
Если структура применяется только для получения названия и сокращения и Вы их потом все равно складываете, не проще ли сложить эти два поля в запросе и получить массив строк, а не структур?
И если уж метод ЗагрузитьЗначения тормозит, то перебор в цикле уж точно быстрее не будет.
Названия и сокращения мне нужны по отдельности для последующего формирования настраиваемого строкового представления адреса. Дело в том, что гМассивУлиц - глобальный массив, использующийся и в других процедурах.
Я уже пробовал сократить передачу данных с сервера на клиент до минимума - тоесть, до простого массива со строками, но результат остался абсолютно тем же - цикл тормозит, ЗагрузитьЗначения тоже :(.

Цитата: Slaid от 10 фев 2012, 06:12
а на компьютере где именно находится база данных, тоже также долго прогружает данные улиц? (делает подборку)
Выборка происходит мгновенно. Тормозит цикл, добавляющий данные из массива в СписокВыбора.


Похоже, что сам элемнет формы тормозной.. :( Вообще, есть в 1С способ написать низкоуровневую процедуру? Мне бы ссылку СписокВыбора подменить и дело с концом! СписокЗначений на сервере формируется весьма быстро.

Dethmontt

Как вариант:
А если использовать не СписокВыбора, а форму для выбора значения???
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск