Имя: Пароль:
1C
1С v8
v8: Помогите с решением. Поиск наименования в массиве строк
,
0 Альбатрос
 
25.06.13
12:37
Исходные данные - массив строк.
Задача: найти наименование справочника, имеющее макс. кол-во вхождений строк из массива.
Предложите грамотное решение =)
Заранее спасибо за ответы.
1 Maxus43
 
25.06.13
12:41
запросом?
2 SherifSP
 
25.06.13
12:42
(0) Добавить колонку в массив с типом число и значением 1 на каждую строку, и просто сгруппируй по колонкам
3 Альбатрос
 
25.06.13
12:42
(1) Ну да. Только кроме как запрос в цикле я ничего не придумал =)
4 SherifSP
 
25.06.13
12:43
+(2) И отсортируй по числовой колонке по убыванию, 1 строка будит та, которую ты ищешь))
5 pessok
 
25.06.13
12:43
(2) самый безобидный вариант
6 Альбатрос
 
25.06.13
12:49
(2) (4) Сори, я что-то не понял. (((
"Добавить колонку в массив" - массив не имеет колонок, значит, вы имеете ввиду ТЗ. Хорошо. Добавлю колонку числовую, заполню ее для всех строк значением 1. Как мне поможет сортировка этой ТЗ в запросе при выборе макс. количества вхождения строк этой же ТЗ в какое-либо наименование справочника? Еще раз сори, если туплю =)
7 pessok
 
25.06.13
12:50
(6) плохо читал. еще и свернуть надо
ТЗ.Свернуть("ПолеПоиска", "Количество");
Тз.Сортировать("Количество Убыв");
МаксВхождений = ТЗ[0].ПолеПоиска
8 salvator
 
25.06.13
12:51
(6) А попробовать, не?
9 acsent
 
25.06.13
12:52
динамический запрос с колонками - 1 за вхождение элемента
10 Альбатрос
 
25.06.13
12:52
(7) Не, не, вы неправильно меня поняли ))) Сейчас дам пример
11 fmrlex
 
25.06.13
12:53
(0) Куда справочнику должны входить строки?
В элементы справочника?
12 Альбатрос
 
25.06.13
12:58
Элементы массива:
"Хутин" "Пуй" "и" "это" "все" "знают"

Наименования элементов справочника:
1. "Хутин Пуй - и в России это все знают"
2. "Хутин Пуй"
3. "Хутин Пуй все знают".

Так вот, мне нужен запрос, который бы вернул мне ссылку на элемент справочника с наименованием[1], т.к. в это наименование вошло наибольшое кол-во элементов массива.
Ессесно, кол-во элементов массива может быть разное.

Надеюсь, понятно объяснил.=)
13 fmrlex
 
25.06.13
13:02
(12) Запрос. И на 8.3 есть статистические функции.
14 Deon
 
25.06.13
13:03
(12) собирай запрос из кучи объединенных запросиков по каждому элементу массива.
15 Альбатрос
 
25.06.13
13:03
(13) Понятно, что запрос. Я его придумать не могу. К сожалению, только 8.2
16 kosts
 
25.06.13
13:04
Запрос, подобно и групировка
17 Deon
 
25.06.13
13:08
ВЫБРАТЬ
   Спр.Ссылка,
   1 КАК КолвоВхождений
ИЗ
   Справочник.Спр КАК Спр
ГДЕ
   Спр.Наименование ПОДОБНО "%Хутин%"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   Спр.Ссылка,
   1
ИЗ
   Справочник.Спр КАК Спр
ГДЕ
   Спр.Наименование ПОДОБНО "%Пуй%"

и т.д.

Ну и потом это в вложенный запрос, и группировочку сверху
18 Альбатрос
 
25.06.13
13:10
(17) Кол-во элементов массива разное, но, в принципе, можно же в цикле текст присоединять. Должно сработать
19 Альбатрос
 
25.06.13
13:10
(18) или нельзя? =)
20 Альбатрос
 
25.06.13
13:12
(16) Вы имели ввиду вариант (17)?
21 Deon
 
25.06.13
13:12
(19) Можно и даже нужно. Сборка текста запроса в цикле мистянами не запрещена.
22 Rovan
 
гуру
25.06.13
13:12
(18) да
23 kosts
 
25.06.13
13:13
Перевести массив в ТЗ.
В запросе.
Из ТЗ сделать временную таблицу.
Далее соединяем временную таблицу со справочником с "подобно".
Потом группировка.
24 Deon
 
25.06.13
13:15
(23) а ведь да, так прикольней
25 Альбатрос
 
25.06.13
13:16
(23) Хм... сработает? Теоритически тоже должен. Этот вариант попроще, чем (17) Начну с него =)
Всем большое спасибо!!!
26 Альбатрос
 
28.06.13
09:08
Мужики, как применить ПОДОБНО к полю ВТ?
Вот так работает:
ПО (Контрагенты.Наименование ПОДОБНО МассивСтрок.Стр)
А вот так нет:
ПО (Контрагенты.Наименование ПОДОБНО %МассивСтрок.Стр%)
27 kosts
 
28.06.13
10:19
28 Очкарик
 
28.06.13
10:22
(0) перебери массив пузырьковым методом
29 HeroShima
 
28.06.13
10:31
(0) подстроки могут пересекаться? наименования одних элементов могут быть подстроками других?
30 Альбатрос
 
28.06.13
11:28
(29) Влегкую.
(27) Вообщем, накалякал вот такой запрос. Так и не придумал, как здесь правильно использовать группировку:

   
   Запрос.Текст = "ВЫБРАТЬ
                  |    МассивСтрокВН.Стр
                  |ПОМЕСТИТЬ МассивСтрок
                  |ИЗ
                  |    &МассивСтрокВН КАК МассивСтрокВН
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    Контрагенты.Ссылка КАК Ссылка
                  |ИЗ
                  |    МассивСтрок КАК МассивСтрок
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
                  |        ПО (Контрагенты.Наименование ПОДОБНО ""%"" + МассивСтрок.Стр + ""%"")
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    Контрагенты.Ссылка";
31 MKZM
 
28.06.13
11:36
Берешь список наименований справочников и цикле считаешь вхождение слов, запоминешь название и кол вхож переменных. Если появляется строка с большим вхождением, то запоминаешь вместо прежних. вроде так.
32 Альбатрос
 
28.06.13
11:45
(31) Хоцца через запрос сделать =) Тем более он уже почти готов в (30), осталось только выявить в нем ссылку, имеющую наибольшее вхождение. А я вот не могу понять как. Говорят, через группировку, но я и так и сяк пробовал, результата не получил. Как тут говорят, у меня ошибка в ДНК =)
33 kosts
 
28.06.13
12:52
(32)
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Участники.Ссылка) КАК КолВо
или
Добавь поле с единицей. В группировке просуммируй.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.