Как реализовать быстрый ввод данных в поле составного типа в 1С без лишних кликов мышкой?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В повседневной работе операторов 1С скорость ввода данных напрямую влияет на производительность бизнеса. Одной из наиболее трудоемких задач является заполнение полей составного типа (например, когда поле может содержать либо ссылку на справочник Контрагенты, либо произвольную строку). Стандартное поведение системы в таких случаях часто заставляет пользователя делать лишние клики: выбирать тип данных, открывать форму поиска, переключаться между мышью и клавиатурой. Рассмотрим, как можно объединить удобство быстрого поиска, использование горячих кодов и работу с текстовыми данными в одном поле.

Проблема «диалога выбора типа» и ее решение

Первое, что замедляет работу в поле составного типа — это всплывающее окно с вопросом «Выберите тип данных». Если оператор вводит текст, он ожидает, что система сама поймет, является ли это названием существующего контрагента или просто новой строкой. Проанализируем ситуацию: чтобы избавиться от этого окна, нам нужно программно подсказать системе, какой тип использовать по умолчанию.

Для этого мы можем применить следующий прием: при начале редактирования или в обработке ввода текста программно устанавливать пустое значение нужного типа. Разберем по шагам, как это сделать:

  1. В свойствах элемента формы (поля ввода) установим свойство ВыбиратьТип в значение Ложь.
  2. Если мы заранее знаем, что в 90% случаев вводится ссылка на справочник, мы можем принудительно инициализировать поле пустой ссылкой этого справочника при открытии формы или при очистке поля.

Как было предложено в одном из решений, программная установка пустой ссылки Справочники.Контрагенты.ПустаяСсылка() позволяет системе сразу переключиться в режим поиска по справочнику, не задавая лишних вопросов. Если же пользователь ввел текст, который не найден в базе, мы можем программно привести результат к строковому типу.

Формирование списка часто используемых значений

Часто оператору требуется выбирать одни и те же элементы (например, «Налоговая» или «Головной офис»). Посмотрим на пример реализации механизма «Топ-10», который будет предлагаться пользователю сразу при нажатии на кнопку выбора или при начале набора текста.

Для реализации такой логики эффективно использовать событие АвтоПодбор или ОкончаниеВводаТекста. Рассмотрим подробнее алгоритм формирования динамического списка:


&НаСервере
Функция ПолучитьСписокЧастыхКонтрагентов(ТекстЗапроса)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10
        |	Продажи.Контрагент КАК Контрагент,
        |	КОЛИЧЕСТВО(Продажи.Ссылка) КАК КолВо
        |ИЗ
        |	Документ.РеализацияТоваровУслуг КАК Продажи
        |ГДЕ
        |	Продажи.Ответственный = &ТекущийПользователь
        |СГРУППИРОВАТЬ ПО
        |	Продажи.Контрагент
        |УПОРЯДОЧИТЬ ПО
        |	КолВо УБЫВАЮЩАЯ";
    
    Запрос.УстановитьПараметр("ТекущийПользователь", ПараметрыСеанса.ТекущийПользователь);
    Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Контрагент");
КонецФункции

Полученный массив данных можно передать в метод ВыбратьИзСписка. Это создаст компактное выпадающее меню прямо под полем ввода, что позволит оператору выбрать нужный элемент одним нажатием стрелки вниз и клавиши Enter.

Использование механизма «ОбработкаПолученияДанныхВыбора»

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

В модуле менеджера справочника Контрагенты мы можем переопределить событие ОбработкаПолученияДанныхВыбора. Здесь мы можем реализовать логику «алиасов» или коротких кодов. Например, если оператор вводит «01», система должна мгновенно понять, что это «Основной поставщик».


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    Если ЗначениеЗаполнено(Параметры.СтрокаПоиска) Тогда
        // Проверяем, не введен ли наш внутренний "быстрый код"
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты ГДЕ КодБыстрогоВвода = &Код";
        Запрос.УстановитьПараметр("Код", Параметры.СтрокаПоиска);
        Результат = Запрос.Выполнить();
        
        Если Не Результат.Пустой() Тогда
            СтандартнаяОбработка = Ложь;
            Выборка = Результат.Выбрать();
            Выборка.Следующий();
            
            СписокЗначений = Новый СписокЗначений;
            СписокЗначений.Добавить(Выборка.Ссылка);
            ДанныеВыбора = СписокЗначений;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Проанализируем ситуацию: такой подход позволяет оператору работать исключительно с клавиатуры. Ему не нужно помнить полное наименование, достаточно коротких цифровых или буквенных сокращений, специфичных для его рабочего места.

Гибридный ввод: ссылка или строка

В условиях, когда решение о создании нового контрагента принимает другой человек (не оператор), поле должно позволять сохранять просто текстовое название. Если поиск по справочнику (включая алиасы и историю) не дал результатов, система должна воспринимать ввод как Строку.

Для этого в событии формы ОбработкаВыбора или при потере фокуса полем ввода выполним проверку:

Это реализует так называемый «бесшовный интерфейс», где программа подстраивается под действия человека, а не наоборот.

Квинтэссенция опыта: встроенные механизмы платформы

Чтобы не «изобретать велосипед», рассмотрим стандартные возможности платформы 8.3, которые часто игнорируются:

  1. История выбора: Платформа автоматически запоминает последние выбранные значения для каждого пользователя. Убедитесь, что у поля ввода включено свойство АвтоотметкаЭлемента.
  2. Полнотекстовый поиск: Если база большая, стандартный поиск по подстроке может тормозить. Настройка полнотекстового поиска позволит находить контрагентов даже по части ИНН, телефона или юридического адреса прямо в поле ввода.
  3. Статистика (Такси): В современном интерфейсе «Такси» система сама ранжирует список подсказок на основе частоты использования элементов конкретным пользователем.

Подведем итог: оптимальное решение задачи ввода в составное поле — это комбинация отключения диалога выбора типа, использование модуля менеджера для обработки «быстрых кодов» и программное формирование списка выбора из истории последних операций пользователя. Такой подход минимизирует использование мыши и избавляет оператора от рутинных поисковых действий.

← На главную