Каталог решений - Выгрузка / Загрузка регистра сведений из внешний системы с большим количеством строк

Выгрузка / Загрузка регистра сведений из внешний системы с большим количеством строк

Выгрузка / Загрузка регистра сведений из внешний системы с большим количеством строк

В наличии

Часто возникает задача, когда уже вся НСИ загружена и необходимо перегрузить регистры сведений с большим количеством строк (около миллиона строк). Перегрузка может быть из любой информационной системы (на 1С или нет).
Для себя определил максимальной быстрый вариант выгрузки/загрузки — через файл Excel с учетом возможности предварительной правки и просмотра результата загрузки.

Категория:

Описание

1. Выгрузить все необходимые поля из системы источника (ключевые поля) в файл Excel.

Предварительно должна быть загружена вся необходимая НСИ (или хотя бы основная её часть).

2. На стороне системы приемника 1С, прочитываем файл Excel и его сохраняем в массиве колонок.

	ЛистЭксель = ДокументExcel.Sheets(НомерЛиста);
	
	Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки, НомерПервойКолонки), ЛистЭксель.Cells(НомерПоследнейСтроки, НомерПоследнейКолонки));
	Данные = Область.Value.Выгрузить();

Данная конструкция за несколько секунд загрузит файл с миллионом строк.

3. На форму обработки загрузки добавляем Таблицу значений с количеством колонок, как в файле Excel.

4. Выполняем заполнение таблицы значений на форме, через временную таблицу значений (чтобы можно увидеть результат считывания из файла Excel заранее и возможно что-то подправить).

Каждый элемент массива считанного файла Excel, содержат данные колонки по номеру.

	//временная таблица значений
    ТаблицаЗВрем = Новый ТаблицаЗначений;
	ТаблицаЗВрем.Колонки.Добавить("Колонка1");
	ТаблицаЗВрем.Колонки.Добавить("Колонка2");
	ТаблицаЗВрем.Колонки.Добавить("Колонка3");

    //создаем количество строк соответствующее количеству строк Excel
	Для Н=1 По Данные[0].Количество() Цикл  
   		 ТаблицаЗВрем.Добавить();
	КонецЦикла; 
	
    //загружаем колонки из прочитанного файла Excel в таблицу значений
	ТаблицаЗВрем.ЗагрузитьКолонку(Данные[0], "Колонка1");
	ТаблицаЗВрем.ЗагрузитьКолонку(Данные[1], "Колонка2");
	ТаблицаЗВрем.ЗагрузитьКолонку(Данные[2], "Колонка3");

    //выполняем необходимые преобразования данных из Excel
	Для Н=0 По ТаблицаЗВрем.Количество()-1 Цикл
   		ТаблицаЗВрем[Н].Колонка1= СтрЗаменить(ТаблицаЗВрем[Н].Колонка1, Символы.НПП, ""); 
		ТаблицаЗВрем[Н].Колонка2= СтрЗаменить(ТаблицаЗВрем[Н].Колонка2, Символы.НПП, "");
	КонецЦикла; 	
	
    //загружем таблицу на форму
	ТаблицаЗНаФорме.Загрузить(ТаблицаЗВрем);

5. После того, как файл Excel загружен и проверен, его можно загрузить в регистр сведений используя следующей код:

	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЧВрем.Колонка1 КАК Колонка1,
	                      |	ТЧВрем.Колонка2 КАК Колонка2,
	                      |	ТЧВрем.Колонка3 КАК Колонка3
	                      |ПОМЕСТИТЬ ТЧВрем
	                      |ИЗ
	                      |	&ТЧВрем КАК ТЧВрем
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ТЧВрем.Колонка1 КАК Колонка1,
	                      |	ПервичныйДокумент.Ссылка КАК Документ
	                      |ИЗ
	                      |	ТЧВрем КАК ТЧВрем 
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПервичныйДокумент КАК ПервичныйДокумент
	                      |		ПО ТЧВрем.Колонка1 = ПервичныйДокумент.Номер
	                      |			И ТЧВрем.Колонка2 = ПервичныйДокумент.Дата
						  |ГДЕ
						  |	ТЧВрем.Колонка1 <> """"");
	
	Запрос.УстановитьПараметр("ТЧВрем", ТЧВрем.Выгрузить());
	
	ТЧРезультат = Запрос.Выполнить().Выгрузить();
		
	НужныйРегистр = РегистрыСведений.НужныйРегистр.СоздатьНаборЗаписей();	
	НужныйРегистр.Прочитать();
	НужныйРегистр.Загрузить(ТЧРезультат );
	НужныйРегистр.Записать(ИСТИНА);

Данный код также выполняется достаточно быстро.

Сама загрузка происходит около часа, что является достаточно быстрым результатом.

 

Для примера рабочее место загрузки:

 

В рабочем месте выбираем, от и до какой строки загружаем.

По кнопке — Заполнить, выполняется пункт 4, предварительно выбрав файл.

По кнопке — Сформировать, выполняется пункт 5.

 

Данное решение имеет ряд ограничений:

1) Yаличие 64битной платформы и достаточного количества оперативной памяти (от 32 Гб).

2) На стороне источника — система должна уметь выгрузить в формат Excel, а на стороне приемника 1С — должна быть установлена Excel.

3) Должна быть загружена вся НСИ (или хотя бы основная часть, некоторую часть можно сразу загружать в  данной обработке — но тогда будет потрачено дополнительное время загрузки).

4) Поиск ссылочных объектов по GUID (при загрузке данных в регистр сведений лучше определять ссылочные данные по полям поиска, если это не возможно сделать, то перед загрузкой в регистр сведений. Нужно определить ссылочные объекты по GUID — но тогда будет потрачено дополнительное время загрузки). 

Применять можно на любой конфигурации.

has been added to your cart:
Оформление заказа