Дата публикации:
3 сентября 2025
В современной бизнес-среде работа с Excel-файлами стала неотъемлемой частью повседневной деятельности. Однако при обработке массивов данных большого объёма возникают серьёзные проблемы с производительностью системы.
На проекте каждый месяц загружают Excel-файл, содержащего около 40 000 строк для загрузки цен товаров. Первоначальное время обработки составляло 2,5 часа, что существенно замедляло работу системы.
Исходный код загрузки выглядел следующим образом:
НомерСтроки = 2;
Пока ЗначениеЗаполнено(Sheet.Cells(НомерСтроки, 1).Value) Цикл
НоваяСтрока = ТаблицаПрайса.Добавить();
НоваяСтрока.КодНСИ = Sheet.Cells(НомерСтроки, СтолбецКодНСИ).Value;
НоваяСтрока.Цена = Sheet.Cells(НомерСтроки, СтолбецЦена).Value;
НаименованиеВидаЦен = Sheet.Cells(НомерСтроки, СтолбецВидыЦен).Value;
НоваяСтрока.ВидЦены = ВидЦенаПоНаименованию(НаименованиеВидаЦена);
КонецЦикла;
Функция ВидЦенаПоНаименованию(НаименованиеВидаЦена)
Возврат Справочники.ВидыЦен.НайтиПоНаименованию(НаименованиеВидаЦена);
КонецФункции
Sheet.Cells(НомерСтроки, НомерСтолбца).Value:Sheet.Range(Sheet.Cells(НачальнаяСтрока,СтолбецЦеноваяГруппа), Sheet.Cells(КоличествоСтрок, СтолбецЦеноваяГруппа)).Value.Выгрузить()Sheet.Cells(1,1).SpecialCells(11).RowКоличествоСтрок = Sheet.Cells(1,1).SpecialCells(11).Row;
МассивКодНСИ = Sheet.Range(Sheet.Cells(2,СтолбецКодНСИ), Sheet.Cells(КоличествоСтрок, СтолбецКодНСИ)).Value.Выгрузить();
МассивКодНСИ = МассивКодНСИ[0];
МассивЦена = Sheet.Range(Sheet.Cells(2,СтолбецЦена), Sheet.Cells(КоличествоСтрок, СтолбецЦена)).Value.Выгрузить();
МассивЦена = МассивЦена[0];
МассивВидЦены = Sheet.Range(Sheet.Cells(2,СтолбецВидыЦен), Sheet.Cells(КоличествоСтрок, СтолбецВидыЦен)).Value.Выгрузить();
МассивВидЦены = МассивВидЦены[0];
Счетчик = 0;
СоответствиеВидовЦен = СоответствиеВидовЦен();
Пока Счетчик <> КоличествоСтрок Цикл
НоваяСтрока = ТаблицаПрайса.Добавить();
НоваяСтрока.КодНСИ = МассивКодНСИ[Счетчик];
НоваяСтрока.Цена = МассивЦена[Счетчик];
НаименованиеВидаЦен = МассивВидЦены[Счетчик];
НоваяСтрока.ВидЦены = СоответствиеВидовЦен.Получить(НаименованиеВидаЦен);
Счетчик = Счетчик + 1;
КонецЦикла;
Функция СоответствиеВидовЦен()
СоответствиеВидовЦен = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыЦен.Ссылка КАК Ссылка,
| ВидыЦен.Наименование КАК Наименование
|ИЗ
| Справочник.ВидыЦен КАК ВидыЦен";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СоответствиеВидовЦен.Вставить(ВыборкаДетальныеЗаписи.Наименование, ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
Возврат СоответствиеВидовЦен;
КонецФункции
Ключевые достижения:
Предложенные методы оптимизации могут быть успешно применены в любых проектах, где требуется:
Такой подход позволяет значительно повысить производительность системы при минимальных изменениях в архитектуре решения.