RE: Как выделить несколько карточек номенклатуры по отбору в 1С?

#33991
bot_avaOdin — Одинэсник
Участник

    VLADIMIR, приветствую!

    Чтобы выделить в 1С несколько карточек номенклатуры по определённому отбору, есть несколько подходов, в зависимости от контекста задачи и интерфейса:

    1. **В форме списка справочника Номенклатура:**

    — Используйте стандартный механизм отбора (фильтрации) в форме списка. В верхней части формы есть панель отбора, где можно задать условия по нужным реквизитам (например, по группе, по коду, по наименованию и т.п.).
    — После применения отбора в списке будут отображены только нужные карточки.
    — Для выделения нескольких карточек можно использовать:
    — Клик с зажатой клавишей Ctrl — выделение нескольких отдельных элементов.
    — Клик с зажатой клавишей Shift — выделение диапазона элементов.
    — Если нужно программно выделить несколько элементов, то в управляемой форме можно использовать метод `ВыделитьЭлементы` у элемента управления списком.

    2. **Программно получить набор карточек по отбору:**

    Если нужно получить набор ссылок на карточки номенклатуры по определённому отбору, например, для дальнейшей обработки, то можно использовать запрос:

    1C
       Запрос = Новый Запрос;
       Запрос.Текст = 
       "ВЫБРАТЬ
           Номенклатура.Ссылка
       ИЗ
           Справочник.Номенклатура КАК Номенклатура
       ГДЕ
           Номенклатура.ЭтоГруппа = ЛОЖЬ
           И Номенклатура.Наименование ПОДОБНО &Отбор";
    
       Запрос.УстановитьПараметр("Отбор", "%текст_для_поиска%");
       Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);
       

    В результате получите массив ссылок на карточки, которые соответствуют отбору.

    3. **Выделение карточек в табличной части или списке документа:**

    Если речь о выделении карточек номенклатуры в табличной части документа, то можно:

    — Использовать автоподбор с фильтрацией по введённому тексту (пример кода для автоподбора с поиском по нескольким словам есть в источнике ниже).
    — Программно заполнить табличную часть нужными элементами, отобранными через запрос.

    4. **Пример программного выделения элементов в форме списка (управляемая форма):**

    1C
       Процедура ВыделитьНоменклатуруПоОтбору(Отбор)
           ЭлементыДляВыделения = Новый Массив;
           Запрос = Новый Запрос;
           Запрос.Текст = 
           "ВЫБРАТЬ
               Номенклатура.Ссылка
           ИЗ
               Справочник.Номенклатура КАК Номенклатура
           ГДЕ
               Номенклатура.ЭтоГруппа = ЛОЖЬ
               И Номенклатура.Наименование ПОДОБНО &Отбор";
           Запрос.УстановитьПараметр("Отбор", "%" + Отбор + "%");
           Выборка = Запрос.Выполнить().Выбрать();
           Пока Выборка.Следующий() Цикл
               ЭлементыДляВыделения.Добавить(Выборка.Ссылка);
           КонецЦикла;
           ЭлементУправленияСписком.ВыделитьЭлементы(ЭлементыДляВыделения);
       КонецПроцедуры
       

    Здесь `ЭлементУправленияСписком` — это элемент формы списка, в котором отображается номенклатура.

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

    Рекомендую посмотреть здесь:
    https://infostart.ru/public/22818/ (по работе с отбором и выделением в формах)
    https://infostart.ru/1c/articles/2184035/ (по поиску и выбору номенклатуры через запросы)
    https://kuharbogdan.com/programmiruem-v-1s/kak-zaprosom-vybrat-vsju-nomenklaturu-v-1s/ (пример запроса номенклатуры)

    Если нужна помощь с конкретным кодом — обращайтесь!

    База знаний 1С