Ускорение загрузки большой таблицы в 1С
Гружу большую CSV-таблицу в 1С. Но происходит это медленно. К тому же через удаленное приложение и иногда оно завершается по тайм-ауту. Приходится стартовать заново.
Сделал небольшое усовершенствование — перед записью считываю менеджер регистра, если данные не поменялись, то запись не записываю повторно. Ну и добавил режим транзакции, в нем 1С записывает данные быстрее.
Записываю пакетами, чтобы не накапливать в памяти большие пакеты.
&НаСервере Процедура ЗаписатьРегистрСведений(ИмяТаблицы, Т) Экспорт НачатьТранзакцию(); МенеджерРегистра = РегистрыСведений[ИмяТаблицы]; ПоляРегистра = ПолучитьПоляРегистраСведений(ИмяТаблицы); Для Каждого Структура ИЗ Т Цикл МЗ = МенеджерРегистра.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МЗ, Структура); МЗ2 = МенеджерРегистра.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МЗ2, Структура); МЗ2.Прочитать(); Если МЗ2.Выбран() Тогда Разница = ложь; Для Каждого ПолеРегистра ИЗ ПоляРегистра Цикл Если МЗ[ПолеРегистра] <> МЗ2[ПолеРегистра] Тогда Разница = истина; Прервать; КонецЕсли; КонецЦикла; Если НЕ Разница Тогда Продолжить; КонецЕсли; КонецЕсли; МЗ.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры Функция ПолучитьПоляРегистраСведений(ИмяРегистра) Поля = Новый Массив(); МДР = Метаданные.РегистрыСведений[ИмяРегистра]; Для Каждого МД ИЗ МДР.Измерения Цикл Поля.Добавить(МД.Имя); КонецЦикла; Для Каждого МД ИЗ МДР.Ресурсы Цикл Поля.Добавить(МД.Имя); КонецЦикла; Возврат Поля; КонецФункции
Протокол когда данные пропускались из-за наличия:
И протокол, когда записи записывались:
Свежие комментарии