Медленная переброска номенклатуры.
17.07.2003
21:36
#1
"Уважаемый ALL!
Вознокла проблема, перебраски номенклатуры из БЭСТ-ПРО в 1С Педприятие (Торговля +Склад версия 9.2). Написал обработку по созданию новой карточки в справочнике номенклатура. Процесс переброски 34000 записе занял 1ч. 45 мин. Такая скорость подходит. А когда добал ко всему этому еще и 4 цены то процесс затянулся более чем на 10 часов.
( А это никуда не годится.
Как можно сделать добавление цен более быстрым.
Далее представлен кос самой процедуры:
Процедура ДобавитьНом(арт,наим,полн,сгтд,сстр, отдел,еи,ц0,ц1,ц2,ц3);
//ДобавитьНом(наим, пнаим, арт, страна, сертификат, нгтд, гигсер, сербэст, оргсер, аос, регном, срокдейтв);
if (ном.НайтиПоКоду(арт,)=0) and (номрод.Найтипокоду(отдел,)=1) then
ном.Новый();
//******************************************************************************
ном.Родитель= номрод.ТекущийЭлемент();
ном.Код=арт;
ном.артикул=арт;
ном.наименование= наим;
Ном.ПолнНаименование = полн;
// Обработка ГТД
if сгтд <>'' then
if гтд.НайтиПоНаименованию(сгтд,,)=1 тогда
Ном.НомерГТД=гтд.ТекущийЭлемент()
else
гтд.Новый();
гтд.Наименование=сгтд;
гтд.Комментарий=сгтд;
гтд.Записать();
гтд.НайтиПоНаименованию(сгтд,,);
Ном.НомерГТД=гтд.ТекущийЭлемент();
endif;
endif;
// завершение обработки ГТД
// Страна происхождения
if сстр <>"""" then
if Оксм.НайтиПоНаименованию(сстр,,)=1 тогда
Ном.СтранаПроисхождения=Оксм.ТекущийЭлемент()
else
оксм.Новый();
// оксм.Код=кодстр;
оксм.Наименование=сстр;
оксм.Записать();
оксм.НайтиПоНаименованию(сстр,,);
Ном.СтранаПроисхождения=Оксм.ТекущийЭлемент();
endif;
endif;
// завершение обработки СтранаПроисхождения
ном.Записать();
//Базовая ЕИ
if (еи<>"""") and (Океи.НайтиПоНаименованию(еи,,)=1) then
// Сообщить(еи+"|"+Океи.код ,"i");
ЕдНом.Новый();
ЕдНом.Владелец=Ном.ТекущийЭлемент();
Едном.Океи=Океи.ТекущийЭлемент();
ЕдНом.Коэффициент=1;
Едном.Записать();
endif;
ном.БазоваяЕдиница=Едном.ТекущийЭлемент();
Ном.записать();
//цена0
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц0;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц0);
цена.Записать();
//цена1
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц1;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц1);
цена.Записать();
//цена2
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц2;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц2);
цена.Записать();
//цена3
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц3;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц3);
цена.Записать();
endif;
КонецПроцедуры
Буду очень благодарен за любые мысли и предложения по этомк поводу."
Вознокла проблема, перебраски номенклатуры из БЭСТ-ПРО в 1С Педприятие (Торговля +Склад версия 9.2). Написал обработку по созданию новой карточки в справочнике номенклатура. Процесс переброски 34000 записе занял 1ч. 45 мин. Такая скорость подходит. А когда добал ко всему этому еще и 4 цены то процесс затянулся более чем на 10 часов.
Как можно сделать добавление цен более быстрым.
Далее представлен кос самой процедуры:
Процедура ДобавитьНом(арт,наим,полн,сгтд,сстр, отдел,еи,ц0,ц1,ц2,ц3);
//ДобавитьНом(наим, пнаим, арт, страна, сертификат, нгтд, гигсер, сербэст, оргсер, аос, регном, срокдейтв);
if (ном.НайтиПоКоду(арт,)=0) and (номрод.Найтипокоду(отдел,)=1) then
ном.Новый();
//******************************************************************************
ном.Родитель= номрод.ТекущийЭлемент();
ном.Код=арт;
ном.артикул=арт;
ном.наименование= наим;
Ном.ПолнНаименование = полн;
// Обработка ГТД
if сгтд <>'' then
if гтд.НайтиПоНаименованию(сгтд,,)=1 тогда
Ном.НомерГТД=гтд.ТекущийЭлемент()
else
гтд.Новый();
гтд.Наименование=сгтд;
гтд.Комментарий=сгтд;
гтд.Записать();
гтд.НайтиПоНаименованию(сгтд,,);
Ном.НомерГТД=гтд.ТекущийЭлемент();
endif;
endif;
// завершение обработки ГТД
// Страна происхождения
if сстр <>"""" then
if Оксм.НайтиПоНаименованию(сстр,,)=1 тогда
Ном.СтранаПроисхождения=Оксм.ТекущийЭлемент()
else
оксм.Новый();
// оксм.Код=кодстр;
оксм.Наименование=сстр;
оксм.Записать();
оксм.НайтиПоНаименованию(сстр,,);
Ном.СтранаПроисхождения=Оксм.ТекущийЭлемент();
endif;
endif;
// завершение обработки СтранаПроисхождения
ном.Записать();
//Базовая ЕИ
if (еи<>"""") and (Океи.НайтиПоНаименованию(еи,,)=1) then
// Сообщить(еи+"|"+Океи.код ,"i");
ЕдНом.Новый();
ЕдНом.Владелец=Ном.ТекущийЭлемент();
Едном.Океи=Океи.ТекущийЭлемент();
ЕдНом.Коэффициент=1;
Едном.Записать();
endif;
ном.БазоваяЕдиница=Едном.ТекущийЭлемент();
Ном.записать();
//цена0
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц0;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц0);
цена.Записать();
//цена1
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц1;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц1);
цена.Записать();
//цена2
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц2;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц2);
цена.Записать();
//цена3
цена.Новый();
цена.Владелец=Ном.ТекущийЭлемент();
цена.валюта = рубль;
цена.процент = 0;
цена.ТипЦен = тц3;
цена.Записать();
цена.Единица.Установить(ТекущаяДата(),ном.БазоваяЕдиница);
Цена.цена.Установить(ТекущаяДата(),ц3);
цена.Записать();
endif;
КонецПроцедуры
Буду очень благодарен за любые мысли и предложения по этомк поводу."
18.07.2003
08:39
#2
Поставить процесс работы со справочникам в транзакцию:
НачатьТранзакцию()
..........
ЗафиксироватьТранзакцию()
НачатьТранзакцию()
..........
ЗафиксироватьТранзакцию()
18.07.2003
14:51
#3
"Как правильно использоватьтранзакции:
-Вставить НачатьТранзакцию() В начало процедуры , а ЗафиксироватьТранзакцию() в конце;
или
Обработку каждого справочника заключить в
НачатьТранзакцию()
..........
ЗафиксироватьТранзакцию()
Как правильно?
"
-Вставить НачатьТранзакцию() В начало процедуры , а ЗафиксироватьТранзакцию() в конце;
или
Обработку каждого справочника заключить в
НачатьТранзакцию()
..........
ЗафиксироватьТранзакцию()
Как правильно?
"
Читают тему
(гостей: 1)