Приветсвую! Обычная скорость записи элементов около 150-200 записей в секунду, ОЧЕНЬ медленно! Для записи в справочники могу посоветовать 2 режима, первый подходит только для DBF формата базы данных и выглядит вот так:
НачатьТранзакцию();
спрТовар.ВыбратьЭлементы();
Пока спрТовар.ПолучитьЭлемент() = 1 Цикл
спрТовар.Удалить(1);
КонецЦикла;
сч = 0;
Пока спрТовар.ПолучитьЭлемент() = 1 Цикл
сч = сч + 1;
спрТовар.Новый();
спрТовар.Наименование = СокрЛП();
спрТовар.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();
Второй метод использовать компоненту 1c++, 50000 элементов в секунду, ускорение в 100 раз:
Процедура УдалитьТовар();
Recordset = СоздатьОбъект("ODBCRecordset");
текстСКЛ = "DELETE FROM $справочник.Товар;";
Recordset.ВыполнитьСкалярный(текстСКЛ);
КонецПроцедуры
Процедура ВыполнитьЗапрос(Запрос,Текст = "")
Перем Рез;
Если ПустаяСтрока(Текст)=1 Тогда
Рез=Запрос.Выполнить();
Иначе
Рез=Запрос.Выполнить(Текст);
КонецЕсли;
Если Рез=0 Тогда
ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
КонецЕсли;
КонецПроцедуры
Процедура ПодготовитьЗапрос(Запрос,Текст)
Если Запрос.Подготовить(Текст)=0 Тогда
ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьПараметр(Запрос,Тип,Длина,Точность)
Если Запрос.ДобПараметр(1,Тип,Длина,Точность)=0 Тогда
ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
КонецЕсли;
КонецПроцедуры
Процедура СозданиеЭлементовПоНовому()
Запрос=СоздатьОбъект("ODBCRecordset");
БлокировкаТовары=СоздатьОбъект("SQLLock");
БлокировкаТовары.УстановитьТипОбъекта("Справочник","Товар");
БлокировкаТовары.УстановитьТаймаут(10);
ФлагУдачи=0;
Пока ФлагУдачи=0 Цикл
Попытка
ВыполнитьЗапрос(Запрос,"begin tran");
ПодготовитьЗапрос(Запрос,"insert $Справочник.Товар values(?ID, ' 0 ', ?Код, ?Наименование, 2, 0, 0, '')");
ДобавитьПараметр(Запрос, 14, 9, 0);
ДобавитьПараметр(Запрос, 14, 6, 0);
ДобавитьПараметр(Запрос, 14, 100, 0);
Для Тек=1 По 50000 Цикл
Запрос.УстПараметр("ID",БлокировкаТовары.НовыйИД());
Запрос.УстПараметр("КодС",Тек);
Запрос.УстПараметр("НаименованиеС",СокрЛП(Тек));
ВыполнитьЗапрос(Запрос);
КонецЦикла;
ВыполнитьЗапрос(Запрос,"if @@trancount > 0 commit tran");
ФлагУдачи=1;
Исключение
Запрос.Выполнить("if @@trancount > 0 rollback tran");
Если ОписаниеОшибки()="LockTimeoutExpired" Тогда
Если Вопрос("Неудалось заблокировать справочник Товары.
|Повторить попытку?","ОК+Отмена")="Отмена" Тогда
ФлагУдачи=2;
КонецЕсли;
Иначе
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Вот контактные данные г-на Бенджамина, адрес электронной почты, lfdsloans@outlook.com. / Или WhatsApp 1 989-394-3740, который помог мне с займом в 90 000,00 евро, чтобы начать свой бизнес, и я очень благодарен, мне было очень тяжело, пытаясь найти способ, как мать-одиночка, вещи не были легкими со мной, но с помощью мистера Бенджамина улыбнулся мне в лицо, когда я смотрю, как растет и развивается мой бизнес. Я знаю, вы можете удивиться, почему я ставлю такие вещи здесь, но я действительно должен выразить свою благодарность, чтобы любой, кто ищет финансовая помощь или преодоление трудностей с этим бизнесом или желание запустить бизнес-проект могут позаботиться об этом и надеяться на выход из затруднений. Спасибо.
ОтветитьУдалить