В стране ничего не изменилось с правления Януковича, чиновники и государственные группировки как грабили страну так и грабят,бизнес отжимают, пример тому одна из крупнейших сетей АЗС "БРСМ". В медиа контролируемой депутатами и чиновниками ни слова об этом, зато куча новостей о России и другой по сути неважно информации ,например о повышении минимальной зарплаты. Какая разница какая минимальная зарплата ,если благодаря включению этого решения просто включат типографский станок и напечатают вал денег и доллар станет по 50 или 60? Тарифы тоже любят обсуждать, стоимость газа в долларах достаточно стабильна ,создайте условия что бы я мог заработать в долларах больше и меня не будут беспокоить платежи в объеме 50 - 100 долларов. Информацию о бегстве проворовавшегося чиновника пишут только когда он уже за границей, пока он в Украине никаких мер не принимается. Вокруг популизм, замыливание глаз и воровство. Судя по ситуации или будет вторая революция ,или Россия добъется своего, просто дост на 100 долларов больше нам чем предлагает существующая власть.
четверг, 1 декабря 2016 г.
понедельник, 26 сентября 2016 г.
Быстрая запись в справочники 1с Предприятие
Приветсвую! Обычная скорость записи элементов около 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;
КонецЕсли;
Иначе
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
НачатьТранзакцию();
спрТовар.ВыбратьЭлементы();
Пока спрТовар.ПолучитьЭлемент() = 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;
КонецЕсли;
Иначе
ВызватьИсключение;
КонецЕсли;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Подписаться на:
Сообщения (Atom)