v7: Индексированная таблица #703948


#0 by ildary
Уважаемые специалисты, подскажите пожалуйста, как правильно пользоваться функцией НайтиСтроку и ПолучитьСтроку, чтобы потом перебрать все найденные варианты? Для примера - чтобы обработать найденные строки, придется обработчик писать в двух местах, а хочется в одном:
#1 by ADirks
... ? так то, НайтиСтроку находит лишь первую попавшуюся
#2 by ildary
спасибо за идею, а если переборов будет несколько, то надо будет в конце перебора сделать ИТЗСкидок.ВыключитьФильтр( "ЭтоБонус" )?
#3 by ildary
+ я имею в виду, если индексов несколько и перебор будет вестись по разным индексам, то надо будет предыдущий отключать через ВыключитьФильтр? p.s. до того приятно, что на мой нубский вопрос отвечает один из авторов семерочного счастья 1cpp :)
#4 by Mikeware
Начнем с другой стороны. Что ты хочешь сделать?
#5 by ADirks
не, выключать не надо вот ни разу в жизни не было случая, чтоб это понадобилось. Так, для полноты интерфейса сделали.
#6 by Mikeware
иногда нужно
#7 by ildary
есть ИТЗ с разными индексами (ну пусть это будут "Контрагент" и "Товар"). Хочу перебрать все строки в ИТЗ, в которых Контрагент = заданному, и потом перебрать все строки, в которых Товар = заданному. Надо ли после первого перебора убрать фильтр по первому индексу?
#8 by ADirks
выборки по разным индексам независимы к примеру
#9 by ildary
Спасибо, Подмножество решило мою задачу
#10 by Ёпрст
можно и без подмножества, тупо бегать по индексам.. а можно еще проще - сгруппировать ИТЗ..
#11 by ildary
а как правильно бегать по индексам, особенно если они составные? Я нашел только НайтиСтроку, но вот как сделать полный перебор в одном цикле?
#12 by ildary
+ допустим в ИТЗ есть 2 колонки - Товар и Контрагент и составной индекс "ТоварКонтрагент", как перебрать все строки и что-то сделать в один проход? Подмножество - похоже работает по простому индексу.
#13 by Ёпрст
дык кидаешь в СЗ 2 значения ключа и находишь все пары Клиентос-Товар с этими значениями ключа.
#14 by ildary
еще небольшой вопрос - как в табличном поле сделать самостоятельную сортировку: табличное поле выводит справочник "Действия", с реквизитоом Контрагент, тип "справочник.Контрагенты". 1С сортирует эту колонку по внутреннему идентификатору, а хочется, чтобы сортировал по наименованию. Пытался сделать дополнительное текстовое поле (чтобы сортировать по нему), вот так: Данные.ДобавитьСоединениеДанных( "Справочник_Контрагенты","JOIN Справочник.плнДействия as СпрДействия |ON СпрДействия.id = ТекущийОбъект.id но по нему вообще не сортирует. Есть ли способы отсортировать кроме перехода на Табличное поле ИТЗ?
#15 by Salimbek
Там разбираться надо с Поставщиком
#16 by ildary
поставщик типа Справочник. Я думаю, что проще переделать на тип поставщика=ИТЗ.
#17 by monsterZE
Источник.УстКлючПорядка("НаимКонтрагента"); не?
#18 by ildary
прошу прощения, а куда эту строку вписать?
#19 by monsterZE
#20 by ildary
+ и эта строка будет работать, когда пользователь нажмет по залоговку колонки "НаимКонтрагента"?
#21 by monsterZE
#22 by monsterZE
#23 by Mikeware
эта строка будет работать по умолчанию.
#24 by ildary
Спасибо большое за советы, попробую.
#25 by ildary
разве ТипБыстрогоПоиска работает для тп справочника? В документации это поле есть только у ПоставщикДанныхODBC.
#26 by monsterZE
что есть "тп справочника"?
#27 by Mikeware
Он через ПоставщикДанных делает
#28 by Serginio1
Если нужное поле первое в индексе то НайтиБлижайшуюБольше или НайтиБлижайшуюМеньше в зависимости от того как создашь ключ.
#29 by monsterZE
не внимательно прочитал =(
#30 by ildary
то есть для ПоставщикДанных - Справочник - работать не будет?
#31 by ildary
мне надо получить все записи с нужным мне индексом и перебрать их одним циклом. К сожалению НайтиБлижайшуюБольше и НайтиБлижайшуюМеньше - не сработают.
#32 by monsterZE
я пробывал =)
#33 by Serginio1
У тебя поле искомое поле первое в индексе?
#34 by ildary
не обязательно. Есть также составной индекс (Товар + Контрагент).
#35 by Serginio1
Обычно индекс составляют так. Искомое значение + минимальные значения в следующих индексах. При нахождении НайтиБлижайшуюБольше должна спозиционироваться на первыю запись. Вообще обычно существуют методы БольшеИлиРавно
#36 by Salimbek
Что касается задачи в то варианты уже приводили, еще один вариант (которым пользовался я) - это использовать "Группировать" с параметром 1 в конце, т.е. кроме сгруппированной таблицы, которую перебираешь, в каждой строке будет Индексированная таблица ТЗПотомки (с выборкой только отфильтрованных по группируемому полю строк), которую далее можно проиндексировать как угодно, перебрать и т.д. Что же задачи в , то, по идее, как то оно должно работать. Если очень надо, могу завтра выкроить немного время, посмотреть на внутренности поставщика.
#37 by ildary
спасибо за помощь. раз так лучше - то буду группировать.
#38 by Mikeware
не нужно тебе группировать. составной индекс по двум полям, и все.
#39 by Salimbek
Так тоже можно, только придется самостоятельно следить, началась ли новая цепочка бонусов. Т.е. варианты: ИТЗ.ДобавитьИндекс("индБонус","ЭтоБонус,Номенклатура");
#40 by ildary
я с индексированными таблицами только начинаю работать и я надеялся, что их функционал позволит накладывать фильтр по значению индекса с последующим перебором только отфильтрованного, а получается, что ИТЗ будет перебираться как обычная ТЗ?
#41 by Mikeware
задачи есть разные. где-то нужно группировка , где-то индекс и фильтр.
#42 by Mikeware
имено так. Накладываешь фильтр, и видишь только отфильтрованное.
#43 by ildary
я дико извиняюсь, но вот я смотрю в и вижу: чем это отличается от полного перебора обычной ТЗ?
#44 by Mikeware
ахез. лениво разбираться, что он там хотел выродить.
#45 by Ёпрст
так и есть
#46 by ildary
"так и есть" = "ИТЗ будет перебираться как обычная ТЗ"? если да, то остается только группировка с обращением к ТЗ_Потомки.
#47 by Salimbek
Ну как же, добавив индекс по двум полям, как предложено в , мы же не накладываем фильтр по первому полю, верно?
#48 by Ёпрст
нет, будет отбираться по установленному фильтру или, например, можно бегать только по уникальным записям индекса..
#49 by ildary
я бы не отказался от простейшего примера. устал искать рабочий вариант методом научного тыка.
#50 by Ёпрст
эээ..ща поищу
#51 by Ёпрст
Это, установи фильтр по нужному индексу и обходи тз с установленным фильтром по этому индексу.. Тебе это надо в итоге ?
#52 by Ёпрст
+51  установи фильтр по нужному индексу с нужными значениями ключей
#53 by ildary
попутно ковыряясь с ИТЗ нашел еще одну непонятку: есть у нее метод Группировать. Решил испытать его: Берем ИТЗ с колонками "Фирма", "СуммаРуб", "Контрагент" (так она из регистра выгрузилась). СуммаРуб- числовой, первые два - справочники. Далее: хочу увидеть в ИТЗ свертку - и вижу, что таблица не сгруппировалась (т.е. как шли колонки Фирма, СуммаРуб, Контрагент, так и осталось, добавленная колонка ТЗ_Потомки  - пустая). Единственное, что смущает - порядок колонок в ИТЗ не совпадает с тем, как я ее группирую, но разве это должно влиять?
#54 by ildary
+ извините, был напуган. Создавать индексы было не только лишним, но и вредным.
#55 by Salimbek
Чтобы была тзПотомки надо ИТЗ.Группировать( "Контрагент: Контрагент; Фирма: Фирма", "СуммаРуб" , 1);
#56 by ildary
пардону прошу, но у меня и без 1 в параметрах получилось, надо было только не создавать индексы.
#57 by Mikeware
что "получилось"?
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С