Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: позиционирование после стандартного поиска
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
iksteram
Управляевые формы. Можно ли сделать в динамическом списке (справочник Номенклатура) что бы после стандартного поиска происходило позиционирование на список (первую строку списка)? Как вариант после нажатия клавиши Enter.? Спасибо.
AnryMc
Цитата(iksteram @ 30.08.22, 15:40) необходимо зарегистрироваться для просмотра ссылки
что бы после стандартного поиска происходило позиционирование на список (первую строку списка)?


Я "подозреваю" что это события "ПриОчистке" и "ПриИзменении" когда "пусто"...

А позиционирование

&НаКлиенте
Процедура КомандаПерваяСтрока(Команда)
    
    Элементы.ДокументСписок.ТекущаяСтрока = ПолучитьСсылкуПервогоЭлемента();
    
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылкуПервогоЭлемента()
    
    лкСхема     = Элементы.ДокументСписок.ПолучитьИсполняемуюСхемуКомпоновкиДанных();  
    лкНастройки     = Элементы.ДокументСписок.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
    
    //почему-то по умолчанию, в динамических списках нет поля Ссылка, добавляем
    лкПоля = лкНастройки.Структура[0].Выбор.Элементы;
    лкПоле = лкПоля.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    лкПоле.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
    
    лкКомпоновщик     = Новый КомпоновщикМакетаКомпоновкиДанных();
    лкМакетКомпоновки = лкКомпоновщик.Выполнить(лкСхема, лкНастройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    лкПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    лкПроцессорКомпоновки.Инициализировать(лкМакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    лкРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(лкРезультат);
    ПроцессорВывода.Вывести(лкПроцессорКомпоновки);
    
    
    Если лкРезультат.Количество() > 0  Тогда
        лкСсылка = лкРезультат[0].Ссылка;
    Иначе    
        лкСсылка = Неопределено;
    КонецЕсли;    
    
    Возврат лкСсылка;
    
КонецФункции




Хотя если документов очень много, будет не реально тормозить.
можно по кнопке Home - должно быстрее
&НаКлиенте
Процедура КомандаПерваяСтрока(Команда)
    
    //устанавливаем фокус на таблицу списка
    ЭтаФорма.ТекущийЭлемент = Элементы.ДокументСписок;
    мГенераторКлавиш = Новый COMОбъект("Wscript.shell");
    мГенераторКлавиш.SendKeys("{Home}");
    
КонецПроцедуры
iksteram
AnryMc @ Сегодня, 16:13 необходимо зарегистрироваться для просмотра ссылки ,
Проблема впередаче фокуса после поиска, у строки поиска нет событий. думал может можно программно назначить обработчик, тоже не получается
AnryMc
Я делал свою строку поиска...
Реквизит формы "СтрокаДляПоиска" - тип строка,
&НаКлиенте
Процедура СтрокаДляПоискаПриИзменении(Элемент)
    
    Если ЗначениеЗаполнено(СтрокаДляПоиска) Тогда
        
        УстановитьМойОтбор(СтрокаДляПоиска);
        
    Иначе
        
        УдалитьМойОтбор();
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура СтрокаДляПоискаОчистка(Элемент, СтандартнаяОбработка)
    
    УдалитьМойОтбор();
        
КонецПроцедуры

&НаКлиенте
Процедура СтрокаДляПоискаОткрытие(Элемент, СтандартнаяОбработка)
    
    СтандартнаяОбработка = ЛОЖЬ;
    
    Если ЗначениеЗаполнено(Элемент.ТекстРедактирования) Тогда
        
        УстановитьМойОтбор(Элемент.ТекстРедактирования);
        
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура УстановитьМойОтбор(СДП)
    
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Наименование", СДП, ВидСравненияКомпоновкиДанных.Содержит,,Истина);
    
КонецПроцедуры

&НаКлиенте
Процедура УдалитьМойОтбор()
    
    ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Наименование");
    
КонецПроцедуры


Цитата(iksteram @ 30.08.22, 17:16) необходимо зарегистрироваться для просмотра ссылки
Проблема впередаче фокуса после поиска


   //устанавливаем фокус на таблицу списка
    ЭтаФорма.ТекущийЭлемент = Элементы.ДокументСписок;
iksteram
AnryMc @ Сегодня, 17:20 необходимо зарегистрироваться для просмотра ссылки ,

я знаю как установить фокус, вопрос в какой обработчик это запихнуть? ))
AnryMc
Цитата(iksteram @ 30.08.22, 17:23) необходимо зарегистрироваться для просмотра ссылки
вопрос в какой обработчик это запихнуть?


Лично я в своё время не нашёл 8,3,15,1700 на более свежих не знаю...
iksteram
AnryMc @ Сегодня, 17:28 необходимо зарегистрироваться для просмотра ссылки ,

Ну вот и я не нахожу. Мне тут подсказывают, что можно элементу формы назначить обработчик (программно), но у меня вот так тоже не получилось

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
Элементы.СписокЗапасыСтандартныйПоиск.УстановитьДействие("ПриИзменении", "ВыполнитьДействиеПриИзмененииДанных");

...
КонецПроцедуры // ПриСозданииНаСервере()

&НаКлиенте
Процедура ВыполнитьДействиеПриИзмененииДанных(Элемент)
    
КонецПроцедуры
AnryMc
Цитата(iksteram @ 30.08.22, 19:25) необходимо зарегистрироваться для просмотра ссылки
можно элементу формы назначить обработчик (программно)


а строка поиска - ДополнениеЭлементаФормы Вид: "Отображение строки поиска", где Родитель: Список (таблица формы) - а не элемент...

Можно еще НАВЕРНО через "ж...у":
Повесить ПодключитьОбработчикОжидания с периодом например 1 секунда и анализировать наверно Элементы.ДокументСписок.ПолучитьИсполняемыеНастройкиКомпоновкиДанных() есть ли там отбор...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.