Медленная переброска номенклатуры.

Новая тема
"Уважаемый ALL!

Вознокла проблема, перебраски номенклатуры из БЭСТ-ПРО в 1С Педприятие (Торговля +Склад версия 9.2). Написал обработку по созданию новой карточки в справочнике номенклатура. Процесс переброски 34000 записе занял 1ч. 45 мин. Такая скорость подходит. А когда добал ко всему этому еще и 4 цены то процесс затянулся более чем на 10 часов. :o( А это никуда не годится.

Как можно сделать добавление цен более быстрым.



Далее представлен кос самой процедуры:



Процедура ДобавитьНом(арт,наим,полн,сгтд,сстр, отдел,еи,ц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)

Быстрый переход