Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 мая 2024, 15:31

Помогите с поиском в справочнике

Автор Boris1989, 14 мая 2011, 18:08

0 Пользователей и 1 гость просматривают эту тему.

Boris1989

Прошу не ругать, я только начал изучать 1С. В институте дали задание добавить в справочник функции поиска и сортировки. Со вторым я более-менее справился, а с поиском проблемы.
Задумка была такая: вводим в поле текст, жмем "найти", выделяется искомый элемент в справочнике и выскакивает окно с вопросом: "Продолжить? <Ok>,<Отмена>. При нажатии <Ok> должен выделяться следующий подходящий элемент.
Но этого не происходит. При нажатии <Ok> опять появляется окно с вопросом, а в многострочной части ничего не выделяется.

Вот текст процедуры:
//Поиск элемента справочника по коду или наименованию*********************
Процедура НайтиЭлемент()
   ОчиститьОкноСообщений();  
   Если ПустаяСтрока(СтрокаПоиска) = 1 Тогда
      Сообщить("Введите строку для поиска","!");
   Иначе
      СпрВБ = СоздатьОбъект("Справочник.ВидыБрака");
      Если (Режим = 1) и (Совпадение = 0)  Тогда
         СпрВБ.ВыбратьЭлементы();
         Счетчик = 0;
         Кол = 0;
         Пока СпрВБ.ПолучитьЭлемент() = 1 Цикл  
             Счетчик = Счетчик + 1;
         КонецЦикла;
         СпрВБ.ВыбратьЭлементы();
          Пока СпрВБ.ПолучитьЭлемент() = 1 Цикл
            Кол = Кол + 1;    
            Если Найти(СпрВБ.ТекущийЭлемент().Наименование,СтрокаПоиска) > 0 Тогда    
               АктивизироватьОбъект(СпрВБ.ТекущийЭлемент());
               Если Вопрос("Продолжить поиск?",1) = 1 Тогда
                  Продолжить;
               ИначеЕсли Вопрос("Продолжить поиск?",1) = 2 Тогда
                  Прервать;
               КонецЕсли;
            КонецЕсли;
            Если Кол = Счетчик Тогда
               ОчиститьОкноСообщений();
               Сообщить("Совпадений не найдено","!");
               Прервать;
            КонецЕсли;
          КонецЦикла;
      КонецЕсли;      
      Если (Режим = 1) и (Совпадение = 1)  Тогда
         Если СпрВБ.НайтиПоНаименованию(СтрокаПоиска, 0, 1) = 1 Тогда
            АктивизироватьОбъект(СпрВБ.ТекущийЭлемент());
         Иначе
            ОчиститьОкноСообщений();
            Сообщить("Точного совпадения не найдено","!");
         КонецЕсли;
      КонецЕсли;
      Если Режим = 2  Тогда
         Если СпрВБ.НайтиПоКоду(СтрокаПоиска,0)=1 Тогда
            АктивизироватьОбъект(СпрВБ.ТекущийЭлемент());
         Иначе
            ОчиститьОкноСообщений();
            Сообщить("Элементов с кодом '" + СтрокаПоиска + "' не найдено","!");
         КонецЕсли;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры


Boris1989

Проблема где-то здесь:

Если Найти(СпрВБ.ТекущийЭлемент().Наименование,СтрокаПоиска) > 0 Тогда   
               АктивизироватьОбъект(СпрВБ.ТекущийЭлемент());
               Если Вопрос("Продолжить поиск?",1) = 1 Тогда
                  Продолжить;
               ИначеЕсли Вопрос("Продолжить поиск?",1) = 2 Тогда
                  Прервать;
               КонецЕсли;
            КонецЕсли;

vgraz

по последнему фрагменту
правильно будет

               ОтветНаВопрос =  Вопрос("Продолжить поиск?",1);
               Если  ОтветНаВопрос = 1 Тогда
                      Продолжить;
                  ИначеЕсли ОтветНаВопрос = 2 Тогда
                       Прервать;
               КонецЕсли;

Boris1989

Так, конечно, правильней будет. Но проблему не решает. Метод АктивизироватьОбъект(СпрВБ.ТекущийЭлемент()) не срабатывает!

prog1c7.7


Boris1989

Цитата: prog1c7.7 от 18 мая 2011, 01:16
сам писал?
Конечно, сам! До 1С у меня был опыт написания в Delphi, и Pascal'ем баловался.
А по поводу темы - сделал через Сообщить():

   Если Найти(СпрВБ.ТекущийЭлемент().Наименование,СтрокаПоиска) > 0 Тогда   
               ОчиститьОкноСообщений();
               Сообщить(СпрВБ.ТекущийЭлемент().Код + " " + СпрВБ.ТекущийЭлемент().Наименование,"");
               ОтветНаВопрос =  Вопрос("Продолжить поиск?",1);
               Если  ОтветНаВопрос = 1 Тогда
                  Продолжить;
               ИначеЕсли ОтветНаВопрос = 2 Тогда   
                  ОчиститьОкноСообщений();
                  АктивизироватьОбъект(СпрВБ.ТекущийЭлемент());
                  Прервать;
               КонецЕсли;   
            КонецЕсли;

Но хотелось бы, чтоб не сообщение выскакивало, а элемент справочника выделялся. Есть идеи?

vgraz

Попробуй после
  АктивизироватьОбъект(СпрВБ.ТекущийЭлемент());
вставить
  Форма.Обновить();
вдруг получиться ))) сам не проверял сразу говорю...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск