Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как обработать несколько Элементов диалога
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Sede
Добрый день.

Процедура исчет значение в списке, если найдено - делает его активным(выбранным).
Процедура ПоискВСписке(Текст)
Стр="";    
Для Номер = 1 По СписокТов.РазмерСписка() Цикл
  ЗначСписка= СокрЛП(СписокТов.ПолучитьЗначение(Номер, Стр));
   Если Найти(Текст,ЗначСписка)=0 Тогда
       Продолжить;
   Иначе        
        СписокТов.ТекущаяСтрока(Номер);      
       Прервать;
   КонецЕсли;
КонецЦикла;
КонецПроцедуры


Процедура дублируется много раз только с разным названием списка.
Хочу переделать в одну - чтобы в процедуру передавалось также и название Поля со списком (СписокТов, СписокЗак, СписокВес и т.д.)
Никак не могу разобраться с обработкой нескольких Элементов. Как понимаю надо как-то использовать квадратные скобки, но не могу найти нормального описания как их правильно использовать:

Процедура ПоискВПолеСоСписком(НазваниеСписка, ЗначПоиска)
Стр="";    
Для Номер = 1 По [НазваниеСписка].РазмерСписка() Цикл
  ЗначСписка= СокрЛП([НазваниеСписка].ПолучитьЗначение(Номер, Стр));
   Если Найти(ЗначПоиска,ЗначСписка)=0 Тогда
       Продолжить;
   Иначе        
        [НазваниеСписка].ТекущаяСтрока(Номер);      
       Прервать;
   КонецЕсли;
КонецЦикла;
КонецПроцедуры


Процедура Вызывается:

ПоискВПолеСоСписком("СписокТов", ЗначПоиска);


Где/что поправить/изменить. Помогите пожалуйста.
daveal
Передавайте не название, а сам список. И квадратные скобки не нужны.
Sede
Большое спасибо. Действительно оказалось элементарно.

 Процедура ПоискВПолеСоСписком(НазваниеСписка, ЗначПоиска)
Стр="";    
Для Номер = 1 По НазваниеСписка.РазмерСписка() Цикл
  ЗначСписка= СокрЛП(НазваниеСписка.ПолучитьЗначение(Номер, Стр));
   Если Найти(ЗначПоиска,ЗначСписка)=0 Тогда
       Продолжить;
   Иначе        
        НазваниеСписка.ТекущаяСтрока(Номер);      
       Прервать;
   КонецЕсли;
КонецЦикла;
КонецПроцедуры

//Вызов процедуры:
ПоискВПолеСоСписком(МойСписок, ЗначПоиска);


Благодарю за помощь 12201689.gif
Vofka
Sede, жмите палец.
awp
Цитата(Sede @ 14.07.15, 11:47) необходимо зарегистрироваться для просмотра ссылки
Большое спасибо. Действительно оказалось элементарно.

 Процедура ПоискВПолеСоСписком(НазваниеСписка, ЗначПоиска)
Стр="";    
Для Номер = 1 По НазваниеСписка.РазмерСписка() Цикл
  ЗначСписка= СокрЛП(НазваниеСписка.ПолучитьЗначение(Номер, Стр));
   Если Найти(ЗначПоиска,ЗначСписка)=0 Тогда
       Продолжить;
   Иначе        
        НазваниеСписка.ТекущаяСтрока(Номер);      
       Прервать;
   КонецЕсли;
КонецЦикла;
КонецПроцедуры

//Вызов процедуры:
ПоискВПолеСоСписком(МойСписок, ЗначПоиска);


Благодарю за помощь 12201689.gif


Зачем Вы делаете цикл по всему списку?

НайтиЗначение(<?>)
Синтаксис:
НайтиЗначение(<Значение>)
Назначение:
Возвращает номер позиции в списке с искомым значением (0 - если не найдено).
Параметры:
<Значение> - значение, которое необходимо найти в списке.


Sede
Цитата(awp @ 15.07.15, 9:16) необходимо зарегистрироваться для просмотра ссылки
Зачем Вы делаете цикл по всему списку?

НайтиЗначение(<?>)
Синтаксис:
НайтиЗначение(<Значение>)
Назначение:
Возвращает номер позиции в списке с искомым значением (0 - если не найдено).
Параметры:
<Значение> - значение, которое необходимо найти в списке.


Поиск производиться не только на полное соответствие но и на частичное: Я так понимаю ваш способ действенен если в списке "Товар" и ищу "Товар", а если я ищу "овар" наверно ничего не найду.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.