![]() |
![]() |
![]() |
|
Как можно без перебора ТЗ найти строки где текст содержит нужную подстроку | ☑ | ||
---|---|---|---|---|
0
SeiOkami
05.02.13
✎
19:46
|
Не знаю как верно выразиться... Это в продолжение темы v8: Разбить ТаблицуЗначений на две: одна с положительными числами, а другая с отриц.
Как можно найти строки ТЗ, в которых текстовое значение содержит указанную подстроку? К примеру у меня такие строки в ТЗ Хлеб, "акфы", 900 Молоко, "выкф", 100 Мед, "ссвы", 845 Мне нужно найти строки, содержащие "акф". В результате должна быть первая строка Можно ли это реализовать без переборов? (а то приходится цикл в цикле цикла делать :) ). Как будет наиболее красиво и верно. Задача вообще такая: нужно для каждой номенклатуры из ТЗ "откусывать" по символу из артикула и искать подходящую номенлатуру из другой ТЗ... |
|||
27
SeiOkami
05.02.13
✎
20:30
|
(25), то бишь все же верный вариант - перебор в переборе?
|
|||
28
H A D G E H O G s
05.02.13
✎
20:33
|
(27) Нет.
|
|||
29
vicof
05.02.13
✎
20:33
|
(26) ПОДОБНО "ак%"
|
|||
30
H A D G E H O G s
05.02.13
✎
20:33
|
(27) Функция Найти() в переборе.
|
|||
31
H A D G E H O G s
05.02.13
✎
20:33
|
А Сервер -не трогайте.
Ему и без вас дохрена чем заняться есть. |
|||
32
Живой Ископаемый
05.02.13
✎
20:34
|
2(26) ты пробовал какую-то хрень
|
|||
33
vicof
05.02.13
✎
20:35
|
(0) А какая вообще изначально задача была?
|
|||
34
SeiOkami
05.02.13
✎
20:36
|
так сложно разобраться в 1с, когда одни говорят, мол, "всё делать через запросы!", другие же утверждают обратное...
|
|||
35
SeiOkami
05.02.13
✎
20:36
|
и кому в этом мире можно верить ? =)
|
|||
36
Живой Ископаемый
05.02.13
✎
20:36
|
2(34) бе-е-е--дненький... лучи добра тебе и ласки.
|
|||
37
SeiOkami
05.02.13
✎
20:38
|
(36), бедненькие клиенты программистов, которые и вопросы не задают и не пытаются сделать "как лучше", а пишут "как выйдет"
|
|||
38
DrShad
05.02.13
✎
20:43
|
(37) не слушай Ежика - сервак в большинстве случаев простаивает так что лишний запрос ему не повредит
|
|||
39
H A D G E H O G s
05.02.13
✎
20:48
|
Гражданин Никулин видно не встречал пользователей, у которых забито по 24 гига оперативки и постоянной загрузкой 70-80 % 8 ядерного процессора под УТ11.
Надо показать его высказывание их начальнику ИТ, пусть порадуется. |
|||
40
SeiOkami
05.02.13
✎
20:50
|
Сейчас пытаюсь с имитировать ситуацию в (0) и решить её при помощи НайтиСтроки() или Найти()... просто я так и не понял как мне выдадут строки не по полному совпадению, а по нахождению подстроки...
|
|||
41
Живой Ископаемый
05.02.13
✎
20:51
|
благодаря тому что ты скормишь в качестве аргумента не весь артикул, а часть...
|
|||
42
DrShad
05.02.13
✎
20:51
|
(39) да ты упоротый! конечно встречал но узкое место любой машины не оперативка
|
|||
43
vicof
05.02.13
✎
20:51
|
В цикле строчку перебираешь и ищешь.
А вообще ответь на (33) |
|||
44
DrShad
05.02.13
✎
20:52
|
(40) никак, ибо в найтиСтроки() или Найти() сравнение идет исключительно на равенство!
|
|||
45
H A D G E H O G s
05.02.13
✎
20:53
|
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если Найти(СтрокаТЗ.КолонкаСДанными,ИскомаяСтрока)<>0 Тогда |
|||
46
DrShad
05.02.13
✎
20:58
|
(45) бросай бухать! это будет адски долго, тем более на больших объемах
|
|||
47
SeiOkami
05.02.13
✎
21:00
|
не выходит... все же в (44) верно написано(
|
|||
48
DrShad
05.02.13
✎
21:02
|
(47) это и не только в (44) написано
|
|||
49
DrShad
05.02.13
✎
21:03
|
но ты же веришь всяким ушлепкам, а запрос упорно не хочешь юзать
|
|||
50
МихаилМ
05.02.13
✎
21:04
|
(0)
скд - отличный итератор . к тому же имет метод найти() |
|||
51
SeiOkami
05.02.13
✎
21:07
|
Задача такова:
Есть склад. На нем номенклатура с минусом и плюсом. Нужно для номенклатуры с положительными остатками найти подходящую номенклатуру с отрицательными и поместить в док. пересортица, чтобы схлопнуть. "Поиск" производить по артикулу. Если точного совпадения нет, то откусываем от артикула символ и снова ищем. так пока не найдется нужное количество. если с одним артикулом найдены несколько строк, то выбирать по наиболее подходящей цене закупки, которую берем из последних доков поступления. Задача поставлена точно. Изменять ее нельзя. Нужно реализовать... Перебором я б уже давно сделал... Хотел при помощи Найти(), однако не выходит. А запросом я так и не понял как это замутить. Пример в (14) выдает только по ПОЛНОМУ совпадению, а не по подстроке. Туплю я. В этом не спорю. Но так хочу разобраться уже! |
|||
52
H A D G E H O G s
05.02.13
✎
21:07
|
(46) ТададамТадам
перем ТЗ; Процедура КнопкаВыполнитьНажатие(Кнопка) ТЗ=Новый ТаблицаЗначений; Тз.Колонки.Добавить("Данное"); Для i=1 по 100000 цикл ТЗ.Добавить().Данное="Абырвалг"; КонецЦикла; ТЗ.Добавить().Данное="Главрыба"; КонецПроцедуры Процедура ОсновныеДействияФормыНайти(Кнопка) Для Каждого СтрокаТЗ ИЗ ТЗ Цикл Если Найти(СтрокаТЗ.Данное,"Главрыб")<>0 Тогда Сообщить(ТЗ.Индекс(СтрокаТЗ)); КонецЕсли; КонецЦикла; КонецПроцедуры Время выполнения: 0,482776 |
|||
53
DrShad
05.02.13
✎
21:08
|
(52) Ежик, а ты всю ветку читал?
|
|||
54
DrShad
05.02.13
✎
21:10
|
+(53) ты в курсе что ТЗ формируется запросом, т.е. она уже на серваке, или ты считаешь что передача ТЗ в 30000 строк на клиента отработает быстрее че запрос к той же таблице на месте?
ТададамТадам |
|||
55
H A D G E H O G s
05.02.13
✎
21:10
|
(53) Не читал, но осуждаю.
|
|||
56
H A D G E H O G s
05.02.13
✎
21:11
|
||||
57
DrShad
05.02.13
✎
21:11
|
(55) поздравляю тебя, но ты .....
|
|||
58
NcSteel
05.02.13
✎
21:12
|
(46) Ежов прав. Темболее надо найти первое совпадение.
|
|||
60
NcSteel
05.02.13
✎
21:12
|
(57) Не ворчи. тз в оперативке обычно быстрее работает, чем передовать на сервер и назад.
|
|||
61
DrShad
05.02.13
✎
21:13
|
(56) где нужно найти первое!
|
|||
62
DrShad
05.02.13
✎
21:13
|
(60) пилять, оно и так на серваке!
|
|||
63
DrShad
05.02.13
✎
21:14
|
тут походу дофига чукчей-пейсателей развелось и никто не читает
|
|||
64
NcSteel
05.02.13
✎
21:14
|
(61) "В результате должна быть первая строка" из (0).
|
|||
65
NcSteel
05.02.13
✎
21:15
|
(62) Кто тебе сказал , что ТЗ уже на серваке?
|
|||
66
DrShad
05.02.13
✎
21:16
|
(64) это исходя из краткого примера в (0) а вообще в ТЗ порядка 30 000 строк
|
|||
67
DrShad
05.02.13
✎
21:17
|
(65) я тебе говорю - ибо она формируется серверной процедурой из запроса
|
|||
68
NcSteel
05.02.13
✎
21:19
|
(67) В упор не вижу данной инфы в теме. Ну да ладно.
|
|||
69
DrShad
05.02.13
✎
21:19
|
(68) а потому что это уже вторичная тема :)))
|
|||
70
NcSteel
05.02.13
✎
21:20
|
(69) В нулевом посте есть ссылка на другую тему. И судя по содержанию, не являются продолжением одна другой. В общем есть решение при ТЗ на клиенте предпочтительно использовать перебор. Если ТЗ на сервере, то тут надо анализировать.
|
|||
71
vicof
05.02.13
✎
21:20
|
(51) А нельзя просто отсортировать первоначальную таблицу по артикулам и сгруппировать?
|
|||
72
NcSteel
05.02.13
✎
21:21
|
(71) Глупость пишешь.
|
|||
73
vicof
05.02.13
✎
21:23
|
(72) Возможно.
|
|||
74
vicof
05.02.13
✎
21:25
|
Или в порядке бреда: соединять таблицу с самой собой, а в условии соединения пихать ПОДОБНО
|
|||
75
DrShad
05.02.13
✎
21:25
|
(70) уже 148 000 раз анализировали - запрос быстрее
|
|||
76
DrShad
05.02.13
✎
21:26
|
(74) ловите наркомана!
|
|||
77
vicof
05.02.13
✎
21:26
|
(76) тсс...хошь отсыплю?
|
|||
78
DrShad
05.02.13
✎
21:28
|
(77) неа
|
|||
79
SeiOkami
05.02.13
✎
21:29
|
пытаюсь запросом... надеюсь, выйдет нормальное чегось
Пока на полное совпадение такой запрос: ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул, ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.ВРезервеОстаток, 0) КАК Остаток ПОМЕСТИТЬ ТоварыНаСкладе ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладе.Номенклатура, ТоварыНаСкладе.Артикул, ТоварыНаСкладе.Остаток ПОМЕСТИТЬ ИзлишкиНаСкладе ИЗ ТоварыНаСкладе КАК ТоварыНаСкладе ГДЕ ТоварыНаСкладе.Остаток > 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладе.Номенклатура, ТоварыНаСкладе.Артикул, ТоварыНаСкладе.Остаток ПОМЕСТИТЬ НедостаткиНаСкладе ИЗ ТоварыНаСкладе КАК ТоварыНаСкладе ГДЕ ТоварыНаСкладе.Остаток < 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ИзлишкиНаСкладе.Номенклатура КАК НоменклатураИзлишки, ИзлишкиНаСкладе.Артикул КАК АртикулИзлишки, ИзлишкиНаСкладе.Остаток + НедостаткиНаСкладе.Остаток КАК ОсталосьСвернуть, НедостаткиНаСкладе.Номенклатура КАК НоменклатураНедостатки, НедостаткиНаСкладе.Артикул КАК АртикулНедостатки ИЗ ИзлишкиНаСкладе КАК ИзлишкиНаСкладе ВНУТРЕННЕЕ СОЕДИНЕНИЕ НедостаткиНаСкладе КАК НедостаткиНаСкладе ПО ИзлишкиНаСкладе.Артикул = НедостаткиНаСкладе.Артикул Теперь же буду думать как организовать с не полным совпадением артикула |
|||
80
acsent
05.02.13
✎
21:30
|
поиск на сиквеле не будет быстрее, ибо индекса то нет.
единственно что может омрачить поиск на клиенте, так это хреновая работа 1с со строками |
|||
81
vicof
05.02.13
✎
21:31
|
ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(ТоварыНаСкладахОстатки.ВРезервеОстаток, 0) КАК Остаток
Мило, учитывая, что нет соединений |
|||
82
SeiOkami
05.02.13
✎
21:31
|
Это так. На вскидку
|
|||
83
SeiOkami
05.02.13
✎
21:32
|
(81), зачем?
|
|||
84
DrShad
05.02.13
✎
21:32
|
(79) куда ТЗ подевал!? сц_уко
|
|||
85
DrShad
05.02.13
✎
21:33
|
и где ПОДОБНО?
|
|||
86
SeiOkami
05.02.13
✎
21:33
|
ТЗ у меня была в результате запроса на остатки товаров на складах...
|
|||
87
Нуф-Нуф
05.02.13
✎
21:33
|
ЗАПРОС
|
|||
88
Нуф-Нуф
05.02.13
✎
21:34
|
угадал?
|
|||
89
DrShad
05.02.13
✎
21:34
|
(79) тебе вообще чего нужно?
|
|||
90
DrShad
05.02.13
✎
21:35
|
(86) да ты упопротый - сабж об одном, а в итоге нам из предущей ветки подсунул запрос!? ушлепок
|
|||
91
SeiOkami
05.02.13
✎
21:36
|
(90), какая разница каким образом мы получаем ТЗ? Вопрос был по манипуляции с ТЗ. Я могу так же вместо первых временных таблиц передать ТЗ как параметр. Ничего то не меняется
Поставил ПОДРОБНО. Работает только при полном совпадении |
|||
92
Нуф-Нуф
05.02.13
✎
21:37
|
%%
|
|||
93
Нуф-Нуф
05.02.13
✎
21:37
|
слева и справа
|
|||
94
SeiOkami
05.02.13
✎
21:37
|
* т.е. ПОДОБНО
|
|||
95
Нуф-Нуф
05.02.13
✎
21:37
|
от слова
|
|||
96
Нуф-Нуф
05.02.13
✎
21:38
|
которое ищешь
|
|||
97
Нуф-Нуф
05.02.13
✎
21:38
|
йоу!
|
|||
98
DrShad
05.02.13
✎
21:38
|
да он упоротый, че ты ему объясняешь ведь уже сто раз написали
|
|||
99
NcSteel
05.02.13
✎
21:39
|
||||
100
vicof
05.02.13
✎
21:39
|
(100)
|
|||
101
Нуф-Нуф
05.02.13
✎
21:40
|
(100) красава, дай пять!
|
|||
102
NcSteel
05.02.13
✎
21:41
|
(101) Учись студент.
|
|||
103
vicof
05.02.13
✎
21:41
|
(101) vicof - властелин сотки)
|
|||
104
Нуф-Нуф
05.02.13
✎
21:42
|
(102) Магистр сотки выше этого
|
|||
105
Нуф-Нуф
05.02.13
✎
21:42
|
(103) ранова-то ты себе звания назначаешь :)
|
|||
106
vicof
05.02.13
✎
21:44
|
(105) что-то мы отошли от темы.
|
|||
107
Нуф-Нуф
05.02.13
✎
21:47
|
(106) а я понял автор уже давно отошел. так что можно раскрывать тему сисек
|
|||
108
SeiOkami
05.02.13
✎
21:48
|
автор размышляет как можно реализовать (51)...
|
|||
109
DrShad
05.02.13
✎
21:48
|
(107) ну раскрывай - седня эта тема для меня не раскрыта :((((
|
|||
110
Нуф-Нуф
05.02.13
✎
21:49
|
(109) бугага! малыш плохо себя вел?
|
|||
111
DrShad
05.02.13
✎
21:50
|
(108) в (51) дебильная задача - она не подлежит решению ибо даже не тестировалась в Экселе
|
|||
112
DrShad
05.02.13
✎
21:51
|
(110) ну почему же, просто у жены 2-й, думаю дальше сам поймешь :)))
|
|||
113
SeiOkami
05.02.13
✎
21:51
|
(111), ?
|
|||
114
NcSteel
05.02.13
✎
21:52
|
(112) А у любовницы?
|
|||
115
DrShad
05.02.13
✎
21:52
|
(113) пересорт не решается без удаления причин
|
|||
116
DrShad
05.02.13
✎
21:53
|
(114) попросенок вчера был введен в курс дела :)))
|
|||
117
Нуф-Нуф
05.02.13
✎
21:53
|
(112) так недавно говорил что 4й! в показаниях путаетесь, батенька :)))
|
|||
118
SeiOkami
05.02.13
✎
21:54
|
(115), тут главное не зачем, а как
все равно выходит либо куча циклов либо куча вызовов запроса |
|||
119
DrShad
05.02.13
✎
21:55
|
(112) а я разве говорил кем мне является обладательница?
|
|||
120
DrShad
05.02.13
✎
21:56
|
(118) борьба со следствиями никогда не приводила к успеху
|
|||
121
SeiOkami
05.02.13
✎
21:57
|
(120), все понятно, но от этого решение задачи не появляется(
|
|||
122
Нуф-Нуф
05.02.13
✎
21:58
|
(119) v8: Как удалить документ из конфигуратора чтобы он обращал внимание на ссылки
ну ты даешь. жена мисту не читает? счастливчик |
|||
123
DrShad
05.02.13
✎
21:59
|
(122) ну я же там говорил что 4F и ни слова о том что это жена :)))
|
|||
124
DrShad
05.02.13
✎
21:59
|
(122) все намного проще - я при жене мисту не читаю :)))
|
|||
125
DrShad
05.02.13
✎
22:00
|
должна у меня быть тайна!? :)))
|
|||
126
Serginio1
06.02.13
✎
12:06
|
Сделай универсальную функцию и используй её
Функция НайтиПоУсловию(Тз,Условие,Список="") Массив новый массив; Для каждого Стр из Тз Цикл Если Вычислить(Условие) Тогда массив.Добавить(стр) КонецЕсли КонецЦикла; возврат Тз.Скопировать(массив) КонецФункции Рез=НайтиПоУсловию(тз,"стр.ФизЛицо=""Иванов"" или стр.ФизЛицо=""Сидоров"" или стр.ФизЛицо=""Петров"""); или Список=ОбщегоНазначение.РазложитьСтрокуВМассивПодстрок("Иванов,Сидоров,Петров"); Рез=НайтиПоУсловию(тз,"Список.Найти(стр.ФизЛицо)<>Неопределено"); Или Рез=НайтиПоУсловию(тз,"Найти(Врег(стр.Значение),Врег(""акф""))>0"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |