Имя: Пароль:
1C
1С v8
xBase никуда не спишит.
0 greenif
 
19.10.12
14:46
xBase v7.7 vs xBase 8.2
Портировал обработку выгрузки номенклатуры с самописной конфы v7.7
На аналогичную самописную конфу v 8.2

Данные в справочниках одни и теже, импортированы в 8.2 с 7.7
Структура справочников отличается не существенно.

На 7.7 обработка проходит за 17 секунд.
На 8.2 после длительных оптимизаций удалось добиться 2 минуты 9 секунд.
Анализ производительности показал, что 79% времени уходит на присвоения первого поля записи DBF

dbf.Kod = Номенклатура.Код;

причем не важно какое поле ставить первым: Код, Наименование или артикул.

Игры с свойством dbf.АвтоСохранение результата не принесли.

Подскажите есть ли вариант оптимизации.
Вариант использовать что-то кроме DBF не подходит из-за ограничений софта с другой стороны.

Спасибо.
1 Лефмихалыч
 
19.10.12
14:48
(0) выбери данные запросом. Обращение к реквизитам ссылки через точку - это запрос. В итоге у тебя запросы в цикле происходят
2 Reset
 
19.10.12
14:53
+1
"причем не важно какое поле ставить" - подтверждение тому
3 orefkov
 
19.10.12
14:59
(0) Время уходит не на присвоение поля, а на чтение реквизитов элемента справочника. Выбирай все нужное запросом.
4 greenif
 
19.10.12
15:10
Ну вроде так и делаю:

Запрос = Новый Запрос;
Запрос.Текст =
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка,
   |    Номенклатура.Штрихкоды.(
   |        Штрихкод
   |    )
   |ИЗ
   |    Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |    Номенклатура.ПометкаУдаления = ЛОЖЬ
   |    И Номенклатура.ЭтоГруппа     = ЛОЖЬ
   |    И Номенклатура.НеВыгружать   = ЛОЖЬ";                
   
   
Выборка = Запрос.Выполнить().Выбрать();
   
   
Пока Выборка.Следующий() Цикл
   Номенклатура = Выборка.Ссылка;


   ВыборкаШК = Выборка.Штрихкоды.Выбрать();
   Пока ВыборкаШК.Следующий() Цикл
       Попытка
           dbf.Добавить();
       Исключение
           Возврат Ложь;
       КонецПопытки;
   
       dbf.Kod     = Номенклатура.Код;
       dbf.Artikul = Номенклатура.Артикул;
       dbf.Name    = Номенклатура.Наименование;
       dbf.BarCode = ВыборкаШК.Штрихкод;

   КонецЦикла;
5 ttk
 
19.10.12
15:15
ВЫБРАТЬ
   |    Номенклатура.Ссылка,
   |    Номенклатура.Код,
и т.д.
6 greenif
 
19.10.12
15:18
Понял, спасибо.