Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Индексированная таблица НайтиСтроку

v7: Индексированная таблица НайтиСтроку
Я
   OnePrg
 
26.07.21 - 11:27
тбОст = СоздатьОбъект("ИндексированнаяТаблица");
                RS.ВыполнитьИнструкцию(ТекстЗапроса,тбОст,1);
                тбОст.ДобавитьИндекс("Индекс","Товар,Склад");
                
                ВыбратьСтроки();
                Пока ПолучитьСтроку()=1 Цикл
                    сп = СоздатьОбъект("СписокЗначений");
                    сп.ДобавитьЗначение(Товар,"Товар");
                    сп.ДобавитьЗначение(Склад,"Склад");
                    Если тбОст.НайтиСтроку("Индекс",сп,,1) = 1 Тогда
                        Ост = тбОст.ОстатокТовара;
                    Иначе
                        Ост = 0;
                    КонецЕсли;  



НайтиСтроку срабатывает только один раз. Что не так в коде?
   Mikeware
 
1 - 26.07.21 - 11:31
что значит "только один раз"?
   OnePrg
 
2 - 26.07.21 - 11:34
В документе 400 строк, тбОст.НайтиСтроку("Индекс",сп,,1) = 1 срабатывает только один раз
   Ёпрст
 
3 - 26.07.21 - 11:37
(2) И ? он находит первую строку из индексного выражения.
НайтиСтрокУ и не строкИ
   OnePrg
 
4 - 26.07.21 - 11:38
Сорян - кажись вопрос учётный. Отбой. Спасибо.
   ADirks
 
5 - 26.07.21 - 11:56
(0) НайтиСтроку() возвращает номер строки или 0, а не флаг найдено/ненайдено
   8 bit
 
6 - 26.07.21 - 11:57
НайтиСтроку / FindRow
Синтаксис: НайтиСтроку(Индекс, Ключ, [чНайтиПоследнюю = 0], [чСпозиционироваться = 0])

Параметры:
Индекс - тип: Строка, Число. Идентификатор или номер индекса.
Ключ - тип: любой. Если индекс построен по одной колонке - то значение поиска. Если же индекс по нескольким колонкам, то это должен быть СписокЗначений, содержащий значения ключевых колонок, заданных в методе ДобавитьИндекс().
чНайтиПоследнюю - тип: Число. Если 1, то будет найдена последняя строк с совпадающим значением ключа.
чСпозиционироваться - тип: Число. Если 1, то при успешном поиске индекс будет спозиционирован на найденной строке. Если перед выполнением метода была открыта выборка (методом ВыбратьСтроки), то она перепозиционируется на найденное значение. Если выборка не была открыта, то она открывается, и после успешного поиска могут быть использованы методы ПолучитьСтроку(), СледующаяСтрока() и ПредыдущаяСтрока(). Основной индекс также перепозиционируется.

Возвращает: тип: Число. Номер найденной строки. Если ничего не найдено, то 0.

Описание: Найти строку, точно соответствующую ключу.


-----
Если тбОст.НайтиСтроку("Индекс",сп,,1) <> 0 Тогда// так попробуй
   Salimbek
 
7 - 26.07.21 - 13:40
(0) Если тебе надо все строки, то лучше УстановитьФильтр, потом перебрать строки ИТЗ с учетом фильтра.
   OnePrg
 
8 - 26.07.21 - 14:08
(5) Да, точно. Спасибо.
   Sserj
 
9 - 26.07.21 - 14:31
(2) Если у тебя 400 строк то получается ты создаешь 400 объектов СписокЗначений.
Может лучше использовать один а не создавать каждый раз новый:

сп = СоздатьОбъект("СписокЗначений"); 
Пока ПолучитьСтроку()=1 Цикл
  сп.УстановитьЗначение("Товар", Товар);
  сп.УстановитьЗначение("Склад", Склад);
  Если тбОст.НайтиСтроку("Индекс",сп,,1) = 1 Тогда 
...

Список тем форума
 
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.