1с автоподбор нет в списке
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).
среда, 15 января 2014 г.
Переопределение процедуры ввода по строке в управляемом приложении
Для того, чтобы определить свой набор данных, которые формируются при вводе по строке нужно использовать событие АвтоПодбор() элемента формы.
Справка из синтаксис-помощника:
- Значение (Value) - собственно значение;
- ПометкаУдаления (DeletionMark) - пометка удаления;
- Предупреждение (Warning) - текст предупреждения, который будет выбран при выборе элемента и списка значений.
Тип: Число.
Интервал в секундах после ввода текста, через который произошло событие. Если 0, то это означает, что событие было вызвано не по поводу ввода текста, а для формирования списка быстрого выбора.
Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет.
Параметр позволяет отменить стандартное заполнение системой ДанныеВыбора. При этом все действия (отображение списка, предупреждения) выполняются системой на основе возвращенного значения параметра независимо от значения параметра .
Значение по умолчанию: Истина
Возникает во время начала ожидания ввода текста (в процессе набора текста сделана пауза). Также возникает при нажатии клавиши "Стрелка вниз" после ввода текста (или части текста).
При стандартной отработке события происходит поиск в порядке полей, определенном при конфигурировании в свойстве объекта метаданных "Ввод по строке".
Если найдено найдено одно или более значений, то будет показан список с найденными значениями. Если значений найдено больше 50, то список показан не будет.
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции НаСервере.
Переопределять мы будем список значений ДанныеВыбора, который заменим на свой - сформированный запросом:
&НаКлиенте
Процедура РайонАвтоПодбор ( Элемент , Текст , ДанныеВыбора , Ожидание , СтандартнаяОбработка )
Если ЗначениеЗаполнено ( Текст ) И НЕ ТипЗнч ( Район ) = Тип ( "Строка" ) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = ПолучитьДанныеВыбораГородов ( Текст , Истина, ПредопределенноеЗначение ( "Справочник.Города.ПустаяСсылка" ));
Функция ПолучитьДанныеВыбораГородов ( Текст , ЭтоРайон , Родитель )
ДанныеВыбора = Новый СписокЗначений ;
Построитель = Новый ПостроительЗапроса ;
Построитель . Текст = "ВЫБРАТЬ
| Города.Ссылка,
| Города.Наименование
|ИЗ
| Справочник.Города КАК Города
|ГДЕ
| Города.Наименование ПОДОБНО &Наименование + ""%""
| И НЕ Города.ПометкаУдаления
| | Города.Родитель.*,
| Города.Область.*,
| Города.ВидНаселенногоПункта.*>" ;
Построитель . Параметры . Вставить ( "Наименование" , Текст );
Если ЗначениеЗаполнено ( Родитель ) И НЕ ТипЗнч ( Родитель ) = Тип ( "Строка" ) Тогда
Отбор = Построитель . Отбор . Добавить ( "Родитель" );
Отбор . Использование = Истина;
Отбор . ВидСравнения = ВидСравнения . Равно ;
Отбор . Значение = Родитель ;
КонецЕсли;
Если ЗначениеЗаполнено ( Область ) И НЕ ТипЗнч ( Область ) = Тип ( "Строка" )Тогда
Отбор = Построитель . Отбор . Добавить ( "Область" );
Отбор . Использование = Истина;
Отбор . ВидСравнения = ВидСравнения . Равно ;
Отбор . Значение = Область ;
КонецЕсли;
Отбор = Построитель . Отбор . Добавить ( "ВидНаселенногоПункта" );
Отбор . Использование = Истина;
Если ЭтоРайон Тогда
Отбор . ВидСравнения = ВидСравнения . Равно ;
Отбор . Значение = Справочники . ВидыНаселенныхПунктов . Район ;
Иначе
Отбор . ВидСравнения = ВидСравнения . НеРавно ;
Отбор . Значение = Справочники . ВидыНаселенныхПунктов . Район ;
КонецЕсли;
Построитель . Выполнить ();
Таблица = Построитель . Результат . Выгрузить ();
Для Каждого Строка Из Таблица Цикл
ДанныеВыбора . Добавить ( Строка . Ссылка , Строка . Наименование );
КонецЦикла;
В данном случае, при вводе по строке, будет отображаться список районов, которые отфильтрованы по области, виду населенного пункта и родителю.
Началось все с того, что штатный автоподбор при вводе по строке в поле ввода для некоторых больших справочников устраивать перестал. Вообще, для способа поиска строки "Любая часть" он работает на первый взгляд очень хорошо: работает как полнотекстовый (т.е. по нескольким словам) даже без активации полнотекстового поиска, красиво подсвечивает слова поиска в результатах. Казалось бы, все отлично. Но есть неприятное ограничение - всего лишь 10 значений в результирующем списке (у вас может быть несколько больше, так как платформа неявно добавляет результаты поиска по истории ввода). Для небольших справочников или справочников с разнородным ассортиментом все хорошо. Но не в моей ситуации. А простых путей увеличить количество выдаваемых строк на момент написания статьи мне обнаружить не удалось. Пришлось полностью переопределять автоподбор. Ниже речь пойдет именно об этом. И, к слову, в типовых конфигурациях для некоторых справочников используются похожие приемы для увеличения количества строк результата автоподбора.
Ниже будет выложен готовый код. А тут несколько вводных слов к нему.
Альтернативный алгоритм максимально близок к штатному автоподбору при вводе по строке с режимом поиска по строке "Любая часть". Строки результата в которых слова поиска находятся в начале строки выдаются первыми. Чтобы изменить количество строк выдаваемого результата достаточно изменить значение переменной "МаксимумСтрокРезультата". Из забавного: подсветку слов поиска в результате пришлось реализовывать вручную в функции ПодсветитьСлова() и это оказалось сопоставимо по объему с остальным кодом.
Формирование списка позиций для автоподбора перехватывается в модуле менеджера объекта (соответствующего типу значения для поля ввода). Обработчик называется ОбработкаПолученияДанныхВыбора(). Собственно, в этом обработчике и необходимо организовать альтернативный алгоритм получения данных автоподбора при вводе по строке. К слову, получение данных выбора можно инициировать программно, вызвав метод модуля менеджера объекта ПолучитьДанныеВыбора().
Но так как может оказаться нежелательным менять алгоритм автоподбора при вводе по строке сразу для всех полей ввода в конфигурации, ниже будет демонстрация приема переопределения для конкретного поля ввода "Номенклатура" в модуле некоей формы с помощью перехвата события поля ввода "Автоподбор":
Как видно из кода выше, для получения данных выбора мы передаем структуру с двумя параметрами - "СтрокаПоиска" и "ВводПоСтрокеРасширенный". Первый параметр является предопределенным и обязательным. А второй - это наш опциональный признак использования альтернативного алгоритма.
Ниже код модуля менеджера справочника "Номенклатура":
Вот, собственно, и все чем я хотел поделиться в этой статье. Надеюсь, кому-то она сэкономит время.
Господа специалисты, помогите разобраться! Описание ситуации: В управляемой форме есть реквизит "ПолеВводаПоиска" - Строка и "СписокНайденных" - ТаблицаЗначений. Оба расположены на форме. Вид строкового реквизита на форме - поле ввода. Для него определен обработчик "АвтоПодбор": Суть проблемы: После ввода символов в "ПолеВводаПоиска" и срабатывания обработчика АвтоПодбор текст в поле очищается. Если закомментировать строку "СписокНайденных.Очистить;" текст не пропадает. Вопрос: Как сделать, чтобы текст не пропадал?
>>Если закомментировать строку "СписокНайденных.Очистить;" текст не пропадает. >>Как сделать, чтобы текст не пропадал? Такие высказывания у меня вызывают когнитивный диссонанс.
В каких ситуациях вы используете обработчик события "АвтоПодбор", помимо формирования собственного списка выбора?
Хочу реализовать такой механизм: Пользователь вводит в поле текст. По мере ввода происходит поиск данных и они отображаются в таблице. Для этого использую обработчик АвтоПодбор в котором происходит поиск и отображение найденных данных по введенному фрагменту текста. Все работает, но текст в поле ввода всегда очищается. В этом проблема.
Скорее всего вот из-за этого В обработчике события АвтоПодбор нельзя использовать серверные методы формы с директивой компиляции НаСервере.
В ходе экспериментов обнаружил интересную вещь. Если сделать так, то будет постоянный вывод текущего времени (получится бесконечный цикл):
Уверен? включи показатели производительности и посмотри есть ли вызовы сервера. Иногда что-то не очевидно :)
В синтакс-помощнике черным по белому написано - ". нельзя использовать серверные методы формы с директивой компиляции НаСервере.", и не сказано про неявные вызовы сервера. Показатели производительности включены - нет вызова сервера.
ДанныеВыбора не заполняю. Мне не нужно заполнять стандартный список выбора. СписокНайденных - это таблица значений, которая заполняется при срабатывании обработчика АвтоПодбор.
какой-то бред. АвтоПодбор это событие, с помощью которого можно заполнить ДанныеВыбора, из которых пользователь выберет то, что ему выпало в этом списке ДанныеВыбора.
Спорить не буду. Все верно. Но это при стандартной обработке. Такое описано в букварях. Читать я умею и не стал бы обращаться за помощью в таком случае.
ну если вы используете процедуры и функции не по назначению, скажем так, платформа не всегда может однозначно отработать.
Очень жаль, что у нас вами такая платформа, если она по разному отрабатывает события в управляемом и обычном режиме.
у меня прекрасная платформа, которая прекрасно работает в сценариях, которые в ней предусмотрены. Обижаться на то, что моя машина не может вылезти из кучи снега, потому что рассчитана на быструю езду по автобанам - я бы не стал. Так же и тут. Есть сценарий - он реализован, отлажен и работает. Если используется какой-то хак - это уже не проблемы платформы. У меня есть похожий сценарий и у меня все работает, только я руками не заполняю таблицы, а устанавливаю отборы на демонический список, никаких очисток не происходит, все гуд.
Платформа - 8.2.17.143. Накидал пример: &НаКлиенте Отбор устанавливается. Текст в поле ввода очищается.
да, виноват, соседнюю процедуру скопировал, но сути не меняет &НаКлиенте Процедура Наименование1АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) нет, конкретно твой не пробовал, но отличий на взгляд не вижу, надо искать другие отличия
тоже проверил на другой базе клиент-серверной. Там все ок. Похоже дело в конкретной базе. Буду с ней экспериментировать.
Режим совместимости случайно не включен? Когда в своей базе включаю режим совместимости 8.2.13, то все ок.
Добрый день!
Меня зовут Дмитрий, я профессионально занимаюсь поиском, подбором и помощью в выборе и покупке хорошего автомобиля с пробегом под требования заказчика, Рязань, Москва(без выезда в Москву, работаем совместно в подборе и осмотрах с моим коллегой) ЦФО.
Показать полностью.
Я не работаю на какую либо компанию и дорожу своей репутацией. Всегда осматриваю и проверяю авто перед покупкой "как для себя". Главный мой принцип - это честность. Поэтому я никогда не пойду на сговор с продавцом авто, с целью обмануть покупателя. Я веду свой проект "Автоподбор своими силами" в соц.сетях, в котором даю полезные советы автолюбителям и выкладываю отчеты моей работы. Подробности в vk или в Instagram .
В своей работе я применяю только профессиональное оборудование: толщиномер ETARI ET11P, мультимарочный сканер Launch X431Pro, профинальные программы, ODIS (ваговская группа), Xentry Pass Thru (мерс), Rheingold (BMW), Techstream (TOYOTA), JLR-SDD (Land Rover), FORScan (форд+мазда),
фонарь УФ-свечения Convoy S2+ и др.
После заказа услуги, составляю договор и отправляю его Вам на подпись, Вы вносите предоплату, а я максимально оперативно выезжаю на осмотр. Если у Вас нет свободного времени или Вы из другого региона, я проведу осмотр без Вас и после осмотра высылаю (WhatsApp, Viber) полный фото отчёт с рекомендациями и указанием всех недостатков.
СТОИМОСТЬ УСЛУГ:
Авто-диагностика в зависимости от класса автомобиля от-500 руб
Выездной осмотр одного автомобиля от - 4 000 руб.
Нужно осмотреть сразу несколько автомобилей - 10 000 руб. (без ограничения осмотров на весь день)
Поиск и подбор автомобиля под ключ по вашим параметрам от 16 000 руб.
Обоснованный торг с продавцом автомобиля почти всегда компенсирует заказчику стоимость моих услуг.
Стоимость выезда за город оговаривается индивидуально, но не менее 1000 руб.
При необходимости, возможна встреча на вокзале/в аэропорту.
Ложный выезд (отсутствие возможности осмотра авто, по независящим от меня причинам) – 2000 руб.
Работаю с 08:00 до 21:00. Звоните или пишите, отвечу на все Ваши вопросы. Консультация без выезда - БЕСПЛАТНО.
ЧТО ПРОВЕРЯЮ ПРИ ВЫЕЗДНОЙ ДИАГНОСТИКЕ АВТОМОБИЛЯ:
Подлинность документов собственника
На предмет залога и ограничения на регистрационные действия, Vin номер
На участие в ДТП
Лакокрасочное покрытие и силовые элементы кузова, болты, остекление и шины авто.
Двигатель, коробку передач, рулевую рейку, подвеску, износ шин и тормозных дисков.
Подкапотное пространство на наличие течей, состояние тормозной системы
Диагностирую все электронные блоки, реальный пробег
В заключении провожу аргументированный торг с продавцом
✅РАЗОВЫЙ ОСМОТР АВТОМОБИЛЯ
СТОИМОСТЬ ОСМОТРА ПЕРЕД ПОКУПКОЙ ОТ 4 000 руб
_____________________________________________
Бюджет до 1 млн руб. - 4 000 руб
Бюджет до 2 млн руб. - 5 000 руб
Бюджет свыше 2 млн руб - 6 000 руб
Стоимость проверки от 4000 до 6000 руб, в зависимости от автомобиля.
В стоимость входит выезд специалиста в пределах МКАД.
ДИАГНОСТИКА КУЗОВА:
1 Осмотр кузовных деталей и остекления на предмет повреждений
2 Осмотр крепёжных элементов на предмет снятия/замены деталей
3 Замер толщины лако-красочного покрытия, определение перекрашенных и заменённых деталей кузова
4 Осмотр силовой конструкции кузова
5 Осмотр швов и сварки деталей на предмет ремонта
6 Осмотр шин и колёсных дисков, оптики
7 Осмотр салона, багажника
8 Анализ общего состояния и соответствия пробега по косвенным признакам
ОСМОТР УЗЛОВ И АГРЕГАТОВ:
1 Осмотр ДВС на предмет течей технических жидкостей
2 Осмотр КПП на предмет течей технических жидкостей
3 Осмотр рулевой рейки, насоса ГУР, проверка люфта в рулевом механизме
4 Осмотр редукторов, приводов, пыльников
5 Аудиальная проверка работы двигателя в различных режимах
6 Проверка уровня технических жидкостей
7 Осмотр ремней навесного оборудования
8 Осмотр тормозных дисков
9 Проверка наличия дымности при работе
10 Визуальный осмотр элементов подвески
КОМПЬЮТЕРНАЯ ДИАГНОСТИКА:
1 Опрос блоков управления, считывание и расшифровка кодов неисправности
2 Анализ работы топливной системы двигателя
3 Анализ давления во впуске
4 Анализ работы систем экологии
5 Анализ работы системы зажигания и пропусков воспламенения
6 Анализ работы блока антидетонации
7 Анализ работы систем наддува
8 Анализ работы системы изменения длинны впускного коллектора
9 Анализ работы систем изменения фаз газораспределения
10 Анализ равномерности работы цилиндров
11 Анализ высокого давления
12 Проверка давления хладагента
13 Проверка данных об удалении кодов неисправности
14 Поиск и анализ данных, связанных с пробегом
15 Анализ сопротивлений патронов подушек безопасности
ТЕСТ-ДРАЙВ:
1 Проверка наличия посторонних звуков при движении, торможении, развороте и проезде неровностей
2 Плавность переключения передач КПП
3 Плавность переключения режимов КПП
4 Прямолинейность движения, торможения
ЮРИДИЧЕСКАЯ ЧИСТОТА:
1 Проверка права собственности и права продажи
2 Проверка оригинальности ПТС
3 Проверка подлинности ПТС
4 Проверка подлинности паспорта собственника
5 Проверка по официальным базам на угон, обременения, запреты регистрационных действий, залог, кредит, работу в такси и каршеринге
6 Сверка идентификационных номеров на кузове, раме, ПТС, ЭБУ, двигателе
7 Проверка собственника на наличие исполнительных производств
8 Проверка данных о пробеге в он-лайн ресурсах
9 Проверка зафиксированных ДТП
✅АВТОПОДБОР ПОД КЛЮЧ
СТОИМОСТЬ УСЛУГИ ПОДБОРА ОТ 20 000 РУБ.
Бюджет от 500 тыс. руб. до 1 млн руб. - 20 000 руб.
Бюджет от 1 млн руб. до 1,5 млн руб. - 25 000 руб.
Бюджет от 1,5 млн руб. до 2 млн руб. - 30 000 руб.
Бюджет от 2 млн руб. до 3млн руб - 35 000 руб.
Бюджет от 3 млн руб. до 4 млн руб - 40 000 руб.
Бюджет от 4 млн руб. до 5 млн руб - 45 000 руб.
1. ЮРИДИЧЕСКАЯ ПРОВЕРКА:
• статус продавца
• проверка документов на автомобиль
• проверка собственника по базе ФССП
• наличие ограничений на регистрационные действия
• наличие залоговых обременений
• нахождение автомобиля в розыске
2. ПРОВЕРКА ИСТОРИИ АВТОМОБИЛЯ:
• участие в ДТП
• история регистрационных действий
• прохождение ГТО, пробег на момент прохождения ГТО
• проверка истории обслуживания
3. ОСМОТР АВТОМОБИЛЯ:
• проверка кузова на предмет проведения ремонтных работ и окрасов
• осмотр подкапотного пространства
• проверка работоспособности электроники
• компьютерная диагностика
• тест-драйв автомобиля
4. СОПРОВОЖДЕНИЕ СДЕЛКИ:
• встреча клиента на вокзале или в аэропорту
• полное сопровождение сделки и заполнение ДКП
• торг с продавцом
• краткий инструктаж по эксплуатации автомобиля (актуально для новичков)
При разработке форм подборов и организации отборов для удобства работы может возникнуть задача по автоматическому раскрытию текущей группы.
- упростить работу пользователю, выполнять 1 клик вместо 2;
- явно дать понять ему, что есть вложенные группы.
В такой простой задаче может возникнуть стопор из-за особенностей динамического списка:
- в метод Развернуть() таблицы формы следует передать идентификатор текущей строки (численное значение, согласно описанию в синтаксис-помощнике);
- в динамическом списке, когда источник и основная таблица есть справочник, метод ТекущаяСтрока() возвращает ссылку этого справочника, к которому не применим метод ПолучитьИдентификатор().
Решение проблемы:
Первое что необходимо сделать: проверить или установить свойство «Отображение» у таблице в значение «Дерево»
Оказывается в метод Развернуть() в данном случае можно передавать эту ссылку, т.к. источник справочник, в котором нет дублей, следовательно система однозначно идентифицирует данную строку и сможет ее развернуть или свернуть. Аналогично работает и метод Развернут().
Код события при «АктивизацииСтроки»
тд = Элементы . Дерево . ТекущиеДанные ;
Если Не тд = Неопределено Тогда
Если Элементы . Дерево . Развернут ( Элементы . Дерево . ТекущаяСтрока ) = Ложь Тогда
Элементы . Дерево . Развернуть ( Элементы . Дерево . ТекущаяСтрока , Ложь ) ;
КонецЕсли ;
КонецЕсли ;
Для удобства пользователя добавим, авто раскрытие/сокрытие при выборе(двойном клике, по уже активной строке):
Код события «Выбор»
Процедура ДеревоВыбор ( Элемент , ВыбраннаяСтрока , Поле , СтандартнаяОбработка )
ТС = Элементы . Дерево . ТекущаяСтрока ;
Если Элементы . Дерево . Развернут ( ТС ) = Истина Тогда
Элементы . Дерево . Свернуть ( ТС ) ;
Иначе
Элементы . Дерево . Развернуть ( ТС , Ложь ) ;
КонецЕсли ;
Данная статья также применима к плану счетов, планам видов характеристик и расчетов (которые имеют иерархическую структуру).
Как описываются машины в рекламных проспектах? Волнующие, эффектные, изящные, грациозные, обтекаемой формы. Прямо не знаешь, куда их вести — в гараж или в номер мотеля.
— Роберт Орбен
Читайте также: