B
BBDragon
В программе необходимо подгружать dbf-файл, содержащий порядка 400 000 записей. Сам файл содержит более 30 полей, из них загружается 21. Загрузку запустил в 05.07.2010г. в 15-40 по московскому времени, до сих пор она не завершена. Хотелось бы как-то оптимизировать алгоритм с целью увеличения быстродействия.
Код:
Процедура ВыборФайла()
КаталогЗагрузки = "";
ФайлЗагрузки = "";
Если ФС.ВыбратьФайл(1, ФайлЗагрузки, КаталогЗагрузки, "Выберите файл", "*.dbf|*.dbf", , ) = 1 Тогда
ФайлЗагрузки = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
ИмФайл=СокрЛП(ФайлЗагрузки);
ДБФ = СоздатьОбъект("XBase");
ДБФ.ОткрытьФайл(ИмФайл,,1);
ДБФ.Первая();
СпрПац = СоздатьОбъект("Справочник.Пациенты");
Пока ДБФ.ВКонце() = 0 Цикл
Если (ДБФ.PR_IZM <> 2) Тогда // обрабатываем только неудаленные записи
СпрПац.Новый();
СпрПац.ФамилияПациента = СокрЛП(ДБФ.FAM);
СпрПац.ИмяПациента= СокрЛП(ДБФ.IM);
СпрПац.ОтчествоПациента= СокрЛП(ДБФ.OT);
Если СокрЛП(ДБФ.SEX)="1" Тогда
СпрПац.ПолПациента = "М"
Иначе СпрПац.ПолПациента = "Ж";
КонецЕсли;
СпрПац.ДатаРождения = СокрЛП(ДБФ.BIRTHDAY);
СпрПац.СерияНомерПолиса = СокрЛП(ДБФ.SERIES)+''+СокрЛП(ДБФ.NUMBER);
СпрПац.Регион = СокрЛП(ДБФ.REGION);
СпрПац.Район = СокрЛП(ДБФ.A_RN);
СпрПац.НасПункт = СокрЛП(ДБФ.A_NAS);
СпрПац.Улица = СокрЛП(ДБФ.A_STREET);
СпрПац.Дом = СокрЛП(ДБФ.A_DOM);
СпрПац.Корпус = СокрЛП(ДБФ.A_KORP);
СпрПац.Квартира = СокрЛП(ДБФ.A_KV);
СпрПац.Статус = СокрЛП(ДБФ.STATUS);
СпрПац.КодДокумента = СокрЛП(ДБФ.C_DOC);
СпрПац.СерияНомерДокумента = СокрЛП(ДБФ.SN_DOC);
СпрПац.РегионСтрахования = СокрЛП(ДБФ.REGIONS);
СпрПац.НомерДоговора = СокрЛП(ДБФ.N_DOG);
СпрПац.КодСМО = СокрЛП(ДБФ.KOD_SMO);
СпрПац.ДатаВыдачиПолиса = СокрЛП(ДБФ.DATE_VID);
ДР=СокрЛП(ДБФ.DATE_OUT);
ДатаСтрока = Формат(ДР, "ДДММГГГГ");
Если (ДатаГод(ДР)>1900) и (ДатаГод(ДР)<1950) Тогда // Загружена дата с 2001 по 2050 год
НоваяДата=Лев(ДатаСтрока,6) + "20" + Прав(ДатаСтрока,2);
Иначе НоваяДата = ДатаСтрока; //обычная дата XX века
КонецЕсли;
СпрПац.ДатаОкончанияПолиса = НоваяДата;
СпрПац.ДатаИзмененияПолиса = СокрЛП(ДБФ.DATE_IZM);
СпрПац.Записать();
СпрПолис = СоздатьОбъект("Справочник.ПолисыСтраховыхКомпаний");
СпрПолисСерияНомер=СокрЛП(ДБФ.SERIES)+' '+СокрЛП(ДБФ.NUMBER);
Если СпрПолис.НайтиПоНаименованию(СпрПолисСерияНомер)=0 тогда
СпрПолис.Новый();
СпрПолис.СерииПолисов=СокрЛ(ДБФ.SERIES);
СпрПолис.НачальныйНомерПолиса=СокрЛ(ДБФ.NUMBER);
СпрПолис.Наименование=СокрЛ(ДБФ.SERIES)+' '+СокрЛ(ДБФ.NUMBER);
СпрСтрах=СоздатьОбъект("Справочник.Контрагенты");
Если СпрСтрах.НайтиПоКоду(ДБФ.KOD_SMO)=0 тогда
СпрСтрах.Новый();
СпрСтрах.Код= СокрЛП(ДБФ.KOD_SMO);
СпрСтрах.Записать();
КонецЕсли;
СпрСтрахДок=СпрСтрах;
СпрПолис.СтраховаяКомпания=СпрСтрахДок.ТекущийЭлемент();
СпрПолис.Записать();
КонецЕсли;
ДБФ.Следующая();
КонецЕсли;
КонецЦикла;
Сообщить("Конец Загрузки");
ДБФ.ЗакрытьФайл();
КонецПроцедуры