Имя: Пароль:
1C
 
Внутреннний алгоритм поиска значения в ТЗ
Ø
0 MarryJane
 
28.12.05
11:55
Может кто подскажет как организован алгоритм поиска элемента в ТЗ
ТЗ.НайтиЗначение(Значение,СТр,Колонка).
Просто возник вопрос сейчас выгружается в ТЗ 5000 строк. Если эта выгрузка дойдет до 12000 строк, увеличится ли время поиска по ТЗ
1 Alexaha
 
28.12.05
11:57
0. это легко проверить, но скорее всего увеличится
2 MarryJane
 
28.12.05
11:57
Забыл добавить в 1С 7.7
3 banda
 
28.12.05
11:58
увеличиться, но в каком степени
можно проверить только на практике
4 КонецЦикла
 
28.12.05
11:58
К сожалению, время поиска, допустим числового значения, зависит от того, какое оно "по счету", т.е. в какой строке ТЗ находится
5 АЛьФ
 
28.12.05
11:59
1С++. Объект ИндексированнаяТаблица.
6 Денис2
 
28.12.05
12:00
скорость поиска - О(n), где n - число строк в таблице.
7 NS
 
28.12.05
12:00
Да, увеличится. В 2.4 раза.
Поиск в ТЗ идёт перебором строк.
При количестве строк большем, чем 2500 - лучше хранить ТЗ отсортированной по колонке, и пользоваться бинарным поиском.
А вообще - быстрее использовать XBase индекированный, либо любые индексированные внешние средства.
8 Денис2
 
28.12.05
12:02
(5) Которую до сей поры не рекомендуется в production code использовать :-)
9 MarryJane
 
28.12.05
12:04
Могу добавить выгружается табличная часть Документа
в таблице существуют реквизиты Справочник и числовые значения.
Поиск осуществяется по реквизиту справочник.
10 АЛьФ
 
28.12.05
12:07
2(8) Хм... "до сей поры"?... Сколько ей от роду? Месяц или два?
11 MarryJane
 
28.12.05
12:08
А можно по подробнее про бинарный поиск по таблице
12 Денис2
 
28.12.05
12:09
(10) Не знаю :-) Я о её существовании узнал неделю назад :-)
13 АЛьФ
 
28.12.05
12:11
2(12) Вот видишь... А люди уже во всю используют ее в живых базах.
14 Денис2
 
28.12.05
12:12
(11) Алгоритм двоичного поиска знаешь? Нет???
ТОгда сначала Кнута читать...
15 Денис2
 
28.12.05
12:14
(13) дык это не я придумал :-) Это на сайте 1спп написано :-) Или предлагаешь не верить тому, что там пишуть? :=)
16 MarryJane
 
28.12.05
12:14
А вот попутно вопрос. Сейчас справочник товаров насчитывает около 7000 записей, если увеличатся до 100000. Что произойдет со справочником (т.е. как он быстро он будет открыватся и как быстро будет осуществлятся поиск по какому нить реквизиту)
17 АЛьФ
 
28.12.05
12:16
2(15) Я о том, что не надо этого бояться. И о том, что слова "до сей поры" здесть неуместны, т.к. "поры" еще очень мало прошло :)
18 Денис2
 
28.12.05
12:17
(16) Смотря как он открывается и как осуществляется поиск по реквизиту...
(17) "И ты прав" (с) :-)
19 КонецЦикла
 
28.12.05
12:19
2(16) Нормально все будет... там индексы имеются
20 MarryJane
 
28.12.05
12:20
Так где можно почитать про бинарный поиск для 1С 7.7
21 Vladis
 
28.12.05
12:20
(16) Намек. У реквизита справочника есть такие "галки" как "сортировка" и "отбор по реквизиту" злоупотреблять не советуют.
22 MarryJane
 
28.12.05
12:22
А где можно почитать про 1С++
23 Денис2
 
