![]() |
![]() |
![]() |
|
Поиск по наименованию только среди групп справочника | ☑ | ||
---|---|---|---|---|
0
Beduin
03.09.09
✎
13:03
|
Как найти группу по наименованию, не перебирая все элементы.
Выбирать нужно только среди групп, так как среди элементов возможны одинаковые наименования с группой. |
|||
1
miksa
03.09.09
✎
13:05
|
ЭтоГруппа()
|
|||
2
Sadovnikov
03.09.09
✎
13:07
|
Select
ID [Группа $Справочник.ИмяСправочника] From $Справочник.ИмяСправочника спр Where спр.DESCR = 'ЧегоИщем' And спр.IsFolder = 1 |
|||
3
Beduin
03.09.09
✎
13:07
|
(1) В справочнике может быть до 2000 элементов, если я каждый раз буду организовывать поиск и проверять каждый на группу, то долго получается. Нужно что то вроде НайтиПоНаименованию только по группам, а не по всем элементам.
|
|||
4
Beduin
03.09.09
✎
13:07
|
(2) А средствами встроенного языка похоже никак?
|
|||
5
Sadovnikov
03.09.09
✎
13:08
|
(4) а это и есть средства встроенного языка.
|
|||
6
Beduin
03.09.09
✎
13:09
|
(5) Вы уверены, что это для семерки работает?
|
|||
7
miksa
03.09.09
✎
13:10
|
(6) Ну с компонентой 1С++ заработает..
|
|||
8
Sadovnikov
03.09.09
✎
13:11
|
(6) Абсолютно уверен.
Помним только, что в 1С есть механизм внешних компонент, который расширяет встроенный язык. В данном случае этим занимается внешняя компонента 1С++. |
|||
9
Дядя Васька
03.09.09
✎
13:11
|
(5) На селезневке признали 1С++ штатными возможностями? :)
|
|||
10
Гефест
03.09.09
✎
13:12
|
(9) кто их спрашивает? нам тут виднее
|
|||
11
Beduin
03.09.09
✎
13:12
|
(8) Это уже не средства встроенного языка.
Просто база удаленно находится, если им я еще и компоненту тута буду бросать. Неохота просто. |
|||
12
Sadovnikov
03.09.09
✎
13:12
|
(9) Я не знаю, что там знают или не знают на Селезневке. Но точно уверен, что внешние компоненты - абсолютно щтатное средство 1С. Даже книжечка такая есть. При чем, книжечка выпущена 1С-ом.
|
|||
13
Дядя Васька
03.09.09
✎
13:12
|
(0) Пройдись один раз по всему справочнику, свали группы в ТЗ, да там и ищи, делов-то...
|
|||
14
Beduin
03.09.09
✎
13:13
|
(13) У меня справочник каждый раз разный. Это обмен.
|
|||
15
Beduin
03.09.09
✎
13:13
|
(12) Бред.
|
|||
16
Дядя Васька
03.09.09
✎
13:14
|
(14) Ну и что? Один раз в начале обмена, доли секунды займет.
|
|||
17
Sadovnikov
03.09.09
✎
13:14
|
(11) "Это уже не средства встроенного языка" - это с чего вдруг? Именно средства. Именно встроееного языка. Расширенного при помощи ВК.
И вообще - Вам шашечки или ехать? Хотим скорости ли "использовать только те методы языка, которые описаны на страницах с 73 по 146 описания встроенного языка"? |
|||
18
Дядя Васька
03.09.09
✎
13:14
|
+(16) Однократный перебор это не долго, даже если там 20000 элементов, а не 2000
|
|||
19
Sadovnikov
03.09.09
✎
13:14
|
(15) Где именно бред? Можно по подробнее?
|
|||
20
Beduin
03.09.09
✎
13:15
|
(17) Я завтра еще пару компонент напишу, и буду ими пользоваться. А потом у них база рухнет. И кто за это будет отвечать. Разработчик компонент. Средства платформы хотя бы проверены уже целым поколением программеров.
|
|||
21
Beduin
03.09.09
✎
13:16
|
(19) Бред про то что 1С официально утвердила 1С++.
|
|||
22
Дядя Васька
03.09.09
✎
13:16
|
(17) Штатна сама возможность подключения ВК, а все что делается с ее помощью уже за пределами типовых возможностей.
|
|||
23
Sadovnikov
03.09.09
✎
13:16
|
(20) Ты считаешь, что 1С++ не "проверены уже целым поколением программеров"? Ошибаешься...
"А потом у них база рухнет" - пиши ВК так, чтобы база не рушилась. |
|||
24
Sadovnikov
03.09.09
✎
13:17
|
(21) А где я такой бред написал?
(22) Почему это? Или подключение ВК ради подключения? |
|||
25
Mikeware
03.09.09
✎
13:17
|
(22) "За пределами типовых возможностей" - совсем не значит, что "не штатными" :-)
(21) 1986? |
|||
26
Дядя Васька
03.09.09
✎
13:18
|
(23) На самом деле не стоит овчинка выделки, если это разовый заказ, а не на фикси.
(24) Подключение ВК в рамках языка 1С. Все что она делает за рамками. |
|||
27
Sadovnikov
03.09.09
✎
13:20
|
(26)
1. Так автор скорости хотел. 2. Не соглашусь... ВК расширяют язык 1С. Но, раз это все равно язык 1С, то все оно находится в рамках этого языка. Во я сказал... |
|||
28
Beduin
03.09.09
✎
13:21
|
Просто еще раз убедился что платформу семерки разрабатывали странные люди.(
|
|||
29
Mikeware
03.09.09
✎
13:21
|
(26) Работа с торговым оборудованием, фискальными регистраторами, сканерами ШК - вне закона?
|
|||
30
Sadovnikov
03.09.09
✎
13:22
|
(28) Э нет... Странные люди пытаются программировать в семерке. Что мы и видим в данной ветке. Извини, но на твоем примере...
А те, кто разрабатывал, они не странные. Они сделали, что смогли... Жаль только, что смогли не очень много... |
|||
31
Beduin
03.09.09
✎
13:24
|
(30) Что там мочь, добавить в метод НайтиПоНаименованию параметр поиска среди групп. Просто отбор дополнительный по еще одному полю. И все. Делается за 30 секунд.
|
|||
32
Sadovnikov
03.09.09
✎
13:25
|
(31) Давай шире смотреть на вещи? Что им мешало изначально дать доступ к базе, используя прямые запросы? Сколько бы это проблем решило...
|
|||
33
Дядя Васька
03.09.09
✎
13:26
|
(29) А я сказал что 1С++ вне закона? Работа с торговым оборудованием, фискальными регистраторами, сканерами ШК реализована за рамками 1С, на совершенно других языках, в самой эске только пара управляющих методов появляется.
Просто любая ВК теоретически понижает стабильность системы. И цеплять ВК чтобы найти группы в справочнике, это жесть товарищи :) |
|||
34
Sadovnikov
03.09.09
✎
13:27
|
(33) Так и сама 1С написана "на совершенно другом язеке". Не будем ее запускать?
"И цеплять ВК чтобы найти группы в справочнике, это жесть товарищи " - это не жэсть, это желание, что бы все быстро работало. С минимальными затратами со стороны программиста. |
|||
35
Mikeware
03.09.09
✎
13:30
|
(33) "пара методов" - допустимо, а "десяток методов" - уже нет? :-)
"Просто любая ВК теоретически понижает стабильность системы." - GUI тоже понижает стабильность системы. И прочая, прочая, прочая... |
|||
36
Дядя Васька
03.09.09
✎
13:30
|
(34) По сравнению с поиском по ТЗ ощутимой на глаз разницы не будет.
|
|||
37
Beduin
03.09.09
✎
13:31
|
(34) Есть восьмерка, нормальная платформа. Непонимаю людей которые цепляются за семерку(смесь шлака и внешних компонент.
|
|||
38
Дядя Васька
03.09.09
✎
13:32
|
Я всего лишь о том что ВК надо пользовать там, где они реально нужны. Если по каждой мелочи новую dll'ку цеплять, результат понятно какой будет. Рано или поздно одна из них начнет валить эску, причем так, что концов не найдешь, потому как зоопарк...
|
|||
39
Mikeware
03.09.09
✎
13:32
|
(37) Нечо на платформу кивать, если руки кривые...
|
|||
40
miksa
03.09.09
✎
13:33
|
компонентоСрач устроили? ))
(37) Не устраивает семерка - не программь на ней, не берись за проекты, связанные с 7.7, у тебя есть право выбора.. А вообще сколько у тебя времени уходит на перебор справочника всего с 2000 элементами? Из-за чего весь сыр-бор? |
|||
41
Beduin
03.09.09
✎
13:33
|
(38) Она без внешних компонент еле дышит.
|
|||
42
Дядя Васька
03.09.09
✎
13:34
|
(41) Может все-таки руки? )
|
|||
43
Mikeware
03.09.09
✎
13:34
|
(38) для одной функции цеплять библиотеку, конечно, излишество. Хотя - у того же софтпойнта есть компонента только с одним методом. И причем этот метод исправляет ошибку даже не 1С, а сиквельника. Ичо?
|
|||
44
Beduin
03.09.09
✎
13:34
|
(40) Немного, но это сути не меняет. Справочник, просто объект по сути, зачем эти кривые методы там насоздовали, вот что не пойму.
|
|||
45
Волесвет
03.09.09
✎
13:36
|
ну вы млин даете найти по наименованию потом проверяем группа или нет если нет продолжаем поиск....
44 поста + вольные размышления на тему 7 и 8 ... мдя |
|||
46
Дядя Васька
03.09.09
✎
13:37
|
(43) Если ошибка критичная, почему бы и нет. А по сабжу вполне штатное и быстрое решение на поверхности. Просто пример из жизни, напоролся как-то на то, как прямой запрос вешал эску, причем всех пользователей, причем при определенном наборе условий, полдня убил пока нашел почему висим. И оказалось, что этот запрос использован всего лишь для того чтобы выбрать подчиненные документы. Убрал, добавил штатные три строчки, висеть не стало, и на скорость не повлияло.
|
|||
47
miksa
03.09.09
✎
13:38
|
(45) Дык в первом посту и был ответ. Автору важно другое узнать, почему так криво написана семерка :)
|
|||
48
Дядя Васька
03.09.09
✎
13:38
|
(45) Интересно как ты его продолжишь...
|
|||
49
Mikeware
03.09.09
✎
13:39
|
(46) Это лишь вопрос о соотношении радиуса кривизны рук с радиусом кривизны извилин конкретного разработчика..
|
|||
50
trad
03.09.09
✎
13:41
|
(12) Справедливости ради нужно отметить, что книжка "Технология создания ВК" от 1С существует, но та методика расширения языка, которая применена в 1с++ не описана в этой книжке.
Если что, то технология в 1с++ на мой взгляд лучше. |
|||
51
Дядя Васька
03.09.09
✎
13:41
|
(49) Да не, там реально для того чтобы написать некривой прямой (эк завернул-то:) надо было всерьез разбираться со скульными блокировками. Вероятность накосячить велика. Штатно же банально ВыбратьПодчиненныеДокументы(), и шансы влепить косяк равны нулю.
|
|||
52
Beduin
03.09.09
✎
13:42
|
Нарушена синхронизация между 1С:Предприятием и Отладчиком
Теперь это выдает) |
|||
53
Волесвет
03.09.09
✎
13:44
|
(48) ???
в цикле все дело мутиться пока там что то равно о мы и крутим а как только нашли группу 1 |
|||
54
Волесвет
03.09.09
✎
13:45
|
мля счас спросят а если ее нет что делать))))))))))))
|
|||
55
miksa
03.09.09
✎
13:46
|
(53) Ну дак это и есть перебор всего справочника по всем 2000 элементам, чего автору не хотелось делать..
|
|||
56
Волесвет
03.09.09
✎
13:46
|
(55)?? поиск по наименованию перебор всего справочника???
|
|||
57
Дядя Васька
03.09.09
✎
13:47
|
(53) Ну накидай примерчик-то :) НайтиПоНаименованию() только первый ищет. Или ты многократный перебор предлагаешь?
|
|||
58
antoneus
03.09.09
✎
13:48
|
а чо, изменить наименование + незафиксированная транзакция...
|
|||
59
Волесвет
03.09.09
✎
13:48
|
(57) а нафига?? тут кто то про 7 нелестно говорил ... после такого помогать западло))
|
|||
60
Дядя Васька
03.09.09
✎
13:48
|
(58) А не изврат?
|
|||
61
antoneus
03.09.09
✎
13:49
|
(60) изврат, конечно. но в принципе-то возможно, хехе
|
|||
62
Дядя Васька
03.09.09
✎
13:49
|
(61) теоретически можно и штаны через голову надеть, только неудобно :)
|
|||
63
Beduin
03.09.09
✎
13:55
|
(52) Друзья если у вас будет такая ошибка, перезагрузитесь и она на время исчезает.
|
|||
64
Ёпрст
гуру
03.09.09
✎
14:05
|
(0) НайтиПоНаименованию + ЭтоГруппа() найдёт все группы...
|
|||
65
VladZ
01.10.09
✎
11:51
|
(0) А че, запросом нельзя?
|
|||
66
Beduin
01.10.09
✎
11:53
|
(65) Пример запроса в студию.
|
|||
67
Ёпрст
гуру
01.10.09
✎
11:55
|
(65) прямым - можно, обычным - нет.
|
|||
68
NS
01.10.09
✎
11:58
|
Обмельчал народ, уже не знает как штатными средствами перебрать только группы...
Всё очень просто, если "группы сверху" |
|||
69
Ёпрст
гуру
01.10.09
✎
12:00
|
(68) Ну, не все же знают про параметры метода ВыбратьЭлементы()
|
|||
70
Ёпрст
гуру
01.10.09
✎
12:01
|
Хотя, (64) тоже найдет всё и быстро.
|
|||
71
NS
01.10.09
✎
12:05
|
Ну, отмененная транзакция это не очень хорошо.
|
|||
72
NS
01.10.09
✎
12:05
|
А вообще самое правильное - реквизит с отбором, только для групп.
|
|||
73
dk
01.10.09
✎
12:05
|
(67) а подумать? )))
|
|||
74
Ёпрст
гуру
01.10.09
✎
12:06
|
(71) это точно, тем более, если у кого-то открыта форма элемента, который "удалить" пытаемся в поиске..
:) |
|||
75
NS
01.10.09
✎
12:06
|
(73) Запрос изначально перебирает только ЭЛЕМЕНТЫ справочника. Поэтому группа в которой нет элементов ни в один запрос попасть не может.
|
|||
76
Ёпрст
гуру
01.10.09
✎
12:07
|
(73) Ты не умничай, а напиши обычный запрос, который отберёт ВСЕ группы.
|
|||
77
dk
01.10.09
✎
12:07
|
хотя пустые группы (без элементов) не найдет ((( |
|||
78
Ёпрст
гуру
01.10.09
✎
12:08
|
(77) мда..
|
|||
79
dk
01.10.09
✎
12:08
|
(76) все не обещаю ))
|
|||
80
Фокусник
01.10.09
✎
12:13
|
(57) удалять, продолжать поиск, а потом отменять транзакцию ;)
|
|||
81
Beduin
01.10.09
✎
12:17
|
(69) И чем мне поможет параметр в методе ВыбратьЭлементы()
Вы хотя бы думайте что пишите. |
|||
82
Ёпрст
гуру
01.10.09
✎
12:18
|
(81) Это ответ на (68) ..
А вам ответ - (64). |
|||
83
Beduin
01.10.09
✎
12:19
|
(82) Он остановится на первом элементе в этом методе.
Ладно просто укажите код который ищет. Просто интересно очень. |
|||
84
Ёпрст
гуру
01.10.09
✎
12:23
|
(83) Наслаждайся:
НачатьТранзакцию(); Пока Спр.НайтиПоНаименованию(<тут сам>)=1 Цикл Если Спр.ЭтоГруппа()=1 Тогда //помещаем найденный в СЗ КонецЕсли; Спр.Удалить(); КонецЦикла; ОтменитьТранзакцию() |
|||
85
NS
01.10.09
✎
12:26
|
Процедура Сформировать()
т=_GetPerformanceCounter(); спр=создатьобъект("справочник.Номенклатура"); ТЗ=создатьобъект("ТаблицаЗначений"); Тз.Новаяколонка("Гр","справочник.Номенклатура"); ТЗ.новаястрока(); ТЗ.Гр=получитьпустоезначение("Справочник.Номенклатура"); счэл=1; текэл=1; пока текэл<=счэл цикл спр.использоватьродителя(ТЗ.Получитьзначение(текэл,"Гр")); спр.выбратьэлементы(1); пока спр.Получитьэлемент(0)=1 цикл Если спр.этогруппа()=0 тогда прервать; Конецесли; счэл=счэл+1; ТЗ.Новаястрока(); ТЗ.гр=спр.текущийэлемент(); Конеццикла; текэл=текэл+1; конеццикла; // на этом получение групп завершено // Далее сверим скорость сообщить(""+(_GetPerformanceCounter()-т)+"мс."); сообщить(ТЗ.Количествострок()); т=_GetPerformanceCounter(); счгрупп=1; //(пустая) спр=создатьобъект("справочник.Номенклатура"); спр.выбратьэлементы(); пока спр.получитьэлемент()=1 цикл Если спр.этогруппа()=1 тогда счгрупп=счгрупп+1; конецесли; конеццикла; сообщить(""+(_GetPerformanceCounter()-т)+"мс."); сообщить(счгрупп); ТЗ.Выбратьстроку(); КонецПроцедуры |
|||
86
NS
01.10.09
✎
12:36
|
(85) --> (81)
|
|||
87
Beduin
01.10.09
✎
12:37
|
(84) Тебе любой нормальный спец за этот код голову оторвет.
|
|||
88
Ёпрст
гуру
01.10.09
✎
12:43
|
(87) Вот только не надо тут хню полную нести, ладно?
|
|||
89
Beduin
01.10.09
✎
12:48
|
(88) Зайди сюда
OFF: В шоке от УправлениеТорговлей |
|||
90
1Сергей
01.10.09
✎
12:53
|
(89) Выложи свою фотку, плиз. Чисто в глаза твои посмотреть
|
|||
91
Ёпрст
гуру
01.10.09
✎
13:21
|
(89) Зашел, дальше что?
|
|||
92
aka MIK
01.10.09
✎
14:54
|
(84) Классный код, без шуток
|
|||
93
Ёпрст
гуру
01.10.09
✎
14:56
|
(92) ну вот видишь ли, тебе теперь "любой нормальный спец за этот код голову оторвет"
:)) |
|||
94
Valery
01.10.09
✎
15:11
|
(84) собственно без вариантов. при поиске , в случае одинакового наименования элементов, всегда на группе будет позиционироваться.
|
|||
95
Ёпрст
гуру
01.10.09
✎
15:12
|
(94) чего?..
|
|||
96
ДенисЧ
01.10.09
✎
15:13
|
(94) Урожай?
|
|||
97
Ёпрст
гуру
01.10.09
✎
15:13
|
+95 вообще-то код в (84) найдет все элементы (и группы) с одним наименованием...
если что. |
|||
98
Valery
01.10.09
✎
15:20
|
(97) про то и толкую, что первой будет группа с одинаковым наименованием.
|
|||
99
Beduin
01.10.09
✎
15:23
|
(98) Как можно этот код еще и обсуждать. Пипец.
|
|||
100
ДенисЧ
01.10.09
✎
15:24
|
(98) Отсыпь, а?
|
|||
101
Ёпрст
гуру
01.10.09
✎
15:33
|
(99) Пипец в чем ?
Аргументы есть, или так, сказать больше нечего?.. |
|||
102
m g r
01.10.09
✎
15:36
|
(99) ты сам бы что-нибудь посоветовал дельное, потом бы других обсуждал .
а что такого , за что можно руки отрывать-то ? |
|||
103
m g r
01.10.09
✎
15:37
|
+ к (102) в коде в (84)
|
|||
104
Beduin
01.10.09
✎
15:38
|
(102) Он же в этом поиске удаляет элементы. Да в транзакции, но это все равно жесть. А если это сделают сразу несколько пользователей?!
Все. Закройте ветку. Смысла уже нет писать. |
|||
105
Ёпрст
гуру
01.10.09
✎
15:39
|
(104)Аргументов нет. Слив засчитан.
|
|||
106
Asirius
01.10.09
✎
15:40
|
(101) (102) Пипец в том, что подумайте что происходит с таблицами на физическом уровне и как это отражается на производительности... А если это в цикле? Полный перебор элементов может даже выигрышней смотреться
|
|||
107
Ёпрст
гуру
01.10.09
✎
15:41
|
(106) Еще один ?
Ответ - ничего не происходит. |
|||
108
Ёпрст
гуру
01.10.09
✎
15:41
|
+107 и на производительности это никак не отражается вообще.
|
|||
109
ДенисЧ
01.10.09
✎
15:42
|
(104) Отсутствие знаний зафиксировано документально...
|
|||
110
Asirius
01.10.09
✎
15:42
|
(107) А как по твоему реализуется механизм транзакций?
|
|||
111
Valery
01.10.09
✎
15:47
|
Я так понял в (0) сущестуют группы и элемены с одинаковым наименванием. И надо отделить группы от элементов? Н-р 10 элементов "Вася" и среди них 1 Группа.
НайтиПоНаименованию("Вася") найдет группу "Вася", если "Вася" будет не группой, то группы "Вася" нет в справочнике вообще. |
|||
112
Beduin
01.10.09
✎
15:47
|
(109)ЧИТАЙ!
Транзакция, выполняемая одним пользователем может мешать выполнению транзакций другими пользователями. Таким образом, важно соизмерять получающееся ускорение от применения транзакций с возможными побочными эффектами. Другими словами, возможно, что ускорение таково, что операция начинает выполняться столь быстро, что можно пренебречь влиянием на других пользователей (например, ожидание секунду – другую), а может это будет приводить к конфликтам — все зависит от конкретного алгоритма конфигурации. |
|||
113
Beduin
01.10.09
✎
15:49
|
(111) Проблема в том что данный метод позиционируется на первый найденный элемент, неважно группа это или наименование.
|
|||
114
Valery
01.10.09
✎
15:50
|
(113) всегда будет группа если она есть
|
|||
115
NS
01.10.09
✎
15:50
|
(112) Ты не в курсе что транзакция запускается и при каждом проведении?
А вышеприведеная транзакция отработает за миллисекунды, и есно никому повредить не сможет. Если другой пользователь захочет сделать тоже самое - то по методу начатьтранзакцию() система будет ждать завершение транзакций начатой другим пользователем. |
|||
116
ДенисЧ
01.10.09
✎
15:51
|
(112) головой думай, а не книги цитировай.
(114) Врёшь. |
|||
117
Valery
01.10.09
✎
15:52
|
(116) а ты проверь
|
|||
118
ДенисЧ
01.10.09
✎
15:53
|
(117) Враньё проверять не буду
|
|||
119
Asirius
01.10.09
✎
15:55
|
(117) Я проверял для схожей задачи обмена, на SQL мне упорно находился элемент при существовании такой же группы
|
|||
120
Beduin
01.10.09
✎
15:55
|
Тут вменяемые люди есть. Уже не знаю как объяснять.
Цитирую из ЖКК Возможность использования транзакций в языке должна применяться только в тех программных модулях, которые выполняют запись изменений в информационной базе (в справочниках, константах, документах). Их не следует использовать в алгоритмах формирования движений документов. Транзакции также не стоит использовать при одиночных записях. Типичный пример когда следует использовать транзакции — это процедура, которая будет во всех элементах справочника менять некоторый параметр Если идет "ЗАПИСЬ ИЗМЕНЕНИЙ" Дети надоели уже. |
|||
121
Beduin
01.10.09
✎
15:57
|
Вы же блокируете к чертям всю базу. Волшебник спаси меня!
|
|||
122
Ёпрст
гуру
01.10.09
✎
16:01
|
(120) Читай (115) много думай..
|
|||
123
Asirius
01.10.09
✎
16:02
|
+(121) Даже если на блокировку закрыть глаза, чтение и запись - совершенно разные задачи по производительности, ибо индексы. И использовать операции записи на задаче поиска, которая решается только чтением - явный ушерб производительности. Даже если в справочнике 1000000 элементов, прочитать и проиндексировать его один раз будет много быстрее, чем пытаться туда в цикле что-то писать
|
|||
124
Ёпрст
гуру
01.10.09
✎
16:04
|
(123) Болеем? там нет записи вообще. там в коде только чтение.
|
|||
125
Asirius
01.10.09
✎
16:06
|
(124) Там есть попытка туда что-то записать
Ты только представь - это надо во всех отборах и индексах сообразить, что теперь такого элемента нет и записать эту инфу во временной таблице, если это транзакция |
|||
126
Ёпрст
гуру
01.10.09
✎
16:10
|
(125) Ау... пока транзакция не зафиксирована - нет никакой записи. А транзакцию мы вообще отменяем.
НайтиПоНаименованию - самый быстрый метод в клюшках, не считая прямого запроса. Одинаковых наименований у вас там сколько ? Миллион ? Код в (84) - самый быстрый штатный метод. Единственный минус метода - открытая форма элемента справочника на редактирование в этот момент. Всё. |
|||
127
1Сергей
01.10.09
✎
16:11
|
(125) Я про sql знаю очень мало. Но даже я понимаю, что пока транзакция не зафиксирована ничего с БД не происходит
|
|||
128
trdm
01.10.09
✎
16:13
|
(6) у меня работает....
|
|||
129
trdm
01.10.09
✎
16:18
|
блин, опять гиково-падаванский холисрач.
не надоело? |
|||
130
Asirius
01.10.09
✎
16:23
|
(126)(127) с БД конечно ничего не происходит, но просчитывается инфа, что и куда нужно будет записать при фиксации транзакции. Вы хоть представте на уровне платформы, сколько это надо действий сделать (поддержать все индексы), по сравнению с обычным чтением.
|
|||
131
NS
01.10.09
✎
16:25
|
(130) Не придумывай сказки - просто замерь производительность.
Что рассказывать, если любой замер показывает что время выполнения миллисекунда? |
|||
132
NS
01.10.09
✎
16:26
|
или ты считаешь что платформа за эту миллисекунду получит такую усталость что дальше работать не сможет?
|
|||
133
Ochkarito
01.10.09
✎
16:28
|
(130) Проведение документа, гораздо больше времени займет чем (84)
Не стоит загоняться:) |
|||
134
Asirius
01.10.09
✎
16:51
|
(131) Написал тупой тест:
Функция ТранзакцияВЦикле() Спр = СоздатьОбъект("Справочник.Номенклатура"); Для К = 1 По 1000 Цикл НачатьТранзакцию(); Спр.НайтиПоНаименованию("Капуста квашеная",0,1); Спр.Удалить(1); ОтменитьТранзакцию() КонецЦикла; КонецФункции Функция ЧтениеВЦикле() Спр = СоздатьОбъект("Справочник.Номенклатура"); Для К =1 По 1000 Цикл Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если Спр.Наименование = "Капуста квашеная" Тогда Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецФункции //******************************************* Процедура Сформировать() ТранзакцияВЦикле(); ЧтениеВЦикле(); КонецПроцедуры Результаты замера производительности D:\1.ERT 28 ЧтениеВЦикле(); 1 2.569409 77.75 D:\1.ERT 16 Пока Спр.ПолучитьЭлемент() = 1 Цикл 51000 2.186884 66.17 D:\1.ERT 27 ТранзакцияВЦикле(); 1 0.735521 22.26 D:\1.ERT 6 Спр.Удалить(1); 1000 0.596650 18.05 D:\1.ERT 17 Если Спр.Наименование = "Капуста квашеная" Тогда 51000 0.242766 7.35 D:\1.ERT 7 ОтменитьТранзакцию() 1000 0.074828 2.27 D:\1.ERT 5 Спр.НайтиПоНаименованию("Капуста квашеная",0,1); 1000 0.056778 1.72 D:\1.ERT 20 КонецЦикла; 50000 0.051376 1.56 D:\1.ERT 19 КонецЕсли; 50000 0.050969 1.54 D:\1.ERT 15 Спр.ВыбратьЭлементы(); 1000 0.031440 0.95 D:\1.ERT 8 КонецЦикла; 1000 0.003058 0.09 D:\1.ERT 21 КонецЦикла; 1000 0.002790 0.09 D:\1.ERT 3 Для К = 1 По 1000 Цикл 1001 0.002012 0.06 D:\1.ERT 4 НачатьТранзакцию(); 1000 0.002003 0.06 D:\1.ERT 14 Для К =1 По 1000 Цикл 1001 0.002000 0.06 D:\1.ERT 18 Прервать; 1000 0.001017 0.03 D:\1.ERT 1 Спр = СоздатьОбъект("Справочник.Номенклатура"); 1 0.000173 0.01 D:\1.ERT 12 Спр = СоздатьОбъект("Справочник.Номенклатура"); 1 0.000136 0.01 D:\1.ERT 9 КонецФункции 1 0.000003 0.00 D:\1.ERT 23 КонецФункции 1 0.000002 0.00 D:\1.ERT 29 КонецПроцедуры 1 0.000002 0.00 Видим что тупой перебор проигрывает в 3 раза Боюсь даже представить, во сколько раз уделает чтение в ТЗ один раз только групп, с последующим "неиндексированным" поиском по колонке... |
|||
135
Ёпрст
гуру
01.10.09
✎
17:07
|
(134) Какую то ты хню написал..
Нужно найти ВСЕ элементы с однинаковым наименованием.. запускай и рыдай: Спр = СоздатьОбъект("Справочник.Номенклатура"); Начало=_GetPerformanceCounter(); НачатьТранзакцию(); Пока Спр.НайтиПоНаименованию(Наим,0,1)=1 Цикл Сообщить(Спр.Код); Спр.Удалить(); КонецЦикла; ОтменитьТранзакцию(); Сообщить((_GetPerformanceCounter()-Начало),"i"); Начало=_GetPerformanceCounter(); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Если СокрЛП(Спр.Наименование) = СокрЛП(Наим) Тогда Сообщить(Спр.Код); КонецЕсли; КонецЦикла; Сообщить((_GetPerformanceCounter()-Начало),"i"); |
|||
136
NS
01.10.09
✎
17:17
|
(134) Зависит от Базы, под ДБФ скорей всего уделает.
во всяком случае для больших обработок и загрузок я всегда собирал группы в ТЗ кодом аналогичным (85) Но тест явно некорректный, у тебя до нахождения перебором проверяет всего 51 элемент справочника, а на практике на нормальных базах это будет в 1000 раз больше, и проиграет поиск не в три раза, а в три тысячи раз. |
|||
137
Asirius
01.10.09
✎
21:05
|
(136)
Тест наглядно показал, что последовательное применение НачатьТранзакцию() Удалить() ОтменитьТранзакцию() на маленьком справочнике в десятки раз медленее простой операции чтения (даже без запроса). Во сколько раз медленнее операция записи будет операции чтения на справочнике с большим количеством элементов, у которого куча отборов, и у которого есть еще и периодические реквизиты? |
|||
138
NS
01.10.09
✎
22:03
|
(137) Я не спорю что предложенный мной (на самом деле не мной) способ лучше удаления в транзакции. :) Но транзакция тоже имеет право на жизнь. Тем более если скорость будет получаться такая-же как и на твоем тесте (0.7 мс на удаление)
|
|||
139
orefkov
02.10.09
✎
00:03
|
Сколько страстей разгорелось из-за того факта, что в 1С почему-то сделали ВыбратьЭлементыПоРеквизиту, но для Наименования сделали только Найти.
А ведь самый лучший, оптимальный, быстрый, годный ответ был еще в (2). Идеально попадает в нужный индекс, никаких транзакций. Но нет же, объявили ересью, ибо в желто-красном евангелии от 1С нету подходящих заповедей! А я считаю, что "Мы не можем ждать милостей от природы. Взять их у нее - вот наша задача". Кодер ли я дрожащий или право имею? Тюк топориком - и взял что нужно. |
|||
140
Redka
02.10.09
✎
08:50
|
(99) Запомни этот ник "Ёпрст3" и никогда с ним не спорь. Тебе, видимо, он не по зубам.
|
|||
141
Sadovnikov
02.10.09
✎
08:56
|
Что-то дятлы по форуму расшумелись... Осеннее обострение?
|
|||
142
Guk
02.10.09
✎
09:04
|
ВыборГруппы, уже обсуждали?...
|
|||
143
Sadovnikov
02.10.09
✎
09:05
|
(142) Блиииннн... Что ж ты раньше-то не напомнил про этот универсальный метод???
|
|||
144
Ёпрст
гуру
02.10.09
✎
09:10
|
(139) Там много чего нет, однако во всех типовых конфах используется перебор объектов через метаданные, который "нигде" не описан.. Окромя пособия Пита.
:) |
|||
145
Beduin
02.10.09
✎
09:35
|
(144) Одно дело нетиповые методы, и совсеме другое во время поиска открывать транзакцию и удалять элементы. Имхо БРЕД!
|
|||
146
Sadovnikov
02.10.09
✎
09:35
|
(145) Обосновать можешь?
|
|||
147
Ёпрст
гуру
02.10.09
✎
09:35
|
(145) Товарищь, бред в чем ?
Аргументы есть, или так, поп-ить больше не о чем? |
|||
148
Beduin
02.10.09
✎
09:43
|
(146) Ладно Епрст еще мальчишка видимо. Но ты то, уже взрослый дядька должен понимать что происходит при удалении на физическом уровне табличек.
В момент удаления очищаются ссылки на элемент во всех таблицах, а это очень долгий процесс. К тому же транзакция блокирует действия основных пользователей. Тоесть удаления элемента мало того что небезопасно, так еще и затратно по времени. |
|||
149
ДенисЧ
02.10.09
✎
09:45
|
(148) "В момент удаления очищаются ссылки на элемент во всех таблицах" - не вэтой жизни, то есть не про 1с это.
|
|||
150
Sadovnikov
02.10.09
✎
09:46
|
(148) "Ладно Епрст еще мальчишка видимо" - во насмешил... Ёпрст - это гуру, до уровня которого еще учиться и учиться...
"В момент удаления очищаются ссылки на элемент во всех таблицах" - сходи плюнь в морду тому, кто тебе это сказал. И не верь больше таким словам. |
|||
151
Ёпрст
гуру
02.10.09
✎
09:47
|
(148) Деденька, зачем хню то постишь, не позорился бы..
|
|||
152
Beduin
02.10.09
✎
09:48
|
(150) (151) Ссылки действительно удаляются. С нарушением ссылочной целостности таблиц. Вот и все.
Думаете это не так? |
|||
153
ДенисЧ
02.10.09
✎
09:48
|
(152) Мы не думаем. Мы знаем.
|
|||
154
Beduin
02.10.09
✎
09:50
|
(150) Да, и если Епрст с кодом
НачатьТранзакцию(); Пока Спр.НайтиПоНаименованию(<тут сам>)=1 Цикл Если Спр.ЭтоГруппа()=1 Тогда //помещаем найденный в СЗ КонецЕсли; Спр.Удалить(); КонецЦикла; ОтменитьТранзакцию() ЭТО ГУРУ То мне от этого даже немного грустно. |
|||
155
Sadovnikov
02.10.09
✎
09:51
|
(154) Вполне нормальный код для нечастого (разового) использования.
|
|||
156
Sadovnikov
02.10.09
✎
09:51
|
(154) А вот твои, извиняюсь, знания несколько удручают...
А вот от этого: "Ссылки действительно удаляются. С нарушением ссылочной целостности таблиц" у меня вообще мозг сломался. |
|||
157
Guk
02.10.09
✎
09:58
|
(156) ну чо ты пристал? ну не знает человек ни как транзакция работает, ни как удаление в 1С происходит. ну с кем не бывает...
|
|||
158
Beduin
02.10.09
✎
10:03
|
(157) Какая разница где удалять. В транзакции или нет. Все равно на это требуется время. Но если на каждый поиск врубать транзакцию, то извините я бы таких прогеров гнал в три шеи.
Я не понимаю, вы вообще голову потеряли. Человек чтобы найти элемент удаляет похожие на него. Действительно одинесники это пипец, совсем мозг себе проели. |
|||
159
chelentano
02.10.09
✎
10:08
|
(158) то есть, ты себя к "одинесникам" не относишь?
|
|||
160
Guk
02.10.09
✎
10:10
|
(158) время разумеется тратится на все. даже на изучение языка 1С и его особенностей. жаль что ты им пренебрег...
|
|||
161
Beduin
02.10.09
✎
10:18
|
(159) (160) Вы мне ответьте просто на мой вопрос и все.
Во время поиска удалять похожие элементы? Это нормально?!! |
|||
162
Guk
02.10.09
✎
10:20
|
(161) Да. В тарнзакции, абсолютно нормально. Потому что пока транзакция не зафиксирована, они никуда не удалюятся, ни физически, ни формально. Не говоря уже о том, что физически они не удаляются и после фиксации...
|
|||
163
NS
02.10.09
✎
10:31
|
(158) Если удосужишься почитать ветку, и найдешь замер производительности, то увидишь что на 1000 удалений (поисков групп) тратится 0.7 секунд, по 0.7 мс. на один поиск. О каком времени идет речь?
"Какая разница где удалять. В транзакции или нет. Все равно на это требуется время. Но если на каждый поиск врубать транзакцию, то извините я бы таких прогеров гнал в три шеи." Ты просто невминяем. Читай пост (134) |
|||
164
Эльниньо
02.10.09
✎
10:54
|
Тут по телеку комика показали. Бывший программист. Некоторые точно не тем делом заняты.
Ёпрсту респект! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |