![]() |
![]() |
![]() |
|
поиск всех элементов справочника с опред наименованием | ☑ | ||
---|---|---|---|---|
0
Башмак
28.04.08
✎
13:00
|
Приветствую всех читающих это.
Хочу найти все элементы справочника, имеющих одно и тоже наименование. можно Спр.ПорядокНаименований(); НайтиПоНаименованию(наим1,0,1); Пусть нашли 1-й элемент, как теперь проверить следующие, такое же ли у них наименование? Помогите добрым советом. |
|||
1
Стрелок
28.04.08
✎
13:01
|
1. перебор справочника
2. запрос |
|||
2
Стрелок
28.04.08
✎
13:02
|
3. поиск по наименованию с удалением в транзакции и отменой оной по завершению работы
|
|||
3
Guk
28.04.08
✎
13:03
|
(0) Делай в транзакции с удалением найденных элементов...
|
|||
4
Ёпрст2
28.04.08
✎
13:03
|
(0)
СЗ=СоздатьОбъект("СписокЗначений"); НачатьТранзакцию(); Пока Спр.НайтиПоНаименованию(наим1,0,1)=1 Цикл СЗ.ДобавитьЗначение(Спр.ТекущийЭлемент()); Спр.Удалить(); КонецЦикла; ОтменитьТранзакцию(); СЗ.ВыбратьЗначение(,); Или запросом ... |
|||
5
Smitt
28.04.08
✎
13:04
|
Процедура Сформировать()
Перем Запрос, ТекстЗапроса; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент; |Наименование = Справочник.Номенклатура.Наименование; |Группировка ТекущийЭлемент; |Условие(Наименование = ВыбНаименование); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса // Заполнение полей "Заголовок" Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей ТекущийЭлемент КонецЦикла; // Вывод заполненной формы КонецПроцедуры |
|||
6
dk
28.04.08
✎
13:04
|
1. Плохой вариант
2. Правильный вариант
|
|||
7
Omskdizel
28.04.08
✎
13:05
|
Можно легко через ТаблицуЗначений
|
|||
8
Omskdizel
28.04.08
✎
13:07
|
В нее пихаешь наименования, в соседнюю колонку единички, потом ТЗ.Свернуть("1","2"). В той строке, где не 1 будет стоять количество одинаковых наименований. ИМХО проще юзанья запросов и тем более транзакций.
|
|||
9
ZanderZ
28.04.08
✎
13:08
|
(8) да конечно а как ты потом сам элемент то найдешь твоим то способом...
|
|||
10
Ёпрст2
28.04.08
✎
13:09
|
(8) И при большом количестве элементов ппц твоей ТЗ ...
ЗЫ: Лучше всего Select ... |
|||
11
Omskdizel
28.04.08
✎
13:20
|
(9) Тупо сортируешь по убыванию и вперед перебором. Неужто трудно?
(10) У меня на 200000 элементах все прекрасно работало, я помнится поиск ссылок на список из тысяч 100 элементов делал, с этой ТЗ все упомянутое работало. Более того, справочников с гораздо меньшим объемом подавляющее большинство, так что нарваться на сие маловероятно. |
|||
12
dk
28.04.08
✎
13:22
|
(11) А на формирование этой ТЗ сколько времени ушло? :)
хотя тоже вариант нормальный для некоторых ситуаций. |
|||
13
Ёпрст2
28.04.08
✎
13:23
|
(11) тупое решение, во-первых - перебор всего справочника, во-вторых - тз.
И это никак не лучше мнимой транзакции, которая в разы быстрее, и ну никак не лучше запроса, ибо медленнее. |
|||
14
Ёпрст2
28.04.08
✎
13:24
|
+13 Да еще и сортировка этой тз + перебор в этой тз ...
|
|||
15
Ёпрст2
28.04.08
✎
13:25
|
+14 И хранение копии этой тз в несвёрнутом виде ...
|
|||
16
Omskdizel
28.04.08
✎
13:28
|
В моем варианте находятся все дубли наименований. Если знать наименование, то запрос ессно лучше полного перебора.
|
|||
17
Omskdizel
28.04.08
✎
13:31
|
(14)(15) Что-то не пойму, чем тебе это не нравится? Очень часто пользовал, работает шустро.
|
|||
18
ZanderZ
28.04.08
✎
13:31
|
(11) "Тупо сортируешь по убыванию и вперед перебором. Неужто трудно?
" че то не догнал а сами то как элементы найдешь опять по справочнику искать ?? если ты свернешь по наименованиям то у тебя и будут в таблице только наименования не сами элементы то .... |
|||
19
Башмак
28.04.08
✎
13:34
|
Спасибо
А что насчет select? |
|||
20
Ёпрст2
28.04.08
✎
13:33
|
(17) Ложное заблуждение в (8).
|
|||
21
Omskdizel
28.04.08
✎
13:37
|
(18) Ну если и такое надо рассказывать :) Сортировать по второй колонке, где количество документов дублей :) И все верхние будут как раз дублями, пока в "2" единичку не встретишь.
|
|||
22
ZanderZ
28.04.08
✎
13:37
|
(19) запрос или прямой запрос
|
|||
23
Omskdizel
28.04.08
✎
13:38
|
(20) Почитай (16), а то прям расходился
|
|||
24
ZanderZ
28.04.08
✎
13:38
|
(21) ты че то не догоняешь по моему....
|
|||
25
ZanderZ
28.04.08
✎
13:39
|
+(24) извени (16) не увидел ... только муторно и долго в начале в ТЗ потом запрос ...
|
|||
26
Omskdizel
28.04.08
✎
13:41
|
(25) Не, ты уж определись, либо ТЗ, либо Запрос. Просто я (0) несколько неправильно понял.
|
|||
27
ZanderZ
28.04.08
✎
13:43
|
(26) ну так вот я тебя и спрашивал как из твоей Тз найти ССЫЛКИ на элементы, а если ты предлагаешь потом еще отдельно запрос делать для получения ссылок, то проще сразу запрос мутить с группировкой по Наименованию
|
|||
28
Omskdizel
28.04.08
✎
13:49
|
(27) Нее, ты наверное не понял. В ТЗ справочник кидаешь, в этой же ТЗ делаешь еще колонку в которой ставишь 1, потом ТЗ.Свернуть("1","2"), ТЗ.Сортировать("2-") потом перебор до тех пор, пока ТЗ.ПолучитьЗначение(НомерСтроки,2)<>1
|
|||
29
Башмак
28.04.08
✎
13:50
|
А если ВыбратьЭлементыПоРеквизиту, где реквизит - наименование и перебрать элементы этой выборки?
|
|||
30
Omskdizel
28.04.08
✎
13:50
|
Можно и во время перебора справочника поймать дубли в принципе, главное его сначала отсортировать по наименованию.
|
|||
31
Omskdizel
28.04.08
✎
13:51
|
(29) А интересный вариант. Только вот не знаю, к Наименование его можно прикрутить или нет.
|
|||
32
ZanderZ
28.04.08
✎
13:51
|
(28) как это ты в тз свернешь справочник то если там будут ЭЛЕМЕНТЫ ??????
ты понимаешь разницу м/у Наименованием справочника и Элемента справочника .... |
|||
33
Ёпрст2
28.04.08
✎
13:51
|
(29) Наименование, как и Код - это "атрибуты" справочника, не совсем реквизиты его...и для них свои методы.
|
|||
34
ZanderZ
28.04.08
✎
13:53
|
(29) не получится надо доп Реквизит делать с отбором в него писать наименования, а потом уже твое ...
|
|||
35
Omskdizel
28.04.08
✎
13:54
|
(32) Почитай внимательно (8). Неужто сам додумать не можешь, что в ТЗ можно и наименования пихать?
|
|||
36
ZanderZ
28.04.08
✎
13:56
|
(35) ты че то гоняешь реально ты же свернешь по наименованию как ты потом элемент то получишь ????
у тебя будет в ТЗ К1 К2 Наименование1 2 Наименование2 3 Наименование3 1 и дальше твои действия отобрал я 1-е и 2-е значени из тз и ???? |
|||
37
Ёпрст2
28.04.08
✎
13:59
|
(36) Как-как .. копию отсортированнной несвёрнутой ТЗ хранить надобно ... в неё потом искать - перебирать ..
|
|||
38
ZanderZ
28.04.08
✎
14:00
|
(0) самое оптимальное в (5) если надо найти все совпадения по всем то тогда маленько исправить
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент; |Наименование = Справочник.Номенклатура.Наименование; |Группировка Наименование ; |Группировка ТекущийЭлемент без групп; потом в обходе Пока Запрос.Группировка(1) Цикл Кол = 0; Пока Запрос.Группировка(2) Цикл сз.ДобавитьЗначений(Запрос.ТекущийЭлемент); Кол = Кол +1; КонецЦикла; Если Кол = 1 тогда сз.УдалитьЗначение(); КонецЕсли; |
|||
39
Башмак
28.04.08
✎
14:01
|
мне нужны некоторые реквизиты элементов с повторяющимися наименованиями, потому тз вряд ли поможет
(29) было бы идеальным, но (34)-верно, проверил. |
|||
40
ZanderZ
28.04.08
✎
14:01
|
(37) и в чем прикол то хранения ???
тогда уже после свертки заново переберать справочник и искать с сортировкой по наименованию... |
|||
41
Ёпрст2
28.04.08
✎
14:07
|
(40) Это ты у автора поста спроси...
ЗЫ: Если нужны все несовпадения, то Запрос + 1 группировка + Функция Счётчик в запросе и привет, в обходе, там где значение функции >1 - и есть дубли. Если нужна скорость, то select + like %%%(если по части наименования)... |
|||
42
Omskdizel
28.04.08
✎
14:10
|
(36) Ну сделай К3, где собственно элемент будешь хранить. И не надо ничего особо перебирать дополнительно. Или прям код расписать, чтобы такие вопросы за ненадобностью отвалились?
|
|||
43
Omskdizel
28.04.08
✎
14:35
|
(38) И чем это лучше перебора справочника? :) А если надо по Наименованию и Артикулу совпадения искать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |