При работе с документами, содержащими большой ассортимент (например, «Отчет о розничных продажах»), пользователи часто сталкиваются с неудобством: при попытке быстро набрать наименование номенклатуры с клавиатуры платформа 1С автоматически включает режим редактирования выбранной ячейки и открывает автоподбор из справочника, вместо того чтобы выполнить позиционирование по уже добавленным строкам табличной части.
Разберем подробнее, почему возникает такое поведение платформы и какие существует решения для настройки быстрого поиска по таблице формы.
В управляемых формах 1С для колонок с ссылочным типом данных (например, СправочникСсылка.Номенклатура) при наборе символов с клавиатуры платформа по умолчанию активирует редактирование ячейки. Из-за этого стандартный ввод с клавиатуры не выполняет быструю навигацию по добавленным строкам.
Кроме того, табличная часть на форме представляет собой объект ДанныеФормыКоллекция. В отличие от элемента ДинамическийСписок, стандартная таблица формы не имеет встроенной гибкой строки отбора по частичному совпадению подстроки без специальных настроек или программной обработки.
Проанализируем базовые свойства элементов формы в Конфигураторе, которые отвечают за реакцию на ввод с клавиатуры:
РежимРедактирования и установим значение «Вход» (вместо значения по умолчанию). Это предотвратит моментальный запуск редактирования ячейки при наборе первых букв.Поиск при вводе в значение «Использовать».Благодаря этим настройкам при вводе символов платформа будет выполнять быстрое позиционирование по начальным буквам наименования в строках таблицы, не переходя в режим редактирования.
Посмотрим на вариант, который можно реализовать прямо в пользовательском режиме без изменения конфигурации:
Номенклатура.Наименование.Если требуется искать позицию по частичному совпадению в любой части наименования (а не только по началу строки), рассмотрим программную реализацию:
ПоискНоменклатуры).ПриИзменении этого поля организуем обход строк табличной части и проверку наличия подстроки с помощью функции СтрНайти().ТекущаяСтрока и метод ПолучитьИдентификатор():
ИдентификаторСтроки = НайденнаяСтрока.ПолучитьИдентификатор();
Элементы.ТаблицаДокумента.ТекущаяСтрока = ИдентификаторСтроки;
Разберем альтернативные подходы для сценариев с большим объемом данных:
ДинамическийСписок, что позволяет быстро искать товар по любому вхождению строки, артикулу и остаткам с последующим переносом в документ.