28.12.05
12:23
(20 повторяю. "бинарный поиск для 1С 7.7" _ничем_ не отличается от бинарного поиска по любому массиву.
Вкратце.
ТЗ сортируется по искомой колонке.
берем элемент из середины (тз.количествоСТрок()/2) таблицы. сравниваем.
Если искомый элемент меньше взятого, то идём в первую половину, если больше - во вторую.
повторяем до нахождения или пока тзИскомая.количествоСтрок() <=2
24 Денис2
 
28.12.05
12:25
(22) www.1cpp.ru , itland.ru/forum/index.php?showforum=8
25 Сли то
 
28.12.05
12:26
(23) это не совсем бинарный поиск - это метод половинного деления
Бинарный уть подругому, но суть таже
26 NS
 
28.12.05
12:28
ТЗ.Сортировать("РеквизитПоиска+");
в цикле -
нач=1;
кон=ТЗ.КоличествоСтрок();
нашли=0;
пока нач<=кон цикл
  сред=цел(нач+кон)/2;
  зн=ТЗ.ПолучитьЗначение(сред,"РеквизитПоиска");
  Если зн=РеквизитПоиска Тогда
      нашли=сред;
  Иначеесли зн>РеквизитПоиска Тогда
      кон=сред-1;
  Иначе // зн<....
      нач=сред+1;
  Конецесли;
КонецЦикла;
27 artbear
 
28.12.05
12:28
Очень рекомендую 1С++ с ее объектом "ИндексированнаяТаблица".
Выдержка из доки http://www.1cpp.ru/docum/IndexedTable.html
Аналог встроенного типа "ТаблицаЗначений", дополненный возможностью создавать и использовать индексы над таблицей. Индексы строятся в виде двоичных поисковых деревьев, таким образом получаем затраты на поиск O(log2(N)), тогда как в стандартном типе "ТаблицаЗначений" поиск осуществляется перебором строк, и следовательно затраты на поиск O(N).
Индекс может быть двух типов:
по всем строкам таблицы;
по строкам с уникальными значениями ключа. Строки с повторяющимися значениями ключа будут проигнорированы, и в операции перебора строк, суммирования, свёртки, выгрузки, загрузки не попадут.
Использование индексов даёт и другие преимущества, кроме ускорения поиска:
возможность поиска по нескольким значениям (по составному ключу);
наличие нескольких индексов для одной таблицы, независимые выборки для каждого индекса;
поиск по условиям "больше либо равно", "меньше либо равно";
построение индекса только по уникальным значениям даёт возможность получить список уникальных ключей без свёртывания таблицы;
свёртка по существующему индексу - при этом не теряется время на построение временного индекса;
динамическая фильтрация строк;
суммирование и свёртка по динамическому фильтру.
ЗЫ работает вполне успешно, я уже несколько недель (пару месяцев) использую в боевых базах и разработках. Практически на нее молюсь.
Об обычной ТЗ начал потихоньку забывать ;-)
28 NS
 
28.12.05
12:30
ТЗ.Сортировать("РеквизитПоиска+");
в цикле -
нач=1;
кон=ТЗ.КоличествоСтрок();
нашли=0;
пока нач<=кон цикл
  сред=цел(нач+кон)/2;
  зн=ТЗ.ПолучитьЗначение(сред,"РеквизитПоиска");
  Если зн=РеквизитПоиска Тогда
      нашли=сред;
      прервать;
  Иначеесли зн>РеквизитПоиска Тогда
      кон=сред-1;
  Иначе // зн<....
      нач=сред+1;
  Конецесли;
КонецЦикла;
29 MarryJane
 
28.12.05
12:30
Как можно сравнить элемент меньше он или больше если это справочник.
Ведь сортировка Колонки в ТЗ (если это справочник) осуществляется по алфовиту
30 vclim
 
28.12.05
12:30
Вкратце про бинарный поиск... это свой алгоритм писать?
31 Дурочка 1С
 
28.12.05
12:32
>> Просто возник вопрос сейчас выгружается в ТЗ 5000 строк.
 
А можно поподробней? Откуда выгружается? Кто автор технологии?
32 Денис2
 
28.12.05
12:33
(29) а это уже задача программиста : ввести операцию сравнения над справочниками :-) Можно сделать колонку Код, можно сортировать и сравнивать по внутреннему значению...
(25) покажи разницу.
33 MarryJane
 
28.12.05
12:44
Блин спасибо большое кто принял участие в обсуждении.
34 artbear
 
28.12.05
12:45
- Доктор, почему меня все игнорируют?
- Следующий ;-)
ЗЫ почитайте пост (27) и забудьте про встроенную ТЗ с ее глюками и тормозами.
35 zzz
 
28.12.05
12:48
2(34) не всем и не всегда возможно подключать ВК (1с++). Да ещё без гарантий работоспособости.
36 MarryJane
 
28.12.05
12:51
artbear Можно ли сбросить пример кода с ипользованием объекта "ИндексированнаяТаблица
 
37 MarryJane
 
28.12.05
12:56
artbear mail zas@shintorg.by
38 АЛьФ
 
28.12.05
12:58
2(35) А сам движок 1С с гарантией работоспособности идет?
39 zzz
 
28.12.05
13:01
2(38) нет. Но по поводу движка можно обратиться к франчу или другому спецу, а если вставить ВК, то это ещё и знать надо.
Пример:
приехал к клиенту, поставил 1с++ написал код с применением её возможностей, взял деньги, уехал.
через некоторое время у них в определённой ситуации вылезет глюк и всё рухнет или просто потеряет работоспособность.
они даже не догадаются обновить 1с++. в которой возможно этот баг исправлен уже будет.
Факт - работа выполнена, деньги получены, но не работает.
Плохая будет ситуация.
40 АЛьФ
 
28.12.05
13:04
2(39) Плохой пример. Клиент так же не знает что ему надо к франчу обратиться, если движок глючит (да чем тут франч может помочь?).
41 zzz
 
28.12.05
13:05
2(40) Цель? Доказать мне что без 1с++ нельзя? Зачем?
42 АЛьФ
 
28.12.05
13:12
2(41) Совсем нет. Цель - доказать, что фраза "гарантии работоспособности" не имеет смысла в данном контексте. И отрицать возможности применения какого-либо инструмента только из-за того, что ты не понимаешь как оно все работает - глупо.
Или ты считаешь, что движок 1С разрабатывают какие-то супер-пупер профессионалы, которым разработчики внешних компонент даже в подметки не годятся?
43 zzz
 
28.12.05
13:18
2(42) если к глюкам 1С добавить глюки 1с++, то вероятность критической ошибки увеличится. Глюки 1С в большинстве своём изучены, да и релизов у них = 25, глюки 1с++ неизвестны (мне) и в каждом релизе (которых много) я могу получить разные проблемы.
Если я буду вести проект своими руками или в конце передавать нормальному челу - я буду использовать 1с++, иначе я предпочту "медленней, но без ВК".
44 Дурочка 1С
 
28.12.05
13:18
(42) Твои цели известны ... Давай ссылку на свои поделки и закончим дискуссию ...
45 АЛьФ
 
28.12.05
13:22
2(43) Твое мнение понятно. Непонятен только смысл в запугивании других людей (по сценарию "ВК - Вселенское Зло").
2(44) У меня нет поделок.
46 zzz
 
28.12.05
13:26
2(45) не считаю фразу "не всем и не всегда возможно подключать ВК" запугиванием,
также как и "без гарантий работоспособости" (смысл которой я подробно изложил в 43)
 
Кстати существует ещё всякие напряги с безопасностью в больших фирмах. Неоднократно сталкивался с тем что ВК просто так не подключишь - приходится обосновывать полезность, давать гарантии что "она не сотрёт базу и не испортит данные".
47 АЛьФ
 
28.12.05
13:38
2(46) Соглашусь, что внешние компоненты не для людей, которые занимаются мелкими доработками типовых.
48 jbond
 
28.12.05
13:58
(46) - у меня 1С++ пока ничего не стирал.
Зы. Разробтки OpenSoure гораздо более надежные (взять тот же Линукс) и найденные ошибки мгновенно исправляются.
49 Учусь
 
28.12.05
14:36
удаление ифномации без вских ВК
http://itland.ru/forum/index.php?showtopic=12181