В типовой конфигурации «1С:Управление торговлей 10.3» (построенной на обычных формах) пользователи часто сталкиваются с неудобством при использовании обработки подбора номенклатуры. По умолчанию система активизирует колонку Наименование (Номенклатура), и инкрементальный поиск (поиск по строке) работает именно по ней. Однако во многих организациях основным идентификатором является Код или Артикул. В этой статье мы подробно разберем, как программно изменить поведение формы подбора так, чтобы при открытии поиск сразу был настроен на работу по колонке Код.
Первое, что важно понять при работе с обычными формами 1С — простого перевода «курсора» на колонку недостаточно. Программисты часто используют конструкцию ТекущаяКолонка, но она лишь визуально выделяет поле. Рассмотрим типичную ситуацию: вы программно установили фокус на код, пользователь начинает набирать цифры, а система все равно пытается искать эти цифры в наименованиях. Выясним причину такого поведения.
Для того чтобы «Поиск по строке» переключился на нужную нам колонку, необходимо, чтобы по этой колонке был установлен текущий порядок (сортировка) в объекте метаданных или таблице. Именно индекс сортировки определяет, в каком поле платформа будет искать данные «на лету».
Если в вашей версии подбора номенклатуры используется стандартный СправочникСписок, нам необходимо выполнить два действия одновременно: установить порядок сортировки и активизировать колонку. Проанализируем пример кода, который следует разместить в процедуре ПриОткрытии или в специализированных процедурах настройки формы подбора:
// Устанавливаем визуальный фокус на колонку "Код"
ЭтаФорма.ЭлементыФормы.СправочникСписок.ТекущаяКолонка = ЭтаФорма.ЭлементыФормы.СправочникСписок.Колонки.Код;
// Устанавливаем программную сортировку по Коду, чтобы активировать поиск
СправочникСписок.Порядок.Установить("Код");
Обратите внимание, что объект СправочникСписок — это основная переменная (тип значения), связанная с табличным полем на форме. Метод Порядок.Установить() принудительно заставляет платформу перестроить список и переключить режим поиска на указанное поле.
В УТ 10.3 подбор часто работает не напрямую со списком справочника, а через временные таблицы значений (ТЗ), чтобы отображать остатки и цены в реальном времени. В этом случае работа с объектом Порядок недоступна. Рассмотрим, как решить задачу для табличного поля, источником данных которого является ТаблицаЗначений.
Для таблиц значений поиск по строке автоматически привязывается к первой отсортированной колонке. Выполним следующие действия в процедуре ПерезаполнитьТаблицуНоменклатуры:
// Предположим, ТЗ называется НоменклатураДляПодбора
НоменклатураДляПодбора.Сортировать("Код Возр");
// Не забываем активизировать колонку для визуального удобства
ЭлементыФормы.ТабличноеПолеНоменклатура.ТекущаяКолонка = ЭлементыФормы.ТабличноеПолеНоменклатура.Колонки.Код;
Использование метода Сортировать для объекта ТаблицаЗначений гарантирует, что при вводе символов с клавиатуры платформа начнет сопоставлять их с данными в колонке Код.
Иногда даже после внесения вышеуказанных правок поиск продолжает сбрасываться на «Наименование». Проанализируем ситуацию: в типовых решениях на обычных формах встроен механизм Сохранение настроек. В конце процедуры ПриОткрытии система может вызывать метод ВосстановитьДанныеФормы, который перекрывает ваши программные установки теми, что были у пользователя при последнем закрытии окна.
Чтобы обойти это ограничение, мы рекомендуем использовать «отложенный вызов» через обработчик ожидания. Посмотрим на пример реализации:
1. В процедуре ПриОткрытии добавим вызов:
ПодключитьОбработчикОжидания("УстановитьФокусНаКод", 0.1, Истина);
2. Создадим саму процедуру в модуле формы:
Процедура УстановитьФокусНаКод() Экспорт
// Проверяем доступность колонки и устанавливаем порядок
Попытка
ЭлементыФормы.СправочникСписок.ТекущаяКолонка = ЭлементыФормы.СправочникСписок.Колонки.Код;
СправочникСписок.Порядок.Установить("Код");
Исключение
// Обработка случая, если колонка скрыта или недоступна
КонецПопытки;
КонецПроцедуры
Метод ПодключитьОбработчикОжидания с интервалом 0.1 секунды позволяет коду выполниться сразу после того, как форма полностью прогрузится и все системные механизмы восстановления настроек завершат свою работу.
Проверьте тип данных колонки Код в вашей конфигурации. Если код является числовым, поиск по строке может работать специфически (требовать нажатия Enter). Наилучшая работа инкрементального поиска в 1С достигается на текстовых полях. Если поиск «не подхватывает» первые цифры, убедитесь, что в свойствах таблицы на форме включено свойство ПоискПоСтроке.
Таким образом, мы рассмотрели комплексный подход к настройке формы подбора. Сочетание программной установки порядка, активации текущей колонки и использования обработчика ожидания позволяет добиться стабильного поведения формы, экономя время пользователя при массовом подборе товара по кодам.