|
v7: Как ускорить выполнение простой обработки? | ☑ | ||
---|---|---|---|---|
0
sysadminlk
01.09.12
✎
14:29
|
Таб = СоздатьОбъект("ТаблицаЗначений");
Таб.НоваяКолонка("Контр","Справочник.Контрагенты"); Таб.НоваяКолонка("Дата","Дата"); //формирую список дат на данного контрагента ТабДокум.ВыбратьСтроки(); Пока ТабДокум.ПолучитьСтроку() = 1 Цикл Если ТабДокум.Контр <> Контр Тогда Продолжить; КонецЕсли; Таб.НоваяСтрока(); Таб.Контр = ТабДокум.Контр; Таб.Дата = ТабДокум.Дата; КонецЦикла; Возврат Таб; ТабДокум около 60000 строк Функция вызывается 20000 раз Обработка по времени выполняется примерно 20000 секунд - это долго! Вопрос: как быстро выгрузить строки с именем контрагента из "ТабДокум" в таблицу "Таб"? |
|||
1
milan
01.09.12
✎
14:33
|
ТабДокум отсортируй по контрагенту, вроде и поиск есть по колонке, можно найти первую строку с этим контром
|
|||
2
Skylark
01.09.12
✎
14:38
|
Запрос.
Прямой запрос. |
|||
3
milan
01.09.12
✎
14:40
|
(2) для начала можно работу с тз освоить, а в этом случае не прямой запрос, а индексирванная таблица рулите
|
|||
4
Скользящий
01.09.12
✎
14:45
|
Запросом.
|
|||
5
sysadminlk
01.09.12
✎
14:45
|
(1) первую найду, а последнюю как вычислить?
|
|||
6
Wobland
01.09.12
✎
14:46
|
одно сравнение, два присваивания и НоваяСтрока() работают целую секунду? унылая семёрка!
|
|||
7
ЧеловекДуши
01.09.12
✎
14:46
|
Команда "ТабДокум.ВыбратьСтроки();" с большими объемами информации работает медленно :)
|
|||
8
ЧеловекДуши
01.09.12
✎
14:47
|
+ Давай лучше покажи полный код, а то по первым пяти буквам нам сложно дать рекомендации :)
|
|||
9
ЧеловекДуши
01.09.12
✎
14:47
|
(6)ТС - лукавит
|
|||
10
ЧеловекДуши
01.09.12
✎
14:48
|
(5)Сортировкой
ТЗ.Сортировать("Твой реквизит, Еще один, и т.д."); |
|||
11
Wobland
01.09.12
✎
14:49
|
>Функция вызывается 20000 раз
20 тысяч возвращённых ТЗ? что-то автор не то делает или говорит |
|||
12
Skylark
01.09.12
✎
14:49
|
(5) с первой строки выполняй свой цикл и условие, а как условие не сработает, то "Прервать"
|
|||
13
ЧеловекДуши
01.09.12
✎
14:51
|
+ если быть конкретней, то:
шш1 = 0; Если Тз.НайтиЗначение(ИскомоеЗначение,шш1,"Колонка где ищем")=1Тогда Пока шш1 <= Тз. КоличествоСтрок() Цикл //Тут проверяешь, на соответствие следующей строки //Тут выполняешь манипуляцию шш1 = шш1 +1; КонецЦикла; КонецЕсли; |
|||
14
andrewalexk
01.09.12
✎
14:54
|
:) как ТабДокум-то получил?
|
|||
15
Mikeware
01.09.12
✎
15:09
|
И откудова такие берутся?
|
|||
16
Mikeware
01.09.12
✎
15:10
|
пардон, увидел... и место проживания, и год рождения...
|
|||
17
sysadminlk
01.09.12
✎
15:21
|
(12) спасибо, вроде быстрее обрабатывает
|
|||
18
sysadminlk
01.09.12
✎
15:23
|
(11)
60000 документов 20000 контрагентов узнаю сколько документов на контрагента |
|||
19
Chai Nic
01.09.12
✎
15:23
|
Всё-таки 1с++ не зря придуман.. прямые запросы и индексированные таблицы - это ПРОСТО и ЭФФЕКТИВНО!
|
|||
20
Mikeware
01.09.12
✎
15:29
|
(19) Тут достаточно СП читать, даже без прямых запросов и ИТ
|
|||
21
Wobland
01.09.12
✎
15:32
|
(18) такие анальные боли ради того, чтобы узнать _количество_ документов по контрагенту?
|
|||
22
sysadminlk
01.09.12
✎
15:37
|
(21) как-то нужно найти постоянных клиентов компании
|
|||
23
Wobland
01.09.12
✎
15:39
|
(22) тут либо напильник гладкий, как зеркало, либо руки мастера, кривые как сабля. так и не сказал, что ты делаешь с 20 тысячами ТЗ
|
|||
24
sysadminlk
01.09.12
✎
15:40
|
//формирую список расходных на данного контрагента
ТабДокум.Сортировать("-Контр"); НомСтр = ""; НомКол = ""; Если ТабДокум.НайтиЗначение(Контр,НомСтр,НомКол) = 1 Тогда Для Сч=НомСтр По ТабДокум.КоличествоСтрок() Цикл ТабДокум.ПолучитьСтрокуПоНомеру(Сч); Если ТабДокум.Контр <> Контр Тогда Прервать; КонецЕсли; Таб.НоваяСтрока(); Таб.Контр = ТабДокум.Контр; Таб.Дата = ТабДокум.Дата; КонецЦикла; КонецЕсли; Вроде-бы быстрее стало, но не много. |
|||
25
ЧеловекДуши
01.09.12
✎
15:40
|
(24)Ха Ха... А вроде не пятница :)
|
|||
26
ЧеловекДуши
01.09.12
✎
15:42
|
+(24)Ты вроде нечего не понял... ДНК, неизлечим.
Обрати внимание на код в (13), он будет продуктивней... Но на самом деле тебе нужен банальный запрос по документам отгрузки с счетчиком :) + Наймите наконец программиста, не гоже сис-админу программировать :) |
|||
27
Wobland
01.09.12
✎
15:44
|
всё таки дело в кислоте, да? но всё равно семёрка - фекалия
|
|||
28
ЧеловекДуши
01.09.12
✎
15:44
|
+(24)Сори... код ты осознал... Но он тебе не нужен :)
|
|||
29
sysadminlk
01.09.12
✎
15:44
|
(23) в "ТабДокум" собрал даты нужных документов, получилась табличка 60327 строк с полями "дата", "контр"
есть справочник контрагентов там около 20000 контрагентов выбираю элементы из справочника и проверяю сколько записей на данный элемент в таблице "ТабДокум" |
|||
30
Chai Nic
01.09.12
✎
15:45
|
(24) Хочешь чтобы было намного быстрее - используй 1с++. Штатные методы последовательной выборки данных не быстрые.
(25) Думаю, замена цикла "Для" на цикл "Пока" особо не ускорит выполнение. (27) Семерку не ругайте - если в восьмерке выбирать данные аналогичными методами, будет еще медленнее! ) |
|||
31
ЧеловекДуши
01.09.12
✎
15:45
|
(29)Нафига тебе все в ТЗ?
Тебе нудно только знать, сколько раз тот или иной клиент грузился за определенный период :) |
|||
32
ЧеловекДуши
01.09.12
✎
15:46
|
(30)Дело не в цикле, дело в том, что бы сразу найти нужный элемент и идти по циклу дальше.
|
|||
33
sysadminlk
01.09.12
✎
15:47
|
(31) не только покупал, там еще есть условия, бух итоги не подойдут
|
|||
34
sysadminlk
01.09.12
✎
15:47
|
Поэтому список в ТЗ выгрузил
|
|||
35
Wobland
01.09.12
✎
15:49
|
(30) нет нужды делать аналогичные методы при наличии нормальных. я тут на семёрку пересаживаюсь.. непроходящее ощущение чего-то противоестественного
|
|||
36
ЧеловекДуши
01.09.12
✎
15:49
|
(33)Какие бух итоги?
Ты вообще про какую БД ведешь речь? Бухгалтерия, Торговля и склад, или еще что? |
|||
37
Chai Nic
01.09.12
✎
15:50
|
(35) Для семерки есть 1с++ уже много лет. Там нормальные методы.
|
|||
38
ЧеловекДуши
01.09.12
✎
15:50
|
(35)Помнится самые странные ощущения были пересесть с прямых SQL запросов на запросы от 1С :)
|
|||
39
Mikeware
01.09.12
✎
15:50
|
(35) да, собственно, и при переходе на снеговика такое же ощущение. Дело привычки...
а (0) просто решает задачу ректальным образом... |
|||
40
Chai Nic
01.09.12
✎
15:51
|
(35) На семерочные "черные запросы" пересаживаться не надо.. их надо не замечать, как будто не существует. Спокойнее жить будет.)
|
|||
41
ЧеловекДуши
01.09.12
✎
15:51
|
(37)1С++ по сути интерфейсная часть для взаимодействия SQL и 1С на понятном языке для программиста.
Плюс туда напихали доп. функционала и неплохого :) |
|||
42
Wobland
01.09.12
✎
15:52
|
кстати, раз уж тут все собрались, простой вопрос. есть справочник с реквизитом типа Документ. задача: вывести номера документов в ТабДок. делал запрос (ну тот который ненормальный), он мне так и не показал. ТекущийДокумент есть, а НомерДок нет. что не так?
|
|||
43
Wobland
01.09.12
✎
15:53
|
(42) НомерДок тоже есть, но " 1631". и ДатаДок пустая
|
|||
44
Mikeware
01.09.12
✎
15:54
|
(40) именно так.
|
|||
45
ЧеловекДуши
01.09.12
✎
15:54
|
(43)Номер документа это строка, что ты хочешь от неё?
Даже если в конфигураторе стоит "Номер типа Число", он все ровно будет типа строка :) |
|||
46
Mikeware
01.09.12
✎
15:54
|
(42) ненормальных запросов я не знаю :-)
|
|||
47
Chai Nic
01.09.12
✎
15:54
|
(41) И этот допфункционал удачно дополняет убогие штатные объекты.. причем хорошо с ними взаимодействуя - та же индексированная таблица может обмениваться данными с обычной. Плюс нормальный человеческий язык запросов вместо одинесовского недоразумения..
|
|||
48
ЧеловекДуши
01.09.12
✎
15:55
|
+(43)Для визуализации документа лучше использовать функцию "глПредставлениеДокумента()", оно не даром почти в каждой конфе :)
|
|||
49
ЧеловекДуши
01.09.12
✎
15:56
|
(47)Это точно :)
|
|||
50
Wobland
01.09.12
✎
15:57
|
(45) беру ТекущийДокумент, вывожу в ТабДок - "Реализация БР00000001 от какой-то даты". а результат запроса - хрень какая-то. открываю по расшифровке документ - вижу тот же БР0001й номер
|
|||
51
Wobland
01.09.12
✎
15:57
|
(46) в документации какие описаны? с функциями и переменными
|
|||
52
GreyK
01.09.12
✎
15:59
|
(0) У тебя ошибка здесь:
//формирую список дат на данного контрагента Ей, ей не вру :) |
|||
53
ЧеловекДуши
01.09.12
✎
15:59
|
(50)Нормально. НЕ понял, что куда, но так оно и есть :)
|
|||
54
Mikeware
01.09.12
✎
16:00
|
(51) идиотские. которые калечат психику
|
|||
55
Wobland
01.09.12
✎
16:01
|
(53) плин, пальцы мои косноязычны. можешь привести пример запроса, вынимающего номера документов из реквизитов элементов справочника типа Документ?
(54) отлично сказано! ;) |
|||
56
Mikeware
01.09.12
✎
16:02
|
(55) сделай прямым и не мучайся...
|
|||
57
Wobland
01.09.12
✎
16:04
|
(56) если б ещё уметь.. задача закрыта (в цикле выборки проверку воткнул), возвращаться к ней практического смысла нет, вопрос носит чисто познавательный характер
|
|||
58
ЧеловекДуши
01.09.12
✎
16:04
|
(55) Ты надеюсь это делал не на запросе от 1С? :)
|
|||
59
Wobland
01.09.12
✎
16:05
|
(58) именно в тот самом идиотском запросе
|
|||
60
Wobland
01.09.12
✎
16:05
|
+(59) даже конструктором
|
|||
61
ЧеловекДуши
01.09.12
✎
16:06
|
(59)А чем тебя не устроил простая ссылка из реквизита (типа документ)?
Зачем было разворачивать еще и до номеров документов? |
|||
62
Wobland
01.09.12
✎
16:07
|
(61) чтоб условие на номер сделать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |