В чём трабл?

Новая тема
"ситуация следующая, на форму справочника "БАНКИ" "Для выбора" прицепил текстовое поле и кнопку "Поиск"



//******************************************************************************

//  Поиск()

//  Описание:

//        Выполняет поиск банка по кнопке "поиск" на форме.





Процедура Поиск()

   Бнк=СоздатьОбъект("Справочник.Банки");

       //Банк.ПорядокКодов();

       Бнк.ВыбратьЭлементы(0);

       Если Бнк.ВыбратьЭлементы(0)=1 Тогда

               Пока Бнк.ПолучитьЭлемент(0)=1 Цикл

                       Если Найти(СокрЛП(Бнк.Наименование),СокрЛП(ПоискБанка))=0 Тогда

                               Иначе Бнк.НайтиЭлемент(Бнк.ТекущийЭлемент());

                               //Предупреждение("Такой банк уже существует! Его код="+Банк.Код);

                       КонецЕсли;

               КонецЦикла;

       КонецЕсли;

КонецПроцедуры;

//******************************************************************************



говорит объект не может быть перепозицианирован! и ссылается на строку Иначе Бнк.НайтиЭлемент(Бнк.ТекущийЭлемент());



в чём тут трабл?"
А вот прочувсвуйте эту строку - вы затавляете объект самого на себя перепозиционироваться.

Эта строка просто не имеет смысла..
"так... и что же делать? как же тогда позиционироваться на найденном объекте?

Ну нашёл я подстроку "ПоискБанка" в строке "Бнк.Наименование", как теперь на неё позиционироваться?

НайтиЭлемент();

НайтиПоНиаменованию();

НайтиПоКоду();

и т.д. приводят ктому же результату :-(



как же тогда позиционироваться!"
Вот прочитайте "Спозиционироваться на найденном объекте".

На мысли не наводит?

Вы и так на нем, куда еще хотите?
возможно не правильно выразился :-)

объект найден, так?

но этот объект никак с формой не связан, так?

элементарное что тут можно сделать вывести его через Сообщить() или Предупреждение(), но нужно совсем другое!!!

Чтобы он стал активным (т.е. стал выделенным синим курсором)... Я же объясняю, что нужно сделать что-то похожее на ПОИСК в справочнике "Банки"... потому что к самой строке поиска не отовсюду можно получить доступ!



А способ, сначала открывать справочник "Банки" проверять есть ли там уже нужный банк, потом через документы (например, п/п) заводить или выбирать... короче должен быть способ сделать всё намного проще!
"АктивизироватьОбъект();

Синтаксис:

АктивизироватьОбъект(<Объект>)

Назначение:

Активизировать объект в форме списка.

Параметры:

<Объект> - выражение, которое может содержать значение элемента справочника или документ или запись журнала расчетов (в зависимости от типа модуля формы, в котором должен быть активизирован элемент диалога).

Замечание:

Доступ к методу возможен только в контексте Модуля формы."
"Пробовал!

Работает не понятно как :-)

Вместо позиции первого найденного делает активным самый последний найденный :-( Что только не делал... всё время активным становится только последний найденный элемент!

Опять же косяк...



вот код:







//******************************************************************************

//      Описание:

//              Выполняет поиск банка по кнопке "поиск" на форме.



Процедура Поиск()

       i=1;

       Бнк=СоздатьОбъект("Справочник.Банки");

       Бнк.ПорядокНаименований();

       Бнк.ВыбратьЭлементы();

       Пока Бнк.ПолучитьЭлемент()=1 Цикл

               Если (Найти(СокрЛП(ВРЕГ(Бнк.Наименование)),СокрЛП(ВРЕГ(ПоискБанка)))<>0) Тогда

                       Найденные[i]=Бнк.Наименование;

//Сообщить(Найденные[i]);

i=i+1;

КонецЕсли;

КонецЦикла;

//****************************************************************************************

Если ФлагПоиска=0 Тогда

//АктивизироватьОбъект(Найденные[1]);

Сообщить("_____"+Найденные[1]);

k=k+1;

ФлагПоиска=1;

ИначеЕсли (k
//АктивизироватьОбъект(Найденные[k]);

Сообщить("*** "+Найденные[k]);

k=k+1;

КонецЕсли;

КонецПроцедуры // Поиск()



//********************************************************************************************

// Определяем переменные при каждом новом открытии формы

ФлагПоиска=0;

k=1;"
"вот теперь всё понятно :))

действительно, есть такая плюха в 1С,

дело в том, что ...

короче: вставляешь кнопку "Поиск" с формулой Поиск()

и

Процедура Поиск()    

ПоискБанка = """";

Если ВвестиСтроку(ПоискБанка,"Укажите пару символов ..",50,0,20) = 0 Тогда

Возврат;

КонецЕсли;



Бнк=СоздатьОбъект("Справочник.Банки");

Бнк.ПорядокНаименований();

Бнк.ВыбратьЭлементы();                



Пока Бнк.ПолучитьЭлемент()=1 Цикл

Если (Найти(СокрЛП(ВРЕГ(Бнк.Наименование)),СокрЛП(ВРЕГ(ПоискБанка)))<>0) Тогда    

АктивизироватьОбъект(Бнк.ТекущийЭлемент());

Прервать;

КонецЕсли;

КонецЦикла;    

КонецПроцедуры



Я правда делал в отдельной форме, так как результат могет быть множественным и

понадобиться дополнительный отбор, например уже из списка значений

выведенного на экран.

Удачи !!

"
Читают тему
(гостей: 1)

Быстрый переход