Работа с объемными справочниками, содержащими от нескольких сотен тысяч до миллиона и более записей, часто приводит к критическому снижению производительности 1С. Пользователи сталкиваются с длительным открытием формы списка, зависаниями при прокрутке и долгим откликом при поиске. Проанализируем основные причины такого поведения и разберем по шагам действенные методы ускорения работы со справочником в файловых и клиент-серверных информационных базах.
В управляемом интерфейсе 1С форма списка отображает данные через объект ДинамическийСписок. По умолчанию этот механизм считывает данные порциями, достаточными для заполнения видимой области экрана пользователя. Если при листании возникают сильные задержки, значит, постраничное считывание нарушено или перегружено дополнительными вычислениями. Разберем ключевые настройки динамического списка:
ДинамическоеСчитываниеДанных установлен в значение Истина. Если он отключен, платформа пытается загрузить всю таблицу целиком, что гарантированно подвешивает сеанс на миллионе записей.Индексировать (например, Код или Наименование).Выясним причину задержек при отрисовке строк. Нередко падение скорости связано с неоптимальным кодом в событиях формы:
&НаСервере
Процедура СписокПриПолученииДанныхНаСервере(Элемент, ОформленияСтрок)
МассивСсылок = Новый Массив;
Для Каждого СтрокаОформления Из ОформленияСтрок Цикл
МассивСсылок.Добавить(СтрокаОформления.ДанныеСтроки.Ссылка);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Номенклатура КАК Ссылка,
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура В (&МассивСсылок)) КАК Цены";
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Выборка = Запрос.Выполнить().Выбрать();
// Заполняем полученные данные в строки оформления
КонецПроцедуры
Для справочников сверхбольшого объема структура отображения имеет ключевое значение:
ИерархическийСписок или Дерево) требует дополнительных ресурсов на вычисление узлов и проверку наличия подчиненных элементов. Переключение свойства таблицы РежимОтображения в значение Список заметно ускоряет навигацию.Стандартный поиск по части строки (условие ПОДОБНО "%значение%") выполняет полное сканирование таблицы из 1 000 000 строк, что при многопользовательской работе парализует систему. Разберем альтернативные варианты:
Недействителен (булево) и установим в динамическом списке постоянный отбор по активным позициям. Это сократит рабочий массив данных для повседневной работы пользователей.Проанализируем влияние файлового режима работы при базе с 1 000 000 позиций:
.1CD) при записи любого элемента или проведении документа блокируется вся таблица справочника целиком. Если один пользователь редактирует номенклатуру или проводит документ реализации, остальные пользователи в этот момент сталкиваются с зависанием формы списка..1CD имеют платформенные ограничения по размеру (по умолчанию до 4 ГБ на таблицу). Объемный каталог номенклатуры с историей цен, штрихкодами и табличными частями быстро приближается к этому пределу.