|
Можно ли ускорить выполнение процедуры | ☑ | ||
---|---|---|---|---|
0
DeMi4
24.11.11
✎
15:15
|
ДБФ=Новый ("XBase");
ДБФ.ОткрытьФайл(НовоеИмяФайла); Если ДБФ.Открыта()=Ложь Тогда Сообщить("Файл не открыт"); КонецЕсли; НЗ=1; Пока НЗ<=ДБФ.КоличествоЗаписей() Цикл ДБФ.Перейти(НЗ); Для Каждого Строка Из Объект.Строки Цикл Если СокрЛП(ДБФ.code)=Строка.Код Тогда Если ДБФ.sum<0 Тогда Строка.Сумма=(-1)*ДБФ.sum; Иначе Строка.Сумма=ДБФ.sum; КонецЕсли; Если Лев(ДБФ.code,1)="1" ИЛИ Лев(ДБФ.code,1)="5" Тогда Строка.Сумма=ДБФ.sum; КонецЕсли; Строка.Количество=ДБФ.cnt; КонецЕсли; КонецЦикла; НЗ=НЗ+1; КонецЦикла; ДБФ.ЗакрытьФайл(); На 7 аналогичный код летает в разы быстрее. Выполнение происходит на сервере. |
|||
1
aleks-id
24.11.11
✎
15:16
|
ипическая сила. руки бы отломать
|
|||
2
DeMi4
24.11.11
✎
15:16
|
Ну вместо обламывания рук. Подскажите как надо.
|
|||
3
ДенисЧ
24.11.11
✎
15:16
|
А зачем делать Перейти() вместо Следующая()?
|
|||
4
aleks-id
24.11.11
✎
15:17
|
(3) не оттуда начал. зачем цикл в цикле?
|
|||
5
aleks-id
24.11.11
✎
15:17
|
(2) запросом!
|
|||
6
Ненавижу 1С
гуру
24.11.11
✎
15:18
|
вместо
Для Каждого Строка Из Объект.Строки Цикл Если СокрЛП(ДБФ.code)=Строка.Код Тогда напиши Строка = Объект.Строки.Найти(ДБФ.code,"Код"); |
|||
7
aleks-id
24.11.11
✎
15:18
|
(6) вот молодец какой, а? лучше бы лекцию ему про джойны прочел :)
|
|||
8
Ненавижу 1С
гуру
24.11.11
✎
15:20
|
(7) лучше про NULL и Неопределено ))
|
|||
9
aleks-id
24.11.11
✎
15:22
|
(8) его неокрепшая клюшечная психика и тонкая душевная организация не вынесут такого надругательства и выпадут в БСОД )
|
|||
10
vmv
24.11.11
✎
15:22
|
ДБФ.Перейти(НЗ); лишенее
Пока ДБФ.Следующая()Цикл классика обхода дбф при отсутсвии индексного файла |
|||
11
aleks-id
24.11.11
✎
15:23
|
вобщем так. (0) бери запросом данные из своей дбф. помещай их в ТЗ. дальше соединяй с этой ТЗ Объект.Строки. профит!
|
|||
12
vmv
24.11.11
✎
15:26
|
внутренний цикл тоже лажа, зачем обходить все строки тч документа, если у вас есть четкое условие отбора нужных строк. Надо так
мСтрокиОбработат = Объект.Строки.Найти("Код", СокрЛП(ДБФ.code)); Для Каждого Строка Из мСтрокиОбработат Цикл Если ДБФ.sum<0 Тогда Строка.Сумма=(-1)*ДБФ.sum; Иначе Строка.Сумма=ДБФ.sum; КонецЕсли; Если Лев(ДБФ.code,1)="1" ИЛИ Лев(ДБФ.code,1)="5" Тогда Строка.Сумма=ДБФ.sum; КонецЕсли; Строка.Количество=ДБФ.cnt; КонецЦикла; |
|||
13
vmv
24.11.11
✎
15:29
|
(11) чепуха не тот случай, тормоза у него потому что он обходит все строки всех объектов, а можно пролетать ненужные если мСтрокиОбработат.Количество() = 0
|
|||
14
vmv
24.11.11
✎
15:32
|
ну и сами условия во вонутреннем цикле неоптимальны, я бы сделал иначеесли и в первые ветки условий выставил наиболее вероятные условия модификации суммы.
ета все - тема себя исчерпала |
|||
15
DeMi4
24.11.11
✎
15:35
|
В этом dbf еще 490 строк
|
|||
16
DeMi4
24.11.11
✎
15:39
|
Метод объекта не обнаружен (Найти)
Строка=Объект.Строки.Найти(ДБФ.code,"Код"); |
|||
17
vmv
24.11.11
✎
15:47
|
(16) что есть коллекция "Строки" у вашего объекта?
табличная часть? тогда там другой метод - я даю правильное направление мысли, а для точной прописи методов есть СП, потрудитесь открыть и уточнить |
|||
18
vmv
24.11.11
✎
15:48
|
и параметры метода тоже уточните, там все просто и если вы сделаете это самостятельно, а не тупо слижете код, то станете зубром, почти как я)
|
|||
19
vmv
24.11.11
✎
15:51
|
и последние искать нужно не строку, а массив строк - потом по нему крутить внутренний цикл без анализа строки на допустимость ее обработки)
ета все - дальнейшая детализация и оптимизация - это протирка конделябра, 1С-ки этим не занимаются, увы |
|||
20
aleks-id
24.11.11
✎
16:19
|
>>станете зубром, почти как я
да уж. в цикле обходить 490 строк это сила. а если в следующем файле будет 49 000 строк? |
|||
21
DeMi4
24.11.11
✎
16:22
|
Ну а если не циклом
|
|||
22
aleks-id
24.11.11
✎
16:23
|
(21) см (11)
|
|||
23
DeMi4
24.11.11
✎
16:25
|
Запросом данные из DBF это вообще возможно
|
|||
24
hhhh
24.11.11
✎
16:26
|
(23) спасибо.
|
|||
25
vmv
24.11.11
✎
18:52
|
(20) задача была поставлена так - как оптимизировать имеющийся у автора код, что я и предложил.
Менять подход к решению задачи автор не требовал и на сей счет я не распостранялся особо, але) |
|||
26
vmv
24.11.11
✎
18:53
|
(23) можно в 8.2 через внешние источники и драйвер визуал фохпро, но это уже совсем другая история и совсем другой код - меньше и быстрее)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |