Как вывести код номенклатуры и настроить поиск по нему в списках и форме подбора 1С:УТ 11

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

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

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

Часть 1. Вывод колонки «Код» в пользовательском режиме (Изменение формы)

Многие пользователи пытаются добавить колонку через стандартное меню «Еще — Настроить список». Однако в открывшемся окне доступны только настройки отбора, сортировки, группировки и условного оформления. Добавить новые колонки в таблицу там нельзя.

Для добавления полей необходимо использовать инструмент «Изменить форму», но здесь кроется неочевидный нюанс платформы 1С, который часто принимают за системную ошибку (баг). Разберем по шагам, как правильно вывести код:

  1. Откроем форму списка номенклатуры или форму подбора товаров в документ.
  2. В правом верхнем углу таблицы нажмем кнопку «Еще» и выберем пункт «Изменить форму...».
  3. В открывшемся дереве элементов найдем группу, соответствующую нашей таблице (например, СписокНоменклатура или Список).
  4. Развернем эту группу и найдем элемент, отображающий саму номенклатуру. Обычно он называется Ссылка, Номенклатура или Наименование.
  5. Внимание, важный секрет: если просто выделить папку списка, кнопка «Добавить поля» в правой части окна будет серой (неактивной). Чтобы сделать ее активной, необходимо спозиционироваться (кликнуть левой кнопкой мыши) непосредственно на поле Ссылка (или Номенклатура).
  6. После того как мы выделили поле Ссылка, кнопка «Добавить поля» станет доступной. Нажмем на нее.
  7. В открывшемся списке доступных реквизитов найдем и отметим галочкой пункт «Код» (при необходимости можно также отметить «Артикул», «Производитель» и другие реквизиты). Нажмем «ОК».
  8. В дереве элементов формы под полем Ссылка появится новое подчиненное поле Ссылка.Код. Мы можем управлять его положением на форме с помощью стрелок «Вверх» и «Вниз» на панели инструментов окна настройки.
  9. Нажмем кнопку «Применить», а затем «ОК». Колонки появятся на форме.

Проанализируем ситуацию: почему платформа ведет себя именно так? Это не баг, а продуманная архитектурная особенность оптимизации динамических списков управляемого приложения 1С. Динамический список считывает из базы данных только те поля, которые явно требуются для отображения. Поле Ссылка является объектом-контейнером. Когда мы указываем платформе, что хотим добавить поля «через Ссылку», система понимает, к какому именно объекту базы данных нужно обратиться, чтобы динамически дозагрузить реквизит Код, избегая избыточной нагрузки на СУБД.

Часть 2. Почему не работает поиск по части кода и как это исправить

После успешного вывода колонки Код пользователи часто сталкиваются со следующей проблемой: если ввести код номенклатуры целиком (например, 00-00001234), программа мгновенно находит товар. Но стоит ввести лишь последние цифры (например, 1234), поиск не выдает никаких результатов, несмотря на то, что полнотекстовый поиск в системе включен и индекс актуален.

Выясним причину этого поведения. В конфигурациях на базе ERP-платформы (включая УТ 11) поиск в списках может работать в двух принципиально разных режимах:

1. Расширенный поиск (Полнотекстовый поиск данных - ППД)

По умолчанию в современных базах включен именно этот режим. Механизм полнотекстового поиска оптимизирован для работы с огромными массивами текстовой информации. Он индексирует слова и числа как отдельные «токены». Код номенклатуры вида 00-00001234 воспринимается поисковым движком как единое неделимое слово. Соответственно, ППД может найти объект только при полном совпадении поискового запроса с этим токеном. Поиск по подстроке (по части «слова» из середины или конца) в данном режиме не поддерживается ради сохранения высокой скорости работы системы.

2. Стандартный поиск (поиск по подстроке средствами СУБД)

В этом режиме система транслирует поисковый запрос пользователя в классическое SQL-выражение с использованием оператора ПОДОБНО "%1234%". Такой поиск легко находит любые вхождения символов в коде, артикуле или наименовании, но на больших базах данных (сотни тысяч позиций) может вызывать существенные задержки (зависания) при вводе символов.

Рассмотрим, как переключить режим поиска в пользовательском интерфейсе:

  1. Перейдем в раздел НСИ и администрирование.
  2. В блоке Настройка параметров системы выберем пункт Номенклатура.
  3. Раскроем подраздел Настройка поиска и подбора.
  4. Найдем опцию, отвечающую за режим поиска, и переключим ее с «Расширенного» на «Стандартный поиск» (или настроим выборочные параметры поиска по штрихкоду, коду и артикулу).

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

Часть 3. Почему изменения динамического списка в Конфигураторе не помогают?

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

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

Часть 4. Программное решение разработчика (Использование механизмов расширений)

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

Рассмотрим пример решения задачи через перехват программного формирования динамического списка. Нам нужно добавить поле Код в запрос списка программно в процедуре-обработчике создания формы.

Пример кода расширения для формы подбора номенклатуры:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверим наличие элемента списка на форме
    ТаблицаСписка = Элементы.Найти("СписокНоменклатуры");
    Если ТаблицаСписка <> Неопределено Тогда
        
        // Получаем схему компоновки данных или текст запроса динамического списка
        ТекстЗапроса = СписокНоменклатуры.ТекстЗапроса;
        
        // Программно модифицируем запрос, добавляя выборку кода, если его там нет
        Если Не СтрНайти(ТекстЗапроса, "Номенклатура.Код") Тогда
            // Интегрируем поле Код в структуру запроса динамического списка
            // (В зависимости от логики построения запроса в конкретной версии УТ 11)
        КонецЕсли;
        
        // Программно добавляем колонку на форму для всех пользователей
        НовыйЭлемент = Элементы.Добавить("СписокНоменклатурыКод", Тип("ПолеФормы"), ТаблицаСписка);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "СписокНоменклатуры.Ссылка.Код";
        НовыйЭлемент.Заголовок = "Код";
        НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
        
    КонецЕсли;
    
КонецПроцедуры

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

Мы подробно разобрали все аспекты настройки видимости кода номенклатуры и управления механизмами поиска в управляемых формах 1С. Применение описанных методик позволит существенно повысить удобство и скорость работы менеджеров по продажам и кладовщиков при оформлении документов.

← На главную