[8.1] Ввод по подстроке (альтернативный, расширенный)

24.08.11

Разработка - Механизмы платформы 1С

Ввод по подстроке (содержит)
Вывод данных элементов перед выбором (пометка удаления, код, проведен и т.д.)
Более дружелюбный к пользователю вариант работы

Скачать файлы

Наименование Файл Версия Размер
База (пример)
.dt 29,53Kb
155
.dt 29,53Kb 155 Скачать

  В конфигураторе для ввода по строке мы можем задавать поля по которым производится поиск,
но есть одна неприятность поиск производится при принципу начинается с "Введеный текст" (Подобно "Введеный текст%"). Это не всегда удобно  т.к. пользователи называет объекты не придерживаясь определенных правил, например: "ОАО Рога и копыта", "Рога и копыта ОАО" в результате становится проблемным нахождение этого значения. Более удобен поиск по содержит.

Данный пример реализует поиск (ввод по строке) по содержит:

Идея взята из конфигурация Деньги (1.0.21.1) для статей расхода ввод по подстроке осуществляется по содержит. Также в этой же конфигурации если в поле введены некорректные данные программа не сообщает назойливо "Введены некорректные данные отменить ввод Да,Нет?", а более разумно открывает сразу форму для выбора.

Что реализует данный пример? чем полезен? (достоинства по сравнению со стандартным)

  1. Пример показывает как можно реализовать произвольный ввод по подстроке.  Например: ИНН 2672852 - ищет контрагента по ИНН; "Рога и копыта" ИЛИ "Поставщик рогов"; "Перемещение товаров НМ000001464 от 29.07.2011 0:00:00" - поиск по представлению для документа; 1824 поиск по номеры карты больного хотя коды наподобее 00001824, ...; или там где стандартный ввод по подстроке не работает.

  2. Нахождение элементов по содержит

  3. Для элементов перед выбором выводится больше информации. Отображается помеченные на удаление эл. справочники и документы, предопределенные эл. справочника, для документов наглядно видно проведен или нет. Выводится информация о коде эл. справочника в больших случаях чем при стандартной обработке.

Недостатки: Имеются мелкие неприятности которые опишу ниже, трудоемкость добавления (есть формы которые нужно переделать если нужно сделать подобное повсеместным)

  Мелкие неприяности, особенности

Есть стандартное для платформы 1С завершение строки когда единственный элемент пытается помочь подставив его

На данный момент работает для справочников и документов (учитывает ВводПоСтроке заданный в конфигураторе). Хотел сделать для многих типов объектов, не получилось стопорнулся на перечислениях. Для системных перечислений реализовать подобное только кодом.

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4506    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5286    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6408    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18470    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12086    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8813    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6277    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15980    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. Evg-Lylyk 4559 02.08.11 10:34 Сейчас в теме
Ввод по подстроке (содержит)
Вывод данных элементов перед выбором (пометка удаления, код, проведен и т.д.)
Более дружелюбный к пользователю вариант работы


Перейти к публикации

1. German 413 02.08.11 10:34 Сейчас в теме
Отлично давно нужно было
25. Evg-Lylyk 4559 12.09.11 19:38 Сейчас в теме
(1),(6),(7),(8),(10),(12),(14),(23),(24)
Реализовал эту же идею на 8.2 более функционально
http://infostart.ru/public/89892/
(13) Реализовал на 8.2 со всеми пожеланиями и замечаниями.
27. Walker.pro 7 19.06.13 09:13 Сейчас в теме
(25)
Можете объяснить, для чего в запросе в условии на получение списка объектов используется СПЕЦСИМВОЛ?
2. German 413 02.08.11 10:36 Сейчас в теме
а для табличного поля?, насколько я вижу тут используется
ВыбратьИзСписка
3. Evg-Lylyk 4559 02.08.11 10:56 Сейчас в теме
(2) Извините не совсем понял... Имеется ввиду Табличная часть с полем?
4. German 413 02.08.11 11:54 Сейчас в теме
5. Evg-Lylyk 4559 02.08.11 13:36 Сейчас в теме
(5) тоже самое, пример дополнил, скриншот добавил
6. noprogrammer 236 02.08.11 16:30 Сейчас в теме
Классная штука, есть маленькая фича - если код справочника имеет тип "Число", то выскакивает ошибка.
9. Evg-Lylyk 4559 03.08.11 11:39 Сейчас в теме
(6) Да есть такое, но я не знаю как "нормальным способом" в запросе привести любой тип к строке чтобы применить к нему ПОДОБНО :(
Изначально я хотел сделать подобное и для перечислений с ними проблема надо привести тип СсылкаПеречисление к строке.
7. CaSH_2004 372 03.08.11 00:32 Сейчас в теме
Очень порадовало оформление, да и работа реально актуальная! Огромный плюс, хотя проверять некогда, надеюсь исполнение не разачарует.
8. orefkov 1152 03.08.11 11:34 Сейчас в теме
Исправьте в описании

начинается с "Введеный текст" (Подобно "%Введенный текст")

на

начинается с "Введеный текст" (Подобно "Введенный текст%")
19. Evg-Lylyk 4559 24.08.11 18:46 Сейчас в теме
Чего то у меня уведомления о комментариях не приходили... поэтому долго отвечал
(8), (12), (10) Спасибо, исправил
(16) Добавил разрешенные
(17) Да это пример идеи и реализация...там еще много чего делать до разумной универсальности. Я обычно если чтото беру на инфостарте основательно смотрю переделываю... вообщем кому надо тот под свои нужды подкорректирует.
(18) По поиску по словам дельная мысль учту. Хочу сделать для 8.2 (УФ) реализую по максимуму все пожелания
"В итоге для числовых кодов такое решение не подойдет" да, я тоже к сожалению не нашел хорошего метода
10. noprogrammer 236 04.08.11 10:52 Сейчас в теме
маленькая фича, если в поле с типом докумем выбрать неправильное значение - открывается выбор справочника, исправляется просто.
Меняем
Если КоличествоЗначенийДляВыбора = 0 Тогда
    Форма = Справочники.ТестовыйСправочник.ПолучитьФормуВыбора(,Элемент,"");


На
Если КоличествоЗначенийДляВыбора = 0 Тогда
	//Пользователь ввел не найд. текст Открываем форму выбора
	НайденныйОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ТекущееЗначение));
	Если Метаданные.Справочники.Содержит(НайденныйОбъектМетаданных) Тогда //Справочник
		Форма = Справочники[НайденныйОбъектМетаданных.Имя].ПолучитьФормуВыбора(,Элемент,"");
	ИначеЕсли Метаданные.Документы.Содержит(НайденныйОбъектМетаданных) Тогда //Документ
		Форма = Документы[НайденныйОбъектМетаданных.Имя].ПолучитьФормуВыбора(,Элемент,"");
	КонецЕсли;	
Показать
Evg-Lylyk; +1 Ответить
11. Evg-Lylyk 4559 04.08.11 23:24 Сейчас в теме
(10) Спасибо, не увидел когда тестил
12. BorovikSV 1036 09.08.11 06:23 Сейчас в теме
(Подобно "%Введеный текст")

Правильней будет: (Подобно "Введеный текст%")
Evg-Lylyk; +1 Ответить
13. artbear 1448 13.08.11 13:46 Сейчас в теме
Красиво.
Не хватает еще фичи поиска по нескольким словам.
Например: набрали "иван п", и получили Иванов Петр

ИМХО реализовать несложно - раскладываем этот текст на отдельные слова ("иван", "п"),
и добавляем несколько условий Подобно со связкой И
Что скажете?

ЗЫ подобную фичу мы юзали в Телепате и Интеллисенс 77, а сейчас в Снегопате.
Очень удобно - подобное поведение "позаимствовано" у браузера Опера.
14. cool.vlad4 2 13.08.11 13:56 Сейчас в теме
Эх, я только проснулся :D
(13)
Запрос = Новый Запрос;

//Разложим строку на подстроки и по каждой подстроке сделаем условие подбора
МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ШаблонПоиска," ");
НомерСтроки = 0;
УсловиеОтбора = "";
Для каждого строка из МассивСтрок Цикл
// заменим спецсимволы
ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "~", "~~");
ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "%", "~%");
ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "_", "~_");
ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "[", "~[");
ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "-", "~-");

Если УсловиеОтбора="" Тогда
УсловиеОтбора = "(Номенклатура." + ПоискПо + " ПОДОБНО &ШаблонПоиска"+НомерСтроки+" СПЕЦСИМВОЛ ""~"" ";
Иначе
УсловиеОтбора = УсловиеОтбора + "И Номенклатура." + ПоискПо + " ПОДОБНО &ШаблонПоиска"+НомерСтроки+" СПЕЦСИМВОЛ ""~"" ";
КонецЕсли;
Запрос.УстановитьПараметр("ШаблонПоиска"+НомерСтроки,"%"+строка+"%");
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
УсловиеОтбора = УсловиеОтбора+")";
Запрос.Текст = "
|ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
|"+?(УсловиеОтбора="","","ГДЕ ")+УсловиеОтбора;

Результат = Запрос.Выполнить().Выгрузить();

Что-то типа? (это для номенклатуры сделано)
Evg-Lylyk; +1 Ответить
15. artbear 1448 13.08.11 15:34 Сейчас в теме
(14) Да, что-то типа этого.
Но хотелось бы увидеть готовое универсальное решение именно для сабжа :)
16. artbear 1448 13.08.11 16:34 Сейчас в теме
(0) В Запрос нужно добавить Разрешенные для большей корректности кода
17. artbear 1448 18.08.11 10:23 Сейчас в теме
(0) Укажи, плиз, в описании:
При портировании кода в свою конфигурацию нужно также добавить картинки в библиотеку картинок
СправочникПометкаУдаления
СправочникПредопределенный
СправочникЭлемент
ДокументПроведен
ДокументПометкаУдаления
ДокументНеПроведен
18. artbear 1448 18.08.11 11:04 Сейчас в теме
(0) Если по какой-то причине в метаданных не настроены поля ввода по строке, то код не отработает :(
ИМХО несложно добавить для справочников Код и Наименование в этом случае, а для документов - Номер

Точнее, если у кода справочника или у номера документа тип Число, то данный код не будет работать.
Т.к. условие подобно к числу в запросе применить нельзя.
Представление также нельзя юзать в условии через подобно.
В итоге для числовых кодов такое решение не подойдет :(
20. CaSH_2004 372 01.09.11 08:32 Сейчас в теме
Аууу! Автор! Не открывается ни как обработка ни как база (ты это в ссылке на файл указал) ни в 8.1 ни 8.2
Что делать то? какое расширение верное, у меня сохраняется как epf а при открытии пишет:
Неверный формат хранилища данных 'file://D:/VvodPoStroke (rasshirennyj) 2.epf'
21. Evg-Lylyk 4559 02.09.11 16:48 Сейчас в теме
(20) У меня в старой опере 10.5 тоже не с тем расширением качается
Расширение файла должно быть .dt
22. CaSH_2004 372 02.09.11 17:08 Сейчас в теме
23. nata_07 106 08.09.11 17:21 Сейчас в теме
24. beland 08.09.11 17:45 Сейчас в теме
Любопытственно. Спасибо
26. ms200999 02.11.11 15:00 Сейчас в теме
28. uri1978 137 14.02.14 17:28 Сейчас в теме
Спасибо большое пригодилось в работе.
Оставьте свое сообщение