Консультация № 119514
21.01.2008, 09:26
0.00 руб.
0 3 3
Здравствуйте уважаемые эксперты. У меня есть возник такой вопрос, как в таблице значений найти значение в определенном столбце, и при том мне надо найти все одинаковые значения. Одно значение я ищу так:
пстр=0;
ТН.НайтиЗначение(СокрЛП(Накроз.НомерДок),пстр,2);
ТН.ПолучитьСтрокуПоНомеру(пстр);
А как найти несколько? (нехочу крутить цикл, или другого варианта нет?), например такого как "ВыбратьЭлементыПоРеквизиту". Зарание благодарен.

Обсуждение

Неизвестный
21.01.2008, 10:51
общий
это ответ
Здравствуйте, Andris!

В 7.7 другого варианта нет - только перебор таблицы. Однако его можно ускорить, предварительно отсортировав таблицу по данной колонке. Я бы сделал так:

//-------------------------------------
ТН.Сортировать("2"); //отсортировали по колонке №2
пстр=0;
ТН.НайтиЗначение(СокрЛП(Накроз.НомерДок),пстр,2); //нашли первую строку с нужным значением, номер строки в пстр

Пока (ТН.ПолучитьЗначение(пстр,2)=СокрЛП(Накроз.НомерДок)) //пока значение не изменилось ...
и (пстр<=ТН.КоличествоСтрок()) //и не кончились строчки
цикл
Сообщить(ТН.ПолучитьЗначение(пстр,1)); //что-то делаем в строке
пстр=пстр+1; //и переходим на следующую
КонецЦикла;
//--------------

disclaimer: в зависимости от состава и размера таблицы значений этот алгоритм может работать медленнее чем простой перебор.
Неизвестный
21.01.2008, 10:55
общий
это ответ
Здравствуйте, Andris!

Чтобы найти значение в конкретном столбце, нужно указать его в методе НайтиЗначение(), что Вы собственно и делаете.
Отобрать строки с одинаковыми значениями нельзя. Можно только отсортировать их по этой колонке, найти первый и потом в цикле пройтись по остальным строкам. Например, так как у меня в Приложении.

Приложение:
// Допустим, идентификатор колонки НомерДок ТН.Сортировать("НомерДок"); пстр=0; ТН.НайтиЗначение(СокрЛП(Накроз.НомерДок),пстр,2); ТН.ПолучитьСтрокуПоНомеру(пстр); Пока ТН.НомерДок=СокрЛП(Накроз.НомерДок) Цикл // действия со строкой таблицы // ... пстр=пстр+1; Если пстр>ТН.КоличествоСтрок() Тогда Прервать; КонецЕсли; ТН.ПолучитьСтрокуПоНомеру(пстр); КонецЦикла;
Неизвестный
21.01.2008, 10:58
общий
это ответ
Здравствуйте, Andris!
Если можно использовать сортировку, то сначала отсортируй по по этому столбцу. ТН.Сортировать("+ИмяКолонки"). Потом смотри приложение

Приложение:
ТН.Сортировать("+ИмяКолонки"); //Вместо Имя колонки реальное имяпстр=ПолучитьПустоеЗначение();ТН.НайтиЗначение(СокрЛП(Накроз.НомерДок),пстр,2);Пока 1=1 ЦиклЗнач = ТН.ПолучитьСтрокуПоНомеру(пстр);Если Знач<>СокрЛП(Накроз.НомерДок) ТогдаПрервать;//Уже не то значениеИначе//Делай что хочешьпстр = пстр+1;КонецЕсли;
Форма ответа