Перебор єлементов в справочнике

  • Автор темы Tiolan
  • Дата начала
Статус
Закрыто для дальнейших ответов.
T

Tiolan

#1
Не могу разобраться как организовать следующее: нахожу в справочнике значение по фамилии и первому инициалу - и далее по порядку ищу соответствие по второму.

по ВыбратьЭлементы и ПолучитьЭлемент - слишком долго получается, справочник на 70000 записей. да и тупо как-то.

ПолучитьЭлемент после поиска не выходит не пойму почему...

Вот код - имеется ввиду, что хотелось бы ( :) ) чтоб НайтиПоНаименованию(шук1,0,0) искало каждый раз не сначала, а следующего.

Код:
Процедура ЗПИ()

Если КоличествоСтрок() > 0 Тогда
Рез = Вопрос("Заповнити пусті значення згідно ініціалів?","Да+Нет");
Если Рез = "Нет" Тогда
Возврат;
КонецЕсли;
КонецЕсли;

ВыбратьСтроки(); 
~єакт:	
Пока ПолучитьСтроку() = 1 Цикл 

Если ПустоеЗначение(Контрагент) = 0 Тогда	  
перейти ~єакт	
КонецЕсли;		 
сообщить("Шукаю: "+ПІБ);		

шук1 = Лев(ПІБ, (Найти(ПІБ, " ")+1));					
шук2 = Сред (ПІБ, (Найти(ПІБ, " ")+3),1);
сообщить ("шук2 = "+шук2);
Спр = СоздатьОбъект("Справочник.Контрагенты");		  
Спр.ВыбратьЭлементы ();							  

~ще:		
Пока Спр.НайтиПоНаименованию(шук1,0,0) = 1 Цикл
там1 = Лев(спр.ПолнНаименование, (Найти(спр.ПолнНаименование, " ")+1));
Если там1 <> шук1 Тогда
перейти ~єакт
КонецЕсли;	 

там2 = СокрЛП(Прав(спр.ПолнНаименование, (СтрДлина(спр.ПолнНаименование)-(Найти(спр.ПолнНаименование, " ")+1))));	
там2 = Сред(там2, (Найти(там2, " ")+1),1);
сообщить ("там2 = "+там2);

Если шук2 = там2 Тогда
Контрагент = Спр.ТекущийЭлемент();
перейти ~єакт
КонецЕсли;				 
КонецЦикла;

КонецЦикла;		 
КонецПроцедуры
Может есть решение проблемы попроще? или лыжи не едут?
Помогите решить задачку. Очень прошу.
 
B

b00tch

#3
ТОЛЬКО запрос...

плюс, непл0хо было бы знать операторы Прервать и Продолжить... с ними кодЪ красивше и л0гичней получаецц0...
 
T

Tiolan

#4
Прервать и Продолжить - неудобны при вложенных циклах (ИМХО) а с Перейти все просто )

Спасибо Golod. Буду запрашивать)
 
Статус
Закрыто для дальнейших ответов.