![]() |
![]() |
|
Таблица Значений, поиск строк | ☑ | ||
---|---|---|---|---|
0
nastyaaa
31.10.07
✎
11:25
|
Уважаемые программисты, объясните пож-та как в таблице значений найти строки у которых одинаковы определенные параметры?
Есть ТЗ, Она содержит кучу строк необходиомо вытащить те строки где одинаковы: ТЗ.ФИО, ТЗ.Организация, ТЗ.Подразделение, ТЗ.должность Как я думаю нужно использовать метод НайтиСтроки, пишу: Отбор = Новый Структура(); Отбор.Вставить("ФИО",ФИО); Строки = ТЗ.НайтиСтроки(Отбор); Струкутура-Задает условия поиска: ключ структуры определяет имя колонки (ФИО), по которой будет осуществляться поиск, а значение структуры - искомое значение - а я не знаю искомого значения... Что делать? И мне нужно не по одному параметру а по четырем... Заранее спасибо. |
|||
1
Scooter
31.10.07
✎
11:26
|
1.НайтиСтроки + перебор
2.Мучать построитель 3.Запросом |
|||
2
RomaH
naïve
31.10.07
✎
11:27
|
добавить счетчик
свернуть получившиеся строки будут условиями для поиска |
|||
3
MikleV
31.10.07
✎
11:28
|
Свернуть()
|
|||
4
nastyaaa
31.10.07
✎
11:33
|
Как я читала про метод свернуть(), это не получится... Потому что в строках не все ячейки совпадают. Мне нужно вытащить только те строки ТЗ, где совпадают имннно эти 4 параметра, а все остальные совпадать должны не обязательно. Но выводиться должны
|
|||
5
nastyaaa
31.10.07
✎
11:34
|
(1)
НайтиСтроки+перебор - а поподробнее? |
|||
6
RomaH
naïve
31.10.07
✎
11:38
|
(4)
э..эх, не сразу автора разглядел ТЗ_Отбор = ТЗ.Скопировать(); ТЗ_Отбор.Колонки.Добавить("Счетчик"); ... синтаксис не помню, но можно эту колонку заполнить значением "ОДИН" (число, а не слово) ТЗ_Отбор.Свернуть("ФИО,Организация,Подразделение,Должность","Счетчик"); Для Каждого СтрокаОтбора Из ТЗ_Отбор Цикл Если СтрокаОтбора.Счетчик = 1 Тогда Продолжить; Конецесли; тут получили строку ТЗ с готовыми условиями посика строк в ТЗ - они там, в ТЗ, точно дублируются |
|||
7
Hadgehogs
31.10.07
✎
11:41
|
//
Отбор = Новый Структура(); Отбор.Вставить("ФИО",ФИО); Отбор.Вставить("Организация",Организация); Отбор.Вставить("Подразделение",Подразделение); Отбор.Вставить("Должность",Должность); МассивСтрок = ТЗ.НайтиСтроки(Отбор); Для Каждого ЭлементМассива Из МассивСтрок Цикл Сообщить(ЭлементМассива.НомерСтроки); КонецЦикла; |
|||
8
Smallrat
31.10.07
✎
11:43
|
Я что-то не понял, а почему свернуть() не сработает ?
Копируем в новую ТЗ, добавляем колонку "число", заполняем ее единичками Потом ТЗ.Свернуть("ФИО,Организация,Подразделение,должность","Число"); Строки, где число > 1 и есть искомые строки. |
|||
9
Scooter
31.10.07
✎
11:43
|
(6)тоже рабочий вариант. Но свернуть на 8.0 медленно работает
т.е при проведениие лучше не использовать |
|||
10
Smallrat
31.10.07
✎
11:45
|
Упс, пока писал уже даже код запостили =(
|
|||
11
MikleV
31.10.07
✎
11:48
|
там Гений что то писал про ТурбоСвернуть..
и вроде как быстрее работает. |
|||
12
nastyaaa
31.10.07
✎
12:03
|
(6)
Написала: ТЗ_Отбор = ТЗ.Скопировать(); ТЗ_Отбор.Колонки.Добавить("Счетчик"); ТЗ_Отбор.Свернуть("ФИО,Организация,Подразделение,Должность","Счетчик"); Для Каждого СтрокаОтбора Из ТЗ_Отбор Цикл Сообщить(СтрокаОтбора.Счетчик); Если СтрокаОтбора.Счетчик = 1 Тогда Продолжить; Конецесли; КонецЦикла; Проблемы: 1. он свернул в одну строку мои 2 строчки, причем фио вписал, а вот остальные араметры пустыми сделал. Хотя в ТЗ было 2-е строчки с одинаковыми ЗАПОЛНЕННЫМИ параметрами Организация, Должность, Подразделение, ну и ФИО 2. Даже если бы он выводил все 4 параметра, все равно толку мало, потому что мне нужно было найти эти строки в ТЗ, где совпадают данные параметры, а потом уже работать с ними по другим ячейкам этих трок, которых после свертки в ТЗ_Отбор нет :((((( Что делать? |
|||
13
nastyaaa
31.10.07
✎
12:04
|
(12) для (6)
|
|||
14
nastyaaa
31.10.07
✎
12:05
|
(7)
ЭлементМассива.НомерСтроки - такого нет... |
|||
15
nastyaaa
31.10.07
✎
12:07
|
(7)
Я написала так: Отбор = Новый Структура(); Отбор.Вставить("ФИО",Стр.ФИО); Отбор.Вставить("Организация",Стр.Организация); Отбор.Вставить("Подразделение",Стр.Подразделение); Отбор.Вставить("Должность",Стр.Должность); МассивСтрок = ТЗ.НайтиСтроки(Отбор); Для Каждого ЭлементМассива Из МассивСтрок Цикл Сообщить(ЭлементМассива.Индекс); КонецЦикла; Ошибка: {Форма.Отчет(388)}: Поле объекта не обнаружено (Индекс) Сообщить(ЭлементМассива.Индекс); |
|||
16
baa
31.10.07
✎
12:50
|
Дорогая, ответ (7) самый правильный, остальное - чушь
А при чем тут Индекс? |
|||
17
baa
31.10.07
✎
12:58
|
Отбор = Новый Структура();
Отбор.Вставить("ФИО",Стр.ФИО); Отбор.Вставить("Организация",Стр.Организация); Отбор.Вставить("Подразделение",Стр.Подразделение); Отбор.Вставить("Должность",Стр.Должность); МассивСтрок = ТЗ.НайтиСтроки(Отбор); Для Каждого ЭлементМассива Из МассивСтрок Цикл //Сообщить(ЭлементМассива.Индекс); - нет такой колонки у вас Сообщить (ЭлементМассива.ФИО + ЭлементМассива.Организация + ....); КонецЦикла; |
|||
18
nastyaaa
31.10.07
✎
18:45
|
Отбор = Новый Структура();
Отбор.Вставить("ФИО",Стр.ФИО); //НА ЭТОЙ СТРОЧКЕ ВЫДАЕТ ОШИБКУ {Форма.Отчет(378)}: Ошибка при получении значения атрибута контекста (ФИО): Выполнение операции невозможно, т.к. строка была удалена. Отбор.Вставить("ФИО",Стр.ФИО); Что это значит? |
|||
19
nastyaaa
31.10.07
✎
18:48
|
Хотя в ТЗ ФИО есть
|
|||
20
nastyaaa
31.10.07
✎
18:53
|
АУ!
|
|||
21
ОператорПК
31.10.07
✎
18:55
|
покаж полный код что такое "Стр" из (18)
|
|||
22
Hadgehogs
31.10.07
✎
19:02
|
Горевала в тоске Настасья и во сне себя загубила (строки пришли на ум).
У вас в (15) Отбор.Вставить("ФИО",Стр.ФИО); выполнился нормально а в (18) - не работает. Как так? |
|||
23
Вектор3
31.10.07
✎
19:03
|
хммм попробуем ещё раз
ТЗ_Отбор = ТЗ.Скопировать(); ТЗ_Отбор.Колонки.Добавить("Счетчик"); Для каждого стр из тз_отбор Цикл стр.счетчик = 1; КонецЦикла; массив = новый массив; ТЗ_Отбор.Свернуть("ФИО,Организация,Подразделение,Должность","Счетчик"); Для Каждого СтрокаОтбора Из ТЗ_Отбор Цикл Если СтрокаОтбора.Счетчик > 1 Тогда отбор = новый Структура; Отбор.Вставить("ФИО",Стр.ФИО); Отбор.Вставить("Организация",Стр.Организация); Отбор.Вставить("Подразделение",Стр.Подразделение); Отбор.Вставить("Должность",Стр.Должность); массивотбора =ТЗ.найтиСтроки(отбор); Для каждого элем из массивотбора Цикл массив.Добавить(элем); КонецЦикла; Конецесли; КонецЦикла; получили массив строк, в которых значения повторяются |
|||
24
Вектор3
31.10.07
✎
19:05
|
ТЗ_Отбор = ТЗ.Скопировать();
ТЗ_Отбор.Колонки.Добавить("Счетчик"); Для каждого стр из тз_отбор Цикл стр.счетчик = 1; КонецЦикла; массив = новый массив; ТЗ_Отбор.Свернуть("ФИО,Организация,Подразделение,Должность","Счетчик"); Для Каждого стр Из ТЗ_Отбор Цикл Если стр.Счетчик > 1 Тогда отбор = новый Структура; Отбор.Вставить("ФИО",Стр.ФИО); Отбор.Вставить("Организация",Стр.Организация); Отбор.Вставить("Подразделение",Стр.Подразделение); Отбор.Вставить("Должность",Стр.Должность); массивотбора =ТЗ.найтиСтроки(отбор); Для каждого элем из массивотбора Цикл массив.Добавить(элем); КонецЦикла; Конецесли; КонецЦикла; так правильнее |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |