Имя: Пароль:
1C
1С v8
DBF грузится очень долго.
0 Lex_Liven
 
01.11.12
11:00
Есть DBF файл с некоторой информацией. Нужно загрузить его в 1С (Тонкий клиент). В файле что-то около 3000 строк и 20 полей. Есть как текстовые, так и числовые. Вес - около одного мегабайта.
На слабой машине этот файл может грузиться до 40 минут. Как можно это ускорить?
Загрузка идет в реквизит формы типа "ТаблицаЗначений". Другие форматы хранения данных в файле тоже рассматриваются.
1 Lex_Liven
 
01.11.12
11:01
+(0) Кстати, в реквизит загружаются не все записи, а по некоторым условиям. Остальные пропускаются.
2 Нуф-Нуф
 
01.11.12
11:02
где и каким образом происходит чтение файла?
3 Maxus43
 
01.11.12
11:02
код показывай
4 Lex_Liven
 
01.11.12
11:06
(2) загрузка на клиенте.
код:
БД_ОчередиПлатежей.Новый XBASE;
БД_ОчередиПлатежей.ОткрытьФайл(ПутьКФайлуБД);
БД_ОчередиПлатежей.Первая();
Пока Не БД_ОчередиПлатежей.ВКонце() Цикл
 Если <условие> Тогда
   СтрокаПлатежа=Объект.ТабОчередиПлатежей.Добавить();
   СтрокаПлатежа.СтатусПлатежа=БД_ОчередиПлатежей.PAY_STATUS;
   //Остальные поля...
 КонецЕсли;
БД_ОчередиПлатежей.Следующая();
КонецЦикла;
5 Lex_Liven
 
01.11.12
11:06
(4) поправка первой строки
БД_ОчередиПлатежей = Новый XBASE;
6 Maxus43
 
01.11.12
11:08
что говорит замер производительности? где больше тормозит?
7 Lex_Liven
 
01.11.12
11:08
Файл одинокий. Я правильно понимаю, что он не индексирован?
Если это поможет, то как сделать индексирование?
8 Нуф-Нуф
 
01.11.12
11:08
хм. как минимум лучше передавать файл на сервер. и там же заюзать внешние источники данных
9 Maxus43
 
01.11.12
11:10
(7) при загрузке на индексы пофиг, ты ще не ищеш в файле ничего
10 Леха Дум
 
01.11.12
11:15
файл на сервер отправь
11 Lex_Liven
 
01.11.12
11:15
(6) Как ни странно, но на строчке
ИначеЕсли ((НачалоДня(ДатаСервераТК()) - Дата(БД_ОчередиПлатежей.PAY_DATE)) / 86400) > ПериодХраненияПлатежей Тогда

ДатаСервераТК - это обращение к функции:
&НаСервереБезКонтекста
Функция ДатаСервераТК()
 Возврат ТекущаяДата();
КонецФункции //ДатаСервераТК
12 Maxus43
 
01.11.12
11:17
(11) да, на серваке заполняй ТЧ
13 Lex_Liven
 
01.11.12
11:18
(8)(10)(12) А без этого никак?
14 Maxus43
 
01.11.12
11:20
(13) замер тебе сказал где тупит, на сервер гоняет постоянно. Измени условие, 1 раз получи дату, а не в цикле в сервер едь, очевидно же
15 Морозов Александр
 
01.11.12
11:22
Получи один раз дату сервера...
16 Lex_Liven
 
01.11.12
11:22
Народ, пардон! Это ж надо так ступить!
Вынес до цикла
ДатаСравнения=НачалоДня(ДатаСервераТК());
и в проблемной строчке сделал
ИначеЕсли ((ДатаСравнения - Дата(БД_ОчередиПлатежей.PAY_DATE)) / 86400) > ПериодХраненияПлатежей Тогда


Все! Грузится моментально. Простите дурака. Спасибо, что ткнули носом в замер производительности.
17 Maxus43
 
01.11.12
11:23
тыкать носом в гамно это мы всегда пожалуста, обращайтесь