Как установить активную колонку Код и поиск по ней в подборе номенклатуры УТ 10.3

Программист 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В типовой конфигурации «1С:Управление торговлей 10.3» (построенной на обычных формах) пользователи часто сталкиваются с неудобством при использовании обработки подбора номенклатуры. По умолчанию система активизирует колонку Наименование (Номенклатура), и инкрементальный поиск (поиск по строке) работает именно по ней. Однако во многих организациях основным идентификатором является Код или Артикул. В этой статье мы подробно разберем, как программно изменить поведение формы подбора так, чтобы при открытии поиск сразу был настроен на работу по колонке Код.

Разберем разницу между визуальным фокусом и индексом поиска

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

Для того чтобы «Поиск по строке» переключился на нужную нам колонку, необходимо, чтобы по этой колонке был установлен текущий порядок (сортировка) в объекте метаданных или таблице. Именно индекс сортировки определяет, в каком поле платформа будет искать данные «на лету».

Решение для динамического списка (СправочникСписок)

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


// Устанавливаем визуальный фокус на колонку "Код"
ЭтаФорма.ЭлементыФормы.СправочникСписок.ТекущаяКолонка = ЭтаФорма.ЭлементыФормы.СправочникСписок.Колонки.Код;

// Устанавливаем программную сортировку по Коду, чтобы активировать поиск
СправочникСписок.Порядок.Установить("Код");

Обратите внимание, что объект СправочникСписок — это основная переменная (тип значения), связанная с табличным полем на форме. Метод Порядок.Установить() принудительно заставляет платформу перестроить список и переключить режим поиска на указанное поле.

Решение для подбора через Таблицу Значений (режимы Остатки и Цены)

В УТ 10.3 подбор часто работает не напрямую со списком справочника, а через временные таблицы значений (ТЗ), чтобы отображать остатки и цены в реальном времени. В этом случае работа с объектом Порядок недоступна. Рассмотрим, как решить задачу для табличного поля, источником данных которого является ТаблицаЗначений.

Для таблиц значений поиск по строке автоматически привязывается к первой отсортированной колонке. Выполним следующие действия в процедуре ПерезаполнитьТаблицуНоменклатуры:


// Предположим, ТЗ называется НоменклатураДляПодбора
НоменклатураДляПодбора.Сортировать("Код Возр");

// Не забываем активизировать колонку для визуального удобства
ЭлементыФормы.ТабличноеПолеНоменклатура.ТекущаяКолонка = ЭлементыФормы.ТабличноеПолеНоменклатура.Колонки.Код;

Использование метода Сортировать для объекта ТаблицаЗначений гарантирует, что при вводе символов с клавиатуры платформа начнет сопоставлять их с данными в колонке Код.

Проблема восстановления настроек пользователя

Иногда даже после внесения вышеуказанных правок поиск продолжает сбрасываться на «Наименование». Проанализируем ситуацию: в типовых решениях на обычных формах встроен механизм Сохранение настроек. В конце процедуры ПриОткрытии система может вызывать метод ВосстановитьДанныеФормы, который перекрывает ваши программные установки теми, что были у пользователя при последнем закрытии окна.

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

1. В процедуре ПриОткрытии добавим вызов:

ПодключитьОбработчикОжидания("УстановитьФокусНаКод", 0.1, Истина);

2. Создадим саму процедуру в модуле формы:


Процедура УстановитьФокусНаКод() Экспорт
    // Проверяем доступность колонки и устанавливаем порядок
    Попытка
        ЭлементыФормы.СправочникСписок.ТекущаяКолонка = ЭлементыФормы.СправочникСписок.Колонки.Код;
        СправочникСписок.Порядок.Установить("Код");
    Исключение
        // Обработка случая, если колонка скрыта или недоступна
    КонецПопытки;
КонецПроцедуры

Метод ПодключитьОбработчикОжидания с интервалом 0.1 секунды позволяет коду выполниться сразу после того, как форма полностью прогрузится и все системные механизмы восстановления настроек завершат свою работу.

Важные замечания по типам данных

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

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

← На главную