Как записать большой объем (2 млн записей) в регистр сведений? #610569


#0 by ИС-2
Есть периодический РС с 2 измерениями. Терминал, Доп период. При этом измерение Доп период не заполнено. Необходимо как-то загрузить в регистр 2 млн. записей из DBF файла. Проблема в том, что если делать отбор набора записей только по Терминалу, то запись вылетает с ошибкой "Не хватает памяти". Записывать по 1 записи очень долго (отбор Терминал + Период).   Вопрос как можно быстро записать данные в регистр?
#1 by rrunover
блоками не предлагать?
#2 by hhhh
транзакции используйте. Допустим, 1000 записей в транзакции.
#3 by H A D G E H O G s
Грузить в SQL таблицу, чтобы уникальность в разрезе измерений не проверялось.
#4 by H A D G E H O G s
Поясни - у тебя 2 млн. терминалов, или 2 млн. периодов, или 2 млн. Терминал-Период ?
#5 by ИС-2
А как блоками можно? У меня только одно измерение - в набор записей попадают все записи (2 млн). Аналогично. Я не знаю как создать набор записей пр. с 100 тыс записями. И загрузить в него. И потом еще раз и еще раз
#6 by ptiz
Синтаксис: Записать(<Замещать>) Параметры: <Замещать> (необязательный) Тип: Булево. Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям Значение по умолчанию: Истина Описание: Записывает набор записей в базу данных. В зависимости от переданного параметра, может быть выполнено добавление записей или их замещение.
#7 by ИС-2
2 млн. Терминал-Период. Кроме проблемного терминала есть другие терминалы. Всего в регистре 16 млн. записей.
#8 by ИС-2
Это проблему с памятью не решает. Т.к в выбранный набор записей попадут все записи с указнным терминалом
#9 by dauster
Имхо, можно попробовать перезаписать регистр следующим образом: 1) устанавливаем размер блока записи, скажем в 50000 записей. 2) делаем выборку регистра сведений с отбором по пустому доп. периоду. 3) создаем набор записей с отбором по нужному доп. периоду. 4) начинаем обход выборки (п.2), добавляем в набор (п.3) записи до максимального размера блока (п.1). 5) записываем набор записей (с параметром замещения ЛОЖЬ). 6) очищаем набор записей 7) продолжаем обход выборки, т.е. переходим на п.4 до тех пор, пока не обойдем все записи. после всей этой фигни количество записей регистра удвоится (останутся старые записи с пустым доп. периодом и появятся новые), поэтому старые нужно удалить - создав и записав пустой набор записей по пустому доп. периоду.
#10 by ptiz
"в выбранный набор записей попадут все записи с указнным терминалом" - они попадут в базу, но не будут занимать ОЗУ.
#11 by aleks-id
грузи напрямую в таблицу скуля из текстового файла с разделителями через bulk insert
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С